|
@@ -1,10 +1,12 @@
|
|
|
package com.sckw.core.utils;
|
|
package com.sckw.core.utils;
|
|
|
|
|
|
|
|
|
|
+import com.sckw.core.common.enums.StringConstant;
|
|
|
import com.sckw.core.model.enums.OrderRuleEnum;
|
|
import com.sckw.core.model.enums.OrderRuleEnum;
|
|
|
import com.sckw.core.model.enums.RedisOrderGenerateEnum;
|
|
import com.sckw.core.model.enums.RedisOrderGenerateEnum;
|
|
|
import com.sckw.redis.utils.RedissonUtils;
|
|
import com.sckw.redis.utils.RedissonUtils;
|
|
|
import jakarta.annotation.Resource;
|
|
import jakarta.annotation.Resource;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.data.redis.support.atomic.RedisAtomicLong;
|
|
import org.springframework.data.redis.support.atomic.RedisAtomicLong;
|
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
@@ -26,6 +28,8 @@ public class OrderGenerateSeqNoUtils {
|
|
|
private RedisTemplate redisTemplate;
|
|
private RedisTemplate redisTemplate;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
|
|
+ * 物流订单编号生成
|
|
|
|
|
+ *
|
|
|
* @param redisOrderGenerateEnum 传入指定枚举的key
|
|
* @param redisOrderGenerateEnum 传入指定枚举的key
|
|
|
* @param prefix 业务类别
|
|
* @param prefix 业务类别
|
|
|
* @param orderType 单据创建类型
|
|
* @param orderType 单据创建类型
|
|
@@ -70,6 +74,25 @@ public class OrderGenerateSeqNoUtils {
|
|
|
return appendKey.toString();
|
|
return appendKey.toString();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 拼接redis key 公共key+[业务标识]不携带日期
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param redisOrderGenerateEnum
|
|
|
|
|
+ * @param prefix
|
|
|
|
|
+ * @param str
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ public static String getKeyNotDate(RedisOrderGenerateEnum redisOrderGenerateEnum, OrderRuleEnum prefix, String str) {
|
|
|
|
|
+ StringBuilder stringBuilder = new StringBuilder();
|
|
|
|
|
+ StringBuilder appendKey = new StringBuilder();
|
|
|
|
|
+ if (StringUtils.isNotEmpty(str)) {
|
|
|
|
|
+ appendKey = stringBuilder.append(redisOrderGenerateEnum.getKey()).append(prefix.getCode()).append(str);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ appendKey = stringBuilder.append(redisOrderGenerateEnum.getKey()).append(prefix.getCode());
|
|
|
|
|
+ }
|
|
|
|
|
+ return appendKey.toString();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* //返回当前redis中的key的最大值
|
|
* //返回当前redis中的key的最大值
|
|
|
*
|
|
*
|
|
@@ -96,7 +119,7 @@ public class OrderGenerateSeqNoUtils {
|
|
|
* @return
|
|
* @return
|
|
|
*/
|
|
*/
|
|
|
public static long generate(String key, Long expireTime) {
|
|
public static long generate(String key, Long expireTime) {
|
|
|
- //RedisAtomicLong counter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
|
|
|
|
|
|
|
+ //RedisAtomicLong counter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
|
|
|
// //设置过期时间
|
|
// //设置过期时间
|
|
|
// counter.expireAt(expireTime);
|
|
// counter.expireAt(expireTime);
|
|
|
// //返回redis中key的值,内部实现下面详细说明
|
|
// //返回redis中key的值,内部实现下面详细说明
|
|
@@ -107,6 +130,7 @@ public class OrderGenerateSeqNoUtils {
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* redis 根据key需要减一
|
|
* redis 根据key需要减一
|
|
|
|
|
+ *
|
|
|
* @param redisOrderGenerateEnum
|
|
* @param redisOrderGenerateEnum
|
|
|
* @param prefix
|
|
* @param prefix
|
|
|
* @return
|
|
* @return
|
|
@@ -140,6 +164,8 @@ public class OrderGenerateSeqNoUtils {
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
|
|
+ * 贸易订单/对账/结算生成规则
|
|
|
|
|
+ *
|
|
|
* @param redisOrderGenerateEnum 传入枚举指定的key
|
|
* @param redisOrderGenerateEnum 传入枚举指定的key
|
|
|
* @param prefix 业务类别
|
|
* @param prefix 业务类别
|
|
|
* @return
|
|
* @return
|
|
@@ -160,4 +186,27 @@ public class OrderGenerateSeqNoUtils {
|
|
|
log.info("KEY:{}, 序列号生成:{}, 过期时间:{}秒", appendKey, seqNo, secondsDay);
|
|
log.info("KEY:{}, 序列号生成:{}, 过期时间:{}秒", appendKey, seqNo, secondsDay);
|
|
|
return seqNo;
|
|
return seqNo;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 车辆运单编号规则生成
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param redisOrderGenerateEnum 传入枚举指定的key
|
|
|
|
|
+ * @param prefix 业务类别
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ public static String getWaybillSeqNo(RedisOrderGenerateEnum redisOrderGenerateEnum, OrderRuleEnum prefix, String pidOrderNo) {
|
|
|
|
|
+ if (Objects.isNull(prefix)) {
|
|
|
|
|
+ throw new RuntimeException("Order Generate SeqNo Error");
|
|
|
|
|
+ }
|
|
|
|
|
+ String appendKey = getKeyNotDate(redisOrderGenerateEnum, prefix, pidOrderNo);
|
|
|
|
|
+ //设置过期时间,这里设置为当天的23:59:59
|
|
|
|
|
+ Long secondsDay = DateUtils.getSecondsDay();
|
|
|
|
|
+ Long seq = generate(appendKey, secondsDay);
|
|
|
|
|
+ String sequence = com.sckw.core.utils.StringUtils.addZeroForNum(seq.toString(), 3);
|
|
|
|
|
+ /**拼接业务编号*/
|
|
|
|
|
+ String seqNo = pidOrderNo + StringConstant.HYPHEN + sequence;
|
|
|
|
|
+ log.info("KEY:{}, 序列号生成:{}, 过期时间:{}秒", appendKey, seqNo, secondsDay);
|
|
|
|
|
+ return seqNo;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|