Browse Source

Merge remote-tracking branch 'origin/dev_evaluate_add_20210510' into dev

dev_shibei_match
yinzuomei 4 years ago
parent
commit
bfba7c19ff
  1. 5
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/ProjectSatisfactionStatisticsDTO.java
  2. 5
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/govproject/ProjectSatisfactionStatisticsEntity.java
  3. 26
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/CanEvaluateProjectCountBatchResultDTO.java
  4. 20
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/IssueVoteResultDTO.java
  5. 18
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/GovIssueOpenFeignClient.java
  6. 10
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/fallback/GovIssueOpenFeignClientFallBack.java
  7. 22
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueController.java
  8. 17
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteDetailDao.java
  9. 16
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueService.java
  10. 95
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java
  11. 26
      epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteDetailDao.xml
  12. 5
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/ProjectSatisfactionStatisticsDTO.java
  13. 5
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/ProjectEvaluateFormDTO.java
  14. 24
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/ComplementedProjectEvaluateResultDTO.java
  15. 20
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/ProjectEvaluateDetailResultDTO.java
  16. 4
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/ProjectConstant.java
  17. 11
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectSatisfactionDetailController.java
  18. 7
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/ProjectDao.java
  19. 9
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/ProjectSatisfactionDetailDao.java
  20. 29
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/ProjectSatisfactionStatisticsDao.java
  21. 13
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/entity/ProjectSatisfactionStatisticsEntity.java
  22. 26
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/redis/ProjectRedis.java
  23. 7
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectSatisfactionDetailService.java
  24. 95
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectSatisfactionDetailServiceImpl.java
  25. 21
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java
  26. 1
      epmet-module/gov-project/gov-project-server/src/main/resources/db/migration/V0.0.12__alter_shouldEvaluateCount.sql
  27. 12
      epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectDao.xml
  28. 16
      epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectSatisfactionDetailDao.xml
  29. 46
      epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectSatisfactionStatisticsDao.xml
  30. 20
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/TopicCreatedUserBatchResultDTO.java
  31. 23
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/feign/ResiGroupOpenFeignClient.java
  32. 10
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/feign/fallback/ResiGroupOpenFeignClientFallback.java
  33. 23
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/ResiTopicController.java
  34. 16
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/ResiTopicService.java
  35. 37
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java
  36. 2
      epmet-module/resi-hall/resi-hall-client/src/main/java/com/epmet/dto/form/ProjectEvaluateFormDTO.java
  37. 1
      epmet-module/resi-hall/resi-hall-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java

5
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/ProjectSatisfactionStatisticsDTO.java

@ -93,4 +93,9 @@ public class ProjectSatisfactionStatisticsDTO implements Serializable {
*/
private String customerId;
/**
* 应评价人数等于实际表决人数
*/
private Integer shouldEvaluateCount;
}

5
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/govproject/ProjectSatisfactionStatisticsEntity.java

@ -66,4 +66,9 @@ public class ProjectSatisfactionStatisticsEntity extends BaseEpmetEntity {
@TableField(fill = FieldFill.INSERT)
private String customerId;
/**
* 应评价人数等于实际表决人数
*/
private Integer shouldEvaluateCount;
}

26
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/CanEvaluateProjectCountBatchResultDTO.java

@ -0,0 +1,26 @@
package com.epmet.dto.result;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* @Author zxc
* @DateTime 2021/5/12 11:16 上午
* @DESC
*/
@Data
public class CanEvaluateProjectCountBatchResultDTO implements Serializable {
private static final long serialVersionUID = -3577868520393911786L;
private String issueId;
private List<String> userIds = new ArrayList<>();
@JsonIgnore
private String userId;
}

20
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/IssueVoteResultDTO.java

@ -0,0 +1,20 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2021/5/12 1:44 下午
* @DESC
*/
@Data
public class IssueVoteResultDTO implements Serializable {
private static final long serialVersionUID = -616467646035136184L;
private String issueId;
private String userId;
}

18
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/GovIssueOpenFeignClient.java

@ -309,4 +309,22 @@ public interface GovIssueOpenFeignClient {
**/
@PostMapping(value = "/gov/issue/issue/getissuelist")
Result<List<IssueDTO>> getIssueList(@RequestParam String customerId);
/**
* @Description 查询可评价项目人数
* @Param issueId
* @author zxc
* @date 2021/5/12 9:31 上午
*/
@PostMapping("/gov/issue/issue/canevaluateprojectcount")
Result<List<String>> canEvaluateProjectCount(@RequestParam("issueId")String issueId);
/**
* @Description 查询可评价项目人数 批量
* @Param issueIds
* @author zxc
* @date 2021/5/12 9:31 上午
*/
@PostMapping("/gov/issue/issue/canevaluateprojectcountbatch")
Result<List<CanEvaluateProjectCountBatchResultDTO>> canEvaluateProjectCountBatch(@RequestParam("issueIds")List<String> issueIds);
}

10
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/fallback/GovIssueOpenFeignClientFallBack.java

