yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderProcessServiceImpl.java
@@ -191,32 +191,27 @@
    }
    /**
     * 从工序列表中提取 BOM 投料,合并去重后保存到工单 BOM 表
     * 从工序列表中提取 BOM 投料,按工序分别保存到工单 BOM 表
     */
    private void saveWorkOrderBomFromProcesses(Long workOrderId, List<MesProWorkOrderProcessSaveReqVO> list) {
        // 收集所有工序的 bomItems,按 itemId 去重(保留第一个出现的 quantity)
        java.util.Map<Long, MesProWorkOrderProcessSaveReqVO.BomItem> merged = new java.util.LinkedHashMap<>();
        workOrderBomService.deleteWorkOrderBomByWorkOrderId(workOrderId);
        List<MesProWorkOrderBomDO> bomList = new ArrayList<>();
        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)
                                .processId(item.getProcessId())
                        .itemId(bomItem.getItemId())
                        .quantity(bomItem.getQuantity())
                        .remark(bomItem.getRemark())
                        .build());
            }
                }
            }
        }
        if (CollUtil.isNotEmpty(bomList)) {
            workOrderBomMapper.insertBatch(bomList);
        }
    }