package com.sw.mes.yb.seed.utils;

import com.sw.mes.utils.StringUtils;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 编码生成器
 */
public class CodeSender {

    private static final String YYYY_MM_DD = "yyyyMMdd";

    private static final String YY_MM_DD ="yyMMdd";

    private static final int DEFAULT_SIZE = 4;

    public static String getNumber(String name,int size){
        return getNumber(name,YYYY_MM_DD,size);
    }

    public static String getNumber(String name){
        return getNumber(name,YYYY_MM_DD,DEFAULT_SIZE);
    }

    public static String getNumber(int size){
        return getNumbers(YYYY_MM_DD,size);
    }

    /**
     * 自动获取单号
     * @param name 单号名称 如"RK","ZJ"...
     * @param pattern 日期格式
     * @param size 流水号长度  如0001,000001...
     * @return
     */
    public static String getNumber(String name,String pattern,int size){
        String nameUP = name.toUpperCase();
        //获取日期
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        String date = sdf.format(new Date());
        //获取Redis操作类自增数据 原子值可以保证当前模块的流水号不会重复
        long value = RedisUtils.incrAtomicValue(nameUP + ":" + date);
        String result = StringUtils.padl(value, size);
        return new StringBuilder().append(name).append(date).append(result).toString();
    }

    /**
     * 年月日+流水号
     * @param pattern
     * @param size
     * @return
     */
    public static String getNumbers(String pattern,int size){
        //获取日期
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        String date = sdf.format(new Date());
        //获取Redis操作类自增数据 原子值可以保证当前模块的流水号不会重复
        long value = RedisUtils.incrAtomicValue(date);
        String result = StringUtils.padl(value, size);
        return new StringBuilder().append(date).append(result).toString();
    }
}
