zoukankan      html  css  js  c++  java
  • 浅谈自动产生流水号的几种方式

     项目中都会用到编号或者编码。生成编码需要一定格式,但这个不是难点,主要的难点在于如何控制编码不重复。

    先贴一段生成流水号的代码

    package com.ra.testClass;
    import java.text.DecimalFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;

    public class Test2 {

    private static final String SERIAL_NUMBER = "XXXX"; // 流水号格式
    private static Test2 primaryGenerater = null;

    private Test2() {
    }

    /**
    * 取得PrimaryGenerater的单例实现
    *
    * @return
    */
    public static Test2 getInstance() {
    if (primaryGenerater == null) {
    synchronized (Test2.class) {
    if (primaryGenerater == null) {
    primaryGenerater = new Test2();
    }
    }
    }
    return primaryGenerater;
    }

    public static void main(String[] args){
    System.out.println(generaterNextNumber("1"));
    }

    /**
    * 生成下一个编号
    */
    public synchronized static String generaterNextNumber(String sno) {
    String id = null;
    Date date = new Date();
    SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
    if (sno == null) {
    id = formatter.format(date) + "0001";
    } else {
    int count = SERIAL_NUMBER.length();
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < count; i++) {
    sb.append("0");
    }
    DecimalFormat df = new DecimalFormat("0000");
    id = formatter.format(date)
    + df.format(1 + Integer.parseInt(sno));
    }
    return id;
    }
    }

    这种方式不能保证编码的唯一性,下面介绍两种能保证编码唯一性的方式

      (1)项目中新建文件CommonSerialNumber.csn ,内容随意给一个值,比如:1001

    public String getDangerGoodsCommonBH(String typeCode){
    String bh = "";
    if(StringUtils.isNotBlank(typeCode)){
    String filename = getClass().getClassLoader().getResource("/")
    .getPath()+ "CommonSerialNumber.csn";
    File file = new File(filename);
    if (file.exists() && file.isFile()) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
    String middleCode = sdf.format(new Date());
    List<String> list = FileUtil.readList(file);
    String[] data = list.get(0).split(",");
    int num = Integer.parseInt(data[0]);
    FileUtil.rewrite(file, String.valueOf((num + 1)));
    bh = typeCode+middleCode+num;
    }
    }
    return bh;
    }

    (2)参考第一段代码,从数据库取出该表的最大编号值,截取后几位 +1即可

  • 相关阅读:
    node-express脚手架生成的项目中实现浏览器缓存
    three.js通过canvas实现球体世界平面地图
    激光原理与技术(第二版)课后答案 阎吉祥 版 高等教育出版社 课后习题答案 解析
    Spring2.5注释驱动与基于注释的MVC
    iBatis2学习笔记:入参和返回值的问题
    重写了java.util.Date类中一些过时的方法
    Java日期格式化及其使用例子收集
    深入研究java.lang.ThreadLocal类
    Java:对象的强、软、弱和虚引用
    Java 反射机制深入研究
  • 原文地址:https://www.cnblogs.com/huideng/p/4494122.html
Copyright © 2011-2022 走看看