Browse Source

Merge branch 'dev_bugfix_ljj' into dev_shibei_match

dev_shibei_match
sunyuchao 4 years ago
parent
commit
5085ee807d
  1. 2
      epmet-admin/epmet-admin-server/deploy/docker-compose-prod.yml
  2. 2
      epmet-admin/epmet-admin-server/pom.xml
  3. 2
      epmet-auth/deploy/docker-compose-prod.yml
  4. 2
      epmet-auth/pom.xml
  5. 2
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java
  6. 2
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/password/PasswordUtils.java
  7. 19
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/validator/PhoneValidatorUtils.java
  8. 2
      epmet-gateway/deploy/docker-compose-prod.yml
  9. 2
      epmet-gateway/pom.xml
  10. 1
      epmet-gateway/src/main/resources/bootstrap.yml
  11. 4
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/form/AllProjectFormDTO.java
  12. 2
      epmet-module/data-aggregator/data-aggregator-server/deploy/docker-compose-prod.yml
  13. 2
      epmet-module/data-aggregator/data-aggregator-server/pom.xml
  14. 69
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govproject/impl/GovProjectServiceImpl.java
  15. BIN
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/excel/data_template.xlsx
  16. 123
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govproject/ProjectDao.xml
  17. 2
      epmet-module/data-report/data-report-server/deploy/docker-compose-prod.yml
  18. 2
      epmet-module/data-report/data-report-server/pom.xml
  19. 2
      epmet-module/data-statistical/data-statistical-server/deploy/docker-compose-prod.yml
  20. 2
      epmet-module/data-statistical/data-statistical-server/pom.xml
  21. 3
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/project/ProjectEntity.java
  22. 19
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsGroupServiceImpl.java
  23. 244
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsProjectServiceImpl.java
  24. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/impl/ProjectProcessServiceImpl.java
  25. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/impl/ProjectServiceImpl.java
  26. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/FactGroupAgencyDailyService.java
  27. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/FactGroupGridDailyService.java
  28. 13
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/FactGroupAgencyDailyServiceImpl.java
  29. 13
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/FactGroupGridDailyServiceImpl.java
  30. 5
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/project/ProjectDao.xml
  31. 2
      epmet-module/epmet-common-service/common-service-server/deploy/docker-compose-prod.yml
  32. 2
      epmet-module/epmet-common-service/common-service-server/pom.xml
  33. 5
      epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/WorkDayServiceImpl.java
  34. 1
      epmet-module/epmet-common-service/common-service-server/src/main/resources/mapper/CalenderDao.xml
  35. 2
      epmet-module/epmet-heart/epmet-heart-server/deploy/docker-compose-prod.yml
  36. 2
      epmet-module/epmet-heart/epmet-heart-server/pom.xml
  37. 43
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcCommunitySelfOrganizationServiceImpl.java
  38. 2
      epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/IcCommunitySelfOrganizationDao.xml
  39. 2
      epmet-module/epmet-job/epmet-job-server/deploy/docker-compose-prod.yml
  40. 2
      epmet-module/epmet-job/epmet-job-server/pom.xml
  41. 10
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/ProjectSendMessageService.java
  42. 18
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/impl/ProjectSendMessageServiceImpl.java
  43. 43
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/ProjectWorkMinutesTask.java
  44. 2
      epmet-module/epmet-message/epmet-message-server/deploy/docker-compose-prod.yml
  45. 2
      epmet-module/epmet-message/epmet-message-server/pom.xml
  46. 2
      epmet-module/epmet-oss/epmet-oss-server/deploy/docker-compose-prod.yml
  47. 2
      epmet-module/epmet-oss/epmet-oss-server/pom.xml
  48. 2
      epmet-module/epmet-point/epmet-point-server/deploy/docker-compose-prod.yml
  49. 2
      epmet-module/epmet-point/epmet-point-server/pom.xml
  50. 4
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainCreateProjectFormDTO.java
  51. 4
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProcessProjectFormDTO.java
  52. 11
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdOpenFeignClient.java
  53. 21
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/ThirdOpenFeignClient.java
  54. 15
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/ThirdOpenFeignClientFallback.java
  55. 2
      epmet-module/epmet-third/epmet-third-server/deploy/docker-compose-prod.yml
  56. 2
      epmet-module/epmet-third/epmet-third-server/pom.xml
  57. 8
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/BlockChainProjectController.java
  58. 2
      epmet-module/gov-issue/gov-issue-server/deploy/docker-compose-prod.yml
  59. 2
      epmet-module/gov-issue/gov-issue-server/pom.xml
  60. 2
      epmet-module/gov-org/gov-org-server/deploy/docker-compose-prod.yml
  61. 2
      epmet-module/gov-org/gov-org-server/pom.xml
  62. 11
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/feign/GovProjectOpenFeignClient.java
  63. 15
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/feign/fallback/GovProjectOpenFeignClientFallback.java
  64. 2
      epmet-module/gov-project/gov-project-server/deploy/docker-compose-prod.yml
  65. 2
      epmet-module/gov-project/gov-project-server/pom.xml
  66. 13
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectController.java
  67. 11
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/ProjectDao.java
  68. 8
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/entity/ProjectEntity.java
  69. 9
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectService.java
  70. 21
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/BlockChainUploadServiceImpl.java
  71. 57
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java
  72. 2
      epmet-module/gov-project/gov-project-server/src/main/resources/db/migration/V0.0.17__project_work_minutes.sql
  73. 22
      epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectDao.xml
  74. 2
      epmet-module/open-data-worker/open-data-worker-server/deploy/docker-compose-prod.yml
  75. 2
      epmet-module/open-data-worker/open-data-worker-server/pom.xml
  76. 2
      epmet-module/oper-customize/oper-customize-server/deploy/docker-compose-prod.yml
  77. 2
      epmet-module/oper-customize/oper-customize-server/pom.xml
  78. 2
      epmet-module/resi-group/resi-group-server/deploy/docker-compose-prod.yml
  79. 2
      epmet-module/resi-group/resi-group-server/pom.xml
  80. 2
      epmet-module/resi-guide/resi-guide-server/deploy/docker-compose-prod.yml
  81. 2
      epmet-module/resi-guide/resi-guide-server/pom.xml
  82. 2
      epmet-module/resi-hall/resi-hall-server/deploy/docker-compose-prod.yml
  83. 2
      epmet-module/resi-hall/resi-hall-server/pom.xml
  84. 2
      epmet-module/resi-mine/resi-mine-server/deploy/docker-compose-prod.yml
  85. 2
      epmet-module/resi-mine/resi-mine-server/pom.xml
  86. 2
      epmet-module/resi-partymember/resi-partymember-server/deploy/docker-compose-prod.yml
  87. 2
      epmet-module/resi-partymember/resi-partymember-server/pom.xml
  88. 2
      epmet-openapi/epmet-openapi-scan/deploy/docker-compose-prod.yml
  89. 2
      epmet-openapi/epmet-openapi-scan/pom.xml
  90. 2
      epmet-user/epmet-user-server/deploy/docker-compose-prod.yml
  91. 2
      epmet-user/epmet-user-server/pom.xml
  92. 4
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java

2
epmet-admin/epmet-admin-server/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
epmet-admin-server: epmet-admin-server:
container_name: epmet-admin-server-prod container_name: epmet-admin-server-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-admin-server:0.3.28 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-admin-server:0.3.32
ports: ports:
- "8082:8082" - "8082:8082"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

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

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

2
epmet-auth/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
epmet-auth-server: epmet-auth-server:
container_name: epmet-auth-server-prod container_name: epmet-auth-server-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-auth:0.3.96 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-auth:0.3.98
ports: ports:
- "8081:8081" - "8081:8081"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

2
epmet-auth/pom.xml

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

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

