Browse Source

!优化超翔对接

竺森洋 6 tháng trước cách đây
mục cha
commit
12c2ce11ff

+ 1 - 0
pom.xml

@@ -51,6 +51,7 @@
 	</properties>
 
 	<dependencies>
+
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-test</artifactId>

+ 45 - 4
src/main/java/io/renren/application/common/service/imp/SysPublicParamServiceImpl.java

@@ -11,8 +11,10 @@ import io.renren.application.common.service.SysPublicParamService;
 import io.renren.application.common.util.ChaoXiangUtils;
 import io.renren.application.common.vo.ChaoXiangParamVo;
 import io.renren.application.common.vo.Results;
+import io.renren.common.utils.RedisUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
@@ -24,6 +26,7 @@ import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 @Service
 @RequiredArgsConstructor
@@ -31,10 +34,13 @@ import java.util.List;
 @Component
 @EnableScheduling
 public class SysPublicParamServiceImpl extends ServiceImpl<SysPublicParamMapper, SysPublicParam> implements SysPublicParamService {
-
+    final RedisTemplate<String,Object> redisTemplate;
+    final RedisUtils redisUtils;
+    String CHAO_XIANG_STOCK_KEY = "CHAO_XIANG_STOCK_KEY";
     String CHAO_XIANG_PARAM_PRE = "CHAO_XIANG_PARAM_QRCODE_WEEK_";
     String CHAO_XIANG_ADS_TIME_KEY = "CHAO_XIANG_ADS_TIME";
     String CHAO_XIANG_ADS_END_TIME = "CHAO_XIANG_ADS_END_TIME";
+    String LOCK = CHAO_XIANG_STOCK_KEY+":lock";
     @Override
     public Results modeifyParam(ChaoXiangParamDto dto) {
         if (dto.getValues()==null){
@@ -119,6 +125,8 @@ public class SysPublicParamServiceImpl extends ServiceImpl<SysPublicParamMapper,
             if (publicParam ==null){
                 return Results.success();
             }
+            //todo 减库存
+            changeStock(getCacheStock()-1);
             return Results.success(publicParam.getPublicValue());
         }else{
             return Results.error(10,sb.toString());
@@ -153,6 +161,10 @@ public class SysPublicParamServiceImpl extends ServiceImpl<SysPublicParamMapper,
 
     @Override
     public Results hasStock(Integer checkTime) {
+        Long start = System.currentTimeMillis();
+        try {
+
+
         SysPublicParam publicParam = getOne(Wrappers.<SysPublicParam>lambdaQuery().eq(SysPublicParam::getPublicKey,CHAO_XIANG_ADS_END_TIME));
         String time = "20:05:00";
         if (publicParam!=null&&StringUtils.isNotBlank(publicParam.getPublicValue())){
@@ -175,8 +187,7 @@ public class SysPublicParamServiceImpl extends ServiceImpl<SysPublicParamMapper,
         }
 
         try {
-            log.info("开始查询库存 id:{}",id);
-            Integer stock = ChaoXiangUtils.getStock(id);
+            Integer stock = getCacheStock();
             if (stock!=null&&stock>0){
                 if (today.isAfter(endTime)){
                     log.info("超出限制时间,不再强制要求观看广告");
@@ -184,10 +195,40 @@ public class SysPublicParamServiceImpl extends ServiceImpl<SysPublicParamMapper,
                 }
                 return Results.success(stock);
             }
-        } catch (IOException e) {
+        } catch (Exception e) {
             return Results.success(-1);
         }
         return Results.success(-1);
+        }finally {
+            Long end = System.currentTimeMillis();
+            log.info("耗时:{}ms",end-start);
+        }
+    }
+
+    Integer getCacheStock(){
+        Object value = redisTemplate.opsForValue().get(CHAO_XIANG_STOCK_KEY);
+        if (value!=null&&value.toString().matches("\\d+")){
+            return Integer.valueOf(value.toString());
+        }
+        log.info("缓存库存:{}",Integer.valueOf(value.toString()));
+        return 0;
+    }
+
+    synchronized void changeStock(Integer value){
+        redisTemplate.opsForValue().set(CHAO_XIANG_STOCK_KEY,value.toString());
+    }
+
+    @Scheduled(cron = "0 0/1 * * * ? ")
+    public void synStock() throws IOException {
+        int i = LocalDateTime.now().getDayOfWeek().getValue();
+        SysPublicParam idParam = getOne(Wrappers.<SysPublicParam>lambdaQuery().eq(SysPublicParam::getPublicKey,CHAO_XIANG_PARAM_PRE+i));
+        String id = null;
+        if (idParam !=null){
+            id = idParam.getPublicValue();
+        }
+        log.info("开始查询库存 id:{}",id);
+        Integer stock = ChaoXiangUtils.getStock(id);
+        changeStock(stock);
     }
 
     @Scheduled(cron = "0 0/10 * * * ? ")

+ 3 - 3
src/main/resources/application-prod.yml

@@ -49,11 +49,11 @@ spring:
 #      password: 123456
 
     redis:
-        open: false  # 是否开启redis缓存  true开启   false关闭
+        open: true  # 是否开启redis缓存  true开启   false关闭
         database: 0
-        host: localhost
+        host: 192.168.0.49
         port: 6379
-        password:    # 密码(默认为空)
+        password: 7DkY07cl   # 密码(默认为空)
         timeout: 6000ms  # 连接超时时长(毫秒)
         jedis:
             pool: