Browse Source

Merge branches 'dev' and 'release' of http://git.elinkit.com.cn:7070/r/epmet-cloud into dev

dev_shibei_match
wxz 5 years ago
parent
commit
bb8eec80be
  1. 19
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisUtils.java
  2. 2
      epmet-module/gov-access/gov-access-server/deploy/docker-compose-test.yml
  3. 19
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/CommonGridIdListFormDTO.java
  4. 1
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/ShiftProjectFormDTO.java
  5. 19
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/GridVotableCountResultDTO.java
  6. 19
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/IssueAttitudeCountResultDTO.java
  7. 2
      epmet-module/gov-issue/gov-issue-server/deploy/docker-compose-dev.yml
  8. 2
      epmet-module/gov-issue/gov-issue-server/deploy/docker-compose-test.yml
  9. 2
      epmet-module/gov-issue/gov-issue-server/pom.xml
  10. 16
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/constant/IssueConstant.java
  11. 12
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueDao.java
  12. 2
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueProjectRelationDao.java
  13. 25
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteDetailDao.java
  14. 28
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteStatisticalDao.java
  15. 34
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/feign/ResiGroupFeignClient.java
  16. 20
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/feign/fallback/ResiGroupFeignClientFallBack.java
  17. 136
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueVoteDetailRedis.java
  18. 10
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueService.java
  19. 12
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueVoteDetailService.java
  20. 27
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueVoteStatisticalService.java
  21. 69
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java
  22. 13
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteDetailServiceImpl.java
  23. 280
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalServiceImpl.java
  24. 6
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/utils/ModuleConstants.java
  25. 21
      epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueDao.xml
  26. 3
      epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueProjectRelationDao.xml
  27. 36
      epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteDetailDao.xml
  28. 47
      epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteStatisticalDao.xml
  29. 2
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/StaffSubmitFromDTO.java
  30. 2
      epmet-module/gov-org/gov-org-server/deploy/docker-compose-dev.yml
  31. 2
      epmet-module/gov-org/gov-org-server/deploy/docker-compose-test.yml
  32. 2
      epmet-module/gov-org/gov-org-server/pom.xml
  33. 3
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerStaffDepartmentDao.xml
  34. 2
      epmet-module/gov-project/gov-project-server/deploy/docker-compose-dev.yml
  35. 2
      epmet-module/gov-project/gov-project-server/deploy/docker-compose-test.yml
  36. 2
      epmet-module/gov-project/gov-project-server/pom.xml
  37. 3
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java
  38. 2
      epmet-module/oper-access/oper-access-server/deploy/docker-compose-test.yml
  39. 2
      epmet-module/oper-crm/oper-crm-server/deploy/docker-compose-test.yml
  40. 25
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/form/CommonGridIdFormDTO.java
  41. 19
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/form/CommonGridIdListFormDTO.java
  42. 19
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/result/GridVotableCountResultDTO.java
  43. 2
      epmet-module/resi-group/resi-group-server/deploy/docker-compose-dev.yml
  44. 2
      epmet-module/resi-group/resi-group-server/deploy/docker-compose-test.yml
  45. 2
      epmet-module/resi-group/resi-group-server/pom.xml
  46. 10
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/dao/ResiGroupDao.java
  47. 10
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupService.java
  48. 27
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupServiceImpl.java
  49. 3
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupStatisticalServiceImpl.java
  50. 32
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/controller/ResiGroupMemberController.java
  51. 10
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/ResiGroupMemberService.java
  52. 30
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/ResiGroupMemberServiceImpl.java
  53. 0
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/.gitkeep
  54. 10
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/ResiTopicController.java
  55. 8
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/ResiTopicDao.java
  56. 7
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/ResiTopicService.java
  57. 24
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java
  58. 2
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/utils/ModuleConstant.java
  59. 14
      epmet-module/resi-group/resi-group-server/src/main/resources/mapper/group/ResiGroupDao.xml
  60. 12
      epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/ResiTopicDao.xml
  61. 2
      epmet-module/resi-home/resi-home-server/deploy/docker-compose-dev.yml
  62. 2
      epmet-module/resi-home/resi-home-server/deploy/docker-compose-test.yml
  63. 2
      epmet-module/resi-home/resi-home-server/pom.xml
  64. 7
      epmet-module/resi-home/resi-home-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java
  65. 2
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/constant/PartyMemberMessageConstant.java
  66. 4
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/PartyMemberConfirmServiceImpl.java
  67. 2
      epmet-user/epmet-user-server/deploy/docker-compose-dev.yml
  68. 2
      epmet-user/epmet-user-server/deploy/docker-compose-test.yml
  69. 2
      epmet-user/epmet-user-server/pom.xml
  70. 3
      epmet-user/epmet-user-server/src/main/resources/mapper/StaffRoleDao.xml

19
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisUtils.java

@ -241,4 +241,23 @@ public class RedisUtils {
Long count = entityIdCounter.decrementAndGet();
return count;
}
/**
* @Description 对hash数据某一的属性进行递增操作
* @param key
* @param field
* @param delta
* @return
* @author wangc
* @date 2020.05.21 15:42
**/
public Map<String, Object> hincrby(String key,String field,Long delta){
//hincrby
Long count = redisTemplate.opsForHash().increment(key,field,delta);
if(count == -1){
return null;
}else{
return hGetAll(key);
}
}
}

2
epmet-module/gov-access/gov-access-server/deploy/docker-compose-test.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
gov-access-server:
container_name: gov-access-server-test
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/gov-access-server:0.3.11
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/gov-access-server:0.3.12
ports:
- "8099:8099"
network_mode: host # 使用现有网络

19
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/CommonGridIdListFormDTO.java

@ -0,0 +1,19 @@
package com.epmet.dto.form;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @Description 网格IdList
* @ClassName CommonGridIdListFormDTO
* @Auth wangc
* @Date 2020-05-22 09:17
*/
@Data
public class CommonGridIdListFormDTO implements Serializable {
private static final long serialVersionUID = 3188828578545996470L;
private List<String> gridIds;
}

1
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/ShiftProjectFormDTO.java

@ -24,7 +24,6 @@ public class ShiftProjectFormDTO implements Serializable {
@Length(max=1000,message = "公开答复内容不能超过1000位")
private String publicReply;
@NotBlank(message = "内部备注不能为空")
@Length(max=1000,message = "内部备注不能超过1000位")
private String internalRemark;

19
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/GridVotableCountResultDTO.java

@ -0,0 +1,19 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
import java.util.Map;
/**
* @Description 网格的应表决数 <GridId,votableCount>
* @ClassName GridVotableCountResultDTO
* @Auth wangc
* @Date 2020-05-22 09:18
*/
@Data
public class GridVotableCountResultDTO implements Serializable {
private static final long serialVersionUID = 5621545224177991150L;
Map<String,Integer> votableCountMap;
}

19
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/IssueAttitudeCountResultDTO.java

@ -0,0 +1,19 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 议题Id和表决态度的数量
* @ClassName IssueAttitudeCountResultDTO
* @Auth wangc
* @Date 2020-05-22 01:19
*/
@Data
public class IssueAttitudeCountResultDTO implements Serializable {
private static final long serialVersionUID = 4471863386031944261L;
private String issueId;
private Integer count;
private String attitude;
}

2
epmet-module/gov-issue/gov-issue-server/deploy/docker-compose-dev.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
gov-issue-server:
container_name: gov-issue-server-dev
image: 192.168.1.130:10080/epmet-cloud-dev/gov-issue-server:0.3.19
image: 192.168.1.130:10080/epmet-cloud-dev/gov-issue-server:0.3.20
ports:
- "8101:8101"
network_mode: host # 使用现有网络

2
epmet-module/gov-issue/gov-issue-server/deploy/docker-compose-test.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
gov-issue-server:
container_name: gov-issue-server-test
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/gov-issue-server:0.3.19
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/gov-issue-server:0.3.20
ports:
- "8101:8101"
network_mode: host # 使用现有网络

2
epmet-module/gov-issue/gov-issue-server/pom.xml

@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<version>0.3.19</version>
<version>0.3.20</version>
<parent>
<artifactId>gov-issue</artifactId>
<groupId>com.epmet</groupId>

16
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/constant/IssueConstant.java

@ -66,4 +66,20 @@ public interface IssueConstant {
String REDIS_KEY = "epmet:issue:";
String SELECT_ISSUEPROJECTRELATION_EXCEPTION = "获取议题项目关系数据失败";
String SELECT_RESI_GROUP_EXCEPTION = "获取话题数据失败";
/**
* 议题表决缓存属性值 supportAmount
* */
String CACHE_ATTRIBUTE_SUPPORT_AMOUNT = "supportAmount";
/**
* 议题表决缓存属性值 oppositionAmount
* */
String CACHE_ATTRIBUTE_OPPOSITION_AMOUNT = "oppositionAmount";
/**
* 议题表决缓存属性值 shouldVoteCount
* */
String CACHE_ATTRIBUTE_SHOULD_VOTE_COUNT = "shouldVoteCount";
}

12
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueDao.java

@ -30,6 +30,7 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Set;
/**
* 议题详情 关联话题转议题时间必须要和话题转议题时间一致关闭时间必须要和操作记录表的关闭记录时间一致转项目时间必须要和项目记录生成时间一致注意服务间调用的时间一致性每个议题最后总会被关闭
@ -121,7 +122,7 @@ public interface IssueDao extends BaseDao<IssueEntity> {
* @Author sun
* @Description 查询客户网格下已结案项目对应的议题列表
**/
List<IssueEntity> selectIssueList(@Param("issueIdList") List<String> issueIdList, LatestListFormDTO latestListForm);
List<IssueEntity> selectIssueList(@Param("issueIdList") List<String> issueIdList, @Param("latestListForm") LatestListFormDTO latestListForm);
/**
* @param formDTO
@ -130,4 +131,13 @@ public interface IssueDao extends BaseDao<IssueEntity> {
* @Description 获取客户网格下最新议题列表
**/
List<IssueEntity> selectNewestIssueList(LatestIssueListFormDTO formDTO);
/**
* @Description 条件查询出符合指定条件的议题ID集合
* @param issueDTO
* @return Set<IssueDTO>
* @author wangc
* @date 2020.05.22 00:36
**/
Set<IssueDTO> selectIssueIdsByCondition(IssueDTO issueDTO);
}

