From 06a8ab0ab2a0751ed172800296e020cb1a968325 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期四, 12 十二月 2024 22:28:25 +0800 Subject: [PATCH] !608 add 新增 基于Redisson的发号器工具 Merge pull request !608 from 秋辞未寒/dev --- ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/SequenceUtils.java | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 165 insertions(+), 0 deletions(-) diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/SequenceUtils.java b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/SequenceUtils.java new file mode 100644 index 0000000..3c2f703 --- /dev/null +++ b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/SequenceUtils.java @@ -0,0 +1,165 @@ +package org.dromara.common.redis.utils; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import org.dromara.common.core.utils.SpringUtils; +import org.dromara.common.core.utils.StringUtils; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.redisson.api.RIdGenerator; +import org.redisson.api.RedissonClient; + +import java.time.Duration; + +/** + * 鍙戝彿鍣ㄥ伐鍏风被 + * + * @author 绉嬭緸鏈瘨 + * @date 2024-12-10 + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class SequenceUtils { + + /** + * 榛樿鍒濆鍊� + */ + public static final Long DEFAULT_INIT_VALUE = 1L; + /** + * 榛樿姝ラ暱 + */ + public static final Long DEFAULT_STEP_VALUE = 1L; + /** + * 榛樿杩囨湡鏃堕棿-澶� + */ + public static final Duration DEFAULT_EXPIRE_TIME_DAY = Duration.ofDays(1); + /** + * 榛樿杩囨湡鏃堕棿-鍒嗛挓 + */ + public static final Duration DEFAULT_EXPIRE_TIME_MINUTE = Duration.ofMinutes(1); + + /** + * 鑾峰彇Redisson瀹㈡埛绔疄渚� + */ + private static final RedissonClient REDISSON_CLIENT = SpringUtils.getBean(RedissonClient.class); + + /** + * 鑾峰彇ID鐢熸垚鍣� + * + * @param key 涓氬姟key + * @param expireTime 杩囨湡鏃堕棿 + * @param initValue ID鍒濆鍊� + * @param stepValue ID姝ラ暱 + * @return ID鐢熸垚鍣� + */ + private static RIdGenerator getIdGenerator(String key, Duration expireTime, Long initValue, Long stepValue) { + if (initValue == null || initValue <= 0) { + initValue = DEFAULT_INIT_VALUE; + } + if (stepValue == null || stepValue <= 0) { + stepValue = DEFAULT_STEP_VALUE; + } + RIdGenerator idGenerator = REDISSON_CLIENT.getIdGenerator(key); + // 璁剧疆杩囨湡鏃堕棿 + idGenerator.expire(expireTime); + // 璁剧疆鍒濆鍊煎拰姝ラ暱 + idGenerator.tryInit(initValue, stepValue); + return idGenerator; + } + + /** + * 鑾峰彇鎸囧畾涓氬姟key鐨勫敮涓�id + * + * @param key 涓氬姟key + * @param expireTime 杩囨湡鏃堕棿 + * @param initValue ID鍒濆鍊� + * @param stepValue ID姝ラ暱 + * @return 鍞竴id + */ + public static long nextId(String key, Duration expireTime, Long initValue, Long stepValue) { + return getIdGenerator(key, expireTime, initValue, stepValue).nextId(); + } + + /** + * 鑾峰彇鎸囧畾涓氬姟key鐨勫敮涓�id瀛楃涓� + * + * @param key 涓氬姟key + * @param expireTime 杩囨湡鏃堕棿 + * @param initValue ID鍒濆鍊� + * @param stepValue ID姝ラ暱 + * @return 鍞竴id + */ + public static String nextIdStr(String key, Duration expireTime, Long initValue, Long stepValue) { + return String.valueOf(nextId(key, expireTime, initValue, stepValue)); + } + + /** + * 鑾峰彇鎸囧畾涓氬姟key鐨勫敮涓�id (ID鍒濆鍊�=1,ID姝ラ暱=1) + * + * @param key 涓氬姟key + * @param expireTime 杩囨湡鏃堕棿 + * @return 鍞竴id + */ + public static long nextId(String key, Duration expireTime) { + return getIdGenerator(key, expireTime, DEFAULT_INIT_VALUE, DEFAULT_STEP_VALUE).nextId(); + } + + /** + * 鑾峰彇鎸囧畾涓氬姟key鐨勫敮涓�id瀛楃涓� (ID鍒濆鍊�=1,ID姝ラ暱=1) + * + * @param key 涓氬姟key + * @param expireTime 杩囨湡鏃堕棿 + * @return 鍞竴id + */ + public static String nextIdStr(String key, Duration expireTime) { + return String.valueOf(nextId(key, expireTime)); + } + + /** + * 鑾峰彇 yyyyMMdd 寮�澶寸殑鍞竴id + * + * @return 鍞竴id + */ + public static String nextIdDate() { + return nextIdDate(""); + } + + /** + * 鑾峰彇 prefix + yyyyMMdd 寮�澶寸殑鍞竴id + * + * @param prefix 涓氬姟鍓嶇紑 + * @return 鍞竴id + */ + public static String nextIdDate(String prefix) { + // 鍓嶇紑+鏃ユ湡 鏋勫缓 prefixKey + String prefixKey = StringUtils.format("{}{}", StringUtils.blankToDefault(prefix, ""), DateUtil.format(DateUtil.date(), DatePattern.PURE_DATE_FORMATTER)); + // 鑾峰彇涓嬩竴涓猧d + long nextId = getIdGenerator(prefixKey, DEFAULT_EXPIRE_TIME_DAY, DEFAULT_INIT_VALUE, DEFAULT_STEP_VALUE).nextId(); + // 杩斿洖瀹屾暣id + return StringUtils.format("{}{}", prefixKey, nextId); + } + + /** + * 鑾峰彇 yyyyMMddHHmmss 寮�澶寸殑鍞竴id + * + * @return 鍞竴id + */ + public static String nextIdDateTime() { + return nextIdDateTime(""); + } + + /** + * 鑾峰彇 prefix + yyyyMMddHHmmss 寮�澶寸殑鍞竴id + * + * @param prefix 涓氬姟鍓嶇紑 + * @return 鍞竴id + */ + public static String nextIdDateTime(String prefix) { + // 鍓嶇紑+鏃ユ湡鏃堕棿 鏋勫缓 prefixKey + String prefixKey = StringUtils.format("{}{}", StringUtils.blankToDefault(prefix, ""), DateUtil.format(DateUtil.date(), DatePattern.PURE_DATETIME_FORMATTER)); + // 鑾峰彇涓嬩竴涓猧d + long nextId = getIdGenerator(prefixKey, DEFAULT_EXPIRE_TIME_MINUTE, DEFAULT_INIT_VALUE, DEFAULT_STEP_VALUE).nextId(); + // 杩斿洖瀹屾暣id + return StringUtils.format("{}{}", prefixKey, nextId); + } + +} -- Gitblit v1.9.3