diff --git a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelTXServiceImpl.java b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelTXServiceImpl.java index b176b45b..dc892244 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelTXServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelTXServiceImpl.java @@ -2337,9 +2337,37 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { // 获取partNo列表 List partNos = coDelMapper.getDeclarationElements(data); List partNoList = partNos.stream().map(map -> map.get("partNo").toString()).collect(Collectors.toList()); + // 按通知明细item_no顺序记录partNo出现次序,后续用于稳定排序 + Map partNoOrderMap = new HashMap<>(); + for (int i = 0; i < partNos.size(); i++) { + Map partNoMap = partNos.get(i); + String partNo = partNoMap.get("partNo") != null ? partNoMap.get("partNo").toString() : ""; + if (StringUtils.isBlank(partNo)) { + continue; + } + if (!partNoOrderMap.containsKey(partNo)) { + partNoOrderMap.put(partNo, i); + } + } // 根据partNo获取hsCode List hsCodes = coDelMapper.getHsCodeByPartNo(data.getSite(), partNoList); - Map hsCodeMap = new HashMap<>(); + hsCodes.sort((left, right) -> { + String leftPartNo = left.get("part_no") != null ? left.get("part_no").toString() : ""; + String rightPartNo = right.get("part_no") != null ? right.get("part_no").toString() : ""; + Integer leftOrder = partNoOrderMap.get(leftPartNo); + Integer rightOrder = partNoOrderMap.get(rightPartNo); + if (leftOrder == null && rightOrder == null) { + return 0; + } + if (leftOrder == null) { + return 1; + } + if (rightOrder == null) { + return -1; + } + return leftOrder.compareTo(rightOrder); + }); + Map hsCodeMap = new LinkedHashMap<>(); // 用于收集每个hsCode对应的SKU列表 Map> hsCodeSkuListMap = new HashMap<>(); for (int i = 0; i < hsCodes.size(); i++) { diff --git a/src/main/resources/mapper/ecss/CoDelMapper.xml b/src/main/resources/mapper/ecss/CoDelMapper.xml index 16dc7354..4b48857c 100644 --- a/src/main/resources/mapper/ecss/CoDelMapper.xml +++ b/src/main/resources/mapper/ecss/CoDelMapper.xml @@ -703,6 +703,10 @@ create_by,create_date,update_by,update_date ecss_CoDelNotifyDetail a left join part b on a.site=b.site and a.part_no=b.part_no where a.site =#{site} and a.delNo=#{delNo} and a.qty>0 and a.bu_no=#{buNo} GROUP BY b.hsCodeDesc,b.hsCode,b.brand,LEFT(a.currency,3) + ORDER BY + CASE WHEN MIN(TRY_CONVERT(BIGINT, a.item_no)) IS NULL THEN 1 ELSE 0 END, + MIN(TRY_CONVERT(BIGINT, a.item_no)), + MIN(a.item_no) @@ -954,10 +962,14 @@ create_by,create_date,update_by,update_date