java实现工单编号自动生成器

36 阅读1分钟

工单编号自动生成

  1. 前缀:HXGD
  2. 日期:使用 yyyyMMdd 格式,如 20251218
  3. 序号:6位数字,不足补0,每日从 000001 开始
  4. 线程安全:使用 synchronized 和 AtomicInteger 保证多线程环境下安全
  5. 自动日期切换:每天自动重置序号,无需手动管理
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 工单编号生成器
 * 格式:HXGD + 日期(yyyyMMdd) + 序号(6位,不足补0)
 * 例如:HXGD20251218000001
 */
public class TicketNumberGenerator {
    // 日期格式化器
    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
    // 当前日期的序号计数器(线程安全)
    private final AtomicInteger sequence = new AtomicInteger(1);
    // 当前日期,用于判断是否需要重置序号
    private LocalDate currentDate;
    public TicketNumberGenerator() {
        this.currentDate = LocalDate.now();
    }

    /**
     * 生成下一个工单编号
     * @return 工单编号字符串,如 HXGD20251218000001
     */
    public String generate() {
        LocalDate today = LocalDate.now();
        // 如果日期变化,重置序号
        if (!today.equals(this.currentDate)) {
            this.currentDate = today;
            this.sequence.set(1);
        }
        // 格式化日期部分
        String datePart = today.format(DATE_FORMATTER);
        // 格式化序号部分(6位,不足补0)
        String sequencePart = String.format("%06d", sequence.getAndIncrement());
        // 拼接完整编号
        return "HXGD" + datePart + sequencePart;
    }
}