首页 > 其他分享 >自动编号工具类:NumAutoUtils详解

自动编号工具类:NumAutoUtils详解

时间:2024-04-08 15:33:36浏览次数:25  
标签:numStr 前缀 NumAutoUtils 日期 length 详解 编号 String

在软件开发中,经常需要生成唯一的编号,例如订单号、发票号、实验编号等。为了简化这一过程,本文将介绍一个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

相关文章

  • 为大家整理最全的24种设计模式详解,必收藏
    设计模式六大原则 单一职责原则一个方法尽可能做一件事情,一般来说不应该让一个方法承担多个职责。单一职责原则的英文名称是SingleResponsibilityPrinciple,简称是SRP。单一职责原则的定义是:应该有且仅有一个原因引起类的变更。SRP的原话解释是:Thereshouldneverbemo......
  • 运维系列(创建windows服务,亲测有效):Windows 安装Redis(图文详解)
    Windows安装Redis(图文详解)Windows安装Redis(图文详解)一、Redis是什么数据库?二、安装Redis1、下载地址2、安装过程2.1将下载的压缩包解压到一个文件夹中:2.2打开cmd指令窗口,进入到解压的那个文件夹里:2.3输入redis-serverredis.windows.conf:2.4部署Redis在windows下的......
  • JavaScript之applye、bind和call方法详解
    QuestionQ1apply()、bind()和call()方法的区别在哪?Q2apply()和call()的应用场景Q3apply()、bind()和call()方法手写实现逻辑来源继承自Function.prototype,属于实例方法console.log(Function.prototype.hasOwnProperty('call')) //trueconsole.log(Functio......
  • 详解环境变量
    大家好,我是knight-n。本篇文章将会为大家介绍环境变量。目录什么是环境变量环境变量的作用常见的环境变量系统调用getenvputenv​编辑相关命令 echoexportenvunsetset环境变量的组织方式获取环境变量总结什么是环境变量环境变量是指在操作系统中用来指定......
  • SRIO学习(1)SRIO介绍以及IP核详解
    文章目录一、SRIO介绍1.1、概要1.2、RapidIO与传统嵌入互连方式的比较1.3、串行RapidIO协议(SRIO)二、RapidIO协议结构及包格式2.1、逻辑层2.2传输层2.3物理层三、IP核详解3.1、逻辑层3.1.1I/O端口3.1.2消息(Message)端口3.1.3用户自定义端口3.1.4维护端口3.1.5Stat......
  • C++ Break、Continue 和 数组操作详解
    C++Break和Continuebreak语句还可以用来跳出循环。在以下示例中,当i等于4时跳出循环:for(inti=0;i<10;i++){if(i==4){break;}cout<<i<<"\n";}C++Continue以下示例跳过了值为4的情况:for(inti=0;i<10;i++){if(i==4)......
  • hive窗口分析函数使用详解系列一
    1.综述Hive的聚合函数衍生的窗口函数在我们进行数据处理和数据分析过程中起到了很大的作用在Hive中,窗口函数允许你在结果集的行上进行计算,这些计算不会影响你查询的结果集的行数。Hive提供的窗口和分析函数可以分为聚合函数类窗口函数,分组排序类窗口函数,偏移量计算类窗口函数。......
  • 【Spring进阶系列丨第七篇】Spring框架新注解分类及详解
    文章目录一、Spring新注解1.1、Configuration注解1.1.1、定义一个类1.1.2、使用Configuration注解修饰类1.1.3、作用1.2、Bean注解1.2.1、定义bean1.2.2、在主配置类中注册bean1.2.3、测试容器中是否有该bean1.2.4、注册bean的同时可以指定bean名称1.2.5、补充内容1.2.5......
  • Git 使用详解
    前言:Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。但是很多同学仍然不会用,今天我们就来详细讲一下这个Git到底怎么玩。一、安装Git客户端1.这里为大家提供了windows版的Git客户端以及安装图文详解文档。百度网盘:https://pan.baidu.com/s/1CDu0......
  • Offer必备算法22_优先级队列_堆_四道力扣题详解(由易到难)
    目录①力扣1046.最后一块石头的重量解析代码②力扣703.数据流中的第K大元素解析代码③力扣692.前K个高频单词解析代码④力扣295.数据流的中位数解析代码本篇完。①力扣1046.最后一块石头的重量1046.最后一块石头的重量难度简单有一堆石头,每块石头的重......