Browse Source

Merge branch 'develop' of http://git.elinkit.com.cn:7070/r/epmet-cloud into release_temp

dev_shibei_match
jianjun 4 years ago
parent
commit
ab0bdaf7a4
  1. 3
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java
  2. 34
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
  3. 12
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/bean/GridInfoCache.java
  4. 2
      epmet-gateway/src/main/resources/bootstrap.yml
  5. 2
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmetuser/result/ListStaffResultDTO.java
  6. 2
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govorg/form/OrgStaffListFormDTO.java
  7. 2
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govorg/form/StaffDetailV2FormDTO.java
  8. 36
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java
  9. 7
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/EpmetUserService.java
  10. 46
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java
  11. 29
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java
  12. 14
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetmessage/InfoProfileDao.xml
  13. 14
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/CustomerStaffDao.xml
  14. 12
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govorg/CustomerStaffAgencyDao.xml
  15. 3
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/SubAgencyIndexRankResultDTO.java
  16. 16
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/impl/IndexServiceImpl.java
  17. 10
      epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexAgencyScoreDao.xml
  18. 4
      epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexAgencySubScoreDao.xml
  19. 14
      epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexCommunityScoreDao.xml
  20. 4
      epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexCommunitySubScoreDao.xml
  21. 14
      epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexGridScoreDao.xml
  22. 4
      epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexGridSubScoreDao.xml
  23. 51
      epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenIndexDataMonthlyDao.xml
  24. 6
      epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenIndexDataYearlyDao.xml
  25. 9
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenProjectCategoryGridDailyServiceImpl.java
  26. 78
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenProjectCategoryOrgDailyServiceImpl.java
  27. 26
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenProjectOrgDailyServiceImpl.java
  28. 91
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectMainDailyDao.xml
  29. 12
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenProjectCategoryOrgDailyDao.xml
  30. 2
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenProjectOrgDailyDao.xml
  31. 125
      epmet-module/epmet-demo/epmet-demo-server/src/main/java/com/epmet/controller/WxController.java
  32. 1
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/config/ScheduleConfig.java
  33. 10
      epmet-module/epmet-message/epmet-message-server/src/main/resources/db/migration/V0.3.17__alter_info_table_ucase.sql
  34. 46
      epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/form/AllPartyFormDTO.java
  35. 13
      epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/form/GroupPointFormDTO.java
  36. 49
      epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/AllPartyResultDTO.java
  37. 12
      epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/GroupPointRankingResultDTO.java
  38. 43
      epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/controller/GroupPointController.java
  39. 12
      epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/controller/ResiPointController.java
  40. 3
      epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/UserPointStatisticalDailyDao.java
  41. 14
      epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/BizPointTotalDetailService.java
  42. 10
      epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/UserPointStatisticalDailyService.java
  43. 185
      epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/BizPointTotalDetailServiceImpl.java
  44. 34
      epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/UserPointStatisticalDailyServiceImpl.java
  45. 43
      epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/UserPointStatisticalDailyDao.xml
  46. 6
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/constant/ThirdPlatformActions.java
  47. 19
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/ThirdPlatformActionsResultDTO.java
  48. 18
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/privateepmet/GetAccessTokenResultDTO.java
  49. 21
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/ThirdOpenFeignClient.java
  50. 12
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/ThirdOpenFeignClientFallback.java
  51. 5
      epmet-module/epmet-third/epmet-third-server/pom.xml
  52. 246
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/apiservice/ApiService.java
  53. 18
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/apiservice/impl/DemoApiService.java
  54. 49
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/apiservice/impl/LuzhouGridPlatformApiService.java
  55. 169
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/apiservice/impl/PingyinPrivateEpmetApiService.java
  56. 50
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PrivateEpmetController.java
  57. 30
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/TestConttroller.java
  58. 10
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/ThirdplatformActionDao.java
  59. 10
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/ThirdplatformCustomerRegisterDao.java
  60. 19
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/redis/ThirdPlatformCache.java
  61. 3
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/ComponentVerifyTicketService.java
  62. 19
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PrivateEpmetService.java
  63. 10
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/ThirdPlatformService.java
  64. 203
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/ComponentVerifyTicketServiceImpl.java
  65. 71
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PrivateEpmetServiceImpl.java
  66. 6
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/ThirdPlatformServiceImpl.java
  67. 17
      epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/ThirdplatformActionDao.xml
  68. 14
      epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/ThirdplatformCustomerRegisterDao.xml
  69. 17
      epmet-module/gov-grid/gov-grid-server/src/main/java/com/epmet/service/impl/PartyBranchManageServiceImpl.java
  70. 2
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/AddAgencyFormDTO.java
  71. 12
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/AddDepartmentFormDTO.java
  72. 15
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/AddGridFormDTO.java
  73. 2
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/EditAgencyFormDTO.java
  74. 12
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/EditDepartmentFormDTO.java
  75. 15
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/EditGridFormDTO.java
  76. 17
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/OrgFormDTO.java
  77. 4
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/MineResultDTO.java
  78. 10
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/GovOrgOpenFeignClient.java
  79. 13
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/fallback/GovOrgOpenFeignClientFallback.java
  80. 22
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/CustomerAgencyController.java
  81. 4
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/DepartmentController.java
  82. 2
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/GridController.java
  83. 9
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/CustomerAgencyService.java
  84. 14
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java
  85. 7
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerStaffAgencyServiceImpl.java
  86. 8
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/StaffServiceImpl.java
  87. 88
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerStaffAgencyDao.xml
  88. 22
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/AttachmentDTO.java
  89. 56
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/ExternalLinkDTO.java
  90. 117
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideAttachmentDTO.java
  91. 91
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideCategoryDTO.java
  92. 91
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideCollectionDTO.java
  93. 112
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideDTO.java
  94. 96
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideExternalLinkDTO.java
  95. 91
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideModuleDTO.java
  96. 96
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideModuleDictDTO.java
  97. 91
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideModuleDictDefaultDTO.java
  98. 58
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/ModuleDTO.java
  99. 61
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideAddFormDTO.java
  100. 70
      epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideEditFormDTO.java

3
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java

@ -155,7 +155,8 @@ public enum EpmetErrorCode {
EXISTED_SPECIAL_PROJECT(8807, "已经添加过此专题"),
CAN_NOT_DEL_SPECIAL_PROJECT(8808, "您没有权限删除此专题"),
TAG_NOT_EXIST(8809,"标签不存在"),
GUIDE_IS_NULL(8810,"指南内容不能为空"),
GUIDE_IS_NOT_YOURS(8811,"只能删除自己创建的指南"),
//公众号 865..开头的码
PUBLIC_NOT_EXISTS(8651,"手机号未注册,请先完成信息注册"),
SELECT_CUSTOMER_ERROR(8652,"未查询到注册客户信息"),

34
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java

@ -441,6 +441,28 @@ public class RedisKeys {
return rootPrefix.concat("thirdplatform:accesstoken:").concat(platformId);
}
/**
* @Description 第三方平台信息key
* @param platformId
* @return java.lang.String
* @author wxz
* @date 2021.08.31 14:44:35
*/
public static String getThirdPlatformInfoKey(String platformId) {
return rootPrefix.concat("thirdplatform:info:").concat(platformId);
}
/**
* @Description 第三方平台操作urlkey
* @param platformId
* @return java.lang.String
* @author wxz
* @date 2021.08.31 15:15:15
*/
public static String getThirdPlatformActionUrlKey(String platformId) {
return rootPrefix.concat("thirdplatform:actions:").concat(platformId);
}
/**
* @return 设置组员已读未读标识
* @param source :act notice
@ -501,4 +523,16 @@ public class RedisKeys {
public static String getCustomerStaffInfoKey(String customerId, String staffId) {
return rootPrefix.concat("gov:staff:").concat(customerId).concat(StrConstant.COLON).concat(staffId);
}
/**
* @description 网格信息
*
* @param gridId
* @return
* @author wxz
* @date 2021.09.08 11:03:48
*/
public static String getGridInfoKey(String gridId) {
return rootPrefix.concat("gov:grid:").concat(gridId);
}
}

12
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/bean/GridInfoCache.java

@ -0,0 +1,12 @@
package com.epmet.commons.tools.redis.common.bean;
import lombok.Data;
@Data
public class GridInfoCache {
private String gridId;
private String gridNamePath;
private String customerId;
private String pid;
private String pids;
}

2
epmet-gateway/src/main/resources/bootstrap.yml

@ -484,6 +484,7 @@ epmet:
- /message/template/**
- /data/aggregator/project/projectdistribution
- /data/aggregator/epmetuser/open-staffdetail
- /data/aggregator/epmetuser/gridmemberpatrollist
- /data/aggregator/pub/**
#stats external包下 公共的类只外部暴露方法 纯外部使用的 暴漏整个
- /data/stats/statsuser/gm-uploadevent
@ -497,6 +498,7 @@ epmet:
- /data/stats/project/**
- /data/stats/basereport/**
- /data/stats/governance/**
- /third/private-epmet/push-component-access-token
# 对外开放接口认证白名单

2
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmetuser/result/ListStaffResultDTO.java

@ -31,5 +31,7 @@ public class ListStaffResultDTO implements Serializable {
private String orgName = "";
//职责名称列表
private List<String> roles;
//工作人员添加入口类型(组织:agency;部门:dept;网格:gridId)
private String orgType = "";
}

2
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govorg/form/OrgStaffListFormDTO.java

@ -45,6 +45,8 @@ public class OrgStaffListFormDTO implements Serializable {
private List<String> staffIds;
//token中用户Id
private String staffId;
//人员是否禁用【未禁用enable,已禁用disabled】
private String enableFlag = "enable";
public interface OrgStaff extends CustomerClientShowGroup {}
}

2
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govorg/form/StaffDetailV2FormDTO.java

@ -15,6 +15,8 @@ import java.util.List;
public class StaffDetailV2FormDTO implements Serializable {
private static final long serialVersionUID = -1974456701949979946L;
//工作人员所属组织
private String agencyId = "";
//工作人员用户id
private String staffId = "";
//工作人员姓名

36
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java

@ -1,5 +1,6 @@
package com.epmet.dataaggre.service.datastats.impl;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
@ -1488,27 +1489,22 @@ public class DataStatsServiceImpl implements DataStatsService {
formDTO.setDateId(format.format(yesterday));
}
String startDate = null;
String actulStartDate = null;
String endDate = null;
String endDate = formDTO.getDateId();
Date dateIdDate = DateUtils.parse(formDTO.getDateId(), DateUtils.DATE_PATTERN_YYYYMMDD);
boolean isYesterday = DateUtils.getBeforeNDay(1,DateUtils.DATE_PATTERN_YYYYMMDD).equals(formDTO.getDateId());
switch (formDTO.getType()){
case "yesterday":
startDate = DateUtils.getBeforeNDay(formDTO.getDateId(),1);
startDate = formDTO.getDateId();
endDate = formDTO.getDateId();
actulStartDate = formDTO.getDateId();
break;
case "thisWeek":
actulStartDate = DateUtils.getWeekStart(formDTO.getDateId());
startDate = DateUtils.getBeforeNDay(actulStartDate,1);
DateUtils.format(DateUtils.addDateDays(yesterday, -1),DateUtils.DATE_PATTERN_YYYYMMDD);
startDate = DateUtils.getWeekStart(formDTO.getDateId());
if (!isYesterday){
endDate = DateUtils.getWeekEnd(formDTO.getDateId());
}
break;
case "thisMonth":
actulStartDate = DateUtils.format(DateUtils.getMonthStart(dateIdDate),DateUtils.DATE_PATTERN_YYYYMMDD);
startDate = DateUtils.getBeforeNDay(actulStartDate,1);
startDate = DateUtils.format(DateUtils.getMonthStart(dateIdDate),DateUtils.DATE_PATTERN_YYYYMMDD);
if (!isYesterday) {
endDate = DateUtils.format(DateUtils.getMonthEnd(dateIdDate), DateUtils.DATE_PATTERN_YYYYMMDD);
}
@ -1517,7 +1513,9 @@ public class DataStatsServiceImpl implements DataStatsService {
log.warn("===========");
}
formDTO.setStartDateId(startDate);
String breforeStartDate = DateUtils.getBeforeNDay(formDTO.getStartDateId(),1);
formDTO.setEndDateId(endDate);
log.info("getSubWorkFact do select param:{}", JSON.toJSONString(formDTO));
List<WorkFactResultDTO> result = new ArrayList<>();
//如果是社区 则下级是网格 查询网格的数据
if (OrgLevelEnum.COMMUNITY.getCode().equals(formDTO.getAgencyLevel())){
@ -1528,22 +1526,22 @@ public class DataStatsServiceImpl implements DataStatsService {
}
List<String> gridIdList = subAgencyList.stream().map(ScreenCustomerGridDTO::getGridId).collect(Collectors.toList());
//查询组织的话题转议题数据
List<SubGridFormDTO.Topic> toIssueStart = dataStatsDao.getSubGridTopicShiftIssue(gridIdList, formDTO.getStartDateId());
List<SubGridFormDTO.Topic> toIssueStart = dataStatsDao.getSubGridTopicShiftIssue(gridIdList, breforeStartDate);
List<SubGridFormDTO.Topic> toIssueEnd = dataStatsDao.getSubGridTopicShiftIssue(gridIdList, formDTO.getEndDateId());
Map<String, Integer> toIssueStartMap = toIssueStart.stream().collect(Collectors.toMap(SubGridFormDTO.Topic::getGridId, SubGridFormDTO.Topic::getShiftedIssueTotal, (o1, o2) -> o1));
Map<String, Integer> toIssueEndMap = toIssueEnd.stream().collect(Collectors.toMap(SubGridFormDTO.Topic::getGridId, SubGridFormDTO.Topic::getShiftedIssueTotal, (o1, o2) -> o1));
//查询组织的议题转项目数据
List<SubGridIssueResultDTO> toProjectStart = dataStatsDao.getSubGridIssue(gridIdList, formDTO.getStartDateId());
List<SubGridIssueResultDTO> toProjectStart = dataStatsDao.getSubGridIssue(gridIdList, breforeStartDate);
List<SubGridIssueResultDTO> toProjectEnd = dataStatsDao.getSubGridIssue(gridIdList, formDTO.getEndDateId());
Map<String, Integer> toProjectStartMap = toProjectStart.stream().collect(Collectors.toMap(SubGridIssueResultDTO::getGridId, SubGridIssueResultDTO::getShiftProjectTotal, (o1, o2) -> o1));
Map<String, Integer> toProjectEndMap = toProjectEnd.stream().collect(Collectors.toMap(SubGridIssueResultDTO::getGridId, SubGridIssueResultDTO::getShiftProjectTotal, (o1, o2) -> o1));
//查询组织已关闭的项目数据
List<SubGridProjectResultDTO> closeProjectStart = dataStatsDao.getSubGridProject(gridIdList, formDTO.getStartDateId());
List<SubGridProjectResultDTO> closeProjectStart = dataStatsDao.getSubGridProject(gridIdList, breforeStartDate);
List<SubGridProjectResultDTO> closeProjectEnd = dataStatsDao.getSubGridProject(gridIdList, formDTO.getEndDateId());
Map<String, Integer> closeProjectStartMap = closeProjectStart.stream().collect(Collectors.toMap(SubGridProjectResultDTO::getGridId, SubGridProjectResultDTO::getClosedProjectTotal, (o1, o2) -> o1));
Map<String, Integer> closeProjectEndMap = closeProjectEnd.stream().collect(Collectors.toMap(SubGridProjectResultDTO::getGridId, SubGridProjectResultDTO::getClosedProjectTotal, (o1, o2) -> o1));
//巡查次数和时间
List<PatrolDailySumResult> patrolList = statsStaffPatrolRecordDailyService.getPatrolSumList(gridIdList,actulStartDate,formDTO.getEndDateId());
List<PatrolDailySumResult> patrolList = statsStaffPatrolRecordDailyService.getPatrolSumList(gridIdList,formDTO.getStartDateId(),formDTO.getEndDateId());
Map<String, PatrolDailySumResult> patrolListMap = patrolList.stream().collect(Collectors.toMap(PatrolDailySumResult::getFullAgencyId, o -> o, (o1, o2) -> o1));
subAgencyList.forEach(agency->{
@ -1568,23 +1566,23 @@ public class DataStatsServiceImpl implements DataStatsService {
List<String> agencyList = subAgencyList.stream().map(ScreenCustomerAgencyDTO::getAgencyId).collect(Collectors.toList());
//查询组织的话题转议题数据
List<SubAgencyFormDTO.Topic> toIssueStart = dataStatsDao.getSubAgencyTopicShiftIssue(agencyList, formDTO.getStartDateId());
List<SubAgencyFormDTO.Topic> toIssueStart = dataStatsDao.getSubAgencyTopicShiftIssue(agencyList, breforeStartDate);
List<SubAgencyFormDTO.Topic> toIssueEnd = dataStatsDao.getSubAgencyTopicShiftIssue(agencyList, formDTO.getEndDateId());
Map<String, Integer> toIssueStartMap = toIssueStart.stream().collect(Collectors.toMap(SubAgencyFormDTO.Topic::getAgencyId, SubAgencyFormDTO.Topic::getShiftedIssueTotal, (o1, o2) -> o1));
Map<String, Integer> toIssueEndMap = toIssueEnd.stream().collect(Collectors.toMap(SubAgencyFormDTO.Topic::getAgencyId, SubAgencyFormDTO.Topic::getShiftedIssueTotal, (o1, o2) -> o1));
//查询组织的议题转项目数据
List<SubAgencyIssueResultDTO> toProjectStart = dataStatsDao.getSubAgencyIssue(agencyList, formDTO.getStartDateId());
List<SubAgencyIssueResultDTO> toProjectStart = dataStatsDao.getSubAgencyIssue(agencyList, breforeStartDate);
List<SubAgencyIssueResultDTO> toProjectEnd = dataStatsDao.getSubAgencyIssue(agencyList, formDTO.getEndDateId());
Map<String, Integer> toProjectStartMap = toProjectStart.stream().collect(Collectors.toMap(SubAgencyIssueResultDTO::getAgencyId, SubAgencyIssueResultDTO::getShiftProjectTotal, (o1, o2) -> o1));
Map<String, Integer> toProjectEndMap = toProjectEnd.stream().collect(Collectors.toMap(SubAgencyIssueResultDTO::getAgencyId, SubAgencyIssueResultDTO::getShiftProjectTotal, (o1, o2) -> o1));
//查询组织已关闭的项目数据
List<SubAgencyProjectResultDTO> closeProjectStart = dataStatsDao.getSubAgencyProject(agencyList, formDTO.getStartDateId());
List<SubAgencyProjectResultDTO> closeProjectStart = dataStatsDao.getSubAgencyProject(agencyList, breforeStartDate);
List<SubAgencyProjectResultDTO> closeProjectEnd = dataStatsDao.getSubAgencyProject(agencyList, formDTO.getEndDateId());
Map<String, Integer> closeProjectStartMap = closeProjectStart.stream().collect(Collectors.toMap(SubAgencyProjectResultDTO::getAgencyId, SubAgencyProjectResultDTO::getClosedProjectTotal, (o1, o2) -> o1));
Map<String, Integer> closeProjectEndMap = closeProjectEnd.stream().collect(Collectors.toMap(SubAgencyProjectResultDTO::getAgencyId, SubAgencyProjectResultDTO::getClosedProjectTotal, (o1, o2) -> o1));
//巡查次数和时间
List<String> agencyFullIds = subAgencyList.stream().map(o -> o.getPids().concat(StrConstant.COLON).concat(o.getAgencyId())).collect(Collectors.toList());
List<PatrolDailySumResult> patrolList = statsStaffPatrolRecordDailyService.getPatrolSumList(agencyFullIds,actulStartDate,formDTO.getEndDateId());
List<PatrolDailySumResult> patrolList = statsStaffPatrolRecordDailyService.getPatrolSumList(agencyFullIds,breforeStartDate,formDTO.getEndDateId());
Map<String, PatrolDailySumResult> patrolListMap = patrolList.stream().collect(Collectors.toMap(PatrolDailySumResult::getFullAgencyId, o -> o, (o1, o2) -> o1));
subAgencyList.forEach(agency->{
@ -1602,7 +1600,9 @@ public class DataStatsServiceImpl implements DataStatsService {
});
}
List<WorkFactResultDTO> newResult = result.stream().sorted(Comparator.comparing(o -> o.getTopicToIssueTotal() + o.getIssueToProjectTotal() + o.getClosedProjectTotal() + o.getPatrolTotal())).collect(Collectors.toList());
List<WorkFactResultDTO> newResult = result.stream().sorted(Comparator.comparing(o -> o.getTopicToIssueTotal() + o.getIssueToProjectTotal() + o.getClosedProjectTotal() + o.getPatrolTotal()))
.collect(Collectors.toList());
Collections.reverse(newResult);
return newResult;
}

7
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/EpmetUserService.java

@ -98,6 +98,13 @@ public interface EpmetUserService {
*/
UserEventLogoResultDTO mentionMeEvent(String userId);
/**
* @Param formDTO
* @Description 对外接口--网格员排名-巡查记录
* @author sun
*/
List<GridMemberPatrolListResultDTO> gridMemberPatrolList(GridMemberPatrolListFormDTO formDTO);
/**
* @Param formDTO
* @Description 通讯录姓名检索工作人员

46
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java

@ -75,10 +75,10 @@ public class EpmetUserServiceImpl implements EpmetUserService {
private ResiUserBadgeDao resiUserBadgeDao;
@Autowired
private GovProjectService govProjectService;
@Resource
private GovStaffRoleDao govStaffRoleDao;
@Autowired
private DataStatsService dataStatsService;
@Resource
private GovStaffRoleDao govStaffRoleDao;
/**
* @Description 根据UserIds查询
@ -442,6 +442,47 @@ public class EpmetUserServiceImpl implements EpmetUserService {
return resultDTO;
}
/**
* @Param formDTO
* @Description 对外接口--网格员排名-巡查记录
* @author sun
*/
@Override
public List<GridMemberPatrolListResultDTO> gridMemberPatrolList(GridMemberPatrolListFormDTO formDTO) {
//1.查询当前组织及下级所有网格员维度对应最大dated数据【例查询2021年8月数据,则是查询8月对应的最大daeId那天的网格员数据】
List<GridMemberPatrolListResultDTO> resultList = dataStatsService.getGirdMemberPatrol(formDTO);
if (CollectionUtils.isEmpty(resultList)) {
return new ArrayList<>();
}
//2.按维度汇总当前组织及下级网格员巡查数据
//【如果查询当前月或本年度数据,则需要排除最大dateId的数据,因为上边查的统计数据只有t-1的,巡查数据是t的,避免多计算了当天的巡查项目数和时长数】
formDTO.setDateId(resultList.get(0).getDateId());
List<StaffListResultDTO> patrolList = staffPatrolRecordDao.gridMemberPatrol(formDTO);
//3.以统计数据为准封装结果数据
resultList.forEach(re -> patrolList.stream().filter(l -> re.getStaffId().equals(l.getStaffId())).forEach(s -> {
re.setReportProjectCount(s.getReportProjectCount());
re.setPatrolTotalTime((s.getTimeNum() > NumConstant.ZERO ? s.getTimeNum() / 60 : 0));
}));
//4.按排序字段排序并返回
Collections.sort(resultList, new Comparator<GridMemberPatrolListResultDTO>() {
@Override
public int compare(GridMemberPatrolListResultDTO o1, GridMemberPatrolListResultDTO o2) {
if ("patrolTime".equals(formDTO.getSort())) {
return o2.getPatrolTotalTime().compareTo(o1.getPatrolTotalTime());
} else if ("dealEvent".equals(formDTO.getSort())) {
return o2.getEventCount().compareTo(o1.getEventCount());
} else {
return o2.getReportProjectCount().compareTo(o1.getReportProjectCount());
}
}
});
return resultList;
}
/**
* @Param formDTO
* @Description 通讯录姓名检索工作人员
@ -647,6 +688,7 @@ public class EpmetUserServiceImpl implements EpmetUserService {
List<String> list = staffRoleDao.selectByStaffId(staffId);
//汇总数据
result = ConvertUtils.sourceToTarget(dto, StaffDetailV2FormDTO.class);
result.setStaffId(dto.getUserId());
result.setName(dto.getRealName());
result.setGender(dto.getGender().toString());
result.setRoles(list);

29
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java

@ -1,22 +1,18 @@
package com.epmet.dataaggre.service.govorg.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.dataaggre.constant.DataSourceConstant;
import com.epmet.dataaggre.dao.govorg.*;
import com.epmet.dataaggre.dto.epmetuser.result.ListStaffResultDTO;
import com.epmet.dataaggre.dto.epmetuser.result.StaffRoleListResultDTO;
import com.epmet.dataaggre.dto.govorg.*;
import com.epmet.dataaggre.dto.govorg.form.*;
import com.epmet.dataaggre.dto.govorg.CustomerAgencyDTO;
import com.epmet.dataaggre.dto.govorg.CustomerDepartmentDTO;
import com.epmet.dataaggre.dto.govorg.CustomerGridDTO;
import com.epmet.dataaggre.dto.govorg.CustomerStaffAgencyDTO;
import com.epmet.dataaggre.dto.govorg.form.NextAreaCodeFormDTO;
import com.epmet.dataaggre.dto.govorg.form.OrgStaffListFormDTO;
import com.epmet.dataaggre.dto.govorg.form.StaffDetailV2FormDTO;
@ -34,10 +30,8 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Author zxc
@ -398,9 +392,23 @@ public class GovOrgServiceImpl implements GovOrgService {
staffIds.removeIf(s->s.equals(formDTO.getStaffId()));
}
//是否具有超级管理员或管理员角色
CustomerStaffInfoCacheResult staffInfoCache = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getStaffId());
Map<String,String> roleMap = staffInfoCache.getRoleMap();
if (roleMap.containsKey("root_manager") || roleMap.containsKey("manager")) {
formDTO.setEnableFlag("disabled");
}
//2.分页查询工作人员基础信息、角色信息【组织人员单位领导角色人员在前;部门人员部门领导角色人员在前;网格人员网格长角色人员在前】
List<ListStaffResultDTO> staffList = epmetUserService.getStaffInfoList(formDTO);
//3.查询工作人员注册组织关系信息
List<String> staffIdList = staffList.stream().map(ListStaffResultDTO::getStaffId).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(staffIdList)){
List<StaffOrgNameResultDTO> list = customerAgencyDao.selelctStaffOrg(staffIdList);
staffList.forEach(re -> list.stream().filter(l -> re.getStaffId().equals(l.getStaffId())).forEach(s -> re.setOrgType(s.getOrgType())));
}
//3.封装数据并返回
resultDTO.setStaffCount(staffIds.size());
resultDTO.setStaffList((null == staffList ? new ArrayList<>() : staffList));
@ -429,6 +437,7 @@ public class GovOrgServiceImpl implements GovOrgService {
}
//3.封装数据并返回
result.setAgencyId(list.get(0).getAgencyId());
result.setOrgId(list.get(0).getOrgId());
result.setOrgName(list.get(0).getOrgName());
result.setOrgType(list.get(0).getOrgType());

14
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetmessage/InfoProfileDao.xml

@ -75,9 +75,9 @@
SELECT
ir.INFO_ID,
ip.content,
ii.CREATED_TIME,
ip.CREATED_TIME,
ir.READ_FLAG,
ii.publish_staff_id,
ip.publish_staff_id,
ip.first_att_id,
ia.ATTACHMENT_NAME AS name,
ia.ATTACHMENT_FORMAT AS format,
@ -91,18 +91,20 @@
end) as duration
FROM
info_receivers ir
INNER JOIN info ii ON ( ir.INFO_ID = ii.ID )
INNER JOIN info_profile ip ON ( ii.ID = ip.INFO_ID AND ip.DEL_FLAG = '0' )
<if test="null != content and content !=''">
INNER JOIN info ii ON ( ir.INFO_ID = ii.ID )
</if>
INNER JOIN info_profile ip ON ( ir.INFO_ID = ip.INFO_ID AND ip.DEL_FLAG = '0' )
LEFT JOIN info_att ia on ( ip.first_att_id = ia.id AND ia.DEL_FLAG = '0' )
WHERE
ir.DEL_FLAG = '0'
AND ii.DEL_FLAG = '0'
AND ir.STAFF_ID = #{userId}
<if test="null != content and content !=''">
AND ii.DEL_FLAG = '0'
and ii.content like concat('%',trim(#{content}),'%')
</if>
ORDER BY
ii.CREATED_TIME DESC
ip.CREATED_TIME DESC
</select>
<select id="selectInfoDetail" parameterType="java.lang.String" resultType="com.epmet.dataaggre.dto.message.result.InfoDetailResDTO">

14
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/CustomerStaffDao.xml

@ -60,7 +60,8 @@
<!-- 里边的sql,尽管有去重,一个人有多个角色时,在里边sql查询出来的是一个人两条数据,is_first一个是0一个是1,所以外层需要在按人分组 -->
SELECT DISTINCT<!-- 没有这个去重会改变最终的结果顺序,至于为什么还不清楚 -->
sr.staff_id,
case when gsr.role_key =
cs.created_time,
case when cs.enable_flag = 'enable' AND gsr.role_key =
<choose>
<when test="orgType != null and orgType == 'agency' ">
'agency_leader'
@ -72,8 +73,14 @@
'grid_manager'
</otherwise>
</choose>
then 1 else 0 end is_first<!-- 有单位领导角色的人赋值为1,没有的赋值为0 -->
then 0
when cs.enable_flag = 'enable' AND gsr.role_key != 'agency_leader'
then 1 else 2 end is_first<!-- 未禁用有相应角色人员赋值0,未禁用无相应角色人员赋值1,禁用人员赋值2 -->
FROM staff_role sr
INNER JOIN customer_staff cs ON sr.staff_id = cs.user_id
<if test="enableFlag != null and enableFlag != '' and enableFlag == 'enable' ">
AND cs.enable_flag = 'enable' <!-- 非超级管理员、管理员只允许查看未禁用人员信息 -->
</if>
INNER JOIN gov_staff_role gsr ON sr.role_id = gsr.id AND gsr.customer_id = #{customerId}
WHERE
sr.del_flag = '0'
@ -96,10 +103,9 @@
'grid_manager'
</otherwise>
</choose>
, sr.created_time DESC<!-- 标注有点位领导角色的人不参与排序也就是默认拍在前边 -->
) t
GROUP BY t.staff_id
ORDER BY t.is_first <![CDATA[<>]]> 1
ORDER BY t.is_first <![CDATA[<>]]> 0, t.is_first asc, t.created_time desc<!-- 标注有相应角色的人不参与排序也就是默认拍在前边,没有相对于角色的排在后边,禁用人员排在最后 -->
LIMIT #{pageNo}, #{pageSize}
</select>

12
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govorg/CustomerStaffAgencyDao.xml

@ -77,14 +77,16 @@
</when>
<otherwise>
SELECT
user_id
csa.user_id
FROM
customer_staff_agency
customer_staff_agency csa
INNER JOIN staff_org_relation sor ON csa.user_id = sor.staff_id
WHERE
del_flag = '0'
AND agency_id = #{orgId}
csa.del_flag = '0'
AND sor.org_type = 'agency'
AND csa.agency_id = #{orgId}
ORDER BY
created_time ASC
csa.created_time ASC
</otherwise>
</choose>
</select>

3
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/SubAgencyIndexRankResultDTO.java

@ -27,16 +27,19 @@ public class SubAgencyIndexRankResultDTO implements Serializable {
* 党建能力
*/
private Double governAbility = 0.0;
private Double originGovernAbility = 0.0;
/**
* 治理能力
*/
private Double partyDevAbility = 0.0;
private Double originPartyDevAbility = 0.0;
/**
* 服务能力
*/
private Double serviceAbility = 0.0;
private Double originServiceAbility = 0.0;
private String orgId;
private String orgType;

