package com.jcdm.common.utils.uuid; import java.util.concurrent.atomic.AtomicInteger; import com.jcdm.common.utils.DateUtils; import com.jcdm.common.utils.StringUtils; /** * @author jc åºåˆ—生æˆç±» */ 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 final 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); } }