Authored by chenchao

remove cache

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 }