xiongzhu 4 سال پیش
والد
کامیت
fb5a008085
2فایلهای تغییر یافته به همراه17 افزوده شده و 5 حذف شده
  1. 2 0
      src/main/java/com/izouma/nineth/config/RedisKeys.java
  2. 15 5
      src/main/java/com/izouma/nineth/service/OrderService.java

+ 2 - 0
src/main/java/com/izouma/nineth/config/RedisKeys.java

@@ -24,4 +24,6 @@ public class RedisKeys {
     public static final String UPDATE_SALE = "updateSale";
     public static final String UPDATE_SALE = "updateSale";
 
 
     public static final String UPDATE_STOCK = "updateSale";
     public static final String UPDATE_STOCK = "updateSale";
+
+    public static final String LIMIT_REQ = "limitReq::";
 }
 }

+ 15 - 5
src/main/java/com/izouma/nineth/service/OrderService.java

@@ -7,7 +7,6 @@ import com.alipay.api.AlipayClient;
 import com.alipay.api.request.AlipayTradeWapPayRequest;
 import com.alipay.api.request.AlipayTradeWapPayRequest;
 import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
 import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
 import com.github.binarywang.wxpay.bean.order.WxPayMwebOrderResult;
 import com.github.binarywang.wxpay.bean.order.WxPayMwebOrderResult;
-import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
 import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
 import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
 import com.github.binarywang.wxpay.constant.WxPayConstants;
 import com.github.binarywang.wxpay.constant.WxPayConstants;
 import com.github.binarywang.wxpay.exception.WxPayException;
 import com.github.binarywang.wxpay.exception.WxPayException;
@@ -57,6 +56,7 @@ import org.springframework.ui.Model;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.math.RoundingMode;
+import java.time.Duration;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.time.temporal.ChronoUnit;
@@ -110,10 +110,11 @@ public class OrderService {
             throw new BusinessException("签名已过期");
             throw new BusinessException("签名已过期");
         }
         }
 
 
-        Integer stock = collectionService.getStock(collectionId);
-        if (stock == null || stock <= 0) {
-            throw new BusinessException("藏品已售罄", ErrorCode.SOLD_OUT);
-        }
+//        Integer stock = collectionService.getStock(collectionId);
+//        if (stock == null || stock <= 0) {
+//            throw new BusinessException("藏品已售罄", ErrorCode.SOLD_OUT);
+//        }
+        limitReq(collectionId);
 
 
         Long id = snowflakeIdWorker.nextId();
         Long id = snowflakeIdWorker.nextId();
         SendResult result = rocketMQTemplate.syncSend(generalProperties.getCreateOrderTopic(),
         SendResult result = rocketMQTemplate.syncSend(generalProperties.getCreateOrderTopic(),
@@ -123,6 +124,15 @@ public class OrderService {
         return String.valueOf(id);
         return String.valueOf(id);
     }
     }
 
 
+    public void limitReq(Long collectionId) {
+        BoundValueOperations<String, Object> ops = redisTemplate.boundValueOps(RedisKeys.LIMIT_REQ + collectionId);
+        ops.setIfAbsent(3000, Duration.ofSeconds(30));
+        Long val = ops.decrement();
+        if (val == null || val < 0) {
+            throw new BusinessException("很遗憾,藏品已售罄");
+        }
+    }
+
     public Order create(Long userId, Long collectionId, int qty, Long addressId, Long userCouponId, Long invitor,
     public Order create(Long userId, Long collectionId, int qty, Long addressId, Long userCouponId, Long invitor,
                         Long id, boolean vip) {
                         Long id, boolean vip) {
         long t = System.currentTimeMillis();
         long t = System.currentTimeMillis();