From 4ca4444ad33a2a1a51f5c06e78ee9365dfb1eed6 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期四, 08 十月 2026 17:11:11 +0800
Subject: [PATCH] feat(mes): 种子二维码标签国标四要素合规改造
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/redis/MesCodeRedisDAO.java | 47 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 47 insertions(+), 0 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/redis/MesCodeRedisDAO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/redis/MesCodeRedisDAO.java
index b0a9318..5a805eb 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/redis/MesCodeRedisDAO.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/redis/MesCodeRedisDAO.java
@@ -3,7 +3,11 @@
import cn.iocoder.yudao.framework.common.util.number.BizNoUtils;
import jakarta.annotation.Resource;
import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.data.redis.core.script.DefaultRedisScript;
+import org.springframework.data.redis.core.script.RedisScript;
import org.springframework.stereotype.Repository;
+
+import java.util.List;
/**
* MES 涓氬姟缂栫爜鐢熸垚鐨� Redis DAO锛堝疄渚嬬爜锛氳鐮� / 鎵樼洏鐮� / 涓存椂鐮佺瓑锛夈��
@@ -13,6 +17,26 @@
*/
@Repository
public class MesCodeRedisDAO {
+
+ /**
+ * 琚嬪簭鍙疯嚜澧� KEY锛堝叏灞�琚嬪簭鍙凤紝淇濊瘉鍚屼竴鎵�/璺ㄦ壒鐢熸垚鏃朵笉閲嶅锛�
+ */
+ private static final String BAG_NO_SEQ_KEY = "mes:bag_no:seq";
+
+ /**
+ * 鍘熷瓙鍒嗛厤琚嬪簭鍙峰尯闂寸殑 Lua 鑴氭湰銆�
+ * <p>
+ * 鍏堟寜搴撳唴鏈�澶у簭鍙锋牎姝e熀鍑嗗�硷紙Redis 棣栨浣跨敤銆佹垨搴撳唴鏁版嵁琚洿鎺ュ鍏ュ鑷村熀鍑嗚惤鍚庢椂锛夛紝
+ * 鍐嶅師瀛愯嚜澧炲苟杩斿洖鑷鍚庣殑鍊笺�傛暣涓�屾牎姝� + 鑷銆嶅湪 Redis 鍗曠嚎绋嬪唴瀹屾垚锛岄伩鍏嶅苟鍙戜笅浜掔浉瑕嗙洊璁℃暟銆�
+ * <p>
+ * KEYS[1] = 搴忓彿 KEY锛汚RGV[1] = 鏈闇�瑕佺殑涓暟锛汚RGV[2] = 搴撳唴褰撳墠鏈�澶у簭鍙�
+ */
+ private static final RedisScript<Long> ALLOCATE_BAG_NO_SCRIPT = new DefaultRedisScript<>(
+ "local cur = redis.call('GET', KEYS[1]) "
+ + "local base = tonumber(ARGV[2]) "
+ + "if (not cur) or (tonumber(cur) < base) then redis.call('SET', KEYS[1], base) end "
+ + "return redis.call('INCRBY', KEYS[1], ARGV[1])",
+ Long.class);
@Resource
private StringRedisTemplate stringRedisTemplate;
@@ -34,4 +58,27 @@
throw new IllegalStateException("鐢熸垚鍞竴涓氬姟缂栫爜澶辫触锛岃閲嶈瘯");
}
+ /**
+ * 鍘熷瓙鍒嗛厤涓�娈佃繛缁殑琚嬪簭鍙凤紝杩斿洖鍖洪棿璧峰鍊笺��
+ * <p>
+ * 琚嬪簭鍙峰師鍏堢敱銆屾煡搴撳唴鏈�澶у�煎啀 +1銆嶅緱鍒帮紝骞跺彂鐢熸垚鏃朵袱涓姹備細璇诲埌鍚屼竴涓渶澶у�硷紝
+ * 浠庤�屼骇鍑洪噸澶嶇殑琚嬪簭鍙凤紙琚嬪簭鍙蜂細鍗板湪鏍囩涓婏級銆傛澶勬敼涓� Redis 鍘熷瓙鑷鍒嗛厤锛�
+ * 骞剁敤搴撳唴褰撳墠鏈�澶у�煎仛鍩哄噯鏍℃锛屼繚璇佸簭鍙锋棦涓嶉噸澶嶄篃涓嶅洖閫�銆�
+ *
+ * @param count 鏈闇�瑕佺殑杩炵画搴忓彿涓暟锛堥』澶т簬 0锛�
+ * @param dbMaxBagNo 鏁版嵁搴撳綋鍓嶆渶澶ц搴忓彿锛堝惈宸查�昏緫鍒犻櫎璁板綍锛屼紶 null 瑙嗕负 0锛�
+ * @return 鍖洪棿璧峰搴忓彿锛堝惈锛夛紝鍙敤鍖洪棿涓� [start, start + count - 1]
+ */
+ public int allocateBagNoStart(int count, Integer dbMaxBagNo) {
+ if (count <= 0) {
+ throw new IllegalArgumentException("琚嬪簭鍙峰垎閰嶄釜鏁板繀椤诲ぇ浜� 0");
+ }
+ Long end = stringRedisTemplate.execute(ALLOCATE_BAG_NO_SCRIPT, List.of(BAG_NO_SEQ_KEY),
+ String.valueOf(count), String.valueOf(dbMaxBagNo == null ? 0 : dbMaxBagNo));
+ if (end == null) {
+ throw new IllegalStateException("鍒嗛厤琚嬪簭鍙峰け璐ワ紝璇烽噸璇�");
+ }
+ return (int) (end - count + 1);
+ }
+
}
--
Gitblit v1.9.3