@ -261,4 +261,14 @@ public class GovIssueOpenFeignClientFallBack implements GovIssueOpenFeignClient
public Result<List<IssueDTO>> getIssueList(String customerId) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ISSUE_SERVER, "getIssueList", customerId);
}
@Override
public Result<List<String>> canEvaluateProjectCount(String issueId) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ISSUE_SERVER, "canEvaluateProjectCount", issueId);
}
@Override
public Result<List<CanEvaluateProjectCountBatchResultDTO>> canEvaluateProjectCountBatch(List<String> issueIds) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ISSUE_SERVER, "canEvaluateProjectCountBatch", issueIds);
}
}

22
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueController.java

@ -256,5 +256,27 @@ public class IssueController {
return new Result<List<IssueDTO>>().ok(issueService.getIssueList(customerId));
}
/**
* @Description 查询可评价项目人数
* @Param issueId
* @author zxc
* @date 2021/5/11 4:50 下午
*/
@PostMapping("canevaluateprojectcount")
public Result<List<String>> canEvaluateProjectCount(@RequestParam("issueId")String issueId){
return new Result<List<String>>().ok(issueService.canEvaluateProjectCount(issueId));
}
/**
* @Description 查询可评价项目人数批量
* @Param issueId
* @author zxc
* @date 2021/5/11 4:50 下午
*/
@PostMapping("canevaluateprojectcountbatch")
public Result<List<CanEvaluateProjectCountBatchResultDTO>> canEvaluateProjectCountBatch(@RequestParam("issueIds")List<String> issueIds){
return new Result<List<CanEvaluateProjectCountBatchResultDTO>>().ok(issueService.canEvaluateProjectCountBatch(issueIds));
}
}

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

@ -22,6 +22,7 @@ import com.epmet.dto.IssueVoteDetailDTO;
import com.epmet.dto.form.VoteFormDTO;
import com.epmet.dto.form.VoteRedisFormDTO;
import com.epmet.dto.result.IssueAttitudeCountResultDTO;
import com.epmet.dto.result.IssueVoteResultDTO;
import com.epmet.dto.result.MyPartIssuesResultDTO;
import com.epmet.entity.IssueVoteDetailEntity;
import org.apache.ibatis.annotations.Mapper;
@ -113,4 +114,20 @@ public interface IssueVoteDetailDao extends BaseDao<IssueVoteDetailEntity> {
* @date 2021.03.18 14:58
*/
List<VoteRedisFormDTO> selectBatchVoteCount(@Param("issueIds")Set<String> issueIds);
/**
* @Description 查询议题表决数
* @Param issueId
* @author zxc
* @date 2021/5/11 5:15 下午
*/
List<String> selectIssueVoteCount(@Param("issueId")String issueId);
/**
* @Description 查询议题表决数批量
* @Param issueIds
* @author zxc
* @date 2021/5/12 1:48 下午
*/
List<IssueVoteResultDTO> selectIssueVoteCountBatch(@Param("issueIds")List<String> issueIds);
}

16
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueService.java

@ -325,4 +325,20 @@ public interface IssueService extends BaseService<IssueEntity> {
* @date 2021/4/27 10:23 上午
*/
List<IssueDTO> getIssueList(String customerId);
/**
* @Description 查询可评价项目人数
* @Param issueId
* @author zxc
* @date 2021/5/11 4:50 下午
*/
List<String> canEvaluateProjectCount(String issueId);
/**
* @Description 查询可评价项目人数批量
* @Param issueId
* @author zxc
* @date 2021/5/11 4:50 下午
*/
List<CanEvaluateProjectCountBatchResultDTO> canEvaluateProjectCountBatch(List<String> issueIds);
}

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

