| | |
| | | * 根据 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(); |
| | |
| | | |
| | | 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) { |
| | |
| | | processList.add(process); |
| | | } |
| | | workOrderProcessService.batchSaveWorkOrderProcess(processList); |
| | | } |
| | | |
| | | // 6. 工单直接确认为已确认状态 |
| | | workOrderService.confirmWorkOrder(workOrderId); |