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
* @author wangc
* @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.utils.Result;
import com.epmet.constant.IssueConstant;
import com.epmet.dao.IssueVoteDetailDao;
import com.epmet.dto.IssueDTO;
import com.epmet.dto.form.CommonGridIdFormDTO;
import com.epmet.dto.form.VoteRedisFormDTO;
@ -71,6 +72,9 @@ public class IssueVoteDetailRedis {
@Autowired
private IssueVoteDetailService issueVoteDetailService;
@Autowired
private IssueVoteDetailDao issueVoteDetailDao;
public void delete(Object[] ids) {
}
@ -92,6 +96,9 @@ public class IssueVoteDetailRedis {
redisUtils.delete(IssueConstant.REDIS_KEY +issueId);
}
public void set(VoteRedisFormDTO vote){
String key = IssueConstant.REDIS_KEY +vote.getIssueId();
//bean to map
@ -209,10 +216,8 @@ public class IssueVoteDetailRedis {
}
//如果缓存中没有,去表决详情中计算出实时数据,并放入缓存中
//无需查询issue_vote_statistical中的数据,因为不是实时数据,可能不准确,有定时任务会自动同步
VoteRedisFormDTO voteCache = new VoteRedisFormDTO();
voteCache.setIssueId(issueId);
voteCache.setSupportAmount(issueVoteDetailService.getVotingCount(issueId,IssueConstant.SUPPORT));
voteCache.setOppositionAmount(issueVoteDetailService.getVotingCount(issueId,IssueConstant.OPPOSE));
VoteRedisFormDTO voteCache = issueVoteDetailDao.selectInfo4Cache(issueId);
if(StringUtils.isBlank(voteCache.getIssueId())) voteCache.setIssueId(issueId);
IssueDTO issue = issueService.get(issueId);
if(null != issue){
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.IssueVoteStatisticalService;
import com.epmet.utils.ModuleConstants;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 议题表决统计表
@ -272,10 +271,11 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl<IssueVoteSt
CommonGridIdListFormDTO gridIdList = new CommonGridIdListFormDTO();
gridIdList.setGridIds(gridIds);
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()){
votableCountMap = votableCountResult.getData().getVotableCountMap();
votableCountMap1 = votableCountResult.getData().getVotableCountMap();
}
final Map<String,Integer> votableCountMap = votableCountMap1;
List<IssueVoteStatisticalDTO> statisticalList =
baseDao.selectListByIds(ids);
@ -302,12 +302,42 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl<IssueVoteSt
baseDao.updateBatchByIssueId(listToUpdate);
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));
//新增
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);
Map<String, List<IssueAttitudeCountResultDTO>> summaryMap =
summaryList.stream().collect(Collectors.groupingBy(IssueAttitudeCountResultDTO::getIssueId));
for (Map.Entry<String, List<IssueAttitudeCountResultDTO>> entry : summaryMap.entrySet()) {
IssueVoteStatisticalDTO obj = new IssueVoteStatisticalDTO();
obj.setCreatedBy(ModuleConstants.CREATED_BY_SYSTEM);
@ -322,15 +352,15 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl<IssueVoteSt
}
});
} else {
obj.setOppositionCount(NumConstant.ZERO);
obj.setSupportCount(NumConstant.ZERO);
obj.setOppositionCount(NumConstant.ZERO);
obj.setSupportCount(NumConstant.ZERO);
}
obj.setVotableCount(Optional.ofNullable(votableCountMap.get(issueGridMap.get(entry.getKey()))).orElse(NumConstant.ZERO));
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>();
issuesNeverVotedIds.addAll(ids);
@ -370,11 +400,11 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl<IssueVoteSt
}
}*/
if(!toInsert.isEmpty())
// 批量插入
baseDao.insertBatch(toInsert);
}
//}
//}
//else if (ids.size() < statisiticalIds.size()) {
//统计数大于议题数,数据出错
//找出多余数据,删除
@ -510,7 +540,7 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl<IssueVoteSt
IssueVoteStatisticalDTO vote = new IssueVoteStatisticalDTO();
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(StringUtils.isBlank(cache.getIssueId())) cache.setIssueId(issue.getId());
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
WHERE
del_flag = '0'
<foreach collection="ids" item="issueId" open="AND (" separator=" or " close=" )">
issue_id = #{issueId}
</foreach>
GROUP BY
issue_id,
attitude
@ -130,7 +133,26 @@
FROM
`issue_vote_detail`
WHERE
del_flag = '0' and
issue_id = #{issueId}
</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>
Loading…
Cancel
Save