自动生成编码

目录

前言

实现思路

实现

总结

字符串格式化参考文章:


前言

本篇主要内容为自动生成编码,如订单编码,产品编码等

实现思路

1.编码组成:头部+年月+编号;如产品询价(CPXJ)+ 202409 + 001

2.声明头部为固定的(CPXJ),声明当前最大编码为null

3.获取系统年月ym

4.判断当前内存中是否存在最大编码

5.查询最大编码

6.如果没有说明当前是当月第一个询价单(CPXJ202409001)

7.如果不为null,获取当前最大编码的年月tmpYm

8.比较最大编码的月份tmpYm和当前系统时间ym

9.如果ym与tmpYm不相同,则跨月归0

10.相同。获取递增序号seq  转换为数字类型  ++

11.重新拼接maxcode

实现

1.声明头部为固定的(CPXJ),声明当前最大编码为null

final String PREFIX = "CPXJ";

String maxCode = null;//当前最大编码

2.获取系统时间的年月工具类

/**
     * 获取系统时间 并指定格式返回
     *
     * @return
     */
    public static String getYm() {
        LocalDate now = LocalDate.now();//获取系统时间
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMM");//获取指定时间格式的实例
        return formatter.format(now);
    }

2.查询当月最大编码(mapper层)

/**
     * 查询指定月最大编码
     * @param month
     * @return
     */
    String queryMaxCode(String month);

3.sql(mapper映射)

<select id="queryMaxCode" resultType="string">
   select max(code) from s_product_enquiry where date_format(createTime,'%Y%m')=#{month}
</select>
<!--创建时间的年月与输入的年月为条件-->

4.生成编码方法generateCode

String generateCode() {
        //获取系统年月
        String ym = DateUtils.getYm();
        //判断当前内存中是否存在最大编码
        if (null == maxCode) {
        //查询当月最大编码
            maxCode = baseMapper.queryMaxCode(ym);
            //如果没有
            if (null == maxCode) {
                //说明当前是当月第一个询价单 CPXJ202409001
                maxCode = PREFIX + ym + "001";
                return maxCode;
            }
        }

        //不为空
        //获取当前最大编码 的 年月
        String tmpYm = maxCode.substring(4, 10);
        //比较 最大编码 的月份与当前系统时间
        if (!ym.equals(tmpYm)) {
            //跨月 归零
            maxCode = PREFIX + ym + "001";
            return maxCode;
        }

        //如果相等
        //获取递增序号
        String seq=maxCode.substring(10);
        Integer tmp= Integer.parseInt(seq);
        tmp++;
        maxCode=PREFIX+ym+String.format("%03d",tmp);
        return maxCode;
    }

总结

date_format(createTime,'%Y%m'):sql语法,将日期格式化为指定格式

maxCode.substring(4, 10);              截取字符串,包头包尾

Integer tmp= Integer.parseInt(seq); 字符串转换为包装类

String.format("%03d",tmp)    将数字类型转换为三位字符串,不够补0,

如tmp=1  则结果为001

    tmp=12  结果:012

    tmp=123  结果123

字符串格式化参考文章:

java字符串格式化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值