package com.by4cloud.platformx.business.utils; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; public class ContractNumberGenerator { // 用于存储每天的序列号计数器,Key为日期字符串,Value为原子整数 private static final ConcurrentHashMap counterMap = new ConcurrentHashMap<>(); // 日期格式化器,格式为 yyyyMMdd private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd"); /** * 生成合同编号 * 格式: yyyyMMdd-XXXX (XXXX为当日自增序列,不足4位补0) * * @return 合同编号字符串 */ public static String generateContractNumber() { // 1. 获取当前日期字符串 String dateStr = LocalDate.now().format(DATE_FORMATTER); // 2. 获取或创建当天的计数器 // computeIfAbsent 保证原子性,如果key不存在则创建新的AtomicInteger(0) AtomicInteger counter = counterMap.computeIfAbsent(dateStr, k -> new AtomicInteger(0)); // 3. 递增并获取当前序列号 int sequence = counter.incrementAndGet(); // 4. 格式化序列号,例如 1 -> "0001" String formattedSequence = String.format("%04d", sequence); // 5. 组合返回 return dateStr + "-" + formattedSequence; } }