package com.chinaitop.depot.utils; import org.apache.commons.lang.StringUtils; import org.springframework.util.ObjectUtils; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.Date; /** * @author qingsong.han * @description: 生成单号 * @create 2024-11-13 19:28 */ public class OrderNumberUtil { /** * int 定长拼接-后缀顺序号 * * @param length 总长度 * @param param 参数 * @return 参数前补0 */ public 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("-", ""); } /** * @param f 前缀 * @return 前缀+中缀+后缀 拼接 */ public static String frontData(String f, int length, int param, Date date) { String localDate = getLocalDate(); if (!ObjectUtils.isEmpty(date)) { localDate = getYMD(date); } return String.format("%s%s%s", f, localDate, integerToString(length, param)); } /** * 主方法 * 调用生成完整规则序号: AJXXSJG + 20240622 + 002(数据库查询完整字符串:AJXXSJG20240622001) * @param f 前缀 * @param length 位数必须大于0 * @param xh 字符串 * @param date 时间 * @return 尾数+1的编号 */ public synchronized static String initNum(String f, int length, String xh, Date date) { // 初始化 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, date); } /** * 获取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; } // 获取日期格式化 public static String getYMD(Date param) { SimpleDateFormat dateTime = new SimpleDateFormat("yyyyMMdd"); return dateTime.format(param); } // 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("3191120116103622208D010021", 4, "3191120116103622208D010021202411130001", new Date())); // } }