2
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueProjectRelationDao.java

@ -46,7 +46,7 @@ public interface IssueProjectRelationDao extends BaseDao<IssueProjectRelationEnt
* @param projectIdList
* @return
* @Author sun
* @Description 根据项目Id批量查询关联表数据
* @Description 根据项目Id批量查询议题项目关系表数据
**/
List<IssueProjectRelationEntity> selectRelationList(@Param("projectIdList") List<String> projectIdList);

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

@ -19,9 +19,12 @@ package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.form.VoteFormDTO;
import com.epmet.dto.result.IssueAttitudeCountResultDTO;
import com.epmet.entity.IssueVoteDetailEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Set;
/**
@ -48,4 +51,26 @@ public interface IssueVoteDetailDao extends BaseDao<IssueVoteDetailEntity> {
* @date 2020.05.20 10:52
**/
Set<String> getAttitudes();
/**
* @Description 得到某个议题某个态度的表决数
* @param issueId
* @param attitude
* @return int
* @author wangc
* @date 2020.05.21 17:16
**/
int getVotingCount(@Param("issueId")String issueId,@Param("attitude")String attitude);
/**
* @Description 批量查找议题某个态度的表决数
* @param ids
* @param attitude
* @return List<IssueVoteStatisticalDTO>
* @author wangc
* @date 2020.05.22 01:14
**/
List<IssueAttitudeCountResultDTO> getVotingCountList(@Param("ids")Set<String> ids, @Param("attitude")String attitude);
List<IssueAttitudeCountResultDTO> getVotingSummaryList(@Param("ids")Set<String> ids);
}

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

@ -18,6 +18,7 @@
package com.epmet.dao;
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.result.VoteResultDTO;
@ -27,6 +28,7 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Set;
/**
* 议题表决统计表
@ -73,4 +75,30 @@ public interface IssueVoteStatisticalDao extends BaseDao<IssueVoteStatisticalEnt
* @Description 根据议题Id查询议题投票情况
**/
List<IssueVoteStatisticalEntity> selectListByissueId(@Param("issueIdList") List<String> issueIdList);
/**
* @Description 得到表决中的议题 来进行缓存与数据库的同步
* @param
* @return
* @author wangc
* @date 2020.05.21 14:45
**/
List<IssueVoteStatisticalDTO> getVotingIssuesStatisticalForSync();
/**
* @Description 通过IssueId获取
* @param issueId
* @return IssueVoteStatisticalDTO
* @author wangc
* @date 2020.05.21 16:33
**/
IssueVoteStatisticalDTO selectByIssueId(@Param("issueId")String issueId);
/**
* @Description 得到指定Id的统计数据
* @param ids
* @return List<IssueVoteStatisticalDTO>
* @author wangc
* @date 2020.05.22 00:49
**/
List<IssueVoteStatisticalDTO> selectListByIds(@Param("ids") Set<String> ids);
}

34
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/feign/ResiGroupFeignClient.java

@ -3,10 +3,11 @@ package com.epmet.feign;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.CheckTopicPublisherFormDTO;
import com.epmet.dto.form.CommonGridIdFormDTO;
import com.epmet.dto.form.CommonGridIdListFormDTO;
import com.epmet.dto.form.ShouldVoteCountFormDTO;
import com.epmet.dto.form.VoteFormDTO;
import com.epmet.dto.result.AgencyGridResultDTO;
import com.epmet.dto.result.CheckTopicPublisherResultDTO;
import com.epmet.dto.result.GridVotableCountResultDTO;
import com.epmet.dto.result.ShouldVoteCountResultDTO;
import com.epmet.feign.fallback.ResiGroupFeignClientFallBack;
import com.epmet.resi.group.dto.topic.ResiTopicDTO;
@ -17,6 +18,8 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
/**
* @Description 调用resi-group服务
* @Author sun
@ -59,4 +62,31 @@ public interface ResiGroupFeignClient {
@PostMapping("/resi/group/topic/checktopicpublisher")
Result<CheckTopicPublisherResultDTO> checkTopicPublisher(@RequestBody CheckTopicPublisherFormDTO formDTO);
/**
* @param topicIdList
* @Author sun
* @Description 批量查询话题信息
**/
@PostMapping("/resi/group/topic/gettopiclist/{topicIdList}")
Result<List<ResiTopicDTO>> getTopicList(@PathVariable("topicIdList") List<String> topicIdList);
/**
* @Description 得到一个网格下的应表数
* @param gridIdFormDTO
* @return Result<Integer>
* @author wangc
* @date 2020.05.21 15:12
**/
@PostMapping("/resi/group/member/votablecount")
Result<Integer> votableCount(@RequestBody CommonGridIdFormDTO gridIdFormDTO);
/**
* @Description 根据网格Id列表查询网格下所有加入组的组员
* @param gridList
* @return Result<GridVotableCountResultDTO>
* @author wangc
* @date 2020.05.22 10:12
**/
@PostMapping("votablecounts")
Result<GridVotableCountResultDTO> votableCounts(@RequestBody CommonGridIdListFormDTO gridList);
}

20
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/feign/fallback/ResiGroupFeignClientFallBack.java

@ -4,9 +4,12 @@ import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.ModuleUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.CheckTopicPublisherFormDTO;
import com.epmet.dto.form.CommonGridIdFormDTO;
import com.epmet.dto.form.CommonGridIdListFormDTO;
import com.epmet.dto.form.ShouldVoteCountFormDTO;
import com.epmet.dto.result.AgencyGridResultDTO;
import com.epmet.dto.result.CheckTopicPublisherResultDTO;
import com.epmet.dto.result.GridVotableCountResultDTO;
import com.epmet.dto.result.ShouldVoteCountResultDTO;
import com.epmet.feign.ResiGroupFeignClient;
import com.epmet.resi.group.dto.topic.ResiTopicDTO;
@ -14,6 +17,8 @@ import com.epmet.resi.group.dto.topic.form.GovTopicIssueInfoFormDTO;
import com.epmet.resi.group.dto.topic.result.GovTopicIssueInfoResultDTO;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @Description 调用resi-group服务
* @Author sun
@ -39,4 +44,19 @@ public class ResiGroupFeignClientFallBack implements ResiGroupFeignClient {
public Result<CheckTopicPublisherResultDTO> checkTopicPublisher(CheckTopicPublisherFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.RESI_GROUP_SERVER, "checkTopicPublisher", formDTO);
}
@Override
public Result<List<ResiTopicDTO>> getTopicList(List<String> topicIdList) {
return ModuleUtils.feignConError(ServiceConstant.RESI_GROUP_SERVER, "getTopicList", topicIdList);
}
@Override
public Result<Integer> votableCount(CommonGridIdFormDTO gridIdFormDTO) {
return ModuleUtils.feignConError(ServiceConstant.RESI_GROUP_SERVER, "votableCount", gridIdFormDTO);
}
@Override
public Result<GridVotableCountResultDTO> votableCounts(CommonGridIdListFormDTO gridList) {
return ModuleUtils.feignConError(ServiceConstant.RESI_GROUP_SERVER, "votableCounts", gridList);
}
}

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

