1
昨天 7ea6c2c85d6edd71827edc306d5e82165fed1d2e
lsh#
2个文件已修改
117 ■■■■ 已修改文件
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OutStockToTaskParams.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
@@ -18,6 +18,7 @@
import com.vincent.rsf.server.common.domain.BaseParam;
import com.vincent.rsf.server.common.domain.PageParam;
import com.vincent.rsf.server.manager.controller.dto.LocStockDto;
import com.vincent.rsf.server.manager.controller.params.OutStockToTaskParams;
import com.vincent.rsf.server.manager.controller.params.PakinItem;
import com.vincent.rsf.server.manager.controller.params.WaitPakinParam;
import com.vincent.rsf.server.manager.entity.*;
@@ -112,6 +113,8 @@
    private WarehouseAreasItemServiceImpl warehouseAreasItemService;
    @Autowired
    private LocItemService locItemService;
    @Autowired
    private OutStockService outStockService;
    /**
@@ -523,22 +526,51 @@
                    throw new CoolException("计划收货数量修改失败!!");
                }
                // 立即触发异步任务,不等待结果
                if (!Cools.isEmpty(palletId.get()) && StringUtils.isNotBlank(syncOrder.getOrderNo()) && !Cools.isEmpty(syncOrder.getStationId())) {
                    //组托
                    WaitPakinParam pakinParam = new WaitPakinParam();
                    pakinParam.setBarcode(palletId.get());
                    pakinParam.setStaNo(syncOrder.getStationId());
                if (!rule.equals(SerialRuleCode.SYS_OUT_STOCK_CODE)){
                    // 入库:联动组托
                    // 立即触发异步任务,不等待结果
                    if (!Cools.isEmpty(palletId.get()) && StringUtils.isNotBlank(syncOrder.getOrderNo()) && !Cools.isEmpty(syncOrder.getStationId())) {
                        //组托
                        WaitPakinParam pakinParam = new WaitPakinParam();
                        pakinParam.setBarcode(palletId.get());
                        pakinParam.setStaNo(syncOrder.getStationId());
                    boolean itemsCheck = waitPakinService.mergeItemsCheck(pakinParam, loginUserId);
                    if (itemsCheck) {
                        CompletableFuture.runAsync(() -> {
                            try {
                                asyncMergeItemsWcs(pakinParam, syncOrder.getOrderNo(), loginUserId);
                            } catch (Exception e) {
                                log.warn("订单 {} 开始自动组托", syncOrder.getOrderNo());
                        boolean itemsCheck = waitPakinService.mergeItemsCheck(pakinParam, loginUserId);
                        if (itemsCheck) {
                            CompletableFuture.runAsync(() -> {
                                try {
                                    asyncMergeItemsWcs(pakinParam, syncOrder.getOrderNo(), loginUserId);
                                } catch (Exception e) {
                                    log.warn("订单 {} 开始自动组托", syncOrder.getOrderNo());
                                }
                            });
                        }
                    }
                } else {
                    // 出库:指定出库
                    // 立即触发异步任务,不等待结果
                    if (!Cools.isEmpty(palletId.get()) && StringUtils.isNotBlank(syncOrder.getOrderNo()) && !Cools.isEmpty(syncOrder.getStationId())) {
                        Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, palletId.get()));
                        if (!Cools.isEmpty(loc)) {
                            //出库
                            List<OutStockToTaskParams> param = new ArrayList<>();
                            for (WkOrderItem wkOrderItem : orderItems){
                                OutStockToTaskParams outStockToTaskParams = new OutStockToTaskParams(wkOrderItem);
                                outStockToTaskParams.setLocCode(loc.getCode());
                                outStockToTaskParams.setSiteNo(syncOrder.getStationId());
                                param.add(outStockToTaskParams);
                            }
                        });
//                        boolean itemsCheck = waitPakinService.mergeItemsCheck(pakinParam, loginUserId);
//                            if (true) {
                            CompletableFuture.runAsync(() -> {
                                try {
                                    asyncOutboundExecutionWcs(param, wkOrder.getId(), loginUserId);
                                } catch (Exception e) {
                                    log.warn("订单 {} 开始自动出库", syncOrder.getOrderNo());
                                }
                            });
//                            }
                        }
                    }
                }
            });
@@ -580,6 +612,35 @@
        }
    }
    @Async
    public void asyncOutboundExecutionWcs(List<OutStockToTaskParams> param, Long orderId, Long loginUserId) {
        try {
            int i = 0;
            List<OutStockToTaskParams> tasks = new ArrayList<>();
            while (true) {
                tasks = new ArrayList<>();
                i++;
                if (i > 5) return;
                Thread.sleep(3000);
                for (OutStockToTaskParams taskParam : new OutStockToTaskParams[param.size()]) {
                    if (StringUtils.isNotBlank(taskParam.getLocCode())) {
                        tasks.add(taskParam);
                    }
                }
                break;
            }
            if (tasks.isEmpty()){
                log.warn("订单ID {} 没有找到可出库明细,跳过自动出库", orderId);
                return;
            }
            outStockService.genOutStockTask(tasks, loginUserId, orderId);
            log.info("订单ID {} 自动出库,共处理 {} 个明细", orderId, param.size());
        } catch (Exception e) {
            log.error("订单ID {} 自动出库: {}", orderId, e.getMessage(), e);
        }
    }
    /**
     * @author Ryan
     * @date 2025/8/19
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OutStockToTaskParams.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.vincent.rsf.server.manager.entity.WkOrderItem;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -44,4 +45,31 @@
    @ApiModelProperty("站点")
    private String siteNo;
    public OutStockToTaskParams(){};
    public OutStockToTaskParams(WkOrderItem wkOrderItem){
//        this.locCode = w;//库位
        this.id = wkOrderItem.getId();
        this.barcode = wkOrderItem.getBarcode();
        this.batch = wkOrderItem.getBatch();
        this.unit = wkOrderItem.getPurUnit();
        this.platOrderCode = wkOrderItem.getPlatOrderCode();
        this.fieldsIndex = wkOrderItem.getFieldsIndex();
        this.extendFields = wkOrderItem.getExtendFields();
        this.outQty = wkOrderItem.getAnfme();
//        this.siteNo = siteNo;
    };
    public OutStockToTaskParams(String locCode, Long id, String barcode, String batch, String unit, String platOrderCode, String fieldsIndex, Map<String, String> extendFields, Double outQty, String siteNo) {
        this.locCode = locCode;
        this.id = id;
        this.barcode = barcode;
        this.batch = batch;
        this.unit = unit;
        this.platOrderCode = platOrderCode;
        this.fieldsIndex = fieldsIndex;
        this.extendFields = extendFields;
        this.outQty = outQty;
        this.siteNo = siteNo;
    }
}