From ed1425390c329cd3fb4e2aca8a7e5aa05ddbd16d Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期日, 23 八月 2026 12:52:27 +0800
Subject: [PATCH] fix: 领料编号排序修改

---
 src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java |   35 +++++++++++++++++++++++++++++++++++
 1 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
index e3b547d..00a20de 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
@@ -555,6 +555,40 @@
         return value == null ? BigDecimal.ZERO : value;
     }
 
+    /**
+     * 鎵规鍙锋寜鍓嶇紑鏃ユ湡鍗囧簭鎺掑簭锛堟牸寮忓 20260703-ed01-001锛屾棩鏈熸棭鐨勫湪鍓嶏級
+     */
+    private void sortBatchNoList(List<String> batchNoList) {
+        if (batchNoList == null || batchNoList.size() < 2) {
+            return;
+        }
+        batchNoList.sort(Comparator
+                .comparingLong(this::batchDateKey)
+                .thenComparing(batchNo -> batchNo == null ? "" : batchNo));
+    }
+
+    /**
+     * 鎻愬彇鎵规鍙峰紑澶寸殑鏁板瓧浣滀负鎺掑簭閿紙yyyyMMdd锛夛紝鏃犳暟瀛楁椂鏀惧埌鏈�鍚�
+     */
+    private long batchDateKey(String batchNo) {
+        if (batchNo == null) {
+            return Long.MAX_VALUE;
+        }
+        String trimmed = batchNo.trim();
+        int end = 0;
+        while (end < trimmed.length() && Character.isDigit(trimmed.charAt(end))) {
+            end++;
+        }
+        if (end == 0) {
+            return Long.MAX_VALUE;
+        }
+        try {
+            return Long.parseLong(trimmed.substring(0, end));
+        } catch (NumberFormatException e) {
+            return Long.MAX_VALUE;
+        }
+    }
+
     private void validateAndFillOrder(ProductionOrder productionOrder, ProductionOrder oldOrder) {
         // 鏍¢獙璁㈠崟鍙傛暟骞惰ˉ榻愰粯璁ゅ��
         if (productionOrder == null) {
@@ -1162,6 +1196,7 @@
                 List<String> batchNoList = stockBatchNoMap.get(productModelId) == null
                         ? Collections.emptyList()
                         : new ArrayList<>(stockBatchNoMap.get(productModelId));
+                sortBatchNoList(batchNoList);
                 vo.setBatchNoList(batchNoList);
                 vo.setStockQuantity(stockQuantityMap.getOrDefault(productModelId, BigDecimal.ZERO));
                 vo.setBom(true);

--
Gitblit v1.9.3