|
|
@@ -9,8 +9,8 @@ import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.data.redis.support.atomic.RedisAtomicLong;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
-import java.util.Calendar;
|
|
|
import java.util.Date;
|
|
|
+import java.util.Objects;
|
|
|
|
|
|
/**
|
|
|
* @author lfdc
|
|
|
@@ -26,35 +26,31 @@ public class OrderGenerateSeqNoUtils {
|
|
|
private RedisTemplate redisTemplate;
|
|
|
|
|
|
/**
|
|
|
- * @param redisOrderGenerateEnum 传入指定枚举的key
|
|
|
- * @param prefix 业务类别
|
|
|
- * @param orderType 单据创建类型
|
|
|
- * @param level 所属几级分包
|
|
|
- * @param number 同级分包次数
|
|
|
+ * @param redisOrderGenerateEnum 传入指定枚举的key
|
|
|
+ * @param prefix 业务类别
|
|
|
+ * @param orderType 单据创建类型
|
|
|
+ * @param level 所属几级分包
|
|
|
+ * @param number 同级分包次数
|
|
|
* @return
|
|
|
*/
|
|
|
public static String getSeqNo(RedisOrderGenerateEnum redisOrderGenerateEnum, OrderRuleEnum prefix, String orderType, String level, String number) {
|
|
|
- Calendar calendar = Calendar.getInstance();
|
|
|
- calendar.set(Calendar.HOUR_OF_DAY, 23);
|
|
|
- calendar.set(Calendar.MINUTE, 59);
|
|
|
- calendar.set(Calendar.SECOND, 59);
|
|
|
- calendar.set(Calendar.MILLISECOND, 999);
|
|
|
- /**拼接redis key 公共key+[业务标识]+日期 */
|
|
|
- StringBuilder stringBuilder = new StringBuilder();
|
|
|
- StringBuilder appendKey = stringBuilder.append(redisOrderGenerateEnum.getKey()).append(prefix.getCode()).append(DateUtils.formatDate(new Date()));
|
|
|
- //设置过期时间,这里设置为当天的23:59:59
|
|
|
- Date expireDate = calendar.getTime();
|
|
|
- Long seq = generate(appendKey.toString(), expireDate);
|
|
|
- String date = DateUtils.formatDateToYYMMDD(expireDate);
|
|
|
- String sequence = StringUtils.addZeroForNum(seq.toString(), 4);
|
|
|
if (prefix == null) {
|
|
|
throw new RuntimeException("Order Generate SeqNo Error");
|
|
|
}
|
|
|
+ Date now = new Date();
|
|
|
+ /**拼接redis key 公共key+[业务标识]+日期 */
|
|
|
+ StringBuilder stringBuilder = new StringBuilder();
|
|
|
+ StringBuilder appendKey = stringBuilder.append(redisOrderGenerateEnum.getKey()).append(prefix.getCode()).append(DateUtils.formatDate(now));
|
|
|
+ //设置过期时间,这里设置为当天的23:59:59
|
|
|
+ Long secondsDay = DateUtils.getSecondsDay();
|
|
|
+ Long seq = generate(appendKey.toString(), secondsDay);
|
|
|
+ String date = DateUtils.formatDateToYYMMDD(now);
|
|
|
+ String sequence = String.format("%04d", seq);
|
|
|
/**拼接业务编号*/
|
|
|
String seqNo = prefix.getCode() + date + sequence;
|
|
|
/**extendBusiness 根据实际业务是否需要 */
|
|
|
String seqNoEnd = extendBusiness(seqNo, orderType, level, number);
|
|
|
- log.info("KEY:{}, 序列号生成:{}, 过期时间:{}", appendKey, seqNo, String.format("%tF %tT ", expireDate, expireDate));
|
|
|
+ log.info("KEY:{}, 序列号生成:{}, 过期时间:{}秒", appendKey, seqNo, secondsDay);
|
|
|
return seqNoEnd;
|
|
|
}
|
|
|
|
|
|
@@ -88,42 +84,37 @@ public class OrderGenerateSeqNoUtils {
|
|
|
* @param expireTime 过期时间
|
|
|
* @return
|
|
|
*/
|
|
|
- public static long generate(String key, Date expireTime) {
|
|
|
- long seq = RedissonUtils.getAtomicLong(key, expireTime.getTime());
|
|
|
-// RedisAtomicLong counter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
|
|
|
+ public static long generate(String key, Long expireTime) {
|
|
|
+ //RedisAtomicLong counter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
|
|
|
// //设置过期时间
|
|
|
// counter.expireAt(expireTime);
|
|
|
// //返回redis中key的值,内部实现下面详细说明
|
|
|
// return counter.incrementAndGet();
|
|
|
- return seq;
|
|
|
+ return RedissonUtils.getAtomicLong(key, expireTime);
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
- * @param redisOrderGenerateEnum 传入枚举指定的key
|
|
|
- * @param prefix 业务类别
|
|
|
+ * @param redisOrderGenerateEnum 传入枚举指定的key
|
|
|
+ * @param prefix 业务类别
|
|
|
* @return
|
|
|
*/
|
|
|
public static String getOtherSeqNo(RedisOrderGenerateEnum redisOrderGenerateEnum, OrderRuleEnum prefix) {
|
|
|
- Calendar calendar = Calendar.getInstance();
|
|
|
- calendar.set(Calendar.HOUR_OF_DAY, 23);
|
|
|
- calendar.set(Calendar.MINUTE, 59);
|
|
|
- calendar.set(Calendar.SECOND, 59);
|
|
|
- calendar.set(Calendar.MILLISECOND, 999);
|
|
|
+ if (Objects.isNull(prefix)) {
|
|
|
+ throw new RuntimeException("Order Generate SeqNo Error");
|
|
|
+ }
|
|
|
+ Date now = new Date();
|
|
|
/**拼接redis key 公共key+[业务标识]+日期 */
|
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
|
- StringBuilder appendKey = stringBuilder.append(redisOrderGenerateEnum.getKey()).append(prefix.getCode()).append(DateUtils.formatDate(new Date()));
|
|
|
+ StringBuilder appendKey = stringBuilder.append(redisOrderGenerateEnum.getKey()).append(prefix.getCode()).append(DateUtils.formatDate(now));
|
|
|
//设置过期时间,这里设置为当天的23:59:59
|
|
|
- Date expireDate = calendar.getTime();
|
|
|
- Long seq = generate(appendKey.toString(), expireDate);
|
|
|
- String date = DateUtils.formatDateToYYMMDD(expireDate);
|
|
|
- String sequence = StringUtils.addZeroForNum(seq.toString(), 4);
|
|
|
- if (prefix == null) {
|
|
|
- throw new RuntimeException("Order Generate SeqNo Error");
|
|
|
- }
|
|
|
+ Long secondsDay = DateUtils.getSecondsDay();
|
|
|
+ Long seq = generate(appendKey.toString(), secondsDay);
|
|
|
+ String date = DateUtils.formatDateToYYMMDD(now);
|
|
|
+ String sequence = String.format("%04d", seq);
|
|
|
/**拼接业务编号*/
|
|
|
String seqNo = prefix.getCode() + date + sequence;
|
|
|
- log.info("KEY:{}, 序列号生成:{}, 过期时间:{}", appendKey, seqNo, String.format("%tF %tT ", expireDate, expireDate));
|
|
|
+ log.info("KEY:{}, 序列号生成:{}, 过期时间:{}秒", appendKey, seqNo, secondsDay);
|
|
|
return seqNo;
|
|
|
}
|
|
|
}
|