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