|
@@ -0,0 +1,86 @@
|
|
|
+package com.ruoyi.common.utils.uuid;
|
|
|
+
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
+import com.ruoyi.common.utils.DateUtils;
|
|
|
+import com.ruoyi.common.utils.StringUtils;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author ruoyi 序列生成类
|
|
|
+ */
|
|
|
+public class Seq
|
|
|
+{
|
|
|
+ // 通用序列类型
|
|
|
+ public static final String commSeqType = "COMMON";
|
|
|
+
|
|
|
+ // 上传序列类型
|
|
|
+ public static final String uploadSeqType = "UPLOAD";
|
|
|
+
|
|
|
+ // 通用接口序列数
|
|
|
+ private static AtomicInteger commSeq = new AtomicInteger(1);
|
|
|
+
|
|
|
+ // 上传接口序列数
|
|
|
+ private static AtomicInteger uploadSeq = new AtomicInteger(1);
|
|
|
+
|
|
|
+ // 机器标识
|
|
|
+ private static String machineCode = "A";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取通用序列号
|
|
|
+ *
|
|
|
+ * @return 序列值
|
|
|
+ */
|
|
|
+ public static String getId()
|
|
|
+ {
|
|
|
+ return getId(commSeqType);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 默认16位序列号 yyMMddHHmmss + 一位机器标识 + 3长度循环递增字符串
|
|
|
+ *
|
|
|
+ * @return 序列值
|
|
|
+ */
|
|
|
+ public static String getId(String type)
|
|
|
+ {
|
|
|
+ AtomicInteger atomicInt = commSeq;
|
|
|
+ if (uploadSeqType.equals(type))
|
|
|
+ {
|
|
|
+ atomicInt = uploadSeq;
|
|
|
+ }
|
|
|
+ return getId(atomicInt, 3);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 通用接口序列号 yyMMddHHmmss + 一位机器标识 + length长度循环递增字符串
|
|
|
+ *
|
|
|
+ * @param atomicInt 序列数
|
|
|
+ * @param length 数值长度
|
|
|
+ * @return 序列值
|
|
|
+ */
|
|
|
+ public static String getId(AtomicInteger atomicInt, int length)
|
|
|
+ {
|
|
|
+ String result = DateUtils.dateTimeNow();
|
|
|
+ result += machineCode;
|
|
|
+ result += getSeq(atomicInt, length);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 序列循环递增字符串[1, 10 的 (length)幂次方), 用0左补齐length位数
|
|
|
+ *
|
|
|
+ * @return 序列值
|
|
|
+ */
|
|
|
+ private synchronized static String getSeq(AtomicInteger atomicInt, int length)
|
|
|
+ {
|
|
|
+ // 先取值再+1
|
|
|
+ int value = atomicInt.getAndIncrement();
|
|
|
+
|
|
|
+ // 如果更新后值>=10 的 (length)幂次方则重置为1
|
|
|
+ int maxSeq = (int) Math.pow(10, length);
|
|
|
+ if (atomicInt.get() >= maxSeq)
|
|
|
+ {
|
|
|
+ atomicInt.set(1);
|
|
|
+ }
|
|
|
+ // 转字符串,用0左补齐
|
|
|
+ return StringUtils.padl(value, length);
|
|
|
+ }
|
|
|
+}
|