123456789101112131415161718192021222324252627282930313233343536373839 |
- package com.zhentao.util;
- import redis.clients.jedis.Jedis;
- import java.time.LocalDateTime;
- import java.time.format.DateTimeFormatter;
- public class OrderNumberGenerator {
- private static final String REDIS_KEY = "order_number_counter";
- private static final String REDIS_HOST = "localhost";
- private static final int REDIS_PORT = 6379;
- private static final DateTimeFormatter DATE_TIME_FORMATTER =
- DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
- /**
- * 生成格式化订单号(线程安全)
- * @return 格式如 ORDER2023051514300000001
- */
- public static synchronized String generateOrderNumber() {
- try (Jedis jedis = new Jedis(REDIS_HOST, REDIS_PORT)) {
- // 生成递增序号(Redis 原子操作)
- Long nextOrderNumber = jedis.incr(REDIS_KEY);
- // 格式:ORDER + 年月日时分秒 + 7位序号(不足补零)
- return String.format("%s%07d",
- DATE_TIME_FORMATTER.format(LocalDateTime.now()),
- nextOrderNumber);
- }
- }
- /**
- * 初始化 Redis 计数器(可选)
- */
- public static void initRedisCounter(long initialValue) {
- try (Jedis jedis = new Jedis(REDIS_HOST, REDIS_PORT)) {
- jedis.setnx(REDIS_KEY, String.valueOf(initialValue));
- }
- }
- }
|