首页 > 技术文章 > java生成自增流水号,并从每月第一天重新清零计数将业务流水号添加到数据库(原创)

jbml-154312 2017-09-07 17:19 原文

 如果你不想在数据库操作的话,这里有个方法可以一试,直接上代码:

package com.seawin.common.util.convert;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;


public class PrimaryGenerater {
  private static String SERIAL_NUMBER = "0001" ;
  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;
  }
  

  
/**
 * 生成 日期+随机数的流水号
 * */
  public String getNumberForPK(){  
      String id="";  
      SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");  
      String temp = sf.format(new Date());  
      int random=(int) (Math.random()*10000);  
      id=temp+random;  
      return id;  
  }  
  
  
  
/**
 * HHTG+年月+8+0001
 * 每月从0001开始计数
 * */
public static synchronized String getnumber(String thisCode){
        
      String id = null;
      Date date = new Date();
      SimpleDateFormat formatter = new SimpleDateFormat("yyMM");
      String thisData = thisCode.substring(4, 8);
      //这个判断就是判断你数据取出来的最后一个业务单号是不是当月的
      if(!formatter.format(date).equals(thisData)){
          System.out.println("新的一月");
          thisData = formatter.format(date);
          //如果是新的一月的就直接变成0001
          id = "HHTG" + thisData + "80001";
      }else{
          System.out.println("当月");
          DecimalFormat df = new DecimalFormat("0000");
          
          //不是新的一月就累加
          id ="HHTG"+ formatter.format(date)+"8"
                + df.format(1 + Integer.parseInt(thisCode.substring(9, 13)));
      }
    return id;
    }



  public static void main(String[] args){
    /**
     *  HHTG170980001
     *  HH公司简称  + TG业务类型 + 年月 + 8部门 + 0001
     * 
     *  */
      String sno = "HHTG170980001";
      System.out.println(getnumber(sno));
      }
  }
  

 

Controller调用:

 

 

 no = list.get(0).getBillSeq()这里是查看你数据库的本月最后一条记录,如果有,则继续增加,如果是新月份,则从0001开始计数

结果如下:

换下月份结果如下:

 

推荐阅读