要实现每天生成订单号从 00001 开始,可以使用 AtomicInteger 类结合日期来生成唯一的订单号。

首先,我们需要一个全局的 AtomicInteger 对象来保存当前的订单号,初始值为 1。每当生成一个订单号时,将 AtomicInteger 对象的值格式化成五位数的字符串,并在前面补 0,作为订单号。

在生成订单号时,我们需要判断当前日期与上次生成订单号的日期是否相同。如果不相同,说明已经进入了新的一天,将 AtomicInteger 对象的值重置为 1。如果相同,则继续增加 AtomicInteger 对象的值。

下面是一个简单的示例代码:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.atomic.AtomicInteger;

public class OrderGenerator {
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat('yyyyMMdd');
    private static final AtomicInteger orderNumber = new AtomicInteger(1);

    public static String generateOrderNumber() {
        Date currentDate = new Date();
        String currentDateString = dateFormat.format(currentDate);

        // 获取上次生成订单号的日期
        String lastDateString = dateFormat.format(new Date(orderNumber.get()));

        if (!currentDateString.equals(lastDateString)) {
            // 当日期不相同时,重置订单号为 1
            orderNumber.set(1);
        }

        int currentNumber = orderNumber.getAndIncrement();
        String orderNumberString = String.format('%05d', currentNumber);

        return currentDateString + orderNumberString;
    }

    public static void main(String[] args) {
        // 生成订单号
        String orderNumber1 = generateOrderNumber();
        System.out.println(orderNumber1);

        String orderNumber2 = generateOrderNumber();
        System.out.println(orderNumber2);

        // 模拟过了一天
        orderNumber.set(1);

        String orderNumber3 = generateOrderNumber();
        System.out.println(orderNumber3);
    }
}

输出结果:

2022112900001
2022112900002
2022113000001

这样,每天生成订单号时,都会从 00001 开始。

Java AtomicInteger 生成每日订单号,次日从 00001 开始

原文地址: https://www.cveoy.top/t/topic/qDBY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录