package org.dromara.personnel.utils;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;

public class CglxdIdGenerator {

    // 时间格式化器（线程安全）
    private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");

    // 随机数生成器
    private static final Random RANDOM = new Random();

    // 序列号（用于高并发场景，确保同一毫秒内不重复）
    private static final AtomicInteger SEQUENCE = new AtomicInteger(0);

    /**
     * 生成唯一标识
     * 格式：CGLXD + yyyyMMddHHmmss + 3位随机数（或序列号）
     */
    public static String generateId(String prefix) {
        // 1. 获取当前时间并格式化
        String timeStr = LocalDateTime.now().format(DATE_TIME_FORMATTER);

        // 2. 生成3位随机数（000-999），或使用序列号
        String randomPart;
        // 高并发场景建议用序列号（避免随机数碰撞）
        int seq = SEQUENCE.getAndIncrement() % 1000;
        randomPart = String.format("%03d", seq); // 补零至3位

        // 3. 拼接前缀、时间、随机数
        return prefix + timeStr + randomPart;
    }

    // 测试
    public static void main(String[] args) {
        // 生成10个示例
        for (int i = 0; i < 10; i++) {
            System.out.println(generateId("CGLXD"));
        }
    }
}
