OrderId.java 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. package com.zt.util;
  2. import redis.clients.jedis.Jedis;
  3. import java.time.LocalDateTime;
  4. import java.time.format.DateTimeFormatter;
  5. public class OrderId {
  6. private static final String REDIS_HOST = "localhost";
  7. private static final int REDIS_PORT = 6379;
  8. private static final String ORDER_KEY_PREFIX = "order:counter:";
  9. private static final int ORDER_SEQ_LENGTH = 5;
  10. public static void main(String[] args) {
  11. String orderNumber = generateOrderNumber("ORD");
  12. String orderNumber2 = generateOrderNumber("ORD");
  13. System.out.println("生成的订单号: " + orderNumber);
  14. System.out.println("生成的订单号: " + orderNumber2);
  15. }
  16. public static String generateOrderNumber(String prefix) {
  17. Jedis jedis = new Jedis(REDIS_HOST, REDIS_PORT);
  18. // 获取当前日期,格式化为yyMMdd
  19. String datePart = LocalDateTime.now()
  20. .format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
  21. // Redis键名,按日期分隔计数器
  22. String redisKey = ORDER_KEY_PREFIX + datePart;
  23. // 原子递增并获取序列号
  24. long seq = jedis.incr(redisKey);
  25. // 格式化序列号,不足长度时前补零
  26. String seqPart = String.format("%0" + ORDER_SEQ_LENGTH + "d", seq);
  27. // 组合完整订单号: 前缀+日期+序列号
  28. return prefix + datePart + seqPart;
  29. }
  30. }