gaoluyang
7 天以前 e1590017b716d77f88f075364c55cfbdb480286f
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/mps/MesProMpsServiceImpl.java
@@ -676,19 +676,12 @@
     * 根据 MPS 创建生产工单
     */
    private Long createWorkOrderFromMps(MesProMpsDO mps, BigDecimal quantity) {
        // 1. 校验产品是否存在工艺路线
        // 1. 查找产品工艺路线;未配置时不阻断,按单工序生产处理
        MesProRouteProductDO routeProduct = routeProductService.getRouteProductByItemId(mps.getProductId());
        if (routeProduct == null) {
            throw exception(PRO_ROUTE_NOT_EXISTS);
        }
        Long routeId = routeProduct.getRouteId();
        // 2. 校验工艺路线是否有工序(按产品过滤其它产品的产出物料)
        List<MesProRouteProcessDO> routeProcesses = routeProcessService
                .getRouteProcessListByProductId(mps.getProductId());
        if (CollUtil.isEmpty(routeProcesses)) {
            throw exception(PRO_ROUTE_ENABLE_NO_PROCESS);
        }
        Long routeId = routeProduct != null ? routeProduct.getRouteId() : null;
        List<MesProRouteProcessDO> routeProcesses = routeProduct != null
                ? routeProcessService.getRouteProcessListByProductId(mps.getProductId())
                : Collections.emptyList();
        // 3. 创建生产工单
        MesProWorkOrderSaveReqVO workOrderReq = new MesProWorkOrderSaveReqVO();
@@ -705,10 +698,13 @@
        Long workOrderId = workOrderService.createWorkOrder(workOrderReq);
        // 4. 更新工单工艺路线
        // 4. 更新工单工艺路线(未配置路线时保持为空,按单工序生产)
        if (routeId != null) {
        workOrderMapper.updateById(new MesProWorkOrderDO().setId(workOrderId).setRouteId(routeId));
        }
        // 5. 保存工单工序(从工艺路线工序带入,含投料BOM)
        // 5. 保存工单工序(仅配置了工艺路线工序时带入,含投料BOM)
        if (CollUtil.isNotEmpty(routeProcesses)) {
        Map<Long, List<MesProRouteProductBomDO>> bomMap = routeProcessService.getRouteProcessBomMapByProductId(mps.getProductId());
        List<MesProWorkOrderProcessSaveReqVO> processList = new ArrayList<>();
        for (MesProRouteProcessDO rp : routeProcesses) {
@@ -745,6 +741,7 @@
            processList.add(process);
        }
        workOrderProcessService.batchSaveWorkOrderProcess(processList);
        }
        // 6. 工单直接确认为已确认状态
        workOrderService.confirmWorkOrder(workOrderId);