流水号生成

 说到流水号这个东西吧,很多地方都会用到.

比如说打印单据需要,生成订单类也需要流水号等等...

废话不多说,直接上代码:

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为最大值的流水号查询出来,丢进这个方法里面,就可以生成了.

 

你可能感兴趣的:(return,package,private)