@ -27,6 +27,7 @@ import com.epmet.constant.UserMessageConstant;
import com.epmet.dao.IssueDao;
import com.epmet.dao.IssueProcessDao;
import com.epmet.dao.IssueProjectRelationDao;
import com.epmet.dao.IssueVoteDetailDao;
import com.epmet.dto.*;
import com.epmet.dto.form.IssueAuditionFormDTO;
import com.epmet.dto.form.IssueShiftedFromTopicFormDTO;
@ -49,6 +50,7 @@ import com.epmet.resi.group.dto.topic.ResiTopicDTO;
import com.epmet.resi.group.dto.topic.form.GovTopicIssueInfoFormDTO;
import com.epmet.resi.group.dto.topic.form.*;
import com.epmet.resi.group.dto.topic.result.GovTopicIssueInfoResultDTO;
import com.epmet.resi.group.dto.topic.result.TopicCreatedUserBatchResultDTO;
import com.epmet.resi.group.feign.ResiGroupOpenFeignClient;
import com.epmet.send.SendMqMsgUtil;
import com.epmet.service.*;
@ -121,7 +123,8 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
private IssueTagsService issueTagsService;
@Autowired
private IssueProjectTagDictService issueProjectTagDictService;
@Autowired
private IssueVoteDetailDao issueVoteDetailDao;
@Value("${openapi.scan.server.url}")
@ -1408,4 +1411,94 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
return ConvertUtils.sourceToTarget(issueEntities,IssueDTO.class);
}
/**
* @Description 查询可评价项目人数
* @Param issueId
* @author zxc
* @date 2021/5/11 4:50 下午
*/
@Override
public List<String> canEvaluateProjectCount(String issueId) {
List<String> userIds = new ArrayList<>();
IssueEntity issueEntity = baseDao.selectById(issueId);
if(null == issueEntity){
throw new RenException("议题信息不存在");
}
// 议题创建者
userIds.add(issueEntity.getCreatedBy());
// 表决过的人
List<String> votedCount = issueVoteDetailDao.selectIssueVoteCount(issueId);
if (!CollectionUtils.isEmpty(votedCount)){
userIds.addAll(votedCount);
}
// 话题创建者
Result<String> topicCreatedUser = resiGroupOpenFeignClient.topicCreatedUser(issueEntity.getSourceId());
if (!topicCreatedUser.success()){
throw new RenException("【查询话题创建者失败】["+topicCreatedUser.getMsg()+"]");
}
userIds.add(topicCreatedUser.getData());
// 去重
return userIds.stream().distinct().collect(Collectors.toList());
}
/**
* @Description 查询可评价项目人数批量
* @Param issueId
* @author zxc
* @date 2021/5/11 4:50 下午
*/
@Override
public List<CanEvaluateProjectCountBatchResultDTO> canEvaluateProjectCountBatch(List<String> issueIds) {
// 根据议题查询
List<IssueEntity> issueEntities = baseDao.selectBatchIds(issueIds);
if (CollectionUtils.isEmpty(issueEntities)){
throw new RenException("议题信息不存在");
}
List<CanEvaluateProjectCountBatchResultDTO> result = new ArrayList<>();
issueEntities.forEach(i -> {
CanEvaluateProjectCountBatchResultDTO r = new CanEvaluateProjectCountBatchResultDTO();
r.setIssueId(i.getId());
r.setUserId(i.getCreatedBy());
result.add(r);
});
// 所有议题表决
List<IssueVoteResultDTO> issueVoteResult = issueVoteDetailDao.selectIssueVoteCountBatch(issueIds);
Map<String, List<IssueVoteResultDTO>> groupByIssue = new HashMap<>(16);
if (!CollectionUtils.isEmpty(issueVoteResult)){
// 根据议题分组
groupByIssue = issueVoteResult.stream().collect(Collectors.groupingBy(IssueVoteResultDTO::getIssueId));
}
Map<String, List<IssueVoteResultDTO>> finalGroupByIssue = groupByIssue;
boolean empty = finalGroupByIssue.isEmpty();
Result<List<TopicCreatedUserBatchResultDTO>> topicCreatedUserBatch = resiGroupOpenFeignClient.topicCreatedUserBatch(issueEntities.stream().map(m -> m.getSourceId()).collect(Collectors.toList()));
if (!topicCreatedUserBatch.success()){
throw new RenException("【查询话题创建者失败】["+topicCreatedUserBatch.getMsg()+"]");
}
List<TopicCreatedUserBatchResultDTO> topicCreatedUserBatchData = topicCreatedUserBatch.getData();
result.forEach(r -> {
List<String> userIds = new ArrayList<>();
// 议题创建者
userIds.add(r.getUserId());
if (!empty){
// 实际表决人数
finalGroupByIssue.forEach((issueId, list) -> {
if (r.getIssueId().equals(issueId)){
List<String> votePeople = list.stream().map(m -> m.getUserId()).collect(Collectors.toList());
userIds.addAll(votePeople);
}
});
}
// 话题创建者
if (!CollectionUtils.isEmpty(topicCreatedUserBatchData)){
topicCreatedUserBatchData.forEach(t -> {
if (r.getIssueId().equals(t.getIssueId())){
userIds.add(t.getUserId());
}
});
}
r.setUserIds(userIds.stream().distinct().collect(Collectors.toList()));
});
return result;
}
}

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

@ -155,4 +155,30 @@
</select>
<select id="selectIssueVoteCount" resultType="java.lang.String">
SELECT
CREATED_BY
FROM
issue_vote_detail
WHERE
DEL_FLAG = '0'
AND ISSUE_ID = #{issueId}
</select>
<!-- 查询议题表决数【批量】 -->
<select id="selectIssueVoteCountBatch" resultType="com.epmet.dto.result.IssueVoteResultDTO">
SELECT
CREATED_BY AS userId,
ISSUE_ID
FROM
issue_vote_detail
WHERE
DEL_FLAG = '0'
AND (
<foreach collection="issueIds" item="issueId" separator=" OR ">
ISSUE_ID = #{issueId}
</foreach>
)
</select>
</mapper>

5
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/ProjectSatisfactionStatisticsDTO.java

