xm
2024-06-14 722af26bc6fec32bb289b1df51a9016a4935610f
提交 | 用户 | 时间
722af2 1 package com.dl.common.utils;
X 2
3 import java.util.concurrent.atomic.AtomicInteger;
4
5 /**
6  * @author dl 序列生成类
7  */
8 public class Seq
9 {
10     // 通用序列类型
11     public static final String commSeqType = "COMMON";
12
13     // 上传序列类型
14     public static final String uploadSeqType = "UPLOAD";
15
16     // 通用接口序列数
17     private static AtomicInteger commSeq = new AtomicInteger(1);
18
19     // 上传接口序列数
20     private static AtomicInteger uploadSeq = new AtomicInteger(1);
21
22     // 机器标识
23     private static final String machineCode = "A";
24
25     /**
26      * 获取通用序列号
27      *
28      * @return 序列值
29      */
30     public static String getId()
31     {
32         return getId(commSeqType);
33     }
34
35     /**
36      * 默认16位序列号 yyMMddHHmmss + 一位机器标识 + 3长度循环递增字符串
37      *
38      * @return 序列值
39      */
40     public static String getId(String type)
41     {
42         AtomicInteger atomicInt = commSeq;
43         if (uploadSeqType.equals(type))
44         {
45             atomicInt = uploadSeq;
46         }
47         return getId(atomicInt, 3);
48     }
49
50     /**
51      * 通用接口序列号 yyMMddHHmmss + 一位机器标识 + length长度循环递增字符串
52      *
53      * @param atomicInt 序列数
54      * @param length 数值长度
55      * @return 序列值
56      */
57     public static String getId(AtomicInteger atomicInt, int length)
58     {
59         String result = DateUtils.dateTimeNow();
60         result += machineCode;
61         result += getSeq(atomicInt, length);
62         return result;
63     }
64
65     /**
66      * 序列循环递增字符串[1, 10 的 (length)幂次方), 用0左补齐length位数
67      *
68      * @return 序列值
69      */
70     private synchronized static String getSeq(AtomicInteger atomicInt, int length)
71     {
72         // 先取值再+1
73         int value = atomicInt.getAndIncrement();
74
75         // 如果更新后值>=10 的 (length)幂次方则重置为1
76         int maxSeq = (int) Math.pow(10, length);
77         if (atomicInt.get() >= maxSeq)
78         {
79             atomicInt.set(1);
80         }
81         // 转字符串,用0左补齐
82         return StringUtils.padl(value, length);
83     }
84 }