Java自动生成订单序列号

简介:
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.lang3.StringUtils;
/**
 * 产生流水号工具类
 * @version V1.0
 * @date: 2013-11-16 下午5:21:37
 */
public class SerialNum {
 private static String count = "000";
 private static String dateValue = "20131115";
 /**
  * 产生流水号
  */
 public synchronized static String getMoveOrderNo() {
  long No = 0;
  SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
  String nowdate = sdf.format(new Date());
  No = Long.parseLong(nowdate);
  if (!(String.valueOf(No)).equals(dateValue)) {
   count = "000";
   dateValue = String.valueOf(No);
  }
  String num = String.valueOf(No);
  num += getNo(count);
  num = "CB" + num;
  return num;
 }
 /**
  * 获取撤展单序列号
  */
 public synchronized static String getMoveOrderNo(String serialNum) {
  String nyr = StringUtils.substring(serialNum, 2, 10); // 获取年月日字符串
  String countV = StringUtils.substring(serialNum, 10); // 获取流水号
  if (Integer.valueOf(countV) > Integer.valueOf(count)) {
   dateValue = nyr;
   count = String.valueOf(countV);
  }
  return getMoveOrderNo();
 }
 /**
  * 返回当天的订单数+1
  */
 public static String getNo(String s) {
  String rs = s;
  int i = Integer.parseInt(rs);
  i += 1;
  rs = "" + i;
  for (int j = rs.length(); j < 3; j++) {
   rs = "0" + rs;
  }
  count = rs;
  return rs;
 }
 public static void main(String[] args) {
  for (int i = 0; i < 10; i++) {
   System.out.println(getMoveOrderNo());
  }
 }
}
注意:上面的程序如果服务器一直能够正常运行就不会出什么问题,
要是重启服务器或者中间出现什么故障需要重启服务都可能造成重复序列号的产生,
为了能够保证唯一,我们需要配合上数据库的查询,查询最后一条记录,
然后拿出序列号在调用getMoveOrderNo(String serialNum)这个方法,
就能够保证什么情况下生成的序列号都是正确唯一的。

相关文章
|
7月前
|
Java 调度 数据库
java 用协程 实现 简单下订单功能
java 用协程 实现 简单下订单功能
90 0
|
Java 测试技术 开发工具
Java单元测试之IDEA自动生成测试类
每次对类的方法进行测试,都是手动创建一个Test测试类,然后编写同名的方法,每次这样都会很繁琐,IDEA开发工具提供了自动生成测试类的插件JUnitGenerator,接下来介绍该插件的安装与使用。
2860 0
Java单元测试之IDEA自动生成测试类
|
存储 NoSQL Java
Java如何生成序列号/订单号
Java如何生成序列号/订单号
666 0
|
7月前
|
Java 数据库 数据安全/隐私保护
【java】个人项目:中小学数学卷子自动生成程序
【java】个人项目:中小学数学卷子自动生成程序
|
8月前
|
开发框架 JavaScript 前端开发
HarmonyOS学习路之开发篇—Java UI框架(使用工具自动生成JS FA调用PA代码)
JS FA(Feature Ability)调用PA (Particle Ability)是使用基于JS扩展的类Web开发范式的方舟开发框架所提供的一种跨语言能力调用的机制,用于建立JS能力与Java能力之间传递方法调用、处理数据返回以及订阅事件上报的通道。开发者可以使用FA调用PA机制进行应用开发,但直接使用该机制需要开发者手动撰写大量模板代码,且模板代码可能与业务代码相互耦合,使得代码可维护性和可读性较差。
|
9月前
|
XML JSON 缓存
Java实现订单ID获取淘宝买到的订单列表数据接口方法
Java实现订单ID获取淘宝买到的订单列表数据接口方法
158 0
|
9月前
|
XML JSON 缓存
Java实现订单ID获取淘宝买到的订单物流数据接口方法
Java实现订单ID获取淘宝买到的订单物流数据接口方法
94 0
|
9月前
|
XML JSON 缓存
Java实现订单ID获取淘宝买到的订单详情数据接口方法
Java实现订单ID获取淘宝买到的订单详情数据接口方法
202 0
|
9月前
|
设计模式 Java
java自动生成类热加载(注册和扫描)
java自动生成类热加载(注册和扫描)
java自动生成类热加载(注册和扫描)
|
9月前
|
Java 测试技术 API
工银e生活开发脱坑日志(9)JAVA版的SDK自动生成msgId,PHP如何生成消息通讯唯一编号msgId
工银e生活开发脱坑日志(9)JAVA版的SDK自动生成msgId,PHP如何生成消息通讯唯一编号msgId
107 0