lengfaqiang 2 лет назад
Родитель
Сommit
6626936377

+ 37 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/OrderGenerateSeqNoUtils.java

@@ -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);