Browse Source

表决调整

dev_shibei_match
zxc 4 years ago
parent
commit
addf625b08
  1. 20
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/SelectIssueVotingDetailFormDTO.java
  2. 9
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteStatisticalDao.java
  3. 66
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueVoteDetailRedis.java
  4. 13
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueVoteDetailService.java
  5. 14
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java
  6. 54
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteDetailServiceImpl.java
  7. 11
      epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteStatisticalDao.xml

20
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/SelectIssueVotingDetailFormDTO.java

@ -0,0 +1,20 @@
package com.epmet.dto.form;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2021/12/28 2:59 下午
* @DESC
*/
@Data
public class SelectIssueVotingDetailFormDTO implements Serializable {
private static final long serialVersionUID = -2623635693971761693L;
private String issueId;
private String gridId;
}

9
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteStatisticalDao.java

@ -21,6 +21,7 @@ import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.IssueVoteStatisticalDTO;
import com.epmet.dto.PolyLineDTO;
import com.epmet.dto.form.IssueIdFormDTO;
import com.epmet.dto.form.VoteRedisFormDTO;
import com.epmet.dto.result.VoteResultDTO;
import com.epmet.dto.result.VotingTrendResultDTO;
import com.epmet.entity.IssueVoteStatisticalEntity;
@ -121,4 +122,12 @@ public interface IssueVoteStatisticalDao extends BaseDao<IssueVoteStatisticalEnt
* @date 2020.05.22 15:52
**/
void updateBtIssueId(IssueVoteStatisticalDTO vote);
/**
* @Description 根据issueId查询议题表决详情
* @param issueId
* @author zxc
* @date 2021/12/28 2:54 下午
*/
VoteRedisFormDTO selectVoteDetail(@Param("issueId")String issueId);
}

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

@ -20,11 +20,15 @@ package com.epmet.redis;
import cn.hutool.core.bean.BeanUtil;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.IssueConstant;
import com.epmet.dao.IssueVoteDetailDao;
import com.epmet.dao.IssueVoteStatisticalDao;
import com.epmet.dto.IssueDTO;
import com.epmet.dto.IssueVoteStatisticalDTO;
import com.epmet.dto.form.CommonGridIdFormDTO;
import com.epmet.dto.form.SelectIssueVotingDetailFormDTO;
import com.epmet.dto.form.VoteRedisFormDTO;
import com.epmet.feign.ResiGroupFeignClient;
import com.epmet.service.IssueService;
@ -45,6 +49,7 @@ import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import static com.epmet.commons.tools.redis.RedisUtils.DEFAULT_EXPIRE;
import static com.epmet.commons.tools.redis.RedisUtils.NOT_EXPIRE;
/**
@ -75,6 +80,9 @@ public class IssueVoteDetailRedis {
@Autowired
private IssueVoteDetailDao issueVoteDetailDao;
@Autowired
private IssueVoteStatisticalDao issueVoteStatisticalDao;
public void delete(Object[] ids) {
}
@ -103,7 +111,7 @@ public class IssueVoteDetailRedis {
String key = IssueConstant.REDIS_KEY +vote.getIssueId();
//bean to map
Map<String, Object> map = BeanUtil.beanToMap(vote, false, true);
redisUtils.hMSet(key, map,NOT_EXPIRE);
redisUtils.hMSet(key, map,DEFAULT_EXPIRE * 3);
}
public VoteRedisFormDTO get(String issueId){
@ -202,32 +210,61 @@ public class IssueVoteDetailRedis {
}
/**
* @Description 根据issueId去缓存取表决统计数据如果没有去数据库查询并放入缓存
* @Description 根据issueId直接获取缓存获取到直接返回
* 缓存不存在根据issue状态做不同处理
* 表决中应表决数支持数反对数 重新计算
* 关闭转项目直接从表决统计表中查询
* @param issueId
* @return
* @author wangc
* @date 2020.05.21 22:31
**/
// public VoteRedisFormDTO getVoteStatistical(String issueId){
// String key = new StringBuilder(IssueConstant.REDIS_KEY).append(issueId).toString();
// Map<String, Object> stringObjectMap = redisUtils.hGetAll(key);
// if ( null != stringObjectMap && stringObjectMap.size() > NumConstant.ZERO ){
// return mapToEntity(stringObjectMap, VoteRedisFormDTO.class);
// }
// //如果缓存中没有,去表决详情中计算出实时数据,并放入缓存中
// //无需查询issue_vote_statistical中的数据,因为不是实时数据,可能不准确,有定时任务会自动同步
// 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();
// gridId.setGridId(issue.getGridId());
// Result<Integer> votableCount =
// resiGroupFeignClient.votableCount(gridId);
// if(votableCount.success() && null != votableCount.getData()){
// voteCache.setShouldVoteCount(votableCount.getData());
// }else{
// voteCache.setShouldVoteCount(NumConstant.ZERO);
// }
// set(voteCache);
// return voteCache;
// }else{
// logger.warn(String.format(ModuleConstants.ISSUE_NOT_FOUND_EXCEPTION_TEMPLATE,issueId));
// return null;
// }
// }
public VoteRedisFormDTO getVoteStatistical(String issueId){
String key = new StringBuilder(IssueConstant.REDIS_KEY).append(issueId).toString();
Map<String, Object> stringObjectMap = redisUtils.hGetAll(key);
if ( null != stringObjectMap && stringObjectMap.size() > NumConstant.ZERO ){
return mapToEntity(stringObjectMap, VoteRedisFormDTO.class);
}
//如果缓存中没有,去表决详情中计算出实时数据,并放入缓存中
//无需查询issue_vote_statistical中的数据,因为不是实时数据,可能不准确,有定时任务会自动同步
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();
gridId.setGridId(issue.getGridId());
Result<Integer> votableCount =
resiGroupFeignClient.votableCount(gridId);
if(votableCount.success() && null != votableCount.getData()){
voteCache.setShouldVoteCount(votableCount.getData());
}else{
voteCache.setShouldVoteCount(NumConstant.ZERO);
// 如果是表决中的议题,数据现算
VoteRedisFormDTO voteCache = new VoteRedisFormDTO();
if (issue.getIssueStatus().equals(IssueConstant.ISSUE_VOTING)){
SelectIssueVotingDetailFormDTO formDTO = new SelectIssueVotingDetailFormDTO();
formDTO.setIssueId(issueId);
formDTO.setGridId(issue.getGridId());
voteCache = issueVoteDetailService.selectIssueVotingDetail(formDTO);
}else {
// 状态是关闭,转议题的,直接从结果表查询
voteCache = issueVoteStatisticalDao.selectVoteDetail(issueId);
}
set(voteCache);
return voteCache;
@ -236,7 +273,6 @@ public class IssueVoteDetailRedis {
return null;
}
}
/**
* @Description 修改缓存中某个属性 - hash
* @param issueId

13
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueVoteDetailService.java

@ -20,8 +20,11 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dto.IssueVoteDetailDTO;
import com.epmet.dto.IssueVoteStatisticalDTO;
import com.epmet.dto.form.CheckVoteFormDTO;
import com.epmet.dto.form.SelectIssueVotingDetailFormDTO;
import com.epmet.dto.form.VoteFormDTO;
import com.epmet.dto.form.VoteRedisFormDTO;
import com.epmet.dto.result.JoinVoteResultDTO;
import com.epmet.entity.IssueVoteDetailEntity;
import org.apache.ibatis.annotations.Param;
@ -121,4 +124,14 @@ public interface IssueVoteDetailService extends BaseService<IssueVoteDetailEntit
**/
int getVotingCount(String issueId, String attitude);
/**
* @Description 查询议题表决详情 [缓存方法提出公用]
* @param formDTO
* @author zxc
* @date 2021/12/28 3:00 下午
*/
VoteRedisFormDTO selectIssueVotingDetail(SelectIssueVotingDetailFormDTO formDTO);
void updateVote(SelectIssueVotingDetailFormDTO formDTO);
}

