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

  • 相关阅读:
    (转)simhash进行文本查重
    项目团队管理随记
    最常见到的runtime exception 异常
    javascript判断嵌套对象属性是否存在
    vim高清大图赏析(附常用快捷键)
    如何避免系统发送垃圾邮件
    使用javascript将数字转化为金额
    分享一个音乐电台(好看的 ui + html5)
    测试代码高亮显示
    Cadence 操作技巧总结1:测试点的生成2
  • 原文地址:https://www.cnblogs.com/huideng/p/4494122.html
Copyright © 2011-2022 走看看