支持单体系统和分布式系统
分布式系统生成单号前提条件:分布式系统使用了同一个Redis数据库
@Resource
private RedissonClient redissonClient;
/**
* 唯一订单号生成
* 格式:yyMMddHHmmssSSS00001
*
* @return 唯一单号
*/
public String genOrderNo() {
RAtomicLong atomicLong = redissonClient.getAtomicLong("orderNoIncr");
long num = atomicLong.incrementAndGet();
atomicLong.expire(5, TimeUnit.SECONDS);
// 不足5位左侧补0
String numStr = String.format("%05d", num);
//格式化当前日期为yyMMddHHmmssSSS的格式,此处做了封装
return DateFormatUtil.dateToStr(new Date(), "yyMMddHHmmssSSS") + numStr;
}