2026-09-03 f4a412cebe9532833320bad81cc92e7930d7715a
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkOrderBomController.java
@@ -245,11 +245,13 @@
            }
            List<MesProWorkOrderBomDO> items = new ArrayList<>();
            for (MesProWorkOrderBomDO bom : bomList) {
                if (bom.getProcessId().equals(process.getProcessId())) {
                // 跳过无工序编号的投料行(工单 BOM 中仅按工序维护投料明细,无工序的行不参与展开,
                // 且 getProcessId 可能为 null,直接 equals 会 NPE)
                if (Objects.equals(bom.getProcessId(), process.getProcessId())) {
                    items.add(bom);
                }
            }
            processBomMap.put(process.getOutputItemId(), items);
            processBomMap.put(Long.valueOf(process.getOutputItemId().split(",")[0].trim()), items);
        }
        // 2. 取最后一道工序(sort 最大)作为展开起点,逐层向前递推
@@ -263,7 +265,7 @@
        // 3. 以最后一道工序的投料为起点
        Map<Long, BigDecimal> currentLayer = new LinkedHashMap<>();
        for (MesProWorkOrderBomDO bom : bomList) {
            if (bom.getProcessId().equals(lastProcess.getProcessId())) {
            if (Objects.equals(bom.getProcessId(), lastProcess.getProcessId())) {
                currentLayer.merge(bom.getItemId(), bom.getQuantity(), BigDecimal::add);
            }
        }