@ -93,4 +93,9 @@ public class ProjectSatisfactionStatisticsDTO implements Serializable {
*/
private String customerId;
/**
* 应评价人数等于实际表决人数
*/
private Integer shouldEvaluateCount;
}

5
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/ProjectEvaluateFormDTO.java

@ -33,5 +33,10 @@ public class ProjectEvaluateFormDTO implements Serializable {
*/
private String userId;
/**
* 客户ID
*/
private String customerId;
}

24
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/ComplementedProjectEvaluateResultDTO.java

@ -0,0 +1,24 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2021/5/12 10:24 上午
* @DESC
*/
@Data
public class ComplementedProjectEvaluateResultDTO implements Serializable {
private static final long serialVersionUID = -300492311961684245L;
private String projectId;
private String issueId;
private String customerId;
private Boolean disposeStatus = false;
}

20
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/ProjectEvaluateDetailResultDTO.java

@ -0,0 +1,20 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2021/5/12 4:34 下午
* @DESC
*/
@Data
public class ProjectEvaluateDetailResultDTO implements Serializable {
private static final long serialVersionUID = -6651646333040235330L;
private String projectId;
private String satisfaction;
}

4
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/ProjectConstant.java

@ -174,4 +174,8 @@ public interface ProjectConstant {
String NOT_EXIST_PROJECT = "未查询带此项目信息......";
String EXTERNAL_SYSTEM = "third_platform_project_send";
String EVALUATE_GOOD = "good";
String EVALUATE_BAD = "bad";
String EVALUATE_PERFECT = "perfect";
}

11
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectSatisfactionDetailController.java

@ -127,4 +127,15 @@ public class ProjectSatisfactionDetailController {
return new Result<List<ProjectEvaluationListResultDTO>>().ok(projectSatisfactionDetailService.projectEvaluationList(formDTO));
}
/**
* @Description 补全项目评价统计
* @author zxc
* @date 2021/5/12 10:04 上午
*/
@PostMapping("complementedprojectevaluate")
public Result complementedProjectEvaluate(){
projectSatisfactionDetailService.complementedProjectEvaluate();
return new Result();
}
}

7
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/ProjectDao.java

@ -147,4 +147,11 @@ public interface ProjectDao extends BaseDao<ProjectEntity> {
@Param("customerId") String customerId);
ProjectInfoDTO queryProjectInfoByProjectId(String projectId);
/**
* @Description 查询所以已关闭的项目项目来源为 'issue'
* @author zxc
* @date 2021/5/12 10:29 上午
*/
List<ComplementedProjectEvaluateResultDTO> selectAllClosedProject();
}

9
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/ProjectSatisfactionDetailDao.java

@ -20,6 +20,7 @@ package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.form.ProjectEvaluationListFormDTO;
import com.epmet.dto.form.ProjectInitEvaluationFormDTO;
import com.epmet.dto.result.ProjectEvaluateDetailResultDTO;
import com.epmet.dto.result.ProjectEvaluateInfoResultDTO;
import com.epmet.dto.result.EvaluationListResultDTO;
import com.epmet.dto.result.ProjectEvaluationListResultDTO;
@ -60,4 +61,12 @@ public interface ProjectSatisfactionDetailDao extends BaseDao<ProjectSatisfactio
*/
List<ProjectEvaluationListResultDTO> projectEvaluationList(ProjectEvaluationListFormDTO formDTO);
/**
* @Description 查询项目的评价人
* @Param projectIds
* @author zxc
* @date 2021/5/12 4:42 下午
*/
List<ProjectEvaluateDetailResultDTO> selectProjectEvaluateDetail(@Param("projectIds")List<String> projectIds);
}

29
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/ProjectSatisfactionStatisticsDao.java

@ -20,6 +20,9 @@ package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.entity.ProjectSatisfactionStatisticsEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 项目满意度调查统计表
@ -29,5 +32,29 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface ProjectSatisfactionStatisticsDao extends BaseDao<ProjectSatisfactionStatisticsEntity> {
/**
* @Description 校验此项目是否存在
* @Param projectId
* @author zxc
* @date 2021/5/10 4:35 下午
*/
Integer checkProjectExists(@Param("projectId")String projectId);
/**
* @Description 更新项目评价数据
* @Param projectId
* @Param evalType
* @author zxc
* @date 2021/5/10 4:57 下午
*/
void updateEvaluateData(@Param("projectId")String projectId,@Param("evalType")String evalType);
/**
* @Description 查询已经存在的记录
* @author zxc
* @date 2021/5/12 10:35 上午
*/
List<String> selectExistsProject();
}

13
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/entity/ProjectSatisfactionStatisticsEntity.java

@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import com.epmet.commons.tools.constant.NumConstant;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -65,4 +66,16 @@ public class ProjectSatisfactionStatisticsEntity extends BaseEpmetEntity {
*/
@TableField(fill = FieldFill.INSERT)
private String customerId;
/**
* 应评价人数等于实际表决人数
*/
private Integer shouldEvaluateCount;
public ProjectSatisfactionStatisticsEntity() {
this.goodCount = NumConstant.ZERO;
this.perfectCount = NumConstant.ZERO;
this.badCount = NumConstant.ZERO;
this.shouldEvaluateCount = NumConstant.ZERO;
}
}

