首页 > 编程语言 >【转载】Java 有序生成订单号或流水号

【转载】Java 有序生成订单号或流水号

时间:2023-02-10 12:44:50浏览次数:43  
标签:Java String list 订单号 生成 流水号 编号 new caseNo

前言
  最近用到了一些编号的生成规则记录一下,有序的生成订单号或者流水号

概述
  第一种方式,适用于循环生成订单编号,例如有 100 条数据,需要循环生成相对应编号可以使用,下方的方法,仅限于特定场景

// 静态变量存储最大值
private static final AtomicInteger atomicNum = new AtomicInteger();
// 调用方法
public String getNewAutoNum(){
    for (int i = 0; i <3; i++) {
        //线程安全的原子操作,所以此方法无需同步
        int newNum = atomicNum.incrementAndGet();
        //数字长度为5位,长度不够数字前面补0
        String newStrNum = String.format("%05d", newNum);
        System.out.println(newStrNum);
    }
}
## 输出结果
00001
00002
00003
  第二种方式,调用时获取最大编号,如果没有数据则默认生成初始编号,根据最大编号递增,比较常用

// 调用时生成编号
private String getNumberID(){
    SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
    String caseNo="";
    try {
        //获取(最大)值
        List<User> list = xxxService.getMaxOrderNo();
        if (list.size()>0) {
            // 定义补 0 位数
            DecimalFormat decimalFormat = new DecimalFormat("000000");
            String value=list.get(0).getNumbmer().substring(16,list.get(0).getNumbmer().length());
            int i = Integer.parseInt(value) + 1;
            String k = decimalFormat.format(i);
            // 订单号
            caseNo="RXD" + df.format(new Date()) +k;
        } else {
            //初始、默认值
            caseNo = "RXD" + df.format(new Date()) + "000001";
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return caseNo;
}
## 输出结果
RXD20210820000001
RXD20210820000002
RXD20210820000003
总结
  以上方式建议根据自己的需求添加同步锁,谨防生成重复订单编号
————————————————
版权声明:本文为CSDN博主「平凡的人类」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36537546/article/details/119816957

标签:Java,String,list,订单号,生成,流水号,编号,new,caseNo
From: https://www.cnblogs.com/haohaiyou/p/17108528.html

相关文章

  • 测开-面试题-Java基础
    1 垃圾回收机制? 2SpringBoot的好处? 3 Java中的map有没有了解? 4 webservice接口有用过吗?答:有。在学校做过一个项目——和风天气,做客户端开发的时候,使用webse......
  • Java流程控制
    一、用户交互Scanner对象包:java.util.Scanner获取用户的输入基本语法Scanners=newScanner(System.in);通过该类的next()和nextLine()方法获取输入的字符......
  • Java程序员就业方向有哪些?
    目前在软件类岗位,Java软件开发工程师所占的比例最大,达到60%以上。根据IDC的统计数字,在所有软件开发类人才的需求中,对Java工程师的需求达到全部需求量的50%以上。那么,Java......
  • 关于 JavaScript 中柯里化函数的实现,附带详细解析!
    前言大家好,我是CoderBin,在面试当中,手撕代码的场景屡见不鲜,手写JS当中的方法更是最常见的一种,所以本文将全面的,详细解析柯里化函数的实现原理,并手写出自己的柯里化函数,相......
  • java根据excel某些格子特定内容归类文件(定值单分类工具)
      packagecom.xxx.controller;importjava.io.File;importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.fi......
  • java 环境配置
    linuxopenjdkdownload_url:https://www.openlogic.com/openjdk-downloads源码包安装java11tar-zxvfjdk-11.0.14_linux-x64_bin.tar.gz-C/usr/local/cat>>/......
  • JavaScript如何做空字符串的校验
    通过正则表达式校验写法:1if(str&&/[^\s]/.test(str)){2//不为空3}else{4//为空5}注释:-正则表达式中\s是指空白,包括空格、换行、tab缩进等所有......
  • 读Java实战(第二版)笔记06_新的日期和时间API
    1. Java8之前的库对日期和时间的支持非常不理想2. TemporalField接口2.1. 定义了如何访问temporal对象某个字段的值的接口2.2. ChronoField枚举2.2.1. 实现Temp......
  • Java 中如何限制方法的返回时间
    最近在研究ChatGPT的API调用。因为ChatGPT的API调用时间通常超过30秒。所以我们希望在程序中限制这个方法的执行时间,不要让方法花太长时间去执行了。JDK方......
  • Java 关键字
    Java关键字按用途划分如下:数据类型:13boolean、byte、char、double、float、int、long、shortnew、void、instanceof语句:17break、continuedefaultreturn......