@ -20,8 +20,20 @@ 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.Result;
import com.epmet.constant.IssueConstant;
import com.epmet.dto.IssueDTO;
import com.epmet.dto.IssueVoteStatisticalDTO;
import com.epmet.dto.form.CommonGridIdFormDTO;
import com.epmet.dto.form.VoteRedisFormDTO;
import com.epmet.entity.IssueVoteStatisticalEntity;
import com.epmet.feign.ResiGroupFeignClient;
import com.epmet.service.IssueService;
import com.epmet.service.IssueVoteDetailService;
import com.epmet.service.IssueVoteStatisticalService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -36,13 +48,29 @@ import java.util.Map;
*/
@Component
public class IssueVoteDetailRedis {
protected static final Logger logger = LoggerFactory.getLogger(IssueVoteDetailRedis.class);
@Autowired
private RedisUtils redisUtils;
@Autowired
private IssueVoteStatisticalService issueVoteStatisticalService;
@Autowired
private ResiGroupFeignClient resiGroupFeignClient;
@Autowired
private IssueService issueService;
@Autowired
private IssueVoteDetailService issueVoteDetailService;
public void delete(Object[] ids) {
}
public void set(VoteRedisFormDTO vote){
String key = IssueConstant.REDIS_KEY +vote.getIssueId();
//bean to map
@ -90,4 +118,112 @@ public class IssueVoteDetailRedis {
return t;
}
/**
* @Description 表决
* @param issueId
* @param attitude
* @return VoteRedisFormDTO
* @author wangc
* @date 2020.05.21 16:26
**/
public VoteRedisFormDTO vote(String issueId,String attitude){
Map<String, Object> objectMap = redisUtils.hincrby(
new StringBuilder(IssueConstant.REDIS_KEY).append(issueId).toString(),
StringUtils.equals(IssueConstant.SUPPORT,attitude) ? IssueConstant.CACHE_ATTRIBUTE_SUPPORT_AMOUNT
: IssueConstant.CACHE_ATTRIBUTE_OPPOSITION_AMOUNT,
NumConstant.ONE_L);
if(null != objectMap && objectMap.size() > NumConstant.ZERO){
return mapToEntity(objectMap, VoteRedisFormDTO.class);
}
//如果缓存中无相应数据,去投票详情表中计算出实时的数据放入缓存
//无需查询issue_vote_statistical中的数据,因为不是实时数据,可能不准确,有定时任务会自动同步
VoteRedisFormDTO voteCache = new VoteRedisFormDTO();
voteCache.setIssueId(issueId);
voteCache.setOppositionAmount(
StringUtils.equals(IssueConstant.SUPPORT,attitude) ?
issueVoteDetailService.getVotingCount(issueId,IssueConstant.OPPOSE) :
issueVoteDetailService.getVotingCount(issueId,IssueConstant.OPPOSE) + NumConstant.ONE
);
voteCache.setSupportAmount(
StringUtils.equals(IssueConstant.SUPPORT,attitude) ?
issueVoteDetailService.getVotingCount(issueId,IssueConstant.SUPPORT) + NumConstant.ONE :
issueVoteDetailService.getVotingCount(issueId,IssueConstant.SUPPORT)
);
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.ONE);
}
}else{
//如果没有该议题,终止所有操作
logger.warn(String.format("找不到指定Id的议题,Id:【%s】",issueId));
return null;
}
set(voteCache);
return voteCache;
}
/**
* @Description 根据issueId去缓存取表决统计数据如果没有去数据库查询并放入缓存
* @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 = new VoteRedisFormDTO();
voteCache.setSupportAmount(issueVoteDetailService.getVotingCount(issueId,IssueConstant.SUPPORT));
voteCache.setOppositionAmount(issueVoteDetailService.getVotingCount(issueId,IssueConstant.OPPOSE));
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("找不到指定Id的议题,Id:【%s】",issueId));
return null;
}
}
/**
* @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);
}
}

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

@ -24,6 +24,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @Author zxc
@ -213,4 +214,13 @@ public interface IssueService extends BaseService<IssueEntity> {
* @Description 获取客户网格下最新议题列表
**/
List<LatestIssueListResultDTO> getNewestIssueList(LatestIssueListFormDTO formDTO);
/**
* @Description 条件查询出符合指定条件的议题ID集合
* @param issueDTO
* @return Set<IssueDTO>
* @author wangc
* @date 2020.05.22 00:36
**/
Set<IssueDTO> getIssueIdsByCondition(IssueDTO issueDTO);
}

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

@ -24,6 +24,7 @@ import com.epmet.dto.form.CheckVoteFormDTO;
import com.epmet.dto.form.VoteFormDTO;
import com.epmet.dto.result.JoinVoteResultDTO;
import com.epmet.entity.IssueVoteDetailEntity;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
@ -109,4 +110,15 @@ public interface IssueVoteDetailService extends BaseService<IssueVoteDetailEntit
* @author zxc
*/
JoinVoteResultDTO joinVote(CheckVoteFormDTO checkVoteFormDTO);
/**
* @Description 得到某个议题某个态度的表决数
* @param issueId
* @param attitude
* @return
* @author wangc
* @date 2020.05.21 17:17
**/
int getVotingCount(String issueId, String attitude);
}

27
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueVoteStatisticalService.java

@ -121,4 +121,31 @@ public interface IssueVoteStatisticalService extends BaseService<IssueVoteStatis
* @author zxc
*/
List<EvaluationListResultDTO> evaluationList(EvaluationListFormDTO formDTO);
/**
* @Description 将所有表决中的投票数从缓存同步到数据库要进行数据对比若数据一致无需更新
* @param
* @return
* @author wangc
* @date 2020.05.21 09:07
**/
void syncVotingCacheToDb();
/**
* @Description 对指定的issueId的议题表决统计数缓存与Db同步
* @param issueId
* @return
* @author wangc
* @date 2020.05.21 09:09
**/
void syncVotingCacheToDbByIssueId(String issueId);
/**
* @Description 通过IssueId获取
* @param issueId
* @return IssueVoteStatisticalDTO
* @author wangc
* @date 2020.05.21 16:33
**/
IssueVoteStatisticalDTO getByIssueId(String issueId);
}

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

@ -27,10 +27,7 @@ import com.epmet.entity.IssueEntity;
import com.epmet.entity.IssueProcessEntity;
import com.epmet.entity.IssueProjectRelationEntity;
import com.epmet.entity.IssueVoteStatisticalEntity;
import com.epmet.feign.GovOrgFeignClient;
import com.epmet.feign.GovProjectFeignClient;
import com.epmet.feign.MessageFeignClient;
import com.epmet.feign.ResiGroupFeignClient;
import com.epmet.feign.*;
import com.epmet.redis.GovIssueRedis;
import com.epmet.resi.group.dto.topic.ResiTopicDTO;
import com.epmet.resi.group.dto.topic.form.GovTopicIssueInfoFormDTO;
@ -83,6 +80,8 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
private IssueProjectRelationService issueProjectRelationService;
@Autowired
private IssueVoteStatisticalDao issueVoteStatisticalDao;
@Autowired
private EpmetUserFeignClient epmetUserFeignClient;
@Override
public PageData<IssueDTO> page(Map<String, Object> params) {
@ -605,7 +604,7 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
if (null == projectIdList || projectIdList.size() < NumConstant.ONE) {
return resultList;
}
//1:根据已结案项目列表查询对应的议题列表
//1:根据已结案项目列表查询议题项目关系表数据
List<IssueProjectRelationEntity> listRelation = issueProjectRelationDao.selectRelationList(projectIdList);
if(null==listRelation||listRelation.size()<NumConstant.ONE){
throw new RenException(IssueConstant.SELECT_ISSUEPROJECTRELATION_EXCEPTION);
@ -613,7 +612,9 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
List<String> issueIdList = listRelation.stream().map(IssueProjectRelationEntity::getIssueId).collect(Collectors.toList());
//2:根据查询条件筛选出客户网格下已结案项目对应的议题详情列表
List<IssueEntity> entityList = baseDao.selectIssueList(issueIdList, formDTO.getLatestListForm());
LatestListFormDTO latestListForm = formDTO.getLatestListForm();
latestListForm.setPageNo((latestListForm.getPageNo()-NumConstant.ONE)*latestListForm.getPageSize());
List<IssueEntity> entityList = baseDao.selectIssueList(issueIdList, latestListForm);
//3:遍历封装数据
entityList.forEach(issue->{
@ -648,14 +649,68 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
if (null == entityList || entityList.size() < NumConstant.ONE) {
return returnList;
}
//2:根据议题Id查询议题投票情况
List<String> issueIdList = entityList.stream().map(IssueEntity::getId).collect(Collectors.toList());
List<IssueVoteStatisticalEntity> StatisticalList = issueVoteStatisticalDao.selectListByissueId(issueIdList);
//3:调用epmet-user服务,查询议题发起人基本信息
List<String> userIdList = entityList.stream().map(IssueEntity::getCreatedBy).collect(Collectors.toList());
UserResiInfoListFormDTO userResiInfoListFormDTO = new UserResiInfoListFormDTO();
userResiInfoListFormDTO.setUserIdList(userIdList);
Result<List<UserResiInfoResultDTO>> listResult = epmetUserFeignClient.getUserResiInfoList(userResiInfoListFormDTO);
if (!listResult.success() || null == listResult.getData()) {
throw new RenException(IssueConstant.SELECT_USERINFO_EXCEPTION);
}
List<UserResiInfoResultDTO> userInfoList = listResult.getData();
//4:调用resi-group服务,批量查询话题内容
List<String> topicIdList = entityList.stream().map(IssueEntity::getSourceId).collect(Collectors.toList());
Result<List<ResiTopicDTO>> resultTopicList = resiGroupFeignClient.getTopicList(topicIdList);
if (!resultTopicList.success() || null == resultTopicList.getData()) {
throw new RenException(IssueConstant.SELECT_RESI_GROUP_EXCEPTION);
}
List<ResiTopicDTO> topicList = resultTopicList.getData();
//5:遍历组装对象
entityList.forEach(issue -> {
LatestIssueListResultDTO resultDTO = new LatestIssueListResultDTO();
resultDTO.setIssueId(issue.getId());
resultDTO.setIssueTitle(issue.getIssueTitle());
StatisticalList.forEach(sta -> {
if (issue.getId().equals(sta.getIssueId())) {
//表达态度总人数
resultDTO.setVotedCount(sta.getSupportCount() + sta.getOppositionCount());
}
});
userInfoList.forEach(user -> {
if (issue.getCreatedBy().equals(user.getUserId())) {
//话题发起人昵称
resultDTO.setIssuePublisherName(user.getShowName());
}
});
topicList.forEach(topic -> {
if (issue.getSourceId().equals(topic.getId())) {
//话题内容
resultDTO.setTopicContent(topic.getTopicContent());
}
});
returnList.add(resultDTO);
});
return null;
return returnList;
}
/**
* @Description 条件查询出符合指定条件的议题ID集合
* @param issueDTO
* @return Set<IssueDTO>
* @author wangc
* @date 2020.05.22 00:36
**/
@Override
public Set<IssueDTO> getIssueIdsByCondition(IssueDTO issueDTO) {
return baseDao.selectIssueIdsByCondition(issueDTO);
}
}

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

@ -187,5 +187,18 @@ public class IssueVoteDetailServiceImpl extends BaseServiceImpl<IssueVoteDetailD
return resultDTO;
}
/**
* @Description 得到某个议题某个态度的表决数
* @param issueId
* @param attitude
* @return
* @author wangc
* @date 2020.05.21 17:17
**/
@Override
public int getVotingCount(String issueId, String attitude) {
return baseDao.getVotingCount(issueId,attitude);
}
}

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

