12345678910111213141516171819202122232425262728293031323334353637 |
- package com.zt.util;
- import redis.clients.jedis.Jedis;
- import java.time.LocalDateTime;
- import java.time.format.DateTimeFormatter;
- public class OrderId {
- private static final String REDIS_HOST = "localhost";
- private static final int REDIS_PORT = 6379;
- private static final String ORDER_KEY_PREFIX = "order:counter:";
- private static final int ORDER_SEQ_LENGTH = 5;
- public static void main(String[] args) {
- String orderNumber = generateOrderNumber("ORD");
- String orderNumber2 = generateOrderNumber("ORD");
- System.out.println("生成的订单号: " + orderNumber);
- System.out.println("生成的订单号: " + orderNumber2);
- }
- public static String generateOrderNumber(String prefix) {
- Jedis jedis = new Jedis(REDIS_HOST, REDIS_PORT);
- // 获取当前日期,格式化为yyMMdd
- String datePart = LocalDateTime.now()
- .format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
- // Redis键名,按日期分隔计数器
- String redisKey = ORDER_KEY_PREFIX + datePart;
- // 原子递增并获取序列号
- long seq = jedis.incr(redisKey);
- // 格式化序列号,不足长度时前补零
- String seqPart = String.format("%0" + ORDER_SEQ_LENGTH + "d", seq);
- // 组合完整订单号: 前缀+日期+序列号
- return prefix + datePart + seqPart;
- }
- }
|