update 优化 发号器工具类便利性优化

dev
疯狂的狮子Li 6 months ago
parent 09c484f496
commit 8dc266055c

@ -1,7 +1,6 @@
package org.dromara.common.redis.utils;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.dromara.common.core.utils.SpringUtils;
@ -10,6 +9,10 @@ import org.redisson.api.RIdGenerator;
import org.redisson.api.RedissonClient;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
/**
*
@ -23,12 +26,12 @@ public class SequenceUtils {
/**
*
*/
public static final Long DEFAULT_INIT_VALUE = 1L;
public static final long DEFAULT_INIT_VALUE = 1L;
/**
*
*/
public static final Long DEFAULT_STEP_VALUE = 1L;
public static final long DEFAULT_STEP_VALUE = 1L;
/**
* -
@ -40,6 +43,11 @@ public class SequenceUtils {
*/
public static final Duration DEFAULT_EXPIRE_TIME_MINUTE = Duration.ofMinutes(1);
/**
* ID - 6ID999999
*/
public static final int DEFAULT_MIN_ID_CAPACITY_BITS = 6;
/**
* Redisson
*/
@ -54,14 +62,11 @@ public class SequenceUtils {
* @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;
}
public static RIdGenerator getIdGenerator(String key, Duration expireTime, long initValue, long stepValue) {
RIdGenerator idGenerator = REDISSON_CLIENT.getIdGenerator(key);
// 初始值和步长不能小于等于0
initValue = initValue <= 0 ? DEFAULT_INIT_VALUE : initValue;
stepValue = stepValue <= 0 ? DEFAULT_STEP_VALUE : stepValue;
// 设置初始值和步长
idGenerator.tryInit(initValue, stepValue);
// 设置过期时间
@ -69,6 +74,17 @@ public class SequenceUtils {
return idGenerator;
}
/**
* ID
*
* @param key key
* @param expireTime
* @return ID
*/
public static RIdGenerator getIdGenerator(String key, Duration expireTime) {
return getIdGenerator(key, expireTime, DEFAULT_INIT_VALUE, DEFAULT_STEP_VALUE);
}
/**
* keyid
*
@ -78,10 +94,21 @@ public class SequenceUtils {
* @param stepValue ID
* @return id
*/
public static long nextId(String key, Duration expireTime, Long initValue, Long stepValue) {
public static long getNextId(String key, Duration expireTime, long initValue, long stepValue) {
return getIdGenerator(key, expireTime, initValue, stepValue).nextId();
}
/**
* keyid (ID=1,ID=1)
*
* @param key key
* @param expireTime
* @return id
*/
public static long getNextId(String key, Duration expireTime) {
return getIdGenerator(key, expireTime).nextId();
}
/**
* keyid
*
@ -91,19 +118,8 @@ public class SequenceUtils {
* @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));
}
/**
* keyid (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();
public static String getNextIdString(String key, Duration expireTime, long initValue, long stepValue) {
return String.valueOf(getNextId(key, expireTime, initValue, stepValue));
}
/**
@ -113,8 +129,8 @@ public class SequenceUtils {
* @param expireTime
* @return id
*/
public static String nextIdStr(String key, Duration expireTime) {
return String.valueOf(nextId(key, expireTime));
public static String getNextIdString(String key, Duration expireTime) {
return String.valueOf(getNextId(key, expireTime));
}
/**
@ -125,56 +141,210 @@ public class SequenceUtils {
* @param width 0
* @return id
*/
public static String nextPaddedIdStr(String key, Duration expireTime, Integer width) {
return StringUtils.leftPad(nextIdStr(key, expireTime), width, '0');
public static String getPaddedNextIdString(String key, Duration expireTime, Integer width) {
return StringUtils.leftPad(getNextIdString(key, expireTime), width, '0');
}
/**
* yyyyMMdd id
* yyyyMMdd id
*
* @return id
* @deprecated 使 {@link #getDateId(String)} {@link #getDateId(String, boolean)}{@link #getDateId(String, boolean, int)}ID
*/
public static String nextIdDate() {
return nextIdDate("");
@Deprecated
public static String getDateId() {
return getDateId("");
}
/**
* prefix + yyyyMMdd id
* 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));
// 获取下一个id
long nextId = getIdGenerator(prefixKey, DEFAULT_EXPIRE_TIME_DAY, DEFAULT_INIT_VALUE, DEFAULT_STEP_VALUE).nextId();
// 返回完整id
return StringUtils.format("{}{}", prefixKey, nextId);
public static String getDateId(String prefix) {
return getDateId(prefix, true);
}
/**
* yyyyMMddHHmmss id
* prefix + yyyyMMdd id
*
* @param prefix
* @param isWithPrefix id
* @return id
*/
public static String nextIdDateTime() {
return nextIdDateTime("");
public static String getDateId(String prefix, boolean isWithPrefix) {
return getDateId(prefix, isWithPrefix, -1);
}
/**
* prefix + yyyyMMddHHmmss id
* prefix + yyyyMMdd id (ID = {@link #DEFAULT_MIN_ID_CAPACITY_BITS})}
*
* @param prefix
* @param isWithPrefix id
* @return id
*/
public static String getPaddedDateId(String prefix, boolean isWithPrefix) {
return getDateId(prefix, isWithPrefix, DEFAULT_MIN_ID_CAPACITY_BITS);
}
/**
* prefix + yyyyMMdd id
*
* @param prefix
* @param isWithPrefix id
* @param minIdCapacityBits IDID00
* @return id
*/
public static String getDateId(String prefix, boolean isWithPrefix, int minIdCapacityBits) {
return getDateId(prefix, isWithPrefix, minIdCapacityBits, LocalDate.now());
}
/**
* prefix + yyyyMMdd id
*
* @param prefix
* @param isWithPrefix id
* @param minIdCapacityBits IDID00
* @param time
* @return id
*/
public static String getDateId(String prefix, boolean isWithPrefix, int minIdCapacityBits, LocalDate time) {
return getDateId(prefix, isWithPrefix, minIdCapacityBits, time, DEFAULT_INIT_VALUE, DEFAULT_STEP_VALUE);
}
/**
* prefix + yyyyMMdd id
*
* @param prefix
* @param isWithPrefix id
* @param minIdCapacityBits IDID00
* @param time
* @param initValue ID
* @param stepValue ID
* @return id
*/
public static String getDateId(String prefix, boolean isWithPrefix, int minIdCapacityBits, LocalDate time, long initValue, long stepValue) {
return getDatePatternId(prefix, isWithPrefix, minIdCapacityBits, time, DatePattern.PURE_DATE_FORMATTER, DEFAULT_EXPIRE_TIME_DAY, initValue, stepValue);
}
/**
* yyyyMMddHHmmss id
*
* @return id
* @deprecated 使 {@link #getDateTimeId(String)} {@link #getDateTimeId(String, boolean)}{@link #getDateTimeId(String, boolean, int)}ID
*/
@Deprecated
public static String getDateTimeId() {
return getDateTimeId("", false);
}
/**
* 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));
// 获取下一个id
long nextId = getIdGenerator(prefixKey, DEFAULT_EXPIRE_TIME_MINUTE, DEFAULT_INIT_VALUE, DEFAULT_STEP_VALUE).nextId();
// 返回完整id
return StringUtils.format("{}{}", prefixKey, nextId);
public static String getDateTimeId(String prefix) {
return getDateTimeId(prefix, true);
}
/**
* prefix + yyyyMMddHHmmss id
*
* @param prefix
* @param isWithPrefix id
* @return id
*/
public static String getDateTimeId(String prefix, boolean isWithPrefix) {
return getDateTimeId(prefix, isWithPrefix, -1);
}
/**
* prefix + yyyyMMddHHmmss id (ID = {@link #DEFAULT_MIN_ID_CAPACITY_BITS})}
*
* @param prefix
* @param isWithPrefix id
* @return id
*/
public static String getPaddedDateTimeId(String prefix, boolean isWithPrefix) {
return getDateTimeId(prefix, isWithPrefix, DEFAULT_MIN_ID_CAPACITY_BITS);
}
/**
* prefix + yyyyMMddHHmmss id
*
* @param prefix
* @param isWithPrefix id
* @param minIdCapacityBits IDID00
* @return id
*/
public static String getDateTimeId(String prefix, boolean isWithPrefix, int minIdCapacityBits) {
return getDateTimeId(prefix, isWithPrefix, minIdCapacityBits, LocalDateTime.now());
}
/**
* prefix + yyyyMMddHHmmss id
*
* @param prefix
* @param isWithPrefix id
* @param minIdCapacityBits IDID00
* @param time
* @return id
*/
public static String getDateTimeId(String prefix, boolean isWithPrefix, int minIdCapacityBits, LocalDateTime time) {
return getDateTimeId(prefix, isWithPrefix, minIdCapacityBits, time, DEFAULT_INIT_VALUE, DEFAULT_STEP_VALUE);
}
/**
* prefix + yyyyMMddHHmmss id
*
* @param prefix
* @param isWithPrefix id
* @param minIdCapacityBits IDID00
* @param initValue ID
* @param stepValue ID
* @return id
*/
public static String getDateTimeId(String prefix, boolean isWithPrefix, int minIdCapacityBits, LocalDateTime time, long initValue, long stepValue) {
return getDatePatternId(prefix, isWithPrefix, minIdCapacityBits, time, DatePattern.PURE_DATETIME_FORMATTER, DEFAULT_EXPIRE_TIME_MINUTE, initValue, stepValue);
}
/**
* keyID
*
* @param prefix
* @param isWithPrefix id
* @param minIdCapacityBits IDID00
* @param temporalAccessor 访
* @param timeFormatter
* @param expireTime
* @param initValue ID
* @param stepValue ID
* @return id
*/
private static String getDatePatternId(String prefix, boolean isWithPrefix, int minIdCapacityBits, TemporalAccessor temporalAccessor, DateTimeFormatter timeFormatter, Duration expireTime, long initValue, long stepValue) {
// 时间前缀
String timePrefix = timeFormatter.format(temporalAccessor);
// 业务前缀 + 时间前缀 构建 prefixKey
String prefixKey = StringUtils.format("{}{}", StringUtils.blankToDefault(prefix, ""), timePrefix);
// 获取id例 -> 1
String nextId = getNextIdString(prefixKey, expireTime, initValue, stepValue);
// minIdCapacityBits 大于0且 nextId 的长度小于 minIdCapacityBits则左补0
if (minIdCapacityBits > 0 && nextId.length() < minIdCapacityBits) {
nextId = StringUtils.leftPad(nextId, minIdCapacityBits, '0');
}
// 是否携带业务前缀
if (isWithPrefix) {
// 例 -> P202507031
// 其中 P 为业务前缀202507031 为 yyyyMMdd 格式时间, 1 为nextId
return StringUtils.format("{}{}", prefixKey, nextId);
}
// 例 -> 202507031
// 其中 202507031 为 yyyyMMdd 格式时间, 1 为nextId
return StringUtils.format("{}{}", timePrefix, nextId);
}
}

Loading…
Cancel
Save