自动编号工具类: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是一个简单而强大的工具类,它可以帮助开发者轻松生成符合规则的编号。通过使用这个工具类,我们可以减少手动编写编号生成逻辑的时间,从而提高开发效率。

`在软件开发中,经常需要生成唯一的编号,例如订单号、发票号、实验编号等。为了简化这一过程,本文将介绍一个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;
    }
}
posted @   djπ  阅读(757)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示