|
|
@@ -94,6 +94,42 @@ public class OrderGenerateSeqNoUtils {
|
|
|
}
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
+ * redis 根据key需要减一
|
|
|
+ * @param redisOrderGenerateEnum
|
|
|
+ * @param prefix
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getSeqNoMinusOne(RedisOrderGenerateEnum redisOrderGenerateEnum, OrderRuleEnum prefix) {
|
|
|
+ Date now = new Date();
|
|
|
+ /**拼接redis key 公共key+[业务标识]+日期 */
|
|
|
+ StringBuilder stringBuilder = new StringBuilder();
|
|
|
+ StringBuilder appendKey = stringBuilder.append(redisOrderGenerateEnum.getKey()).append(prefix.getCode()).append(DateUtils.formatDate(new Date()));
|
|
|
+ //设置过期时间,这里设置为当天的23:59:59
|
|
|
+ Long secondsDay = DateUtils.getSecondsDay();
|
|
|
+ Long seq = getMinusOne(appendKey.toString(), secondsDay);
|
|
|
+ String date = DateUtils.formatDateToYYMMDD(now);
|
|
|
+ String sequence = StringUtils.addZeroForNum(seq.toString(), 4);
|
|
|
+ if (prefix == null) {
|
|
|
+ throw new RuntimeException("Order Generate SeqNo Error");
|
|
|
+ }
|
|
|
+ /**拼接业务编号*/
|
|
|
+ String seqNo = prefix.getCode() + date + sequence;
|
|
|
+ log.info("KEY:{}, 序列号生成:{}, 过期时间:{}秒", appendKey, seqNo, secondsDay);
|
|
|
+ return seqNo;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static long getMinusOne(String key, Long expireTime) {
|
|
|
+ long seq = RedissonUtils.decrementAndGet(key, expireTime);
|
|
|
+// RedisAtomicLong counter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
|
|
|
+// //设置过期时间
|
|
|
+// counter.expireAt(expireTime);
|
|
|
+// //返回redis中key的值,内部实现下面详细说明
|
|
|
+// return counter.incrementAndGet();
|
|
|
+ return seq;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* @param redisOrderGenerateEnum 传入枚举指定的key
|
|
|
* @param prefix 业务类别
|
|
|
@@ -111,7 +147,7 @@ public class OrderGenerateSeqNoUtils {
|
|
|
Long secondsDay = DateUtils.getSecondsDay();
|
|
|
Long seq = generate(appendKey.toString(), secondsDay);
|
|
|
String date = DateUtils.formatDateToYYMMDD(now);
|
|
|
- String sequence = String.format("%04d", seq);
|
|
|
+ String sequence = StringUtils.addZeroForNum(seq.toString(), 4);
|
|
|
/**拼接业务编号*/
|
|
|
String seqNo = prefix.getCode() + date + sequence;
|
|
|
log.info("KEY:{}, 序列号生成:{}, 过期时间:{}秒", appendKey, seqNo, secondsDay);
|