rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReportMsgService.java
@@ -3,6 +3,7 @@ import com.vincent.rsf.framework.common.R; import com.vincent.rsf.server.api.controller.erp.params.ReportParams; import com.vincent.rsf.server.api.entity.dto.PoItemsDto; import com.vincent.rsf.server.manager.entity.WkOrder; import java.util.List; @@ -20,4 +21,6 @@ R uploadReportOrders(ReportParams params); R uploadCheckOrder(ReportParams params); void reportOrders(WkOrder order); } rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java
@@ -12,6 +12,7 @@ import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.config.RemotesInfoProperties; import com.vincent.rsf.server.api.controller.erp.params.ReportDataParam; import com.vincent.rsf.server.api.controller.erp.params.ReportParams; import com.vincent.rsf.server.api.entity.CommonResponse; import com.vincent.rsf.server.api.entity.constant.RcsConstant; @@ -19,13 +20,16 @@ import com.vincent.rsf.server.api.entity.params.ErpInspectItem; import com.vincent.rsf.server.api.entity.params.ErpInspectParams; import com.vincent.rsf.server.api.service.ReportMsgService; import com.vincent.rsf.server.manager.entity.WkOrder; import com.vincent.rsf.server.manager.entity.WkOrderItem; import com.vincent.rsf.server.manager.entity.Purchase; import com.vincent.rsf.server.manager.service.AsnOrderItemService; import com.vincent.rsf.server.manager.service.AsnOrderService; import com.vincent.rsf.server.manager.service.PurchaseService; import com.vincent.rsf.server.common.utils.FieldsUtils; import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.enums.OrderReportStatus; import com.vincent.rsf.server.manager.enums.OrderType; import com.vincent.rsf.server.manager.enums.OrderWorkType; import com.vincent.rsf.server.manager.service.*; import com.vincent.rsf.server.system.entity.User; import com.vincent.rsf.server.system.service.UserService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; @@ -66,6 +70,12 @@ private AsnOrderItemService asnOrderItemService; @Autowired private RemotesInfoProperties.RcsApi rcsApi; @Autowired private UserService userService; @Autowired private StockItemService stockItemService; @Autowired private StockService stockService; /** * @author Ryan @@ -258,4 +268,122 @@ } } } /** * @author Ryan * @date 2025/10/28 * @description: 上传已完成订单至ERP平台 * @version 1.0 */ @Override public void reportOrders(WkOrder order) { ReportParams params = new ReportParams(); List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId())); if (orderItems.isEmpty()) { throw new CoolException("订据明细不存在!!"); } List<ReportDataParam> reportData = new ArrayList<>(); orderItems.forEach(orderItem -> { ReportDataParam param = new ReportDataParam(); User user = userService.getById(order.getUpdateBy()); String nickName = null; if (!Objects.isNull(user)) { nickName = user.getNickname(); } //获取入库库位信息 if (order.getType().equals(OrderType.ORDER_IN.type)) { //筛选当前唯一字段所有出入库信息 List<StockItem> stockItems = stockItemService.list(new LambdaQueryWrapper<StockItem>() .eq(StockItem::getFieldsIndex, orderItem.getFieldsIndex())); //获取库存中订单库位 if (!stockItems.isEmpty()) { Set<Long> stockIds = stockItems.stream().map(StockItem::getStockId).collect(Collectors.toSet()); //获取库存库位信息 List<Stock> stocks = stockService.list(new LambdaQueryWrapper<Stock>() .in(Stock::getId, stockIds) .eq(Stock::getType, OrderType.ORDER_IN.type) .eq(Stock::getSourceCode, order.getCode())); Set<String> locs = stocks.stream().map(Stock::getLocCode).collect(Collectors.toSet()); String locCode = StringUtils.join(locs.toArray(), ","); param.setZone(locCode); } } //获取索引内容 Map<String, String> fields = FieldsUtils.getFields(orderItem.getFieldsIndex()); //设置通用参数 param.setWMSNO(order.getCode()) .setPONO(order.getPoCode()) .setOrderNO(order.getPoCode()) .setOrderDate(order.getCreateTime()) .setItemCode(orderItem.getMatnrCode()) .setEditUser(nickName) .setEditDate(order.getUpdateTime()) .setGoodsNO(fields.get("crushNo")) .setMemoDtl(order.getMemo()); if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_DONE_IN.type)) { //采购入库单 params.setOrderType("PO_Instock").setAction("Update"); //获取指定查询字段CrushNo 票号 param.setInQty(orderItem.getQty()); } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE_RETURN.type)) { //采购退货 params.setOrderType("PR_Outstock").setAction("Update"); param.setOutQty(orderItem.getQty()); } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type)) { //调拔入库单 params.setOrderType("Mv_Instock").setAction("Update"); } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PROD.type)) { //生产入库单 // params.setOrderType("WO_Outstock").setAction("Update"); } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE.type)) { //生产退料 params.setOrderType("WR_Instock").setAction("Update"); param.setInQty(orderItem.getQty()); } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_RETURN_ORDER.type)) { //生产领料 params.setOrderType("WO_Outstock").setAction("Update"); param.setOutQty(orderItem.getQty()); } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PROD_ADDITION.type)) { //生产补料 params.setOrderType("WR_Instock_BL").setAction("Update"); param.setOutQty(orderItem.getQty()); } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_FIX_OUT.type)) { params.setOrderType("WO_Outstock_WR").setAction("Update"); param.setOutQty(orderItem.getQty()); } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.type)) { //其它入库单/手动入库单 params.setOrderType("In_Instock").setAction("Update"); param.setInQty(orderItem.getQty()); } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER.type)) { //其它出库单/手动出库单 params.setOrderType("Io_Outstock").setAction("Update"); param.setOutQty(orderItem.getQty()); } reportData.add(param); }); params.setData(reportData); try { R reported = uploadReportOrders(params); if (reported.get("code").equals("200")) { order.setNtyStatus(OrderReportStatus.ORDER_REPORT_STATUS_ALL.val); asnOrderService.updateById(order); } } catch (Exception e) { log.error("<UNK>", e); } try { //休眠3秒 Thread.sleep(3000); } catch (InterruptedException e) { throw new RuntimeException(e); } } } rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderLogSchedule.java
@@ -49,18 +49,15 @@ private AsnOrderLogService asnOrderLogService; @Autowired private AsnOrderItemLogService asnOrderItemLogService; @Autowired private TransferOrderService transferOrderService; @Autowired private TransferService transferService; @Autowired private UserService userService; @Autowired private ReportMsgService reportMsgService; @Autowired private StockItemService stockItemService; @Autowired private StockService stockService; /** * @param @@ -87,7 +84,6 @@ } } /** * @param * @return @@ -113,116 +109,7 @@ } } /** * @author Ryan * @date 2025/10/28 * @description: 上传已完成订单至ERP平台 * @version 1.0 */ public void reportOrders(WkOrder order) { ReportParams params = new ReportParams(); List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId())); if (orderItems.isEmpty()) { throw new CoolException("订据明细不存在!!"); } List<ReportDataParam> reportData = new ArrayList<>(); orderItems.forEach(orderItem -> { ReportDataParam param = new ReportDataParam(); User user = userService.getById(order.getUpdateBy()); String nickName = null; if (!Objects.isNull(user)) { nickName = user.getNickname(); } //获取入库库位信息 if (order.getType().equals(OrderType.ORDER_IN.type)) { //筛选当前唯一字段所有出入库信息 List<StockItem> stockItems = stockItemService.list(new LambdaQueryWrapper<StockItem>() .eq(StockItem::getFieldsIndex, orderItem.getFieldsIndex())); //获取库存中订单库位 if (!stockItems.isEmpty()) { Set<Long> stockIds = stockItems.stream().map(StockItem::getStockId).collect(Collectors.toSet()); //获取库存库位信息 List<Stock> stocks = stockService.list(new LambdaQueryWrapper<Stock>() .in(Stock::getId, stockIds) .eq(Stock::getType, OrderType.ORDER_IN.type) .eq(Stock::getSourceCode, order.getCode())); Set<String> locs = stocks.stream().map(Stock::getLocCode).collect(Collectors.toSet()); String locCode = StringUtils.join(locs.toArray(), ","); param.setZone(locCode); } } //获取索引内容 Map<String, String> fields = FieldsUtils.getFields(orderItem.getFieldsIndex()); //设置通用参数 param.setWMSNO(order.getCode()) .setPONO(order.getPoCode()) .setOrderNO(order.getPoCode()) .setOrderDate(order.getCreateTime()) .setItemCode(orderItem.getMatnrCode()) .setEditUser(nickName) .setEditDate(order.getUpdateTime()) .setGoodsNO(fields.get("crushNo")) .setMemoDtl(order.getMemo()); if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_DONE_IN.type)) { //采购入库单 params.setOrderType("PO_Instock").setAction("Update"); //获取指定查询字段CrushNo 票号 param.setInQty(orderItem.getQty()); } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE_RETURN.type)) { //采购退货 params.setOrderType("PR_Outstock").setAction("Update"); param.setOutQty(orderItem.getQty()); } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PROD.type)) { //生产入库单 // params.setOrderType("WO_Outstock").setAction("Update"); } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE.type)) { //生产退料 params.setOrderType("WR_Instock").setAction("Update"); param.setInQty(orderItem.getQty()); } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_RETURN_ORDER.type)) { //生产领料 params.setOrderType("WO_Outstock").setAction("Update"); param.setOutQty(orderItem.getQty()); } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PROD_ADDITION.type)) { //生产补料 params.setOrderType("WR_Instock_BL").setAction("Update"); param.setOutQty(orderItem.getQty()); } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_FIX_OUT.type)) { params.setOrderType("WO_Outstock_WR").setAction("Update"); param.setOutQty(orderItem.getQty()); } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.type)) { //其它入库单/手动入库单 params.setOrderType("In_Instock").setAction("Update"); param.setInQty(orderItem.getQty()); } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER.type)) { //其它出库单/手动出库单 params.setOrderType("Io_Outstock").setAction("Update"); param.setOutQty(orderItem.getQty()); } reportData.add(param); }); params.setData(reportData); try { R reported = reportMsgService.uploadReportOrders(params); if (reported.get("code").equals("200")) { order.setNtyStatus(OrderReportStatus.ORDER_REPORT_STATUS_ALL.val); asnOrderService.updateById(order); } } catch (Exception e) { log.error("<UNK>", e); } try { //休眠3秒 Thread.sleep(3000); } catch (InterruptedException e) { throw new RuntimeException(e); } } /** @@ -243,18 +130,20 @@ } for (WkOrder order : wkOrders) { try { //上报次数限定 if (order.getReportOnce() < 4) { //上报已完成订单至ERP、MES等三方系统 reportOrders(order); order.setReportOnce(order.getReportOnce() + 1); if (!asnOrderService.updateById(order)) { log.error(order.getCode() + ",单据上传次数修改失败!!"); if (order.getType().equals(OrderType.ORDER_OUT.type)) { try { //上报次数限定 if (order.getReportOnce() < 4) { //上报已完成订单至ERP、MES等三方系统 reportMsgService.reportOrders(order); order.setReportOnce(order.getReportOnce() + 1); if (!asnOrderService.updateById(order)) { log.error(order.getCode() + ",单据上传次数修改失败!!"); } } } catch (Exception e) { log.error(e.getMessage()); } } catch (Exception e) { log.error(e.getMessage()); } if (order.getNtyStatus().equals(OrderReportStatus.ORDER_REPORT_STATUS_ALL.val)) { AsnOrderLog one = asnOrderLogService.getOne(new LambdaQueryWrapper<AsnOrderLog>().eq(AsnOrderLog::getCode, order.getCode()), false); rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -15,6 +15,7 @@ import com.vincent.rsf.server.api.entity.constant.RcsConstant; import com.vincent.rsf.server.api.entity.params.TaskItemParam; import com.vincent.rsf.server.api.entity.params.WcsTaskParams; import com.vincent.rsf.server.api.service.ReportMsgService; import com.vincent.rsf.server.api.utils.LocUtils; import com.vincent.rsf.server.common.constant.Constants; import com.vincent.rsf.server.manager.controller.params.LocToTaskParams; @@ -91,6 +92,8 @@ private RemotesInfoProperties.RcsApi rcsApi; @Autowired private BasStationService basStationService; @Autowired private ReportMsgService reportMsgService; /** * @param @@ -519,6 +522,7 @@ } /** * @param * @return @@ -554,6 +558,26 @@ throw new CoolException("任务历史档保存失败!!"); } List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId())); taskItems.forEach(taskItem -> { WkOrder order = asnOrderService.getById(taskItem.getOrderId()); if (Objects.isNull(order)) { throw new CoolException("数拓错误,单据不存在!!"); } if (order.getType().equals(OrderType.ORDER_OUT.type)) { try { //上报已完成订单至ERP、MES等三方系统 reportMsgService.reportOrders(order); order.setReportOnce(order.getReportOnce() + 1); if (!asnOrderService.updateById(order)) { log.error(order.getCode() + ",单据上传次数修改失败!!"); } } catch (Exception e) { log.error(e.getMessage()); } } }); List<TaskItemLog> itemLogs = new ArrayList<>(); for (TaskItem item : taskItems) { TaskItemLog itemLog = new TaskItemLog();