Showing
1 changed file
with
14 additions
and
10 deletions
1 | package com.yohoufo.order.service.impl; | 1 | package com.yohoufo.order.service.impl; |
2 | 2 | ||
3 | +import com.google.common.util.concurrent.RateLimiter; | ||
3 | import com.yoho.error.ServiceError; | 4 | import com.yoho.error.ServiceError; |
4 | import com.yoho.error.exception.ServiceException; | 5 | import com.yoho.error.exception.ServiceException; |
5 | import com.yohobuy.ufo.model.order.bo.GoodsInfo; | 6 | import com.yohobuy.ufo.model.order.bo.GoodsInfo; |
6 | import com.yohobuy.ufo.model.order.common.OrderCodeType; | 7 | import com.yohobuy.ufo.model.order.common.OrderCodeType; |
7 | import com.yohobuy.ufo.model.order.common.TabType; | 8 | import com.yohobuy.ufo.model.order.common.TabType; |
8 | import com.yohobuy.ufo.model.order.resp.OrderDetailInfo; | 9 | import com.yohobuy.ufo.model.order.resp.OrderDetailInfo; |
10 | +import com.yohoufo.common.exception.UfoServiceException; | ||
9 | import com.yohoufo.order.service.cache.OrderCacheService; | 11 | import com.yohoufo.order.service.cache.OrderCacheService; |
10 | import com.yohoufo.order.service.support.codegenerator.OrderCodeGenerator; | 12 | import com.yohoufo.order.service.support.codegenerator.OrderCodeGenerator; |
11 | import com.yohoufo.order.service.support.codegenerator.bean.CodeMeta; | 13 | import com.yohoufo.order.service.support.codegenerator.bean.CodeMeta; |
@@ -15,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired; | @@ -15,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired; | ||
15 | import org.springframework.stereotype.Service; | 17 | import org.springframework.stereotype.Service; |
16 | 18 | ||
17 | import java.util.Objects; | 19 | import java.util.Objects; |
20 | +import java.util.concurrent.TimeUnit; | ||
18 | import java.util.function.Supplier; | 21 | import java.util.function.Supplier; |
19 | 22 | ||
20 | @Service | 23 | @Service |
@@ -70,7 +73,16 @@ public class OrderViewService { | @@ -70,7 +73,16 @@ public class OrderViewService { | ||
70 | return goodsInfo; | 73 | return goodsInfo; |
71 | } | 74 | } |
72 | 75 | ||
76 | + private final RateLimiter rateLimiter = RateLimiter.create(200D); | ||
77 | + | ||
73 | public OrderDetailInfo getPayDetail(int uid, long orderCode){ | 78 | public OrderDetailInfo getPayDetail(int uid, long orderCode){ |
79 | + boolean acquireToken = rateLimiter.tryAcquire(1, 10, TimeUnit.MILLISECONDS); | ||
80 | + | ||
81 | + if (!acquireToken){ | ||
82 | + logger.warn("OrderViewService.getPayDetail trigger rate limit, uid {} orderCode {} rate {}", uid, orderCode, rateLimiter.getRate()); | ||
83 | + throw new UfoServiceException(400, "支付正在进行中"); | ||
84 | + } | ||
85 | + | ||
74 | CodeMeta codeMeta = orderCodeGenerator.expId(orderCode); | 86 | CodeMeta codeMeta = orderCodeGenerator.expId(orderCode); |
75 | if (Objects.isNull(codeMeta)){ | 87 | if (Objects.isNull(codeMeta)){ |
76 | logger.warn("payDetail orderCode illegal, orderCode {}", orderCode); | 88 | logger.warn("payDetail orderCode illegal, orderCode {}", orderCode); |
@@ -79,26 +91,18 @@ public class OrderViewService { | @@ -79,26 +91,18 @@ public class OrderViewService { | ||
79 | OrderCodeType orderCodeType = OrderCodeType.getOrderCodeType(codeMeta.getType()); | 91 | OrderCodeType orderCodeType = OrderCodeType.getOrderCodeType(codeMeta.getType()); |
80 | 92 | ||
81 | Supplier<OrderDetailInfo> orderDetailInfoSupplier = null; | 93 | Supplier<OrderDetailInfo> orderDetailInfoSupplier = null; |
82 | - TabType tabType; | ||
83 | switch (orderCodeType){ | 94 | switch (orderCodeType){ |
84 | case BUYER_TYPE: | 95 | case BUYER_TYPE: |
85 | - tabType = TabType.BUY; | ||
86 | orderDetailInfoSupplier = () -> buyerOrderDetailService.getPayDetail(uid, orderCode); | 96 | orderDetailInfoSupplier = () -> buyerOrderDetailService.getPayDetail(uid, orderCode); |
87 | break; | 97 | break; |
88 | case SELLER_TYPE: | 98 | case SELLER_TYPE: |
89 | - tabType = TabType.SELL; | ||
90 | orderDetailInfoSupplier = () -> sellerOrderDetailService.getPayDetail(uid, orderCode); | 99 | orderDetailInfoSupplier = () -> sellerOrderDetailService.getPayDetail(uid, orderCode); |
91 | break; | 100 | break; |
92 | default: | 101 | default: |
93 | return null; | 102 | return null; |
94 | } | 103 | } |
95 | - OrderDetailInfo orderDetailInfo = orderCacheService.getOrderPayDetailInfo(uid, orderCode, tabType); | ||
96 | - if (orderDetailInfo == null){ | ||
97 | - orderDetailInfo = orderDetailInfoSupplier.get(); | ||
98 | - if (Objects.nonNull(orderDetailInfo)){ | ||
99 | - orderCacheService.cacheOrderPayDetailInfo(uid, orderCode, tabType, orderDetailInfo); | ||
100 | - } | ||
101 | - } | 104 | + OrderDetailInfo orderDetailInfo ; |
105 | + orderDetailInfo = orderDetailInfoSupplier.get(); | ||
102 | return orderDetailInfo; | 106 | return orderDetailInfo; |
103 | } | 107 | } |
104 | } | 108 | } |
-
Please register or login to post a comment