diff --git a/src/main/java/com/xujie/sys/modules/sampletracking/service/impl/SampleProofTrackingServiceImpl.java b/src/main/java/com/xujie/sys/modules/sampletracking/service/impl/SampleProofTrackingServiceImpl.java index 4274cbd7..b922fd88 100644 --- a/src/main/java/com/xujie/sys/modules/sampletracking/service/impl/SampleProofTrackingServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/sampletracking/service/impl/SampleProofTrackingServiceImpl.java @@ -1046,45 +1046,33 @@ public class SampleProofTrackingServiceImpl implements SampleProofTrackingServic } return rows; } - Map buRowMap = new HashMap<>(); - for (ProofTrackingProcessColumnData item : buRows) { - if (item == null || isBlank(item.getCode())) { - continue; - } - String code = item.getCode().trim(); - if (!buRowMap.containsKey(code)) { - buRowMap.put(code, item); - } - } List rows = new ArrayList<>(); Set usedCodeSet = new LinkedHashSet<>(); - // 以默认工序顺序为骨架,BU 有配置时覆盖;缺失项继承默认配置,避免“不可见即消失”。 - for (ProofTrackingProcessColumnData defaultRow : defaultRows) { - if (defaultRow == null || isBlank(defaultRow.getCode())) { + // 回显顺序以 BU 已保存的 sort_no 为准,避免弹窗重开后被默认顺序覆盖。 + for (ProofTrackingProcessColumnData buRow : buRows) { + if (buRow == null || isBlank(buRow.getCode())) { continue; } - String code = defaultRow.getCode().trim(); - ProofTrackingProcessColumnData merged = buRowMap.get(code); - if (merged == null) { - merged = cloneProcessColumn(defaultRow); - merged.setSite(site); - merged.setBuNo(buNo); - } else { - merged = cloneProcessColumn(merged); + String code = buRow.getCode().trim(); + if (usedCodeSet.contains(code)) { + continue; } - rows.add(merged); + rows.add(cloneProcessColumn(buRow)); usedCodeSet.add(code); } - // 追加 BU 独有工序,确保定制工序不丢失。 - for (ProofTrackingProcessColumnData buRow : buRows) { - if (buRow == null || isBlank(buRow.getCode())) { + // 默认工序仅用于补齐 BU 缺失项,确保新增工序不会在配置弹窗中丢失。 + for (ProofTrackingProcessColumnData defaultRow : defaultRows) { + if (defaultRow == null || isBlank(defaultRow.getCode())) { continue; } - String code = buRow.getCode().trim(); + String code = defaultRow.getCode().trim(); if (usedCodeSet.contains(code)) { continue; } - rows.add(cloneProcessColumn(buRow)); + ProofTrackingProcessColumnData merged = cloneProcessColumn(defaultRow); + merged.setSite(site); + merged.setBuNo(buNo); + rows.add(merged); usedCodeSet.add(code); } return rows;