Procházet zdrojové kódy

[优化]统一AOP方式缓存

release_toaliyun_real
Burce před 6 roky
rodič
revize
beea08de48
2 změnil soubory, kde provedl 6 přidání a 80 odebrání
  1. +0
    -35
      mallinkCApi/src/main/java/com/iformall/config/RedisConfig.java
  2. +6
    -45
      mallinkCApi/src/main/java/com/iformall/controller/WxQuestionController.java

+ 0
- 35
mallinkCApi/src/main/java/com/iformall/config/RedisConfig.java Zobrazit soubor

@@ -21,7 +21,6 @@ import org.springframework.data.redis.serializer.StringRedisSerializer;


import java.time.Duration; import java.time.Duration;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;


/** /**
@@ -175,38 +174,4 @@ public class RedisConfig extends CachingConfigurerSupport {
template.setConnectionFactory(connectionFactory); template.setConnectionFactory(connectionFactory);
return template; return template;
} }

@Bean("questionRedisTemplate")
public RedisTemplate<String, List<WxQuestion>> getQuestionRedisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, List<WxQuestion>> template = new RedisTemplate<>();

Jackson2JsonRedisSerializer<WxQuestion> j = new Jackson2JsonRedisSerializer<>(WxQuestion.class);
// value值的序列化
template.setValueSerializer(j);
template.setHashKeySerializer(j);

// key的序列化
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());

template.setConnectionFactory(connectionFactory);
return template;
}

@Bean("questionConfigRedisTemplate")
public RedisTemplate<String, List<WxQuestionConfig>> getQuestionConfigRedisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, List<WxQuestionConfig>> template = new RedisTemplate<>();

Jackson2JsonRedisSerializer<WxQuestionConfig> j = new Jackson2JsonRedisSerializer<>(WxQuestionConfig.class);
// value值的序列化
template.setValueSerializer(j);
template.setHashKeySerializer(j);

// key的序列化
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());

template.setConnectionFactory(connectionFactory);
return template;
}
} }

+ 6
- 45
mallinkCApi/src/main/java/com/iformall/controller/WxQuestionController.java Zobrazit soubor

@@ -1,14 +1,12 @@
package com.iformall.controller; package com.iformall.controller;


import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.iformall.common.ErrorCode; import com.iformall.common.ErrorCode;
import com.iformall.common.Result; import com.iformall.common.Result;
import com.iformall.common.ResultData; import com.iformall.common.ResultData;
import com.iformall.domain.po.WxQuestion; import com.iformall.domain.po.WxQuestion;
import com.iformall.domain.po.WxQuestionConfig; import com.iformall.domain.po.WxQuestionConfig;
import com.iformall.domain.po.WxQuestionLog; import com.iformall.domain.po.WxQuestionLog;
import com.iformall.domain.vo.WxCouponChannelVo;
import com.iformall.enums.EnumQuestionConfigStatus; import com.iformall.enums.EnumQuestionConfigStatus;
import com.iformall.service.WxCUserBasicInfoService; import com.iformall.service.WxCUserBasicInfoService;
import com.iformall.service.WxCUserTagsService; import com.iformall.service.WxCUserTagsService;
@@ -16,22 +14,16 @@ import com.iformall.service.WxQuestionService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import net.sf.saxon.trans.Err; import net.sf.saxon.trans.Err;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.configurationprocessor.json.JSONArray; import org.springframework.boot.configurationprocessor.json.JSONArray;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;


import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.concurrent.TimeUnit;


@RestController @RestController
@RequestMapping("/api/wxQuestion") @RequestMapping("/api/wxQuestion")
@@ -48,18 +40,9 @@ public class WxQuestionController extends BaseController {
@Autowired @Autowired
private WxCUserBasicInfoService wxCUserBasicInfoService; private WxCUserBasicInfoService wxCUserBasicInfoService;


@Autowired
@Qualifier("questionRedisTemplate")
private RedisTemplate<String, List<WxQuestion>> questionRedisTemplate ;

@Autowired
@Qualifier("questionConfigRedisTemplate")
private RedisTemplate<String, List<WxQuestionConfig>> questionConfigRedisTemplate ;

@ApiOperation("查寻问券") @ApiOperation("查寻问券")
@GetMapping("getQuestion") @GetMapping("getQuestion")
public Result getQuestion(@RequestParam("couponType") String couponType) { public Result getQuestion(@RequestParam("couponType") String couponType) {
List<WxQuestionConfig> listConfig = null ;
WxQuestionConfig wxQuestionConfig = new WxQuestionConfig(); WxQuestionConfig wxQuestionConfig = new WxQuestionConfig();
wxQuestionConfig.updateTenantInfo(getTenantInfo()); wxQuestionConfig.updateTenantInfo(getTenantInfo());
JSONArray ct = new JSONArray(); JSONArray ct = new JSONArray();
@@ -68,39 +51,17 @@ public class WxQuestionController extends BaseController {
}catch (Exception e) { }catch (Exception e) {
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); return new ResultData(ErrorCode.SYS_PARAMETER_ERROR);
} }

ValueOperations<String, List<WxQuestionConfig>> operations = questionConfigRedisTemplate.opsForValue();
String keyConfig = StringUtils.join(getTenantInfo().getTenantId(),":","questionConfig",":","getQuestion",":",couponType);
boolean hasKey1 = questionConfigRedisTemplate.hasKey(keyConfig+ couponType);
if (hasKey1) {
listConfig = operations.get(keyConfig+ couponType) ;
} else {
wxQuestionConfig.setCouponTypeList(ct.toString());
listConfig = wxQuestionService.findConfigList(wxQuestionConfig);
if(!CollectionUtils.isEmpty(listConfig)) {
operations.set(keyConfig+ couponType,listConfig,24, TimeUnit.HOURS);
}
}

wxQuestionConfig.setCouponTypeList(ct.toString());
List<WxQuestionConfig> listConfig = wxQuestionService.findConfigList(wxQuestionConfig);
if (listConfig.size() > 0) { if (listConfig.size() > 0) {
wxQuestionConfig = listConfig.get(0); wxQuestionConfig = listConfig.get(0);
List<Long> questionIds = JSONObject.parseArray(wxQuestionConfig.getQuestionList(), Long.class); List<Long> questionIds = JSONObject.parseArray(wxQuestionConfig.getQuestionList(), Long.class);
if (wxQuestionConfig.getStatus().equals(EnumQuestionConfigStatus.ON.getCode()) if (wxQuestionConfig.getStatus().equals(EnumQuestionConfigStatus.ON.getCode())
&& questionIds.size() > 0) { && questionIds.size() > 0) {
List<WxQuestion> listQuestion = null ;

ValueOperations<String, List<WxQuestion>> questionOperations = questionRedisTemplate.opsForValue();
String key = StringUtils.join(getTenantInfo().getTenantId(),":","question",":","getQuestion",":",couponType);
boolean hasKey2 = questionRedisTemplate.hasKey(key+ couponType);
if (hasKey2) {
listQuestion = questionOperations.get(key+ couponType) ;
} else {
WxQuestion wxQuestion = new WxQuestion();
wxQuestion.updateTenantInfo(getTenantInfo());
wxQuestion.setIds(questionIds);
listQuestion = wxQuestionService.findList(wxQuestion);
}

WxQuestion wxQuestion = new WxQuestion();
wxQuestion.updateTenantInfo(getTenantInfo());
wxQuestion.setIds(questionIds);
List<WxQuestion> listQuestion = wxQuestionService.findList(wxQuestion);
if (listQuestion.size() > 0) { if (listQuestion.size() > 0) {
Iterator<WxQuestion> q = listQuestion.iterator(); Iterator<WxQuestion> q = listQuestion.iterator();
WxQuestionLog wxQuestionLog = new WxQuestionLog(); WxQuestionLog wxQuestionLog = new WxQuestionLog();


Načítá se…
Zrušit
Uložit