Seq.java 2.3 KB

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