|
@@ -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 * * * ? ")
|