且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

流水单号产生方法

更新时间:2022-09-03 23:25:37

引用:http://www.54xue.com/w/42/n-31442.html

项目中有这样的需求:每天从00001开始生成5位的流水号,比如2012年9月16日,00001、00002、……99999,到2012年9月17日,又从00001开始。而且系统重启后依然需要保持流水性,重启前是00012,那么重启后需要从00013开始。
    
    选择的一个方案就是将流水号保存到数据库。
    
    1、流水号实体
    
    /** * 流水号 * @author Luxh * 2012-9-16 */public class SerialNumber {
    
    private String id;
    
    /**
    
    * 流水号
    
    */
    
    private Integer serialNo;
    
    /**
    
    * 生成日期(格式:yyyyMMdd)
    
    */
    
    private String generateDate;
    
    //getter/setter方法
    
    //…}
    
    2、流水号实体对应的数据表

流水单号产生方法

    3、生成流水号的程序
    
    /**
    
    * 生成流水号
    
    * @return
    
    */
    
    public String generateSerialNumber() {
    
    //当天的初始化流水号为1
    
    Integer serialNo = 1;
    
    //查询当天的下一个流水号
    
    String hql = “SELECT max(t.serialNo+1) FROM SerialNumber t WHERE t.generateDate=?”;
    
    String generateDate = DateUtils.formatDate(new Date(), “yyyyMMdd”);
    
    Object obj = session.createQuery(hql)。setParameter(0, generateDate)。uniqueResult();
    
    if(obj != null) {
    
    serialNo = (Integer) obj;
    
    }
    
    //将当前序列号保存到数据库
    
    SerialNumber sn = new SerialNumber();
    
    sn.setSerialNo(serialNo);
    
    sn.setGenerateDate(generateDate);
    
    session.save(sn);
    
    //将流水号格式化为 “00001”  5位长度返回
    
    return String.format(“%05d”, serialNo);
    
    }