16
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/impl/IndexServiceImpl.java

@ -57,9 +57,6 @@ public class IndexServiceImpl implements IndexService {
if (null == yearAverageIndexResultDTO){
return new YearAverageIndexResultDTO();
}
yearAverageIndexResultDTO.setPartyDevAbility(getRound(yearAverageIndexResultDTO.getPartyDevAbility()));
yearAverageIndexResultDTO.setGovernAbility(getRound(yearAverageIndexResultDTO.getGovernAbility()));
yearAverageIndexResultDTO.setServiceAbility(getRound(yearAverageIndexResultDTO.getServiceAbility()));
yearAverageIndexResultDTO.setYearAverageIndex(getRound(yearAverageIndexResultDTO.getPartyDevAbility() + yearAverageIndexResultDTO.getGovernAbility() + yearAverageIndexResultDTO.getServiceAbility()));
return yearAverageIndexResultDTO;
}
@ -86,10 +83,6 @@ public class IndexServiceImpl implements IndexService {
if (null == pieChartDTO) {
return new MonthPieChartResultDTO();
}
// 处理小数四舍五入
pieChartDTO.setPartyDevAbility(getRound(pieChartDTO.getPartyDevAbility()));
pieChartDTO.setGovernAbility(getRound(pieChartDTO.getGovernAbility()));
pieChartDTO.setServiceAbility(getRound(pieChartDTO.getServiceAbility()));
return pieChartDTO;
}
@ -154,9 +147,6 @@ public class IndexServiceImpl implements IndexService {
}
// 处理小数四舍五入
monthBarchartResults.forEach(barchart -> {
barchart.setPartyDevAbility(getRound(barchart.getPartyDevAbility()));
barchart.setGovernAbility(getRound(barchart.getGovernAbility()));
barchart.setServiceAbility(getRound(barchart.getServiceAbility()));
barchart.setIndexTotal(getRound(barchart.getPartyDevAbility() + barchart.getGovernAbility() + barchart.getServiceAbility()));
//四舍五入,保留小数点后两位
barchart.setServiceAblityWeight(barchart.getServiceAblityWeight().setScale(NumConstant.TWO,BigDecimal.ROUND_HALF_UP));
@ -443,9 +433,6 @@ public class IndexServiceImpl implements IndexService {
// 小数四舍五入
streetList.forEach(indexRank -> {
indexRank.setOrgType("street");
indexRank.setPartyDevAbility(getRound(indexRank.getPartyDevAbility()));
indexRank.setGovernAbility(getRound(indexRank.getGovernAbility()));
indexRank.setServiceAbility(getRound(indexRank.getServiceAbility()));
indexRank.setTotalIndex(getRound(indexRank.getPartyDevAbility() + indexRank.getGovernAbility() + indexRank.getServiceAbility()));
});
return streetList;
@ -455,9 +442,6 @@ public class IndexServiceImpl implements IndexService {
// 小数四舍五入
gridList.forEach(indexRank -> {
indexRank.setOrgType("grid");
indexRank.setPartyDevAbility(getRound(indexRank.getPartyDevAbility()));
indexRank.setGovernAbility(getRound(indexRank.getGovernAbility()));
indexRank.setServiceAbility(getRound(indexRank.getServiceAbility()));
indexRank.setTotalIndex(getRound(indexRank.getPartyDevAbility() + indexRank.getGovernAbility() + indexRank.getServiceAbility()));
});
return gridList;

10
epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexAgencyScoreDao.xml

@ -6,7 +6,7 @@
<select id="selectAgencyAblityWeightScoreIndex" resultType="com.epmet.evaluationindex.screen.dto.result.AblityIndexResultDTO$ScoreListResultDTO">
SELECT
fact.month_id AS "monthId",
ROUND(fact.score*fact.WEIGHT, 1) AS "indexTotal",
ROUND(ROUND(fact.score,1)*fact.WEIGHT, 1) AS "indexTotal",
fact.index_code AS "indexCode"
FROM
fact_index_agency_score fact
@ -24,7 +24,7 @@
<select id="selectAgencyWeightScoreList" resultType="com.epmet.evaluationindex.screen.dto.result.ScoreListResultDTO">
SELECT
fact.index_code AS "indexCode",
ROUND(fact.score*fact.WEIGHT, 1) AS "indexTotal",
ROUND(ROUND(fact.score,1)*fact.WEIGHT, 1) AS "indexTotal",
ROUND(fact.score,1) AS "indexTotalOriginScore",
fact.WEIGHT AS "indexTotalSupWeight",
ROUND(self.self_score*fact.WEIGHT, 1) AS "agencyScore",
@ -50,11 +50,11 @@
<select id="selectAgencyMonthWeightScoreList" resultType="com.epmet.evaluationindex.screen.dto.result.MonthScoreListResultDTO$ScoreListResultDTO">
SELECT
fact.month_id AS "monthId",
ROUND(fact.score*fact.WEIGHT, 1) AS "indexTotal",
ROUND(ROUND(fact.score,1)*fact.WEIGHT, 1) AS "indexTotal",
ROUND(fact.score,1) AS "indexTotalOriginScore",
fact.WEIGHT AS "indexTotalSupWeight",
ROUND(self.self_score*fact.WEIGHT, 1) AS "agencyScore",
ROUND(self.sub_score*fact.WEIGHT, 1) AS "subAgencyScore",
ROUND(ROUND(self.self_score,1)*fact.WEIGHT, 1) AS "agencyScore",
ROUND(ROUND(self.sub_score,1)*fact.WEIGHT, 1) AS "subAgencyScore",
fact.index_code AS "indexCode",
self.SELF_WEIGHT AS "selfWeight",
self.SUB_WEIGHT AS "subWeight"

4
epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexAgencySubScoreDao.xml

@ -7,10 +7,10 @@
SELECT
fact.index_code AS "key",
IF(fact.origin_value='',0,IFNULL(fact.origin_value,0)) AS "value",
fact.score AS score,
round(fact.score,1) AS score,
dict.index_name AS "name",
round(fact.WEIGHT,2) AS weight,
(fact.SCORE * fact.WEIGHT) AS weightedScore
round(round(fact.SCORE,1) * fact.WEIGHT,1) AS weightedScore
FROM
fact_index_agency_sub_score fact
LEFT JOIN index_dict dict ON fact.index_code = dict.index_code

14
epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexCommunityScoreDao.xml

@ -6,7 +6,7 @@
<select id="selectCommunityAblityWeightScore" resultType="com.epmet.evaluationindex.screen.dto.result.AblityIndexResultDTO$ScoreListResultDTO">
SELECT
fact.month_id AS "monthId",
ROUND(fact.score*fact.WEIGHT, 1) AS "indexTotal",
ROUND(ROUND(fact.score,1)*fact.WEIGHT, 1) AS "indexTotal",
fact.index_code AS "indexCode"
FROM
fact_index_community_score fact
@ -24,13 +24,13 @@
<select id="selectCommunityWeightScoreList" resultType="com.epmet.evaluationindex.screen.dto.result.ScoreListResultDTO">
SELECT
fact.index_code AS "indexCode",
ROUND(fact.score*fact.WEIGHT, 1) AS "indexTotal",
ROUND(ROUND(fact.score,1)*fact.WEIGHT, 1) AS "indexTotal",
ROUND(fact.score,1) AS "indexTotalOriginScore",
fact.WEIGHT AS "indexTotalSupWeight",
ROUND(self.self_score*fact.WEIGHT, 1) AS "agencyScore",
ROUND(ROUND(self.self_score,1)*fact.WEIGHT, 1) AS "agencyScore",
ROUND(self.self_score, 1) AS selfOriginScore,
self.SELF_WEIGHT AS agencyWeight,
ROUND(self.sub_score*fact.WEIGHT, 1) AS "subAgencyScore",
ROUND(ROUND(self.sub_score,1)*fact.WEIGHT, 1) AS "subAgencyScore",
ROUND(self.sub_score, 1) AS subOriginScore,
self.SUB_WEIGHT AS subAgencyWeight
FROM
@ -50,11 +50,11 @@
<select id="selectCommunityMonthWeightScoreList" resultType="com.epmet.evaluationindex.screen.dto.result.MonthScoreListResultDTO$ScoreListResultDTO">
SELECT
fact.month_id AS "monthId",
ROUND(fact.score*fact.WEIGHT, 1) AS "indexTotal",
ROUND(ROUND(fact.score,1)*fact.WEIGHT, 1) AS "indexTotal",
ROUND(fact.score,1) AS "indexTotalOriginScore",
fact.WEIGHT AS "indexTotalSupWeight",
ROUND(self.self_score*fact.WEIGHT, 1) AS "agencyScore",
ROUND(self.sub_score*fact.WEIGHT, 1) AS "subAgencyScore",
ROUND(ROUND(self.self_score,1)*fact.WEIGHT, 1) AS "agencyScore",
ROUND(ROUND(self.sub_score,1)*fact.WEIGHT, 1) AS "subAgencyScore",
fact.index_code AS "indexCode",
self.SELF_WEIGHT AS "selfWeight",
self.SUB_WEIGHT AS "subWeight"

4
epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexCommunitySubScoreDao.xml

@ -8,9 +8,9 @@
fact.index_code AS "key",
IF(fact.origin_value='',0,IFNULL(fact.origin_value,0)) AS "value",
dict.index_name AS "name",
fact.score AS score,
round(fact.score,1) AS score,
round(fact.WEIGHT,2) AS weight,
(fact.SCORE * fact.WEIGHT) AS weightedScore
round(round(fact.SCORE,1) * fact.WEIGHT,1) AS weightedScore
FROM
fact_index_community_sub_score fact
LEFT JOIN index_dict dict ON fact.index_code = dict.index_code

14
epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexGridScoreDao.xml

@ -6,7 +6,7 @@
<select id="selectGridAblityWeightScore" resultType="com.epmet.evaluationindex.screen.dto.result.AblityIndexResultDTO$ScoreListResultDTO">
SELECT
fact.month_id AS "monthId",
ROUND(fact.score*fact.WEIGHT, 1) AS "indexTotal",
ROUND(ROUND(fact.score,1)*fact.WEIGHT, 1) AS "indexTotal",
fact.index_code AS "indexCode"
FROM
fact_index_grid_score fact
@ -24,13 +24,13 @@
<select id="selectGridWeightScoreList" resultType="com.epmet.evaluationindex.screen.dto.result.ScoreListResultDTO">
SELECT
fact.index_code AS "indexCode",
ROUND(fact.score*fact.WEIGHT, 1) AS "indexTotal",
ROUND(ROUND(fact.score,1)*fact.WEIGHT, 1) AS "indexTotal",
ROUND(fact.score,1) AS "indexTotalOriginScore",
fact.WEIGHT AS "indexTotalSupWeight",
ROUND(self.self_score*fact.WEIGHT, 1) AS "agencyScore",
ROUND(ROUND(self.self_score,1)*fact.WEIGHT, 1) AS "agencyScore",
ROUND(self.self_score, 1) AS selfOriginScore,
self.SELF_WEIGHT AS agencyWeight,
ROUND(self.sub_score*fact.WEIGHT, 1) AS "subAgencyScore",
ROUND(ROUND(self.sub_score,1)*fact.WEIGHT, 1) AS "subAgencyScore",
ROUND(self.sub_score, 1) AS subOriginScore,
self.SUB_WEIGHT AS subAgencyWeight
FROM
@ -51,11 +51,11 @@
<select id="selectGridMonthWeightScoreList" resultType="com.epmet.evaluationindex.screen.dto.result.MonthScoreListResultDTO$ScoreListResultDTO">
SELECT
fact.month_id AS "monthId",
ROUND(fact.score*fact.WEIGHT, 1) AS "indexTotal",
ROUND(ROUND(fact.score,1)*fact.WEIGHT, 1) AS "indexTotal",
ROUND(fact.score,1) AS "indexTotalOriginScore",
fact.WEIGHT AS "indexTotalSupWeight",
ROUND(self.self_score*fact.WEIGHT, 1) AS "agencyScore",
ROUND(self.sub_score*fact.WEIGHT, 1) AS "subAgencyScore",
ROUND(ROUND(self.self_score,1)*fact.WEIGHT, 1) AS "agencyScore",
ROUND(ROUND(self.sub_score,1)*fact.WEIGHT, 1) AS "subAgencyScore",
fact.index_code AS "indexCode",
self.SELF_WEIGHT AS "selfWeight",
self.SUB_WEIGHT AS "subWeight"

4
epmet-module/data-report/data-report-server/src/main/resources/mapper/fact/FactIndexGridSubScoreDao.xml

@ -8,9 +8,9 @@
fact.index_code AS "key",
IF(fact.origin_value='',0,IFNULL(fact.origin_value,0)) AS "value",
dict.index_name AS "name",
fact.score AS score,
round(fact.score,1) AS score,
round(fact.WEIGHT,2) AS weight,
(fact.SCORE * fact.WEIGHT) AS weightedScore
round(round(fact.SCORE,1) * fact.WEIGHT,1) AS weightedScore
FROM
fact_index_grid_sub_score fact
LEFT JOIN index_dict dict ON fact.index_code = dict.index_code

51
epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenIndexDataMonthlyDao.xml

@ -6,9 +6,9 @@
<!-- 2、月度指数分析-饼状图 -->
<select id="selectMonthPieChart" resultType="com.epmet.evaluationindex.screen.dto.result.MonthPieChartResultDTO">
SELECT
service_ablity * SERVICE_ABLITY_WEIGHT AS serviceAbility,
party_dev_ablity * PARTY_DEV_WEIGHT AS partyDevAbility,
govern_ablity * GOVERN_ABLITY_WEIGHT AS governAbility,
ROUND((ROUND(service_ablity,1) * SERVICE_ABLITY_WEIGHT),1) AS serviceAbility,
ROUND((ROUND(party_dev_ablity,1) * PARTY_DEV_WEIGHT),1) AS partyDevAbility,
ROUND((ROUND(govern_ablity,1) * GOVERN_ABLITY_WEIGHT),1) AS governAbility,
ROUND(service_ablity,1) serviceOriginScore,
ROUND(party_dev_ablity,1) partyOriginScore,
ROUND(govern_ablity,1) governOriginScore,
@ -38,9 +38,9 @@
<select id="selectMonthBarchart" resultType="com.epmet.evaluationindex.screen.dto.result.MonthBarchartResult">
SELECT
month_id AS monthId,
service_ablity * SERVICE_ABLITY_WEIGHT AS serviceAbility,
party_dev_ablity * PARTY_DEV_WEIGHT AS partyDevAbility,
govern_ablity * GOVERN_ABLITY_WEIGHT AS governAbility,
ROUND((ROUND(service_ablity,1) * SERVICE_ABLITY_WEIGHT),1) AS serviceAbility,
ROUND((ROUND(party_dev_ablity,1) * PARTY_DEV_WEIGHT),1) AS partyDevAbility,
ROUND((ROUND(govern_ablity,1) * GOVERN_ABLITY_WEIGHT),1) AS governAbility,
ROUND(service_ablity,1) serviceOriginScore,
ROUND(party_dev_ablity,1) partyOriginScore,
ROUND(govern_ablity,1) governOriginScore,
@ -88,9 +88,9 @@
resultType="com.epmet.evaluationindex.screen.dto.result.AnNingSubAgencyIndexRankResultDTO">
SELECT
score.org_name AS `NAME`,
score.service_ablity * score.SERVICE_ABLITY_WEIGHT AS serviceAbility,
score.party_dev_ablity * score.PARTY_DEV_WEIGHT AS partyDevAbility,
score.govern_ablity * score.GOVERN_ABLITY_WEIGHT AS governAbility,
ROUND(ROUND(score.service_ablity,1) * score.SERVICE_ABLITY_WEIGHT, 1) AS serviceAbility,
ROUND(ROUND(score.party_dev_ablity,1) * score.PARTY_DEV_WEIGHT, 1) AS partyDevAbility,
ROUND(ROUND(score.govern_ablity,1) * score.GOVERN_ABLITY_WEIGHT, 1) AS governAbility,
score.PARTY_DEV_WEIGHT AS partyWeight,
score.GOVERN_ABLITY_WEIGHT AS governWeight,
score.SERVICE_ABLITY_WEIGHT AS serviceWeight,
@ -156,13 +156,13 @@
org_id AS "orgId",
org_name AS "orgName",
<if test="indexCode != null and indexCode != '' and indexCode == 'dangjiannengli'">
round((party_dev_ablity * party_dev_weight),1) AS "score"
round(round(party_dev_ablity,1) * party_dev_weight,1) AS "score"
</if>
<if test="indexCode != null and indexCode != '' and indexCode == 'zhilinengli'">
round((govern_ablity * govern_ablity_weight),1) AS "score"
round(round(govern_ablity,1) * govern_ablity_weight,1) AS "score"
</if>
<if test="indexCode != null and indexCode != '' and indexCode == 'fuwunengli'">
round((service_ablity * service_ablity_weight),1) AS "score"
round(round(service_ablity,1) * service_ablity_weight,1) AS "score"
</if>
FROM
screen_index_data_monthly
@ -201,13 +201,13 @@
<select id="selectMonthData" resultType="com.epmet.evaluationindex.screen.dto.result.IndexScoreResultDTO">
SELECT
score.index_total AS "total",
(score.party_dev_ablity * score.party_dev_weight) AS "party",
(ROUND(score.party_dev_ablity,1) * score.party_dev_weight) AS "party",
ROUND(score.party_dev_ablity,1) partyOriginScore,
score.party_dev_weight AS "partyDevAbilityWeight",
(score.govern_ablity * score.govern_ablity_weight) AS "govern",
(ROUND(score.govern_ablity,1) * score.govern_ablity_weight) AS "govern",
ROUND(score.govern_ablity,1) governOriginScore,
score.govern_ablity_weight AS "governAbilityWeight",
(score.service_ablity * score.service_ablity_weight) AS "service",
(ROUND(score.service_ablity,1) * score.service_ablity_weight) AS "service",
ROUND(score.service_ablity,1) serviceOriginScore,
score.service_ablity_weight AS "serviceAbilityWeight"
FROM
@ -360,9 +360,12 @@
<select id="selectSubStreetByAreaCode" parameterType="map" resultType="com.epmet.evaluationindex.screen.dto.result.SubAgencyIndexRankResultDTO">
SELECT
sca.AGENCY_NAME AS NAME,
sy.govern_ablity * sy.GOVERN_ABLITY_WEIGHT AS governAbility,
sy.party_dev_ablity * sy.PARTY_DEV_WEIGHT AS partyDevAbility,
sy.service_ablity * sy.SERVICE_ABLITY_WEIGHT AS serviceAbility,
ROUND((ROUND(sy.govern_ablity,1) * sy.GOVERN_ABLITY_WEIGHT),1) AS governAbility,
ROUND((ROUND(sy.party_dev_ablity,1) * sy.PARTY_DEV_WEIGHT),1) AS partyDevAbility,
ROUND((ROUND(sy.service_ablity,1) * sy.SERVICE_ABLITY_WEIGHT),1) AS serviceAbility,
ROUND(sy.govern_ablity,1) AS originGovernAbility,
ROUND(sy.party_dev_ablity,1) AS originPartyDevAbility,
ROUND(sy.service_ablity,1) AS originServiceAbility,
sy.ORG_ID as orgId,
sca.area_code as areaCode
FROM screen_customer_agency sca
@ -382,9 +385,9 @@
<select id="selectSubGridByAreaCode" parameterType="map" resultType="com.epmet.evaluationindex.screen.dto.result.SubAgencyIndexRankResultDTO">
SELECT
scg.GRID_NAME AS NAME,
sy.govern_ablity * sy.GOVERN_ABLITY_WEIGHT AS governAbility,
sy.party_dev_ablity * sy.PARTY_DEV_WEIGHT AS partyDevAbility,
sy.service_ablity * sy.SERVICE_ABLITY_WEIGHT AS serviceAbility,
ROUND((ROUND(sy.govern_ablity,1) * sy.GOVERN_ABLITY_WEIGHT),1) AS governAbility,
ROUND((ROUND(sy.party_dev_ablity,1) * sy.PARTY_DEV_WEIGHT),1) AS partyDevAbility,
ROUND((ROUND(sy.service_ablity,1) * sy.SERVICE_ABLITY_WEIGHT),1) AS serviceAbility,
sy.ORG_ID as orgId,
scg.area_code as areaCode
FROM screen_customer_grid scg
@ -406,9 +409,9 @@
resultType="com.epmet.evaluationindex.screen.dto.result.AnNingSubAgencyIndexRankResultDTO">
SELECT
score.org_name AS `NAME`,
score.service_ablity * score.SERVICE_ABLITY_WEIGHT AS serviceAbility,
score.party_dev_ablity * score.PARTY_DEV_WEIGHT AS partyDevAbility,
score.govern_ablity * score.GOVERN_ABLITY_WEIGHT AS governAbility,
ROUND(ROUND(score.service_ablity,1)*score.SERVICE_ABLITY_WEIGHT, 1)AS serviceAbility,
ROUND(ROUND(score.party_dev_ablity,1) * score.PARTY_DEV_WEIGHT, 1) AS partyDevAbility,
ROUND(ROUND(score.govern_ablity,1) * score.GOVERN_ABLITY_WEIGHT, 1) AS governAbility,
score.PARTY_DEV_WEIGHT AS partyWeight,
score.GOVERN_ABLITY_WEIGHT AS governWeight,
score.SERVICE_ABLITY_WEIGHT AS serviceWeight,

6
epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenIndexDataYearlyDao.xml

@ -6,9 +6,9 @@
<!-- 1、年度平均指数 -->
<select id="selectYearAverageIndex" resultType="com.epmet.evaluationindex.screen.dto.result.YearAverageIndexResultDTO">
SELECT
service_ablity AS serviceAbility,
party_dev_ablity AS partyDevAbility,
govern_ablity AS governAbility,
ROUND(service_ablity,1) AS serviceAbility,
ROUND(party_dev_ablity,1) AS partyDevAbility,
ROUND(govern_ablity,1) AS governAbility,
year_id as yearId
FROM
screen_index_data_yearly

9
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenProjectCategoryGridDailyServiceImpl.java

@ -147,8 +147,17 @@ public class ScreenProjectCategoryGridDailyServiceImpl extends BaseServiceImpl<S
listDTO.forEach(dto->{
dto.setDateId(dateId);
});
del(customerId,dateId);
boolean insertRes=insertBatch(ConvertUtils.sourceToTarget(listDTO, ScreenProjectCategoryGridDailyEntity.class));
log.info("insertRes is {}",insertRes);
}
@Transactional(rollbackFor = Exception.class)
public void del(String customerId,String dateId){
Integer num = NumConstant.ZERO;
do {
num = baseDao.deleteByDateIdAndCustomerId(customerId, dateId);
}while (num > NumConstant.ZERO && num == NumConstant.ONE_THOUSAND);
}
}

78
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenProjectCategoryOrgDailyServiceImpl.java

@ -17,6 +17,7 @@
package com.epmet.service.evaluationindex.screen.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
@ -365,6 +366,7 @@ public class ScreenProjectCategoryOrgDailyServiceImpl extends BaseServiceImpl<Sc
orgIds.add(PingYinConstant.KONG_CUN_AGENCY_ID);
orgIds.add(PingYinConstant.YU_SHAN_AGENCY_ID);
}
log.info("groupByLevel:{}"+JSON.toJSONString(groupByLevel)+"orgIds:{}"+JSON.toJSONString(orgIds));
del(customerId,dateId,orgIds);
if (isGrid){
// community级别走这
@ -375,6 +377,7 @@ public class ScreenProjectCategoryOrgDailyServiceImpl extends BaseServiceImpl<Sc
}else {
// 根据客户ID,时间,组织级别查询 分类标签
List<CategoryProjectResultDTO> categoryProjectResultDTOS = baseDao.selectOrgCategoryInfo(customerId, dateId, level);
log.info("分类标签:{}"+JSON.toJSONString(categoryProjectResultDTOS));
List<ScreenCustomerGridDTO> belongGridInfos = gridService.selectBelongGridInfo(customerId, level);
if (!CollectionUtils.isEmpty(belongGridInfos)){
// 存在直属网格
@ -403,28 +406,37 @@ public class ScreenProjectCategoryOrgDailyServiceImpl extends BaseServiceImpl<Sc
* 在保存一份子客户自己agencyId的
*/
if (ScreenConstant.DISTRICT.equals(level)){
// 这时的result集合要清空,因为被上边使用 【result = ConvertUtils.sourceToTarget(categoryProjectResultDTOS,ScreenProjectCategoryOrgDailyEntity.class);】
result.clear();
// 查询 平阴的agencyId
ScreenCustomerAgencyEntity entity = agencyService.selectTopAgency(customerId);
// 子级客户ID
List<String> customerIds = relationInfo.stream().map(m -> m.getCustomerId()).collect(Collectors.toList());
// 子客户单独存一份【三个街道的】
List<CategoryProjectResultDTO> sonCustomerList = new ArrayList<>();
// 父客户存在的分类
List<CategoryProjectResultDTO> categoryProjectExists = baseDao.selectOrgCategoryMoreCustomerInfo(customerIds, dateId, level, customerId, true);
// 这时的result集合要清空,因为被上边使用 【result = ConvertUtils.sourceToTarget(categoryProjectResultDTOS,ScreenProjectCategoryOrgDailyEntity.class);】
result.clear();
/* List<ScreenProjectCategoryOrgDailyEntity> finalResult = result;
groupByCategoryCode.forEach((code, list) -> {
ScreenProjectCategoryOrgDailyEntity e = new ScreenProjectCategoryOrgDailyEntity();
e.setCustomerId(customerId);
e.setCategoryOriginCustomerId(customerId);
e.setCategoryCode(code);
e.setOrgId(entity.getAgencyId());
e.setProjectTotal(CollectionUtils.isEmpty(list) ? NumConstant.ZERO : list.stream().collect(Collectors.summingInt(CategoryProjectResultDTO::getProjectTotal)));
e.setPid(entity.getPid());
e.setPids(StringUtils.isEmpty(entity.getPids()) ? NumConstant.ZERO_STR : entity.getPids());
// 因为根据categoryCode分组,所以level都一样,取第一条的
e.setLevel(list.get(NumConstant.ZERO).getLevel());
finalResult.add(e);
});*/
log.info("父客户存在的分类{}"+ JSON.toJSONString(categoryProjectExists));
// 父客户不存在的分类
List<CategoryProjectResultDTO> categoryProjectNotExists = baseDao.selectOrgCategoryMoreCustomerInfo(customerIds, dateId, level, customerId, false);
log.info("父客户不存在的分类{}"+ JSON.toJSONString(categoryProjectNotExists));
if (!CollectionUtils.isEmpty(categoryProjectExists)){
sonCustomerList.addAll(categoryProjectExists);
}
if (!CollectionUtils.isEmpty(categoryProjectNotExists)){
sonCustomerList.addAll(categoryProjectNotExists);
}
if (!CollectionUtils.isEmpty(sonCustomerList)){
List<ScreenProjectCategoryOrgDailyEntity> finalSonResult = result;
sonCustomerList.forEach(s -> {
ScreenProjectCategoryOrgDailyEntity e = ConvertUtils.sourceToTarget(s, ScreenProjectCategoryOrgDailyEntity.class);
e.setOrgType(ScreenConstant.STREET);
e.setDateId(dateId);
e.setPid(entity.getPid());
e.setCustomerId(customerId);
finalSonResult.add(e);
});
}
// 内部客户与外部客户 相同的分类累加
if (!CollectionUtils.isEmpty(categoryProjectExists)){
categoryProjectResultDTOS.forEach(f -> {
@ -446,17 +458,37 @@ public class ScreenProjectCategoryOrgDailyServiceImpl extends BaseServiceImpl<Sc
e.setPids(StringUtils.isEmpty(entity.getPids()) ? NumConstant.ZERO_STR : entity.getPids());
finalResult.add(e);
});
log.info("组合后的数据{}:"+JSON.toJSONString(finalResult));
// 父客户存在分类,但是父客户没有使用过此分类
Map<Boolean, List<CategoryProjectResultDTO>> groupByStatus = categoryProjectExists.stream().collect(Collectors.groupingBy(CategoryProjectResultDTO::getStatus));
List<CategoryProjectResultDTO> twoResult = new ArrayList<>();
if (!CollectionUtils.isEmpty(groupByStatus.get(false))){
List<ScreenProjectCategoryOrgDailyEntity> entities = ConvertUtils.sourceToTarget(groupByStatus.get(false), ScreenProjectCategoryOrgDailyEntity.class);
result.addAll(entities);
twoResult.addAll(groupByStatus.get(false));
}
// 父客户不存在的分类
List<CategoryProjectResultDTO> categoryProjectNotExists = baseDao.selectOrgCategoryMoreCustomerInfo(customerIds, dateId, level, customerId, false);
if (!CollectionUtils.isEmpty(categoryProjectNotExists)){
List<ScreenProjectCategoryOrgDailyEntity> entities = ConvertUtils.sourceToTarget(categoryProjectNotExists, ScreenProjectCategoryOrgDailyEntity.class);
result.addAll(entities);
twoResult.addAll(categoryProjectNotExists);
}
if (!CollectionUtils.isEmpty(twoResult)){
Map<String, List<CategoryProjectResultDTO>> groupOrigin = twoResult.stream().collect(Collectors.groupingBy(CategoryProjectResultDTO::getCategoryOriginCustomerId));
List<ScreenProjectCategoryOrgDailyEntity> finalResult1 = result;
groupOrigin.forEach((originCustomerId, list) -> {
// 父客户存在但是未使用的分类 + 父客户不存在的分类,根据categoryCode分组
Map<String, List<CategoryProjectResultDTO>> sonGroupByCode = list.stream().collect(Collectors.groupingBy(CategoryProjectResultDTO::getCategoryCode));
sonGroupByCode.forEach((code,list2) -> {
ScreenProjectCategoryOrgDailyEntity e = new ScreenProjectCategoryOrgDailyEntity();
e.setCustomerId(customerId);
e.setCategoryOriginCustomerId(originCustomerId);
e.setCategoryCode(code);
e.setOrgId(entity.getAgencyId());
e.setProjectTotal(CollectionUtils.isEmpty(list2) ? NumConstant.ZERO : list2.stream().collect(Collectors.summingInt(CategoryProjectResultDTO::getProjectTotal)));
e.setPid(entity.getPid());
e.setPids(StringUtils.isEmpty(entity.getPids()) ? NumConstant.ZERO_STR : entity.getPids());
// 因为根据categoryCode分组,所以level都一样,取第一条的
e.setLevel(list2.get(NumConstant.ZERO).getLevel());
finalResult1.add(e);
});
});
}
}
}
@ -465,6 +497,7 @@ public class ScreenProjectCategoryOrgDailyServiceImpl extends BaseServiceImpl<Sc
if (!CollectionUtils.isEmpty(levelAgencyInfo)) {
// 查询客户下,组织直接立项的,各项目分类下的项目数量【筛选组织创建的项目,fact_origin_project_main_daily表gridId为空】
List<ScreenProjectCategoryGridDailyDTO> screenProjectCategory = factOriginProjectCategoryDailyService.selectListProjectCategoryByOrg(orgIds, customerId);
log.info("直接立项的统计:"+screenProjectCategory);
if (!CollectionUtils.isEmpty(result)) {
if (!CollectionUtils.isEmpty(screenProjectCategory)) {
result.forEach(r -> {
@ -501,6 +534,7 @@ public class ScreenProjectCategoryOrgDailyServiceImpl extends BaseServiceImpl<Sc
});
}
}
log.info("插入总结果:{}"+JSON.toJSONString(result));
insert(result);
}

26
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenProjectOrgDailyServiceImpl.java

@ -184,44 +184,30 @@ public class ScreenProjectOrgDailyServiceImpl extends BaseServiceImpl<ScreenProj
log.warn(String.format(PingYinConstants.AGENCY_INFO_IS_ZERO,customerId));
return;
}
del(customerId, dateId);
List<ProjectOrgDailyResultDTO> projectOrgDaily = baseDao.selectOrgProjectByAgency(agencyInfos, dateId);
if (CollectionUtils.isEmpty(projectOrgDaily)){
log.info(String.format(PingYinConstants.SELECT_GRID_INFO_BY_ORG_IS_NULL,customerId));
return;
}
log.info(projectOrgDaily.toString());
List<ScreenProjectOrgDailyDTO> createProjects = disposeCreateProject(agencyInfos, dateId);
agencyInfos = disposeCreateProject(agencyInfos, dateId);
agencyInfos.forEach(a -> {
a.setDateId(dateId);
projectOrgDaily.forEach(p -> {
if (a.getAreaCode().equals(p.getAreaCode())){
a.setResolvedRatio(getRatio(p.getResolvedNum(),p.getProjectTotal()));
a.setBadRatio(getRatio(p.getBadTotal(),p.getEvaluateTotal()));
a.setGoodRatio(getRatio(p.getGoodTotal(),p.getEvaluateTotal()));
a.setBadTotal(p.getBadTotal());
a.setEvaluateTotal(p.getEvaluateTotal());
a.setGoodTotal(p.getGoodTotal());
a.setProjectTotal(p.getProjectTotal());
a.setResolvedNum(p.getResolvedNum());
}
});
});
agencyInfos.forEach(a -> {
createProjects.forEach(p -> {
if (a.getOrgId().equals(p.getOrgId())){
a.setBadTotal(p.getBadTotal() + a.getBadTotal());
a.setEvaluateTotal(p.getEvaluateTotal() + a.getEvaluateTotal());
a.setGoodTotal(p.getGoodTotal() + a.getGoodTotal());
a.setProjectTotal(p.getProjectTotal() + a.getProjectTotal());
a.setResolvedNum(p.getResolvedNum() + a.getResolvedNum());
a.setResolvedRatio(getRatio(a.getResolvedNum(),a.getProjectTotal()));
a.setBadRatio(getRatio(a.getBadTotal(),a.getEvaluateTotal()));
a.setGoodRatio(getRatio(a.getGoodTotal(),a.getEvaluateTotal()));
a.setResolvedRatio(getRatio(p.getResolvedNum(),p.getProjectTotal()));
a.setBadRatio(getRatio(p.getBadTotal(),p.getEvaluateTotal()));
a.setGoodRatio(getRatio(p.getGoodTotal(),p.getEvaluateTotal()));
}
});
});
log.info(agencyInfos.toString());
del(customerId, dateId);
insert(agencyInfos,customerId,dateId);
}
@ -239,6 +225,7 @@ public class ScreenProjectOrgDailyServiceImpl extends BaseServiceImpl<ScreenProj
log.warn(String.format(PingYinConstants.AGENCY_INFO_IS_ZERO,customerId));
return;
}
del(customerId, dateId);
List<ProjectOrgDailyResultDTO> projectOrgDaily = baseDao.selectOrgProject(agencyInfos, dateId);
if (CollectionUtils.isEmpty(projectOrgDaily)){
log.info(String.format(PingYinConstants.SELECT_GRID_INFO_BY_ORG_IS_NULL,customerId));
@ -278,7 +265,6 @@ public class ScreenProjectOrgDailyServiceImpl extends BaseServiceImpl<ScreenProj
});
});
log.info(agencyInfos.toString());
del(customerId, dateId);
insert(agencyInfos,customerId,dateId);
}