14
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java

@ -134,6 +134,8 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
private EpmetMessageOpenFeignClient messageOpenFeignClient;
@Autowired
private GovProjectOpenFeignClient govProjectOpenFeignClient;
@Autowired
private IssueVoteDetailService issueVoteDetailService;
@Value("${openapi.scan.server.url}")
@ -738,7 +740,11 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
}
try {
issueVoteStatisticalService.syncVotingCacheToDbByParams(formDTO.getIssueId(),entity.getGridId(),null);
// issueVoteStatisticalService.syncVotingCacheToDbByParams(formDTO.getIssueId(),entity.getGridId(),null);
SelectIssueVotingDetailFormDTO dto = new SelectIssueVotingDetailFormDTO();
dto.setGridId(entity.getGridId());
dto.setIssueId(formDTO.getIssueId());
issueVoteDetailService.updateVote(dto);
}catch (RenException e){
logger.error(e.getInternalMsg());
}
@ -1055,6 +1061,12 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
logger.warn("com.epmet.service.impl.IssueServiceImpl.shiftProjectV2,话题被转为项目积分事件发送失败,参数:{}", JSON.toJSONString(formDTO));
}
// 8.数据库更新表决统计
SelectIssueVotingDetailFormDTO dto = new SelectIssueVotingDetailFormDTO();
dto.setGridId(entity.getGridId());
dto.setIssueId(formDTO.getIssueId());
issueVoteDetailService.updateVote(dto);
//8.记录日志
//SendMqMsgUtil.build().openFeignClient(messageOpenFeignClient).sendProjectChangedMqMsg();
}

54
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteDetailServiceImpl.java

