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 Security实现基于RBAC的权限表达式动态访问控制的操作方法
这篇文章主要介绍了Spring Security实现基于RBAC的权限表达式动态访问控制,资源权限表达式动态权限控制在Spring Security也是可以实现的,首先开启方法级别的注解安全控制,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下2022-04-04Java Stream中的Spliterator类概念及原理解析
Spliterator是Java 8引入的一个接口,位于java.util包中,它结合了迭代器(Iterator)的遍历能力和分割器(Splitter)的分割能力,本文将详细介绍Spliterator的概念、原理、作用、类中定义的关键方法,以及它在Stream API中的实际应用,感兴趣的朋友一起看看吧2024-08-08spring中向一个单例bean中注入非单例bean的方法详解
Spring是先将Bean对象实例化之后,再设置对象属性,所以会先调用他的无参构造函数实例化,每个对象存在一个map中,当遇到依赖,就去map中调用对应的单例对象,这篇文章主要给大家介绍了关于spring中向一个单例bean中注入非单例bean的相关资料,需要的朋友可以参考下2021-07-07
最新评论