实现自定义编码,累计增加

因为业务小所以没有使用缓存,业务多正规的话可以将本月编码放在redis,每一次都对比缓存中的编码,如果是本月的就可以加1,然后更新缓存,如果没有不是本月就直接更新redis,最后向数据库中插入数据

yml

  LeaveCodeTop: PD

代码

完整代码在介绍分布式锁的时候写了连接(在这只写了编码部分):https://blog.csdn.net/weixin_43861630/article/details/108974581

 
    public static String LEAVE_CODE_TOP = "";

    @Value("${LeaveCodeTop}")
    private void setLeaveCodeTop(String LeaveCodeTop) {
        PlaLeaveApplyServiceImpl.LEAVE_CODE_TOP = LeaveCodeTop;
    }




		//编码实现部分,整体方法省略
        QueryWrapper<PlaLeaveApply> queryWrapper = new QueryWrapper<>();
        Calendar cal = Calendar.getInstance();
        //获取当前年
        int years = cal.get(Calendar.YEAR);
        //获取当前月
        int month = cal.get(Calendar.MONTH) + 1;
        String codeStr;
        //判断月份是否需要拼接0
        if (month < 10) {
            //拼接编码能确定的前一部分
            codeStr = LEAVE_CODE_TOP + years + "0" + month;
        } else {
            //拼接编码能确定的前一部分
            codeStr = LEAVE_CODE_TOP + years + month;
        }
        //模糊查询
        queryWrapper.like("apply_no", codeStr);
         //根据自增的id排序,不能使用创建时间降序排列,因为如果同时生成很多条数据,创建时间有可能会出现
        //相同时间,这样排序的话每次可能都会不同,生成的编码可能会出现重复
        queryWrapper.orderByDesc("id");
        //根据排列后的数据取第一条数据
        queryWrapper.last("LIMIT 1");
        System.err.println("查询");
        PlaLeaveApply plaLeaveApplypr = plaLeaveApplyMapper.selectOne(queryWrapper);
        String applyNo;
        //判断是否获取到收据
        if (StringUtils.isNotNull(plaLeaveApplypr)) {
            //获取数据的编码
            String code = plaLeaveApplypr.getApplyNo();
            System.err.println("code:" + code);
            //分割获取数字,将string型转换成 BigInteger  注意:不能转int或者Integer,因为数过于大,会报错
            BigInteger codeInteger = new BigInteger(code.split(LEAVE_CODE_TOP)[1]);
            //将编码加1后转拼接前缀,生成string型编码
            applyNo = LEAVE_CODE_TOP + codeInteger.add(new BigInteger("1"));
        } else {
            //如果没数据说名当前是第一条编码,所以拼接00001即可
            applyNo = codeStr + "00001";
        }

效果截图

apply_no 为编码效果

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值