feat(biz): 工具
This commit is contained in:
parent
1884ead27a
commit
9d32907946
@ -0,0 +1,111 @@
|
||||
package com.ningxia.yunxi.chemmes.framework.common.util;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
/**
|
||||
* 通用编码生成工具类
|
||||
*
|
||||
* @author system
|
||||
*/
|
||||
public class CodeGenerateUtils {
|
||||
|
||||
/**
|
||||
* 生成基于日期和序列号的编码(自动获取当前日期)
|
||||
*
|
||||
* @param prefix 编码前缀
|
||||
* @param dateFormat 日期格式,如 "yyyyMM" 或 "yyyyMMdd"
|
||||
* @param sequenceLength 序列号长度
|
||||
* @param currentSequence 当前最大序列号(完整编码)
|
||||
* @return 新生成的编码
|
||||
*/
|
||||
public static String generateCodeWithDateSequence(String prefix, String dateFormat,
|
||||
int sequenceLength, String currentSequence) {
|
||||
String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern(dateFormat));
|
||||
return generateCodeWithDateAndSequence(prefix, dateStr, sequenceLength, currentSequence);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成基于日期和序列号的编码(传入日期字符串)
|
||||
*
|
||||
* @param prefix 编码前缀
|
||||
* @param dateStr 日期字符串,如 "202605" 或 "20260522"
|
||||
* @param sequenceLength 序列号长度
|
||||
* @param currentSequence 当前最大序列号(完整编码)
|
||||
* @return 新生成的编码
|
||||
*/
|
||||
public static String generateCodeWithDateAndSequence(String prefix, String dateStr,
|
||||
int sequenceLength, String currentSequence) {
|
||||
// 检查当前序列号是否有效
|
||||
int expectedLength = prefix.length() + dateStr.length() + sequenceLength;
|
||||
if (currentSequence == null || currentSequence.length() < expectedLength) {
|
||||
// 无有效序列号,从 1 开始
|
||||
return prefix + dateStr + String.format("%0" + sequenceLength + "d", 1);
|
||||
}
|
||||
|
||||
// 提取日期部分进行比较
|
||||
String datePartInSequence = currentSequence.substring(prefix.length(), prefix.length() + dateStr.length());
|
||||
if (!datePartInSequence.equals(dateStr)) {
|
||||
// 日期不同,重新开始序列
|
||||
return prefix + dateStr + String.format("%0" + sequenceLength + "d", 1);
|
||||
}
|
||||
|
||||
// 日期相同,序列号递增
|
||||
String sequencePart = currentSequence.substring(prefix.length() + dateStr.length());
|
||||
try {
|
||||
int sequence = Integer.parseInt(sequencePart);
|
||||
sequence++;
|
||||
return prefix + dateStr + String.format("%0" + sequenceLength + "d", sequence);
|
||||
} catch (NumberFormatException e) {
|
||||
// 解析失败,重新开始
|
||||
return prefix + dateStr + String.format("%0" + sequenceLength + "d", 1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成基于年月和序列号的编码(已废弃,请使用 generateCodeWithDateAndSequence)
|
||||
*
|
||||
* @param prefix 编码前缀
|
||||
* @param yearMonth 年月字符串,如 "202605"
|
||||
* @param sequenceLength 序列号长度
|
||||
* @param currentSequence 当前最大序列号(完整编码)
|
||||
* @return 新生成的编码
|
||||
* @deprecated 使用 generateCodeWithDateAndSequence 替代
|
||||
*/
|
||||
@Deprecated
|
||||
public static String generateCodeWithYearMonthSequence(String prefix, String yearMonth,
|
||||
int sequenceLength, String currentSequence) {
|
||||
return generateCodeWithDateAndSequence(prefix, yearMonth, sequenceLength, currentSequence);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成简单序列号编码(不含日期)
|
||||
*
|
||||
* @param prefix 编码前缀
|
||||
* @param sequenceLength 序列号长度
|
||||
* @param currentSequence 当前最大序列号(完整编码)
|
||||
* @return 新生成的编码
|
||||
*/
|
||||
public static String generateSimpleSequenceCode(String prefix, int sequenceLength, String currentSequence) {
|
||||
if (currentSequence == null || currentSequence.length() < prefix.length() + sequenceLength) {
|
||||
// 无有效序列号,从 1 开始
|
||||
return prefix + String.format("%0" + sequenceLength + "d", 1);
|
||||
}
|
||||
|
||||
// 检查前缀是否匹配
|
||||
if (!currentSequence.startsWith(prefix)) {
|
||||
return prefix + String.format("%0" + sequenceLength + "d", 1);
|
||||
}
|
||||
|
||||
// 前缀相同,序列号递增
|
||||
String sequencePart = currentSequence.substring(prefix.length());
|
||||
try {
|
||||
int sequence = Integer.parseInt(sequencePart);
|
||||
sequence++;
|
||||
return prefix + String.format("%0" + sequenceLength + "d", sequence);
|
||||
} catch (NumberFormatException e) {
|
||||
// 解析失败,重新开始
|
||||
return prefix + String.format("%0" + sequenceLength + "d", 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user