package com.unis.common.util;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;

import java.time.LocalDate;

/**
 * @author qingsong.han
 * @description: 生成单号
 * @create 2024-05-21 14:18
 */
public class OrderNumberUtil {

    /**
     * int 定长拼接-后缀顺序号
     *
     * @param length 总长度
     * @param param  参数
     * @return 参数前补0
     */
    private static String integerToString(int length, int param) {
        return String.format("%0" + length + "d", param);
    }

    /**
     * 中缀
     *
     * @return yyyyMMdd
     */
    private static String getLocalDate() {
        String now = LocalDate.now().toString();
        return now.replaceAll("-", "");
    }

    /**
     * 中缀
     *
     * @return yyyy-
     */
    private static String getLocalDateYear() {
        return LocalDate.now().getYear()+"-";
    }

    /**
     * @param f 前缀
     * @return 前缀+中缀+后缀 拼接
     */
    public static String frontData(String f, int length, int param) {
        return String.format("%s%s%s", f, getLocalDate(), integerToString(length, param));
    }

    /**
     * 主方法
     * 调用生成完整规则序号: AJXXSJG + 20240622 + 002(数据库查询完整字符串:AJXXSJG20240622001)
     * @param f 前缀
     * @param length 位数必须大于0
     * @param xh 字符串
     * @return 尾数+1的编号
     */
    public synchronized static String initNum(String f, int length, String xh) {
        // 初始化
        int num = 1;
        if (!StringUtils.isEmpty(xh)) {
            String substring = xh.substring(xh.length() - length);
            int i = Integer.parseInt(substring);
            if (i < maxNum(length))
                num += i;
        }
        return frontData(f, length, num);
    }

    /**
     * 获取int位数的最大值:如6位->999999
     * @param length int位数
     * @return int
     */
    private static int maxNum(int length) {
        if (0 < length) {
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < length; i++) {
                builder.append(9);
            }
            return Integer.parseInt(builder.toString());
        }
        return 0;
    }

    /**
     * 索引号生成
     * 调用生成完整规则序号: AJXXSJG + 20240622 + 002(数据库查询完整字符串:AJXXSJG20240622001)
     * @param f 前缀
     * @param length 位数必须大于0
     * @param xh 字符串
     * @return 尾数+1的编号
     */
    public synchronized static String indexNumber(String f, int length, String xh) {
        // 初始化
        int num = 1;
        if (!StringUtils.isEmpty(xh)) {
            String substring = xh.substring(xh.length() - length);
            int i = Integer.parseInt(substring);
            if (i < maxNum(length))
                num += i;
        }
        return String.format("%s%s%s", f, getLocalDateYear(), integerToString(length, num));
    }



//    public static void main(String[] args) {
//        System.out.println(frontData("JH",4, 2));
//        System.out.println("-->" + maxNum(3));
//        System.out.println("-->" + initNum("AJXXSJG", 3, "AJXXSJG20240622001"));
//        System.out.println("-->" + initNum("AJXXSJG", 3, ""));
//    }


}
