java如何根据日期生成单号

 更新时间:2024年09月04日 09:46:25   作者: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')   

即可。

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

总结

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

相关文章

  • feign GET请求不支持对象传参的坑及解决

    feign GET请求不支持对象传参的坑及解决

    这篇文章主要介绍了feign GET请求不支持对象传参的坑及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Sping中如何处理@Bean注解bean同名的问题

    Sping中如何处理@Bean注解bean同名的问题

    这篇文章主要介绍了Sping中如何处理@Bean注解bean同名的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Mybatis深度整合Mysql的Json字段问题

    Mybatis深度整合Mysql的Json字段问题

    这篇文章主要介绍了Mybatis深度整合Mysql的Json字段问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 解决mybatis plus报错com.microsoft.sqlserver.jdbc.SQLServerException:必须执行该语句才能获得结果

    解决mybatis plus报错com.microsoft.sqlserver.jdbc.SQLServerE

    这篇文章主要介绍了解决mybatis plus报错com.microsoft.sqlserver.jdbc.SQLServerException:必须执行该语句才能获得结果,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • SpringBoot Druid配置过程图解

    SpringBoot Druid配置过程图解

    这篇文章主要介绍了SpringBoot Druid配置过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 在springboot中如何给mybatis加拦截器

    在springboot中如何给mybatis加拦截器

    这篇文章主要介绍了在springboot中如何给mybatis加拦截器,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Java整合mybatis实现过滤数据

    Java整合mybatis实现过滤数据

    这篇文章主要介绍了Java整合mybatis实现过滤数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • 详谈ServiceLoader实现原理

    详谈ServiceLoader实现原理

    下面小编就为大家带来一篇详谈ServiceLoader实现原理。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • IntelliJ IDEA修改内存大小,使得idea运行更流畅

    IntelliJ IDEA修改内存大小,使得idea运行更流畅

    今天小编就为大家分享一篇关于IntelliJ IDEA修改内存大小,使得idea运行更流畅的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • Java函数式编程(七):MapReduce

    Java函数式编程(七):MapReduce

    这篇文章主要介绍了Java函数式编程(七):MapReduce,本文是系列文章的第7篇,其它文章请参阅本文底部的相关文章,需要的朋友可以参考下
    2014-09-09

最新评论