项目中打印出库单,在出库单上要实现一个流水号,每次调用方法打印就得到当前日期在后面加上今天打印的次数,例如 2021071301,
今天打印第二次就是2021071302,到了第二天后面的次数就又要还原成01,以此类推,怎么实现呢?
已经解决了,将数值存在redis中,每次调用方法从redis中取值,得到字符串,截取日期那一段用来判断是否是同一天,然后在将值修改存入redis即可。
数据库创建一张表,一个编码对应一个计数器,写一个定时任务每天0:00将计数器置零
打印记录打印时间,打印时查询今天打印次数总和,例如今天打印次数总和为5,那么今天的下一次打印流水号2021071306
package com.eleven;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class ElevenTest {
private static Integer num = 0;
//
private static LocalDate signTime = LocalDate.now();
public static void main(String[] args) {
System.out.println(getNum(LocalDate.now()));
System.out.println(getNum(LocalDate.now()));
System.out.println(getNum(LocalDate.now()));
System.out.println(getNum(LocalDate.now().plusDays(1)));
}
public synchronized static String getNum(LocalDate localDate){
if (localDate.compareTo(signTime) > 0) {
num = 0;
} else {
num++;
}
String numStr = "" + num;
while (numStr.length() < 2){
numStr = "0" + numStr;
}
return DateTimeFormatter.ofPattern("yyyyMMdd").format(localDate) + numStr;
}
}
2021071301
2021071302
2021071303
2021071400
想了想不大符合要求,还删除不了,吼吼吼
https://blog.csdn.net/nmgrd/article/details/77015206
看看这个吧
一个对象记录运行日期和此时标记,通过这个对象生成流水
第一次运行日期为空设置当前日期,编号是1,
以后运行判断当前时间和记录的时间是不是同一天, 如果是就流水编码+1,如果不是就重置日期和编号
这个对象是单例的要加锁防并发
可以存Redis