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<String, AtomicInteger> 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;
|
}
|
|
}
|