Browse Source

Merge branch 'dev_bugfix_318_wangc' into dev_temp

# Conflicts:
#	epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteDetailDao.java
#	epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueVoteDetailRedis.java
#	epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalServiceImpl.java
#	epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteDetailDao.xml
dev_shibei_match
wangchao 5 years ago
parent
commit
341644bc44
  1. 10
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteDetailDao.java
  2. 13
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueVoteDetailRedis.java
  3. 56
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalServiceImpl.java
  4. 22
      epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteDetailDao.xml

10
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteDetailDao.java

@ -103,6 +103,14 @@ public interface IssueVoteDetailDao extends BaseDao<IssueVoteDetailEntity> {
* @return com.epmet.dto.form.VoteRedisFormDTO * @return com.epmet.dto.form.VoteRedisFormDTO
* @author wangc * @author wangc
* @date 2021.03.03 18:09 * @date 2021.03.03 18:09
*/
VoteRedisFormDTO selectInfo4Cache(@Param("issueId") String issueId);
/**
* @Description 批量统计出议题的所有支持数和反对数
* @param issueIds
* @return java.util.Set<com.epmet.dto.form.VoteRedisFormDTO>
* @author wangc
* @date 2021.03.18 14:58
*/ */
VoteRedisFormDTO selectInfo4Cache( @Param("issueId") String issueId); List<VoteRedisFormDTO> selectBatchVoteCount(@Param("issueIds")Set<String> issueIds);
} }

13
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueVoteDetailRedis.java