91
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectMainDailyDao.xml

@ -623,66 +623,57 @@
<!-- 组织查询项目总数 -->
<select id="selectProjectTotalByOrg" resultType="com.epmet.dto.pingyin.result.ProjectTotalResultDTO">
SELECT
m.AGENCY_ID AS orgId,
IFNULL(COUNT(m.ID),0) AS projectTotal
FROM fact_origin_project_main_daily m
WHERE m.DEL_FLAG = 0
AND m.GRID_ID = ''
AND (
<foreach collection="orgIds" item="orgId" separator=" OR ">
m.AGENCY_ID = #{orgId}
</foreach>
)
<if test="dateId != null and dateId != '' ">
AND m.DATE_ID <![CDATA[ <= ]]> #{dateId}
</if>
<if test="monthId != null and monthId != '' ">
AND m.MONTH_ID <![CDATA[ <= ]]> #{monthId}
</if>
GROUP BY m.AGENCY_ID
<foreach collection="orgIds" item="orgId" separator=" UNION ALL ">
SELECT
#{orgId} AS orgId,
IFNULL(COUNT(m.ID),0) AS projectTotal
FROM fact_origin_project_main_daily m
WHERE m.DEL_FLAG = 0
AND m.GRID_ID = ''
AND m.PIDS LIKE CONCAT('%',#{orgId},'%')
<if test="dateId != null and dateId != '' ">
AND m.DATE_ID <![CDATA[ <= ]]> #{dateId}
</if>
<if test="monthId != null and monthId != '' ">
AND m.MONTH_ID <![CDATA[ <= ]]> #{monthId}
</if>
</foreach>
</select>
<!-- 组织查询已解决项目数 -->
<select id="selectResolvedNumByOrg" resultType="com.epmet.dto.pingyin.result.ResolvedNumResultDTO">
SELECT
AGENCY_ID AS orgId,
IFNULL(COUNT(ID),0) AS resolvedNum
FROM fact_origin_project_main_daily
WHERE DEL_FLAG = 0
AND DATE_ID <![CDATA[ <= ]]> #{dateId}
AND PROJECT_STATUS = 'closed'
AND IS_RESOLVED = 'resolved'
AND (
<foreach collection="orgIds" item="orgId" separator=" OR ">
AGENCY_ID = #{orgId}
</foreach>
)
AND GRID_ID = ''
GROUP BY AGENCY_ID
<foreach collection="orgIds" item="orgId" separator=" UNION ALL ">
SELECT
#{orgId} AS orgId,
IFNULL(COUNT(ID),0) AS resolvedNum
FROM fact_origin_project_main_daily
WHERE DEL_FLAG = 0
AND DATE_ID <![CDATA[ <= ]]> #{dateId}
AND PIDS LIKE CONCAT('%',#{orgId},'%')
AND PROJECT_STATUS = 'closed'
AND IS_RESOLVED = 'resolved'
AND GRID_ID = ''
</foreach>
</select>
<!-- 组织 查询 满意度评价次数 -->
<select id="selectEvaluateCountByOrg" resultType="com.epmet.dto.pingyin.result.EvaluateTotalResultDTO">
SELECT
ORG_ID,
IFNULL(COUNT(PROJECT_ID),0) AS evaluateCount
FROM fact_origin_project_log_daily
WHERE DEL_FLAG = 0
AND ORG_TYPE = 'agency'
AND DATE_ID <![CDATA[ <= ]]> #{dateId}
AND (
<foreach collection="orgIds" item="orgId" separator=" OR ">
org_id = #{orgId}
<foreach collection="orgIds" item="orgId" separator=" UNION ALL ">
SELECT
#{orgId} as orgId,
IFNULL(COUNT(PROJECT_ID),0) AS evaluateCount
FROM fact_origin_project_log_daily
WHERE DEL_FLAG = 0
AND ORG_TYPE = 'agency'
AND DATE_ID <![CDATA[ <= ]]> #{dateId}
AND PIDS LIKE CONCAT('%',#{orgId},'%')
AND IS_ACTIVE = 1
AND (
<foreach collection="activeCodes" item="code" separator=" OR ">
ACTION_CODE = #{code}
</foreach>
)
AND IS_ACTIVE = 1
AND (
<foreach collection="activeCodes" item="code" separator=" OR ">
ACTION_CODE = #{code}
)
</foreach>
)
GROUP BY ORG_ID
</select>
<!-- 组织查询本月新增项目数 -->

12
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenProjectCategoryOrgDailyDao.xml

@ -47,7 +47,7 @@
<!-- 查询组织分类信息【多客户】 -->
<select id="selectOrgCategoryMoreCustomerInfo" resultType="com.epmet.dto.screen.result.CategoryProjectResultDTO">
SELECT
IF(od.pid = '0', od.ORG_ID,od.pid) AS orgId,
od.ORG_ID AS orgId,
IFNULL(sca.PID,'0') AS pid,
IFNULL(sca.PIDS,'0') AS pids,
#{customerId} as customerId,
@ -64,7 +64,7 @@
od.DATE_ID
FROM screen_project_category_org_daily od
LEFT JOIN customer_project_category_dict cd ON (cd.CATEGORY_CODE = od.CATEGORY_CODE AND cd.CUSTOMER_ID = od.CUSTOMER_ID)
LEFT JOIN screen_customer_agency sca ON sca.AGENCY_ID = od.PID
LEFT JOIN screen_customer_agency sca ON sca.AGENCY_ID = od.ORG_ID
WHERE 1=1
AND od.DEL_FLAG = '0'
AND (
@ -74,13 +74,14 @@
)
<if test="existsStatus == true">
AND cd.EPMET_CATEGORY_CODE IS NOT NULL
AND cd.EPMET_CATEGORY_CODE != ''
</if>
<if test="existsStatus == false">
AND cd.EPMET_CATEGORY_CODE IS NULL
AND (cd.EPMET_CATEGORY_CODE IS NULL OR cd.EPMET_CATEGORY_CODE = '')
</if>
AND od.pid = '0'
AND od.date_id = #{dateId}
GROUP BY od.CATEGORY_CODE,od.pid
GROUP BY categoryCode,od.ORG_ID
</select>
<!-- 查询内部客户组织的项目分类 -->
@ -131,6 +132,7 @@
</foreach>
)
AND cd.EPMET_CATEGORY_CODE IS NOT NULL
AND cd.EPMET_CATEGORY_CODE != ''
AND od.pid = '0'
AND od.date_id = #{dateId}
GROUP BY od.CATEGORY_CODE,od.pid
@ -155,7 +157,7 @@
#{customer}
</foreach>
)
AND cd.EPMET_CATEGORY_CODE IS NULL
AND (cd.EPMET_CATEGORY_CODE IS NULL OR cd.EPMET_CATEGORY_CODE = '')
AND od.pid = '0'
AND od.date_id = #{dateId}
GROUP BY od.CATEGORY_CODE,od.pid

2
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenProjectOrgDailyDao.xml

@ -138,7 +138,7 @@
FROM screen_project_grid_daily g
LEFT JOIN screen_customer_grid cg ON cg.GRID_ID = g.GRID_ID
WHERE g.DEL_FLAG = 0
AND cg.PARENT_AGENCY_ID = #{a.orgId}
AND cg.ALL_PARENT_IDS LIKE CONCAT('%',#{a.orgId},'%')
AND g.DATE_ID <![CDATA[ = ]]> #{dateId}
</foreach>
</select>

125
epmet-module/epmet-demo/epmet-demo-server/src/main/java/com/epmet/controller/WxController.java

@ -0,0 +1,125 @@
package com.epmet.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
/**
* desc:微信配置测试
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2020-03-08
*/
@RestController
@RequestMapping("wechat")
public class WxController {
private static Logger log = LoggerFactory.getLogger(WxController.class);
@RequestMapping("check")
public void doGet(HttpServletRequest request, HttpServletResponse response) {
log.debug("weixin get...");
// 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
String signature = request.getParameter("signature");
// 时间戳
String timestamp = request.getParameter("timestamp");
// 随机数
String nonce = request.getParameter("nonce");
// 随机字符串
String echostr = request.getParameter("echostr");
// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
PrintWriter out = null;
try {
out = response.getWriter();
if (WxController.checkSignature(signature, timestamp, nonce)) {
log.debug("weixin get success....");
out.print(echostr);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null)
out.close();
}
}
/**
* 与接口配置信息中的Token要一致
*/
private static String token = "o2opri3hschiwit";
/**
* 验证签名
*
* @param signature
* @param timestamp
* @param nonce
* @return
*/
public static boolean checkSignature(String signature, String timestamp, String nonce) {
String[] arr = new String[]{token, timestamp, nonce};
// 将token、timestamp、nonce三个参数进行字典序排序
Arrays.sort(arr);
StringBuilder content = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
content.append(arr[i]);
}
MessageDigest md = null;
String tmpStr = null;
try {
md = MessageDigest.getInstance("SHA-1");
// 将三个参数字符串拼接成一个字符串进行sha1加密
byte[] digest = md.digest(content.toString().getBytes());
tmpStr = byteToStr(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
content = null;
// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
}
/**
* 将字节数组转换为十六进制字符串
*
* @param byteArray
* @return
*/
private static String byteToStr(byte[] byteArray) {
String strDigest = "";
for (int i = 0; i < byteArray.length; i++) {
strDigest += byteToHexStr(byteArray[i]);
}
return strDigest;
}
/**
* 将字节转换为十六进制字符串
*
* @param mByte
* @return
*/
private static String byteToHexStr(byte mByte) {
char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
char[] tempArr = new char[2];
tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
tempArr[1] = Digit[mByte & 0X0F];
String s = new String(tempArr);
return s;
}
}

1
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/config/ScheduleConfig.java

@ -46,6 +46,7 @@ public class ScheduleConfig {
prop.put("org.quartz.jobStore.misfireThreshold", "12000");
prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");
prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?");
prop.put("org.quartz.jobStore.acquireTriggersWithinLock", "true");
//PostgreSQL数据库,需要打开此注释
//prop.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.PostgreSQLDelegate");

10
epmet-module/epmet-message/epmet-message-server/src/main/resources/db/migration/V0.3.17__alter_info_table_ucase.sql

@ -0,0 +1,10 @@
alter table info_profile change column publish_staff_id PUBLISH_STAFF_ID varchar(64) not null comment '发布人id';
alter table info_profile change column content CONTENT varchar(512) not null comment '内容概要,取前100字';
alter table info_profile change column first_att_id FIRST_ATT_ID varchar(64) comment '默认附件表的第一个条用于展示';
alter table info_profile change column total_receiver TOTAL_RECEIVER int(11) not null comment '应读人数';
alter table info_profile change column read_total READ_TOTAL int(11) not null default '0' comment '已读人数,插入是为0';
alter table info change column publish_staff_id PUBLISH_STAFF_ID varchar(64)not null comment '发布人id';
alter table info change column content CONTENT varchar(1024) not null comment '内容,这里存储全部的内容。';
alter table info_group_receivers change column info_receiver_group_id INFO_RECEIVER_GROUP_ID varchar(64) not null comment '群组id';

46
epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/form/AllPartyFormDTO.java

@ -0,0 +1,46 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.constant.NumConstant;
import lombok.Data;
import javax.validation.constraints.Min;
import java.io.Serializable;
import java.util.List;
/**
* @Author zxc
* @DateTime 2021/9/6 3:13 下午
* @DESC
*/
@Data
public class AllPartyFormDTO implements Serializable {
private static final long serialVersionUID = -600409785611581009L;
/**
* 页码
**/
private Integer pageNo = NumConstant.ONE;
/**
* 每页数据条数
**/
private Integer pageSize = NumConstant.TEN;
/**
* 本月 monthly 总排行 all;
* */
private String type;
/**
* 认证成功的党员 的用户ID
* */
private List<String> userIds;
/**
* 客户ID
*/
private String customerId;
}

13
epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/form/GroupPointFormDTO.java

@ -1,6 +1,7 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import com.sun.webkit.LoadListenerClient;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@ -17,8 +18,18 @@ public class GroupPointFormDTO implements Serializable {
public interface GroupPoint extends CustomerClientShowGroup {}
public interface GridRank extends CustomerClientShowGroup {}
public interface GridScopeRank extends CustomerClientShowGroup {}
public interface CustomerScopeRank extends CustomerClientShowGroup {}
@NotBlank(message = "小组Id不能为空", groups = {GroupPoint.class, GridRank.class})
private String groupId;
@NotBlank(message = "网格Id不能为空", groups = {GridRank.class})
@NotBlank(message = "网格Id不能为空", groups = {GridRank.class, GridScopeRank.class})
private String gridId;
@NotBlank(message = "客户Id不能为空", groups = {CustomerScopeRank.class})
private String customerId;
/** 页码 */
private Integer pageNo = 1;
/** 单页条数 */
private Integer pageSize = 10;
}

49
epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/AllPartyResultDTO.java

@ -0,0 +1,49 @@
package com.epmet.dto.result;
import com.epmet.commons.tools.constant.NumConstant;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2021/9/6 3:12 下午
* @DESC
*/
@Data
public class AllPartyResultDTO implements Serializable {
private static final long serialVersionUID = -5889648842876122793L;
/**
* 排序
**/
private Integer ranking;
/**
* 积分
**/
private Integer point;
/**
* 头像
**/
private String userHeadPhoto;
/**
* 名称
**/
private String realName;
/**
* 用户id
**/
private String userId;
public AllPartyResultDTO() {
this.point = NumConstant.ZERO;
this.userHeadPhoto = "";
this.realName = "";
this.userId = "";
}
}

12
epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/GroupPointRankingResultDTO.java

@ -35,4 +35,16 @@ public class GroupPointRankingResultDTO implements Serializable {
* 小组ID
*/
private String groupId;
/** 头像 */
private String groupHeadPhoto;
/** 类型 branch 支部小组;o */
private String groupType;
/** 所属网格id */
private String gridId;
/** 所属网格名称 */
private String gridNamePath;
}

43
epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/controller/GroupPointController.java

@ -1,6 +1,7 @@
package com.epmet.controller;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
@ -10,16 +11,20 @@ import com.epmet.dto.result.GroupPointRankingResultDTO;
import com.epmet.dto.result.GroupPointRuleResultDTO;
import com.epmet.dto.result.PointRankingResultDTO;
import com.epmet.resi.group.dto.group.result.GroupPointDetailResultDTO;
import com.epmet.resi.group.enums.SearchScopeTypeEnum;
import com.epmet.service.BizPointTotalDetailService;
import com.epmet.service.BizPointUserTotalDetailService;
import com.epmet.service.PointRuleService;
import com.epmet.utils.ModuleConstant;
import com.github.pagehelper.PageInfo;
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 javax.validation.constraints.NotBlank;
import java.lang.management.MemoryManagerMXBean;
import java.util.List;
/**
@ -113,4 +118,42 @@ public class GroupPointController {
return new Result<BizPointTotalDetailDTO>().ok(result);
}
/**
* @description 小组排名- 网格范围内
*
* @param formDTO
* @return
* @author wxz
* @date 2021.09.07 13:35:45
*/
@PostMapping("grouppointranking/gridscope")
public Result<PageData<GroupPointRankingResultDTO>> listGroupPointRandingInGridScope(@RequestBody GroupPointFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, GroupPointFormDTO.GridScopeRank.class);
String gridId = formDTO.getGridId();
Integer pageNo = formDTO.getPageNo();
Integer pageSize = formDTO.getPageSize();
PageData<GroupPointRankingResultDTO> page = bizPointTotalDetailService.listGroupPointRandingInGridScope(SearchScopeTypeEnum.GRID, gridId,pageNo, pageSize);
return new Result<PageData<GroupPointRankingResultDTO>>().ok(page);
}
/**
* @description 小组排名- 客户范围内
*
* @param formDTO
* @return
* @author wxz
* @date 2021.09.08 09:18:37
*/
@PostMapping("grouppointranking/customerscope")
public Result<PageData<GroupPointRankingResultDTO>> listGroupPointRandingInCustomerScope(@RequestBody GroupPointFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, GroupPointFormDTO.CustomerScopeRank.class);
String customerId = formDTO.getCustomerId();
Integer pageNo = formDTO.getPageNo();
Integer pageSize = formDTO.getPageSize();
PageData<GroupPointRankingResultDTO> page = bizPointTotalDetailService.listGroupPointRandingInGridScope(SearchScopeTypeEnum.CUSTOMER, customerId, pageNo, pageSize);
return new Result<PageData<GroupPointRankingResultDTO>>().ok(page);
}
}

12
epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/controller/ResiPointController.java

@ -159,6 +159,18 @@ public class ResiPointController {
return new Result<List<ResiAroundPartyPointRankResultDTO>>().ok(resultDTOS);
}
/**
* @Description 全部党员积分排行
* @Param formDTO
* @author zxc
* @date 2021/9/6 3:30 下午
*/
@PostMapping("allparty")
public Result<List<AllPartyResultDTO>> allParty(@RequestBody AllPartyFormDTO formDTO,@LoginUser TokenDto tokenDto){
formDTO.setCustomerId(tokenDto.getCustomerId());
return new Result<List<AllPartyResultDTO>>().ok(userPointStatisticalDailyService.allParty(formDTO));
}
/**
* @return com.epmet.commons.tools.utils.Result<java.util.List<com.epmet.dto.result.MyPointTaskResultDTO>>
* @param tokenDto

3
epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/UserPointStatisticalDailyDao.java

@ -19,6 +19,7 @@ package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.form.ResiAroundPartyPointRankFormDTO;
import com.epmet.dto.result.AllPartyResultDTO;
import com.epmet.dto.result.ResiAroundPartyPointRankResultDTO;
import com.epmet.dto.result.ResiPointRankResultDTO;
import com.epmet.entity.UserPointStatisticalDailyEntity;
@ -73,6 +74,7 @@ public interface UserPointStatisticalDailyDao extends BaseDao<UserPointStatistic
* @Date 09:24 2020-12-29
**/
List<ResiAroundPartyPointRankResultDTO> selectListGridPartyRankByUsablePoint(ResiAroundPartyPointRankFormDTO formDTO);
List<AllPartyResultDTO> selectListGridPartyNewRankByUsablePoint(ResiAroundPartyPointRankFormDTO formDTO);
/**
* 身边党员-积分排行 按网格统计对本月党员增加的积分 进行排序
@ -82,4 +84,5 @@ public interface UserPointStatisticalDailyDao extends BaseDao<UserPointStatistic
* @Date 09:24 2020-12-29
**/
List<ResiAroundPartyPointRankResultDTO> selectListGridPartyRankByMonth(ResiAroundPartyPointRankFormDTO formDTO);
List<AllPartyResultDTO> selectListGridPartyNewRankByMonth(ResiAroundPartyPointRankFormDTO formDTO);
}

