skyouc
6 小时以前 5ec18e799f11c021f343e7593701e54f920a6072
#新增
1. 整单上传修改即时上传
4个文件已修改
312 ■■■■■ 已修改文件
rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReportMsgService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderLogSchedule.java 145 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();