From 1d9cfc91e7255b9e139b20ff230cb19246f19193 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 09 十一月 2026 14:32:11 +0800
Subject: [PATCH] refactor(erp): 重构ERP单据单号生成逻辑以支持冲突重试

---
 yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/redis/no/ErpNoRedisDAO.java |   23 +++++++++++++++++++++++
 1 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/redis/no/ErpNoRedisDAO.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/redis/no/ErpNoRedisDAO.java
index bdce48c..f7ca069 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/redis/no/ErpNoRedisDAO.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/redis/no/ErpNoRedisDAO.java
@@ -9,6 +9,7 @@
 
 import java.time.Duration;
 import java.time.LocalDateTime;
+import java.util.function.Predicate;
 
 
 /**
@@ -68,4 +69,26 @@
         return noPrefix + String.format("%06d", no);
     }
 
+    /**
+     * 鐢熸垚搴忓彿锛屽苟璺宠繃宸插瓨鍦ㄧ殑鍗曞彿銆�
+     *
+     * Redis 涓殑鑷璁℃暟涓�鏃︿涪澶憋紙濡� Redis 閲嶅惎鏈寔涔呭寲銆佹墜宸ユ竻搴擄級锛岃鏁颁細浠� 1 閲嶆柊寮�濮嬶紝
+     * 鑰屽綋澶╂暟鎹簱涓彲鑳藉凡鏈夊悓鏃ユ湡鍚庣紑鐨勫崟鍙凤紝姝ゆ椂閫愪釜閫掑閲嶈瘯鐩村埌鍙栧埌鏈崰鐢ㄧ殑搴忓彿銆�
+     *
+     * @param prefix  鍓嶇紑
+     * @param isNoExists 鍗曞彿鏄惁宸插瓨鍦�
+     * @return 鏈崰鐢ㄧ殑搴忓彿
+     */
+    public String generate(String prefix, Predicate<String> isNoExists) {
+        for (int i = 0; i < MAX_GENERATE_ATTEMPTS; i++) {
+            String no = generate(prefix);
+            if (!isNoExists.test(no)) {
+                return no;
+            }
+        }
+        throw new IllegalStateException("鐢熸垚鍗曞彿澶辫触锛氳繛缁� " + MAX_GENERATE_ATTEMPTS + " 娆″皾璇曞潎宸茶鍗犵敤锛岃绋嶅悗閲嶈瘯");
+    }
+
+    private static final int MAX_GENERATE_ATTEMPTS = 10000;
+
 }

--
Gitblit v1.9.3