@ -26,25 +26,24 @@ import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.IssueConstant;
import com.epmet.dao.IssueDao;
import com.epmet.dao.IssueSatisfactionDetailDao;
import com.epmet.dao.IssueVoteDetailDao;
import com.epmet.dao.IssueVoteStatisticalDao;
import com.epmet.dto.IssueDTO;
import com.epmet.dto.IssueVoteStatisticalDTO;
import com.epmet.dto.PolyLineDTO;
import com.epmet.dto.form.EvaluationListFormDTO;
import com.epmet.dto.form.IssueIdFormDTO;
import com.epmet.dto.form.UserResiInfoListFormDTO;
import com.epmet.dto.form.VoteRedisFormDTO;
import com.epmet.dto.result.EvaluationListResultDTO;
import com.epmet.dto.result.UserResiInfoResultDTO;
import com.epmet.dto.result.VoteResultDTO;
import com.epmet.dto.result.VotingTrendResultDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.entity.IssueVoteStatisticalEntity;
import com.epmet.feign.EpmetUserFeignClient;
import com.epmet.feign.ResiGroupFeignClient;
import com.epmet.redis.IssueVoteDetailRedis;
import com.epmet.redis.IssueVoteStatisticalRedis;
import com.epmet.service.IssueVoteStatisticalService;
import com.epmet.utils.ModuleConstants;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -54,11 +53,9 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 议题表决统计表
@ -81,6 +78,10 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl<IssueVoteSt
private IssueVoteDetailRedis issueVoteDetailRedis;
@Autowired
private IssueDao issueDao;
@Autowired
private IssueVoteDetailDao issueVoteDetailDao;
@Autowired
private ResiGroupFeignClient resiGroupFeignClient;
@Override
public PageData<IssueVoteStatisticalDTO> page(Map<String, Object> params) {
@ -98,8 +99,8 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl<IssueVoteSt
return ConvertUtils.sourceToTarget(entityList, IssueVoteStatisticalDTO.class);
}
private QueryWrapper<IssueVoteStatisticalEntity> getWrapper(Map<String, Object> params){
String id = (String)params.get(FieldConstant.ID_HUMP);
private QueryWrapper<IssueVoteStatisticalEntity> getWrapper(Map<String, Object> params) {
String id = (String) params.get(FieldConstant.ID_HUMP);
QueryWrapper<IssueVoteStatisticalEntity> wrapper = new QueryWrapper<>();
wrapper.eq(StringUtils.isNotBlank(id), FieldConstant.ID, id);
@ -135,19 +136,19 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl<IssueVoteSt
}
/**
* @Description 表决中议题详情支持反对数
* @param issueId
* @Description 表决中议题详情支持反对数
* @author zxc
*/
@Override
public VoteResultDTO voteCount(TokenDto tokenDto,IssueIdFormDTO issueId) {
public VoteResultDTO voteCount(TokenDto tokenDto, IssueIdFormDTO issueId) {
VoteResultDTO voteResultDTO = issueVoteStatisticalDao.voteCount(issueId);
//校验是否已经投票
String voteStatus = issueVoteStatisticalDao.checkVote(issueId.getIssueId(), tokenDto.getUserId());
if (voteResultDTO!=null){
if (StringUtils.isBlank(voteStatus)){
if (voteResultDTO != null) {
if (StringUtils.isBlank(voteStatus)) {
voteResultDTO.setVoteFlag(false);
}else {
} else {
voteResultDTO.setVoteFlag(true);
VoteRedisFormDTO redisData = issueVoteDetailRedis.get(issueId.getIssueId());
voteResultDTO.setVoteType(voteStatus);
@ -160,25 +161,25 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl<IssueVoteSt
/**
* @Description 议题表决折线图
* @param issueId
* @Description 议题表决折线图
* @author zxc
*/
@Override
public VotingTrendResultDTO votingTrend(IssueIdFormDTO issueId) {
VoteRedisFormDTO voteRedisFormDTO = issueVoteDetailRedis.get(issueId.getIssueId());
VotingTrendResultDTO votingTrendResultDTO = new VotingTrendResultDTO();
BeanUtils.copyProperties(voteRedisFormDTO,votingTrendResultDTO);
votingTrendResultDTO.setRealityVoteCount(voteRedisFormDTO.getSupportAmount()+voteRedisFormDTO.getOppositionAmount());
BeanUtils.copyProperties(voteRedisFormDTO, votingTrendResultDTO);
votingTrendResultDTO.setRealityVoteCount(voteRedisFormDTO.getSupportAmount() + voteRedisFormDTO.getOppositionAmount());
List<PolyLineDTO> polyLineDTOS = issueVoteStatisticalDao.polyLineData(issueId);
PolyLineDTO polyLineDTO = new PolyLineDTO();
polyLineDTO.setVoteDate(LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")));
//今天刚转项目或刚刚关闭,当天数据DB没有,直接从缓存拿
if (polyLineDTOS.size()==NumConstant.ZERO){
if (polyLineDTOS.size() == NumConstant.ZERO) {
polyLineDTO.setSupportIncrement(voteRedisFormDTO.getSupportAmount());
polyLineDTO.setOppositionIncrement(voteRedisFormDTO.getOppositionAmount());
polyLineDTOS.add(polyLineDTO);
}else {
} else {
//折线数据=DB
String date = issueDao.operateTime(issueId.getIssueId());
if (date.equals(LocalDate.now().toString())) {
@ -198,8 +199,8 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl<IssueVoteSt
}
/**
* @Description 满意度评价列表已关闭
* @param formDTO
* @Description 满意度评价列表已关闭
* @author zxc
*/
@Override
@ -207,7 +208,7 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl<IssueVoteSt
int pageIndex = (formDTO.getPageNo() - NumConstant.ONE) * formDTO.getPageSize();
formDTO.setPageNo(pageIndex);
List<EvaluationListResultDTO> data = issueSatisfactionDetailDao.evaluationList(formDTO);
if (data.size()==NumConstant.ZERO||data==null){
if (data.size() == NumConstant.ZERO || data == null) {
return new ArrayList<>();
}
//获取头像和昵称 eg:山东路168号-周先生
@ -228,4 +229,231 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl<IssueVoteSt
return resultList;
}
/**
* @param
* @return
* @Description 将所有表决中的投票数从缓存同步到数据库要进行数据对比若数据一致无需更新
* @author wangc
* @date 2020.05.21 09:07
**/
@Override
public void syncVotingCacheToDb() {
IssueDTO issueParam = new IssueDTO();
issueParam.setIssueStatus(ModuleConstants.ISSUE_STATUS_VOTING);
//获取所有voting的议题
Set<IssueDTO> issues =
issueDao.selectIssueIdsByCondition(issueParam);
if(null == issues || issues.size()< NumConstant.ONE){
return;
}
Set<String> ids = issues.stream().map(IssueDTO::getId).collect(Collectors.toSet());
List<String> gridIds = issues.stream().map(IssueDTO::getGridId).collect(Collectors.toList());
CommonGridIdListFormDTO gridIdList = new CommonGridIdListFormDTO();
gridIdList.setGridIds(gridIds);
Result<GridVotableCountResultDTO> votableCountResult = resiGroupFeignClient.votableCounts(gridIdList);
Map<String,Integer> votableCountMap = null;
if(votableCountResult.success() && null != votableCountResult.getData() && null != votableCountResult.getData().getVotableCountMap()){
votableCountMap = votableCountResult.getData().getVotableCountMap();
}
List<IssueVoteStatisticalDTO> statisticalList =
baseDao.selectListByIds(ids);
if (null != statisticalList && statisticalList.size() > NumConstant.ZERO) {
List<String> statisiticalIds = statisticalList.stream().map(vote -> vote.getIssueId()).collect(Collectors.toList());
if (ids.size() > statisiticalIds.size()) {
//差集
Set<String> notExistedIds = new HashSet<String>();
notExistedIds.addAll(ids);
notExistedIds.removeAll(statisiticalIds);
Set<String> existedIds = new HashSet<>();
existedIds.addAll(ids);
existedIds.retainAll(statisiticalIds);
//更新
//对ids进行更新 - 从缓存中拿取
List<IssueVoteStatisticalDTO> 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) {
//新增
List<IssueVoteStatisticalDTO> toInsert = new ArrayList<>();
List<IssueAttitudeCountResultDTO> summaryList = issueVoteDetailDao.getVotingSummaryList(ids);
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.setIssueId(entry.getKey());
List<IssueAttitudeCountResultDTO> v = entry.getValue();
if (v.size() > NumConstant.ONE) {
v.forEach(dto -> {
if (StringUtils.equals(ModuleConstants.ISSUE_VOTING_ATTITUDE_SUPPORT, dto.getAttitude())) {
obj.setSupportCount(dto.getCount());
} else {
obj.setOppositionCount(dto.getCount());
}
});
} else {
if (StringUtils.equals(ModuleConstants.ISSUE_VOTING_ATTITUDE_SUPPORT, v.get(0).getAttitude())) {
obj.setSupportCount(v.get(0).getCount());
obj.setOppositionCount(NumConstant.ZERO);
} else {
obj.setOppositionCount(v.get(0).getCount());
obj.setSupportCount(NumConstant.ZERO);
}
}
toInsert.add(obj);
}
Set<String> setToInsert = toInsert.stream().map(IssueVoteStatisticalDTO::getIssueId).collect(Collectors.toSet());
Set<String> issuesNeverVotedIds = new HashSet<String>();
issuesNeverVotedIds.addAll(ids);
issuesNeverVotedIds.removeAll(setToInsert);
List<IssueVoteStatisticalDTO> summary = toInsert;
if (issuesNeverVotedIds.size() > NumConstant.ZERO) {
List<IssueVoteStatisticalDTO> toInsert2 = new ArrayList<>();
toInsert2 = issuesNeverVotedIds.stream().map(id -> {
IssueVoteStatisticalDTO dto = new IssueVoteStatisticalDTO();
dto.setOppositionCount(NumConstant.ZERO);
dto.setSupportCount(NumConstant.ZERO);
return dto;
}).collect(Collectors.toList());
summary = Stream.of(toInsert, toInsert2)
.flatMap(Collection::stream)
.distinct()
.collect(Collectors.toList());
}
//批量查找summary的votableCount
Map<String,List<IssueDTO>> gridIssueMap =
issues.stream().collect(Collectors.groupingBy(IssueDTO::getGridId));
for(IssueVoteStatisticalDTO vote : summary){
for(Map.Entry<String,List<IssueDTO>> entry : gridIssueMap.entrySet()){
String k = entry.getKey();
List<IssueDTO> 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<String,List<IssueDTO>> entry : gridIssueMap.entrySet()){
String k = entry.getKey();
List<IssueDTO> v = entry.getValue();
}
//TODO 批量插入
}
}
else if (ids.size() < statisiticalIds.size()) {
//统计数大于议题数,数据出错
//找出多余数据,删除
//差集
Set<String> redundantIds = new HashSet<String>();
redundantIds.addAll(statisiticalIds);
redundantIds.removeAll(ids);
//将redundantIds的议题统计信息删除
//因为statisiticalIds是通过ids查询出,因此不会出现这种情况
} else {
//数据吻合,全部更新
List<IssueVoteStatisticalDTO> listToUpdate = new ArrayList<>();
Map<String,List<IssueDTO>> gridIssueMap =
issues.stream().collect(Collectors.groupingBy(IssueDTO::getGridId));
setVotableCountsAndUpdateCache(listToUpdate,issues,votableCountMap);
//TODO listToUpdate批量更新
}
}else{
//ids中的议题没有任何统计信息 - 全部添加
//TODO 根据ids去缓存中取值
}
}
/**
* @Description 对指定的issueId的议题表决统计数缓存与Db同步
* @param issueId
* @return
* @author wangc
* @date 2020.05.21 09:09
**/
@Override
public void syncVotingCacheToDbByIssueId(String issueId) {
}
/**
* @Description 通过IssueId获取
* @param issueId
* @return IssueVoteStatisticalDTO
* @author wangc
* @date 2020.05.21 16:33
**/
@Override
public IssueVoteStatisticalDTO getByIssueId(String issueId) {
return baseDao.selectByIssueId(issueId);
}
/**
* @Description 遍历应表决数
* @param list - List<IssueVoteStatisticalDTO> | Set<IssueDTO> | Map<String,Integer>
* @return
* @author wangc
* @date 2020.05.22 11:55
**/
private void setVotableCountsAndUpdateCache(List<IssueVoteStatisticalDTO> list,
Set<IssueDTO> issues,
Map<String,Integer> votableCountMap){
Map<String,List<IssueDTO>> gridIssueMap =
issues.stream().collect(Collectors.groupingBy(IssueDTO::getGridId));
for(Map.Entry<String,List<IssueDTO>> entry : gridIssueMap.entrySet()){
String k = entry.getKey();
List<IssueDTO> 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());
}
}
}
}
}

6
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";
}

21
epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueDao.xml

@ -329,17 +329,18 @@
*
FROM issue
WHERE del_flag = '0'
AND customer_id = #{customerId}
AND grid_id = #{gridId}
AND customer_id = #{latestListForm.customerId}
AND grid_id = #{latestListForm.gridId}
<foreach item="issueId" collection="issueIdList" separator="OR" open="AND (" close=")" index="">
id = #{issueId}
</foreach>
ORDER BY field(
id,
id,
<foreach item="issueId" collection="issueIdList" separator=",">
#{issueId}
</foreach>
LIMIT #{pageNo}, #{pageSize}
)
LIMIT #{latestListForm.pageNo}, #{latestListForm.pageSize}
</select>
<select id="selectNewestIssueList" resultType="com.epmet.entity.IssueEntity">
@ -352,5 +353,17 @@
ORDER BY created_time DESC
LIMIT #{pageSize}
</select>
<!-- 条件查询出符合指定条件的议题ID集合 -->
<select id="selectIssueIdsByCondition" parameterType="com.epmet.dto.IssueDTO" resultType="com.epmet.dto.IssueDTO">
SELECT
ID,
GRID_ID
FROM
ISSUE
WHERE
DEL_FLAG = '0'
AND
ISSUE_STATUS = #{issueStatus}
</select>
</mapper>

3
epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueProjectRelationDao.xml

@ -39,10 +39,11 @@
project_id = #{projectId}
</foreach>
ORDER BY field(
project_id,
project_id,
<foreach item="projectId" collection="projectIdList" separator=",">
#{projectId}
</foreach>
)
</select>
</mapper>

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

@ -35,4 +35,40 @@
FROM
ISSUE_VOTE_DETAIL
</select>
<!-- 得到某个议题某个态度的表决数 -->
<select id="getVotingCount" resultType="int">
SELECT COUNT(ATTITUDE) AS count
FROM ISSUE_VOTE_DETAIL
WHERE
DEL_FLAG = '0'
AND ISSUE_ID = #{issueId}
AND ATTITUDE = #{attitude}
</select>
<!-- 批量查找议题某个态度的表决数 -->
<select id="getVotingCountList" resultType="com.epmet.dto.result.IssueAttitudeCountResultDTO">
SELECT ISSUE_ID,COUNT(ATTITUDE) AS count
FROM ISSUE_VOTE_DETAIL
WHERE
DEL_FLAG = '0'
AND ATTITUDE = #{attitude}
<foreach collection="issueId" item="ids" open="AND (" separator="OR" close=")">
ISSUE_ID = #{issueId}
</foreach>
</select>
<select id="getVotingSummaryList" resultType="com.epmet.dto.result.IssueAttitudeCountResultDTO">
SELECT
issue_id,
attitude,
count( attitude ) as count
FROM
ISSUE_VOTE_DETAIL
WHERE
del_flag = '0'
GROUP BY
issue_id,
attitude
</select>
</mapper>

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

@ -73,11 +73,56 @@
SELECT
*
FROM
issue_vote_statistical_daily
issue_vote_statistical
WHERE del_flag = '0'
<foreach item="issueId" collection="issueIdList" separator="OR" open="AND (" close=")" index="">
issue_id = #{issueId}
</foreach>
</select>
<!-- 得到表决中的议题 来进行缓存与数据库的同步 -->
<select id="getVotingIssuesStatisticalForSync" resultType="com.epmet.dto.IssueVoteStatisticalDTO" >
SELECT
vote.ID,
issue.ID AS issueId,
vote.SUPPORT_COUNT,
vote.OPPOSITION_COUNT,
vote.VOTABLE_COUNT
FROM
ISSUE issue
LEFT JOIN ISSUE_VOTE_STATISTICAL vote ON issue.ID = vote.ISSUE_ID
AND vote.DEL_FLAG = '0'
WHERE
issue.DEL_FLAG = '0'
AND issue.ISSUE_STATUS = 'voting'
</select>
<!-- 通过IssueId获取 -->
<select id="selectByIssueId" resultType="com.epmet.dto.IssueVoteStatisticalDTO">
SELECT
*
FROM
ISSUE_VOTE_STATISTICAL
WHERE
DEL_FLAG = '0'
AND
ISSUE_ID = #{issueId}
</select>
<!-- 得到指定Id的统计数据 -->
<select id="selectListByIds" resultType="com.epmet.dto.IssueVoteStatisticalDTO">
SELECT
ID,
ISSUE_ID,
SUPPORT_COUNT,
OPPOSITION_COUNT,
VOTABLE_COUNT
FROM
ISSUE_VOTE_STATISTICAL
WHERE
DEL_FLAG = '0'
<foreach item="issueId" collection="ids" open="AND (" separator="or" close=")" index="">
ISSUE_ID = #{issueId}
</foreach>
</select>
</mapper>

2
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/StaffSubmitFromDTO.java

@ -35,7 +35,7 @@ public class StaffSubmitFromDTO implements Serializable {
* 姓名
*/
@NotBlank(message = "姓名不能为空")
@Length(max = 5, message = "姓名不能超过5个字符")
@Length(max = 15, message = "姓名仅允许输入15个字符")
private String name;
/**
* 手机

2
epmet-module/gov-org/gov-org-server/deploy/docker-compose-dev.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
gov-org-server:
container_name: gov-org-server-dev
image: 192.168.1.130:10080/epmet-cloud-dev/gov-org-server:0.3.48
image: 192.168.1.130:10080/epmet-cloud-dev/gov-org-server:0.3.49
ports:
- "8092:8092"
network_mode: host # 使用现有网络

2
epmet-module/gov-org/gov-org-server/deploy/docker-compose-test.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
gov-org-server:
container_name: gov-org-server-test
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/gov-org-server:0.3.47
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/gov-org-server:0.3.49
ports:
- "8092:8092"
network_mode: host # 使用现有网络

2
epmet-module/gov-org/gov-org-server/pom.xml

@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>0.3.48</version>
<version>0.3.49</version>
<parent>
<groupId>com.epmet</groupId>
<artifactId>gov-org</artifactId>

3
epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerStaffDepartmentDao.xml

@ -22,8 +22,7 @@
customer_staff_department
WHERE
del_flag = '0'
AND
<foreach item="departmentId" collection="deptIdList" open="(" separator="or" close=")">
<foreach item="departmentId" collection="deptIdList" open="AND (" separator="or" close=")">
department_id = #{departmentId}
</foreach>
</select>

2
epmet-module/gov-project/gov-project-server/deploy/docker-compose-dev.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
gov-project-server:
container_name: gov-project-server-dev
image: 192.168.1.130:10080/epmet-cloud-dev/gov-project-server:0.3.14
image: 192.168.1.130:10080/epmet-cloud-dev/gov-project-server:0.3.15
ports:
- "8102:8102"
network_mode: host # 使用现有网络

2
epmet-module/gov-project/gov-project-server/deploy/docker-compose-test.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
gov-project-server:
container_name: gov-project-server-test
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/gov-project-server:0.3.14
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/gov-project-server:0.3.15
ports:
- "8102:8102"
network_mode: host # 使用现有网络

2
epmet-module/gov-project/gov-project-server/pom.xml

@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<version>0.3.14</version>
<version>0.3.15</version>
<parent>
<artifactId>gov-project</artifactId>
<groupId>com.epmet</groupId>

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

@ -594,7 +594,8 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
resultList = listProject.stream().flatMap(project ->
staffList.stream().filter(staff ->
project.getCloseUserId().equals(staff.getStaffId())).map(latest -> {
LatestListResultDTO resultDTO = ConvertUtils.sourceToTarget(latest, LatestListResultDTO.class);
LatestListResultDTO resultDTO = ConvertUtils.sourceToTarget(project, LatestListResultDTO.class);
resultDTO.setCloseUserName(latest.getStaffName());
return resultDTO;
})).collect(Collectors.toList());

2
epmet-module/oper-access/oper-access-server/deploy/docker-compose-test.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
oper-access-server:
container_name: oper-access-server-test
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/oper-access-server:0.3.8
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/oper-access-server:0.3.9
ports:
- "8093:8093"
network_mode: host # 使用现有网络

2
epmet-module/oper-crm/oper-crm-server/deploy/docker-compose-test.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
oper-crm-server:
container_name: oper-crm-server-test
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/oper-crm-server:0.3.10
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/oper-crm-server:0.3.11
ports:
- "8090:8090"
network_mode: host # 使用现有网络

25
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/form/CommonGridIdFormDTO.java

@ -0,0 +1,25 @@
package com.epmet.resi.group.dto.member.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Description
* @ClassName CommonGridIdFormDTO
* @Author wangc
* @date 2020.04.24 14:17
*/
@Data
public class CommonGridIdFormDTO implements Serializable {
private static final long serialVersionUID = 2496019865436084805L;
/**
* 网格Id
* */
@NotBlank(message = "网格Id不能为空")
private String gridId;
}

19
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/form/CommonGridIdListFormDTO.java

@ -0,0 +1,19 @@
package com.epmet.resi.group.dto.member.form;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @Description 网格IdList
* @ClassName CommonGridIdListFormDTO
* @Auth wangc
* @Date 2020-05-22 09:17
*/
@Data
public class CommonGridIdListFormDTO implements Serializable {
private static final long serialVersionUID = 3188828578545996470L;
private List<String> gridIds;
}

19
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/result/GridVotableCountResultDTO.java

@ -0,0 +1,19 @@
package com.epmet.resi.group.dto.member.result;
import lombok.Data;
import java.io.Serializable;
import java.util.Map;
/**
* @Description 网格的应表决数 <GridId,votableCount>
* @ClassName GridVotableCountResultDTO
* @Auth wangc
* @Date 2020-05-22 09:18
*/
@Data
public class GridVotableCountResultDTO implements Serializable {
private static final long serialVersionUID = 5621545224177991150L;
Map<String,Integer> votableCountMap;
}

2
epmet-module/resi-group/resi-group-server/deploy/docker-compose-dev.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
resi-group-server:
container_name: resi-group-server-dev
image: 192.168.1.130:10080/epmet-cloud-dev/resi-group-server:0.3.27
image: 192.168.1.130:10080/epmet-cloud-dev/resi-group-server:0.3.29
ports:
- "8095:8095"
network_mode: host # 使用现有网络

2
epmet-module/resi-group/resi-group-server/deploy/docker-compose-test.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
resi-group-server:
container_name: resi-group-server-test
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/resi-group-server:0.3.27
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/resi-group-server:0.3.29
ports:
- "8095:8095"
network_mode: host # 使用现有网络

2
epmet-module/resi-group/resi-group-server/pom.xml

@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>0.3.27</version>
<version>0.3.29</version>
<parent>
<groupId>com.epmet</groupId>
<artifactId>resi-group</artifactId>

10
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/dao/ResiGroupDao.java

@ -19,6 +19,7 @@ package com.epmet.modules.group.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.modules.group.entity.ResiGroupEntity;
import com.epmet.resi.group.dto.group.ResiGroupDTO;
import com.epmet.resi.group.dto.group.form.*;
import com.epmet.resi.group.dto.group.result.*;
import com.epmet.resi.group.dto.member.ResiGroupMemberDTO;
@ -171,4 +172,13 @@ public interface ResiGroupDao extends BaseDao<ResiGroupEntity> {
* @return java.util.List<com.epmet.resi.group.dto.group.result.RecommendedListResultDTO>
*/
List<RecommendedListResultDTO> selectListRecommendList(RecommendedListFormDTO formDTO);
/**
* @Description 根据网格IdList查询小组信息
* @param gridIds
* @return List<ResiGroupDTO>
* @author wangc
* @date 2020.05.22 09:54
**/
List<ResiGroupDTO> selectGroupListByGridIds(@Param("gridIds") List<String> gridIds);
}

10
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupService.java

@ -30,6 +30,7 @@ import com.epmet.resi.group.dto.group.result.*;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* 群组信息表
@ -261,6 +262,15 @@ public interface ResiGroupService extends BaseService<ResiGroupEntity> {
**/
List<String> getGroupIdByGridId(String gridId);
/**
* @Description 返回 Map<gridId,List<ResiGroupDTO>>
* @param gridIdList
* @return Map<String,List<ResiGroupDTO>>
* @author wangc
* @date 2020.05.22 09:27
**/
Map<String, Set<String>> getGroupIdsByGridIdList(List<String> gridIdList);
/**
* @Description 校验用户是否加入小组
* @param gridId

27
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupServiceImpl.java

@ -72,6 +72,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
* 群组信息表
@ -508,7 +509,7 @@ public class ResiGroupServiceImpl extends BaseServiceImpl<ResiGroupDao, ResiGrou
ResiGroupMemberInfoRedisDTO memberRedis = new ResiGroupMemberInfoRedisDTO();
memberRedis.setUserId(resiGroupMemberDTO.getCustomerUserId());
memberRedis.setGroupLeaderFlag("leader");
memberRedis.setGroupLeaderFlag(ModuleConstant.GROUP_LEADER);
memberRedis.setEnterGroupType(resiGroupMemberDTO.getEnterGroupType());
memberRedis.setMemberStatus(resiGroupMemberDTO.getStatus());
memberRedis.setGroupId(resiGroupMemberDTO.getResiGroupId());
@ -816,6 +817,30 @@ public class ResiGroupServiceImpl extends BaseServiceImpl<ResiGroupDao, ResiGrou
return baseDao.getGroupIdByGridId(gridId);
}
/**
* @Description 返回 Map<gridId,List<ResiGroupDTO>>
* @param gridIdList
* @return Map<String,List<ResiGroupDTO>>
* @author wangc
* @date 2020.05.22 09:27
**/
@Override
public Map<String, Set<String>> getGroupIdsByGridIdList(List<String> gridIdList) {
if(null == gridIdList || gridIdList.size() < NumConstant.ONE)
return null;
Map<String, Set<String>> result = new HashMap<>();
List<ResiGroupDTO> groups = new ArrayList<>();
Map<String,List<ResiGroupDTO>> groupMap
= groups.stream().collect(Collectors.groupingBy(ResiGroupDTO::getGridId));
groupMap.forEach((k,v)->{
Set<String> groupIds =
v.stream().map(ResiGroupDTO::getId).collect(Collectors.toSet());
result.put(k,groupIds);
});
return result;
}
/**
* @Description 校验用户是否加入小组
* @param gridId

3
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupStatisticalServiceImpl.java

@ -86,7 +86,8 @@ public class ResiGroupStatisticalServiceImpl extends BaseServiceImpl<ResiGroupSt
QueryWrapper<ResiGroupStatisticalEntity> wrapper = new QueryWrapper<>();
wrapper.eq(StringUtils.isNotBlank(id), FieldConstant.ID, id);
wrapper.eq(StringUtils.isNotBlank((String)params.get(ModuleConstant.RESI_GROUP_ID_CAMEL)),ModuleConstant.RESI_GROUP_ID,params.get(ModuleConstant.RESI_GROUP_ID_CAMEL));
wrapper.eq(StringUtils.isNotBlank((String)params.get(FieldConstant.DEL_FLAG_HUMP)),FieldConstant.DEL_FLAG,params.get(FieldConstant.DEL_FLAG_HUMP));
return wrapper;
}

32
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/controller/ResiGroupMemberController.java

@ -24,12 +24,11 @@ import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.modules.member.service.ResiGroupMemberService;
import com.epmet.resi.group.dto.member.form.*;
import com.epmet.resi.group.dto.member.result.ApplyingMemberResultDTO;
import com.epmet.resi.group.dto.member.result.GridVotableCountResultDTO;
import com.epmet.resi.group.dto.member.result.GroupMemberListResultDTO;
import oracle.jdbc.proxy.annotation.Post;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@ -160,4 +159,29 @@ public class ResiGroupMemberController {
return resiGroupMemberService.slientMember(slientMemberFormDTO);
}
/**
* @Description 得到一个网格下的应表决数
* @param gridIdFormDTO
* @return Result<Integer>
* @author wangc
* @date 2020.05.21 15:03
**/
@PostMapping(value = "votablecount")
public Result<Integer> votableCount(@RequestBody CommonGridIdFormDTO gridIdFormDTO){
ValidatorUtils.validateEntity(gridIdFormDTO);
return new Result<Integer>().ok(resiGroupMemberService.gridResiCount(gridIdFormDTO.getGridId()));
}
/**
* @Description 根据网格Id列表查询网格下所有加入组的组员
* @param gridList
* @return Result<GridVotableCountResultDTO>
* @author wangc
* @date 2020.05.22 10:12
**/
@PostMapping("votablecounts")
public Result<GridVotableCountResultDTO> votableCounts(@RequestBody CommonGridIdListFormDTO gridList){
return new Result<GridVotableCountResultDTO>().ok(resiGroupMemberService.votableCount(gridList));
}
}

10
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/ResiGroupMemberService.java

@ -24,6 +24,7 @@ import com.epmet.modules.member.entity.ResiGroupMemberEntity;
import com.epmet.resi.group.dto.member.ResiGroupMemberDTO;
import com.epmet.resi.group.dto.member.form.*;
import com.epmet.resi.group.dto.member.result.ApplyingMemberResultDTO;
import com.epmet.resi.group.dto.member.result.GridVotableCountResultDTO;
import com.epmet.resi.group.dto.member.result.GroupMemberListResultDTO;
import java.util.List;
@ -185,4 +186,13 @@ public interface ResiGroupMemberService extends BaseService<ResiGroupMemberEntit
* @date 2020.05.14 10:48
**/
Integer gridResiCount(String gridId);
/**
* @Description 根据网格Id查询网格下所有加入组的组员
* @param gridList
* @return GridVotableCountResultDTO
* @author wangc
* @date 2020.05.22 09:23
**/
GridVotableCountResultDTO votableCount(CommonGridIdListFormDTO gridList);
}

30
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/ResiGroupMemberServiceImpl.java

@ -63,6 +63,7 @@ import com.epmet.resi.group.dto.member.ResiGroupMemberDTO;
import com.epmet.resi.group.dto.member.ResiGroupMemberInfoRedisDTO;
import com.epmet.resi.group.dto.member.form.*;
import com.epmet.resi.group.dto.member.result.ApplyingMemberResultDTO;
import com.epmet.resi.group.dto.member.result.GridVotableCountResultDTO;
import com.epmet.resi.group.dto.member.result.GroupMemberListResultDTO;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@ -582,6 +583,35 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl<ResiGroupMemberD
return NumConstant.ZERO;
}
/**
* @Description 根据网格Id查询网格下所有加入组的组员
* @param gridList
* @return GridVotableCountResultDTO
* @author wangc
* @date 2020.05.22 09:23
**/
@Override
public GridVotableCountResultDTO votableCount(CommonGridIdListFormDTO gridList) {
if(null == gridList || null == gridList.getGridIds() || gridList.getGridIds().size() < NumConstant.ONE)
return null;
Map<String,Integer> votableCountMap = new HashMap<>();
Map<String,Set<String>> gridGroups =
resiGroupService.getGroupIdsByGridIdList(gridList.getGridIds());
gridGroups.forEach((k,v)->{
Set<String> set = new HashSet<>();
v.forEach(groupId -> {
Set<String> members = resiGroupMemberRedis.getGroupMemberIds(groupId);
if(null != members && members.size() > NumConstant.ZERO){
set.addAll(members);
}
});
votableCountMap.put(k,set.size());
});
GridVotableCountResultDTO result = new GridVotableCountResultDTO();
result.setVotableCountMap(votableCountMap);
return result;
}
/**
* @Description 将ResiGroupMemberDTO转换成ResiGroupMemberInfoRedisDTO
* @Param

0
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/.gitkeep

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

@ -260,4 +260,14 @@ public class ResiTopicController {
return new Result<CheckTopicPublisherResultDTO>().ok(topicService.checkTopicPublisher(formDTO));
}
/**
* @param topicIdList
* @return
* @Author sun
* @Description 批量查询话题信息
**/
@PostMapping(value = "gettopiclist/{topicIdList}")
public Result<List<ResiTopicDTO>> getTopicList(@PathVariable("topicIdList") List<String> topicIdList){
return new Result<List<ResiTopicDTO>>().ok(topicService.getTopicList(topicIdList));
}
}

8
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/ResiTopicDao.java

@ -152,4 +152,12 @@ public interface ResiTopicDao extends BaseDao<ResiTopicEntity> {
* @author zxc
*/
CheckTopicPublisherResultDTO checkTopicPublisher(CheckTopicPublisherFormDTO formDTO);
/**
* @param topicIdList
* @return
* @Author sun
* @Description 批量查询话题信息
**/
List<ResiTopicDTO> selectTopicListById(@Param("topicIdList") List<String> topicIdList);
}

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

@ -264,4 +264,11 @@ public interface ResiTopicService extends BaseService<ResiTopicEntity> {
*/
CheckTopicPublisherResultDTO checkTopicPublisher(CheckTopicPublisherFormDTO formDTO);
/**
* @param topicIdList
* @return
* @Author sun
* @Description 批量查询话题信息
**/
List<ResiTopicDTO> getTopicList(List<String> topicIdList);
}

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

@ -929,14 +929,13 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
wrapper.eq(TopicConstant.TOPIC_ID,formDTO.getTopicId());
wrapper.orderByAsc(TopicConstant.SORT);
List<ResiTopicAttachmentEntity> attachments = resiTopicAttachmentDao.selectList(wrapper);
if (attachments.size()==NumConstant.ZERO){
return new TopicInfoDTO();
}
List<String> attachmentUrls = new ArrayList<>();
for(ResiTopicAttachmentEntity attachment : attachments){
attachmentUrls.add(attachment.getAttachmentUrl());
if (attachments.size() != NumConstant.ZERO){
List<String> attachmentUrls = new ArrayList<>();
for(ResiTopicAttachmentEntity attachment : attachments){
attachmentUrls.add(attachment.getAttachmentUrl());
}
topicInfo.setTopicImgs(attachmentUrls);
}
topicInfo.setTopicImgs(attachmentUrls);
//话题发起人
IssueInitiatorFormDTO issueInitiator = new IssueInitiatorFormDTO();
issueInitiator.setUserId(topicInfo.getPublishedUser());
@ -1151,6 +1150,17 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
return resiTopicDao.checkTopicPublisher(formDTO);
}
/**
* @param topicIdList
* @return
* @Author sun
* @Description 批量查询话题信息
**/
@Override
public List<ResiTopicDTO> getTopicList(List<String> topicIdList) {
return baseDao.selectTopicListById(topicIdList);
}
}

2
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/utils/ModuleConstant.java

@ -209,6 +209,8 @@ public interface ModuleConstant extends Constant {
* */
String RESI_GROUP_ID_CAMEL = "resiGroupId";
String RESI_GROUP_ID = "RESI_GROUP_ID";
/**
* APP 居民端
* */

14
epmet-module/resi-group/resi-group-server/src/main/resources/mapper/group/ResiGroupDao.xml

@ -352,4 +352,18 @@
order by totalMember desc,rgs.TOTAL_TOPICS desc
LIMIT #{pageSize}
</select>
<!-- 根据网格IdList查询小组信息 -->
<select id="selectGroupListByGridIds" resultType="com.epmet.resi.group.dto.group.ResiGroupDTO">
SELECT
ID,
GRID_ID
FROM
RESI_GROUP
WHERE
DEL_FLAG = '0'
<foreach collection="gridIds" item="gridId" open="AND (" separator=" or " close=")" index="index">
GRID_ID = #{gridId}
</foreach>
</select>
</mapper>

12
epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/ResiTopicDao.xml

@ -446,5 +446,17 @@
AND created_by = #{createdBy}
AND id = #{topicId}
</select>
<select id="selectTopicListById" resultType="com.epmet.resi.group.dto.topic.ResiTopicDTO">
SELECT
*
FROM
resi_topic
WHERE
del_flag = '0'
<foreach item="topicId" collection="topicIdList" separator="OR" open="AND (" close=")" index="">
id = #{topicId}
</foreach>
</select>
</mapper>

2
epmet-module/resi-home/resi-home-server/deploy/docker-compose-dev.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
resi-home-server:
container_name: resi-home-server-dev
image: 192.168.1.130:10080/epmet-cloud-dev/resi-home-server:0.3.1
image: 192.168.1.130:10080/epmet-cloud-dev/resi-home-server:0.3.2
ports:
- "8104:8104"
network_mode: host # 使用现有网络

2
epmet-module/resi-home/resi-home-server/deploy/docker-compose-test.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
resi-home-server:
container_name: resi-home-server-test
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/resi-home-server:0.3.26
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/resi-home-server:0.3.2
ports:
- "8104:8104"
network_mode: host # 使用现有网络

2
epmet-module/resi-home/resi-home-server/pom.xml

@ -3,7 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>0.3.1</version>
<version>0.3.2</version>
<parent>
<artifactId>resi-home</artifactId>

7
epmet-module/resi-home/resi-home-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java

@ -1,5 +1,6 @@
package com.epmet.service.impl;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.LatestIssueListFormDTO;
import com.epmet.dto.result.LatestIssueListResultDTO;
import com.epmet.feign.GovIssueFeignClient;
@ -27,9 +28,9 @@ public class IssueServiceImpl implements IssueService {
**/
@Override
public List<LatestIssueListResultDTO> latestList(LatestIssueListFormDTO formDTO) {
//1:调用gov-issue服务,查询客户网格下最新议题列表
return null;
//1:调用gov-issue服务,查询客户网格下最新议题列表数据
Result<List<LatestIssueListResultDTO>> listResult = govIssueFeignClient.getNewestIssueList(formDTO);
return listResult.getData();
}
}

2
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/constant/PartyMemberMessageConstant.java

@ -9,7 +9,7 @@ public interface PartyMemberMessageConstant {
/**
* 消息标题
*/
String GROUP_TITLE = "您有一条党员申请消息";
String PARTY_AUTH_TITLE = "您有一条党员申请消息";
/**
* 党员提交申请时给网格长发送消息XX街道-XX先生/女士申请成为党员请审核

4
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/PartyMemberConfirmServiceImpl.java

@ -580,7 +580,7 @@ public class PartyMemberConfirmServiceImpl implements PartyMemberConfirmService
userMessageFormDTO.setCustomerId(formDTO.getCustomerId());
userMessageFormDTO.setGridId(formDTO.getGridId());
userMessageFormDTO.setApp(AppClientConstant.APP_RESI);
userMessageFormDTO.setTitle(PartyMemberMessageConstant.GROUP_TITLE);
userMessageFormDTO.setTitle(PartyMemberMessageConstant.PARTY_AUTH_TITLE);
//调用gov-org服务查询网格信息
CustomerGridFormDTO customerGridFormDTO = new CustomerGridFormDTO();
customerGridFormDTO.setGridId(formDTO.getGridId());
@ -640,7 +640,7 @@ public class PartyMemberConfirmServiceImpl implements PartyMemberConfirmService
msgDTO.setGridId(formDTO.getGridId());
msgDTO.setUserId(staff.getUserId());
msgDTO.setApp(AppClientConstant.APP_GOV);
msgDTO.setTitle(ResiWarmUserMessageConstant.GROUP_TITLE);
msgDTO.setTitle(PartyMemberMessageConstant.PARTY_AUTH_TITLE);
msgDTO.setMessageContent(message);
msgDTO.setReadFlag(ReadFlagConstant.UN_READ);
msgList.add(msgDTO);

2
epmet-user/epmet-user-server/deploy/docker-compose-dev.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
epmet-user-server:
container_name: epmet-user-server-dev
image: 192.168.1.130:10080/epmet-cloud-dev/epmet-user-server:0.3.32
image: 192.168.1.130:10080/epmet-cloud-dev/epmet-user-server:0.3.33
ports:
- "8087:8087"
network_mode: host # 不会创建新的网络

2
epmet-user/epmet-user-server/deploy/docker-compose-test.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
epmet-user-server:
container_name: epmet-user-server-test
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/epmet-user-server:0.3.31
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/epmet-user-server:0.3.33
ports:
- "8087:8087"
network_mode: host # 不会创建新的网络

2
epmet-user/epmet-user-server/pom.xml

@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>0.3.32</version>
<version>0.3.33</version>
<parent>
<groupId>com.epmet</groupId>
<artifactId>epmet-user</artifactId>

3
epmet-user/epmet-user-server/src/main/resources/mapper/StaffRoleDao.xml

@ -115,8 +115,7 @@
WHERE
sr.del_flag = '0'
AND gsr.del_flag = '0'
AND
<foreach item="staffId" collection="staffIdList" separator="or" open="(" close=")" index="">
<foreach item="staffId" collection="staffIdList" separator="or" open="AND (" close=")" index="">
sr.staff_id = #{staffId}
</foreach>
</select>

Loading…
Cancel
Save