package com.ruoyi.system.utils; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.system.mapper.SysTaskMapper; /** * 任务编号生成器 * * @author ruoyi */ @Component public class TaskCodeGenerator { @Autowired private SysTaskMapper sysTaskMapper; /** * 生成任务编号(使用默认前缀) * 格式:T + YYYYMMDD + 4位序号 * * @return 任务编号 * @deprecated 建议使用 {@link #generateTaskCode(String)} 指定单据类型前缀 */ @Deprecated public String generateTaskCode() { return generateTaskCode("T"); } /** * 生成任务编号 * 格式:单据类型前缀 + YYYYMMDD + 4位序号 * * @param serviceOrdClass 单据类型(如:BF、JZ等) * @return 任务编号 */ public String generateTaskCode(String serviceOrdClass) { String dateStr = DateUtils.dateTimeNow("yyyyMMdd"); return generateTaskCode(serviceOrdClass, dateStr); } /** * 根据日期生成任务编号 * * @param serviceOrdClass 单据类型(如:BF、JZ等) * @param date 日期 * @return 任务编号 */ public String generateTaskCode(String serviceOrdClass, Date date) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); String dateStr = sdf.format(date); return generateTaskCode(serviceOrdClass, dateStr); } /** * 根据日期字符串生成任务编号 * * @param serviceOrdClass 单据类型(如:BF、JZ等) * @param dateStr 日期字符串(格式:yyyyMMdd) * @return 任务编号 */ private String generateTaskCode(String serviceOrdClass, String dateStr) { // 确保单据类型前缀不为空,默认使用"T" String prefix = (serviceOrdClass != null && !serviceOrdClass.trim().isEmpty()) ? serviceOrdClass.trim() : "T"; String datePrefix = prefix + dateStr; // 查询当日最大编号 String maxTaskCode = sysTaskMapper.selectMaxTaskCodeByDatePrefix(datePrefix); int sequence = 1; if (maxTaskCode != null && maxTaskCode.startsWith(datePrefix)) { // 提取序号部分 String sequenceStr = maxTaskCode.substring(datePrefix.length()); try { sequence = Integer.parseInt(sequenceStr) + 1; } catch (NumberFormatException e) { sequence = 1; } } // 格式化为4位序号 return datePrefix + String.format("%04d", sequence); } }