26
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/redis/ProjectRedis.java

@ -17,10 +17,17 @@
package com.epmet.redis;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.dto.form.VoteRedisFormDTO;
import com.epmet.issue.constant.IssueConstant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
import static com.epmet.commons.tools.utils.ConvertUtils.mapToEntity;
/**
* 项目表
*
@ -29,6 +36,9 @@ import org.springframework.stereotype.Component;
*/
@Component
public class ProjectRedis {
private final static String issueVoteKey = "epmet:issue:";
@Autowired
private RedisUtils redisUtils;
@ -44,4 +54,20 @@ public class ProjectRedis {
return null;
}
/**
* @Description 获取议题表决详情
* @Param issueId
* @author zxc
* @date 2021/5/11 1:51 下午
*/
public VoteRedisFormDTO getIssueVoteDetail(String issueId){
String key = issueVoteKey + issueId;
Map<String, Object> stringObjectMap = redisUtils.hGetAll(key);
if (stringObjectMap.size()== NumConstant.ZERO || stringObjectMap == null){
return new VoteRedisFormDTO();
}
VoteRedisFormDTO voteRedisFormDTO = mapToEntity(stringObjectMap, VoteRedisFormDTO.class);
return voteRedisFormDTO;
}
}

7
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectSatisfactionDetailService.java

@ -129,4 +129,11 @@ public interface ProjectSatisfactionDetailService extends BaseService<ProjectSat
* @author zxc
*/
List<ProjectEvaluationListResultDTO> projectEvaluationList(@RequestBody ProjectEvaluationListFormDTO formDTO);
/**
* @Description 补全项目评价统计
* @author zxc
* @date 2021/5/12 10:04 上午
*/
void complementedProjectEvaluate();
}

95
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectSatisfactionDetailServiceImpl.java

