java生成自增流水号,并从每月第一天重新清零计数将业务流水号添加到数据库

不操作数据库的方法:

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调用:

String no = "";
         if(StringUtils.isNotBlank(list.get(0).getBillSeq())){
             no = list.get(0).getBillSeq();
         }else{
             no = "HHTG170180001";//这里的年月可以随便自填,结果还是从1709这个当前时间从0001重新计数
         }

         bill.setBillSeq(PrimaryGenerater.getnumber());

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

结果:
这里写图片描述

转载自:https://www.cnblogs.com/jbml-154312/p/7490810.html

猜你喜欢

转载自blog.csdn.net/qq_32230309/article/details/81708678