14
epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/BizPointTotalDetailService.java

@ -24,6 +24,7 @@ import com.epmet.dto.form.GroupPointFormDTO;
import com.epmet.resi.group.dto.group.result.GroupPointDetailResultDTO;
import com.epmet.dto.result.GroupPointRankingResultDTO;
import com.epmet.entity.BizPointTotalDetailEntity;
import com.epmet.resi.group.enums.SearchScopeTypeEnum;
import java.util.List;
import java.util.Map;
@ -135,4 +136,17 @@ public interface BizPointTotalDetailService extends BaseService<BizPointTotalDet
* @return com.epmet.dto.BizPointTotalDetailDTO
*/
BizPointTotalDetailDTO getGroupPoint(GroupPointFormDTO formDTO);
/**
* @description 网格范围内查询小组排名
*
* @param searchScopeType 搜索小组的范围类型:GroupFormDTO.SearchScopeTypeEnum.GRID/GroupFormDTO.SearchScopeTypeEnum.CUSTOMER
* @param searchScopeId 搜索小组的范围id
* @param pageNo 页码默认0
* @param pageSize 单页条数默认10
* @return
* @author wxz
* @date 2021.09.07 14:18:08
*/
PageData<GroupPointRankingResultDTO> listGroupPointRandingInGridScope(SearchScopeTypeEnum searchScopeType, String searchScopeId, Integer pageNo, Integer pageSize);
}

10
epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/UserPointStatisticalDailyService.java

@ -20,8 +20,10 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dto.UserPointStatisticalDailyDTO;
import com.epmet.dto.form.AllPartyFormDTO;
import com.epmet.dto.form.ResiAroundPartyPointRankFormDTO;
import com.epmet.dto.form.ResiPointRankFormDTO;
import com.epmet.dto.result.AllPartyResultDTO;
import com.epmet.dto.result.ResiAroundPartyPointRankResultDTO;
import com.epmet.dto.result.ResiPointRankListResultDTO;
import com.epmet.entity.UserPointStatisticalDailyEntity;
@ -125,4 +127,12 @@ public interface UserPointStatisticalDailyService extends BaseService<UserPointS
* @Date 16:17 2020-12-28
**/
List<ResiAroundPartyPointRankResultDTO> listAroundPartyPointRank(ResiAroundPartyPointRankFormDTO formDTO);
/**
* @Description 全部党员积分排行
* @Param formDTO
* @author zxc
* @date 2021/9/6 3:30 下午
*/
List<AllPartyResultDTO> allParty(AllPartyFormDTO formDTO);
}

185
epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/BizPointTotalDetailServiceImpl.java

@ -17,31 +17,48 @@
package com.epmet.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.constant.NumConstant;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.common.bean.GridInfoCache;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dao.BizPointTotalDetailDao;
import com.epmet.dto.BizPointTotalDetailDTO;
import com.epmet.dto.CustomerGridDTO;
import com.epmet.dto.form.CustomerGridFormDTO;
import com.epmet.dto.form.GroupPointFormDTO;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.epmet.resi.group.dto.group.form.GroupFormDTO;
import com.epmet.resi.group.dto.group.form.GroupPointDetailFormDTO;
import com.epmet.resi.group.dto.group.result.GroupDetailResultDTO;
import com.epmet.resi.group.dto.group.result.GroupPointDetailResultDTO;
import com.epmet.dto.result.GroupPointRankingResultDTO;
import com.epmet.entity.BizPointTotalDetailEntity;
import com.epmet.resi.group.dto.group.ResiGroupDTO;
import com.epmet.resi.group.enums.SearchScopeTypeEnum;
import com.epmet.resi.group.feign.ResiGroupOpenFeignClient;
import com.epmet.service.BizPointTotalDetailService;
import com.epmet.service.BizPointUserTotalDetailService;
import com.epmet.service.UserPointActionLogService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -57,7 +74,7 @@ import java.util.stream.Collectors;
* @since v1.0.0 2021-04-20
*/
@Service
public class BizPointTotalDetailServiceImpl extends BaseServiceImpl<BizPointTotalDetailDao, BizPointTotalDetailEntity> implements BizPointTotalDetailService {
public class BizPointTotalDetailServiceImpl extends BaseServiceImpl<BizPointTotalDetailDao, BizPointTotalDetailEntity> implements BizPointTotalDetailService, ResultDataResolver {
@Autowired
private ResiGroupOpenFeignClient resiGroupOpenFeignClient;
@ -65,6 +82,10 @@ public class BizPointTotalDetailServiceImpl extends BaseServiceImpl<BizPointTota
private BizPointUserTotalDetailService bizPointUserTotalDetailService;
@Autowired
private UserPointActionLogService userPointActionLogService;
@Autowired
private RedisTemplate<String, ?> redisTemplate;
@Autowired
private GovOrgOpenFeignClient govOrgOpenFeignClient;
@Override
public PageData<BizPointTotalDetailDTO> page(Map<String, Object> params) {
@ -239,4 +260,166 @@ public class BizPointTotalDetailServiceImpl extends BaseServiceImpl<BizPointTota
return ConvertUtils.sourceToTarget(entity, BizPointTotalDetailDTO.class);
}
@Override
public PageData<GroupPointRankingResultDTO> listGroupPointRandingInGridScope(SearchScopeTypeEnum searchScopeType, String searchScopeId, Integer pageNo, Integer pageSize) {
// 1.查询有积分的小组得分排名
PageInfo<BizPointTotalDetailEntity> entityPageInfo = PageHelper.startPage(pageNo, pageSize).doSelectPageInfo(() -> {
LambdaQueryWrapper<BizPointTotalDetailEntity> query = new LambdaQueryWrapper<>();
if (SearchScopeTypeEnum.CUSTOMER == searchScopeType) {
query.eq(BizPointTotalDetailEntity::getCustomerId, searchScopeId);
} else if (SearchScopeTypeEnum.GRID == searchScopeType) {
query.eq(BizPointTotalDetailEntity::getGridId, searchScopeId);
}
query.eq(BizPointTotalDetailEntity::getBizType, "group");
query.orderByDesc(BizPointTotalDetailEntity::getTotalPoint);
baseDao.selectList(query);
});
List<BizPointTotalDetailEntity> groupList = entityPageInfo.getList();
List<String> groupIds = groupList.stream().map(g -> g.getObjectId()).collect(Collectors.toList());
// 2.将列表填充基本信息并且转换为dto
List<GroupPointRankingResultDTO> rankingInfoDTOs = convertGroupRankingInfoEntity2DTOs(groupIds, groupList);
Page page = new Page(pageNo, pageSize);
// 3.如果不满一页,则填充分数为0的
if (pageSize > groupIds.size()) {
// 查出网格下已有积分的小组id
LambdaQueryWrapper<BizPointTotalDetailEntity> query = new LambdaQueryWrapper<>();
if (SearchScopeTypeEnum.CUSTOMER == searchScopeType) {
query.eq(BizPointTotalDetailEntity::getCustomerId, searchScopeId);
} else if (SearchScopeTypeEnum.GRID == searchScopeType) {
query.eq(BizPointTotalDetailEntity::getGridId, searchScopeId);
}
query.eq(BizPointTotalDetailEntity::getBizType, "group");
query.select(BizPointTotalDetailEntity::getObjectId);
List<String> existingGroupIds = baseDao.selectObjs(query).stream().map(obj -> obj.toString()).collect(Collectors.toList());
int startRow = page.getStartRow() - existingGroupIds.size();
// 不足0的从0开始
startRow = Math.max(startRow, 0);
List<GroupPointRankingResultDTO> gap;
gap = fillGroupPageGap(existingGroupIds, searchScopeType, searchScopeId, startRow, pageSize - groupList.size());
rankingInfoDTOs.addAll(gap);
}
// 4.排名填充
Integer ranking = page.getStartRow() + 1;
for (GroupPointRankingResultDTO g : rankingInfoDTOs) {
GridInfoCache gridInfo = getGridInfo(g.getGridId());
g.setRanking(String.valueOf(ranking));
g.setGridId(g.getGridId());
g.setGridNamePath(gridInfo.getGridNamePath());
ranking ++;
}
PageData<GroupPointRankingResultDTO> pageData = new PageData<>(rankingInfoDTOs, entityPageInfo.getTotal());
return pageData;
}
/**
* @description 获取分页缺口group ranking信息
*
* @param startRow
* @param rowCount
* @return
* @author wxz
* @date 2021.09.07 16:30:28
*/
private List<GroupPointRankingResultDTO> fillGroupPageGap(List<String> existingGroupIds, SearchScopeTypeEnum searchScopeType, String searchScopeObjectId, Integer startRow, Integer rowCount) {
GroupFormDTO form = new GroupFormDTO();
form.setExcludeGroupIds(existingGroupIds);
form.setOrder(GroupFormDTO.OrderTypeEnum.DESC);
form.setSort(GroupFormDTO.SortTypeEnum.CREATE_TIME);
form.setStartRow(startRow);
form.setRowCount(rowCount);
form.setSearchScopeType(searchScopeType);
form.setSearchScopeObjectId(searchScopeObjectId);
Result<List<GroupDetailResultDTO>> result = resiGroupOpenFeignClient.listGroupDetailsExcludeGroupIds(form);
List<GroupDetailResultDTO> groups = getResultDataOrThrowsException(result, ServiceConstant.RESI_GROUP_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "【小组排名】查询积分为0的小组列表失败");
if (CollectionUtils.isEmpty(groups)) {
return new ArrayList<>();
}
return groups.stream().map(g -> {
GroupPointRankingResultDTO dto = new GroupPointRankingResultDTO();
dto.setGroupType(g.getGroupType());
dto.setPoint("0");
dto.setGroupHeadPhoto(g.getGroupHeadPhoto());
dto.setGroupName(g.getGroupName());
dto.setGroupId(g.getGroupId());
dto.setGridId(g.getGridId());
return dto;
}).collect(Collectors.toList());
}
/**
* @description 将小组排名Entity转化为dto
*
* @param groupList
* @return
* @author wxz
* @date 2021.09.07 15:52:17
*/
private List<GroupPointRankingResultDTO> convertGroupRankingInfoEntity2DTOs(List<String> groupIds, List<BizPointTotalDetailEntity> groupList) {
if (CollectionUtils.isEmpty(groupIds)) {
return new ArrayList<>();
}
// 查询这些小组的基本信息
Result<List<GroupDetailResultDTO>> listResult = resiGroupOpenFeignClient.listGroupDetailsByGroupIds(groupIds);
List<GroupDetailResultDTO> groupInfos = getResultDataOrThrowsException(listResult, ServiceConstant.RESI_GROUP_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "【小组排行】批量查询小组信息出错");
// 将小组基本信息转化为map
HashMap<String, GroupDetailResultDTO> groupMap = new HashMap<>();
groupInfos.stream().forEach(g -> groupMap.put(g.getGroupId(), g));
// 将小组信息填充到排名列表中
List<GroupPointRankingResultDTO> rankingDTOs = groupList.stream().map(g -> {
GroupDetailResultDTO groupInfo = groupMap.get(g.getObjectId());
GroupPointRankingResultDTO dto = new GroupPointRankingResultDTO();
dto.setGroupId(g.getObjectId());
dto.setGroupName(groupInfo.getGroupName());
dto.setGroupType(groupInfo.getGroupType());
dto.setPoint(g.getTotalPoint().toString());
dto.setGroupHeadPhoto(groupInfo.getGroupHeadPhoto());
dto.setGridId(g.getGridId());
return dto;
}).collect(Collectors.toList());
return rankingDTOs;
}
/**
* @description 查询网格信息
*
* @param gridId
* @return
* @author wxz
* @date 2021.09.08 11:17:17
*/
public GridInfoCache getGridInfo(String gridId) {
HashOperations<String, String, Object> ope = redisTemplate.opsForHash();
Map<String, Object> entries = ope.entries(RedisKeys.getGridInfoKey(gridId));
if (entries.size() != 0) {
return BeanUtil.mapToBean(entries, GridInfoCache.class, true);
}
CustomerGridFormDTO form = new CustomerGridFormDTO();
form.setGridId(gridId);
Result<CustomerGridDTO> result = govOrgOpenFeignClient.getCustomerGridByGridId(form);
if (result == null || !result.success() || result.getData() == null) {
return null;
}
GridInfoCache cache = new GridInfoCache();
cache.setCustomerId(result.getData().getCustomerId());
cache.setGridId(result.getData().getId());
cache.setGridNamePath(result.getData().getGridName());
cache.setPid(result.getData().getPid());
cache.setPids(result.getData().getPids());
ope.putAll(RedisKeys.getGridInfoKey(gridId), BeanUtil.beanToMap(cache));
return cache;
}
}

34
epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/UserPointStatisticalDailyServiceImpl.java

@ -23,11 +23,13 @@ import com.epmet.common.enu.AroundPartyConstant;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dao.UserPointStatisticalDailyDao;
import com.epmet.dto.UserPointStatisticalDailyDTO;
import com.epmet.dto.form.AllPartyFormDTO;
import com.epmet.dto.form.ResiAroundPartyPointRankFormDTO;
import com.epmet.dto.form.ResiPointRankFormDTO;
import com.epmet.dto.result.*;
@ -45,6 +47,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
@ -292,6 +295,37 @@ public class UserPointStatisticalDailyServiceImpl extends BaseServiceImpl<UserPo
return resultDTOS;
}
/**
* @Description 全部党员积分排行
* @Param formDTO
* @author zxc
* @date 2021/9/6 3:30 下午
*/
@Override
public List<AllPartyResultDTO> allParty(AllPartyFormDTO formDTO) {
formDTO.setPageNo((formDTO.getPageNo() - NumConstant.ONE) * formDTO.getPageSize());
Result<List<PartymemberInfoDTO>> partyMemberInfosResult = resiPartyMemberOpenFeignClient.getPartyMemberInfoByCustomerId(formDTO.getCustomerId());
if (!partyMemberInfosResult.success()){
throw new RenException("查询客户下的党员失败......");
}
if (CollectionUtils.isEmpty(partyMemberInfosResult.getData())){
return new ArrayList<>();
}
List<PartymemberInfoDTO> partyMemberInfos = partyMemberInfosResult.getData();
List<String> userIds = partyMemberInfos.stream().map(m -> m.getUserId()).collect(Collectors.toList());
ResiAroundPartyPointRankFormDTO selDto = ConvertUtils.sourceToTarget(formDTO, ResiAroundPartyPointRankFormDTO.class);
selDto.setUserIds(userIds);
List<AllPartyResultDTO> resultDTOS = new ArrayList<>();
if (AroundPartyConstant.ALL.equals(formDTO.getType())){
resultDTOS = baseDao.selectListGridPartyNewRankByUsablePoint(selDto);
}else if (AroundPartyConstant.MONTHLY.equals(formDTO.getType())){
resultDTOS = baseDao.selectListGridPartyNewRankByMonth(selDto);
}
List<ResiAroundPartyPointRankResultDTO> partyBaseInfo = getPartyBaseInfo(ConvertUtils.sourceToTarget(resultDTOS, ResiAroundPartyPointRankResultDTO.class));
List<AllPartyResultDTO> result = ConvertUtils.sourceToTarget(partyBaseInfo, AllPartyResultDTO.class);
return result;
}
/**
* 获取认证通过的党员的 用户id
*

43
epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/UserPointStatisticalDailyDao.xml

@ -184,4 +184,47 @@
ORDER BY P.point DESC
LIMIT #{pageNo}, #{pageSize}
</select>
<select id="selectListGridPartyNewRankByUsablePoint" resultType="com.epmet.dto.result.AllPartyResultDTO">
SET @curRank = 0;
SELECT
@curRank := @curRank + 1 AS ranking,
@point := IFNULL(p.USABLE_POINT, 0),
IFNULL(p.USABLE_POINT, 0) point,
p.USER_ID userId
FROM user_point_total p
<if test="null != userIds and userIds.size() > 0">
WHERE p.USER_ID IN
<foreach collection="userIds" item="userId" open="(" separator="," close=" )">
#{userId}
</foreach>
</if>
ORDER BY IFNULL(p.USABLE_POINT, 0) DESC
LIMIT #{pageNo}, #{pageSize}
</select>
<select id="selectListGridPartyNewRankByMonth" resultType="com.epmet.dto.result.AllPartyResultDTO">
SET @curRank = 0;
SELECT
@curRank := @curRank + 1 AS ranking,
@point := p.point,
P.userId,
P.point
FROM(
SELECT
pl.USER_ID userId,
SUM(PL.POINT) point
FROM user_point_action_log pl
WHERE pl.DEL_FLAG = '0' AND DATE_FORMAT(pl.CREATED_TIME, '%Y%m')= DATE_FORMAT( CURDATE( ) , '%Y%m' ) AND pl.action_flag = 'plus'
GROUP BY pl.USER_ID
) P
<if test="null != userIds and userIds.size() > 0">
WHERE userId IN
<foreach collection="userIds" item="userId" open="(" separator="," close=" )">
#{userId}
</foreach>
</if>
ORDER BY P.point DESC
LIMIT #{pageNo}, #{pageSize}
</select>
</mapper>

6
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/constant/ThirdPlatformActions.java

@ -19,4 +19,10 @@ public interface ThirdPlatformActions {
*/
String UPLOAD_FILE = "UPLOAD_FILE";
/** 推送 微信component access token */
String PUSH_COMPONENT_ACCESS_TOKEN = "PUSH_COMPONENT_ACCESS_TOKEN";
/** 推送 微信 authorizer access token */
String PUSH_AUTHORIZER_ACCESS_TOKEN = "PUSH_AUTHORIZER_ACCESS_TOKEN";
}

