说到流水号这个东西吧,很多地方都会用到.
比如说打印单据需要,生成订单类也需要流水号等等...
废话不多说,直接上代码:
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class PrimaryGenerater {
private static PrimaryGenerater primaryGenerater = null;
private PrimaryGenerater() {
}
/**
*
* 取得PrimaryGenerater的单例实现
* @return
*/
public static PrimaryGenerater getInstance() {
if (primaryGenerater == null) {
synchronized (PrimaryGenerater.class) {
if (primaryGenerater == null) {
primaryGenerater = new PrimaryGenerater();
}
}
}
return primaryGenerater;
}
/**
*
* 生成下一个编号,若没有则返回年份+0001
* 传参为流水号
*/
public synchronized String generaterNextNumber(String sno) {
String id = null;
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy");
if (sno == null) {
id = formatter.format(date) + "0001";
} else {
System.out.println("截取的字符串为:"+sno+"====>截取的位置为:"+sno.substring(0,4));
if(!formatter.format(date).equals(sno.substring(0,4))){
System.out.println("年份不一样,重置流水号");
id = formatter.format(date) + "0001";
return id;
}
DecimalFormat df = new DecimalFormat("0000");
try{
id = formatter.format(date)+ df.format(1 + Integer.parseInt(sno.substring(4, 8)));
}catch (ClassCastException e) {
e.printStackTrace();
id = "00000000";
}catch (Exception e) {
e.printStackTrace();
id = "00000000";
}
}
return id;
}
}
该方法是传入一个8位数的字符串,该字符串为yyyy0000格式,yyyy为年份,0000为流水号.
当传入的参数为空时,获取当前年份+流水号return
当然,这个return的值可以存入数据库了.
当下次再生成的时候.把id为最大值的流水号查询出来,丢进这个方法里面,就可以生成了.