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)这个方法,就能够保证什么情况下生成的序列号都是正确唯一的。


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 3java中-jar 与nohup的对比
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7解析SpringSecurity+JWT认证流程实现
- 8java读取excel文件的两种方法
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




