From a2ea1ddd53545d4d7bdd2d2ad78faa91fd695e6a Mon Sep 17 00:00:00 2001 From: wangchao Date: Fri, 22 May 2020 12:47:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/epmet/redis/IssueVoteDetailRedis.java | 14 +++ .../impl/IssueVoteStatisticalServiceImpl.java | 100 +++++++++++++----- .../java/com/epmet/utils/ModuleConstants.java | 6 ++ 3 files changed, 95 insertions(+), 25 deletions(-) diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueVoteDetailRedis.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueVoteDetailRedis.java index 4ede4ec940..3692ef87b8 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueVoteDetailRedis.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueVoteDetailRedis.java @@ -211,5 +211,19 @@ public class IssueVoteDetailRedis { } } + /** + * @Description 修改缓存中某个属性 - hash + * @param issueId + * @param field + * @param value + * @return void + * @author wangc + * @date 2020.05.22 11:31 + **/ + public void hset(String issueId,String field,Object value){ + String key = new StringBuilder(IssueConstant.REDIS_KEY).append(issueId).toString(); + redisUtils.hSet(key,field,value); + } + } \ No newline at end of file diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalServiceImpl.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalServiceImpl.java index 0f0a7e6561..3f6145db28 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalServiceImpl.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalServiceImpl.java @@ -268,9 +268,21 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl notExistedIds = new HashSet(); notExistedIds.addAll(ids); notExistedIds.removeAll(statisiticalIds); - + Set existedIds = new HashSet<>(); + existedIds.addAll(ids); + existedIds.retainAll(statisiticalIds); //更新 - //TODO 对ids进行更新 - 从缓存中拿取 + //对ids进行更新 - 从缓存中拿取 + List listToUpdate = new ArrayList<>(); + setVotableCountsAndUpdateCache(listToUpdate, + existedIds.stream().flatMap(existedId -> issues.stream().filter(issue -> + StringUtils.equals(issue.getId(),existedId)).map(issueDTO -> { + return issueDTO; + })).collect(Collectors.toSet()), + votableCountMap); + + //TODO 批量更新listToUpdate + if (notExistedIds.size() > NumConstant.ZERO) { //新增 @@ -325,7 +337,29 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl> gridIssueMap = + issues.stream().collect(Collectors.groupingBy(IssueDTO::getGridId)); + for(IssueVoteStatisticalDTO vote : summary){ + for(Map.Entry> entry : gridIssueMap.entrySet()){ + String k = entry.getKey(); + List v = entry.getValue(); + if(null == v || v.size() < NumConstant.ONE) continue; + for(IssueDTO issue : v){ + if(StringUtils.equals(vote.getIssueId(),issue.getId())) + vote.setVotableCount( + null == votableCountMap ? NumConstant.ZERO + : null == votableCountMap.get(k) ? NumConstant.ZERO : votableCountMap.get(k) + ); + } + } + } + + for(Map.Entry> entry : gridIssueMap.entrySet()){ + String k = entry.getKey(); + List v = entry.getValue(); + + } //TODO 批量插入 } @@ -347,29 +381,9 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl> gridIssueMap = issues.stream().collect(Collectors.groupingBy(IssueDTO::getGridId)); + setVotableCountsAndUpdateCache(listToUpdate,issues,votableCountMap); - for(Map.Entry> entry : gridIssueMap.entrySet()){ - String k = entry.getKey(); - List v = entry.getValue(); - for(IssueDTO issue : v){ - IssueVoteStatisticalDTO vote = new IssueVoteStatisticalDTO(); - vote.setIssueId(issue.getId()); - VoteRedisFormDTO cache = issueVoteDetailRedis.get(issue.getId()); - if(null == cache) - continue; - vote.setSupportCount(cache.getSupportAmount()); - vote.setOppositionCount(cache.getOppositionAmount()); - vote.setVotableCount( null == votableCountMap ? - NumConstant.ZERO : - null == votableCountMap.get(k) ? NumConstant.ZERO : votableCountMap.get(k) - ); - //if(cache.get) - } - - } - - - + //TODO listToUpdate批量更新 } @@ -406,4 +420,40 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl | Set | Map + * @return + * @author wangc + * @date 2020.05.22 11:55 + **/ + private void setVotableCountsAndUpdateCache(List list, + Set issues, + Map votableCountMap){ + Map> gridIssueMap = + issues.stream().collect(Collectors.groupingBy(IssueDTO::getGridId)); + for(Map.Entry> entry : gridIssueMap.entrySet()){ + String k = entry.getKey(); + List v = entry.getValue(); + for(IssueDTO issue : v){ + IssueVoteStatisticalDTO vote = new IssueVoteStatisticalDTO(); + vote.setIssueId(issue.getId()); + VoteRedisFormDTO cache = issueVoteDetailRedis.get(issue.getId()); + if(null == cache) + continue; + vote.setSupportCount(cache.getSupportAmount()); + vote.setOppositionCount(cache.getOppositionAmount()); + vote.setVotableCount( null == votableCountMap ? + NumConstant.ZERO : + null == votableCountMap.get(k) ? NumConstant.ZERO : votableCountMap.get(k) + ); + list.add(vote); + if(cache.getShouldVoteCount() != vote.getVotableCount()){ + issueVoteDetailRedis.hset(issue.getId(),ModuleConstants.SHOULD_VOTE_COUNT,vote.getVotableCount()); + } + } + } + + } + } \ No newline at end of file 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 8a9e9f7fde..47183bed7c 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 @@ -93,4 +93,10 @@ public interface ModuleConstants { String CREATED_OR_UPDATED_BY_SYSTEM = "system"; + /** + * 缓存中应表决数 + * + */ + String SHOULD_VOTE_COUNT = "shouldVoteCount"; + }