package com.webmanage.service.impl; import com.webmanage.service.OrderNoService; import com.webmanage.util.SnowflakeIdWorker; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; /** * 订单编号服务实现 */ @Service public class OrderNoServiceImpl implements OrderNoService { @Value("${snowflake.worker-id:1}") private long workerId; @Value("${snowflake.datacenter-id:1}") private long datacenterId; @Value("${snowflake.twepoch-ms:1577808000000}") // 2020-01-01 00:00:00 private long twepochMs; private SnowflakeIdWorker idWorker; private static final DateTimeFormatter ORDER_PREFIX_FMT = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); @PostConstruct public void init() { this.idWorker = new SnowflakeIdWorker(workerId, datacenterId, twepochMs); } @Override public String generateOrderNo() { long id = generateSnowflakeId(); String timePrefix = LocalDateTime.now().format(ORDER_PREFIX_FMT); // 订单号格式:时间前缀 + 雪花ID后10位,保证长度与排序可读性 String idStr = String.valueOf(id); String tail = idStr.length() > 10 ? idStr.substring(idStr.length() - 10) : String.format("%010d", id); return timePrefix + tail; } @Override public long generateSnowflakeId() { return idWorker.nextId(); } }