| | |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.process.MesProWorkOrderProcessPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.process.MesProWorkOrderProcessSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.process.MesProWorkOrderProcessSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProcessDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderBomDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderProcessDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkOrderBomMapper; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkOrderProcessMapper; |
| | | import cn.iocoder.yudao.module.mes.service.pro.process.MesProProcessService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProcessService; |
| | |
| | | private MesProProcessService processService; |
| | | @Resource |
| | | private MesProRouteProcessService routeProcessService; |
| | | @Resource |
| | | @Lazy |
| | | private MesProWorkOrderBomService workOrderBomService; |
| | | @Resource |
| | | private MesProWorkOrderBomMapper workOrderBomMapper; |
| | | |
| | | @Override |
| | | public Long createWorkOrderProcess(MesProWorkOrderProcessSaveReqVO createReqVO) { |
| | |
| | | } |
| | | } |
| | | |
| | | // 4. 重建工序链 |
| | | // 4. 保存工单 BOM 投料(合并所有工序的 bomItems,按 itemId 去重) |
| | | saveWorkOrderBomFromProcesses(workOrderId, list); |
| | | |
| | | // 5. 重建工序链 |
| | | rebuildProcessChain(workOrderId); |
| | | } |
| | | |
| | | /** |
| | | * 从工序列表中提取 BOM 投料,合并去重后保存到工单 BOM 表 |
| | | */ |
| | | private void saveWorkOrderBomFromProcesses(Long workOrderId, List<MesProWorkOrderProcessSaveReqVO> list) { |
| | | // 收集所有工序的 bomItems,按 itemId 去重(保留第一个出现的 quantity) |
| | | java.util.Map<Long, MesProWorkOrderProcessSaveReqVO.BomItem> merged = new java.util.LinkedHashMap<>(); |
| | | for (MesProWorkOrderProcessSaveReqVO item : list) { |
| | | if (CollUtil.isNotEmpty(item.getBomItems())) { |
| | | for (MesProWorkOrderProcessSaveReqVO.BomItem bomItem : item.getBomItems()) { |
| | | if (bomItem.getItemId() != null) { |
| | | merged.putIfAbsent(bomItem.getItemId(), bomItem); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | // 删除旧 BOM,批量插入新 BOM |
| | | workOrderBomService.deleteWorkOrderBomByWorkOrderId(workOrderId); |
| | | if (CollUtil.isNotEmpty(merged)) { |
| | | List<MesProWorkOrderBomDO> bomList = new ArrayList<>(merged.size()); |
| | | for (MesProWorkOrderProcessSaveReqVO.BomItem bomItem : merged.values()) { |
| | | bomList.add(MesProWorkOrderBomDO.builder() |
| | | .workOrderId(workOrderId) |
| | | .itemId(bomItem.getItemId()) |
| | | .quantity(bomItem.getQuantity()) |
| | | .remark(bomItem.getRemark()) |
| | | .build()); |
| | | } |
| | | workOrderBomMapper.insertBatch(bomList); |
| | | } |
| | | } |
| | | |
| | | // ==================== 私有方法 ==================== |
| | | |
| | | private MesProWorkOrderProcessDO validateWorkOrderProcessExists(Long id) { |