| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- 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()));
- // }
- }
|