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