diff --git a/mallinkCApi/src/main/java/com/iformall/config/RedisConfig.java b/mallinkCApi/src/main/java/com/iformall/config/RedisConfig.java index 54f945030..81e2d5a7f 100644 --- a/mallinkCApi/src/main/java/com/iformall/config/RedisConfig.java +++ b/mallinkCApi/src/main/java/com/iformall/config/RedisConfig.java @@ -21,6 +21,7 @@ import org.springframework.data.redis.serializer.StringRedisSerializer; import java.time.Duration; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -174,4 +175,38 @@ public class RedisConfig extends CachingConfigurerSupport { template.setConnectionFactory(connectionFactory); return template; } + + @Bean("questionRedisTemplate") + public RedisTemplate> getQuestionRedisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate> template = new RedisTemplate<>(); + + Jackson2JsonRedisSerializer 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> getQuestionConfigRedisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate> template = new RedisTemplate<>(); + + Jackson2JsonRedisSerializer 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; + } } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxQuestionController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxQuestionController.java index 6aacdcf85..3216444b5 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxQuestionController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxQuestionController.java @@ -1,12 +1,14 @@ package com.iformall.controller; import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.WxQuestion; import com.iformall.domain.po.WxQuestionConfig; import com.iformall.domain.po.WxQuestionLog; +import com.iformall.domain.vo.WxCouponChannelVo; import com.iformall.enums.EnumQuestionConfigStatus; import com.iformall.service.WxCUserBasicInfoService; import com.iformall.service.WxCUserTagsService; @@ -14,16 +16,22 @@ import com.iformall.service.WxQuestionService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import net.sf.saxon.trans.Err; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; 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 java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Random; +import java.util.concurrent.TimeUnit; @RestController @RequestMapping("/api/wxQuestion") @@ -40,9 +48,18 @@ public class WxQuestionController extends BaseController { @Autowired private WxCUserBasicInfoService wxCUserBasicInfoService; + @Autowired + @Qualifier("questionRedisTemplate") + private RedisTemplate> questionRedisTemplate ; + + @Autowired + @Qualifier("questionConfigRedisTemplate") + private RedisTemplate> questionConfigRedisTemplate ; + @ApiOperation("查寻问券") @GetMapping("getQuestion") public Result getQuestion(@RequestParam("couponType") String couponType) { + List listConfig = null ; WxQuestionConfig wxQuestionConfig = new WxQuestionConfig(); wxQuestionConfig.updateTenantInfo(getTenantInfo()); JSONArray ct = new JSONArray(); @@ -51,18 +68,39 @@ public class WxQuestionController extends BaseController { }catch (Exception e) { return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); } - // TODO 缓存优化 - wxQuestionConfig.setCouponTypeList(ct.toString()); - List listConfig = wxQuestionService.findConfigList(wxQuestionConfig); + + ValueOperations> 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); + } + } + if (listConfig.size() > 0) { wxQuestionConfig = listConfig.get(0); List questionIds = JSONObject.parseArray(wxQuestionConfig.getQuestionList(), Long.class); if (wxQuestionConfig.getStatus().equals(EnumQuestionConfigStatus.ON.getCode()) && questionIds.size() > 0) { - WxQuestion wxQuestion = new WxQuestion(); - wxQuestion.updateTenantInfo(getTenantInfo()); - wxQuestion.setIds(questionIds); - List listQuestion = wxQuestionService.findList(wxQuestion); + List listQuestion = null ; + + ValueOperations> 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); + } + if (listQuestion.size() > 0) { Iterator q = listQuestion.iterator(); WxQuestionLog wxQuestionLog = new WxQuestionLog();