@ -24,14 +24,18 @@ import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.IssueConstant;
import com.epmet.dao.IssueDao;
import com.epmet.dao.IssueVoteDetailDao;
import com.epmet.dao.IssueVoteStatisticalDao;
import com.epmet.dto.IssueDTO;
import com.epmet.dto.IssueVoteDetailDTO;
import com.epmet.dto.IssueVoteStatisticalDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.CheckTopicPublisherResultDTO;
import com.epmet.dto.result.JoinVoteResultDTO;
@ -41,6 +45,7 @@ import com.epmet.feign.ResiGroupFeignClient;
import com.epmet.redis.IssueVoteDetailRedis;
import com.epmet.service.IssueService;
import com.epmet.service.IssueVoteDetailService;
import com.epmet.service.IssueVoteStatisticalService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -68,6 +73,8 @@ public class IssueVoteDetailServiceImpl extends BaseServiceImpl<IssueVoteDetailD
private IssueService issueService;
@Autowired
private IssueDao issueDao;
@Autowired
private IssueVoteStatisticalDao issueVoteStatisticalDao;
@Override
public PageData<IssueVoteDetailDTO> page(Map<String, Object> params) {
@ -145,11 +152,17 @@ public class IssueVoteDetailServiceImpl extends BaseServiceImpl<IssueVoteDetailD
redisData.setOppositionAmount(redisData.getOppositionAmount()+1);
}
IssueDTO issueDTO = issueService.get(formDTO.getIssueId());
ShouldVoteCountFormDTO shouldVoteCount = new ShouldVoteCountFormDTO();
shouldVoteCount.setGridId(issueDTO.getGridId());
shouldVoteCount.setIssueCreatedTime(issueDTO.getCreatedTime().getTime()/1000);
ShouldVoteCountResultDTO data = resiGroupFeignClient.shouldVoteCount(shouldVoteCount).getData();
redisData.setShouldVoteCount(data.getShouldVoteCount());
// ShouldVoteCountFormDTO shouldVoteCount = new ShouldVoteCountFormDTO();
// shouldVoteCount.setGridId(issueDTO.getGridId());
// shouldVoteCount.setIssueCreatedTime(issueDTO.getCreatedTime().getTime()/1000);
// ShouldVoteCountResultDTO data = resiGroupFeignClient.shouldVoteCount(shouldVoteCount).getData();
CommonGridIdFormDTO dto = new CommonGridIdFormDTO();
dto.setGridId(issueDTO.getGridId());
Result<Integer> integerResult = resiGroupFeignClient.votableCount(dto);
if (!integerResult.success()){
throw new EpmetException("查询应表决人数失败...");
}
redisData.setShouldVoteCount(integerResult.getData());
issueVoteDetailRedis.set(redisData);
Integer checkoutVoteCount = baseDao.checkoutVote(formDTO);
if (checkoutVoteCount==0){
@ -214,5 +227,36 @@ public class IssueVoteDetailServiceImpl extends BaseServiceImpl<IssueVoteDetailD
return baseDao.getVotingCount(issueId,attitude);
}
/**
* @Description 查询议题表决详情 [缓存方法提出公用]
* @param formDTO
* @author zxc
* @date 2021/12/28 3:00 下午
*/
@Override
public VoteRedisFormDTO selectIssueVotingDetail(SelectIssueVotingDetailFormDTO formDTO) {
VoteRedisFormDTO voteCache = baseDao.selectInfo4Cache(formDTO.getIssueId());
if(StringUtils.isBlank(voteCache.getIssueId())){
voteCache.setIssueId(formDTO.getIssueId());
}
CommonGridIdFormDTO gridId = new CommonGridIdFormDTO();
gridId.setGridId(formDTO.getGridId());
Result<Integer> votableCount = resiGroupFeignClient.votableCount(gridId);
if(votableCount.success() && null != votableCount.getData()){
voteCache.setShouldVoteCount(votableCount.getData());
}else{
voteCache.setShouldVoteCount(NumConstant.ZERO);
}
return voteCache;
}
@Override
public void updateVote(SelectIssueVotingDetailFormDTO formDTO) {
VoteRedisFormDTO voteRedisFormDTO = this.selectIssueVotingDetail(formDTO);
IssueVoteStatisticalDTO dto = ConvertUtils.sourceToTarget(voteRedisFormDTO, IssueVoteStatisticalDTO.class);
dto.setVotableCount(voteRedisFormDTO.getShouldVoteCount());
issueVoteStatisticalDao.updateBtIssueId(dto);
}
}

11
epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteStatisticalDao.xml

@ -115,6 +115,17 @@
</foreach>
</select>
<!-- 根据issueId查询议题表决详情 -->
<select id="selectVoteDetail" resultType="com.epmet.dto.form.VoteRedisFormDTO">
SELECT
ISSUE_ID,
SUPPORT_COUNT,
OPPOSITION_COUNT,
VOTABLE_COUNT
FROM issue_vote_statistical
WHERE DEL_FLAG = '0'
AND ISSUE_ID = #{issueId}
</select>
<!-- 批量添加 -->
<insert id="insertBatch" parameterType="java.util.List">

Loading…
Cancel
Save