19
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/ThirdPlatformActionsResultDTO.java

@ -0,0 +1,19 @@
package com.epmet.dto.result;
import lombok.Data;
/**
* @Description 第三方平台及其支持的action result
* @author wxz
* @date 2021.08.30 17:06:42
*/
@Data
public class ThirdPlatformActionsResultDTO {
private String platformId;
private String platformKey;
private String platformName;
private String actionKey;
private String apiUrl;
}

18
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/privateepmet/GetAccessTokenResultDTO.java

@ -0,0 +1,18 @@
package com.epmet.dto.result.privateepmet;
import lombok.Data;
/**
* @Description 获取accesstoken结果
* @author wxz
* @date 2021.08.30 17:40:25
*/
@Data
public class GetAccessTokenResultDTO {
// token
private String accessToken;
// 有效时长
private Long expireTime;
}

21
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/ThirdOpenFeignClient.java

@ -2,6 +2,8 @@ package com.epmet.feign;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.AuthorizerAccessTokenFormDTO;
import com.epmet.dto.form.ComponentAccessTokenFormDTO;
import com.epmet.dto.form.SaveOrUpdateCustSelPlatformFormDTO;
import com.epmet.dto.form.ThirdPlatformFormDTO;
import com.epmet.dto.result.ThirdplatformResultDTO;
@ -36,4 +38,23 @@ public interface ThirdOpenFeignClient {
@PostMapping("/third/thirdplatform/customer/list-available-platforms-by-action")
Result<List<ThirdplatformResultDTO>> listAvailablePlatformsByCustomerAndAction(@RequestBody ThirdPlatformFormDTO input);
/**
* @Description 私有化平台接收component-access推送
* @param input
* @return com.epmet.commons.tools.utils.Result
* @author wxz
* @date 2021.08.30 16:40:17
*/
@PostMapping("/third/private-epmet/push-component-access-token")
Result pushComponentAccessToken(@RequestBody ComponentAccessTokenFormDTO input);
/**
* @Description 接收推送AuthorizerTokens
* @param input
* @return com.epmet.commons.tools.utils.Result
* @author wxz
* @date 2021.08.30 16:36:02
*/
@PostMapping("/third/private-epmet/push-authorizer-tokens")
Result pushAuthorizerTokens(@RequestBody AuthorizerAccessTokenFormDTO input);
}

12
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/ThirdOpenFeignClientFallback.java

@ -3,6 +3,8 @@ package com.epmet.feign.fallback;
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.AuthorizerAccessTokenFormDTO;
import com.epmet.dto.form.ComponentAccessTokenFormDTO;
import com.epmet.dto.form.SaveOrUpdateCustSelPlatformFormDTO;
import com.epmet.dto.form.ThirdPlatformFormDTO;
import com.epmet.dto.result.ThirdplatformResultDTO;
@ -22,4 +24,14 @@ public class ThirdOpenFeignClientFallback implements ThirdOpenFeignClient {
public Result<List<ThirdplatformResultDTO>> listAvailablePlatformsByCustomerAndAction(ThirdPlatformFormDTO input) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "listAvailablePlatformsByCustomerAndAction", input);
}
@Override
public Result pushComponentAccessToken(ComponentAccessTokenFormDTO input) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "pushComponentAccessToken", input);
}
@Override
public Result pushAuthorizerTokens(AuthorizerAccessTokenFormDTO input) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "pushAuthorizerTokens", input);
}
}

5
epmet-module/epmet-third/epmet-third-server/pom.xml

@ -21,6 +21,11 @@
</properties>
<dependencies>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-openapi-sdk</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-third-client</artifactId>

246
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/apiservice/ApiService.java

