1
1 天以前 e6d3803d1bafb782c0907fa925ec110932bc3f23
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
@@ -18,6 +18,9 @@
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.dto.OrderOutItemDto;
import com.vincent.rsf.server.manager.controller.params.OrderOutTaskParam;
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 +115,8 @@
    private WarehouseAreasItemServiceImpl warehouseAreasItemService;
    @Autowired
    private LocItemService locItemService;
    @Autowired
    private OutStockService outStockService;
    /**
@@ -523,22 +528,45 @@
                    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)) {
//                            outStockService.getOrderOutTaskItem(orderOutTaskParam,param.getOrderItemId());
                            //出库
//                        boolean itemsCheck = waitPakinService.mergeItemsCheck(pakinParam, loginUserId);
//                            if (true) {
                            CompletableFuture.runAsync(() -> {
                                try {
                                    asyncOutboundExecutionWcs(syncOrder.getStationId(), wkOrder.getId(), loginUserId);
                                } catch (Exception e) {
                                    log.warn("订单 {} 开始自动出库", syncOrder.getOrderNo());
                                }
                            });
//                            }
                        }
                    }
                }
            });
@@ -580,6 +608,37 @@
        }
    }
    @Async
    public void asyncOutboundExecutionWcs(String stationId ,Long orderId, Long loginUserId) {
        try {
            OrderOutTaskParam orderOutTaskParam = new OrderOutTaskParam();
            orderOutTaskParam.setOrderId(orderId);
            orderOutTaskParam.setWaveId(16L);
            List<OrderOutItemDto> orderOutTaskItemAuto = outStockService.getOrderOutTaskItemAuto(orderOutTaskParam);
            List<OutStockToTaskParams> tasks = new ArrayList<>();
            for (OrderOutItemDto orderOutItemDto : orderOutTaskItemAuto){
                OutStockToTaskParams outStockToTaskParams = new OutStockToTaskParams(orderOutItemDto);
                outStockToTaskParams.setId(orderOutItemDto.getLocItem().getId());
//                                outStockToTaskParams.setOutQty(locItemServiceOne.getAnfme());
                outStockToTaskParams.setLocCode(orderOutItemDto.getLocItem().getLocCode());
                outStockToTaskParams.setBarcode(orderOutItemDto.getLocItem().getBarcode());
                outStockToTaskParams.setSiteNo(stationId);
                tasks.add(outStockToTaskParams);
            }
            if (tasks.isEmpty()){
                log.warn("订单ID {} 没有找到可出库明细,跳过自动出库", orderId);
                return;
            }
            outStockService.genOutStockTask(tasks, loginUserId, orderId);
            log.info("订单ID {} 自动出库,共处理 {} 个明细", orderId, tasks.size());
        } catch (Exception e) {
            log.error("订单ID {} 自动出库: {}", orderId, e.getMessage(), e);
        }
    }
    /**
     * @author Ryan
     * @date 2025/8/19