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')   

即可。

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

总结

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

相关文章

  • Spring注解@Qualifier的详细用法你知道几种

    Spring注解@Qualifier的详细用法你知道几种

    本文给大家分享Spring注解@Qualifier的详细用法,包括@Autowired和@Resource区别介绍,本文通过示例代码给大家详细介绍,感兴趣的朋友跟随小编一起看看吧
    2021-07-07
  • springboot访问404问题的解决办法

    springboot访问404问题的解决办法

    工作中遇到url404问题,解决问题的进程比较崎岖,写篇文章记录,下面这篇文章主要给大家介绍了关于springboot访问404问题的解决办法,文中通过图文介绍的非常详细,要的朋友可以参考下
    2023-03-03
  • SpringBoot集成JWT生成token及校验方法过程解析

    SpringBoot集成JWT生成token及校验方法过程解析

    这篇文章主要介绍了SpringBoot集成JWT生成token及校验方法过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • java 两个数组合并的几种方法

    java 两个数组合并的几种方法

    本篇文章主要介绍了java 两个数组合并的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • java实现连接mysql数据库单元测试查询数据的实例代码

    java实现连接mysql数据库单元测试查询数据的实例代码

    下面小编就为大家带来一篇java实现连接mysql数据库单元测试查询数据的实例代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • Spring-AOP @AspectJ切点函数之@annotation()用法

    Spring-AOP @AspectJ切点函数之@annotation()用法

    这篇文章主要介绍了Spring-AOP @AspectJ切点函数之@annotation()用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Maven编译文件的编码设置方法

    Maven编译文件的编码设置方法

    在使用Maven进行Java项目的构建时,正确的文件编码设置对于确保项目能够正确编译和运行至关重要,本文将详细介绍如何在Maven中设置编译文件的编码,以确保项目能够正确处理各种语言的文本内容,需要的朋友可以参考下
    2025-02-02
  • SpringBoot进行数据加密和解密的详细指南

    SpringBoot进行数据加密和解密的详细指南

    对称加密算法使用相同的密钥进行加密和解密,其主要优点包括速度快和实现简单,常见的对称加密算法有 AES、DES 等,本文将以 AES 为例,展示如何在 Spring Boot 项目中进行数据加密和解密,需要的朋友可以参考下
    2024-11-11
  • Linux+Docker+SpringBoot+IDEA一键自动化部署的详细步骤

    Linux+Docker+SpringBoot+IDEA一键自动化部署的详细步骤

    这篇文章主要介绍了Linux+Docker+SpringBoot+IDEA一键自动化部署的详细步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • SpringBoot容器化部署之Docker与Kubernetes操作指南

    SpringBoot容器化部署之Docker与Kubernetes操作指南

    本文介绍了如何将SpringBoot应用进行容器化部署,通过Docker和Kubernetes进行编排和管理,涵盖了从项目创建、Dockerfile编写、镜像构建、容器运行到Kubernetes部署、监控和维护的全流程
    2025-12-12

最新评论