@ -159,6 +159,8 @@ public enum EpmetErrorCode {
MATTER_NAME_EXISTS_APPOINTMENT_ERROR(8532, "存在重复预约事项"), MATTER_NAME_EXISTS_APPOINTMENT_ERROR(8532, "存在重复预约事项"),
ERROR_DATE(8533, "不合理日期"), ERROR_DATE(8533, "不合理日期"),
CHECK_PHONE_ERROR(8534, "号码不合法"),
// 该错误不会提示给前端,只是后端传输错误信息用。 // 该错误不会提示给前端,只是后端传输错误信息用。
ACCESS_SQL_FILTER_MISSION_ARGS(8701, "缺少生成权限过滤SQL所需参数"), ACCESS_SQL_FILTER_MISSION_ARGS(8701, "缺少生成权限过滤SQL所需参数"),
OPER_ADD_CUSTOMER_ROOT_AGENCY_ERROR(8702, "添加客户根级组织失败"), OPER_ADD_CUSTOMER_ROOT_AGENCY_ERROR(8702, "添加客户根级组织失败"),

2
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/password/PasswordUtils.java

@ -39,7 +39,7 @@ public class PasswordUtils {
public static void main(String[] args) { public static void main(String[] args) {
String str = "admin"; String str = "wangqing";
String password = encode(str); String password = encode(str);
System.out.println(password); System.out.println(password);

19
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/validator/PhoneValidatorUtils.java

@ -12,6 +12,12 @@ import java.util.regex.Pattern;
public class PhoneValidatorUtils { public class PhoneValidatorUtils {
private static final String REGEX_MOBILE ="((\\+86|0086)?\\s*)((134[0-8]\\d{7})|(((13([0-3]|[5-9]))|(14[5-9])|15([0-3]|[5-9])|(16(2|[5-7]))|17([0-3]|[5-8])|18[0-9]|19([0-9]))\\d{8})|(14(0|1|4)0\\d{7})|(1740([0-5]|[6-9]|[10-12])\\d{7}))"; private static final String REGEX_MOBILE ="((\\+86|0086)?\\s*)((134[0-8]\\d{7})|(((13([0-3]|[5-9]))|(14[5-9])|15([0-3]|[5-9])|(16(2|[5-7]))|17([0-3]|[5-8])|18[0-9]|19([0-9]))\\d{8})|(14(0|1|4)0\\d{7})|(1740([0-5]|[6-9]|[10-12])\\d{7}))";
/**
* 正则固定电话号码,可带区号,然后至少6,8位数字
*/
private static final String REGEX_TEL = "^(\\d{3,4}-)?\\d{6,8}$";
private static final Pattern PATTERN_REGEX_TEL = Pattern.compile(REGEX_TEL);
/** /**
* 判断是否是手机号 * 判断是否是手机号
* @param tel 手机号 * @param tel 手机号
@ -24,8 +30,19 @@ public class PhoneValidatorUtils {
return Pattern.matches(REGEX_MOBILE, tel); return Pattern.matches(REGEX_MOBILE, tel);
} }
/**
* 验证固定电话号码
*/
public static boolean isTel( String str) {
return isMatch(PATTERN_REGEX_TEL, str);
}
public static boolean isMatch(Pattern pattern, String str) {
return StringUtils.isNotEmpty(str) && pattern.matcher(str).matches();
}
public static void main(String[] args) { public static void main(String[] args) {
System.out.println(isMobile("19353198889")); System.out.println(isTel("2887438"));
} }
} }

2
epmet-gateway/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
epmet-gateway-server: epmet-gateway-server:
container_name: epmet-gateway-server-prod container_name: epmet-gateway-server-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-gateway:0.3.69 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-gateway:0.3.71
ports: ports:
- "8080:8080" - "8080:8080"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

2
epmet-gateway/pom.xml

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

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

@ -496,6 +496,7 @@ epmet:
- /gov/project/project/platformcallback - /gov/project/project/platformcallback
- /oper/customize/customerstartpage/homestartpage - /oper/customize/customerstartpage/homestartpage
- /epmet/point/mqCallback/** - /epmet/point/mqCallback/**
- /tduck-api/**
# 外部应用认证,使用AccessToken等头进行认证 # 外部应用认证,使用AccessToken等头进行认证
externalOpenUrls: externalOpenUrls:

4
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/form/AllProjectFormDTO.java

@ -38,4 +38,8 @@ public class AllProjectFormDTO implements Serializable {
private List<String> gridIdList; private List<String> gridIdList;
private String agencyId; private String agencyId;
private List<String> agencyIdList;
private String customerId;
} }

2
epmet-module/data-aggregator/data-aggregator-server/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
data-aggregator-server: data-aggregator-server:
container_name: data-aggregator-server-prod container_name: data-aggregator-server-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/data-aggregator-server:0.3.78 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/data-aggregator-server:0.3.92
ports: ports:
- "8114:8114" - "8114:8114"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

2
epmet-module/data-aggregator/data-aggregator-server/pom.xml

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

69
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govproject/impl/GovProjectServiceImpl.java

@ -2,13 +2,16 @@ package com.epmet.dataaggre.service.govproject.impl;
import com.epmet.commons.dynamic.datasource.annotation.DataSource; import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.tools.constant.NumConstant; 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.EpmetException;
import com.epmet.commons.tools.exception.RenException; 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.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils; import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.Result;
import com.epmet.dataaggre.constant.DataSourceConstant; import com.epmet.dataaggre.constant.DataSourceConstant;
import com.epmet.dataaggre.constant.ProjectConstant;
import com.epmet.dataaggre.dao.govproject.ProjectDao; import com.epmet.dataaggre.dao.govproject.ProjectDao;
import com.epmet.dataaggre.dto.datastats.result.FactAgencyProjectMonthResultDTO; import com.epmet.dataaggre.dto.datastats.result.FactAgencyProjectMonthResultDTO;
import com.epmet.dataaggre.dto.datastats.result.FactAgencyProjectResultDTO; import com.epmet.dataaggre.dto.datastats.result.FactAgencyProjectResultDTO;
@ -167,61 +170,21 @@ public class GovProjectServiceImpl implements GovProjectService {
@Override @Override
public AllProjectResultDTO allProjectList(TokenDto tokenDto, AllProjectFormDTO formDTO) { public AllProjectResultDTO allProjectList(TokenDto tokenDto, AllProjectFormDTO formDTO) {
AllProjectResultDTO resultDTO = new AllProjectResultDTO(); AllProjectResultDTO resultDTO = new AllProjectResultDTO();
String agencyId = govOrgService.getAgencyIdByUserId(tokenDto.getUserId()); if (CollectionUtils.isEmpty(formDTO.getAgencyIdList()) && CollectionUtils.isEmpty(formDTO.getGridIdList())) {
int pageIndex = (formDTO.getPageNo() - NumConstant.ONE) * formDTO.getPageSize(); CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(tokenDto.getCustomerId(), tokenDto.getUserId());
if (null == staffInfo) {
if (StringUtils.isEmpty(agencyId)) { throw new EpmetException(EpmetErrorCode.SERVER_ERROR.getCode(), "获取工作人员信息失败");
throw new RenException(String.format("获取工作人员组织信息失败,staffId->%s", tokenDto.getUserId())); }
List<String> agencyList = new ArrayList<>();
agencyList.add(staffInfo.getAgencyId());
formDTO.setAgencyIdList(agencyList);
} }
formDTO.setAgencyId(agencyId); formDTO.setCustomerId(tokenDto.getCustomerId());
PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize());
List<ProjectInfoDTO> projectList = projectDao.getAllProject(formDTO); List<ProjectInfoDTO> projectList = projectDao.getAllProject(formDTO);
PageInfo<ProjectInfoDTO> pageInfo = new PageInfo<>(projectList);
if (CollectionUtils.isNotEmpty(projectList)) { if (CollectionUtils.isNotEmpty(projectList)) {
resultDTO.setProjectCount(projectList.size()); resultDTO.setProjectCount((int) pageInfo.getTotal());
projectList.forEach(project -> {
//计算项目耗时
Integer timeSpent;
if (ProjectConstant.PROJECT_STATUS_CLOSED.equals(project.getProjectStatus())) {
timeSpent = getTimeSpent(project.getProjectId(), project.getStartTime(), project.getEndTime());
} else {
timeSpent = getTimeSpent(project.getProjectId(), project.getStartTime(), new Date());
}
project.setTimeSpent(timeSpent);
//获取当前处理部门
ProjectDTO projectDTO = new ProjectDTO();
projectDTO.setId(project.getProjectId());
List<String> departmentList = projectDao.selectDepartmentNameList(projectDTO);
project.setCurrentDisposeDept(departmentList);
});
int pageSize = pageIndex + formDTO.getPageSize();
if (pageSize > projectList.size()) {
pageSize = projectList.size();
}
//排序(创建:create 更新:update 部门:department 耗时:date 次数:count)
switch (formDTO.getSortType()) {
case "create":
projectList = projectList.stream().sorted(Comparator.comparing(ProjectInfoDTO::getProjectTime).reversed())
.collect(Collectors.toList()).subList(pageIndex, pageSize);
break;
case "update":
projectList = projectList.stream().sorted(Comparator.comparing(ProjectInfoDTO::getUpdateTime).reversed())
.collect(Collectors.toList()).subList(pageIndex, pageSize);
break;
case "department":
projectList = projectList.stream().sorted(Comparator.comparing(ProjectInfoDTO::getDepartmentCount).reversed())
.collect(Collectors.toList()).subList(pageIndex, pageSize);
break;
case "date":
projectList = projectList.stream().sorted(Comparator.comparing(ProjectInfoDTO::getTimeSpent).reversed())
.collect(Collectors.toList()).subList(pageIndex, pageSize);
break;
case "count":
projectList = projectList.stream().sorted(Comparator.comparing(ProjectInfoDTO::getProcessCount).reversed())
.collect(Collectors.toList()).subList(pageIndex, pageSize);
break;
default:
break;
}
resultDTO.setProjectList(projectList); resultDTO.setProjectList(projectList);
} else { } else {
resultDTO.setProjectCount(NumConstant.ZERO); resultDTO.setProjectCount(NumConstant.ZERO);

BIN
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/excel/data_template.xlsx

Binary file not shown.

123
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govproject/ProjectDao.xml

@ -4,38 +4,125 @@
<mapper namespace="com.epmet.dataaggre.dao.govproject.ProjectDao"> <mapper namespace="com.epmet.dataaggre.dao.govproject.ProjectDao">
<select id="getAllProject" resultType="com.epmet.dataaggre.dto.govproject.result.ProjectInfoDTO"> <select id="getAllProject" resultType="com.epmet.dataaggre.dto.govproject.result.ProjectInfoDTO">
SELECT DISTINCT SELECT
p.ID AS projectId, p.ID AS projectId,
p.TITLE AS projectTitle, p.TITLE AS projectTitle,
p.`STATUS` AS projectStatus, p.`STATUS` AS projectStatus,
unix_timestamp( unix_timestamp(
date_format( p.CREATED_TIME, '%Y%m%d' )) AS projectTime, date_format( p.CREATED_TIME, '%Y%m%d' )) AS projectTime,
unix_timestamp( unix_timestamp(
date_format( updateTime, '%Y%m%d' )) AS updateTime, date_format( updateTime, '%Y%m%d' )) AS updateTime,
p.CREATED_TIME AS startTime, p.CREATED_TIME AS startTime,
updateTime AS endTime, updateTime AS endTime,
p.WORK_MINUTES DIV 60 AS timeSpent,
departmentCount, departmentCount,
IFNULL( processCount, 0 ) AS processCount, IFNULL( processCount, 0 ) AS processCount,
IFNULL( pp.PUBLIC_REPLY, '' ) AS publicReply IFNULL( pp.PUBLIC_REPLY, '' ) AS publicReply
FROM FROM
project p project p
LEFT JOIN ( SELECT PROJECT_ID, GRID_ID FROM project_related_personnel WHERE DEL_FLAG = '0' AND SOURCE_TYPE = 'issue' ) prp ON p.ID = prp.PROJECT_ID INNER JOIN ( SELECT PROJECT_ID, MAX( CREATED_TIME ) AS updateTime FROM project_process ppro WHERE CUSTOMER_ID = #{customerId} GROUP BY PROJECT_ID ) ppro ON p.ID = ppro.PROJECT_ID
INNER JOIN ( SELECT PROJECT_ID, MAX( CREATED_TIME ) AS updateTime FROM project_process ppro GROUP BY PROJECT_ID ) ppro ON p.ID = ppro.PROJECT_ID INNER JOIN ( SELECT PROJECT_ID, COUNT( DISTINCT DEPARTMENT_NAME ) AS departmentCount FROM project_staff WHERE CUSTOMER_ID = #{customerId} GROUP BY PROJECT_ID ) ps ON ps.PROJECT_ID = p.ID
INNER JOIN ( SELECT PROJECT_ID, COUNT( DISTINCT DEPARTMENT_NAME ) AS departmentCount FROM project_staff GROUP BY PROJECT_ID ) ps ON ps.PROJECT_ID = p.ID LEFT JOIN ( SELECT PROJECT_ID, COUNT( ID ) AS processCount FROM project_process WHERE DEL_FLAG = '0' AND OPERATION != 'created' AND CUSTOMER_ID = #{customerId} GROUP BY PROJECT_ID ) ppc ON ppc.PROJECT_ID = p.ID
LEFT JOIN ( SELECT PROJECT_ID, COUNT( ID ) AS processCount FROM project_process WHERE DEL_FLAG = '0' AND OPERATION != 'created' GROUP BY PROJECT_ID ) ppc ON ppc.PROJECT_ID = p.ID LEFT JOIN project_process pp ON p.ID = pp.PROJECT_ID
LEFT JOIN project_process pp ON p.ID = pp.PROJECT_ID AND pp.CUSTOMER_ID = #{customerId}
AND pp.OPERATION = 'close' AND pp.DEL_FLAG = '0' AND pp.OPERATION = 'close'
WHERE WHERE
p.DEL_FLAG = '0' p.DEL_FLAG = '0'
AND p.ORG_ID_PATH LIKE concat('%', #{agencyId}, '%') AND p.CUSTOMER_ID = #{customerId}
<if test="gridIdList != null and gridIdList.size() > 0"> AND p.ORG_ID_PATH LIKE concat('%', #{agencyId}, '%')
<foreach collection="gridIdList" item="gridId" open="AND (" close=" )" separator=" OR "> <if test="projectStatus != null and projectStatus != ''">
prp.GRID_ID = #{gridId} AND p.`STATUS` = #{projectStatus}
</foreach> </if>
</if> <choose>
<if test="projectStatus != null and projectStatus != ''"> <when test="agencyIdList != null and agencyIdList.size() > 0">
AND p.`STATUS` = #{projectStatus} <foreach collection="agencyIdList" item="agency" open="AND (" close=" )" separator=" OR ">
</if> p.ORG_ID_PATH LIKE concat('%', #{agency}, '%')
</foreach>
<if test="gridIdList != null and gridIdList.size() > 0">
OR p.ID IN (
SELECT
PROJECT_ID
FROM
project_related_personnel
WHERE
DEL_FLAG = '0'
AND SOURCE_TYPE = 'issue'
AND CUSTOMER_ID = #{customerId}
<foreach collection="gridIdList" item="gridId" open="AND (" close=" )" separator=" OR ">
GRID_ID = #{gridId}
</foreach>
UNION ALL
SELECT
PROJECT_ID
FROM
resi_event_report_org a
INNER JOIN resi_event b ON a.RESI_EVENT_ID = b.ID
AND b.CUSTOMER_ID = #{customerId}
AND b.SHIFT_PROJECT = 1
WHERE
a.DEL_FLAG = '0'
AND a.ORG_TYPE = 'grid'
AND a.CUSTOMER_ID = #{customerId}
<foreach collection="gridIdList" item="gridId" open="AND (" close=" )" separator=" OR ">
ORG_ID = #{gridId}
</foreach>
)
</if>
</when>
<otherwise>
<if test="gridIdList != null and gridIdList.size() > 0">
AND p.ID IN (
SELECT
PROJECT_ID
FROM
project_related_personnel
WHERE
DEL_FLAG = '0'
AND SOURCE_TYPE = 'issue'
AND CUSTOMER_ID = #{customerId}
<foreach collection="gridIdList" item="gridId" open="AND (" close=" )" separator=" OR ">
GRID_ID = #{gridId}
</foreach>
UNION ALL
SELECT
PROJECT_ID
FROM
resi_event_report_org a
INNER JOIN resi_event b ON a.RESI_EVENT_ID = b.ID
AND b.CUSTOMER_ID = #{customerId}
AND b.SHIFT_PROJECT = 1
WHERE
a.DEL_FLAG = '0'
AND a.ORG_TYPE = 'grid'
AND a.CUSTOMER_ID = #{customerId}
<foreach collection="gridIdList" item="gridId" open="AND (" close=" )" separator=" OR ">
ORG_ID = #{gridId}
</foreach>
)
</if>
</otherwise>
</choose>
<choose>
<when test="sortType == 'create'">
ORDER BY projectTime DESC
</when>
<when test="sortType == 'update'">
ORDER BY updateTime DESC
</when>
<when test="sortType == 'department'">
ORDER BY departmentCount DESC
</when>
<when test="sortType == 'count'">
ORDER BY processCount DESC
</when>
<when test="sortType == 'date'">
ORDER BY timeSpent DESC
</when>
<otherwise>
ORDER BY projectTime DESC
</otherwise>
</choose>
</select> </select>
<!-- 查询项目信息 --> <!-- 查询项目信息 -->
<select id="selectProjectInfoClosed" resultType="com.epmet.dataaggre.dto.govissue.result.IssueListResultDTO"> <select id="selectProjectInfoClosed" resultType="com.epmet.dataaggre.dto.govissue.result.IssueListResultDTO">

2
epmet-module/data-report/data-report-server/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
data-report-server: data-report-server:
container_name: data-report-server-prod container_name: data-report-server-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/data-report-server:0.3.196 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/data-report-server:0.3.210
ports: ports:
- "8108:8108" - "8108:8108"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

2
epmet-module/data-report/data-report-server/pom.xml

@ -3,7 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<version>0.3.196</version> <version>0.3.210</version>
<artifactId>data-report-server</artifactId> <artifactId>data-report-server</artifactId>
<parent> <parent>

2
epmet-module/data-statistical/data-statistical-server/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
data-statistical-server: data-statistical-server:
container_name: data-statistical-server-prod container_name: data-statistical-server-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/data-statistical-server:0.3.300 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/data-statistical-server:0.3.345
ports: ports:
- "8108:8108" - "8108:8108"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

2
epmet-module/data-statistical/data-statistical-server/pom.xml

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

3
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/project/ProjectEntity.java

@ -95,4 +95,7 @@ public class ProjectEntity extends BaseEpmetEntity {
* */ * */
private String locateDimension; private String locateDimension;
private Integer pageNo = 1;
private Integer pageSize = 20;
} }

19
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsGroupServiceImpl.java

@ -23,6 +23,7 @@ import com.epmet.service.stats.*;
import com.epmet.util.DimIdGenerator; import com.epmet.util.DimIdGenerator;
import com.epmet.util.ModuleConstant; import com.epmet.util.ModuleConstant;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -89,10 +90,15 @@ public class StatsGroupServiceImpl implements StatsGroupService {
DimIdGenerator.DimIdBean dimIdBean = this.getDimIdBean(formDTO); DimIdGenerator.DimIdBean dimIdBean = this.getDimIdBean(formDTO);
if (customerIds.size() != NumConstant.ZERO) { if (customerIds.size() != NumConstant.ZERO) {
customerIds.forEach(customerId -> { customerIds.forEach(customerId -> {
Boolean status = true;
try { try {
List<GridIdListByCustomerResultDTO> gridsInfo = customerGridService.getCustomerGridIdList(customerId, dimIdBean.getDateId()); List<GridIdListByCustomerResultDTO> gridsInfo = customerGridService.getCustomerGridIdList(customerId, dimIdBean.getDateId());
List<GroupGridDailyResultDTO> resultDTOS = groupDataService.groupGridDaily(customerId, dimIdBean, gridsInfo); List<List<GridIdListByCustomerResultDTO>> partition = ListUtils.partition(gridsInfo, NumConstant.ONE_HUNDRED);
factGroupGridDailyService.statisticsGroupGridDaily(resultDTOS, customerId); for (List<GridIdListByCustomerResultDTO> p : partition) {
List<GroupGridDailyResultDTO> resultDTOS = groupDataService.groupGridDaily(customerId, dimIdBean, p);
factGroupGridDailyService.statisticsGroupGridDaily(resultDTOS, customerId,status);
status = false;
}
} catch (Exception e) { } catch (Exception e) {
log.error(String.format(GroupConstant.STATS_FAILED_GRID_DAILY, customerId, LocalDate.now(), e)); log.error(String.format(GroupConstant.STATS_FAILED_GRID_DAILY, customerId, LocalDate.now(), e));
} }
@ -129,10 +135,15 @@ public class StatsGroupServiceImpl implements StatsGroupService {
if (customerIds.size() != NumConstant.ZERO) { if (customerIds.size() != NumConstant.ZERO) {
DimIdGenerator.DimIdBean dimIdBean = this.getDimIdBean(formDTO); DimIdGenerator.DimIdBean dimIdBean = this.getDimIdBean(formDTO);
customerIds.forEach(customerId -> { customerIds.forEach(customerId -> {
Boolean status = true;
try { try {
List<DimAgencyDTO> customerAgencyInfos = dimAgencyService.getAgencyInfoByCustomerId(customerId); List<DimAgencyDTO> customerAgencyInfos = dimAgencyService.getAgencyInfoByCustomerId(customerId);
List<AgencyGroupDailyResultDTO> agencyGroupDaily = this.getAgencyGroupDaily(customerAgencyInfos, dimIdBean, customerId); List<List<DimAgencyDTO>> partition = ListUtils.partition(customerAgencyInfos, NumConstant.ONE_HUNDRED);
factGroupAgencyDailyService.insertGroupAgencyDaily(agencyGroupDaily, customerId); for (List<DimAgencyDTO> p : partition) {
List<AgencyGroupDailyResultDTO> agencyGroupDaily = this.getAgencyGroupDaily(p, dimIdBean, customerId);
factGroupAgencyDailyService.insertGroupAgencyDaily(agencyGroupDaily, customerId,status);
status = false;
}
} catch (Exception e) { } catch (Exception e) {
log.error(String.format(GroupConstant.STATS_FAILED_AGENCY_DAILY, customerId, LocalDate.now(), e)); log.error(String.format(GroupConstant.STATS_FAILED_AGENCY_DAILY, customerId, LocalDate.now(), e));
} }

244
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsProjectServiceImpl.java

@ -1,5 +1,6 @@
package com.epmet.service.impl; package com.epmet.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.utils.DateUtils; import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.constant.ProjectConstant; import com.epmet.constant.ProjectConstant;
@ -112,6 +113,8 @@ public class StatsProjectServiceImpl implements StatsProjectService {
dimAgencyDTO.setCustomerId(customerId); dimAgencyDTO.setCustomerId(customerId);
List<DimAgencyDTO> dimAgencyList = dimAgencyService.getDimAgencyList(dimAgencyDTO); List<DimAgencyDTO> dimAgencyList = dimAgencyService.getDimAgencyList(dimAgencyDTO);
/*
//2022.1.12 客户数据量大 调整计算逻辑,一千条已查询,封装数据,将这部分业务数据查询拿到子方法分页查询处理 sun
//3:根据客户Id查询项目业务表已结案数据(查询传入日期及之前的数据) //3:根据客户Id查询项目业务表已结案数据(查询传入日期及之前的数据)
ProjectEntity projectEntity = new ProjectEntity(); ProjectEntity projectEntity = new ProjectEntity();
projectEntity.setCustomerId(customerId); projectEntity.setCustomerId(customerId);
@ -133,13 +136,14 @@ public class StatsProjectServiceImpl implements StatsProjectService {
//4-3.遍历删除项目节点表查询的无效数据 //4-3.遍历删除项目节点表查询的无效数据
processList.removeIf(next -> map.containsKey(next.getProjectId())); processList.removeIf(next -> map.containsKey(next.getProjectId()));
} }
//20210721 sun end //20210721 sun end */
//5:机关层级日月统计 //5:机关层级日月统计
if (null != dimAgencyList && dimAgencyList.size() > NumConstant.ZERO) { if (null != dimAgencyList && dimAgencyList.size() > NumConstant.ZERO) {
//5.1:执行机关日数据统计 //5.1:执行机关日数据统计
try { try {
agencyDateProjectStats(customerId, dimId, date, dimAgencyList, projectList, processList); //agencyDateProjectStats(customerId, dimId, date, dimAgencyList, projectList, processList);
agencyDateProjectStats(customerId, dimId, date, dimAgencyList);
} catch (Exception e) { } catch (Exception e) {
log.error(String.format(ProjectConstant.STATS_FAILED_PREFIX, "agencyDateProjectStats", customerId, dimId.getDateId()), e); log.error(String.format(ProjectConstant.STATS_FAILED_PREFIX, "agencyDateProjectStats", customerId, dimId.getDateId()), e);
} }
@ -159,7 +163,241 @@ public class StatsProjectServiceImpl implements StatsProjectService {
* @Author sun * @Author sun
* @Description 数据-项目-机关日统计 * @Description 数据-项目-机关日统计
**/ **/
private String agencyDateProjectStats(String customerId, DimIdGenerator.DimIdBean dimId, Date date, List<DimAgencyDTO> dimAgencyList, List<ProjectEntity> projectList, List<ProjectProcessEntity> processList) { private String agencyDateProjectStats(String customerId, DimIdGenerator.DimIdBean dimId, Date date, List<DimAgencyDTO> dimAgencyList) {
//机关日统计数据【agencyId->FactAgencyProjectDailyEntity】
Map<String, FactAgencyProjectDailyEntity> mapList = new HashMap<>();
//计算百分比使用,保留小数点后两位
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setMaximumFractionDigits(6);
//存放已结案项目Id,用于统计已结案中已解决、未解决数
Map<String, String> closeMap = new HashMap<>();
//存放前一日已结案项目Id,用于统计日增量中已结案项目的已解决、未解决数量
Map<String, String> closeDateMap = new HashMap<>();
//20210721 sun 业务逻辑调整,网格删除,组织没有删除情况,相应的组织层级数据统计应舍弃以删除网格数据 start
//处理逻辑:查询已删除网格下项目Id,将已查询的项目、节点数据中的脏数据剔除【项目库有张表有网格Id,可以查出每个项目所属网格,但是关联该表后sql查询效率极低固舍弃此方案】
//4-1.查询客户下已删除网格列表下存在的项目Id集合
List<String> list = customerGridService.getdelGridProjectIdList(customerId);
//20210721 sun end
//一、先分页查询节点数据,封装每个组织的项目总数、已结案总数;日增量中项目总数、已结案总数
ProjectEntity projectEntity = new ProjectEntity();
projectEntity.setCustomerId(customerId);
projectEntity.setCreatedTime(date);
projectEntity.setStatus(ProjectConstant.CLOSED);
projectEntity.setPageSize(NumConstant.FIFTY);
int pageNo = NumConstant.ONE;
int size = NumConstant.ZERO;
List<ProjectProcessEntity> processList = new ArrayList<>();
do {
//1.一千条一循环查询节点数据,封装每个组织对应数据
projectEntity.setPageNo(pageNo);
processList = projectProcessService.getProcessList(projectEntity);
size = processList.size();
pageNo++;
//遍历删除项目节点表查询的无效数据
if (list.size() > NumConstant.ZERO) {
Map<String, String> map = list.stream().collect(Collectors.toMap(String::toString, v -> v, (c1, c2) -> c1));
processList.removeIf(next -> map.containsKey(next.getProjectId()));
}
//2:遍历机关维度数据,统计每个机关各项指标数
for (DimAgencyDTO agency : dimAgencyList) {
//2-1:存放当前机关及所有下级机关Id
Map<String, String> map = new HashMap<>();
map.put(agency.getId(), agency.getId());
String subPids = ((null == agency.getPids() || "".equals(agency.getPids())) ? agency.getId() : agency.getPids() + ":" + agency.getId());
dimAgencyList.forEach(sub -> {
if (sub.getPids().contains(subPids)) {
map.put(sub.getId(), sub.getId());
}
});
//机关下截止当前日期的项目总数、已结案总数、已结案已解决总数、已结案未解决总数
AtomicInteger projectTotal = new AtomicInteger(0);
AtomicInteger closedTotal = new AtomicInteger(0);
//日增量中项目总数、已结案总数、已结案已解决总数、已结案未解决总数
AtomicInteger projectIncr = new AtomicInteger(0);
AtomicInteger closedIncr = new AtomicInteger(0);
//2-2:遍历进展数据,统计截止当日的项目总量、处理中总量、已结案总量以及日增量中的项目总量、处理中总量、已结案总量
processList.forEach(process -> {
//当前机关及下级
if (map.containsKey(process.getAgencyId())) {
//进展表中是创建项目状态的数据总数即为客户该机关下项目总数
if (ProjectConstant.CREATED.equals(process.getOperation())) {
projectTotal.addAndGet(1);
if (date.equals(process.getCreatedTime())) {
//日增量总数
projectIncr.addAndGet(1);
}
}
if (ProjectConstant.CLOSE.equals(process.getOperation())) {
//截止当前日期的结案总数
closedTotal.addAndGet(1);
closeMap.put(process.getProjectId(), process.getProjectId());
if (date.equals(process.getCreatedTime())) {
//日增量已结案总数
closedIncr.addAndGet(1);
closeDateMap.put(process.getProjectId(), process.getProjectId());
}
}
}
});
//2-3:封装机关日数据对象
FactAgencyProjectDailyEntity entity = new FactAgencyProjectDailyEntity();
if (mapList.containsKey(agency.getId())) {
entity = mapList.get(agency.getId());
entity.setProjectTotal(entity.getProjectTotal() + projectTotal.intValue());
entity.setPendingTotal(entity.getPendingTotal() + projectTotal.intValue() - closedTotal.intValue());
entity.setClosedTotal(entity.getClosedTotal() + closedTotal.intValue());
if (projectTotal.intValue() > NumConstant.ZERO) {
entity.setPendingRatio(new BigDecimal(numberFormat.format((float) entity.getPendingTotal() / (float) entity.getProjectTotal())));
entity.setClosedRatio(new BigDecimal(numberFormat.format((float) entity.getClosedTotal() / (float) entity.getProjectTotal())));
}
entity.setProjectIncr(entity.getProjectIncr() + projectIncr.intValue());
entity.setPendingIncr(entity.getPendingIncr() + projectIncr.intValue());
entity.setClosedIncr(entity.getClosedIncr() + closedIncr.intValue());
} else {
entity.setCustomerId(customerId);
entity.setAgencyId(agency.getId());
entity.setParentId(agency.getPid());
entity.setDateId(dimId.getDateId());
entity.setWeekId(dimId.getWeekId());
entity.setMonthId(dimId.getMonthId());
entity.setQuarterId(dimId.getQuarterId());
entity.setYearId(dimId.getYearId());
entity.setProjectTotal(projectTotal.intValue());
entity.setPendingTotal(projectTotal.intValue() - closedTotal.intValue());
entity.setClosedTotal(closedTotal.intValue());
if (projectTotal.intValue() > NumConstant.ZERO) {
entity.setPendingRatio(new BigDecimal(numberFormat.format((float) entity.getPendingTotal() / (float) entity.getProjectTotal())));
entity.setClosedRatio(new BigDecimal(numberFormat.format((float) entity.getClosedTotal() / (float) entity.getProjectTotal())));
}
entity.setProjectIncr(projectIncr.intValue());
entity.setPendingIncr(projectIncr.intValue());
entity.setClosedIncr(closedIncr.intValue());
}
mapList.put(agency.getId(), entity);
}
} while (size == NumConstant.FIFTY);
//二、再分页查询项目表数据,封装每个组织的已结案已解决总数、已结案未解决总数;日增量中已结案已解决总数、已结案未解决总数
int num = NumConstant.ONE;
List<ProjectEntity> projectList = new ArrayList<>();
do {
//3.一千条一循环查询项目数据,封装每个组织对应数据
projectEntity.setPageNo(num);
projectList = projectService.getProjectList(projectEntity);
size = projectList.size();
num++;
//遍历删除项目主表查询的无效数据
if (list.size() > NumConstant.ZERO) {
Map<String, String> map = list.stream().collect(Collectors.toMap(String::toString, v -> v, (c1, c2) -> c1));
projectList.removeIf(next -> map.containsKey(next.getId()));
}
//4.遍历机关维度数据,统计每个机关各项指标数
for (DimAgencyDTO agency : dimAgencyList) {
//4-1:存放当前机关及所有下级机关Id
Map<String, String> map = new HashMap<>();
map.put(agency.getId(), agency.getId());
String subPids = ((null == agency.getPids() || "".equals(agency.getPids())) ? agency.getId() : agency.getPids() + ":" + agency.getId());
dimAgencyList.forEach(sub -> {
if (sub.getPids().contains(subPids)) {
map.put(sub.getId(), sub.getId());
}
});
//机关下截止当前日期的已结案已解决总数、已结案未解决总数
AtomicInteger resolvedTotal = new AtomicInteger(0);
AtomicInteger unResolvedTotal = new AtomicInteger(0);
//日增量中项目已结案已解决总数、已结案未解决总数
AtomicInteger resolvedIncr = new AtomicInteger(0);
AtomicInteger unResolvedIncr = new AtomicInteger(0);
//4-2:遍历项目业务数据,统计截止当日的已结案已解决总量、已结案未解决总量以及日增量中的已结案已解决总量、已结案未解决总量
projectList.forEach(project -> {
//当前机关及下级
if (map.containsKey(project.getAgencyId())) {
if (closeMap.containsKey(project.getId())) {
//已结案已解决
if (ProjectConstant.RESOLVED.equals(project.getClosedStatus())) {
//截止当日的已结案已解决总量
resolvedTotal.addAndGet(1);
if (closeDateMap.containsKey(project.getId())) {
//日增量中的已结案已解决总量
resolvedIncr.addAndGet(1);
}
}
//已结案未解决
if (ProjectConstant.UNRESOLVED.equals(project.getClosedStatus())) {
//截止当日的已结案未解决总量
unResolvedTotal.addAndGet(1);
if (closeDateMap.containsKey(project.getId())) {
//日增量中的已结案未解决总量
unResolvedIncr.addAndGet(1);
}
}
}
}
});
//4-3.封装机关日数据对象
FactAgencyProjectDailyEntity entity = new FactAgencyProjectDailyEntity();
if (mapList.containsKey(agency.getId())) {
entity = mapList.get(agency.getId());
entity.setResolvedTotal(entity.getResolvedTotal() + resolvedTotal.intValue());
entity.setUnresolvedTotal(entity.getUnresolvedTotal() + unResolvedTotal.intValue());
if (entity.getClosedTotal() > NumConstant.ZERO) {
entity.setResolvedRatio(new BigDecimal(numberFormat.format((float) entity.getResolvedTotal() / (float) entity.getClosedTotal())));
entity.setUnresolvedRatio(new BigDecimal(numberFormat.format((float) entity.getUnresolvedTotal() / (float) entity.getClosedTotal())));
}
entity.setResolvedIncr(entity.getResolvedIncr() + resolvedIncr.intValue());
entity.setUnresolvedIncr(entity.getUnresolvedIncr() + unResolvedIncr.intValue());
} else {
entity.setCustomerId(customerId);
entity.setAgencyId(agency.getId());
entity.setParentId(agency.getPid());
entity.setDateId(dimId.getDateId());
entity.setWeekId(dimId.getWeekId());
entity.setMonthId(dimId.getMonthId());
entity.setQuarterId(dimId.getQuarterId());
entity.setYearId(dimId.getYearId());
entity.setResolvedTotal(resolvedTotal.intValue());
entity.setUnresolvedTotal(unResolvedTotal.intValue());
if (entity.getClosedTotal() > NumConstant.ZERO) {
entity.setResolvedRatio(new BigDecimal(numberFormat.format((float) resolvedTotal.intValue() / (float) entity.getClosedTotal())));
entity.setUnresolvedRatio(new BigDecimal(numberFormat.format((float) unResolvedTotal.intValue() / (float) entity.getClosedTotal())));
}
entity.setResolvedIncr(resolvedIncr.intValue());
entity.setUnresolvedIncr(unResolvedIncr.intValue());
}
mapList.put(agency.getId(), entity);
}
} while (size == NumConstant.FIFTY);
List<FactAgencyProjectDailyEntity> projectDateEntityList = new ArrayList<>(mapList.values());
//三、批量保存数据,先删后增
if (null != projectDateEntityList && projectDateEntityList.size() > NumConstant.ZERO) {
//5:根据客户Id、日维度Id批量物理删除一下可能存在的历史数据
FactAgencyProjectDailyEntity delEntity = new FactAgencyProjectDailyEntity();
delEntity.setCustomerId(customerId);
delEntity.setDateId(dimId.getDateId());
log.info("StatsProjectServiceImpl.agencyDateProjectStats-根据客户Id、日维度Id批量删除机关项目日统计表数据,对应客户Id:" + customerId + ",日维度Id:" + dimId.getDateId());
factAgencyProjectDailyService.delDateProject(delEntity);
//6:批量保存机关日统计数据
log.info("StatsProjectServiceImpl.agencyDateProjectStats-批量新增机关项目日统计表数据,对应客户Id:" + customerId + ",日维度Id:" + dimId.getDateId());
factAgencyProjectDailyService.insertBatch(projectDateEntityList);
}
return null;
}
/**
* 不考虑大数据量问题的方法暂留sun
*/
private String agencyDateProjectStats_old(String customerId, DimIdGenerator.DimIdBean dimId, Date date, List<DimAgencyDTO> dimAgencyList, List<ProjectEntity> projectList, List<ProjectProcessEntity> processList) {
//批量机关日统计新增对象 //批量机关日统计新增对象
List<FactAgencyProjectDailyEntity> projectDateEntityList = new ArrayList<>(); List<FactAgencyProjectDailyEntity> projectDateEntityList = new ArrayList<>();
//计算百分比使用,保留小数点后两位 //计算百分比使用,保留小数点后两位

2
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/impl/ProjectProcessServiceImpl.java

@ -34,6 +34,7 @@ import com.epmet.dto.screen.ScreenProjectProcessDTO;
import com.epmet.entity.project.ProjectEntity; import com.epmet.entity.project.ProjectEntity;
import com.epmet.entity.project.ProjectProcessEntity; import com.epmet.entity.project.ProjectProcessEntity;
import com.epmet.service.project.ProjectProcessService; import com.epmet.service.project.ProjectProcessService;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -62,6 +63,7 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessDao
**/ **/
@Override @Override
public List<ProjectProcessEntity> getProcessList(ProjectEntity projectEntity) { public List<ProjectProcessEntity> getProcessList(ProjectEntity projectEntity) {
PageHelper.startPage(projectEntity.getPageNo(), projectEntity.getPageSize());
return baseDao.selectProcessList(projectEntity); return baseDao.selectProcessList(projectEntity);
} }

2
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/impl/ProjectServiceImpl.java

@ -28,6 +28,7 @@ import com.epmet.dto.project.result.ProjectExceedParamsResultDTO;
import com.epmet.entity.evaluationindex.extract.FactOriginProjectMainDailyEntity; import com.epmet.entity.evaluationindex.extract.FactOriginProjectMainDailyEntity;
import com.epmet.entity.project.ProjectEntity; import com.epmet.entity.project.ProjectEntity;
import com.epmet.service.project.ProjectService; import com.epmet.service.project.ProjectService;
import com.github.pagehelper.PageHelper;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
@ -54,6 +55,7 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
**/ **/
@Override @Override
public List<ProjectEntity> getProjectList(ProjectEntity projectEntity) { public List<ProjectEntity> getProjectList(ProjectEntity projectEntity) {
PageHelper.startPage(projectEntity.getPageNo(), projectEntity.getPageSize());
return baseDao.selectProjectList(projectEntity); return baseDao.selectProjectList(projectEntity);
} }

2
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/FactGroupAgencyDailyService.java

@ -101,7 +101,7 @@ public interface FactGroupAgencyDailyService extends BaseService<FactGroupAgency
* @param agencyList * @param agencyList
* @author zxc * @author zxc
*/ */
void insertGroupAgencyDaily(List<AgencyGroupDailyResultDTO> agencyList,String customerId); void insertGroupAgencyDaily(List<AgencyGroupDailyResultDTO> agencyList,String customerId,Boolean status);
/** /**
* @param * @param

2
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/FactGroupGridDailyService.java

@ -99,5 +99,5 @@ public interface FactGroupGridDailyService extends BaseService<FactGroupGridDail
* @param formDto * @param formDto
* @author zxc * @author zxc
*/ */
void statisticsGroupGridDaily(List<GroupGridDailyResultDTO> formDto,String customerId); void statisticsGroupGridDaily(List<GroupGridDailyResultDTO> formDto,String customerId,Boolean status);
} }

13
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/FactGroupAgencyDailyServiceImpl.java

@ -113,12 +113,15 @@ public class FactGroupAgencyDailyServiceImpl extends BaseServiceImpl<FactGroupAg
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void insertGroupAgencyDaily(List<AgencyGroupDailyResultDTO> agencyList,String customerId) { public void insertGroupAgencyDaily(List<AgencyGroupDailyResultDTO> agencyList,String customerId,Boolean status) {
if (!CollectionUtils.isEmpty(agencyList)){ if (!CollectionUtils.isEmpty(agencyList)){
Integer delNum; // true 为当前客户第一回进入,需要删除历史数据
do { if (status){
delNum = baseDao.deleteInsertAgencyDailyByDateId(agencyList.get(NumConstant.ZERO).getDateId(),customerId); Integer delNum;
}while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND); do {
delNum = baseDao.deleteInsertAgencyDailyByDateId(agencyList.get(NumConstant.ZERO).getDateId(),customerId);
}while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND);
}
List<List<AgencyGroupDailyResultDTO>> partition = ListUtils.partition(agencyList, NumConstant.ONE_HUNDRED); List<List<AgencyGroupDailyResultDTO>> partition = ListUtils.partition(agencyList, NumConstant.ONE_HUNDRED);
partition.forEach(p -> { partition.forEach(p -> {
baseDao.insertGroupAgencyDaily(p); baseDao.insertGroupAgencyDaily(p);

13
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/FactGroupGridDailyServiceImpl.java

@ -115,15 +115,18 @@ public class FactGroupGridDailyServiceImpl extends BaseServiceImpl<FactGroupGrid
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void statisticsGroupGridDaily(List<GroupGridDailyResultDTO> formDto,String customerId) { public void statisticsGroupGridDaily(List<GroupGridDailyResultDTO> formDto,String customerId,Boolean status) {
if (CollectionUtils.isEmpty(formDto)){ if (CollectionUtils.isEmpty(formDto)){
return; return;
} }
String dateId = formDto.get(NumConstant.ZERO).getDateId(); String dateId = formDto.get(NumConstant.ZERO).getDateId();
Integer delNum; // true 为当前客户第一回进入,需要删除历史数据
do { if (status){
delNum = baseDao.deleteInsertDateId(dateId,customerId); Integer delNum;
}while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND); do {
delNum = baseDao.deleteInsertDateId(dateId,customerId);
}while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND);
}
List<List<GroupGridDailyResultDTO>> partition = ListUtils.partition(formDto, NumConstant.ONE_HUNDRED); List<List<GroupGridDailyResultDTO>> partition = ListUtils.partition(formDto, NumConstant.ONE_HUNDRED);
partition.forEach(p -> { partition.forEach(p -> {
baseDao.insertGroupGridDaily(p); baseDao.insertGroupGridDaily(p);

5
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/project/ProjectDao.xml

@ -5,7 +5,10 @@
<select id="selectProjectList" resultType="com.epmet.entity.project.ProjectEntity"> <select id="selectProjectList" resultType="com.epmet.entity.project.ProjectEntity">
SELECT SELECT
* id,
customer_id,
agency_id,
closed_status
FROM FROM
project project
WHERE WHERE

2
epmet-module/epmet-common-service/common-service-server/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
common-service-server: common-service-server:
container_name: common-service-server-prod container_name: common-service-server-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/common-service-server:0.3.41 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/common-service-server:0.3.42
ports: ports:
- "8103:8103" - "8103:8103"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

2
epmet-module/epmet-common-service/common-service-server/pom.xml

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

5
epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/WorkDayServiceImpl.java

@ -3,14 +3,13 @@ package com.epmet.service.impl;
import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.utils.DateUtils; import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.constant.ProjectConstant; import com.epmet.constant.ProjectConstant;
import com.epmet.dao.CalenderDao; import com.epmet.dao.CalenderDao;
import com.epmet.dto.form.CostDayFormDTO; import com.epmet.dto.form.CostDayFormDTO;
import com.epmet.dto.form.TimestampIntervalFormDTO; import com.epmet.dto.form.TimestampIntervalFormDTO;
import com.epmet.dto.form.WorkDayFormDTO; import com.epmet.dto.form.WorkDayFormDTO;
import com.epmet.dto.result.CostDayResultDTO;
import com.epmet.dto.form.WorkMinuteFormDTO; import com.epmet.dto.form.WorkMinuteFormDTO;
import com.epmet.dto.result.CostDayResultDTO;
import com.epmet.dto.result.WorkDayResultDTO; import com.epmet.dto.result.WorkDayResultDTO;
import com.epmet.entity.CalenderEntity; import com.epmet.entity.CalenderEntity;
import com.epmet.service.WorkDayService; import com.epmet.service.WorkDayService;
@ -271,7 +270,7 @@ public class WorkDayServiceImpl implements WorkDayService {
LocalDateTime initialTime = LocalDateTime.ofInstant(right.toInstant(), ZoneId.systemDefault()) LocalDateTime initialTime = LocalDateTime.ofInstant(right.toInstant(), ZoneId.systemDefault())
.withHour(NumConstant.ZERO).withMinute(NumConstant.ZERO).withSecond(NumConstant.ZERO).withNano(NumConstant.ZERO); .withHour(NumConstant.ZERO).withMinute(NumConstant.ZERO).withSecond(NumConstant.ZERO).withNano(NumConstant.ZERO);
//ChronoUnit日期枚举类,between方法计算两个时间对象之间的时间量 //ChronoUnit日期枚举类,between方法计算两个时间对象之间的时间量
costMin += ChronoUnit.SECONDS.between(localDateTime, initialTime)/NumConstant.SIXTY; costMin += ChronoUnit.SECONDS.between(initialTime, localDateTime)/NumConstant.SIXTY;
} }
if(NumConstant.TWO == list.size()) { if(NumConstant.TWO == list.size()) {
return costMin; return costMin;

1
epmet-module/epmet-common-service/common-service-server/src/main/resources/mapper/CalenderDao.xml

@ -60,6 +60,7 @@
DEL_FLAG = '0' DEL_FLAG = '0'
AND QUERY_DATE BETWEEN #{begin} AND QUERY_DATE BETWEEN #{begin}
AND #{end} AND #{end}
order by query_date asc
</select> </select>
</mapper> </mapper>

2
epmet-module/epmet-heart/epmet-heart-server/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
epmet-heart-server: epmet-heart-server:
container_name: epmet-heart-server-prod container_name: epmet-heart-server-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-heart-server:0.0.64 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-heart-server:0.0.72
ports: ports:
- "8111:8111" - "8111:8111"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

2
epmet-module/epmet-heart/epmet-heart-server/pom.xml

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

43
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcCommunitySelfOrganizationServiceImpl.java

@ -11,6 +11,7 @@ import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant; import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult; import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerOrgRedis; import com.epmet.commons.tools.redis.common.CustomerOrgRedis;
@ -20,6 +21,7 @@ import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils; import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.ExcelPoiUtils; import com.epmet.commons.tools.utils.ExcelPoiUtils;
import com.epmet.commons.tools.validator.PhoneValidatorUtils;
import com.epmet.constant.IcCommunitySelfOrganizationConstant; import com.epmet.constant.IcCommunitySelfOrganizationConstant;
import com.epmet.dao.IcCommunitySelfOrganizationDao; import com.epmet.dao.IcCommunitySelfOrganizationDao;
import com.epmet.dto.IcCommunitySelfOrganizationDTO; import com.epmet.dto.IcCommunitySelfOrganizationDTO;
@ -131,6 +133,11 @@ public class IcCommunitySelfOrganizationServiceImpl extends BaseServiceImpl<IcCo
@Override @Override
public void addCommunitySelfOrganization(TokenDto tokenDto, AddCommunitySelfOrganizationFormDTO formDTO) { public void addCommunitySelfOrganization(TokenDto tokenDto, AddCommunitySelfOrganizationFormDTO formDTO) {
String customerId = tokenDto.getCustomerId(); String customerId = tokenDto.getCustomerId();
boolean mobile = PhoneValidatorUtils.isMobile(formDTO.getPrincipalPhone());
boolean tel = PhoneValidatorUtils.isTel(formDTO.getPrincipalPhone());
if (!mobile && !tel){
throw new EpmetException(EpmetErrorCode.CHECK_PHONE_ERROR.getCode());
}
LambdaQueryWrapper<IcCommunitySelfOrganizationEntity> l = new LambdaQueryWrapper<>(); LambdaQueryWrapper<IcCommunitySelfOrganizationEntity> l = new LambdaQueryWrapper<>();
l.eq(IcCommunitySelfOrganizationEntity::getOrganizationName,formDTO.getOrganizationName()) l.eq(IcCommunitySelfOrganizationEntity::getOrganizationName,formDTO.getOrganizationName())
.eq(IcCommunitySelfOrganizationEntity::getCustomerId,customerId) .eq(IcCommunitySelfOrganizationEntity::getCustomerId,customerId)
@ -163,6 +170,14 @@ public class IcCommunitySelfOrganizationServiceImpl extends BaseServiceImpl<IcCo
} }
baseDao.insert(orgEntity); baseDao.insert(orgEntity);
if(CollectionUtils.isNotEmpty(formDTO.getOrganizationPersonnel())){ if(CollectionUtils.isNotEmpty(formDTO.getOrganizationPersonnel())){
// 号码校验
formDTO.getOrganizationPersonnel().forEach(p -> {
boolean m = PhoneValidatorUtils.isMobile(p.getPersonPhone());
boolean t = PhoneValidatorUtils.isTel(p.getPersonPhone());
if (!m && !t){
throw new EpmetException(EpmetErrorCode.CHECK_PHONE_ERROR.getCode());
}
});
List<IcCommunitySelfOrganizationPersonnelEntity> persons = ConvertUtils.sourceToTarget(formDTO.getOrganizationPersonnel(), IcCommunitySelfOrganizationPersonnelEntity.class); List<IcCommunitySelfOrganizationPersonnelEntity> persons = ConvertUtils.sourceToTarget(formDTO.getOrganizationPersonnel(), IcCommunitySelfOrganizationPersonnelEntity.class);
Map<String, List<IcCommunitySelfOrganizationPersonnelEntity>> groupPhone = persons.stream().collect(Collectors.groupingBy(IcCommunitySelfOrganizationPersonnelEntity::getPersonPhone)); Map<String, List<IcCommunitySelfOrganizationPersonnelEntity>> groupPhone = persons.stream().collect(Collectors.groupingBy(IcCommunitySelfOrganizationPersonnelEntity::getPersonPhone));
List<String> phones = new ArrayList<>(); List<String> phones = new ArrayList<>();
@ -199,6 +214,11 @@ public class IcCommunitySelfOrganizationServiceImpl extends BaseServiceImpl<IcCo
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public void editCommunitySelfOrganization(TokenDto tokenDto, EditCommunitySelfOrganizationFormDTO formDTO) { public void editCommunitySelfOrganization(TokenDto tokenDto, EditCommunitySelfOrganizationFormDTO formDTO) {
boolean m = PhoneValidatorUtils.isMobile(formDTO.getPrincipalPhone());
boolean t = PhoneValidatorUtils.isTel(formDTO.getPrincipalPhone());
if (!m && !t){
throw new EpmetException(EpmetErrorCode.CHECK_PHONE_ERROR.getCode());
}
LambdaQueryWrapper<IcCommunitySelfOrganizationEntity> l = new LambdaQueryWrapper<>(); LambdaQueryWrapper<IcCommunitySelfOrganizationEntity> l = new LambdaQueryWrapper<>();
l.eq(IcCommunitySelfOrganizationEntity::getOrganizationName,formDTO.getOrganizationName()) l.eq(IcCommunitySelfOrganizationEntity::getOrganizationName,formDTO.getOrganizationName())
.eq(IcCommunitySelfOrganizationEntity::getCustomerId,tokenDto.getCustomerId()) .eq(IcCommunitySelfOrganizationEntity::getCustomerId,tokenDto.getCustomerId())
@ -214,6 +234,13 @@ public class IcCommunitySelfOrganizationServiceImpl extends BaseServiceImpl<IcCo
baseDao.updateCommunitySelfOrganization(e); baseDao.updateCommunitySelfOrganization(e);
personnelService.deleteByOrgId(formDTO.getOrgId()); personnelService.deleteByOrgId(formDTO.getOrgId());
if (CollectionUtils.isNotEmpty(formDTO.getOrganizationPersonnel())){ if (CollectionUtils.isNotEmpty(formDTO.getOrganizationPersonnel())){
formDTO.getOrganizationPersonnel().forEach(p -> {
boolean mobile = PhoneValidatorUtils.isMobile(p.getPersonPhone());
boolean tel = PhoneValidatorUtils.isTel(p.getPersonPhone());
if (!mobile && !tel){
throw new EpmetException(EpmetErrorCode.CHECK_PHONE_ERROR.getCode());
}
});
List<IcCommunitySelfOrganizationPersonnelEntity> persons = ConvertUtils.sourceToTarget(formDTO.getOrganizationPersonnel(), IcCommunitySelfOrganizationPersonnelEntity.class); List<IcCommunitySelfOrganizationPersonnelEntity> persons = ConvertUtils.sourceToTarget(formDTO.getOrganizationPersonnel(), IcCommunitySelfOrganizationPersonnelEntity.class);
Map<String, List<IcCommunitySelfOrganizationPersonnelEntity>> groupPhone = persons.stream().collect(Collectors.groupingBy(IcCommunitySelfOrganizationPersonnelEntity::getPersonPhone)); Map<String, List<IcCommunitySelfOrganizationPersonnelEntity>> groupPhone = persons.stream().collect(Collectors.groupingBy(IcCommunitySelfOrganizationPersonnelEntity::getPersonPhone));
List<String> phones = new ArrayList<>(); List<String> phones = new ArrayList<>();
@ -335,7 +362,16 @@ public class IcCommunitySelfOrganizationServiceImpl extends BaseServiceImpl<IcCo
public void importCommunitySelfOrganization(TokenDto tokenDto, HttpServletResponse response, MultipartFile file) throws IOException { public void importCommunitySelfOrganization(TokenDto tokenDto, HttpServletResponse response, MultipartFile file) throws IOException {
ExcelImportResult<ImportCommunitySelfOrganization> testExcelImportResult = ExcelPoiUtils.importExcelMore(file, 0, 2, ImportCommunitySelfOrganization.class); ExcelImportResult<ImportCommunitySelfOrganization> testExcelImportResult = ExcelPoiUtils.importExcelMore(file, 0, 2, ImportCommunitySelfOrganization.class);
List<ImportCommunitySelfOrganization> list = testExcelImportResult.getList(); List<ImportCommunitySelfOrganization> list = testExcelImportResult.getList();
if (CollectionUtils.isNotEmpty(list)){ if (CollectionUtils.isNotEmpty(list)){
// 号码校验
list.forEach(p -> {
boolean m = PhoneValidatorUtils.isMobile(p.getPrincipalPhone());
boolean t = PhoneValidatorUtils.isTel(p.getPrincipalPhone());
if (!m && !t){
throw new EpmetException(EpmetErrorCode.CHECK_PHONE_ERROR.getCode());
}
});
String customerId = tokenDto.getCustomerId(); String customerId = tokenDto.getCustomerId();
List<String> existsNames = baseDao.selectOrgByOrgName(list.stream().map(ImportCommunitySelfOrganization::getOrganizationName).collect(Collectors.toList()), customerId); List<String> existsNames = baseDao.selectOrgByOrgName(list.stream().map(ImportCommunitySelfOrganization::getOrganizationName).collect(Collectors.toList()), customerId);
Map<String, List<ImportCommunitySelfOrganization>> groupByName = list.stream().collect(Collectors.groupingBy(ImportCommunitySelfOrganization::getOrganizationName)); Map<String, List<ImportCommunitySelfOrganization>> groupByName = list.stream().collect(Collectors.groupingBy(ImportCommunitySelfOrganization::getOrganizationName));
@ -372,6 +408,13 @@ public class IcCommunitySelfOrganizationServiceImpl extends BaseServiceImpl<IcCo
e.setOrganizationCreatedTime(l.getOrganizationCreatedTime()); e.setOrganizationCreatedTime(l.getOrganizationCreatedTime());
baseDao.insert(e); baseDao.insert(e);
if (CollectionUtils.isNotEmpty(l.getPersons())){ if (CollectionUtils.isNotEmpty(l.getPersons())){
l.getPersons().forEach(p -> {
boolean m = PhoneValidatorUtils.isMobile(p.getPersonPhone());
boolean t = PhoneValidatorUtils.isTel(p.getPersonPhone());
if (!m && !t){
throw new EpmetException(EpmetErrorCode.CHECK_PHONE_ERROR.getCode());
}
});
List<IcCommunitySelfOrganizationPersonnelEntity> persons = ConvertUtils.sourceToTarget(l.getPersons(), IcCommunitySelfOrganizationPersonnelEntity.class); List<IcCommunitySelfOrganizationPersonnelEntity> persons = ConvertUtils.sourceToTarget(l.getPersons(), IcCommunitySelfOrganizationPersonnelEntity.class);
Map<String, List<IcCommunitySelfOrganizationPersonnelEntity>> groupByPhone = persons.stream().collect(Collectors.groupingBy(IcCommunitySelfOrganizationPersonnelEntity::getPersonPhone)); Map<String, List<IcCommunitySelfOrganizationPersonnelEntity>> groupByPhone = persons.stream().collect(Collectors.groupingBy(IcCommunitySelfOrganizationPersonnelEntity::getPersonPhone));
List<String> phones = new ArrayList<>(); List<String> phones = new ArrayList<>();

2
epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/IcCommunitySelfOrganizationDao.xml

@ -46,7 +46,7 @@
SELECT SELECT
so.ORGANIZATION_NAME AS organizationName, so.ORGANIZATION_NAME AS organizationName,
so.ORGANIZATION_PERSON_COUNT AS organizationPersonCount, so.ORGANIZATION_PERSON_COUNT AS organizationPersonCount,
DATE_FORMAT(so.ORGANIZATION_CREATED_TIME,'%Y-%m-%d') AS organizationCreatedTime, IFNULL(DATE_FORMAT(so.ORGANIZATION_CREATED_TIME,'%Y-%m-%d'),DATE_FORMAT(so.CREATED_TIME,'%Y-%m-%d')) AS organizationCreatedTime,
so.PRINCIPAL_NAME AS principalName, so.PRINCIPAL_NAME AS principalName,
so.PRINCIPAL_PHONE AS principalPhone, so.PRINCIPAL_PHONE AS principalPhone,
so.SERVICE_ITEM AS serviceItem, so.SERVICE_ITEM AS serviceItem,

2
epmet-module/epmet-job/epmet-job-server/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
epmet-job-server: epmet-job-server:
container_name: epmet-job-server-prod container_name: epmet-job-server-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-job-server:0.3.43 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-job-server:0.3.47
ports: ports:
- "8084:8084" - "8084:8084"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

2
epmet-module/epmet-job/epmet-job-server/pom.xml

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

10
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/ProjectSendMessageService.java

@ -1,7 +1,6 @@
package com.epmet.service; package com.epmet.service;
import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.ProjectDTO;
import com.epmet.dto.extract.form.ExtractOriginFormDTO; import com.epmet.dto.extract.form.ExtractOriginFormDTO;
/** /**
@ -18,4 +17,13 @@ public interface ProjectSendMessageService {
* @return com.epmet.commons.tools.utils.Result * @return com.epmet.commons.tools.utils.Result
*/ */
Result projectSendMessage(ExtractOriginFormDTO formDTO); Result projectSendMessage(ExtractOriginFormDTO formDTO);
/**
* 项目耗时
* @Param formDTO
* @Return {@link Result}
* @Author zhaoqifeng
* @Date 2022/1/12 14:04
*/
Result projectWorkMinutes(ExtractOriginFormDTO formDTO);
} }

18
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/impl/ProjectSendMessageServiceImpl.java

@ -32,4 +32,22 @@ public class ProjectSendMessageServiceImpl implements ProjectSendMessageService
projectDTO.setCustomerId(formDTO.getCustomerId()); projectDTO.setCustomerId(formDTO.getCustomerId());
return govProjectOpenFeignClient.sendMessageJob(projectDTO); return govProjectOpenFeignClient.sendMessageJob(projectDTO);
} }
/**
* 项目耗时
*
* @param formDTO
* @Param formDTO
* @Return {@link Result}
* @Author zhaoqifeng
* @Date 2022/1/12 14:04
*/
@Override
public Result projectWorkMinutes(ExtractOriginFormDTO formDTO) {
ProjectDTO projectDTO = new ProjectDTO();
projectDTO.setCustomerId(formDTO.getCustomerId());
projectDTO.setId(formDTO.getObjectId());
projectDTO.setStatus("pending");
return govProjectOpenFeignClient.projectWorkMinutesJob(projectDTO);
}
} }

43
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/ProjectWorkMinutesTask.java

@ -0,0 +1,43 @@
package com.epmet.task;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.extract.form.ExtractOriginFormDTO;
import com.epmet.service.ProjectSendMessageService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Description
* @Author zhaoqifeng
* @Date 2022/1/12 14:01
*/
@Component("projectWorkMinutesTask")
@Slf4j
public class ProjectWorkMinutesTask implements ITask{
@Autowired
private ProjectSendMessageService projectSendMessageService;
/**
* 执行定时任务接口
*
* @param params 参数多参数使用JSON数据
*/
@Override
public void run(String params) {
log.info("ProjectWorkMinutesTask定时任务正在执行,参数为:{}", params);
ExtractOriginFormDTO formDTO = new ExtractOriginFormDTO();
if (StringUtils.isNotBlank(params)) {
formDTO = JSON.parseObject(params, ExtractOriginFormDTO.class);
}
Result result = projectSendMessageService.projectWorkMinutes(formDTO);
if (result.success()) {
log.info("ProjectSendMessageTask定时任务执行成功");
} else {
log.error("ProjectSendMessageTask定时任务执行失败:" + result.getMsg());
}
}
}

2
epmet-module/epmet-message/epmet-message-server/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
epmet-message-server: epmet-message-server:
container_name: epmet-message-server-prod container_name: epmet-message-server-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-message-server:0.3.53 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-message-server:0.3.57
ports: ports:
- "8085:8085" - "8085:8085"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

2
epmet-module/epmet-message/epmet-message-server/pom.xml

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

2
epmet-module/epmet-oss/epmet-oss-server/deploy/docker-compose-prod.yml

@ -3,7 +3,7 @@ services:
epmet-oss-server: epmet-oss-server:
container_name: epmet-oss-server-prod container_name: epmet-oss-server-prod
# image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-test/epmet-oss-server:0.3.2 # image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-test/epmet-oss-server:0.3.2
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-oss-server:0.3.38 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-oss-server:0.3.40
ports: ports:
- "8083:8083" - "8083:8083"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

2
epmet-module/epmet-oss/epmet-oss-server/pom.xml

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

2
epmet-module/epmet-point/epmet-point-server/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
epmet-point-server: epmet-point-server:
container_name: epmet-point-server-prod container_name: epmet-point-server-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-point-server:0.0.60 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-point-server:0.0.63
ports: ports:
- "8112:8112" - "8112:8112"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

2
epmet-module/epmet-point/epmet-point-server/pom.xml

@ -3,7 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<version>0.0.60</version> <version>0.0.63</version>
<parent> <parent>
<artifactId>epmet-point</artifactId> <artifactId>epmet-point</artifactId>
<groupId>com.epmet</groupId> <groupId>com.epmet</groupId>

4
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainCreateProjectFormDTO.java

@ -4,14 +4,16 @@ import lombok.Data;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List; import java.util.List;
/** /**
* 区块链创建项目form dto * 区块链创建项目form dto
*/ */
@Data @Data
public class BlockChainCreateProjectFormDTO { public class BlockChainCreateProjectFormDTO implements Serializable {
private static final long serialVersionUID = 2061989652173136068L;
@NotNull(message = "项目信息不能为空") @NotNull(message = "项目信息不能为空")
private BlockChainProjectFormDTO project; private BlockChainProjectFormDTO project;

4
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProcessProjectFormDTO.java

@ -3,14 +3,16 @@ package com.epmet.dto.form;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List; import java.util.List;
/** /**
* 区块链项目处理进展信息 * 区块链项目处理进展信息
*/ */
@Data @Data
public class BlockChainProcessProjectFormDTO { public class BlockChainProcessProjectFormDTO implements Serializable {
private static final long serialVersionUID = -7316616101790749793L;
@NotNull(message = "处理进展信息不能为空") @NotNull(message = "处理进展信息不能为空")
private BlockChainProjectProcessFormDTO process; private BlockChainProjectProcessFormDTO process;

11
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdOpenFeignClient.java

@ -11,8 +11,13 @@ import com.epmet.feign.fallback.GovProjectOpenFeignClientFallback;
import com.epmet.resi.mine.dto.from.MyPartProjectsFormDTO; import com.epmet.resi.mine.dto.from.MyPartProjectsFormDTO;
import feign.codec.Encoder; import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder; import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -72,9 +77,13 @@ public interface EpmetThirdOpenFeignClient {
Result blockChainProcessProject(@RequestBody BlockChainProcessProjectFormDTO input); Result blockChainProcessProject(@RequestBody BlockChainProcessProjectFormDTO input);
class MultipartSupportConfig { class MultipartSupportConfig {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters;
@Bean @Bean
public Encoder feignFormEncoder() { public Encoder feignFormEncoder() {
return new SpringFormEncoder(); return new SpringFormEncoder(new SpringEncoder(messageConverters));
} }
} }

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

@ -2,10 +2,7 @@ package com.epmet.feign;
import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.AuthorizerAccessTokenFormDTO; import com.epmet.dto.form.*;
import com.epmet.dto.form.ComponentAccessTokenFormDTO;
import com.epmet.dto.form.SaveOrUpdateCustSelPlatformFormDTO;
import com.epmet.dto.form.ThirdPlatformFormDTO;
import com.epmet.dto.result.ThirdplatformResultDTO; import com.epmet.dto.result.ThirdplatformResultDTO;
import com.epmet.feign.fallback.ThirdOpenFeignClientFallback; import com.epmet.feign.fallback.ThirdOpenFeignClientFallback;
import com.epmet.feign.fallback.ThirdOpenFeignClientFallbackFactory; import com.epmet.feign.fallback.ThirdOpenFeignClientFallbackFactory;
@ -57,4 +54,20 @@ public interface ThirdOpenFeignClient {
*/ */
@PostMapping("/third/private-epmet/push-authorizer-tokens") @PostMapping("/third/private-epmet/push-authorizer-tokens")
Result pushAuthorizerTokens(@RequestBody AuthorizerAccessTokenFormDTO input); Result pushAuthorizerTokens(@RequestBody AuthorizerAccessTokenFormDTO input);
/**
* 区块链立项
* @param input
* @return
*/
@PostMapping("/third/blockchain/project/create")
Result blockChainCreateProject(@RequestBody BlockChainCreateProjectFormDTO input);
/**
* 区块链处理进展
* @param input
* @return
*/
@PostMapping("/third/blockchain/project/process")
Result blockChainProcessProject(@RequestBody BlockChainProcessProjectFormDTO input);
} }

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

@ -3,10 +3,7 @@ package com.epmet.feign.fallback;
import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.ModuleUtils; import com.epmet.commons.tools.utils.ModuleUtils;
import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.AuthorizerAccessTokenFormDTO; import com.epmet.dto.form.*;
import com.epmet.dto.form.ComponentAccessTokenFormDTO;
import com.epmet.dto.form.SaveOrUpdateCustSelPlatformFormDTO;
import com.epmet.dto.form.ThirdPlatformFormDTO;
import com.epmet.dto.result.ThirdplatformResultDTO; import com.epmet.dto.result.ThirdplatformResultDTO;
import com.epmet.feign.ThirdOpenFeignClient; import com.epmet.feign.ThirdOpenFeignClient;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -34,4 +31,14 @@ public class ThirdOpenFeignClientFallback implements ThirdOpenFeignClient {
public Result pushAuthorizerTokens(AuthorizerAccessTokenFormDTO input) { public Result pushAuthorizerTokens(AuthorizerAccessTokenFormDTO input) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "pushAuthorizerTokens", input); return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "pushAuthorizerTokens", input);
} }
@Override
public Result blockChainCreateProject(BlockChainCreateProjectFormDTO input) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "blockChainCreateProject", input);
}
@Override
public Result blockChainProcessProject(BlockChainProcessProjectFormDTO input) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "blockChainProcessProject", input);
}
} }

2
epmet-module/epmet-third/epmet-third-server/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
epmet-third-server: epmet-third-server:
container_name: epmet-third-server-prod container_name: epmet-third-server-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-third-server:0.0.179 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-third-server:0.0.183
ports: ports:
- "8110:8110" - "8110:8110"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

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

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

8
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/BlockChainProjectController.java

@ -28,8 +28,8 @@ public class BlockChainProjectController {
*/ */
@PostMapping("create") @PostMapping("create")
public Result blockChainCreateProject(@RequestBody BlockChainCreateProjectFormDTO input) { public Result blockChainCreateProject(@RequestBody BlockChainCreateProjectFormDTO input) {
//ValidatorUtils.validateEntity(input); ValidatorUtils.validateEntity(input);
//blockChainProjectService.blockChainCreateProject(input); blockChainProjectService.blockChainCreateProject(input);
return new Result(); return new Result();
} }
@ -40,8 +40,8 @@ public class BlockChainProjectController {
*/ */
@PostMapping("process") @PostMapping("process")
public Result blockChainProcessProject(@RequestBody BlockChainProcessProjectFormDTO input) { public Result blockChainProcessProject(@RequestBody BlockChainProcessProjectFormDTO input) {
//ValidatorUtils.validateEntity(input); ValidatorUtils.validateEntity(input);
//blockChainProjectService.blockChainProcessProject(input); blockChainProjectService.blockChainProcessProject(input);
return new Result(); return new Result();
} }
} }

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

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

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

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

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

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

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

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

11
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/feign/GovProjectOpenFeignClient.java

@ -135,6 +135,17 @@ public interface GovProjectOpenFeignClient {
@PostMapping("gov/project/resievent/queryResiEventManageRedDot/{agencyId}") @PostMapping("gov/project/resievent/queryResiEventManageRedDot/{agencyId}")
Result<ResiEventManageRedDotRes> queryResiEventManageRedDot(@PathVariable("agencyId") String agencyId); Result<ResiEventManageRedDotRes> queryResiEventManageRedDot(@PathVariable("agencyId") String agencyId);
/**
* 计算项目耗时
*
* @Param dto
* @Return {@link Result}
* @Author zhaoqifeng
* @Date 2022/1/12 13:56
*/
@PostMapping("gov/project/project/project-work-minutes-job")
Result projectWorkMinutesJob(@RequestBody ProjectDTO dto);
/** /**
* @Author sun * @Author sun
* @Description 定时任务调用-事件语音附件自动审核 * @Description 定时任务调用-事件语音附件自动审核

15
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/feign/fallback/GovProjectOpenFeignClientFallback.java

@ -9,7 +9,6 @@ import com.epmet.dto.form.*;
import com.epmet.dto.result.*; import com.epmet.dto.result.*;
import com.epmet.feign.GovProjectOpenFeignClient; import com.epmet.feign.GovProjectOpenFeignClient;
import com.epmet.resi.mine.dto.from.MyPartProjectsFormDTO; import com.epmet.resi.mine.dto.from.MyPartProjectsFormDTO;
import org.springframework.stereotype.Component;
import java.util.List; import java.util.List;
@ -133,6 +132,20 @@ public class GovProjectOpenFeignClientFallback implements GovProjectOpenFeignCli
return ModuleUtils.feignConError(ServiceConstant.GOV_PROJECT_SERVER, "queryResiEventManageRedDot", agencyId); return ModuleUtils.feignConError(ServiceConstant.GOV_PROJECT_SERVER, "queryResiEventManageRedDot", agencyId);
} }
/**
* 计算项目耗时
*
* @param dto
* @Param dto
* @Return {@link Result}
* @Author zhaoqifeng
* @Date 2022/1/12 13:56
*/
@Override
public Result projectWorkMinutesJob(ProjectDTO dto) {
return ModuleUtils.feignConError(ServiceConstant.GOV_PROJECT_SERVER, "projectWorkMinutesJob", dto);
}
/** /**
* @Author sun * @Author sun
* @Description 定时任务调用-事件语音附件自动审核 * @Description 定时任务调用-事件语音附件自动审核

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

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

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

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

13
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectController.java

@ -312,4 +312,17 @@ public class ProjectController {
ValidatorUtils.validateEntity(formDTO,TopicResearchAnalysisFormDTO.AddUserInternalGroup.class); ValidatorUtils.validateEntity(formDTO,TopicResearchAnalysisFormDTO.AddUserInternalGroup.class);
return new Result<TopicResearchAnalysisResDTO>().ok(projectService.topicResearchAnalysis(formDTO)); return new Result<TopicResearchAnalysisResDTO>().ok(projectService.topicResearchAnalysis(formDTO));
} }
/**
* @Description 计算项目耗时
* @Param dto
* @Return {@link Result}
* @Author zhaoqifeng
* @Date 2022/1/11 17:52
*/
@PostMapping("project-work-minutes-job")
public Result projectWorkMinutesJob(@RequestBody ProjectDTO dto) {
projectService.projectWorkMinutesJob(dto);
return new Result();
}
} }

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

@ -272,4 +272,15 @@ public interface ProjectDao extends BaseDao<ProjectEntity> {
* @Date 2022/1/4 16:45 * @Date 2022/1/4 16:45
*/ */
List<ApprovaledListResultDTO> getGridMemberProjectList(@Param("agencyId") String agencyId, @Param("staffId") String staffId, @Param("startTime") String startTime, @Param("endTime") String endTime); List<ApprovaledListResultDTO> getGridMemberProjectList(@Param("agencyId") String agencyId, @Param("staffId") String staffId, @Param("startTime") String startTime, @Param("endTime") String endTime);
/**
* 获取项目列表用来计算项目耗时
* @Param customerId
* @Param projectId
* @Param status
* @Return {@link List< ProjectEntity>}
* @Author zhaoqifeng
* @Date 2022/1/12 17:05
*/
List<ProjectEntity> getProjectListForWorkMinutes(@Param("customerId")String customerId, @Param("projectId")String projectId, @Param("status")String status);
} }

8
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/entity/ProjectEntity.java

@ -18,13 +18,10 @@
package com.epmet.entity; package com.epmet.entity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity; import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.Date;
/** /**
* 项目表 * 项目表
* *
@ -98,4 +95,9 @@ public class ProjectEntity extends BaseEpmetEntity {
* */ * */
private String locateDimension; private String locateDimension;
/**
* 项目耗时分钟
* */
private Integer workMinutes;
} }

9
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectService.java

@ -358,6 +358,15 @@ public interface ProjectService extends BaseService<ProjectEntity> {
*/ */
TopicResearchAnalysisResDTO topicResearchAnalysis(TopicResearchAnalysisFormDTO formDTO); TopicResearchAnalysisResDTO topicResearchAnalysis(TopicResearchAnalysisFormDTO formDTO);
/**
* 计算项目耗时定时任务
* @Param dto
* @Return
* @Author zhaoqifeng
* @Date 2022/1/11 17:05
*/
void projectWorkMinutesJob(ProjectDTO dto);
/** /**
* 网格员工作统计项目列表 * 网格员工作统计项目列表
* *

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

@ -1,13 +1,16 @@
package com.epmet.service.impl; package com.epmet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dao.ProjectStaffDao; import com.epmet.dao.ProjectStaffDao;
import com.epmet.dto.form.*; import com.epmet.dto.form.*;
import com.epmet.entity.ProjectEntity; import com.epmet.entity.ProjectEntity;
import com.epmet.entity.ProjectProcessEntity; import com.epmet.entity.ProjectProcessEntity;
import com.epmet.entity.ProjectStaffEntity; import com.epmet.entity.ProjectStaffEntity;
import com.epmet.feign.EpmetThirdOpenFeignClient; import com.epmet.feign.EpmetThirdOpenFeignClient;
import com.epmet.feign.ThirdOpenFeignClient;
import com.epmet.service.BlockChainUploadService; import com.epmet.service.BlockChainUploadService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -21,10 +24,11 @@ import java.util.stream.Collectors;
* 区块链上链service实现 * 区块链上链service实现
*/ */
@Service @Service
@Slf4j
public class BlockChainUploadServiceImpl implements BlockChainUploadService { public class BlockChainUploadServiceImpl implements BlockChainUploadService {
@Autowired @Autowired
private EpmetThirdOpenFeignClient thirdOpenFeignClient; private ThirdOpenFeignClient thirdOpenFeignClient;
@Autowired @Autowired
private ProjectStaffDao projectStaffDao; private ProjectStaffDao projectStaffDao;
@ -37,10 +41,6 @@ public class BlockChainUploadServiceImpl implements BlockChainUploadService {
@Override @Override
public void send2BlockChain(ProjectEntity projectEntity, ProjectProcessEntity processEntity, List<ProjectStaffEntity> assignedStaffEntities, String projectStaffId) { public void send2BlockChain(ProjectEntity projectEntity, ProjectProcessEntity processEntity, List<ProjectStaffEntity> assignedStaffEntities, String projectStaffId) {
if (true) {
return;
}
// 1.项目主信息 // 1.项目主信息
BlockChainProjectFormDTO project = null; BlockChainProjectFormDTO project = null;
@ -133,20 +133,27 @@ public class BlockChainUploadServiceImpl implements BlockChainUploadService {
handledStaff.setProjectId(handledStaffEntity.getProjectId()); handledStaff.setProjectId(handledStaffEntity.getProjectId());
} }
Result result;
if (project == null) { if (project == null) {
// 处理 // 处理
BlockChainProcessProjectFormDTO processForm = new BlockChainProcessProjectFormDTO(); BlockChainProcessProjectFormDTO processForm = new BlockChainProcessProjectFormDTO();
processForm.setProcess(process); processForm.setProcess(process);
processForm.setAssignedStaffs(assignedStaffs); processForm.setAssignedStaffs(assignedStaffs);
processForm.setHandledStaff(handledStaff); processForm.setHandledStaff(handledStaff);
thirdOpenFeignClient.blockChainProcessProject(processForm); result = thirdOpenFeignClient.blockChainProcessProject(processForm);
} else { } else {
// 立项 // 立项
BlockChainCreateProjectFormDTO createForm = new BlockChainCreateProjectFormDTO(); BlockChainCreateProjectFormDTO createForm = new BlockChainCreateProjectFormDTO();
createForm.setProject(project); createForm.setProject(project);
createForm.setProcess(process); createForm.setProcess(process);
createForm.setAssignedStaffs(assignedStaffs); createForm.setAssignedStaffs(assignedStaffs);
thirdOpenFeignClient.blockChainCreateProject(createForm); result = thirdOpenFeignClient.blockChainCreateProject(createForm);
}
if (result == null || !result.success()) {
log.error("项目处理信息,上链失败");
} else {
log.info("项目处理信息,上链成功");
} }
} }
} }

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

@ -448,8 +448,14 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
} }
Date current = new Date(); Date current = new Date();
//项目耗时
Integer workMinutes = calculateDelta_T(ProjectConstant.PRECISE_CALCULATION,
ProjectConstant.CALCULATION_TYPE_DEFAULT, fromDTO.getProjectId(), projectEntity.getCreatedTime(), current);
projectEntity.setStatus(ProjectConstant.CLOSED); projectEntity.setStatus(ProjectConstant.CLOSED);
projectEntity.setClosedStatus(fromDTO.getClosedStatus()); projectEntity.setClosedStatus(fromDTO.getClosedStatus());
projectEntity.setWorkMinutes(workMinutes);
baseDao.updateById(projectEntity); baseDao.updateById(projectEntity);
//更新项目关联表 //更新项目关联表
ProjectStaffEntity projectStaffEntity = new ProjectStaffEntity(); ProjectStaffEntity projectStaffEntity = new ProjectStaffEntity();
@ -642,9 +648,16 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
throw new RenException(EpmetErrorCode.PROJECT_IS_CLOSED.getCode()); throw new RenException(EpmetErrorCode.PROJECT_IS_CLOSED.getCode());
} }
Date current = new Date(); Date current = new Date();
//项目耗时
Integer workMinutes = calculateDelta_T(ProjectConstant.PRECISE_CALCULATION,
ProjectConstant.CALCULATION_TYPE_DEFAULT, fromDTO.getProjectId(), projectEntity.getCreatedTime(), current);
projectEntity.setStatus(ProjectConstant.CLOSED); projectEntity.setStatus(ProjectConstant.CLOSED);
projectEntity.setClosedStatus(fromDTO.getClosedStatus()); projectEntity.setClosedStatus(fromDTO.getClosedStatus());
projectEntity.setWorkMinutes(workMinutes);
baseDao.updateById(projectEntity); baseDao.updateById(projectEntity);
//更新项目关联表 //更新项目关联表
ProjectStaffEntity projectStaffEntity = new ProjectStaffEntity(); ProjectStaffEntity projectStaffEntity = new ProjectStaffEntity();
@ -3047,6 +3060,50 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
return resultDTO; return resultDTO;
} }
/**
* 计算项目耗时定时任务
*
* @param dto
* @Param dto
* @Return
* @Author zhaoqifeng
* @Date 2022/1/11 17:05
*/
@Override
public void projectWorkMinutesJob(ProjectDTO dto) {
List<ProjectEntity> list;
int pageNo = NumConstant.ZERO;
int PageSize = NumConstant.ONE_HUNDRED;
do {
pageNo = pageNo + NumConstant.ONE;
PageHelper.startPage(pageNo, PageSize);
//获取项目列表
list = baseDao.getProjectListForWorkMinutes(dto.getCustomerId(), dto.getId(), dto.getStatus());;
if (CollectionUtils.isNotEmpty(list)) {
//提取项目ID,创建时间,更新时间
List<TimestampIntervalFormDTO> intervalList = list.stream().map(item -> {
TimestampIntervalFormDTO formDTO = new TimestampIntervalFormDTO();
formDTO.setId(item.getId());
formDTO.setLeft(item.getCreatedTime());
if (ProjectConstant.PENDING.equals(item.getStatus())) {
formDTO.setRight(new Date());
} else {
formDTO.setRight(item.getUpdatedTime());
}
return formDTO;
}).collect(Collectors.toList());
//批量计算项目耗时
Map<String,Integer> map = batchCalculateDelta_T(ProjectConstant.PRECISE_CALCULATION,
ProjectConstant.CALCULATION_TYPE_DEFAULT, intervalList);
list.forEach(item -> {
item.setWorkMinutes(map.get(item.getId()));
});
updateBatchById(list);
}
} while(CollectionUtils.isNotEmpty(list));
}
/** /**
* 网格员工作统计项目列表 * 网格员工作统计项目列表
* *

2
epmet-module/gov-project/gov-project-server/src/main/resources/db/migration/V0.0.17__project_work_minutes.sql

@ -0,0 +1,2 @@
ALTER TABLE `project`
ADD COLUMN `WORK_MINUTES` integer(11) NULL DEFAULT 0 COMMENT '项目耗时(分钟)' AFTER `LOCATE_DIMENSION`;

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

@ -506,4 +506,26 @@
</if> </if>
ORDER BY CREATED_TIME DESC ORDER BY CREATED_TIME DESC
</select> </select>
<select id="getProjectListForWorkMinutes" resultType="com.epmet.entity.ProjectEntity">
SELECT
a.ID,
a.`STATUS`,
a.CREATED_TIME,
b.CREATED_TIME AS "updatedTime"
FROM
project a
LEFT JOIN project_process b ON a.ID = b.PROJECT_ID
AND b.OPERATION = 'close'
WHERE
a.DEL_FLAG = '0'
<if test="customerId != null and customerId != ''">
AND a.CUSTOMER_ID = #{customerId}
</if>
<if test="projectId != null and projectId != ''">
AND a.ID = #{projectId}
</if>
<if test="status != null and status != ''">
AND a.`STATUS` = #{status}
</if>
</select>
</mapper> </mapper>

2
epmet-module/open-data-worker/open-data-worker-server/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
gov-voice-server: gov-voice-server:
container_name: open-data-worker-server-prod container_name: open-data-worker-server-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/open-data-worker-server:0.3.13 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/open-data-worker-server:0.3.22
ports: ports:
- "8117:8117" - "8117:8117"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

2
epmet-module/open-data-worker/open-data-worker-server/pom.xml

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

2
epmet-module/oper-customize/oper-customize-server/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
oper-customize-server: oper-customize-server:
container_name: oper-customize-server-prod container_name: oper-customize-server-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/oper-customize-server:0.3.64 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/oper-customize-server:0.3.66
ports: ports:
- "8089:8089" - "8089:8089"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

2
epmet-module/oper-customize/oper-customize-server/pom.xml

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

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

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

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

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

2
epmet-module/resi-guide/resi-guide-server/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
resi-guide-server: resi-guide-server:
container_name: resi-guide-server-prod container_name: resi-guide-server-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/resi-guide-server:0.3.33 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/resi-guide-server:0.3.34
ports: ports:
- "8091:8091" - "8091:8091"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

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

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

2
epmet-module/resi-hall/resi-hall-server/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
resi-hall-server: resi-hall-server:
container_name: resi-hall-server-prod container_name: resi-hall-server-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/resi-hall-server:0.3.34 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/resi-hall-server:0.3.36
ports: ports:
- "8100:8100" - "8100:8100"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

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

@ -3,7 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<version>0.3.34</version> <version>0.3.36</version>
<parent> <parent>
<artifactId>resi-hall</artifactId> <artifactId>resi-hall</artifactId>
<groupId>com.epmet</groupId> <groupId>com.epmet</groupId>

2
epmet-module/resi-mine/resi-mine-server/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
resi-mine-server: resi-mine-server:
container_name: resi-mine-server-prod container_name: resi-mine-server-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/resi-mine-server:0.3.53 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/resi-mine-server:0.3.54
ports: ports:
- "8094:8094" - "8094:8094"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

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

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

2
epmet-module/resi-partymember/resi-partymember-server/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
resi-partymember-server: resi-partymember-server:
container_name: resi-partymember-server-prod container_name: resi-partymember-server-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/resi-partymember-server:0.3.82 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/resi-partymember-server:0.3.83
ports: ports:
- "8096:8096" - "8096:8096"
network_mode: host # 使用现有网络 network_mode: host # 使用现有网络

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

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

2
epmet-openapi/epmet-openapi-scan/deploy/docker-compose-prod.yml

@ -2,7 +2,7 @@ version: "3.7"
services: services:
epmet-openapi-scan: epmet-openapi-scan:
container_name: epmet-openapi-scan-prod container_name: epmet-openapi-scan-prod
image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-openapi-scan:0.3.31 image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-master/epmet-openapi-scan:0.3.32
ports: ports:
- "8107:8107" - "8107:8107"
network_mode: host # 不会创建新的网络 network_mode: host # 不会创建新的网络

2
epmet-openapi/epmet-openapi-scan/pom.xml

@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<version>0.3.31</version> <version>0.3.32</version>
<artifactId>epmet-openapi-scan</artifactId> <artifactId>epmet-openapi-scan</artifactId>
<packaging>jar</packaging> <packaging>jar</packaging>

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

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

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

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

4
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java

@ -1001,7 +1001,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
BigDecimal hundred = new BigDecimal(NumConstant.ONE_HUNDRED); BigDecimal hundred = new BigDecimal(NumConstant.ONE_HUNDRED);
radio = count.multiply(hundred).divide(sum, NumConstant.TWO, RoundingMode.HALF_UP); radio = count.multiply(hundred).divide(sum, NumConstant.TWO, RoundingMode.HALF_UP);
} }
dto.setRadio(radio.stripTrailingZeros().toString().concat("%")); dto.setRadio(radio.stripTrailingZeros().toPlainString().concat("%"));
return dto; return dto;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
@ -1060,7 +1060,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
BigDecimal hundred = new BigDecimal(NumConstant.ONE_HUNDRED); BigDecimal hundred = new BigDecimal(NumConstant.ONE_HUNDRED);
radio = count.multiply(hundred).divide(sum, NumConstant.TWO, RoundingMode.HALF_UP); radio = count.multiply(hundred).divide(sum, NumConstant.TWO, RoundingMode.HALF_UP);
} }
dto.setRadio(radio.stripTrailingZeros().toString().concat("%")); dto.setRadio(radio.stripTrailingZeros().toPlainString().concat("%"));
return dto; return dto;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }

Loading…
Cancel
Save