1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- 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);
- }
- }
|