@ -20,6 +20,7 @@ package com.epmet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.distributedlock.DistributedLock;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.constant.FieldConstant;
@ -32,21 +33,30 @@ import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.utils.ScanContentUtils;
import com.epmet.constant.ProjectConstant;
import com.epmet.dao.ProjectDao;
import com.epmet.dao.ProjectSatisfactionDetailDao;
import com.epmet.dao.ProjectSatisfactionStatisticsDao;
import com.epmet.dto.ProjectSatisfactionDetailDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.entity.ProjectEntity;
import com.epmet.entity.ProjectSatisfactionDetailEntity;
import com.epmet.entity.ProjectSatisfactionStatisticsEntity;
import com.epmet.feign.EpmetUserFeignClient;
import com.epmet.feign.GovIssueOpenFeignClient;
import com.epmet.redis.ProjectRedis;
import com.epmet.redis.ProjectSatisfactionDetailRedis;
import com.epmet.service.ProjectSatisfactionDetailService;
import com.epmet.service.ProjectSatisfactionStatisticsService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
@ -69,6 +79,18 @@ public class ProjectSatisfactionDetailServiceImpl extends BaseServiceImpl<Projec
private String scanApiUrl;
@Value("${openapi.scan.method.textSyncScan}")
private String textSyncScanMethod;
@Autowired
private DistributedLock distributedLock;
@Autowired
private ProjectSatisfactionStatisticsDao statisticsDao;
@Autowired
private ProjectDao projectDao;
@Autowired
private ProjectRedis projectRedis;
@Autowired
private GovIssueOpenFeignClient govIssueOpenFeignClient;
@Autowired
private ProjectSatisfactionStatisticsService projectSatisfactionStatisticsService;
@Override
public PageData<ProjectSatisfactionDetailDTO> page(Map<String, Object> params) {
@ -216,6 +238,8 @@ public class ProjectSatisfactionDetailServiceImpl extends BaseServiceImpl<Projec
throw new RenException(EpmetErrorCode.ALREADY_EVALUATE.getCode());
}
baseDao.insert(entity);
// 更新
statisticsDao.updateEvaluateData(formDTO.getProjectId(), formDTO.getSatisfaction());
}
/**
@ -230,4 +254,75 @@ public class ProjectSatisfactionDetailServiceImpl extends BaseServiceImpl<Projec
return baseDao.projectEvaluationList(formDTO);
}
/**
* @Description 补全项目评价统计
* @author zxc
* @date 2021/5/12 10:04 上午
*/
@Override
public void complementedProjectEvaluate() {
// 查询所有已关闭的项目【醒目来源为'issue'】
List<ComplementedProjectEvaluateResultDTO> allProjects = projectDao.selectAllClosedProject();
if (CollectionUtils.isEmpty(allProjects)){
log.warn("不存在可补全的数据");
return;
}
// 查询已存在的项目记录
List<String> existsProjects = statisticsDao.selectExistsProject();
List<ComplementedProjectEvaluateResultDTO> projects = new ArrayList<>();
if (CollectionUtils.isEmpty(existsProjects)){
projects = allProjects;
}else {
allProjects.forEach(a -> {
existsProjects.forEach(p -> {
if (a.getProjectId().equals(p)){
a.setDisposeStatus(true);
}
});
});
Map<Boolean, List<ComplementedProjectEvaluateResultDTO>> groupByStatus = allProjects.stream().collect(Collectors.groupingBy(ComplementedProjectEvaluateResultDTO::getDisposeStatus));
// 去除存在记录的项目
projects = groupByStatus.get(false);
}
List<ProjectSatisfactionStatisticsEntity> needAdd = new ArrayList<>();
if (!CollectionUtils.isEmpty(projects)){
List<String> projectIds = projects.stream().map(m -> m.getIssueId()).collect(Collectors.toList());
List<ProjectEvaluateDetailResultDTO> projectEvaluateDetailResult = baseDao.selectProjectEvaluateDetail(projectIds);
Map<String, List<ProjectEvaluateDetailResultDTO>> groupByProject = projectEvaluateDetailResult.stream().collect(Collectors.groupingBy(ProjectEvaluateDetailResultDTO::getProjectId));
boolean empty = groupByProject.isEmpty();
// 项目应评价人数 = 话题创建者 + 议题发起者 + 议题表决人 【去重】
Result<List<CanEvaluateProjectCountBatchResultDTO>> canEvaluateProjectCountBatch = govIssueOpenFeignClient.canEvaluateProjectCountBatch(projectIds);
if (!canEvaluateProjectCountBatch.success()){
throw new RenException("【查询项目应评价人数失败】,【"+canEvaluateProjectCountBatch.getMsg()+"】");
}
projects.forEach(p -> {
ProjectSatisfactionStatisticsEntity e = new ProjectSatisfactionStatisticsEntity();
e.setCustomerId(p.getCustomerId());
e.setProjectId(p.getProjectId());
if (!empty){
groupByProject.forEach((projectId,list) -> {
if (p.getProjectId().equals(projectId)){
Map<String, List<ProjectEvaluateDetailResultDTO>> groupByS = list.stream().collect(Collectors.groupingBy(ProjectEvaluateDetailResultDTO::getSatisfaction));
e.setBadCount(groupByS.get(ProjectConstant.EVALUATE_BAD).size());
e.setGoodCount(groupByS.get(ProjectConstant.EVALUATE_GOOD).size());
e.setPerfectCount(groupByS.get(ProjectConstant.EVALUATE_PERFECT).size());
}
});
}
if (!CollectionUtils.isEmpty(canEvaluateProjectCountBatch.getData())){
canEvaluateProjectCountBatch.getData().forEach(ep -> {
if (p.getIssueId().equals(ep.getIssueId())){
e.setShouldEvaluateCount(ep.getUserIds().size());
}
});
}
needAdd.add(e);
});
}
if (!CollectionUtils.isEmpty(needAdd)){
projectSatisfactionStatisticsService.insertBatch(needAdd);
}
}
}

21
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java

@ -36,6 +36,7 @@ import com.epmet.constant.SmsTemplateConstant;
import com.epmet.constant.UserMessageConstant;
import com.epmet.dao.ProjectDao;
import com.epmet.dao.ProjectOrgRelationDao;
import com.epmet.dao.ProjectSatisfactionStatisticsDao;
import com.epmet.dto.*;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
@ -132,6 +133,8 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
private ProjectTraceService projectTraceService;
@Autowired
private ResiGroupOpenFeignClient resiGroupOpenFeignClient;
@Autowired
private ProjectSatisfactionStatisticsDao statisticsDao;
private final static String ONE_DAY = "<1";
@ -712,6 +715,24 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
if (!msgResult) {
log.error("项目实时统计消息发送失败");
}
// 项目评价初始化信息插入
// 应评价数 = 话题创建者 + 议题发起者 + 议题表决人 【去重】
// 议题发起者 和 议题表决人 和 话题创建者 查询
Result<List<String>> canEvaluateProjectCount = govIssueOpenFeignClient.canEvaluateProjectCount(projectEntity.getOriginId());
if (!canEvaluateProjectCount.success()){
throw new RenException("【查询项目应评价人数失败】,【"+canEvaluateProjectCount.getMsg()+"】");
}
List<String> userIds = canEvaluateProjectCount.getData();
ProjectSatisfactionStatisticsEntity entity1 = new ProjectSatisfactionStatisticsEntity();
entity1.setShouldEvaluateCount(userIds.size());
entity1.setCustomerId(projectEntity.getCustomerId());
entity1.setProjectId(fromDTO.getProjectId());
entity1.setBadCount(NumConstant.ZERO);
entity1.setGoodCount(NumConstant.ZERO);
entity1.setPerfectCount(NumConstant.ZERO);
// 新添一条记录
statisticsDao.insert(entity1);
}
@Override

1
epmet-module/gov-project/gov-project-server/src/main/resources/db/migration/V0.0.12__alter_shouldEvaluateCount.sql

