You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.6 KiB

/**
* ID生成器工具类
* 提供生成唯一ID的功能
* 遵循单例设计模式
*/
package com.employeetraining.util;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.atomic.AtomicLong;
public class IdGenerator {
// 单例实例
private static final IdGenerator instance = new IdGenerator();
// 原子计数器,确保线程安全
private final AtomicLong counter = new AtomicLong(0);
// 日期时间格式化器
private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
// 私有构造函数,防止外部实例化
private IdGenerator() {
}
/**
* 获取单例实例
*/
public static IdGenerator getInstance() {
return instance;
}
/**
* 生成唯一ID
*/
public String generateId(String prefix) {
String timestamp = LocalDateTime.now().format(formatter);
long sequence = counter.incrementAndGet();
return prefix + "-" + timestamp + "-" + sequence;
}
/**
* 生成员工ID
*/
public String generateEmployeeId() {
return generateId("EMP");
}
/**
* 生成课程ID
*/
public String generateCourseId() {
return generateId("CSE");
}
/**
* 生成培训记录ID
*/
public String generateTrainingRecordId() {
return generateId("TRN");
}
/**
* 生成证书ID
*/
public String generateCertificateId() {
return generateId("CRT");
}
}