在软件开发中,经常需要生成唯一的编号,例如订单号、发票号、实验编号等。为了简化这一过程,本文将介绍一个Java工具类NumAutoUtils,它可以帮助我们生成带有前缀和日期的自动编号。
概述
NumAutoUtils是一个Java工具类,它提供了两种方法来生成编号:getArMaxNum和getArMaxNum2。这些方法能够根据提供的前缀、长度和日期模式来生成符合要求的编号。
方法详解
getArMaxNum
getArMaxNum方法接收三个参数:numStr(当前最大的编号字符串),prefix(编号的前缀),以及length(编号的长度)。该方法的执行流程如下:
创建一个StringBuffer对象experimentNum,用于拼接编号的前缀和日期。
使用DateUtil.format方法获取当前日期,并按照DatePattern.PURE_DATE_PATTERN格式化日期。
根据length参数创建一个足够长度的数字字符串,不足的部分用0填充。
如果numStr不为空,则提取出最后length个字符作为当前最大编号,并加1得到新的编号。
将前缀、日期和新编号拼接后返回。
getArMaxNum2
getArMaxNum2方法有两个重载版本,第一个版本使用默认的日期模式DatePattern.PURE_DATE_PATTERN,第二个版本允许用户自定义日期模式。该方法的执行流程与getArMaxNum类似,但在处理编号时有一些不同:
创建一个StringBuffer对象experimentNum,用于拼接编号的前缀和日期。
根据用户提供的日期模式格式化当前日期。
调用getInitNum方法生成一个初始编号字符串,该方法会根据length参数创建一个以1开头,其余部分用0填充的字符串。
如果numStr不为空,则提取出最后length个字符作为当前最大编号,并加1得到新的编号。
将新编号填充到足够的长度,并与前缀和日期拼接后返回。
使用场景
NumAutoUtils类适用于需要生成带有日期前缀和自定义长度编号的场景。例如,你可以使用它来生成实验报告的编号,如EXP-20220711-1000,或者财务部门生成带有年度和序号的发票号。
结论
NumAutoUtils是一个简单而强大的工具类,它可以帮助开发者轻松生成符合规则的编号。通过使用这个工具类,我们可以减少手动编写编号生成逻辑的时间,从而提高开发效率。
`在软件开发中,经常需要生成唯一的编号,例如订单号、发票号、实验编号等。为了简化这一过程,本文将介绍一个Java工具类NumAutoUtils,它可以帮助我们生成带有前缀和日期的自动编号。
概述
NumAutoUtils是一个Java工具类,它提供了两种方法来生成编号:getArMaxNum和getArMaxNum2。这些方法能够根据提供的前缀、长度和日期模式来生成符合要求的编号。
方法详解
getArMaxNum
getArMaxNum方法接收三个参数:numStr(当前最大的编号字符串),prefix(编号的前缀),以及length(编号的长度)。该方法的执行流程如下:
创建一个StringBuffer对象experimentNum,用于拼接编号的前缀和日期。
使用DateUtil.format方法获取当前日期,并按照DatePattern.PURE_DATE_PATTERN格式化日期。
根据length参数创建一个足够长度的数字字符串,不足的部分用0填充。
如果numStr不为空,则提取出最后length个字符作为当前最大编号,并加1得到新的编号。
将前缀、日期和新编号拼接后返回。
getArMaxNum2
getArMaxNum2方法有两个重载版本,第一个版本使用默认的日期模式DatePattern.PURE_DATE_PATTERN,第二个版本允许用户自定义日期模式。该方法的执行流程与getArMaxNum类似,但在处理编号时有一些不同:
创建一个StringBuffer对象experimentNum,用于拼接编号的前缀和日期。
根据用户提供的日期模式格式化当前日期。
调用getInitNum方法生成一个初始编号字符串,该方法会根据length参数创建一个以1开头,其余部分用0填充的字符串。
如果numStr不为空,则提取出最后length个字符作为当前最大编号,并加1得到新的编号。
将新编号填充到足够的长度,并与前缀和日期拼接后返回。
使用场景
NumAutoUtils类适用于需要生成带有日期前缀和自定义长度编号的场景。例如,你可以使用它来生成实验报告的编号,如EXP-20220711-1000,或者财务部门生成带有年度和序号的发票号。
结论
NumAutoUtils是一个简单而强大的工具类,它可以帮助开发者轻松生成符合规则的编号。通过使用这个工具类,我们可以减少手动编写编号生成逻辑的时间,从而提高开发效率。
package com.csot.kms.common.utill;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import java.util.Date;
/**
* @Author dj
* @Date 2022/7/11
**/
public class NumAutoUtils {
/***
* 获取最大的编号。
* @param numStr
* @param prefix
* @param length
* @return 前缀_年月_1000
*/
public static String getArMaxNum(String numStr,String prefix,Integer length) {
StringBuffer experimentNum = new StringBuffer();
experimentNum.append(prefix);
experimentNum.append(DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN));
StringBuffer sbNum = new StringBuffer("1");
for (int i = 1; i < length; i++) {
sbNum.append("0");
}
Integer num = Integer.parseInt(sbNum.toString());
if (StrUtil.isNotBlank(numStr)) {
String lastNum = numStr.substring(numStr.length() - length, numStr.length());
num = Integer.parseInt(lastNum) + 1;
}
return experimentNum.append("-").append(num).toString();
}
/***
*
* @param numStr
* @param prefix
* @param length
* @return 前缀_年月_00001
*/
public static String getArMaxNum2(String numStr,String prefix,Integer length) {
return getArMaxNum2(numStr, prefix, length, DatePattern.PURE_DATE_PATTERN);
}
public static String getArMaxNum2(String numStr,String prefix,Integer length,String datePattern) {
StringBuffer experimentNum = new StringBuffer();
experimentNum.append(prefix);
experimentNum.append(DateUtil.format(new Date(), datePattern));
String lastNumStr = getInitNum(length).toString();
if (StrUtil.isNotBlank(numStr)) {
int numStrLg = numStr.length();
int lastNum = Integer.parseInt(numStr.substring(numStrLg - length, numStrLg))+1;
lastNumStr = String.valueOf(lastNum);
for (int i = 0; i < length; i++) {
lastNumStr = lastNumStr.length()<length ? "0"+lastNumStr:lastNumStr;
}
}
return experimentNum.append("-").append(lastNumStr).toString();
}
private static StringBuffer getInitNum(Integer length) {
StringBuffer sbNum = new StringBuffer();
for (int i = 1; i < length; i++) {
sbNum.append("0");
}
sbNum.append("1");
return sbNum;
}
}
标签:numStr,前缀,NumAutoUtils,日期,length,详解,编号,String
From: https://www.cnblogs.com/dj699/p/18121304