|
@@ -22,6 +22,7 @@ import com.chelvc.framework.common.util.AssertUtils;
|
|
|
import com.chelvc.framework.common.util.ObjectUtils;
|
|
|
import com.chelvc.framework.common.util.StringUtils;
|
|
|
import com.chelvc.framework.database.context.DatabaseContextHolder;
|
|
|
+import com.chelvc.framework.redis.context.RedisContextHolder;
|
|
|
import io.netty.util.HashedWheelTimer;
|
|
|
import io.netty.util.Timeout;
|
|
|
import io.netty.util.Timer;
|
|
@@ -35,6 +36,7 @@ import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
+import java.security.SecureRandom;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
@@ -71,6 +73,13 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
|
|
|
|
|
|
private final ReservationService reservationService;
|
|
|
|
|
|
+
|
|
|
+ // 定义字符池
|
|
|
+ private static final String LOWER_CASE = "abcdefghijklmnopqrstuvwxyz";
|
|
|
+ private static final String UPPER_CASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
|
+ private static final String DIGITS = "0123456789";
|
|
|
+ private static final String ALL_CHARACTERS = LOWER_CASE + UPPER_CASE + DIGITS;
|
|
|
+
|
|
|
@Override
|
|
|
public ConfirmOrderResultDTO generateConfirmOrder(OmsOrderModifyParam orderParam) {
|
|
|
ConfirmOrderResultDTO result = new ConfirmOrderResultDTO();
|
|
@@ -245,8 +254,9 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
|
|
|
//计算赠送成长值
|
|
|
order.setGrowth(0);
|
|
|
//生成订单号
|
|
|
- order.setOrderSn(generateOrderSn(order));
|
|
|
+ order.setOrderSn(generateOrderSn(6));
|
|
|
order.setMerchantId(orderParam.getMerchantId());
|
|
|
+ order.setId(RedisContextHolder.sequence());
|
|
|
//设置自动收货天数
|
|
|
List<OmsOrderSetting> orderSettings = orderSettingService.listOrderSetting();
|
|
|
if (!CollectionUtils.isEmpty(orderSettings)) {
|
|
@@ -511,23 +521,43 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 生成18位订单编号:8位日期+2位平台号码+2位支付方式+6位以上自增id
|
|
|
+ *
|
|
|
*/
|
|
|
- private String generateOrderSn(OmsOrder order) {
|
|
|
- StringBuilder sb = new StringBuilder();
|
|
|
-// String date = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
|
|
|
-// String key = REDIS_DATABASE+":"+ REDIS_KEY_ORDER_ID + date;
|
|
|
-// Long increment = redisService.incr(key, 1);
|
|
|
-// sb.append(date);
|
|
|
-// sb.append(String.format("%02d", order.getSourceType()));
|
|
|
- sb.append(String.format("%02d", new Random().nextInt(900000) + 100000));
|
|
|
-// String incrementStr = increment.toString();
|
|
|
-// if (incrementStr.length() <= 6) {
|
|
|
-// sb.append(String.format("%06d", increment));
|
|
|
-// } else {
|
|
|
-// sb.append(incrementStr);
|
|
|
-// }
|
|
|
- return sb.toString();
|
|
|
+ public static String generateOrderSn(int length) {
|
|
|
+ if (length < 6) {
|
|
|
+ throw new IllegalArgumentException("Password length must be at least 6 characters.");
|
|
|
+ }
|
|
|
+
|
|
|
+ SecureRandom random = new SecureRandom();
|
|
|
+ StringBuilder password = new StringBuilder(length);
|
|
|
+
|
|
|
+ // 确保每种类型至少有一个字符
|
|
|
+ password.append(LOWER_CASE.charAt(random.nextInt(LOWER_CASE.length())));
|
|
|
+ password.append(UPPER_CASE.charAt(random.nextInt(UPPER_CASE.length())));
|
|
|
+ password.append(DIGITS.charAt(random.nextInt(DIGITS.length())));
|
|
|
+
|
|
|
+ // 填充剩余的字符
|
|
|
+ for (int i = 3; i < length; i++) {
|
|
|
+ password.append(ALL_CHARACTERS.charAt(random.nextInt(ALL_CHARACTERS.length())));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将密码打乱顺序
|
|
|
+ return shuffleString(password.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 打乱字符串顺序
|
|
|
+ private static String shuffleString(String input) {
|
|
|
+ List<Character> characters = new ArrayList<>();
|
|
|
+ for (char c : input.toCharArray()) {
|
|
|
+ characters.add(c);
|
|
|
+ }
|
|
|
+ Collections.shuffle(characters);
|
|
|
+ StringBuilder output = new StringBuilder(characters.size());
|
|
|
+ for (char c : characters) {
|
|
|
+ output.append(c);
|
|
|
+ }
|
|
|
+ return output.toString();
|
|
|
}
|
|
|
|
|
|
/**
|