From 87733eb3623593da247c051593d64b8ff9e1d3a4 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 06 十一月 2026 19:00:39 +0800
Subject: [PATCH] feat(crm,mes): 扩展客户字段与重构批次号生成逻辑
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/redis/MesCodeRedisDAO.java | 33 +++++++++++++++++++++++++++++++++
1 files changed, 33 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 dd24ca3..6217e44 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
@@ -25,6 +25,11 @@
private static final String BAG_NO_SEQ_KEY = "mes:bag_no:seq";
/**
+ * 鐢熶骇鎵规娴佹按鍙疯嚜澧� KEY 鍓嶇紑锛堟寜骞翠唤闅旂锛�
+ */
+ private static final String BATCH_NO_SEQ_KEY_PREFIX = "mes:pro_batch_code:seq:";
+
+ /**
* 鍗曟鎵归噺鍙栫爜鐨勬渶澶т釜鏁�
* <p>
* 鍙� Redis 鍗曟潯鍛戒护鍙傛暟瑙勬ā涓庡搷搴斾綋澶у皬绾︽潫锛岃繃澶у弽鑰屽鍔犲崟娆¢樆濉炴椂闂淬��
@@ -60,6 +65,17 @@
+ "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);
+
+ /**
+ * 鍘熷瓙鍒嗛厤鐢熶骇鎵规娴佹按鍙凤細鍏堟寜搴撳唴褰撳墠鏈�澶ф祦姘存牎姝e熀鍑嗗�硷紝鍐嶈嚜澧炪��
+ * 鎵嬪姩褰曞叆杈冨ぇ鎵规鍙锋垨鐩存帴瀵煎叆鏁版嵁鍚庯紝涓嬩竴娆¤嚜鍔ㄥ彇鍙蜂笉浼氫笌涔嬮噸澶嶃��
+ */
+ private static final RedisScript<Long> ALLOCATE_BATCH_NO_SCRIPT = new DefaultRedisScript<>(
+ "local cur = redis.call('GET', KEYS[1]) "
+ + "local base = tonumber(ARGV[1]) "
+ + "if (not cur) or (tonumber(cur) < base) then redis.call('SET', KEYS[1], base) end "
+ + "return redis.call('INCR', KEYS[1])",
Long.class);
@Resource
@@ -117,6 +133,23 @@
}
/**
+ * 鍘熷瓙鍒嗛厤鐢熶骇鎵规娴佹按鍙凤細鍏堟寜搴撳唴褰撳墠鏈�澶ф祦姘存牎姝e熀鍑嗗�硷紝鍐嶈嚜澧炪��
+ *
+ * @param year 鎵规鍙峰勾浠斤紙4 浣嶏級
+ * @param dbMaxSerial 鏁版嵁搴撳綋骞村凡鐢ㄦ渶澶ф祦姘村彿锛屼紶 null 瑙嗕负 0
+ * @return 涓嬩竴涓祦姘村彿
+ */
+ public int allocateBatchNo(String year, Integer dbMaxSerial) {
+ Long next = stringRedisTemplate.execute(ALLOCATE_BATCH_NO_SCRIPT,
+ List.of(BATCH_NO_SEQ_KEY_PREFIX + year),
+ String.valueOf(dbMaxSerial == null ? 0 : dbMaxSerial));
+ if (next == null) {
+ throw new IllegalStateException("鍒嗛厤鐢熶骇鎵规娴佹按鍙峰け璐ワ紝璇烽噸璇�");
+ }
+ return next.intValue();
+ }
+
+ /**
* 鍘熷瓙鍒嗛厤涓�娈佃繛缁殑琚嬪簭鍙凤紝杩斿洖鍖洪棿璧峰鍊笺��
* <p>
* 琚嬪簭鍙峰師鍏堢敱銆屾煡搴撳唴鏈�澶у�煎啀 +1銆嶅緱鍒帮紝骞跺彂鐢熸垚鏃朵袱涓姹備細璇诲埌鍚屼竴涓渶澶у�硷紝
--
Gitblit v1.9.3