@ -1,7 +1,8 @@
package com.epmet.apiservice;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.epmet.apiservice.result.LZGridPlatformBaseResult;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.utils.HttpClientManager;
@ -10,19 +11,21 @@ import com.epmet.commons.tools.utils.SpringContextUtils;
import com.epmet.dao.ThirdplatformActionDao;
import com.epmet.dao.ThirdplatformCustomerRegisterDao;
import com.epmet.dao.ThirdplatformDao;
import com.epmet.dto.form.ProjectApplyAssistFormDTO;
import com.epmet.dto.form.TPFDemoFormDTO;
import com.epmet.dto.form.UploadFileFormDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.ProjectAssistResult;
import com.epmet.dto.result.UploadFileResultDTO;
import com.epmet.entity.ThirdplatformActionEntity;
import com.epmet.entity.ThirdplatformCustomerRegisterEntity;
import com.epmet.entity.ThirdplatformEntity;
import com.epmet.redis.ThirdPlatformCache;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@ -32,7 +35,7 @@ import java.util.concurrent.TimeUnit;
* 此抽象类中定义方法的具体返回类型所有子类都要统一使用在具体实现中做转换若是不需要返回返回null即可
*/
@Slf4j
public abstract class ApiService {
public abstract class ApiService<R> {
/**
* 重试次数
*/
@ -61,13 +64,13 @@ public abstract class ApiService {
* @param headers
* @return
*/
public String sendGetRequest(String platformId, String action, Map<String, Object> params, Map<String, Object> headers) {
public R sendGetRequest(String platformId, String action, Map<String, Object> params, Map<String, Object> headers) {
// 1.获取token
String accessToken = getAccessToken(platformId);
//2.获取url
ThirdplatformEntity thirdplatform = SpringContextUtils.getBean(ThirdplatformDao.class).selectById(platformId);
ThirdplatformActionEntity actionEntity = SpringContextUtils.getBean(ThirdplatformActionDao.class)
.getByPlatformIdAndActionKey(platformId, action);
ThirdPlatformCache thirdPlatformInfo = getThirdPlatformInfo(platformId);
String actionUrl = getThirdPlatformActionUrl(platformId, action);
if (headers == null) {
headers = new HashMap<>();
@ -76,8 +79,8 @@ public abstract class ApiService {
// 填充access token到头当中
headers.put("X-Access-Token", accessToken);
log.info("apiService sendGetRequest param:{},headers:{}",params,headers);
Result<String> result = HttpClientManager.getInstance().sendGet(thirdplatform.getBaseUrl().concat(actionEntity.getApiUrl()),
thirdplatform.getBaseUrl().startsWith("https://"),
Result<String> result = HttpClientManager.getInstance().sendGet(thirdPlatformInfo.getBaseUrl().concat(actionUrl),
thirdPlatformInfo.getBaseUrl().startsWith("https://"),
params,
headers);
log.info("apiService sendGetRequest result:{}",JSON.toJSONString(result));
@ -87,37 +90,51 @@ public abstract class ApiService {
if (result.success()) {
throw new RenException("请求第三方平台,获取AccessToken失败。");
}
LZGridPlatformBaseResult platformResult = JSON.parseObject(result.getData(), LZGridPlatformBaseResult.class);
judgeResultSuccess(platformResult);
return result.getData();
return parsePlatformResponseResult(result.getData(), String.class);
}
/**
* @Description
accesstoken header名称如果不需要AccessToken与getAccessToken()方法共同返回null即可
* @return java.lang.String
* @author wxz
* @date 2021.08.30 14:06:26
*/
public abstract String getAccessTokenHeaderName();
/**
* 发送post请求
* @param platformId
* @param action
* @param jsonString
* @param headers
* @return
* @return 平台对应返回值的Result类
*/
public String sendPostRequest(String platformId, String action, String jsonString, Map<String, Object> headers) {
public R sendPostRequest(String platformId, String action, String jsonString, Map<String, Object> headers, Map<String, String> urlParams) {
// 1.获取token
String accessToken = getAccessToken(platformId);
//2.获取url
ThirdplatformEntity thirdplatform = SpringContextUtils.getBean(ThirdplatformDao.class).selectById(platformId);
ThirdplatformActionEntity actionEntity = SpringContextUtils.getBean(ThirdplatformActionDao.class)
.getByPlatformIdAndActionKey(platformId, action);
ThirdPlatformCache platformFromCache = getThirdPlatformInfo(platformId);
String actionUrl = getThirdPlatformActionUrl(platformId, action);
if (headers == null) {
headers = new HashMap<>();
}
// 填充access token到头当中
headers.put("X-Access-Token", accessToken);
if (StringUtils.isNotBlank(accessToken)) {
//headers.put("X-Access-Token", accessToken);
String accessTokenHeaderName = getAccessTokenHeaderName();
if (StringUtils.isBlank(accessTokenHeaderName)) {
throw new RenException("没有指定AccessToken的Header名字");
}
headers.put(accessTokenHeaderName, accessToken);
}
log.info("apiService sendPostRequest param:{},headers:{}",jsonString,headers);
Result<String> result = HttpClientManager.getInstance().sendPost(thirdplatform.getBaseUrl().concat(actionEntity.getApiUrl()),
thirdplatform.getBaseUrl().startsWith("https://"),
String urlParmsStr = this.convertQueryParams2String(urlParams);
Result<String> result = HttpClientManager.getInstance().sendPost(platformFromCache.getBaseUrl().concat(actionUrl).concat(urlParmsStr),
platformFromCache.getBaseUrl().startsWith("https://"),
jsonString,
headers);
log.info("apiService sendPostRequest result:{}",JSON.toJSONString(result));
@ -128,12 +145,10 @@ public abstract class ApiService {
throw new RenException("请求第三方平台,发送Post请求失败。错误信息:" + result.getMsg());
}
LZGridPlatformBaseResult platformResult = JSON.parseObject(result.getData(), LZGridPlatformBaseResult.class);
judgeResultSuccess(platformResult);
return result.getData();
return parsePlatformResponseResult(result.getData(), String.class);
}
public String sendPostRequestToUploadFile(String platformId, String action, File file, String fileName) {
public R sendPostRequestToUploadFile(String platformId, String action, File file, String fileName) {
// 1.获取token
String accessToken = getAccessToken(platformId);
//2.获取url
@ -159,8 +174,6 @@ public abstract class ApiService {
throw new RenException("请求第三方平台,发送Post请求失败。错误信息:" + result.getMsg());
}
LZGridPlatformBaseResult platformResult = JSON.parseObject(result.getData(), LZGridPlatformBaseResult.class);
// token过期重试逻辑,先不加
//if ("402".equals(platformResult.getCode())) {
// // 如果token过期
@ -168,8 +181,37 @@ public abstract class ApiService {
// getAccessToken(platformId);
// return sendPostRequest(platformId, action, jsonString, headers);
//}
judgeResultSuccess(platformResult);
return result.getData();
return parsePlatformResponseResult(result.getData(), String.class);
}
/**
* @Description 将url参数拼接为字符串
* @param queryParams
* @return java.lang.String
* @author wxz
* @date 2021.08.31 14:08:17
*/
protected String convertQueryParams2String(Map<String, String> queryParams) {
try {
if (queryParams == null || queryParams.size() == 0) {
return "";
}
StringBuilder sb = new StringBuilder("");
queryParams.entrySet().forEach(entry -> {
String key = entry.getKey();
String value = entry.getValue();
sb.append("&").append(key).append("=").append(value);
});
String result = sb.toString();
if (result.startsWith("&")) {
result = result.substring(1);
return "?".concat(result);
}
return "";
} catch (Exception e) {
log.warn("gateway中将url参数转化为String失败,程序继续执行,错误信息:".concat(ExceptionUtils.getErrorStackTrace(e)));
return "";
}
}
/**
@ -202,6 +244,36 @@ public abstract class ApiService {
stringRedisTemplate.opsForValue().set(RedisKeys.getThirdPlatformAccessTokenKey(platformId), accessToken, expire, timeUnit);
}
/**
* @Description 将第三方平台信息存入缓存
* @param cache
* @return void
* @author wxz
* @date 2021.08.31 14:55:48
*/
protected void addPlatformToCache(ThirdPlatformCache cache) {
RedisTemplate<String, String> stringRedisTemplate = SpringContextUtils.getBean("redisTemplate", RedisTemplate.class);
Map<String, Object> stringObjectMap = BeanUtil.beanToMap(cache);
stringRedisTemplate.opsForHash().putAll(RedisKeys.getThirdPlatformInfoKey(cache.getPlatformId()), stringObjectMap);
}
/**
* @Description 从缓存中取第三方平台信息
* @param thirdPlatformKey
* @return com.epmet.redis.ThirdPlatformCache
* @author wxz
* @date 2021.08.31 14:55:28
*/
protected ThirdPlatformCache getPlatformFromCache(String thirdPlatformKey) {
HashOperations<String, String, Object> hashOperations = SpringContextUtils.getBean("redisTemplate", RedisTemplate.class).opsForHash();
Map<String, Object> entries = hashOperations.entries(RedisKeys.getThirdPlatformInfoKey(thirdPlatformKey));
if (entries.size() == 0) {
return null;
}
ThirdPlatformCache thirdPlatformCache = BeanUtil.mapToBean(entries, ThirdPlatformCache.class, true);
return thirdPlatformCache;
}
/**
* @Description 从缓存中取token
* @return
@ -210,7 +282,87 @@ public abstract class ApiService {
*/
protected String getAccessTokenFromCache(String platformId) {
RedisTemplate<String, String> stringRedisTemplate = SpringContextUtils.getBean("redisTemplate", RedisTemplate.class);
return stringRedisTemplate.opsForValue().get(platformId);
return stringRedisTemplate.opsForValue().get(RedisKeys.getThirdPlatformAccessTokenKey(platformId));
}
/**
* @Description 从缓存查询第三方平台操作url
* @param platformId
* @param action
* @return java.lang.String
* @author wxz
* @date 2021.08.31 15:18:06
*/
protected String getThirdPlatformActionUrlFromCache(String platformId, String action) {
HashOperations<String, String, String> ops = SpringContextUtils.getBean("redisTemplate", RedisTemplate.class).opsForHash();
String url = ops.get(RedisKeys.getThirdPlatformActionUrlKey(platformId), action);
return url;
}
/**
* @Description 将第三方平台操作url添加至缓存
* @param platformId
* @param map
* @return java.lang.String
* @author wxz
* @date 2021.08.31 15:20:45
*/
protected void addThirdPlatformActionUrlsToCache(String platformId, Map<String, Object> map) {
String redisKey = RedisKeys.getThirdPlatformActionUrlKey(platformId);
RedisTemplate redisTemplate = SpringContextUtils.getBean("redisTemplate", RedisTemplate.class);
HashOperations<String, String, Object> ops = redisTemplate.opsForHash();
ops.putAll(redisKey, map);
}
/**
* @Description 从缓存里面读取平台信息如果缓存中没有从db读取放入缓存
* @param platformId 平台id
* @return com.epmet.redis.ThirdPlatformCache
* @author wxz
* @date 2021.08.31 15:02:19
*/
protected ThirdPlatformCache getThirdPlatformInfo(String platformId) {
ThirdPlatformCache platform = getPlatformFromCache(platformId);
if (platform == null) {
platform = new ThirdPlatformCache();
ThirdplatformEntity platformEntity = SpringContextUtils.getBean(ThirdplatformDao.class).selectById(platformId);
platform.setPlatformId(platformEntity.getId());
platform.setApiService(platformEntity.getApiService());
platform.setBaseUrl(platformEntity.getBaseUrl());
platform.setPlatformKey(platformEntity.getPlatformKey());
platform.setPlatformName(platformEntity.getPlatformName());
platform.setPlatformSecret(platformEntity.getPlatformSecret());
addPlatformToCache(platform);
}
return platform;
}
/**
* @Description 获取第三放平台操作url优先读取缓存没有则读取db
* @param platformId
* @param actionKey
* @return java.util.Map<java.lang.String,java.lang.String>
* @author wxz
* @date 2021.08.31 15:21:39
*/
protected String getThirdPlatformActionUrl(String platformId, String actionKey) {
String url = getThirdPlatformActionUrlFromCache(platformId, actionKey);
if (StringUtils.isBlank(url)) {
List<ThirdplatformActionEntity> actions = SpringContextUtils.getBean(ThirdplatformActionDao.class)
.listPlatformActions(platformId);
Map<String, Object> map = new HashMap<>(actions.size());
// 将action:url映射至map
for (ThirdplatformActionEntity a : actions) {
map.put(a.getActionKey(), a.getApiUrl());
if (actionKey.equals(a.getActionKey())) {
url = a.getApiUrl();
}
}
addThirdPlatformActionUrlsToCache(platformId, map);
}
return url;
}
/**
@ -246,16 +398,38 @@ public abstract class ApiService {
}
/**
* @Description 判断第三方平台返回结果成功失败如果失败则抛出异常
* @return
* @Description 解析第三方平台返回结果
* @param resultString
* @param clazz R的泛型对象T的clazz
* @return R 泛型不同平台的Result DTO类型
* @author wxz
* @date 2021.03.22 10:32
*/
public abstract void judgeResultSuccess(LZGridPlatformBaseResult result);
* @date 2021.08.31 13:36:11
*/
public abstract <T> R parsePlatformResponseResult(String resultString, Class<T> clazz);
public UploadFileResultDTO uploadFile(UploadFileFormDTO formDTO) {
return null;
}
/**
* @Description 推送ComponentAccessToken
* @param form
* @return void 保持空实现让子类去实现
* @author wxz
* @date 2021.08.30 17:15:01
*/
public void pushComponentAccessToken(ComponentAccessTokenFormDTO form, String platformId, String platformKey) {}
/**
* @description 推送小程序token
*
* @param form
* @param platformId
* @param platformKey
* @return
* @author wxz
* @date 2021.08.31 20:26:51
*/
public void pushAuthorizerAccessToken(AuthorizerAccessTokenFormDTO form, String platformId, String platformKey) {};
}

18
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/apiservice/impl/DemoApiService.java

@ -14,10 +14,15 @@ import org.springframework.stereotype.Component;
* demo api service
*/
@Component(value = "demoApiService")
public class DemoApiService extends ApiService {
public class DemoApiService extends ApiService<String> {
Logger logger = LoggerFactory.getLogger(DemoApiService.class);
@Override
public String getAccessTokenHeaderName() {
return null;
}
@Override
public String getAccessToken(String platformId) {
return null;
@ -29,8 +34,15 @@ public class DemoApiService extends ApiService {
return null;
}
/**
* @Description 解析平台返回结果
* @param resultString 平台返回结果string
* @return java.lang.String
* @author wxz
* @date 2021.08.30 22:43:24
*/
@Override
public void judgeResultSuccess(LZGridPlatformBaseResult result) {
public <T> String parsePlatformResponseResult(String resultString, Class<T> clazz) {
return null;
}
}

49
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/apiservice/impl/LuzhouGridPlatformApiService.java

@ -31,7 +31,12 @@ import java.util.concurrent.TimeUnit;
*/
@Slf4j
@Component("luzhouGridPlatformApiService")
public class LuzhouGridPlatformApiService extends ApiService {
public class LuzhouGridPlatformApiService extends ApiService<LZGridPlatformBaseResult> {
@Override
public String getAccessTokenHeaderName() {
return "X-Access-Token";
}
@Override
public String getAccessToken(String platformId) {
@ -58,11 +63,8 @@ public class LuzhouGridPlatformApiService extends ApiService {
throw new RenException("请求第三方平台,获取AccessToken失败。");
}
LZGridPlatformBaseResult<String> platformResult = JSON.parseObject(result.getData(), LZGridPlatformBaseResult.class);
judgeResultSuccess(platformResult);
token = platformResult.getResult();
addAccessTokenToCache(platformId, token, (long)(3600*1.8*1000), TimeUnit.MILLISECONDS);
LZGridPlatformBaseResult<String> lzGridPlatformBaseResult = parsePlatformResponseResult(result.getData(), String.class);
addAccessTokenToCache(platformId, lzGridPlatformBaseResult.getResult(), (long)(3600*1.8*1000), TimeUnit.MILLISECONDS);
}
return token;
}
@ -83,30 +85,24 @@ public class LuzhouGridPlatformApiService extends ApiService {
// 正式调用第三方平台
String argsStr = JSON.toJSONString(formDTO);
String result = sendPostRequest(platformId, ThirdPlatformActions.PROJECT_ASSIST, argsStr, null);
LZGridPlatformBaseResult<String> result = sendPostRequest(platformId, ThirdPlatformActions.PROJECT_ASSIST, argsStr, null, null);
// 开发阶段临时写死
//String result = "{\"eventId\":\"test-task-id\"}";
ProjectAssistResult projectAssistResult = new ProjectAssistResult();
if (!StringUtils.isBlank(result)) {
// 此处要经过一系列业务处理,将第三方平台返回的数据进行解析,等处理最后转换成ProjectAssistResult类型,返回。ProjectAssistResult这个类型是
// 所有apiService的projectAssist方法返回值的统一类型,是我们的epmet-cloud所需要的数据的实体,
// 所有apiService都要想办法转化成这个类型。
LZGridPlatformBaseResult<String> lzResult = JSON.parseObject(result, LZGridPlatformBaseResult.class);
// 此处设置为第三方系统返回的唯一id
projectAssistResult.setTaskId(lzResult.getResult());
}
// 此处设置为第三方系统返回的唯一id
projectAssistResult.setTaskId(result.getResult());
log.info("projectAssist 泸州网格化平台项目协助发送成功");
return projectAssistResult;
}
@Override
public void judgeResultSuccess(LZGridPlatformBaseResult result) {
//LZGridPlatformBaseResult;
if (!"200".equalsIgnoreCase(result.getCode())) {
throw new RenException("泸州网格化平台:返回失败结果,错误码:" + result.getCode());
public <T> LZGridPlatformBaseResult<T> parsePlatformResponseResult(String resultString, Class<T> clazz) {
LZGridPlatformBaseResult<T> baseResult = JSON.parseObject(resultString, LZGridPlatformBaseResult.class);
if (!"200".equalsIgnoreCase(baseResult.getCode())) {
throw new RenException("泸州网格化平台:返回失败结果,错误码:" + baseResult.getCode());
}
return baseResult;
}
@Override
@ -118,16 +114,9 @@ public class LuzhouGridPlatformApiService extends ApiService {
// 正式调用第三方平台
File file = new File(formDTO.getFile().getOriginalFilename());
FileUtils.copyInputStreamToFile(formDTO.getFile().getInputStream(), file);
String result = sendPostRequestToUploadFile(platformId, ThirdPlatformActions.UPLOAD_FILE, file, fileName);
if (!StringUtils.isBlank(result)) {
// 此处要经过一系列业务处理,将第三方平台返回的数据进行解析,等处理最后转换成ProjectAssistResult类型,返回。ProjectAssistResult这个类型是
// 所有apiService的projectAssist方法返回值的统一类型,是我们的epmet-cloud所需要的数据的实体,
// 所有apiService都要想办法转化成这个类型。
LZGridPlatformBaseResult lzResult = JSON.parseObject(result, LZGridPlatformBaseResult.class);
// 此处设置为第三方系统返回的唯一id
resultDTO.setUrl((String) lzResult.getResult());
}
LZGridPlatformBaseResult<String> baseResult = sendPostRequestToUploadFile(platformId, ThirdPlatformActions.UPLOAD_FILE, file, fileName);
// 此处设置为第三方系统返回的唯一id
resultDTO.setUrl(baseResult.getResult());
System.out.println("泸州网格化平台项目文件上传成功");
} catch (Exception e) {
throw new RenException("上传失败");

169
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/apiservice/impl/PingyinPrivateEpmetApiService.java

@ -0,0 +1,169 @@
package com.epmet.apiservice.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.epmet.apiservice.ApiService;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.HttpClientManager;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.ThirdPlatformActions;
import com.epmet.dto.form.AuthorizerAccessTokenFormDTO;
import com.epmet.dto.form.ComponentAccessTokenFormDTO;
import com.epmet.dto.result.privateepmet.GetAccessTokenResultDTO;
import com.epmet.openapi.sdk.sign.OpenApiSignUtils;
import com.epmet.redis.ThirdPlatformCache;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
@Component("pingyinPrivateEpmetApiService")
@Slf4j
public class PingyinPrivateEpmetApiService extends ApiService<Result> implements ResultDataResolver {
// 认证方式
private String authType = "take_token";
@Override
public String getAccessTokenHeaderName() {
return "AccessToken";
}
@Override
public String getAccessToken(String platformId) {
String accessTokenFromCache = super.getAccessTokenFromCache(platformId);
if (StringUtils.isBlank(accessTokenFromCache)) {
ThirdPlatformCache thirdPlatformInfo = super.getThirdPlatformInfo(platformId);
String apiUrl = getThirdPlatformActionUrl(platformId, ThirdPlatformActions.GET_ACCESS_TOKEN);
String baseUrl = thirdPlatformInfo.getBaseUrl();
String platformKey = thirdPlatformInfo.getPlatformKey();
String platformSecret = thirdPlatformInfo.getPlatformSecret();
String uuid = UUID.randomUUID().toString();
long currentTimeMillis = System.currentTimeMillis();
try {
String sign = createSign(platformKey, platformSecret, uuid, currentTimeMillis, authType, null);
log.info("【调用平阴私有化平台获取AccessToken】参数列表:sign:{}, app_id:{}, auth_type:{}, nonce:{}, timestamp:{}", sign, platformKey, platformSecret, uuid, currentTimeMillis);
String urlParams = super.convertQueryParams2String(constructCommonUrlParamsMap(platformKey, authType, uuid, currentTimeMillis, sign));
String requestUrl = baseUrl.concat(apiUrl).concat(urlParams);
Result<String> stringResult = HttpClientManager.getInstance().sendPostByHttps(requestUrl, "{}");
String remoteResultString = getResultDataOrThrowsException(stringResult, "【调用平阴私有化平台获取AccessToken】", EpmetErrorCode.SERVER_ERROR.getCode(), null);
Result<GetAccessTokenResultDTO> remoteResult = parsePlatformResponseResult(remoteResultString, GetAccessTokenResultDTO.class);
log.info("【调用平阴私有化平台获取AccessToken】结果:{}", remoteResultString);
accessTokenFromCache = remoteResult.getData().getAccessToken();
//(15 * 60 * 1000)为提前获取token。对方token有效期2小时,我们设置有效期为1小时45分钟,留15分钟容错时间,防止时间差
long expire = remoteResult.getData().getExpireTime() - System.currentTimeMillis() - (15 * 60 * 1000);
super.addAccessTokenToCache(platformId, accessTokenFromCache, expire, TimeUnit.MILLISECONDS);
} catch (Exception e) {
throw new RenException(ExceptionUtils.getErrorStackTrace(e));
}
}
return accessTokenFromCache;
}
/**
* @Description 创建签名
* @param platformKey
* @param platformSecret
* @param nonce
* @param timeMillis
* @param authType
* @return java.lang.String
* @author wxz
* @date 2021.08.31 15:37:58
*/
private String createSign(String platformKey, String platformSecret, String nonce, Long timeMillis, String authType, Map<String, String> requestBodyMap) {
HashMap<String, String> contentMap = new HashMap<>();
contentMap.put("app_id", platformKey);
contentMap.put("auth_type", authType);
contentMap.put("nonce", nonce);
contentMap.put("timestamp", String.valueOf(timeMillis));
if (requestBodyMap != null && requestBodyMap.size() > 0) {
contentMap.putAll(requestBodyMap);
}
String sign;
try {
sign = OpenApiSignUtils.createSign(contentMap, platformSecret);
} catch (Exception e) {
String detail = ExceptionUtils.getErrorStackTrace(e);
log.error(detail);
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), "【平阴私有化平台apService】创建签名失败");
}
return sign;
}
/**
* @Description 构造url参数map
* @param platformKey
* @param authType
* @param nonce
* @param timeMillis
* @param sign
* @return java.util.Map<java.lang.String,java.lang.String>
* @author wxz
* @date 2021.08.31 14:19:41
*/
private Map<String, String> constructCommonUrlParamsMap(String platformKey, String authType, String nonce, Long timeMillis, String sign) {
HashMap<String, String> map = new HashMap<>();
map.put("app_id", platformKey);
map.put("auth_type", authType);
map.put("nonce", nonce);
map.put("timestamp", String.valueOf(timeMillis));
map.put("sign", sign);
return map;
}
@Override
public <T> Result<T> parsePlatformResponseResult(String resultString, Class<T> clazz) {
Result<T> result;
try {
result = JSON.parseObject(resultString, new TypeReference<Result<T>>(clazz){});
} catch (Exception e) {
String errorStackTrace = ExceptionUtils.getErrorStackTrace(e);
log.error(errorStackTrace);
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), "【调用平阴私有化服务器,解析返回结果失败】");
}
if (!result.success()) {
throw new RenException(String.format("【请求平阴私有化平台】失败,返回结果string:%s", resultString));
}
return result;
}
@Override
public void pushComponentAccessToken(ComponentAccessTokenFormDTO form, String platformId, String platformKey) {
ThirdPlatformCache thirdPlatformInfo = getThirdPlatformInfo(platformId);
String nonce = UUID.randomUUID().toString();
long timeMillis = System.currentTimeMillis();
Map<String, String> bodyMap = null;
try {
bodyMap = ConvertUtils.entityToMap(form);
} catch (Exception e) {
String detail = ExceptionUtils.getErrorStackTrace(e);
log.error(detail);
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), "【推送ComponentAccessToken】requestBody转化为map失败");
}
String sign = createSign(platformKey, thirdPlatformInfo.getPlatformSecret(), nonce, timeMillis, authType, bodyMap);
Map<String, String> urlParams = constructCommonUrlParamsMap(platformKey, authType, nonce, timeMillis, sign);
String jsonString = JSON.toJSONString(form);
Result result = super.sendPostRequest(platformId, ThirdPlatformActions.PUSH_COMPONENT_ACCESS_TOKEN, jsonString, null, urlParams);
getResultDataOrThrowsException(result, "【平阴私有化平台】推送ComponentAccessToken", EpmetErrorCode.SERVER_ERROR.getCode(), null);
}
@Override
public void pushAuthorizerAccessToken(AuthorizerAccessTokenFormDTO form, String platformId, String platformKey) {
}
}

50
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PrivateEpmetController.java

@ -0,0 +1,50 @@
package com.epmet.controller;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.AuthorizerAccessTokenFormDTO;
import com.epmet.dto.form.ComponentAccessTokenFormDTO;
import com.epmet.service.PrivateEpmetService;
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;
/**
* @Description 私有化平台相关controller
* @author wxz
* @date 2021.08.30 15:18:51
*/
@RestController
@RequestMapping("/private-epmet")
public class PrivateEpmetController {
@Autowired
private PrivateEpmetService privateEpmetService;
/**
* @Description 接收推送component access
* @param input
* @return com.epmet.commons.tools.utils.Result
* @author wxz
* @date 2021.08.30 15:18:57
*/
@PostMapping("push-component-access-token")
public Result pushComponentAccessToken(@RequestBody ComponentAccessTokenFormDTO input) {
privateEpmetService.pushComponentAccessToken(input);
return new Result();
}
/**
* @Description 接收推送AuthorizerTokens
* @param input
* @return com.epmet.commons.tools.utils.Result
* @author wxz
* @date 2021.08.30 16:36:02
*/
@PostMapping("push-authorizer-tokens")
public Result pushAuthorizerTokens(@RequestBody AuthorizerAccessTokenFormDTO input) {
privateEpmetService.pushAuthorizerTokens(input);
return new Result();
}
}

30
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/TestConttroller.java

@ -0,0 +1,30 @@
package com.epmet.controller;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.ComponentAccessTokenFormDTO;
import com.epmet.service.ComponentVerifyTicketService;
import com.epmet.service.PrivateEpmetService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@RestController
@RequestMapping("test")
public class TestConttroller {
@Autowired
private ComponentVerifyTicketService componentVerifyTicketService;
@PostMapping("push-component-access-token")
public Result testPushComponentAccessToken() {
ComponentAccessTokenFormDTO form = new ComponentAccessTokenFormDTO();
form.setComponentAccessToken("token...");
form.setExpiresInTime(new Date());
componentVerifyTicketService.pushComponentAccessToken2PrivateEpmetPlatforms(form);
return new Result();
}
}

10
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/ThirdplatformActionDao.java

@ -22,6 +22,8 @@ import com.epmet.entity.ThirdplatformActionEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
*
*
@ -38,4 +40,12 @@ public interface ThirdplatformActionDao extends BaseDao<ThirdplatformActionEntit
* @date 2021.03.16 13:35
*/
ThirdplatformActionEntity getByPlatformIdAndActionKey(@Param("platformId") String platformId, @Param("action") String action);
/**
* @Description 列出平台的操作列表
* @param platformId
* @return com.epmet.entity.ThirdplatformActionEntity
* @author wxz
* @date 2021.08.31 15:23:14
*/
List<ThirdplatformActionEntity> listPlatformActions(@Param("platformId") String platformId);
}

10
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/ThirdplatformCustomerRegisterDao.java

@ -19,6 +19,7 @@ package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.form.PlatformUnregisterFormDTO;
import com.epmet.dto.result.ThirdPlatformActionsResultDTO;
import com.epmet.entity.ThirdplatformCustomerRegisterEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -55,4 +56,13 @@ public interface ThirdplatformCustomerRegisterDao extends BaseDao<ThirdplatformC
* @Date 10:15 2021-04-09
**/
void unregisterPlatformCustomer(PlatformUnregisterFormDTO formDTO);
/**
* @Description 已知操作的key查询哪些app可以做此操作
* @param actionKey 操作key
* @return java.util.List<com.epmet.dto.result.ThirdPlatformActionsResultDTO>
* @author wxz
* @date 2021.08.30 17:07:32
*/
List<ThirdPlatformActionsResultDTO> listPlatformsByActionKey(@Param("actionKey") String actionKey);
}

19
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/redis/ThirdPlatformCache.java

@ -0,0 +1,19 @@
package com.epmet.redis;
import lombok.Data;
/**
* @Description 第三方平台缓存对象
* @author wxz
* @date 2021.08.31 14:41:49
*/
@Data
public class ThirdPlatformCache {
//String platformKey, String platformSecret, String platformName, String apiService, String baseUrl
private String platformId;
private String platformKey;
private String platformSecret;
private String platformName;
private String apiService;
private String baseUrl;
}

3
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/ComponentVerifyTicketService.java

@ -2,6 +2,7 @@ package com.epmet.service;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.dto.form.AuthCodeAndTimeFromDTO;
import com.epmet.dto.form.ComponentAccessTokenFormDTO;
import org.springframework.web.bind.annotation.RequestBody;
import javax.servlet.http.HttpServletRequest;
@ -48,4 +49,6 @@ public interface ComponentVerifyTicketService {
*/
void redirectUri(TokenDto tokenDto, @RequestBody AuthCodeAndTimeFromDTO fromDTO);
public void pushComponentAccessToken2PrivateEpmetPlatforms(ComponentAccessTokenFormDTO input);
}

19
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PrivateEpmetService.java

@ -0,0 +1,19 @@
package com.epmet.service;
import com.epmet.dto.form.AuthorizerAccessTokenFormDTO;
import com.epmet.dto.form.ComponentAccessTokenFormDTO;
public interface PrivateEpmetService {
void pushAuthorizerTokens(AuthorizerAccessTokenFormDTO input);
/**
* @Description 推送component access token
* @param input
* @return void
* @author wxz
* @date 2021.08.30 16:17:48
*/
void pushComponentAccessToken(ComponentAccessTokenFormDTO input);
void pushVerifyTicket(String ticket);
}

10
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/ThirdPlatformService.java

@ -5,6 +5,7 @@ import com.epmet.dto.form.CustomerFormDTO;
import com.epmet.dto.form.ThirdPlatformFormDTO;
import com.epmet.dto.form.PlatformRegisterFormDTO;
import com.epmet.dto.form.PlatformUnregisterFormDTO;
import com.epmet.dto.result.ThirdPlatformActionsResultDTO;
import com.epmet.dto.result.ThirdplatformResultDTO;
import java.util.List;
@ -100,4 +101,13 @@ public interface ThirdPlatformService {
* @Date 10:15 2021-04-09
**/
void registerThirdPlatformCustomer(PlatformRegisterFormDTO formDTO);
/**
* @Description 已知操作的key查询哪些app可以做此操作
* @param actionKey
* @return java.util.List<com.epmet.dto.result.ThirdplatformResultDTO>
* @author wxz
* @date 2021.08.30 16:59:13
*/
List<ThirdPlatformActionsResultDTO> listPlatformsByActionKey(String actionKey);
}

203
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/ComponentVerifyTicketServiceImpl.java

@ -4,12 +4,15 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.client.config.utils.IOUtils;
import com.dingtalk.api.request.OapiRobotSendRequest;
import com.epmet.apiservice.ApiService;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.HttpClientManager;
import com.epmet.constant.ModuleConstant;
import com.epmet.constant.ThirdPlatformActions;
import com.epmet.constant.ThirdRedisKeyConstant;
import com.epmet.constant.ThirdRunTimeInfoConstant;
import com.epmet.dao.*;
@ -21,7 +24,9 @@ import com.epmet.feign.OperCrmOpenFeignClient;
import com.epmet.mpaes.WXBizMsgCrypt;
import com.epmet.mpaes.WXXmlToMapUtil;
import com.epmet.redis.RedisThird;
import com.epmet.service.ApiServiceSelector;
import com.epmet.service.ComponentVerifyTicketService;
import com.epmet.service.ThirdPlatformService;
import com.epmet.wxapi.constant.WxMaCodeConstant;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@ -47,7 +52,7 @@ import static com.epmet.constant.ThirdRunTimeInfoConstant.*;
*/
@Slf4j
@Service
public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketService {
public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketService, ApiServiceSelector {
@Autowired
private RedisThird redisThird;
@ -94,6 +99,9 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
@Autowired
private PaCustomerDao paCustomerDao;
@Autowired
private ThirdPlatformService thirdPlatformService;
@Value("${third.platform.appId}")
private String componentAppId;
@Value("${third.platform.appSecret}")
@ -104,8 +112,8 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
private String token;
/**
* @Description 获得授权事件的票据
* @param
* @Description 获得授权事件的票据
* @author zxc
*/
@Transactional(rollbackFor = Exception.class)
@ -123,23 +131,23 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
String nonce = request.getParameter(ModuleConstant.NONCE);
String encryptType = request.getParameter(ModuleConstant.ENCRYPT_TYPE);
String signature = request.getParameter(ModuleConstant.SIGNATURE);
log.info(String.format(ThirdRunTimeInfoConstant.VERIFY_TICKET,msgSignature,timeStamp,nonce,encryptType,signature));
log.info(String.format(ThirdRunTimeInfoConstant.VERIFY_TICKET, msgSignature, timeStamp, nonce, encryptType, signature));
// 从请求中读取整个post数据
InputStream inputStream;
String postData = null;
inputStream = request.getInputStream();
postData= IOUtils.toString(inputStream,ModuleConstant.UTF8);
WXBizMsgCrypt wxBizMsgCrypt = new WXBizMsgCrypt(token,aesKey,componentAppId);
postData = IOUtils.toString(inputStream, ModuleConstant.UTF8);
WXBizMsgCrypt wxBizMsgCrypt = new WXBizMsgCrypt(token, aesKey, componentAppId);
String msg = wxBizMsgCrypt.decryptMsg(msgSignature, timeStamp, nonce, postData);
log.info(String.format(ThirdRunTimeInfoConstant.MSG,msg));
log.info(String.format(ThirdRunTimeInfoConstant.MSG, msg));
// 将xml转为map
Map<String, String> result = WXXmlToMapUtil.xmlToMap(msg);
String infotype = result.get(ModuleConstant.INFO_TYPE);
log.info(String.format(ThirdRunTimeInfoConstant.INFO_TYPE,infotype));
switch (infotype){
log.info(String.format(ThirdRunTimeInfoConstant.INFO_TYPE, infotype));
switch (infotype) {
case ModuleConstant.TICKET_UNDERLINE_KEY: //接收票据 【component_verify_ticket】
String ComponentVerifyTicket = result.get(ModuleConstant.TICKET_KEY);
log.info(String.format(COMPONENT_VERIFY_TICKET,ComponentVerifyTicket));
log.info(String.format(COMPONENT_VERIFY_TICKET, ComponentVerifyTicket));
// 缓存 ticket
redisThird.setComponentVerifyTicket(ComponentVerifyTicket);
// 存数据库
@ -149,7 +157,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
//先逻辑删
ticketDao.deleteOldComponentVerifyTicket();
ticketDao.insertComponentVerifyTicket(ticketFormDTO);
log.info(ModuleConstant.TICKET_UNDERLINE_KEY+":"+ComponentVerifyTicket);
log.info(ModuleConstant.TICKET_UNDERLINE_KEY + ":" + ComponentVerifyTicket);
break;
case ModuleConstant.AUTHORIZED: //授权成功
this.disposeAuthResult(result);
@ -173,7 +181,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
}
log.info(ThirdRunTimeInfoConstant.END_TICKET);
Integer tokenCount = componentAccessTokenDao.selectAccessTokenCount();
if (tokenCount == NumConstant.ZERO){
if (tokenCount == NumConstant.ZERO) {
String accessTokenCountFlag = ModuleConstant.ACCOUNT_TOKEN_FLAG_ONE;
this.getComponentAccessToken(accessTokenCountFlag);
}
@ -181,14 +189,14 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
}
/**
* @Description 授权结果插入
* @param result
* @Description 授权结果插入
* @author zxc
*/
@Transactional(rollbackFor = Exception.class)
public void disposeAuthResult(Map<String,String> result){
public void disposeAuthResult(Map<String, String> result) {
Map tempMap = result;
Map<String,Object> data = tempMap;
Map<String, Object> data = tempMap;
AuthResultRecordFormDTO authResultRecord = ConvertUtils.mapToEntity(data, AuthResultRecordFormDTO.class);
authResultRecord.setWechatCreateTime(this.sToDate(result.get(ModuleConstant.CREATE_TIME)));
if (result.containsKey(ModuleConstant.AUTHORIZATION_CODE_EXPIRED_TIME)) {
@ -199,9 +207,9 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
}
/**
* @Description 定时获取 (令牌component_access_token) 第三方与微信交互使用的component_access_token
* 每十分钟执行一次,判断是否有马上超时的15分钟以内算马上超时
* @param accessTokenCountFlag 表里的 component_access_token的数量
* @Description 定时获取 (令牌component_access_token) 第三方与微信交互使用的component_access_token
* 每十分钟执行一次,判断是否有马上超时的15分钟以内算马上超时
* @author zxc
*/
@Transactional(rollbackFor = Exception.class)
@ -218,7 +226,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
jsonObject.put(ModuleConstant.COMPONENT_APPID, componentAppId);
jsonObject.put(ModuleConstant.COMPONENT_APPSECRET, appSecret);
jsonObject.put(ModuleConstant.TICKET_UNDERLINE_KEY, componentVerifyTicket);
log.info(String.format(ThirdRunTimeInfoConstant.COMPONENT_ACCESS_TOKEN,componentVerifyTicket));
log.info(String.format(ThirdRunTimeInfoConstant.COMPONENT_ACCESS_TOKEN, componentVerifyTicket));
String post = HttpClientManager.getInstance().sendPostByJSON(WxMaCodeConstant.API_COMPONENT_TOKEN_URL, JSON.toJSONString(jsonObject)).getData();
Map hashMap = JSON.parseObject(post, Map.class);
if (!hashMap.containsKey(ModuleConstant.ERR_MSG)) {
@ -236,6 +244,13 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
componentAccessTokenDao.insertComponentAccessToken(formDTO);
//存缓存
redisThird.setComponentAccessToken(componentAccessToken);
//推送到私有化平台们
try {
pushComponentAccessToken2PrivateEpmetPlatforms(formDTO);
} catch (Exception e) {
String detail = ExceptionUtils.getErrorStackTrace(e);
log.error(detail);
}
} else {
throw new RenException(ThirdRunTimeInfoConstant.FAILURE_ACCESS_TOKEN);
}
@ -245,8 +260,29 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
}
/**
* @Description 获取预授权码
* @param input
* @return void
* @Description 推送component access token到私有化平台
* @author wxz
* @date 2021.08.30 17:12:15
*/
public void pushComponentAccessToken2PrivateEpmetPlatforms(ComponentAccessTokenFormDTO input) {
List<ThirdPlatformActionsResultDTO> platforms = thirdPlatformService.listPlatformsByActionKey(ThirdPlatformActions.PUSH_COMPONENT_ACCESS_TOKEN);
platforms.stream().forEach(p -> {
log.info("推送component-access-token到私有化平台:platformId:{}, platformKey:{}, platformName:{}, apiUrl:{}", p.getPlatformId(), p.getPlatformKey(), p.getPlatformName(), p.getApiUrl());
ApiService apiService = selectApiService(p.getPlatformId());
try {
apiService.pushComponentAccessToken(input, p.getPlatformId(), p.getPlatformKey());
} catch (Exception e) {
String detail = ExceptionUtils.getErrorStackTrace(e);
log.error(detail);
}
});
}
/**
* @param
* @Description 获取预授权码
* @author zxc
*/
@Transactional(rollbackFor = Exception.class)
@ -258,7 +294,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
JSONObject jsonObject = new JSONObject();
jsonObject.put(ModuleConstant.COMPONENT_APPID, componentAppId);
String post = HttpClientManager.getInstance().sendPostByJSON(WxMaCodeConstant.API_CREATE_PREAUTHCODE_URL + accessToken, JSON.toJSONString(jsonObject)).getData();
log.info(String.format(POST_RESULT,post));
log.info(String.format(POST_RESULT, post));
Map hashMap = JSON.parseObject(post, Map.class);
if (!hashMap.containsKey(ModuleConstant.ERR_MSG)) {
preAuthCode = hashMap.get(ModuleConstant.PRE_AUTH_CODE).toString();
@ -283,11 +319,11 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
}
/**
* @Description 使用授权码获取授权信息 请求参数component_access_tokencomponent_appidauthorization_code
* @Description 使用授权码获取授权信息 请求参数component_access_tokencomponent_appidauthorization_code
* @author zxc
*/
@Transactional(rollbackFor = Exception.class)
public AuthorizationInfoResultDTO authInfoByAuthCode(String authCode,String customerId,String clientType) {
public AuthorizationInfoResultDTO authInfoByAuthCode(String authCode, String customerId, String clientType) {
log.info(START_GET_AUTH_INFO);
AuthorizationInfoResultDTO authorizationInfoResultDTO = new AuthorizationInfoResultDTO();
// 获取令牌【component_access_token】
@ -297,11 +333,11 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
jsonObject.put(ModuleConstant.COMPONENT_APPID, componentAppId);
jsonObject.put(ModuleConstant.AUTHORIZATION_CODE, authCode);
String authInfo = HttpClientManager.getInstance().sendPostByJSON(WxMaCodeConstant.API_QUERY_AUTH_URL + accessToken, JSON.toJSONString(jsonObject)).getData();
HashMap<String,Map> hashMap = JSON.parseObject(authInfo, HashMap.class);
HashMap<String, Map> hashMap = JSON.parseObject(authInfo, HashMap.class);
Map map = hashMap.get(ModuleConstant.AUTHORIZATION_INFO);
authorizationInfoResultDTO = ConvertUtils.mapToEntity(map, AuthorizationInfoResultDTO.class);
String authAppId = authorizationInfoResultDTO.getAuthorizer_appid();
log.info("授权信息:"+map);
log.info("授权信息:" + map);
String expiresIn = authorizationInfoResultDTO.getExpires_in().toString();
Date expiresInTime = this.countExpirationTime(expiresIn);
//授权信息分为两张表,基础信息authorization_info,授权列表func_info
@ -314,14 +350,14 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
authInfoDTO.setCustomerId(customerId);
authInfoDTO.setClientType(clientType);
List<Map> func_info = authorizationInfoResultDTO.getFunc_info();
log.info("权限列表信息:"+func_info);
log.info("权限列表信息:" + func_info);
String funcInfo = JSON.toJSONString(func_info);
authInfoDTO.setFuncInfo(funcInfo);
//先逻辑删除,在插入
authorizationInfoDao.updateOldAuthorizationInfo(authAppId);
authorizationInfoDao.insertAuthorizationInfo(authInfoDTO);
// 授权信息放入缓存
redisThird.setAuthInfo(authorizationInfoResultDTO,customerId,clientType);
redisThird.setAuthInfo(authorizationInfoResultDTO, customerId, clientType);
//authorizer_refresh_token 放入缓存
redisThird.setAuthorizerRefreshToken(authInfoDTO);
log.info(END_GET_AUTH_INFO);
@ -329,8 +365,8 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
}
/**
* @Description 获取/刷新接口调用令牌
* @param
* @Description 获取/刷新接口调用令牌
* @author zxc
*/
@Transactional(rollbackFor = Exception.class)
@ -338,7 +374,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
public void refreshToken() {
//查询 即将过期的 authorizer_access_token
List<WillOverDueResultDTO> willOverDueResultDTOS = authorizationInfoDao.checkWillOverDue();
if (willOverDueResultDTOS.size() != NumConstant.ZERO && null != willOverDueResultDTOS){
if (willOverDueResultDTOS.size() != NumConstant.ZERO && null != willOverDueResultDTOS) {
log.info("查询到即将过期的authorizer_access_token");
willOverDueResultDTOS.forEach(willOverDueDTO -> {
String authAppId = willOverDueDTO.getAuthAppId();
@ -346,10 +382,10 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
String clientType = willOverDueDTO.getClientType();
JSONObject jsonObject = new JSONObject();
//授权方AppId
jsonObject.put(ModuleConstant.AUTHORIZER_APPID,authAppId);
jsonObject.put(ModuleConstant.AUTHORIZER_APPID, authAppId);
//第三方平台AppId
jsonObject.put(ModuleConstant.COMPONENT_APPID,componentAppId);
jsonObject.put(ModuleConstant.AUTHORIZER_REFRESH_TOKEN,willOverDueDTO.getAuthorizerRefreshToken());
jsonObject.put(ModuleConstant.COMPONENT_APPID, componentAppId);
jsonObject.put(ModuleConstant.AUTHORIZER_REFRESH_TOKEN, willOverDueDTO.getAuthorizerRefreshToken());
String componentAccessToken = redisThird.getComponentAccessToken();
String data = HttpClientManager.getInstance().sendPostByJSON(WxMaCodeConstant.API_AUTHORIZER_TOKEN_URL + componentAccessToken, JSON.toJSONString(jsonObject)).getData();
Map map = JSON.parseObject(data, HashMap.class);
@ -368,7 +404,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
formDTO.setAuthAppid(authAppId);
formDTO.setClientType(clientType);
AuthorizationInfoFormDTO authorizationInfo = new AuthorizationInfoFormDTO();
BeanUtils.copyProperties(formDTO,authorizationInfo);
BeanUtils.copyProperties(formDTO, authorizationInfo);
authorizationInfo.setAuthorizerAppid(authAppId);
//先逻辑删除,在插入
authorizationInfoDao.deleteOldAuthorizerAccessToken(customerId, clientType);
@ -380,7 +416,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
resultDTO.setAuthorizer_refresh_token(authorizerRefreshToken);
resultDTO.setAuthorizer_appid(authAppId);
resultDTO.setExpires_in(7200);
redisThird.setAuthInfo(resultDTO,customerId,clientType);
redisThird.setAuthInfo(resultDTO, customerId, clientType);
}
});
log.info("更新authorizer_access_token成功");
@ -389,13 +425,13 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
}
/**
* @Description 授权回调URL,回调时并获取授权信息
* @param
* @Description 授权回调URL, 回调时并获取授权信息
* @author zxc
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void redirectUri(TokenDto tokenDto, @RequestBody AuthCodeAndTimeFromDTO authCodeAndTime){
public void redirectUri(TokenDto tokenDto, @RequestBody AuthCodeAndTimeFromDTO authCodeAndTime) {
log.info("开始执行回调URL");
String authCode = authCodeAndTime.getAuthCode();
String clientType = authCodeAndTime.getClientType();
@ -413,7 +449,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
formDTO.setClientType(clientType);
formDTO.setCustomerId(customerId);
log.info(ThirdRunTimeInfoConstant.BEGIN_DELETE_INSERT_AUTH_CODE);
authCodeDao.deleteCustomerAuthCode(customerId,clientType);
authCodeDao.deleteCustomerAuthCode(customerId, clientType);
authCodeDao.insertRedirectAuthCode(formDTO);
//authCode存缓存
redisThird.setAuthCode(formDTO);
@ -423,12 +459,12 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
List<FixationAppIdResultDTO> fixationAppIdResultDTOS = fixationAppIdDao.selectFixationInfos();
String finalCustomerId = customerId;//
fixationAppIdResultDTOS.forEach(fixationAppId -> {
if (fixationAppId.getAppId().equals(authAppId)){
if (fixationAppId.getAppId().equals(authAppId)) {
// TODO 是城阳项目或者党群e事通
// crm表中的customerId【原customerId】
String masterCustomerId = fixationAppId.getMasterCustomerId();
formDTO.setCustomerId(masterCustomerId);
authCodeDao.deleteCustomerAuthCode(finalCustomerId,clientType);
authCodeDao.deleteCustomerAuthCode(finalCustomerId, clientType);
authCodeDao.insertRedirectAuthCode(formDTO);
//authCode存缓存
redisThird.setAuthCode(formDTO);
@ -447,37 +483,37 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
//替换 新customerId为旧customerId
customerId = formDTO.getCustomerId();
// 2. 创建开放平台账号并绑定 或者 直接绑定开放平台
this.createAndBindOpenAccount(customerId,authAppId,clientType);
this.createAndBindOpenAccount(customerId, authAppId, clientType);
// 3. 更新 customer_mp 表授权状态和AuthAppId
this.updateCustomerMpAppId(customerId,authAppId,clientType);
authCodeDao.updateAppId(customerId,clientType,authAppId);
this.updateCustomerMpAppId(customerId, authAppId, clientType);
authCodeDao.updateAppId(customerId, clientType, authAppId);
// 4. 保存授权方账户信息
this.saveAuthAccountInfo(customerId,authAppId,clientType);
this.saveAuthAccountInfo(customerId, authAppId, clientType);
// 5. 校验客户居民端、工作端小程序是否全部授权,全部授权完成的推送钉钉消息 sun
this.checkAuthorization(customerId);
log.info("回调结束");
}
/**
* @Description 获取授权方的帐号基本信息并保存
* @param customerId
* @param authAppId
* @Description 获取授权方的帐号基本信息并保存
* @author zxc
*/
@Transactional(rollbackFor = Exception.class)
public void saveAuthAccountInfo(String customerId, String authAppId,String clientType) {
public void saveAuthAccountInfo(String customerId, String authAppId, String clientType) {
log.info("开始执行保存授权账户基本信息");
JSONObject jsonObject = new JSONObject();
jsonObject.put(ModuleConstant.COMPONENT_APP_ID,componentAppId);
jsonObject.put(ModuleConstant.AUTHORIZER_APP_ID,authAppId);
jsonObject.put(ModuleConstant.COMPONENT_APP_ID, componentAppId);
jsonObject.put(ModuleConstant.AUTHORIZER_APP_ID, authAppId);
String componentAccessToken = redisThird.getComponentAccessToken();
String data = HttpClientManager.getInstance().sendPostByJSON(WxMaCodeConstant.API_GET_AUTHORIZER_INFO + componentAccessToken , JSON.toJSONString(jsonObject)).getData();
Map<String,Map> map = JSON.parseObject(data, Map.class);
String data = HttpClientManager.getInstance().sendPostByJSON(WxMaCodeConstant.API_GET_AUTHORIZER_INFO + componentAccessToken, JSON.toJSONString(jsonObject)).getData();
Map<String, Map> map = JSON.parseObject(data, Map.class);
Map authorizerInfo = map.get(ModuleConstant.AUTHORIZER_INFO);
log.info("授权信息:"+authorizerInfo);
log.info("授权信息:" + authorizerInfo);
// 存在 “miniprograminfo” 字段为小程序,不存在为公众号
boolean keyExist = authorizerInfo.containsKey(ModuleConstant.MINI_PROGRAM_INFO);
if (keyExist == true){
if (keyExist == true) {
log.info("授权方为小程序 并 开始插入信息");
MiniInfoFormDTO miniInfoFormDTO = ConvertUtils.mapToEntity(authorizerInfo, MiniInfoFormDTO.class);
miniInfoFormDTO.setCustomerId(customerId);
@ -498,22 +534,22 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
businessInfoForm.setPrimaryId(primaryId);
businessInfoList.add(businessInfoForm);
});
businessInfoDao.deleteBusinessInfo(customerId,clientType);
businessInfoDao.deleteBusinessInfo(customerId, clientType);
businessInfoDao.insertBusinessInfo(businessInfoList);
//todo 小程序配置的合法域名信息插入
Map miniProgramInfo = (Map) authorizerInfo.get(ModuleConstant.MINI_PROGRAM_INFO);
List<MiniNetworkInfoFormDTO> networkInfoList = new ArrayList<>();
Map networkInfo = (Map) miniProgramInfo.get(ModuleConstant.NETWORK);
networkInfo.forEach((key,value) -> {
networkInfo.forEach((key, value) -> {
MiniNetworkInfoFormDTO miniNetworkInfoForm = new MiniNetworkInfoFormDTO();
miniNetworkInfoForm .setCustomerId(customerId);
miniNetworkInfoForm.setCustomerId(customerId);
miniNetworkInfoForm.setClientType(clientType);
miniNetworkInfoForm.setNetworkType(key.toString());
miniNetworkInfoForm.setUrl(value.toString());
miniNetworkInfoForm.setPrimaryId(primaryId);
networkInfoList.add(miniNetworkInfoForm);
});
miniNetworkInfoDao.deleteNetworkInfo(customerId,clientType);
miniNetworkInfoDao.deleteNetworkInfo(customerId, clientType);
miniNetworkInfoDao.insertNetworkInfo(networkInfoList);
//todo 小程序配置的类目信息插入
List<MiniCategoryInfoFormDTO> categoryInfoList = new ArrayList<>();
@ -533,7 +569,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
miniCategoryInfoDao.deleteCategoryInfo(customerId, clientType);
miniCategoryInfoDao.insertCategoryInfo(categoryInfoList);
}
}else {
} else {
log.info("授权方为公众号 并 开始插入信息");
PaInfoFormDTO paInfoFormDTO = ConvertUtils.mapToEntity(authorizerInfo, PaInfoFormDTO.class);
//公众号基本信息插入
@ -551,7 +587,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
businessInfoForm.setPrimaryId(primaryId);
businessInfoList.add(businessInfoForm);
});
businessInfoDao.deleteBusinessInfo(customerId,clientType);
businessInfoDao.deleteBusinessInfo(customerId, clientType);
businessInfoDao.insertBusinessInfo(businessInfoList);
}
log.info("保存授权方基本信息结束");
@ -559,12 +595,12 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
}
/**
* @Description 回填 customer_mp appId , 更改授权状态
* @param
* @Description 回填 customer_mp appId , 更改授权状态
* @author zxc
*/
@Transactional(rollbackFor = Exception.class)
public void updateCustomerMpAppId(String customerId,String authAppId,String clientType){
public void updateCustomerMpAppId(String customerId, String authAppId, String clientType) {
log.info("==========回填customer_mp开始==========");
Integer checkBindCount = customerMpDao.checkBind(authAppId, clientType);
if (checkBindCount == NumConstant.ZERO) {
@ -578,14 +614,14 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
log.info("==========回填customer_mp结束==========");
}
public void createAndBindOpenAccount(String customerId,String authAppId,String clientType){
public void createAndBindOpenAccount(String customerId, String authAppId, String clientType) {
log.info(ThirdRunTimeInfoConstant.BEGIN_CREATE_OPEN);
Map<String, Object> authorizerRefreshToken = redisThird.getAuthorizerRefreshToken(customerId + ThirdRedisKeyConstant.COLON + clientType);
String authorizerAccessToken = authorizerRefreshToken.get("authorizerAccessToken").toString();
JSONObject bindInfoForm = new JSONObject();
bindInfoForm.put(ModuleConstant.LOW_APP_ID,authAppId);
bindInfoForm.put(ModuleConstant.LOW_APP_ID, authAppId);
String bindResult = HttpClientManager.getInstance().sendPostByJSON(WxMaCodeConstant.API_OPEN_GET + authorizerAccessToken, JSON.toJSONString(bindInfoForm)).getData();
Map<String,Object> bindInfo = JSON.parseObject(bindResult, Map.class);
Map<String, Object> bindInfo = JSON.parseObject(bindResult, Map.class);
boolean bindStatus = bindInfo.containsKey(ModuleConstant.OPEN_APP_ID);
if (bindStatus != true) {
Integer authCount = customerMpDao.selectAuthCount(customerId);
@ -663,11 +699,11 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
}
/**
* @Description 转换过期时间
* @param expiresIn
* @Description 转换过期时间
* @author zxc
*/
public Date countExpirationTime(String expiresIn){
public Date countExpirationTime(String expiresIn) {
expiresIn = expiresIn + "000";
Date date = new Date();
long l = date.getTime() + Long.valueOf(expiresIn);
@ -676,21 +712,21 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
}
/**
* @Description 查询客户Id
* @param tokenDto
* @Description 查询客户Id
* @author zxc
*/
public String getLoginUserCustomerId(TokenDto tokenDto){
public String getLoginUserCustomerId(TokenDto tokenDto) {
PaCustomerUserAgencyDTO result = paCustomerUserAgencyDao.selectCustomerIdByUserId(tokenDto.getUserId());
return result.getCustomerId();
}
/**
* @Description 时间戳秒级转换 Date
* @param t
* @Description 时间戳秒级转换 Date
* @author zxc
*/
public Date sToDate(String t){
public Date sToDate(String t) {
Long aLong = Long.valueOf(t + "000");
Date date = new Date();
date.setTime(aLong);
@ -699,24 +735,24 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
/**
* @author sun
* @Description 校验客户两哥小程序是否完成授权
* @Description 校验客户两哥小程序是否完成授权
*/
private void checkAuthorization(String customerId){
private void checkAuthorization(String customerId) {
List<CustomerMpDTO> list = customerMpDao.selectByCustomerId(customerId);
AtomicBoolean bl = new AtomicBoolean(false);
list.forEach(mp->{
if(mp.getAuthorizationFlag()!=NumConstant.ONE){
list.forEach(mp -> {
if (mp.getAuthorizationFlag() != NumConstant.ONE) {
bl.set(true);
}
});
if(!bl.get()){
if (!bl.get()) {
dDingNews(customerId);
}
}
/**
* @author sun
* @Description 发送钉钉消息通知运营人员有新客户完成授权
* @Description 发送钉钉消息通知运营人员有新客户完成授权
*/
private String dDingNews(String customerId) {
//1.查询客户及管理员信息,用于发送消息使用
@ -739,8 +775,29 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
"> 管理员称谓: " + result.getAppellation() + "\n\n" +
"> 联系方式: " + result.getPhone() + "\n");
request.setMarkdown(markdown);
HttpClientManager.getInstance().sendDingMsg(JSON.toJSONString(request),url,secret);
HttpClientManager.getInstance().sendDingMsg(JSON.toJSONString(request), url, secret);
return null;
}
/**
* @Description 推送AuthorizerAccessToken到私有化平台们
* @param form
* @return void
* @author wxz
* @date 2021.08.31 17:22:04
*/
public void pushAuthorizerAccessToken2PrivateEpmets(AuthorizerAccessTokenFormDTO form) {
List<ThirdPlatformActionsResultDTO> platforms = thirdPlatformService.listPlatformsByActionKey(ThirdPlatformActions.PUSH_AUTHORIZER_ACCESS_TOKEN);
platforms.stream().forEach(p -> {
log.info("推送authorizer-access-token到私有化平台:platformId:{}, platformKey:{}, platformName:{}, apiUrl:{}", p.getPlatformId(), p.getPlatformKey(), p.getPlatformName(), p.getApiUrl());
ApiService apiService = selectApiService(p.getPlatformId());
try {
apiService.pushAuthorizerAccessToken(form, p.getPlatformId(), p.getPlatformKey());
} catch (Exception e) {
String detail = ExceptionUtils.getErrorStackTrace(e);
log.error(detail);
}
});
}
}

71
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PrivateEpmetServiceImpl.java

@ -0,0 +1,71 @@
package com.epmet.service.impl;
import com.epmet.constant.ThirdRunTimeInfoConstant;
import com.epmet.dao.AuthorizationInfoDao;
import com.epmet.dao.ComponentAccessTokenDao;
import com.epmet.dao.ComponentVerifyTicketDao;
import com.epmet.dto.form.AuthorizationInfoFormDTO;
import com.epmet.dto.form.AuthorizerAccessTokenFormDTO;
import com.epmet.dto.form.ComponentAccessTokenFormDTO;
import com.epmet.dto.result.AuthorizationInfoResultDTO;
import com.epmet.redis.RedisThird;
import com.epmet.service.PrivateEpmetService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Slf4j
public class PrivateEpmetServiceImpl implements PrivateEpmetService {
@Autowired
private ComponentVerifyTicketDao componentVerifyTicketDao;
@Autowired
private AuthorizationInfoDao authorizationInfoDao;
@Autowired
private ComponentAccessTokenDao componentAccessTokenDao;
@Autowired
private RedisThird redisThird;
@Transactional(rollbackFor = RuntimeException.class)
@Override
public void pushAuthorizerTokens(AuthorizerAccessTokenFormDTO input) {
System.out.println("收到AuthorizerAccessTokenFormDTO:" + input);
//AuthorizationInfoFormDTO authorizationInfo = new AuthorizationInfoFormDTO();
//BeanUtils.copyProperties(input,authorizationInfo);
//authorizationInfo.setAuthorizerAppid(input.getAuthAppid());
////先逻辑删除,在插入
//authorizationInfoDao.deleteOldAuthorizerAccessToken(input.getCustomerId(), input.getClientType());
//authorizationInfoDao.insertAuthorizerAccessToken(input);
////缓存 refreshAuthorizerAccessToken
//redisThird.setAuthorizerRefreshToken(authorizationInfo);
//AuthorizationInfoResultDTO resultDTO = new AuthorizationInfoResultDTO();
//resultDTO.setAuthorizer_access_token(input.getAuthorizerAccessToken());
//resultDTO.setAuthorizer_refresh_token(input.getAuthorizerRefreshToken());
//resultDTO.setAuthorizer_appid(input.getAuthAppid());
//resultDTO.setExpires_in(7200);
//redisThird.setAuthInfo(resultDTO,input.getCustomerId(),input.getClientType());
}
@Override
@Transactional(rollbackFor = RuntimeException.class)
public void pushComponentAccessToken(ComponentAccessTokenFormDTO componentAccessToken) {
System.out.println("收到componentAccessToken:" + componentAccessToken);
//先逻辑删,在插入
//componentAccessTokenDao.deleteOldComponentAccessToken();
//componentAccessTokenDao.insertComponentAccessToken(componentAccessToken);
////存缓存
//redisThird.setComponentAccessToken(componentAccessToken.getComponentAccessToken());
}
@Override
public void pushVerifyTicket(String ticket) {
}
}

6
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/ThirdPlatformServiceImpl.java

@ -12,6 +12,7 @@ import com.epmet.dto.form.CustomerFormDTO;
import com.epmet.dto.form.ThirdPlatformFormDTO;
import com.epmet.dto.form.PlatformRegisterFormDTO;
import com.epmet.dto.form.PlatformUnregisterFormDTO;
import com.epmet.dto.result.ThirdPlatformActionsResultDTO;
import com.epmet.dto.result.ThirdplatformResultDTO;
import com.epmet.entity.ThirdplatformCustomerActionEntity;
import com.epmet.entity.ThirdplatformCustomerRegisterEntity;
@ -160,4 +161,9 @@ public class ThirdPlatformServiceImpl implements ThirdPlatformService {
thirdplatformCustomerRegisterDao.batchInsertThirdplatformCustomerRegister(entityList);
}
}
@Override
public List<ThirdPlatformActionsResultDTO> listPlatformsByActionKey(String actionKey) {
return thirdplatformCustomerRegisterDao.listPlatformsByActionKey(actionKey);
}
}

17
epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/ThirdplatformActionDao.xml

@ -30,6 +30,23 @@
from thirdplatform_action ta
where ta.PLATFORM_ID = #{platformId}
and ACTION_KEY = #{action}
and ta.DEL_FLAG=0
</select>
<select id="listPlatformActions" resultType="com.epmet.entity.ThirdplatformActionEntity">
select id,
platform_id,
action_key,
api_url,
del_flag,
revision,
created_by,
created_time,
updated_by,
updated_time
from thirdplatform_action ta
where ta.PLATFORM_ID = #{platformId}
and ta.DEL_FLAG=0
</select>

14
epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/ThirdplatformCustomerRegisterDao.xml

@ -36,6 +36,20 @@
and DEL_FLAG = 0
</select>
<!--已知操作的key,查询哪些app可以做此操作-->
<select id="listPlatformsByActionKey" resultType="com.epmet.dto.result.ThirdPlatformActionsResultDTO">
select thirdplatform_action.PLATFORM_ID,
thirdplatform.PLATFORM_KEY,
thirdplatform.PLATFORM_NAME,
thirdplatform_action.ACTION_KEY,
thirdplatform_action.API_URL
from thirdplatform
inner join thirdplatform_action
on (thirdplatform.ID = thirdplatform_action.PLATFORM_ID and thirdplatform_action.DEL_FLAG = 0)
and thirdplatform_action.ACTION_KEY = #{actionKey}
and thirdplatform.DEL_FLAG = 0
</select>
<insert id="batchInsertThirdplatformCustomerRegister" parameterType="map">
insert into thirdplatform_customer_register
(

17
epmet-module/gov-grid/gov-grid-server/src/main/java/com/epmet/service/impl/PartyBranchManageServiceImpl.java

@ -137,17 +137,14 @@ public class PartyBranchManageServiceImpl implements PartyBranchManageService {
CustomerPartyBranchDTO customerPartyBranch = customerPartyBranchResult.getData();
PartyMemberBaseInfoAddFormDTO partyMemberBaseInfoAddFormDTO = this.getPartyMemberBaseInfoAddFormDTO(formDTO, customerPartyBranch);
Result<String> result = resiPartyMemberOpenFeignClient.addPartyMemberBaseInfo(partyMemberBaseInfoAddFormDTO);
if (!result.success() || StringUtils.isBlank(result.getData())) {
throw new RenException(result.getCode(), result.getMsg());
}
//3、党支部总人数+1
if (result.success() && StringUtils.isNotBlank(result.getData())) {
//党支部总人数+1
customerPartyBranch.setTotalPartyMember(customerPartyBranch.getTotalPartyMember() + 1);
Result<String> updatePartyBranchResult = govOrgOpenFeignClient.updatePartyBranch(customerPartyBranch);
if (updatePartyBranchResult.success()) {
logger.info(String.format("党支部(%s)总人数+1", formDTO.getPartyBranchId()));
}
} else {
logger.error("添加党员异常");
throw new RenException(result.getCode());
customerPartyBranch.setTotalPartyMember(customerPartyBranch.getTotalPartyMember() + 1);
Result<String> updatePartyBranchResult = govOrgOpenFeignClient.updatePartyBranch(customerPartyBranch);
if (updatePartyBranchResult.success()) {
logger.info(String.format("党支部(%s)总人数+1", formDTO.getPartyBranchId()));
}
return result.getData();
}

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

@ -45,7 +45,7 @@ public class AddAgencyFormDTO implements Serializable {
* 机构组织名称
*/
@NotBlank(message = "组织名称不能为空")
@Length(max=50,message = "机构名称不能超过50个字")
@Length(max=20,message = "机构名称不能超过20个字")
private String agencyName;
/**

12
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/AddDepartmentFormDTO.java

@ -16,6 +16,7 @@ package com.epmet.dto.form;
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
@ -31,20 +32,21 @@ import java.io.Serializable;
public class AddDepartmentFormDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 所属组织机构IDcustomer_agency.id
*/
@NotBlank(message = "组织机构Id不能为空")
@NotBlank(message = "组织机构Id不能为空",groups = AddDepartmentFormDTO.AddDept.class)
private String agencyId;
/**
* 部门名称
*/
@NotBlank(message = "部门名称不能为空")
@Length(max=120,message = "部门名称不能超过120个字")
@NotBlank(message = "部门名称不能为空",groups = AddDepartmentFormDTO.AddDept.class)
@Length(max=20,message = "部门名称不能超过20个字",groups = AddDepartmentFormDTO.AddDept.class)
private String departmentName;
public interface AddDept extends CustomerClientShowGroup {
}
/**
* 部门职责
*/

15
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/AddGridFormDTO.java

@ -1,7 +1,10 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
@ -12,16 +15,20 @@ import java.io.Serializable;
public class AddGridFormDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 新建网格名称
*/
@NotBlank(message = "网格名称不能为空")
@Length(max=20,message = "网格名称不能超过20个字",groups = AddGridFormDTO.AddGrid.class)
private String gridName;
/**
* 机构id
*/
private String agencyId;
/**
* 新建网格名称
*/
private String gridName;
public interface AddGrid extends CustomerClientShowGroup {
}
/**
* 管辖区域

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

@ -50,7 +50,7 @@ public class EditAgencyFormDTO implements Serializable {
* 机关组织名称
*/
@NotBlank(message = "机关组织名称不能为空")
@Length(max=50,message = "机构名称不能超过50个字",groups = DefaultUserShowGroup.class)
@Length(max=20,message = "机构名称不能超过20个字",groups = DefaultUserShowGroup.class)
private String agencyName;
/**

12
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/EditDepartmentFormDTO.java

@ -17,6 +17,7 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
@ -33,20 +34,21 @@ import java.io.Serializable;
public class EditDepartmentFormDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 部门Id
*/
@NotBlank(message = "部门ID不能为空")
@NotBlank(message = "部门ID不能为空",groups = EditDepartmentFormDTO.EditDept.class)
private String departmentId;
/**
* 部门名称
*/
@NotBlank(message = "部门名称不能为空")
@Length(max=120,message = "部门名称不能超过120个字")
@NotBlank(message = "部门名称不能为空",groups = EditDepartmentFormDTO.EditDept.class)
@Length(max=20,message = "部门名称不能超过20个字",groups = EditDepartmentFormDTO.EditDept.class)
private String departmentName;
public interface EditDept extends CustomerClientShowGroup {
}
/**
* 部门职责
*/

15
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/EditGridFormDTO.java

@ -1,7 +1,10 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
@ -12,6 +15,12 @@ import java.io.Serializable;
public class EditGridFormDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 网格名称
*/
@NotBlank(message = "网格名称不能为空")
@Length(max=20,message = "网格名称不能超过20个字",groups = EditGridFormDTO.EditGrid.class)
private String gridName;
/**
* gridId 网格id
@ -23,10 +32,8 @@ public class EditGridFormDTO implements Serializable {
*/
private String agencyId;
/**
* 网格名称
*/
private String gridName;
public interface EditGrid extends CustomerClientShowGroup {
}
/**
* 管理区域

17
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/OrgFormDTO.java

@ -0,0 +1,17 @@
package com.epmet.dto.form;
import lombok.Data;
import java.io.Serializable;
/**
* @Description
* @Author zhaoqifeng
* @Date 2021/9/7 15:41
*/
@Data
public class OrgFormDTO implements Serializable {
private static final long serialVersionUID = -5975063766883885089L;
private String orgId;
private String orgType;
}

4
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/MineResultDTO.java

@ -59,4 +59,8 @@ public class MineResultDTO implements Serializable {
* 根组织
*/
private String rootAgencyId;
/**
* 根组织名
*/
private String rootAgencyName;
}

10
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/GovOrgOpenFeignClient.java

@ -417,4 +417,14 @@ public interface GovOrgOpenFeignClient {
*/
@PostMapping("/gov/org/customerstaffagency/queryOrgStaffs")
Result<Set<String>> queryOrgStaffs(@RequestBody OrgStaffFormDTO formDTO);
/**
* @Description 根据组织或网格或吧部门获取组织信息
* @Param formDTO
* @Return {@link Result<OrgResultDTO>}
* @Author zhaoqifeng
* @Date 2021/9/7 15:27
*/
@PostMapping("/gov/org/customeragency/getAgencyInfo")
Result<OrgResultDTO> getAgencyInfo(@RequestBody OrgFormDTO formDTO);
}

13
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/fallback/GovOrgOpenFeignClientFallback.java

@ -248,6 +248,19 @@ public class GovOrgOpenFeignClientFallback implements GovOrgOpenFeignClient {
return ModuleUtils.feignConError(ServiceConstant.GOV_ORG_SERVER, "queryOrgStaffs", formDTO);
}
/**
* @param formDTO
* @Description 根据组织或网格或吧部门获取组织信息
* @Param formDTO
* @Return {@link Result<OrgResultDTO>}
* @Author zhaoqifeng
* @Date 2021/9/7 15:27
*/
@Override
public Result<OrgResultDTO> getAgencyInfo(OrgFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ORG_SERVER, "getAgencyInfo", formDTO);
}
@Override
public Result<String> selectPidsByGridId(String gridId) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ORG_SERVER, "selectPidsByGridId", gridId);

22
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/CustomerAgencyController.java

@ -302,4 +302,26 @@ public class CustomerAgencyController {
public Result<String> getAreaCodeSwitch(@PathVariable("customerId")String customerId){
return new Result<String>().ok(customerOrgParameterService.getAreaCodeSwitch(customerId));
}
/**
* @Description 通讯录查询当前人员所属组织组织下部门/网格树
* @author sun
**/
@PostMapping("orgtree")
Result<ExtStaffPermissionResultDTO> orgTree(@LoginUser TokenDto tokenDto){
return new Result<ExtStaffPermissionResultDTO>().ok(customerAgencyService.staffPermissionExt(tokenDto.getUserId()));
}
/**
* @Description 根据组织或网格或吧部门获取组织信息
* @Param formDTO
* @Return {@link Result<OrgResultDTO>}
* @Author zhaoqifeng
* @Date 2021/9/7 15:27
*/
@PostMapping("getAgencyInfo")
public Result<OrgResultDTO> getAgencyInfo(@RequestBody OrgFormDTO formDTO) {
return new Result<OrgResultDTO>().ok(customerAgencyService.getAgencyInfo(formDTO));
}
}

4
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/DepartmentController.java

@ -52,7 +52,7 @@ public class DepartmentController {
@PostMapping("adddepartment")
@RequirePermission(requirePermission = RequirePermissionEnum.ORG_DEPARTMENT_CREATE)
public Result<AddDepartmentResultDTO> addDepartment(@LoginUser TokenDto tokenDTO, @RequestBody AddDepartmentFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO);
ValidatorUtils.validateEntity(formDTO, AddDepartmentFormDTO.AddDept.class);
return departmentService.addDepartment(formDTO);
}
@ -65,7 +65,7 @@ public class DepartmentController {
@PostMapping("editdepartment")
@RequirePermission(requirePermission = RequirePermissionEnum.ORG_DEPARTMENT_UPDATE)
public Result editDepartment(@LoginUser TokenDto tokenDTO, @RequestBody EditDepartmentFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO);
ValidatorUtils.validateEntity(formDTO, EditDepartmentFormDTO.EditDept.class);
return departmentService.editDepartment(formDTO);
}

2
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/GridController.java

@ -46,6 +46,7 @@ public class GridController {
@PostMapping("addgrid")
@RequirePermission(requirePermission = RequirePermissionEnum.ORG_GRID_CREATE)
public Result<AddGridResultDTO> addGrid(@LoginUser TokenDto tokenDto, @RequestBody AddGridFormDTO addGridFormDTO){
ValidatorUtils.validateEntity(addGridFormDTO, AddGridFormDTO.AddGrid.class);
return customerGridService.addGrid(tokenDto,addGridFormDTO);
}
@ -56,6 +57,7 @@ public class GridController {
@PostMapping("editgrid")
@RequirePermission(requirePermission = RequirePermissionEnum.ORG_GRID_UPDATE)
public Result editGrid(@LoginUser TokenDto tokenDto, @RequestBody EditGridFormDTO editGridFormDTO){
ValidatorUtils.validateEntity(editGridFormDTO, EditGridFormDTO.EditGrid.class);
return customerGridService.editGrid(tokenDto,editGridFormDTO);
}

9
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/CustomerAgencyService.java

@ -236,4 +236,13 @@ public interface CustomerAgencyService extends BaseService<CustomerAgencyEntity>
OrganizeTreeResultDTO organizeTree(String agencyId);
void checkAgencyName(String agencyName,String customerId,String agencyId,String parentAgencyId);
/**
* 根据组织或网格或吧部门获取组织信息
* @Param formDTO
* @Return {@link OrgResultDTO}
* @Author zhaoqifeng
* @Date 2021/9/7 15:28
*/
OrgResultDTO getAgencyInfo(OrgFormDTO formDTO);
}

14
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java

@ -1075,4 +1075,18 @@ public class CustomerAgencyServiceImpl extends BaseServiceImpl<CustomerAgencyDao
}
}
/**
* 根据组织或网格或吧部门获取组织信息
*
* @param formDTO
* @Param formDTO
* @Return {@link OrgResultDTO}
* @Author zhaoqifeng
* @Date 2021/9/7 15:28
*/
@Override
public OrgResultDTO getAgencyInfo(OrgFormDTO formDTO) {
return baseDao.selectAgencyDetail(formDTO.getOrgId(), formDTO.getOrgType());
}
}

7
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerStaffAgencyServiceImpl.java

@ -39,6 +39,7 @@ import com.epmet.service.CustomerDepartmentService;
import com.epmet.service.CustomerGridService;
import com.epmet.service.CustomerStaffAgencyService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -241,9 +242,9 @@ public class CustomerStaffAgencyServiceImpl extends BaseServiceImpl<CustomerStaf
*/
@Override
public Set<String> queryOrgStaffs(OrgStaffFormDTO formDTO) {
Set<String> agencyUserIds=customerStaffAgencyDao.selectAgencyStaffs(formDTO.getCustomerId(),formDTO.getAgencyIds());
Set<String> deptUserIds=customerStaffAgencyDao.selectDeptStaffs(formDTO.getCustomerId(),formDTO.getDeptIds());
Set<String> gridUserIds=customerStaffAgencyDao.selectGridStaffs(formDTO.getCustomerId(),formDTO.getGridIds());
Set<String> agencyUserIds= CollectionUtils.isNotEmpty(formDTO.getAgencyIds())?customerStaffAgencyDao.selectAgencyStaffs(formDTO.getCustomerId(),formDTO.getAgencyIds()):new HashSet<>();
Set<String> deptUserIds=CollectionUtils.isNotEmpty(formDTO.getDeptIds())?customerStaffAgencyDao.selectDeptStaffs(formDTO.getCustomerId(),formDTO.getDeptIds()):new HashSet<>();
Set<String> gridUserIds=CollectionUtils.isNotEmpty(formDTO.getGridIds())?customerStaffAgencyDao.selectGridStaffs(formDTO.getCustomerId(),formDTO.getGridIds()):new HashSet<>();
Set<String> result=new LinkedHashSet<String>();
result.addAll(agencyUserIds);
result.addAll(deptUserIds);

8
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/StaffServiceImpl.java

@ -234,9 +234,13 @@ public class StaffServiceImpl implements StaffService {
//获取根组织
CustomerAgencyDTO agency = customerAgencyService.get(customerStaffAgency.getAgencyId());
if (StringUtils.isNotBlank(agency.getPids())) {
result.setRootAgencyId(agency.getPids().split(StrConstant.COLON)[0]);
String rootAgencyId = agency.getPids().split(StrConstant.COLON)[0];
CustomerAgencyDTO rootAgency = customerAgencyService.get(rootAgencyId);
result.setRootAgencyId(rootAgencyId);
result.setRootAgencyName(rootAgency.getOrganizationName());
} else {
result.setRootAgencyId(customerStaffAgency.getAgencyId());
result.setRootAgencyName(agency.getOrganizationName());
}
//2021.08.27 zhaoqf end
return result;
@ -438,6 +442,8 @@ public class StaffServiceImpl implements StaffService {
staffTransferRecordDTO.setRemarks(fromDTO.getRemarks());
staffTransferRecordService.save(staffTransferRecordDTO);
//8.更改注册关系
CustomerAgencyDTO agencyDTO = customerAgencyService.get(agencyId);
staffOrgRelation.setPids(agencyDTO.getPids());
staffOrgRelation.setOrgId(fromDTO.getOrgId());
staffOrgRelation.setOrgType(fromDTO.getOrgType());
staffOrgRelation.setUpdatedBy(null);

88
epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerStaffAgencyDao.xml

@ -41,58 +41,62 @@
<!-- 查询当前网格所属机构下的不在此网格的工作人员Id -->
<select id="getSelectableStaffsForGrid" parameterType="string" resultType="string">
SELECT
agency.USER_ID
FROM
CUSTOMER_STAFF_AGENCY agency
WHERE
agency.DEL_FLAG = '0'
AND agency.AGENCY_ID = (
SELECT
PID
agency.user_id
FROM
CUSTOMER_GRID
customer_staff_agency agency
INNER JOIN staff_org_relation sor ON agency.user_id = sor.staff_id AND sor.org_type = 'agency'
WHERE
DEL_FLAG = '0'
AND ID = #{gridId})
AND agency.USER_ID NOT IN (
SELECT
USER_ID
FROM
CUSTOMER_STAFF_GRID
WHERE
DEL_FLAG = '0'
AND
GRID_ID = #{gridId} )
agency.del_flag = '0'
AND agency.agency_id = (
SELECT
pid
FROM
customer_grid
WHERE
del_flag = '0'
AND id = #{gridId}
)
AND agency.user_id NOT IN (
SELECT
user_id
FROM
customer_staff_grid
WHERE
del_flag = '0'
AND
grid_id = #{gridId}
)
</select>
<!-- 查询当前部门所属机构下的不在此部门的工作人员Id -->
<select id="getSelectableStaffsForDept" parameterType="string" resultType="string">
SELECT
agency.USER_ID
agency.user_id
FROM
CUSTOMER_STAFF_AGENCY agency
customer_staff_agency agency
INNER JOIN staff_org_relation sor ON agency.user_id = sor.staff_id AND sor.org_type = 'agency'
WHERE
agency.DEL_FLAG = '0'
AND agency.AGENCY_ID = (
SELECT
AGENCY_ID
FROM
CUSTOMER_DEPARTMENT
WHERE
DEL_FLAG = '0'
AND ID = #{departmentId})
AND agency.USER_ID NOT IN (
SELECT
USER_ID
FROM
CUSTOMER_STAFF_DEPARTMENT
WHERE
DEL_FLAG = '0'
AND
DEPARTMENT_ID = #{departmentId} )
agency.del_flag = '0'
AND agency.agency_id = (
SELECT
agency_id
FROM
customer_department
WHERE
del_flag = '0'
AND id = #{departmentId}
)
AND agency.user_id NOT IN (
SELECT
user_id
FROM
customer_staff_department
WHERE
del_flag = '0'
AND
department_id = #{departmentId}
)
</select>
<select id="selectAgencyStaffList" resultType="com.epmet.dto.result.StaffListResultDTO">

22
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/AttachmentDTO.java

@ -0,0 +1,22 @@
package com.epmet.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description
* @Author zhaoqifeng
* @Date 2021/9/7 16:21
*/
@Data
public class AttachmentDTO implements Serializable {
private static final long serialVersionUID = 6505979559566901869L;
private String name;
private String format;
private String type;
private String url;
private Integer size;
private Integer duration;
}

56
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/ExternalLinkDTO.java

@ -0,0 +1,56 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dto;
import lombok.Data;
import java.io.Serializable;
/**
* 指南外链表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-09-06
*/
@Data
public class ExternalLinkDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 链接说明
*/
private String description;
/**
* 外部链接
*/
private String externalLink;
/**
* 外部链接
*/
private Integer sort;
}

117
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideAttachmentDTO.java

@ -0,0 +1,117 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 办事指南附件
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-09-06
*/
@Data
public class GuideAttachmentDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 唯一标识
*/
private String id;
/**
* 客户ID
*/
private String customerId;
/**
* 办事指南ID
*/
private String guideId;
/**
* 附件名
*/
private String attachmentName;
/**
* 文件大小 单位byte
*/
private Integer attachmentSize;
/**
* 文件格式 wordexcelpdf
*/
private String attachmentFormat;
/**
* 类型
*/
private String attachmentType;
/**
* 附件地址
*/
private String attachmentUrl;
/**
* 语音或视频时长
*/
private Integer duration;
/**
* 排序
*/
private Integer sort;
/**
* 删除标识 0.未删除 1.已删除
*/
private Integer delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

91
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideCategoryDTO.java

@ -0,0 +1,91 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dto;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 指南分类
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-09-06
*/
@Data
public class GuideCategoryDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 客户id
*/
private String customerId;
/**
* 分类名
*/
private String categoryName;
/**
* 排序
*/
private Integer sort;
/**
* 状态 禁用disable 启用enable
*/
private String status;
/**
* 删除标识 0未删除1已删除
*/
private String delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

91
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideCollectionDTO.java

@ -0,0 +1,91 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dto;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 指南收藏表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-09-06
*/
@Data
public class GuideCollectionDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 客户id
*/
private String customerId;
/**
* 指南ID
*/
private String guideId;
/**
* 用户ID
*/
private String userId;
/**
* 用户所属客户端 居民端resi 工作端gov
*/
private String app;
/**
* 删除标识 0未删除1已删除
*/
private String delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

112
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideDTO.java

@ -0,0 +1,112 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 办事指南表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-09-06
*/
@Data
public class GuideDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* ID 唯一标识
*/
private String id;
/**
* 客户ID
*/
private String customerId;
/**
* 发布单位类型 机关agency 网格grid 部门dept
*/
private String orgType;
/**
* 发布单位ID
*/
private String orgId;
/**
* 发布单位名称
*/
private String orgName;
/**
* 所属组织机构IDcustomer_agency.id
*/
private String pid;
/**
* 所有上级组织ID,英文:隔开
*/
private String pids;
/**
* 标题
*/
private String title;
/**
* 分类ID
*/
private String categoryCode;
/**
* 删除标识:0.未删除 1.已删除
*/
private Integer delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

96
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideExternalLinkDTO.java

@ -0,0 +1,96 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dto;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 指南外链表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-09-06
*/
@Data
public class GuideExternalLinkDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 客户id
*/
private String customerId;
/**
* 指南ID
*/
private String guideId;
/**
* 链接说明
*/
private String description;
/**
* 外部链接
*/
private String externalLink;
/**
* 排序
*/
private Integer sort;
/**
* 删除标识 0未删除1已删除
*/
private String delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

91
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideModuleDTO.java

@ -0,0 +1,91 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dto;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 指南模块关联表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-09-06
*/
@Data
public class GuideModuleDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 客户id
*/
private String customerId;
/**
* 指南ID
*/
private String guideId;
/**
* 模块ID
*/
private String moduleId;
/**
*
*/
private String moduleContent;
/**
* 删除标识 0未删除1已删除
*/
private String delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

96
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideModuleDictDTO.java

@ -0,0 +1,96 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dto;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 指南模块字典表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-09-06
*/
@Data
public class GuideModuleDictDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 客户id
*/
private String customerId;
/**
* 模块key
*/
private String moduleValue;
/**
* 模块名
*/
private String moduleName;
/**
* 排序
*/
private Integer sort;
/**
* 状态 禁用disable 启用enable
*/
private String status;
/**
* 删除标识 0未删除1已删除
*/
private String delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

91
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideModuleDictDefaultDTO.java

@ -0,0 +1,91 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dto;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 指南模块默认字典表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-09-06
*/
@Data
public class GuideModuleDictDefaultDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 模块key
*/
private String moduleValue;
/**
* 模块名
*/
private String moduleName;
/**
* 排序
*/
private Integer sort;
/**
* 状态 禁用disable 启用enable
*/
private String status;
/**
* 删除标识 0未删除1已删除
*/
private String delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

58
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/ModuleDTO.java

@ -0,0 +1,58 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dto;
import lombok.Data;
import java.io.Serializable;
/**
* 指南模块字典表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-09-06
*/
@Data
public class ModuleDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String guideModuleId;
/**
* 主键
*/
private String moduleId;
/**
* 模块key
*/
private String moduleValue;
/**
* 模块名
*/
private String moduleName;
/**
* 模块内容
*/
private String moduleContent;
}

61
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideAddFormDTO.java

@ -0,0 +1,61 @@
package com.epmet.dto.form;
import com.epmet.dto.AttachmentDTO;
import com.epmet.dto.ExternalLinkDTO;
import com.epmet.dto.ModuleDTO;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.List;
/**
* @Description
* @Author zhaoqifeng
* @Date 2021/9/7 10:24
*/
@NoArgsConstructor
@Data
public class GuideAddFormDTO implements Serializable {
private static final long serialVersionUID = -7750999102010191460L;
/**
* 标题
*/
@NotBlank(message = "标题不能为空")
private String title;
/**
* 标题
*/
@NotBlank(message = "分类不能为空")
private String categoryCode;
/**
* 机关类型 机关agency 网格grid 部门dept
*/
@NotBlank(message = "所属机关类型不能为空")
private String orgType;
/**
* 所属机关
*/
@NotBlank(message = "所属机关ID不能为空")
private String orgId;
/**
* 所属机关
*/
@NotBlank(message = "所属机关名不能为空")
private String orgName;
/**
* 外部链接
*/
private List<ExternalLinkDTO> externalLinks;
/**
* 内容模块
*/
private List<ModuleDTO> moduleList;
/**
* 附件
*/
private List<AttachmentDTO> attachmentList;
}

70
epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideEditFormDTO.java

@ -0,0 +1,70 @@
package com.epmet.dto.form;
import com.epmet.dto.AttachmentDTO;
import com.epmet.dto.ExternalLinkDTO;
import com.epmet.dto.ModuleDTO;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.List;
/**
* @Description
* @Author zhaoqifeng
* @Date 2021/9/7 10:24
*/
@NoArgsConstructor
@Data
public class GuideEditFormDTO implements Serializable {
private static final long serialVersionUID = -7750999102010191460L;
/**
* 工作人员ID
*/
private String staffId;
/**
* 指南ID
*/
@NotBlank(message = "指南id不能为空")
private String guideId;
/**
* 标题
*/
@NotBlank(message = "标题不能为空")
private String title;
/**
* 标题
*/
@NotBlank(message = "分类不能为空")
private String categoryCode;
/**
* 机关类型 机关agency 网格grid 部门dept
*/
@NotBlank(message = "所属机关类型不能为空")
private String orgType;
/**
* 所属机关
*/
@NotBlank(message = "所属机关ID不能为空")
private String orgId;
/**
* 所属机关
*/
@NotBlank(message = "所属机关名不能为空")
private String orgName;
/**
* 外部链接
*/
private List<ExternalLinkDTO> externalLinks;
/**
* 内容模块
*/
private List<ModuleDTO> moduleList;
/**
* 附件
*/
private List<AttachmentDTO> attachmentList;
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save