Java订单编号生成


前言

开发过程当中可能会遇见生成订单编号,那么订单编号分为有序的,也分为无序的编号,今天本文介绍有序的订单编号,根据时间戳来生成订单编号。


一、订单编号是什么?

订单编号代表该单据在一个系统当中独一无二的存在,不可能会有第二个订单编号的存在,在平时购物的时候,吃饭的时候等都会生成对应的订单编号,吃饭的时候生成流水号,购物的时候生成订单编号和交易号,都会有相关的编码规则来实现。

二、使用步骤

1.引入库

代码如下(示例):

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

2.生成订单编号

该代码是根据时间戳来生成14位的时间格式编号,后面getRandom方法又是随机生成6位数的编码,这样订单编码就是20位,中间有6位并发线程。什么意思呢,中间的6为随机号可以承载的并发量也就是10万级别的,保证在一秒以内生成的订单编号就不会出现重复,里面设置了24位数的限制,如果不满24位数可以通过0来补齐,在实际的开发当中也可能生成固定位数订单编码,所以是可以通过这个长度来进行控制,满足实际的开发需求。

代码如下(示例):

public class orderNoCreate {
      public static void main(String[] args) {
            System.out.println(randomOrderCode());
      }

      public static String randomOrderCode() {
            SimpleDateFormat dmDate = new SimpleDateFormat("yyyyMMddHHmmss");
            String randata = getRandom(6);
            Date date = new Date();
            String dateran = dmDate.format(date);
            String Xsode = "XS" + dateran + randata;
            if (Xsode.length() < 24) {
                  Xsode = Xsode + 0;
            }
            return Xsode;
      }

      public static String getRandom(int len) {
            Random r = new Random();
            StringBuilder rs = new StringBuilder();
            for (int i = 0; i < len; i++) {
                  rs.append(r.nextInt(10));
            }
            return rs.toString();
      }
}

3.生成结果

以下是生成单独订单的结果,根据时间格式来获取时间戳,生成当前节点的一个订单编号。
在这里插入图片描述

三、代码效率

1.生成100万的订单编号

执行效率,按照100万的执行量来进行测试,调用此方法插入到list当中,最后查看整个list的长度,来判断整个代码的一个效率。
代码如下

public static void main(String[] args) {
            System.out.println("执行开始时间" + new SimpleDateFormat("YYYY-MM-dd HH:mm:ss:SSS").format(new Date()));
            List<String> result = new ArrayList<>();
            for (int i = 0; i < 1000000; i++){
                  result.add(randomOrderCode());
            }
            System.out.println(result.size());
            System.out.println("执行结束时间" + new SimpleDateFormat("YYYY-MM-dd HH:mm:ss:SSS").format(new Date()));
      }

2.生成100万的订单编号耗时

执行结果如下图所示,list长度为100万,中间不有add方法添加的list当中,就好比订单调用的赋值时间,中耗时1509毫秒,生成100万个订单编号,所以执行效率相对比较不错。
在这里插入图片描述


总结

订单编号生成在实际开发当中用的相对比较多,比如销售订单,采购订单等,订单编号可以通过前面的字段来进行区分,生成不同的订单编号来作为业务区分。本订单编码生成在执行效率和时间上面相对比较不错,后面再考虑高并发的情况下面,加上锁,可以完全胜任实际的业务需求。略有不足还请指教。

  • 2
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值