From 8cfdf0b6678e2c63552c454cd77953c28589a2a8 Mon Sep 17 00:00:00 2001 From: wangchao Date: Wed, 9 Dec 2020 15:46:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=87=E7=AD=BEredis=20fetch=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/result/IssueCategoryTagResultDTO.java | 15 ++++++ .../com/epmet/constant/GovIssueRedisKeys.java | 6 ++- .../epmet/redis/IssueProjectTagDictRedis.java | 48 +++++++++++++++++-- .../java/com/epmet/utils/ModuleConstants.java | 2 + 4 files changed, 67 insertions(+), 4 deletions(-) diff --git a/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/IssueCategoryTagResultDTO.java b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/IssueCategoryTagResultDTO.java index 23ac6afece..a36724d35a 100644 --- a/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/IssueCategoryTagResultDTO.java +++ b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/IssueCategoryTagResultDTO.java @@ -3,6 +3,7 @@ package com.epmet.dto.result; import lombok.Data; import java.io.Serializable; +import java.util.Objects; /** * @Description 获取议题的分类、标签列表-接口返参 @@ -22,4 +23,18 @@ public class IssueCategoryTagResultDTO implements Serializable { */ private String name; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + IssueCategoryTagResultDTO that = (IssueCategoryTagResultDTO) o; + return Objects.equals(id, that.id) && + Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(id, name); + } } diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/constant/GovIssueRedisKeys.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/constant/GovIssueRedisKeys.java index 80635a483b..c9890f47b5 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/constant/GovIssueRedisKeys.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/constant/GovIssueRedisKeys.java @@ -1,5 +1,9 @@ package com.epmet.constant; +import com.epmet.utils.ModuleConstants; + +import java.util.Optional; + /** * @Description gov-issue-server模块redis key * @Author yinzuomei @@ -28,7 +32,7 @@ public class GovIssueRedisKeys { * @return */ public static String getGovernmentTagKey(String customerId,String categoryId){ - return rootPrefix.concat("govern:customer:category:").concat(customerId).concat(":").concat(categoryId); + return rootPrefix.concat("govern:customer:category:").concat(customerId).concat(":").concat(Optional.ofNullable(categoryId).orElse(ModuleConstants.ASTERISK)); } } diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueProjectTagDictRedis.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueProjectTagDictRedis.java index 5236c91a56..873a5c9f83 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueProjectTagDictRedis.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueProjectTagDictRedis.java @@ -22,11 +22,22 @@ import com.epmet.commons.tools.redis.RedisUtils; import com.epmet.constant.GovIssueRedisKeys; import com.epmet.dto.result.IssueCategoryTagResultDTO; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.data.redis.connection.RedisConnection; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ZSetOperations; +import org.springframework.lang.Nullable; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; /** * 议题、项目标签字典表 @@ -39,7 +50,8 @@ import java.util.List; public class IssueProjectTagDictRedis { @Autowired private RedisUtils redisUtils; - + @Autowired + private RedisTemplate redisTemplate; public void delete(Object[] ids) { } @@ -65,10 +77,40 @@ public class IssueProjectTagDictRedis { */ public List getTagsOrderByRank(String customerId,List category){ if(StringUtils.isBlank(customerId)) { - log.error("customerId can not be null when obtain govern tags cache"); + log.error("customerId can not be null when obtain govern tags."); return null; } + Set keys; + if(CollectionUtils.isEmpty(category)) + keys = redisUtils.keys(GovIssueRedisKeys.getGovernmentTagKey(customerId,null)); + else keys = category.stream().map(key -> {return GovIssueRedisKeys.getGovernmentTagKey(customerId,key);}).collect(Collectors.toSet()); + + List>> heatTuple = redisTemplate.executePipelined(new RedisCallback>>() { + @Nullable + @Override + public Set> doInRedis(RedisConnection connection) throws DataAccessException { + connection.openPipeline(); + keys.forEach(key -> { + connection.zSetCommands().zRangeByScoreWithScores(redisTemplate.getKeySerializer().serialize(key), NumConstant.ZERO_L, (long) (NumConstant.ONE_NEG)); + }); + return null; + } + },redisTemplate.getValueSerializer()); + //热度Map 分数为key + Map> heatMap = new HashMap<>(); + if(CollectionUtils.isEmpty(heatTuple)){ + + } + + log.warn("fetch customer govern tag cache blankly , customerId:{} , now begin compensation...",customerId); + //TODO 补偿机制 + + log.warn("compensation completed !!"); + return null; + } + + public List compensate(String customerId,List category){ return null; } diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/utils/ModuleConstants.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/utils/ModuleConstants.java index 7aa596b986..a18dde80d5 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/utils/ModuleConstants.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/utils/ModuleConstants.java @@ -154,4 +154,6 @@ public interface ModuleConstants { String ISSUE_ACTION_SHIFT = "转议题"; String ISSUE_ACTION_REJECT = "驳回"; + + String ASTERISK = "*"; }