当前位置: 代码网 > it编程>编程语言>Java > java如何根据日期生成单号

java如何根据日期生成单号

2024年09月04日 Java 我要评论
java根据日期生成单号1.查询出创建时间等于当天的订单,按照时间倒序排序去一条数据。 select a.* from t_solid_waste_production a where deleted

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

即可。

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com