@ -22,6 +22,7 @@ import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.redis.RedisUtils; import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.IssueConstant; import com.epmet.constant.IssueConstant;
import com.epmet.dao.IssueVoteDetailDao;
import com.epmet.dto.IssueDTO; import com.epmet.dto.IssueDTO;
import com.epmet.dto.form.CommonGridIdFormDTO; import com.epmet.dto.form.CommonGridIdFormDTO;
import com.epmet.dto.form.VoteRedisFormDTO; import com.epmet.dto.form.VoteRedisFormDTO;
@ -71,6 +72,9 @@ public class IssueVoteDetailRedis {
@Autowired @Autowired
private IssueVoteDetailService issueVoteDetailService; private IssueVoteDetailService issueVoteDetailService;
@Autowired
private IssueVoteDetailDao issueVoteDetailDao;
public void delete(Object[] ids) { public void delete(Object[] ids) {
} }
@ -92,6 +96,9 @@ public class IssueVoteDetailRedis {
redisUtils.delete(IssueConstant.REDIS_KEY +issueId); redisUtils.delete(IssueConstant.REDIS_KEY +issueId);
} }
public void set(VoteRedisFormDTO vote){ public void set(VoteRedisFormDTO vote){
String key = IssueConstant.REDIS_KEY +vote.getIssueId(); String key = IssueConstant.REDIS_KEY +vote.getIssueId();
//bean to map //bean to map
@ -209,10 +216,8 @@ public class IssueVoteDetailRedis {
} }
//如果缓存中没有,去表决详情中计算出实时数据,并放入缓存中 //如果缓存中没有,去表决详情中计算出实时数据,并放入缓存中
//无需查询issue_vote_statistical中的数据,因为不是实时数据,可能不准确,有定时任务会自动同步 //无需查询issue_vote_statistical中的数据,因为不是实时数据,可能不准确,有定时任务会自动同步
VoteRedisFormDTO voteCache = new VoteRedisFormDTO(); VoteRedisFormDTO voteCache = issueVoteDetailDao.selectInfo4Cache(issueId);
voteCache.setIssueId(issueId); if(StringUtils.isBlank(voteCache.getIssueId())) voteCache.setIssueId(issueId);
voteCache.setSupportAmount(issueVoteDetailService.getVotingCount(issueId,IssueConstant.SUPPORT));
voteCache.setOppositionAmount(issueVoteDetailService.getVotingCount(issueId,IssueConstant.OPPOSE));
IssueDTO issue = issueService.get(issueId); IssueDTO issue = issueService.get(issueId);
if(null != issue){ if(null != issue){
CommonGridIdFormDTO gridId = new CommonGridIdFormDTO(); CommonGridIdFormDTO gridId = new CommonGridIdFormDTO();

56
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalServiceImpl.java

@ -51,19 +51,18 @@ import com.epmet.resi.group.feign.ResiGroupOpenFeignClient;
import com.epmet.service.IssueVoteDetailService; import com.epmet.service.IssueVoteDetailService;
import com.epmet.service.IssueVoteStatisticalService; import com.epmet.service.IssueVoteStatisticalService;
import com.epmet.utils.ModuleConstants; import com.epmet.utils.ModuleConstants;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* 议题表决统计表 * 议题表决统计表
@ -272,10 +271,11 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl<IssueVoteSt
CommonGridIdListFormDTO gridIdList = new CommonGridIdListFormDTO(); CommonGridIdListFormDTO gridIdList = new CommonGridIdListFormDTO();
gridIdList.setGridIds(gridIds); gridIdList.setGridIds(gridIds);
Result<GridVotableCountResultDTO> votableCountResult = resiGroupFeignClient.votableCounts(gridIdList); Result<GridVotableCountResultDTO> votableCountResult = resiGroupFeignClient.votableCounts(gridIdList);
Map<String,Integer> votableCountMap = null; Map<String,Integer> votableCountMap1 = null;
if(votableCountResult.success() && null != votableCountResult.getData() && null != votableCountResult.getData().getVotableCountMap()){ if(votableCountResult.success() && null != votableCountResult.getData() && null != votableCountResult.getData().getVotableCountMap()){
votableCountMap = votableCountResult.getData().getVotableCountMap(); votableCountMap1 = votableCountResult.getData().getVotableCountMap();
} }
final Map<String,Integer> votableCountMap = votableCountMap1;
List<IssueVoteStatisticalDTO> statisticalList = List<IssueVoteStatisticalDTO> statisticalList =
baseDao.selectListByIds(ids); baseDao.selectListByIds(ids);
@ -302,12 +302,42 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl<IssueVoteSt
baseDao.updateBatchByIssueId(listToUpdate); baseDao.updateBatchByIssueId(listToUpdate);
if (notExistedIds.size() > NumConstant.ZERO) { if (notExistedIds.size() > NumConstant.ZERO) {
//新增
List<IssueVoteStatisticalDTO> toInsert = new ArrayList<>();
Map<String,String> issueGridMap = issues.stream().collect(Collectors.toMap(IssueDTO::getId,IssueDTO::getGridId,(o, n) -> o)); Map<String,String> issueGridMap = issues.stream().collect(Collectors.toMap(IssueDTO::getId,IssueDTO::getGridId,(o, n) -> o));
//新增
List<IssueVoteStatisticalDTO> toInsert = new LinkedList<>();
List<VoteRedisFormDTO> voteList = issueVoteDetailDao.selectBatchVoteCount(notExistedIds);
List<String> votedIssueIds = new ArrayList<>();
if(!CollectionUtils.isEmpty(voteList) && StringUtils.isNotBlank(voteList.get(NumConstant.ZERO).getIssueId())) {
toInsert = voteList.stream().map(o -> {
IssueVoteStatisticalDTO dto = new IssueVoteStatisticalDTO();
dto.setIssueId(o.getIssueId());
dto.setOppositionCount(o.getOppositionAmount());
dto.setSupportCount(o.getSupportAmount());
dto.setVotableCount(Optional.ofNullable(votableCountMap.get(issueGridMap.get(o.getIssueId()))).orElse(NumConstant.ZERO));
dto.setCreatedBy(ModuleConstants.CREATED_BY_SYSTEM);dto.setUpdatedBy(ModuleConstants.CREATED_BY_SYSTEM);
return dto;
}).collect(Collectors.toList());
votedIssueIds = voteList.stream().map(VoteRedisFormDTO::getIssueId).collect(Collectors.toList());
}
notExistedIds.removeAll(votedIssueIds);
if(!notExistedIds.isEmpty()){
List<IssueVoteStatisticalDTO> collect = notExistedIds.stream().map(issueId -> {
IssueVoteStatisticalDTO dto = new IssueVoteStatisticalDTO();
dto.setIssueId(issueId);
dto.setSupportCount(NumConstant.ZERO);
dto.setOppositionCount(NumConstant.ZERO);
dto.setVotableCount(Optional.ofNullable(votableCountMap.get(issueGridMap.get(issueId))).orElse(NumConstant.ZERO));
dto.setCreatedBy(ModuleConstants.CREATED_BY_SYSTEM);dto.setUpdatedBy(ModuleConstants.CREATED_BY_SYSTEM);
return dto;
}).collect(Collectors.toList());
if(!CollectionUtils.isEmpty(collect)) toInsert.addAll(collect);}
/*
List<IssueAttitudeCountResultDTO> summaryList = issueVoteDetailDao.getVotingSummaryList(notExistedIds); List<IssueAttitudeCountResultDTO> summaryList = issueVoteDetailDao.getVotingSummaryList(notExistedIds);
Map<String, List<IssueAttitudeCountResultDTO>> summaryMap = Map<String, List<IssueAttitudeCountResultDTO>> summaryMap =
summaryList.stream().collect(Collectors.groupingBy(IssueAttitudeCountResultDTO::getIssueId)); summaryList.stream().collect(Collectors.groupingBy(IssueAttitudeCountResultDTO::getIssueId));
for (Map.Entry<String, List<IssueAttitudeCountResultDTO>> entry : summaryMap.entrySet()) { for (Map.Entry<String, List<IssueAttitudeCountResultDTO>> entry : summaryMap.entrySet()) {
IssueVoteStatisticalDTO obj = new IssueVoteStatisticalDTO(); IssueVoteStatisticalDTO obj = new IssueVoteStatisticalDTO();
obj.setCreatedBy(ModuleConstants.CREATED_BY_SYSTEM); obj.setCreatedBy(ModuleConstants.CREATED_BY_SYSTEM);
@ -322,15 +352,15 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl<IssueVoteSt
} }
}); });
} else { } else {
obj.setOppositionCount(NumConstant.ZERO); obj.setOppositionCount(NumConstant.ZERO);
obj.setSupportCount(NumConstant.ZERO); obj.setSupportCount(NumConstant.ZERO);
} }
obj.setVotableCount(Optional.ofNullable(votableCountMap.get(issueGridMap.get(entry.getKey()))).orElse(NumConstant.ZERO)); obj.setVotableCount(Optional.ofNullable(votableCountMap.get(issueGridMap.get(entry.getKey()))).orElse(NumConstant.ZERO));
toInsert.add(obj); toInsert.add(obj);
} }
*/
/* Set<String> setToInsert = toInsert.stream().map(IssueVoteStatisticalDTO::getIssueId).collect(Collectors.toSet()); /* Set<String> setToInsert = toInsert.stream().map(IssueVoteStatisticalDTO::getIssueId).collect(Collectors.toSet());
Set<String> issuesNeverVotedIds = new HashSet<String>(); Set<String> issuesNeverVotedIds = new HashSet<String>();
issuesNeverVotedIds.addAll(ids); issuesNeverVotedIds.addAll(ids);
@ -370,11 +400,11 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl<IssueVoteSt
} }
}*/ }*/
if(!toInsert.isEmpty())
// 批量插入 // 批量插入
baseDao.insertBatch(toInsert); baseDao.insertBatch(toInsert);
} }
//} //}
//else if (ids.size() < statisiticalIds.size()) { //else if (ids.size() < statisiticalIds.size()) {
//统计数大于议题数,数据出错 //统计数大于议题数,数据出错
//找出多余数据,删除 //找出多余数据,删除
@ -510,7 +540,7 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl<IssueVoteSt
IssueVoteStatisticalDTO vote = new IssueVoteStatisticalDTO(); IssueVoteStatisticalDTO vote = new IssueVoteStatisticalDTO();
vote.setIssueId(issue.getId()); vote.setIssueId(issue.getId());
VoteRedisFormDTO cache = Optional.ofNullable(issueVoteDetailRedis.getVoteStatistical(issue.getId())).orElse(issueVoteDetailDao.selectInfo4Cache(issue.getId()) ); VoteRedisFormDTO cache = issueVoteDetailRedis.getVoteStatistical(issue.getId());
if(null == cache) continue; if(null == cache) continue;
if(StringUtils.isBlank(cache.getIssueId())) cache.setIssueId(issue.getId()); if(StringUtils.isBlank(cache.getIssueId())) cache.setIssueId(issue.getId());
vote.setCreatedBy(ModuleConstants.CREATED_BY_SYSTEM); vote.setCreatedBy(ModuleConstants.CREATED_BY_SYSTEM);

22
epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteDetailDao.xml

@ -67,6 +67,9 @@
ISSUE_VOTE_DETAIL ISSUE_VOTE_DETAIL
WHERE WHERE
del_flag = '0' del_flag = '0'
<foreach collection="ids" item="issueId" open="AND (" separator=" or " close=" )">
issue_id = #{issueId}
</foreach>
GROUP BY GROUP BY
issue_id, issue_id,
attitude attitude
@ -130,7 +133,26 @@
FROM FROM
`issue_vote_detail` `issue_vote_detail`
WHERE WHERE
del_flag = '0' and
issue_id = #{issueId} issue_id = #{issueId}
</select> </select>
<select id="selectBatchVoteCount" resultType="com.epmet.dto.form.VoteRedisFormDTO">
SELECT
issue_id,
count( ATTITUDE = 'opposition' OR NULL ) AS oppositionAmount,
count( ATTITUDE = 'support' OR NULL ) AS supportAmount,
0 as shouldVoteCount
FROM
`issue_vote_detail`
WHERE
del_flag = '0'
<foreach collection="issueIds" item="issueId" open="AND (" separator=" or " close=" )">
issue_id = #{issueId}
</foreach>
</select>
</mapper> </mapper>
Loading…
Cancel
Save