• 浅谈自动产生流水号的几种方式


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

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

    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即可

  • 相关阅读:
    Angular随笔第一课
    web前端面试集锦(自己搜集的,如有错误请不吝赐教)
    菜单选项卡-2中方法加载选项卡的内容
    dialog使用方法(同一页面,调用一个js代码,实现多个不同样式的弹窗)
    JAVA中对象赋值以及前拷贝,深拷贝等~~
    基类指针指向派生类对象
    JAVA中方法的参数传递(转)
    java和C++的const 和 final 的区别
    JAVA--虚函数,抽象函数,抽象类,接口
    libdash编译中遇到的问题及解决方案
  • 原文地址:https://www.cnblogs.com/huideng/p/4494122.html
Copyright © 2020-2023  润新知