Service
/**
* 生成个数为size的流水号数组
* format: XXX20240124001 ...
*/
public String[] generateSerialNum(Integer size) {
// 初始化一个定长为size的数组
String[] nums = new String[size];
// 初始值均为空串
Arrays.fill(nums, "");
// 定义流水号标准前缀
String prefix = "XXX" + new SimpleDateFormat("yyyyMMdd").format(new Date());
// 模糊查询当前库中的最新的流水号
String newestNum = mapper.getNewestNum(prefix);
// 定义起始序号
int startNum = !StringUtils.hasText(newestNum) ? 1 : Integer.parseInt(newestNum .substring(prefix.length() - 1)) + 1;
// 定义序号格式: 三位数
DecimalFormat df = new DecimalFormat("000");
// 循环处理
int index = 1;
// 如果序号超限, 此处不作额外处理. 上层需根据元素是否为初始的空串"" 作相应处理 (此处限制为三位数)
while (index <= size && startNum <= 999) {
nums[index] = prefix + df.format(startNum);
index++;
startNum++;
}
return nums;
}
Mapper.xml
<select id="getNewestNum">
select max(xxx_num)
from table_name
where xxx_num like concat(#{prefix}, '%')
</select>