@ -0,0 +1 @@
ALTER TABLE `project_satisfaction_statistics` ADD `SHOULD_EVALUATE_COUNT` int(11) NOT NULL COMMENT '应评价人数【等于实际表决人数】';

12
epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectDao.xml

@ -269,4 +269,16 @@
where P.DEL_FLAG='0'
AND p.id=#{projectId}
</select>
<!-- 查询所以已关闭的项目【项目来源为 'issue'】 -->
<select id="selectAllClosedProject" resultType="com.epmet.dto.result.ComplementedProjectEvaluateResultDTO">
SELECT
ID AS projectId,
ORIGIN_ID AS issueId,
CUSTOMER_ID
FROM project
WHERE DEL_FLAG = '0'
AND ORIGIN = 'issue'
AND `STATUS` = 'closed'
</select>
</mapper>

16
epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectSatisfactionDetailDao.xml

@ -59,4 +59,20 @@
LIMIT #{pageNo},#{pageSize}
</select>
<!-- 查询项目的评价人 -->
<select id="selectProjectEvaluateDetail" resultType="com.epmet.dto.result.ProjectEvaluateDetailResultDTO">
SELECT
SATISFACTION AS satisfaction,
PROJECT_ID
FROM
project_satisfaction_detail
WHERE
DEL_FLAG = '0'
AND (
<foreach collection="projectIds" item="projectId" separator=" OR ">
PROJECT_ID = #{projectId}
</foreach>
)
</select>
</mapper>

46
epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectSatisfactionStatisticsDao.xml

@ -3,19 +3,39 @@
<mapper namespace="com.epmet.dao.ProjectSatisfactionStatisticsDao">
<resultMap type="com.epmet.entity.ProjectSatisfactionStatisticsEntity" id="projectSatisfactionStatisticsMap">
<result property="id" column="ID"/>
<result property="projectId" column="PROJECT_ID"/>
<result property="goodCount" column="GOOD_COUNT"/>
<result property="perfectCount" column="PERFECT_COUNT"/>
<result property="badCount" column="BAD_COUNT"/>
<result property="delFlag" column="DEL_FLAG"/>
<result property="revision" column="REVISION"/>
<result property="createdBy" column="CREATED_BY"/>
<result property="createdTime" column="CREATED_TIME"/>
<result property="updatedBy" column="UPDATED_BY"/>
<result property="updatedTime" column="UPDATED_TIME"/>
</resultMap>
<!-- 更新项目评价数据 -->
<update id="updateEvaluateData">
UPDATE project_satisfaction_statistics
SET
<if test="evalType == 'bad' ">
BAD_COUNT = BAD_COUNT + 1,
</if>
<if test="evalType == 'good' ">
GOOD_COUNT = GOOD_COUNT + 1,
</if>
<if test="evalType == 'perfect' ">
PERFECT_COUNT = PERFECT_COUNT + 1,
</if>
UPDATED_TIME = NOW()
WHERE DEL_FLAG = '0'
AND PROJECT_ID = #{projectId}
</update>
<!-- 校验此项目是否存在 -->
<select id="checkProjectExists" resultType="java.lang.Integer">
SELECT
COUNT( 1 )
FROM
project_satisfaction_statistics
WHERE
del_flag = '0'
AND PROJECT_ID = #{projectId}
</select>
<!-- 查询已经存在的记录 -->
<select id="selectExistsProject" resultType="java.lang.String">
SELECT PROJECT_ID FROM project_satisfaction_statistics WHERE DEL_FLAG = '0'
</select>
</mapper>

20
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/TopicCreatedUserBatchResultDTO.java

@ -0,0 +1,20 @@
package com.epmet.resi.group.dto.topic.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2021/5/12 2:25 下午
* @DESC
*/
@Data
public class TopicCreatedUserBatchResultDTO implements Serializable {
private static final long serialVersionUID = 3742119092028478772L;
private String issueId;
private String userId;
}

23
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/feign/ResiGroupOpenFeignClient.java

@ -14,10 +14,7 @@ import com.epmet.resi.group.feign.fallback.ResiGroupOpenFeignClientFallback;
import com.epmet.resi.mine.dto.from.MyPartProjectsFormDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
@ -253,4 +250,22 @@ public interface ResiGroupOpenFeignClient {
*/
@PostMapping("resi/group/group/groupPointDetail/{groupId}")
Result<GroupPointDetailResultDTO> groupPointDetail(@PathVariable String groupId);
/**
* @Description 查询话题的创建者
* @Param topicId
* @author zxc
* @date 2021/5/12 9:16 上午
*/
@PostMapping("/resi/group/topic/topiccreateduser")
Result<String> topicCreatedUser(@RequestParam("topicId")String topicId);
/**
* @Description 查询话题的创建者批量
* @Param topicId
* @author zxc
* @date 2021/5/12 9:16 上午
*/
@PostMapping("/resi/group/topic/topiccreateduserbatch")
Result<List<TopicCreatedUserBatchResultDTO>> topicCreatedUserBatch(@RequestParam("topicIds")List<String> topicIds);
}

