0
点赞
收藏
分享

微信扫一扫

按年月日递增序列号

爱薇Ivy趣闻 2022-03-18 阅读 63
/**
 * @Title: TODO
 * @ClassName SerialUtils
 * @Date 2022/3/18 16:36
 * @Version 1.0
 */
public class SerialUtils {
    private static final int MAX_VALUE = 10000;

    private static final String FORMAT = "yyyyMMdd";

    private static final Format DF = new SimpleDateFormat(FORMAT);

    private static final byte[] lock = new byte[0];

    private String prefix = null;

    private Date date = null;

    private int number = 1;

    private static Map<String, SerialUtil> map = new HashMap<String, SerialUtil>();

    public static void main(String [] args){

        System.out.println(SerialUtil.newInstance("SZ", new Date()).toString());

    }

    private SerialUtil(String prefix, Date date) {
        this.prefix = prefix;
        this.date = date;
    }

    public static SerialUtil newInstance(String prefix) {
        Date date = new Date();
        return newInstance(prefix, date);
    }

    public static SerialUtil newInstance(String prefix, Date date) {

        SerialUtil o = null;
        synchronized (lock) {

            String key = getKey(prefix, date);
            if (map.containsKey(key)) {
                o = map.get(key);
                int number = o.getNumber();
                if (number < MAX_VALUE) {
                    o.setNumber(number + 1);
                } else {
                    o.setNumber(1);
                }
            } else {

                o = new SerialUtil(prefix, date);
                map.put(key, o);
            }
        }
        return o;
    }

    private static String getKey(String prefix, Date date) {
        return prefix + format(date);
    }

    private static String format(Date date) {
        return DF.format(date);
    }

    @Override
    public String toString() {
        prefix = "";
        return prefix + format(date) + String.format("%04d", number);
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public int getNumber() {
        return number;
    }
}
举报

相关推荐

0 条评论