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