1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Java 有序生成订单号或流水号

Java 有序生成订单号或流水号

时间:2022-06-23 23:06:16

相关推荐

Java 有序生成订单号或流水号

前言

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

概述

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

// 静态变量存储最大值private static final AtomicInteger atomicNum = new AtomicInteger();// 调用方法public String getNewAutoNum(){for (int i = 0; i <3; i++) {//线程安全的原子操作,所以此方法无需同步int newNum = atomicNum.incrementAndGet();//数字长度为5位,长度不够数字前面补0String newStrNum = String.format("%05d", newNum);System.out.println(newStrNum);}}

## 输出结果000010000200003

第二种方式,调用时获取最大编号,如果没有数据则默认生成初始编号,根据最大编号递增,比较常用

// 调用时生成编号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;}

## 输出结果RXD0820000001RXD0820000002RXD0820000003

总结

以上方式建议根据自己的需求添加同步锁,谨防生成重复订单编号

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。