10
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/feign/fallback/ResiGroupOpenFeignClientFallback.java

@ -198,4 +198,14 @@ public class ResiGroupOpenFeignClientFallback implements ResiGroupOpenFeignClien
public Result<GroupPointDetailResultDTO> groupPointDetail(String groupId) {
return ModuleUtils.feignConError(ServiceConstant.RESI_GROUP_SERVER, "groupPointDetail", groupId);
}
@Override
public Result<String> topicCreatedUser(String topicId) {
return ModuleUtils.feignConError(ServiceConstant.RESI_GROUP_SERVER, "topicCreatedUser", topicId);
}
@Override
public Result<List<TopicCreatedUserBatchResultDTO>> topicCreatedUserBatch(List<String> topicIds) {
return ModuleUtils.feignConError(ServiceConstant.RESI_GROUP_SERVER, "topicCreatedUserBatch", topicIds);
}
}

23
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/ResiTopicController.java

@ -485,4 +485,27 @@ public class ResiTopicController {
ValidatorUtils.validateEntity(formDTO, GetPastTopicListV2FormDTO.GetPastTopicListV2Form.class);
return new Result<List<AllMessagesResultDTO>>().ok(topicService.allMessages(formDTO));
}
/**
* @Description 查询话题的创建者
* @Param topicId
* @author zxc
* @date 2021/5/12 9:16 上午
*/
@PostMapping("topiccreateduser")
public Result<String> topicCreatedUser(@RequestParam("topicId")String topicId){
return new Result<String>().ok(topicService.topicCreatedUser(topicId));
}
/**
* @Description 查询话题的创建者
* @Param topicId
* @author zxc
* @date 2021/5/12 9:16 上午
*/
@PostMapping("topiccreateduserbatch")
public Result<List<TopicCreatedUserBatchResultDTO>> topicCreatedUserBatch(@RequestParam("topicIds")List<String> topicIds){
return new Result<List<TopicCreatedUserBatchResultDTO>>().ok(topicService.topicCreatedUserBatch(topicIds));
}
}

16
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/ResiTopicService.java

@ -389,4 +389,20 @@ public interface ResiTopicService extends BaseService<ResiTopicEntity> {
* @date 2021/4/28 上午10:41
*/
List<AllMessagesResultDTO> allMessages(AllMessagesFormDTO formDTO);
/**
* @Description 查询话题的创建者
* @Param topicId
* @author zxc
* @date 2021/5/12 9:16 上午
*/
String topicCreatedUser(String topicId);
/**
* @Description 查询话题的创建者批量
* @Param topicId
* @author zxc
* @date 2021/5/12 9:16 上午
*/
List<TopicCreatedUserBatchResultDTO> topicCreatedUserBatch(List<String> topicIds);
}

37
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java

@ -2746,6 +2746,43 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
return allMessages;
}
/**
* @Description 查询话题的创建者
* @Param topicId
* @author zxc
* @date 2021/5/12 9:16 上午
*/
@Override
public String topicCreatedUser(String topicId) {
ResiTopicEntity resiTopicEntity = baseDao.selectById(topicId);
if (null == resiTopicEntity){
throw new RenException("话题信息不存在");
}
return resiTopicEntity.getCreatedBy();
}
/**
* @Description 查询话题的创建者批量
* @Param topicId
* @author zxc
* @date 2021/5/12 9:16 上午
*/
@Override
public List<TopicCreatedUserBatchResultDTO> topicCreatedUserBatch(List<String> topicIds) {
if (CollectionUtils.isEmpty(topicIds)){
return new ArrayList<>();
}
List<ResiTopicEntity> resiTopicEntities = baseDao.selectBatchIds(topicIds);
List<TopicCreatedUserBatchResultDTO> result = new ArrayList<>();
resiTopicEntities.forEach(r -> {
TopicCreatedUserBatchResultDTO t = new TopicCreatedUserBatchResultDTO();
t.setIssueId(r.getIssueId());
t.setUserId(r.getCreatedBy());
result.add(t);
});
return result;
}
}

2
epmet-module/resi-hall/resi-hall-client/src/main/java/com/epmet/dto/form/ProjectEvaluateFormDTO.java

@ -33,5 +33,7 @@ public class ProjectEvaluateFormDTO implements Serializable {
*/
private String userId;
private String customerId;
}

1
epmet-module/resi-hall/resi-hall-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java

@ -271,6 +271,7 @@ public class IssueServiceImpl implements IssueService {
@Override
public Result projectEvaluate(TokenDto tokenDto, ProjectEvaluateFormDTO projectEvaluateFormDTO) {
projectEvaluateFormDTO.setUserId(tokenDto.getUserId());
projectEvaluateFormDTO.setCustomerId(tokenDto.getCustomerId());
return govProjectFeignClient.projectEvaluate(projectEvaluateFormDTO);
}

Loading…
Cancel
Save