java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java根据日期生成单号

java如何根据日期生成单号

作者:200.YING

这篇文章主要介绍了java如何根据日期生成单号问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

java根据日期生成单号

1.查询出创建时间等于当天的订单,按照时间倒序排序去一条数据。

 select a.* from t_solid_waste_production a
 WHERE deleted = 0 and TO_DAYS(create_time) = TO_DAYS(NOW())
order by create_time desc limit 1

2.编写编码生成规则

SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
String date = df.format(new Date());
String recordNumber = "CF" + date + "001";

3.判断最新一天是否有数据,如果没有则执行叠加

if (lastData != null){
   Format f1=new DecimalFormat("000");
   recordNumber = "CF" + date + f1.format((Integer.parseInt(lastData.getRecordNumber().substring(lastData.getRecordNumber().length() - 3)) + 1));
   }

java根据日期生成一定规则的单号

由于业务需求,需要根据一定的规则生成有规则的单号比如:YC-20231203-001

该规则单号前面部分 "YC-" 为异常的拼音缩写,中间部分 “20231203” 为时间,后面为递增的数字。

我的代码实现:

@ApiOperation("异常单号生成")
    @GetMapping("getCode")
    public Response<Object> getCode(){
        return new Response<>().success().data(exceptionItemService.getCode());
    }

@Override
    public String getCode() {
        //前缀
        String prefix = "YC-";
        //后缀
        String lastIndex;
        //获取最大三位数
        Integer maxCode = exceptionItemMapper.selectMaxCode(prefix);
        //查询出数据库中当前最大的单号,如果没有则说明今天还未添加一条数据,有的话则将最大的查出来 +1
        if (maxCode != null && maxCode <= 8) {
            maxCode += 1;
            //Integer转换为字符串
            String i = String.valueOf(maxCode);
            lastIndex = "00" + i;
        } else if (maxCode != null && maxCode <= 98) {
            maxCode += 1;
            String i = String.valueOf(maxCode);
            lastIndex = "0" + i;
        } else if (maxCode != null) {
            maxCode += 1;
            lastIndex = String.valueOf(maxCode);
        } else {
            lastIndex = "001";
        }
        // 中间部分 “20231211”
        String middle = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        //设置新的异常单号 YC-20231203-001
        return prefix + middle + "-" + lastIndex;
    }

代码中

Integer maxCode = exceptionItemMapper.selectMaxCode(prefix) 

是通过查询数据库来得出单号后三位最大的数字,sql实现如下(本人用的postgres数据库):

<select id="selectMaxCode" resultType="java.lang.Integer">
        SELECT MAX(CAST(SUBSTRING(exception_code, LENGTH(exception_code) - 2) AS INTEGER))
        FROM qc_exception_item
        WHERE exception_code LIKE CONCAT(#{prefix}, TO_CHAR(NOW(), 'YYYYMMDD'),'-%','%');
</select>

如果是mysql数据库的话,上面代码中的:

WHERE exception_code LIKE CONCAT(#{prefix}, TO_CHAR(NOW(), 'YYYYMMDD'),'-%','%')  

中的

TO_CHAR(NOW(), 'YYYYMMDD') 

改为

DATE_FORMAT(NOW(), '%Y%m%d')   

即可。

本人现在代码未考虑多线程的情况,如果需要的话可以自己看情况修改。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文