xiongzhu 4 yıl önce
ebeveyn
işleme
c83edb748b

+ 8 - 0
src/main/java/com/izouma/nineth/config/CacheConfig.java

@@ -117,6 +117,14 @@ public class CacheConfig {
                 .entryTtl(Duration.ofMinutes(1))
                 .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer())));
 
+        cacheNamesConfigurationMap.put("sandPay", RedisCacheConfiguration.defaultCacheConfig()
+                .entryTtl(Duration.ofHours(1))
+                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer())));
+
+        cacheNamesConfigurationMap.put("sandPayGift", RedisCacheConfiguration.defaultCacheConfig()
+                .entryTtl(Duration.ofHours(1))
+                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer())));
+
         RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                 .entryTtl(Duration.ofDays(7))
                 .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer()));

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

@@ -112,18 +112,18 @@ public class OrderService {
             throw new BusinessException("签名已过期");
         }
 
-        if (redisTemplate.opsForValue().get(RedisKeys.BLACK_LIST + userId) != null) {
-            throw new BusinessException("频繁操作,请稍后再试");
-        }
-        BoundValueOperations<String, Object> ops = redisTemplate.boundValueOps(RedisKeys.LIMIT_USER + userId);
-        ops.setIfAbsent(0, Duration.ofSeconds(10));
-        long val = Optional.ofNullable(ops.increment()).orElse(0L);
-        if (val > 5) {
-            if (val > 10) {
-                redisTemplate.opsForValue().set(RedisKeys.BLACK_LIST + userId, 1, Duration.ofSeconds(60 * 10));
-            }
-            throw new BusinessException("频繁操作,请稍后再试");
-        }
+//        if (redisTemplate.opsForValue().get(RedisKeys.BLACK_LIST + userId) != null) {
+//            throw new BusinessException("频繁操作,请稍后再试");
+//        }
+//        BoundValueOperations<String, Object> ops = redisTemplate.boundValueOps(RedisKeys.LIMIT_USER + userId);
+//        ops.setIfAbsent(0, Duration.ofSeconds(10));
+//        long val = Optional.ofNullable(ops.increment()).orElse(0L);
+//        if (val > 5) {
+//            if (val > 10) {
+//                redisTemplate.opsForValue().set(RedisKeys.BLACK_LIST + userId, 1, Duration.ofSeconds(60 * 10));
+//            }
+//            throw new BusinessException("频繁操作,请稍后再试");
+//        }
 
         limitReq(collectionId);
 

+ 21 - 0
src/main/java/com/izouma/nineth/service/SandPayService.java

@@ -3,9 +3,11 @@ package com.izouma.nineth.service;
 import cn.com.sandpay.cashier.sdk.*;
 import com.alibaba.fastjson.JSONObject;
 import com.izouma.nineth.config.SandPayProperties;
+import com.izouma.nineth.domain.GiftOrder;
 import com.izouma.nineth.domain.Order;
 import com.izouma.nineth.enums.OrderStatus;
 import com.izouma.nineth.exception.BusinessException;
+import com.izouma.nineth.repo.GiftOrderRepo;
 import com.izouma.nineth.repo.OrderRepo;
 import com.izouma.nineth.utils.DateTimeUtils;
 import lombok.AllArgsConstructor;
@@ -33,6 +35,7 @@ import java.util.Map;
 @Slf4j
 public class SandPayService {
     private final OrderRepo         orderRepo;
+    private final GiftOrderRepo     giftOrderRepo;
     private final SandPayProperties sandPayProperties;
 
     public JSONObject requestServer(JSONObject header, JSONObject body, String reqAddr) {
@@ -160,4 +163,22 @@ public class SandPayService {
 
         return res.getJSONObject("body").getString("qrCode");
     }
+
+    @Cacheable(value = "sandPay", key = "#orderId")
+    public String payGiftOrder(Long orderId) {
+        GiftOrder order = giftOrderRepo.findById(orderId).orElseThrow(new BusinessException("订单不存在"));
+        if (order.getStatus() != OrderStatus.NOT_PAID) {
+            throw new BusinessException("订单状态错误");
+        }
+        JSONObject extend = new JSONObject();
+        extend.put("type", "gift");
+        extend.put("id", orderId);
+
+        JSONObject res = requestAlipay(orderId.toString(), order.getGasPrice(), "转增" + order.getAssetId(), "转增" + order.getAssetId(),
+                order.getCreatedAt().plusMinutes(3), extend.toJSONString());
+        if (res == null)
+            throw new BusinessException("下单失败,请稍后再试");
+
+        return res.getJSONObject("body").getString("qrCode");
+    }
 }

+ 6 - 4
src/main/java/com/izouma/nineth/web/OrderPayController.java

@@ -102,12 +102,14 @@ public class OrderPayController {
     @RequestMapping(value = "/gift/alipay_h5", method = RequestMethod.GET)
     @ResponseBody
     public String payGiftOrderAlipayH5(Long id, Model model) throws BaseAdaPayException {
-        return (String) giftOrderService.payAdapay(id, "alipay_wap", null);
+//        return (String) giftOrderService.payAdapay(id, "alipay_wap", null);
+        return sandPayService.payGiftOrder(id);
     }
 
     @RequestMapping(value = "/gift/alipay_wx", method = RequestMethod.GET)
     public String payGiftOrderAlipayWx(Long id, Model model) throws BaseAdaPayException {
-        String payUrl = (String) giftOrderService.payAdapay(id, "alipay_wap", null);
+//        String payUrl = (String) giftOrderService.payAdapay(id, "alipay_wap", null);
+        String payUrl = sandPayService.payGiftOrder(id);;
         model.addAttribute("payUrl", payUrl);
         model.addAttribute("orderId", id);
         return "AlipayHtml";
@@ -116,13 +118,13 @@ public class OrderPayController {
     @RequestMapping(value = "/gift/alipay_qr", method = RequestMethod.GET)
     @ResponseBody
     public String payGiftOrderAlipayQR(Long id, Model model) throws BaseAdaPayException {
-        return (String) giftOrderService.payAdapay(id, "alipay_qr", null);
+        return sandPayService.payGiftOrder(id);
     }
 
     @RequestMapping(value = "/gift/alipay_app", method = RequestMethod.GET)
     @ResponseBody
     public String payGiftOrderAlipayApp(Long id, Model model) throws BaseAdaPayException {
-        return (String) giftOrderService.payAdapay(id, "alipay", null);
+        return sandPayService.payGiftOrder(id);
     }
 
     @RequestMapping(value = "/gift/weixin_h5")