springboot项目根据日期生成编号

本文介绍了在Java中为人员信息登记创建日期编码的过程,包括如何从日期中提取前六位,后四位的生成策略(使用数据库或Redis),以及使用Mybatis进行数据库操作的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本功能的应用场景是人员信息登记,根据日期生成十位编码,例如今天的日期是 2024年3月22日,那么今天登记的第一个人员编码就是  2403220001,生成以后将其写入数据库,这个操作在Service层实现,需要多次访问数据库。

首先第一步就是准备工作,在实体类中要声明编码的实体,我这里用的是 

private String phyId; //编号
private LocalDate thatDay;

phyId代表要生成的编号,thatDay是要进行日期判断的。

在数据处理层中,首先要截取当天的日期也就是前六位 (例如240322)

//获取当天日期     
LocalDateTime now = LocalDateTime.now();

        
// 将当前年份转换为两位数
        
String year = String.format("%02d", now.getYear() % 100);

        
// 获取月份和日期,转换为4位数
        
String monthDay = now.format(DateTimeFormatter.ofPattern("MMdd"));

至此我们就已经获取到了当前的日期的前六位编码了

接下来要生成后四位编码了,其实这个操作可以使用Redis来实现,这样的话性能更高而且可以减轻MySQL的压力,但是小编是新手对Redis使用没有那么炉火纯青就使用了直接访问数据库的方法。

首先,我是先将DTO的数据拷贝到实体类中了,获取实体类中的当天日期,从数据库中获取当天编码的数量

Integer count = personInfoMapper.getCount(personInfo.getThatDay());

SQL(Mybatis)

<select id="getCount" resultType="java.lang.Integer">
        select count(*) from person_info where that_day = #{thatDay}
</select>

如果数量时小于 1 的,那么直接拼接字符串将数据插入到数据库中

if (count < 1) {
//将0001赋值到code中
   String code = "0001";
//拼接年月日+code生成当天的第一条编码(2403220001)
   String codex = year + monthDay + code;
/将编码参数传到实体对象中去
   personInfo.setPhyId(codex);
//插入到数据库当中
   personInfoMapper.save(personInfo);
}

如果当天的条码数量大于 1 时,那就要从数据库中获取当天最大的编号,并将编号从字符串强转为 Long 类型,再将编号自增。操作如下:

else if (count >= 1) {
//从数据库中获取当天最大编号
String max = personInfoMapper.getMax(personInfo.getThatDay());
//将编号强转为Long 类型
Long code = Long.parseLong(max);
//将最大编号加1
Long codex = code + 1;
//再将Long类型的编码强转为 字符串
String codes = codex.toString();
//将新生成的 编码赋值给实体对象
personInfo.setPhyId(codes);
//写入数据库
personInfoMapper.save(personInfo);
}

 这是获取当天最大值的SQL(Mybatis)

<select id="getMax" resultType="java.lang.String">
        select max(phy_id) from person_info where that_day = #{thatDay}
</select>

这是生成的效果

 😀

Java新人水平低下勿喷

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值