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

即可。

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

总结

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

相关文章

  • 在Java中使用下划线分隔数的字面值的用法讲解

    在Java中使用下划线分隔数的字面值的用法讲解

    这篇文章主要介绍了在Java中使用下划线分隔数字的字面值的用法讲解,这是Java7以后加入的新特性,需要的朋友可以参考下
    2016-03-03
  • Eclipse在线安装hibernate插件

    Eclipse在线安装hibernate插件

    这篇文章主要介绍了Eclipse在线安装hibernate插件,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • Spring Security实现基于RBAC的权限表达式动态访问控制的操作方法

    Spring Security实现基于RBAC的权限表达式动态访问控制的操作方法

    这篇文章主要介绍了Spring Security实现基于RBAC的权限表达式动态访问控制,资源权限表达式动态权限控制在Spring Security也是可以实现的,首先开启方法级别的注解安全控制,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • Java处理Webp图片格式转换的示例代码

    Java处理Webp图片格式转换的示例代码

    这篇文章主要介绍了Java处理Webp图片格式转换的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Java Stream中的Spliterator类概念及原理解析

    Java Stream中的Spliterator类概念及原理解析

    Spliterator是Java 8引入的一个接口,位于java.util包中,它结合了迭代器(Iterator)的遍历能力和分割器(Splitter)的分割能力,本文将详细介绍Spliterator的概念、原理、作用、类中定义的关键方法,以及它在Stream API中的实际应用,感兴趣的朋友一起看看吧
    2024-08-08
  • spring中向一个单例bean中注入非单例bean的方法详解

    spring中向一个单例bean中注入非单例bean的方法详解

    Spring是先将Bean对象实例化之后,再设置对象属性,所以会先调用他的无参构造函数实例化,每个对象存在一个map中,当遇到依赖,就去map中调用对应的单例对象,这篇文章主要给大家介绍了关于spring中向一个单例bean中注入非单例bean的相关资料,需要的朋友可以参考下
    2021-07-07
  • java8 统计字符串字母个数的几种方法总结(推荐)

    java8 统计字符串字母个数的几种方法总结(推荐)

    下面小编就为大家分享一篇java8 统计字符串字母个数的几种方法总结(推荐),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来吧
    2017-11-11
  • JavaWeb三大组件之监听器Listener详解

    JavaWeb三大组件之监听器Listener详解

    这篇文章主要介绍了JavaWeb三大组件之监听器Listener详解,在JavaWeb应用程序中,Listener监听器是一种机制,用于监听和响应特定的事件,它可以感知并响应与应用程序相关的事件,从而执行相应的逻辑处理,需要的朋友可以参考下
    2023-10-10
  • SpringBoot整合UEditor的示例代码

    SpringBoot整合UEditor的示例代码

    本篇文章主要介绍了SpringBoot整合UEditor的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • SpringBoot集成Druid的实例代码

    SpringBoot集成Druid的实例代码

    这篇文章主要介绍了SpringBoot集成Druid的实例代码,有依赖和配置相关内容,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-12-12

最新评论