From 279ffeec3b008754bbc5fd7fa805fc6424bda695 Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Thu, 16 Jul 2026 09:09:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E5=85=B3=E5=8D=95=E3=80=81=E6=8A=A5?= =?UTF-8?q?=E5=85=B3=E8=A6=81=E7=B4=A0=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/CoDelExcelTXServiceImpl.java | 30 ++++++++++++++++++- .../resources/mapper/ecss/CoDelMapper.xml | 14 ++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) 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