Browse Source

Merge remote-tracking branch 'origin/dev_bugfix' into dev_bugfix

dev
sunyuchao 5 years ago
parent
commit
396e45c676
  1. 2
      epmet-admin/epmet-admin-server/deploy/docker-compose-test.yml
  2. 4
      epmet-admin/epmet-admin-server/pom.xml
  3. 9
      epmet-admin/epmet-admin-server/src/main/resources/bootstrap.yml
  4. 1
      epmet-admin/epmet-admin-server/src/main/resources/db/migration/V0.0.1__demo.sql
  5. 2
      epmet-auth/deploy/docker-compose-dev.yml
  6. 2
      epmet-auth/deploy/docker-compose-test.yml
  7. 10
      epmet-auth/pom.xml
  8. 21
      epmet-auth/src/main/java/com/epmet/controller/GovLoginController.java
  9. 11
      epmet-auth/src/main/java/com/epmet/dto/form/SendSmsCodeFormDTO.java
  10. 11
      epmet-auth/src/main/java/com/epmet/dto/form/StaffOrgsFormDTO.java
  11. 19
      epmet-auth/src/main/java/com/epmet/dto/form/UpdateCachedRolesFormDTO.java
  12. 7
      epmet-auth/src/main/java/com/epmet/service/GovLoginService.java
  13. 51
      epmet-auth/src/main/java/com/epmet/service/impl/GovLoginServiceImpl.java
  14. 7
      epmet-auth/src/main/java/com/epmet/service/impl/LoginServiceImpl.java
  15. 2
      epmet-auth/src/test/java/com/epmet/TokenGenTest.java
  16. 2
      epmet-cloud-generator/src/main/resources/application.yml
  17. 4
      epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/annotation/DataFilter.java
  18. 26
      epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/aspect/DataFilterAspect.java
  19. 5
      epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/dto/form/GetSQLFilterFormDTO.java
  20. 17
      epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/feign/MybatisGovAccessFeignClient.java
  21. 10
      epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/feign/fallback/MybatisGovAccessFeignClientFallback.java
  22. 37
      epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/handler/FieldMetaObjectHandler.java
  23. 6
      epmet-commons/epmet-commons-tools/pom.xml
  24. 20
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/BaseRequestLogAspect.java
  25. 5
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/AppClientConstant.java
  26. 2
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/EpmetRoleKeyConstant.java
  27. 2
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/NumConstant.java
  28. 15
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/ServiceConstant.java
  29. 10
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/StrConstant.java
  30. 88
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/DingTalkTextMsg.java
  31. 50
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/RequirePermissionEnum.java
  32. 15
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java
  33. 21
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/CommonGovAccessFeignClient.java
  34. 16
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/fallback/CommonGovAccessFeignClientFallback.java
  35. 97
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/filter/LogMsgSendFilter.java
  36. 41
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
  37. 60
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisUtils.java
  38. 25
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/param/ImgScanParamDTO.java
  39. 28
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/param/ImgTaskDTO.java
  40. 25
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/param/TextScanParamDTO.java
  41. 28
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/param/TextTaskDTO.java
  42. 42
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/result/SyncScanResult.java
  43. 20
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/dto/GovTokenDto.java
  44. 5
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/dto/TokenDto.java
  45. 9
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/resolver/LoginUserHandlerMethodArgumentResolver.java
  46. 317
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java
  47. 221
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/HttpClientManager.java
  48. 101
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/ScanContentUtils.java
  49. 212
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/validator/IdCardNoValidatorUtils.java
  50. 5
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/validator/ValidatorUtils.java
  51. 2
      epmet-gateway/deploy/docker-compose-dev.yml
  52. 2
      epmet-gateway/deploy/docker-compose-test.yml
  53. 22
      epmet-gateway/pom.xml
  54. 124
      epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java
  55. 168
      epmet-gateway/src/main/java/com/epmet/filter/FeignRequestFilter.java
  56. 36
      epmet-gateway/src/main/resources/bootstrap.yml
  57. 23
      epmet-module/data-report/data-report-client/pom.xml
  58. 40
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/constant/UserAnalysisConstant.java
  59. 46
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/DimAgencyDTO.java
  60. 45
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/DimGridDTO.java
  61. 0
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/.gitignore
  62. 30
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/user/UserIncrTrendFormDTO.java
  63. 28
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/user/UserSubAgencyFormDTO.java
  64. 29
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/user/UserSubGridFormDTO.java
  65. 24
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/user/UserSummaryInfoFormDTO.java
  66. 0
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/.gitignore
  67. 20
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserIncrTrendResDTO.java
  68. 34
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserIncrTrendResultDTO.java
  69. 45
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserSubAgencyResDTO.java
  70. 40
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserSubAgencyResultDTO.java
  71. 21
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserSubGridResDTO.java
  72. 41
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserSubGridResultDTO.java
  73. 77
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserSummaryInfoResultDTO.java
  74. 12
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/group/constant/GroupConstant.java
  75. 25
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/group/dto/form/GroupIncrTrendFormDTO.java
  76. 25
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/group/dto/result/GridInfoResultDTO.java
  77. 30
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/group/dto/result/GroupIncrTrendResultDTO.java
  78. 37
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/group/dto/result/GroupSubAgencyResultDTO.java
  79. 37
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/group/dto/result/GroupSubGridResultDTO.java
  80. 40
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/group/dto/result/GroupSummaryInfoResultDTO.java
  81. 25
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/group/dto/result/SubAgencyResultDTO.java
  82. 0
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/issue/.gitignore
  83. 14
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/issue/constant/IssueConstant.java
  84. 19
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/issue/dto/form/IssueIncrtrendFormDTO.java
  85. 206
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/issue/dto/result/IssueDataDTO.java
  86. 30
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/issue/dto/result/IssueIncrtrendResultDTO.java
  87. 34
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/issue/dto/result/IssueSubAgencyResultDTO.java
  88. 27
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/issue/dto/result/IssueSubGridResultDTO.java
  89. 54
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/issue/dto/result/IssueSummaryInfoResultDTO.java
  90. 30
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/issue/dto/result/IssueSummaryPieResultDTO.java
  91. 21
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/constant/ProjectConstant.java
  92. 182
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/FactAgencyProjectDailyDTO.java
  93. 25
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/form/ProjectIncrTrendFormDTO.java
  94. 31
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectIncrTrendResultDTO.java
  95. 36
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectSubAgencyResultDTO.java
  96. 36
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectSubGridResultDTO.java
  97. 35
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectSummaryInfoResultDTO.java
  98. 56
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectSummaryResultDTO.java
  99. 29
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/publicity/dto/form/TagFormDTO.java
  100. 61
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/publicity/dto/result/FactPublishedAgencyDTO.java

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

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

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

@ -110,6 +110,8 @@
<nacos.config.group></nacos.config.group>
<nacos.config-enabled>false</nacos.config-enabled>
<nacos.ip/>
<spring.flyway.enabled>false</spring.flyway.enabled>
</properties>
</profile>
<profile>
@ -140,6 +142,8 @@
<nacos.config.group></nacos.config.group>
<nacos.config-enabled>false</nacos.config-enabled>
<nacos.ip/>
<spring.flyway.enabled>true</spring.flyway.enabled>
</properties>
</profile>
</profiles>

9
epmet-admin/epmet-admin-server/src/main/resources/bootstrap.yml

@ -66,6 +66,15 @@ spring:
namespace: @nacos.config.namespace@
group: @nacos.config.group@
file-extension: yaml
# 数据迁移工具flyway
flyway:
enabled: @spring.flyway.enabled@
locations: classpath:db/migration
url: @spring.datasource.druid.url@
user: @spring.datasource.druid.username@
password: @spring.datasource.druid.password@
baseline-on-migrate: true
baseline-version: 0
management:
endpoints:
web:

1
epmet-admin/epmet-admin-server/src/main/resources/db/migration/V0.0.1__demo.sql

@ -0,0 +1 @@
select 0;

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

@ -2,7 +2,7 @@ version: "3.7"
services:
epmet-auth-server:
container_name: epmet-auth-server-dev
image: 192.168.1.130:10080/epmet-cloud-dev/epmet-auth:0.3.16
image: 192.168.1.130:10080/epmet-cloud-dev/epmet-auth:0.3.23
ports:
- "8081:8081"
network_mode: host # 使用现有网络

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

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

10
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"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>0.3.16</version>
<version>0.3.23</version>
<parent>
<groupId>com.epmet</groupId>
<artifactId>epmet-cloud</artifactId>
@ -159,8 +159,8 @@
<wx.mp.configs.token>111</wx.mp.configs.token>
<wx.mp.configs.aesKey>111</wx.mp.configs.aesKey>
<!--居民端小程序配置-->
<resi.wx.ma.appId>wx9b6102a8ee5add65</resi.wx.ma.appId>
<resi.wx.ma.secret>16fdb68bc2b3e732324ba5d8b8a9b5e2</resi.wx.ma.secret>
<resi.wx.ma.appId>wx07674c23af51b521</resi.wx.ma.appId>
<resi.wx.ma.secret>a2fd0d29b007cbbcf8c8dda8c693d99b</resi.wx.ma.secret>
<!--政府端小程序配置-->
<gov.wx.ma.appId>wx3d1372029eb816a3</gov.wx.ma.appId>
<gov.wx.ma.secret>651f02d71ed3f123dfb584b8bf0f4d8b</gov.wx.ma.secret>
@ -196,8 +196,8 @@
<wx.mp.configs.token>111</wx.mp.configs.token>
<wx.mp.configs.aesKey>111</wx.mp.configs.aesKey>
<!--居民端小程序配置-->
<resi.wx.ma.appId>wx9b6102a8ee5add65</resi.wx.ma.appId>
<resi.wx.ma.secret>16fdb68bc2b3e732324ba5d8b8a9b5e2</resi.wx.ma.secret>
<resi.wx.ma.appId>wx07674c23af51b521</resi.wx.ma.appId>
<resi.wx.ma.secret>a2fd0d29b007cbbcf8c8dda8c693d99b</resi.wx.ma.secret>
<!--政府端小程序配置-->
<gov.wx.ma.appId>wx3d1372029eb816a3</gov.wx.ma.appId>
<gov.wx.ma.secret>651f02d71ed3f123dfb584b8bf0f4d8b</gov.wx.ma.secret>

21
epmet-auth/src/main/java/com/epmet/controller/GovLoginController.java

@ -4,10 +4,7 @@ import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.form.GovWxmpEnteOrgFormDTO;
import com.epmet.dto.form.GovWxmpFormDTO;
import com.epmet.dto.form.SendSmsCodeFormDTO;
import com.epmet.dto.form.StaffOrgsFormDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.StaffOrgsResultDTO;
import com.epmet.dto.result.UserTokenResultDTO;
import com.epmet.service.GovLoginService;
@ -53,7 +50,7 @@ public class GovLoginController {
**/
@PostMapping(value = "/loginwxmp/sendsmscode")
public Result sendSmsCode(@RequestBody SendSmsCodeFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO);
ValidatorUtils.validateEntity(formDTO,SendSmsCodeFormDTO.AddUserShowGroup.class);
govLoginService.sendSmsCode(formDTO);
return new Result();
}
@ -67,7 +64,7 @@ public class GovLoginController {
**/
@PostMapping(value = "/loginwxmp/getmyorg")
public Result<List<StaffOrgsResultDTO>> getmyorg(@RequestBody StaffOrgsFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO);
ValidatorUtils.validateEntity(formDTO,StaffOrgsFormDTO.AddUserShowGroup.class);
List<StaffOrgsResultDTO> staffOrgs=govLoginService.getMyOrg(formDTO);
return new Result<List<StaffOrgsResultDTO>>().ok(staffOrgs);
}
@ -98,5 +95,17 @@ public class GovLoginController {
govLoginService.loginOut(tokenDto);
return new Result();
}
/**
* 更新缓存的角色列表
* @param form
* @return
*/
@PostMapping("/updatecachedroles")
public Result updateCachedRoles(@RequestBody UpdateCachedRolesFormDTO form) {
ValidatorUtils.validateEntity(form);
govLoginService.updateCachedRoles(form.getStaffId(), form.getOrgId(), form.getRoleIds());
return new Result();
}
}

11
epmet-auth/src/main/java/com/epmet/dto/form/SendSmsCodeFormDTO.java

@ -1,5 +1,6 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@ -13,7 +14,13 @@ import java.io.Serializable;
@Data
public class SendSmsCodeFormDTO implements Serializable {
private static final long serialVersionUID = -1852541457359282018L;
@NotBlank(message = "手机号不能为空")
/**
* 添加用户操作的用户可见异常分组
* 该分组用于校验需要返回给前端错误信息提示的列需要继承CustomerClientShowGroup
* 返回错误码为8999提示信息为DTO中具体的列的校验注解message的内容
*/
public interface AddUserShowGroup extends CustomerClientShowGroup {
}
@NotBlank(message = "手机号不能为空", groups = {AddUserShowGroup.class})
private String mobile;
}

11
epmet-auth/src/main/java/com/epmet/dto/form/StaffOrgsFormDTO.java

@ -1,5 +1,6 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@ -13,11 +14,17 @@ import java.io.Serializable;
@Data
public class StaffOrgsFormDTO implements Serializable {
private static final long serialVersionUID = 4193133227120225342L;
/**
* 添加用户操作的用户可见异常分组
* 该分组用于校验需要返回给前端错误信息提示的列需要继承CustomerClientShowGroup
* 返回错误码为8999提示信息为DTO中具体的列的校验注解message的内容
*/
public interface AddUserShowGroup extends CustomerClientShowGroup {
}
/**
* 手机号
*/
@NotBlank(message = "手机号不能为空")
@NotBlank(message = "手机号不能为空", groups = {AddUserShowGroup.class})
private String mobile;
/**

19
epmet-auth/src/main/java/com/epmet/dto/form/UpdateCachedRolesFormDTO.java

@ -0,0 +1,19 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.List;
@Data
public class UpdateCachedRolesFormDTO {
@NotBlank(message = "客户ID不能为空")
private String staffId;
@NotBlank(message = "机关ID不能为空")
private String orgId;
private List<String> roleIds;
}

7
epmet-auth/src/main/java/com/epmet/service/GovLoginService.java

@ -61,4 +61,11 @@ public interface GovLoginService {
* @Date 2020/4/21 22:08
**/
void loginOut(TokenDto tokenDto);
/**
* 更新缓存中的角色列表
* @param staffId
* @param roleIds
*/
void updateCachedRoles(String staffId, String orgId, List<String> roleIds);
}

51
epmet-auth/src/main/java/com/epmet/service/impl/GovLoginServiceImpl.java

@ -2,24 +2,27 @@ package com.epmet.service.impl;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import com.epmet.common.token.constant.LoginConstant;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.security.dto.GovTokenDto;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.CpUserDetailRedis;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.PhoneValidatorUtils;
import com.epmet.constant.SmsTemplateConstant;
import com.epmet.dto.CustomerAgencyDTO;
import com.epmet.dto.CustomerStaffDTO;
import com.epmet.dto.GovStaffRoleDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.feign.EpmetUserFeignClient;
import com.epmet.feign.GovOrgFeignClient;
import com.epmet.feign.MessageFeignClient;
import com.epmet.jwt.JwtTokenProperties;
import com.epmet.jwt.JwtTokenUtils;
import com.epmet.redis.CaptchaRedis;
@ -50,8 +53,6 @@ public class GovLoginServiceImpl implements GovLoginService {
@Autowired
private CaptchaRedis captchaRedis;
@Autowired
private MessageFeignClient messageFeignClient;
@Autowired
private JwtTokenUtils jwtTokenUtils;
@Autowired
private JwtTokenProperties jwtTokenProperties;
@ -59,6 +60,8 @@ public class GovLoginServiceImpl implements GovLoginService {
private CpUserDetailRedis cpUserDetailRedis;
@Autowired
private GovOrgFeignClient govOrgFeignClient;
@Autowired
private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient;
/**
* @param formDTO
@ -72,8 +75,7 @@ public class GovLoginServiceImpl implements GovLoginService {
//1、校验手机号是否符合规范
if (!PhoneValidatorUtils.isMobile(formDTO.getMobile())) {
logger.error(String.format(SEND_SMS_CODE_ERROR, formDTO.getMobile(), EpmetErrorCode.ERROR_PHONE.getCode(), EpmetErrorCode.ERROR_PHONE.getMsg()));
//TODO 2020-05-21 手机号验证先去掉方便测试
//throw new RenException(EpmetErrorCode.ERROR_PHONE.getCode());
throw new RenException(EpmetErrorCode.ERROR_PHONE.getCode());
}
//2、根据手机号校验用户是否存在
Result<List<CustomerStaffDTO>> customerStaffResult = epmetUserFeignClient.checkCustomerStaff(formDTO.getMobile());
@ -81,14 +83,17 @@ public class GovLoginServiceImpl implements GovLoginService {
logger.error(String.format(SEND_SMS_CODE_ERROR, formDTO.getMobile(), customerStaffResult.getCode(), customerStaffResult.getMsg()));
throw new RenException(customerStaffResult.getCode());
}
//3、发送短信验证码 TODO 2020-05-21 发送验证先去掉方便测试
/*Result<Map<String, String>> smsCodeResult = messageFeignClient.sendSmsCaptcha(formDTO.getMobile());
//3、发送短信验证码
SendVerificationCodeFormDTO sendVerificationCodeFormDTO=new SendVerificationCodeFormDTO();
sendVerificationCodeFormDTO.setMobile(formDTO.getMobile());
sendVerificationCodeFormDTO.setAliyunTemplateCode(SmsTemplateConstant.LGOIN_CONFIRM);
Result<SendVerificationCodeResultDTO> smsCodeResult=epmetMessageOpenFeignClient.sendVerificationCode(sendVerificationCodeFormDTO);
if (!smsCodeResult.success()) {
logger.error(String.format(SEND_SMS_CODE_ERROR, formDTO.getMobile(), smsCodeResult.getCode(), smsCodeResult.getMsg()));
throw new RenException(smsCodeResult.getCode());
}
//4、保存短信验证码(删除现有短信验证码、将新的短信验证码存入Redis)
captchaRedis.saveSmsCode(formDTO, smsCodeResult.getData().get("code"));*/
captchaRedis.saveSmsCode(formDTO, smsCodeResult.getData().getCode());
logger.info(String.format("发送短信验证码成功,手机号[%s]", formDTO.getMobile()));
}
@ -111,8 +116,7 @@ public class GovLoginServiceImpl implements GovLoginService {
String rightSmsCode = captchaRedis.getSmsCode(formDTO.getMobile());
if (!formDTO.getSmsCode().equals(rightSmsCode)) {
logger.error(String.format("验证码错误code[%s],msg[%s]",EpmetErrorCode.MOBILE_CODE_ERROR.getCode(),EpmetErrorCode.MOBILE_CODE_ERROR.getMsg()));
//TODO 2020-05-21 校验验证码先去掉方便测试
//throw new RenException(EpmetErrorCode.MOBILE_CODE_ERROR.getCode());
throw new RenException(EpmetErrorCode.MOBILE_CODE_ERROR.getCode());
}
//3、查询用户所有的组织信息
List<String> customerIdList = new ArrayList<>();
@ -170,7 +174,7 @@ public class GovLoginServiceImpl implements GovLoginService {
govTokenDto.setToken(token);
govTokenDto.setUpdateTime(System.currentTimeMillis());
govTokenDto.setExpireTime(jwtTokenUtils.getExpiration(token).getTime());
govTokenDto.setAgencyId(staffLatestAgency.getAgencyId());
govTokenDto.setRootAgencyId(staffLatestAgency.getAgencyId());
govTokenDto.setCustomerId(staffLatestAgency.getCustomerId());
//设置部门,网格,角色列表
@ -178,7 +182,8 @@ public class GovLoginServiceImpl implements GovLoginService {
govTokenDto.setGridIdList(getGridIdList(staffLatestAgency.getStaffId()));
CustomerAgencyDTO agency = getAgencyByStaffId(staffLatestAgency.getStaffId());
if (agency != null) {
govTokenDto.setRoleIdList(queryGovStaffRoleIds(staffLatestAgency.getStaffId(), agency.getId()));
govTokenDto.setAgencyId(agency.getId());
govTokenDto.setRoleList(queryGovStaffRoles(staffLatestAgency.getStaffId(), agency.getId()));
}
govTokenDto.setOrgIdPath(getOrgIdPath(staffLatestAgency.getStaffId()));
@ -192,13 +197,14 @@ public class GovLoginServiceImpl implements GovLoginService {
* @param orgId
* @return
*/
public Set<String> queryGovStaffRoleIds(String staffId, String orgId) {
public List<GovTokenDto.Role> queryGovStaffRoles(String staffId, String orgId) {
StaffRoleFormDTO formDTO = new StaffRoleFormDTO();
formDTO.setStaffId(staffId);
formDTO.setOrgId(orgId);
Result<List<GovStaffRoleDTO>> gridResult = epmetUserFeignClient.getRolesOfStaff(formDTO);
if (!CollectionUtils.isEmpty(gridResult.getData())) {
return gridResult.getData().stream().map(role -> role.getId()).collect(Collectors.toSet());
//return gridResult.getData().stream().map(role -> role.getId()).collect(Collectors.toSet());
return ConvertUtils.sourceToTarget(gridResult.getData(), GovTokenDto.Role.class);
}
return null;
}
@ -285,6 +291,17 @@ public class GovLoginServiceImpl implements GovLoginService {
cpUserDetailRedis.logout(tokenDto.getApp() , tokenDto.getClient() , tokenDto.getUserId());
}
@Override
public void updateCachedRoles(String staffId, String orgId, List<String> roleIds) {
GovTokenDto userDetails = cpUserDetailRedis.get(AppClientConstant.APP_GOV, AppClientConstant.CLIENT_WXMP, staffId, GovTokenDto.class);
if (userDetails == null) {
return;
}
List<GovTokenDto.Role> roles = queryGovStaffRoles(staffId, orgId);
userDetails.setRoleList(roles);
cpUserDetailRedis.set(userDetails, jwtTokenProperties.getExpire());
}
//保存登录日志
private Result saveStaffLoginRecord(GovWxmpEnteOrgFormDTO formDTO, String staffId, String openId) {
StaffLoginAgencyRecordFormDTO staffLoginAgencyRecordFormDTO = new StaffLoginAgencyRecordFormDTO();
@ -347,7 +364,7 @@ public class GovLoginServiceImpl implements GovLoginService {
govTokenDto.setToken(token);
govTokenDto.setUpdateTime(System.currentTimeMillis());
govTokenDto.setExpireTime(jwtTokenUtils.getExpiration(token).getTime());
govTokenDto.setAgencyId(orgId);
govTokenDto.setRootAgencyId(orgId);
govTokenDto.setCustomerId(customerId);
//设置部门,网格,角色列表
@ -355,10 +372,10 @@ public class GovLoginServiceImpl implements GovLoginService {
govTokenDto.setGridIdList(getGridIdList(staffId));
CustomerAgencyDTO agency = getAgencyByStaffId(staffId);
if (agency != null) {
govTokenDto.setRoleIdList(queryGovStaffRoleIds(staffId, agency.getId()));
govTokenDto.setAgencyId(agency.getId());
govTokenDto.setRoleList(queryGovStaffRoles(staffId, agency.getId()));
}
govTokenDto.setOrgIdPath(getOrgIdPath(staffId));
cpUserDetailRedis.set(govTokenDto, expire);
logger.info("截止时间:" + DateUtils.format(jwtTokenUtils.getExpiration(token), "yyyy-MM-dd HH:mm:ss"));
}

7
epmet-auth/src/main/java/com/epmet/service/impl/LoginServiceImpl.java

@ -4,7 +4,6 @@ import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
import com.epmet.common.token.constant.LoginConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.ErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.security.password.PasswordUtils;
@ -17,7 +16,7 @@ import com.epmet.dto.form.*;
import com.epmet.dto.result.PasswordLoginUserInfoResultDTO;
import com.epmet.dto.result.UserTokenResultDTO;
import com.epmet.feign.EpmetUserFeignClient;
import com.epmet.feign.OperAccessFeignClient;
import com.epmet.feign.OperAccessOpenFeignClient;
import com.epmet.jwt.JwtTokenProperties;
import com.epmet.jwt.JwtTokenUtils;
import com.epmet.service.CaptchaService;
@ -63,7 +62,7 @@ public class LoginServiceImpl implements LoginService {
private CaptchaService captchaService;
@Autowired
private OperAccessFeignClient operAccessFeignClient;
private OperAccessOpenFeignClient operAccessOpenFeignClient;
/**
* 居民端微信小程序登录
@ -321,7 +320,7 @@ public class LoginServiceImpl implements LoginService {
}
cpUserDetailRedis.logout(tokenDto.getApp(), tokenDto.getClient(), tokenDto.getUserId());
//web端清空菜单栏和权限
Result operAccessResult = operAccessFeignClient.clearOperUserAccess();
Result operAccessResult = operAccessOpenFeignClient.clearOperUserAccess();
if (operAccessResult.success()) {
logger.info(String.format("运营人员%s退出成功,清空菜单和权限redis成功", tokenDto.getUserId()));
} else {

2
epmet-auth/src/test/java/com/epmet/TokenGenTest.java

@ -78,7 +78,7 @@ public class TokenGenTest {
govTokenDto.setGridIdList(govLoginService.getGridIdList(staffId));
CustomerAgencyDTO agency = govLoginService.getAgencyByStaffId(staffId);
if (agency != null) {
govTokenDto.setRoleIdList(govLoginService.queryGovStaffRoleIds(staffId, agency.getId()));
govTokenDto.setRoleList(govLoginService.queryGovStaffRoles(staffId, agency.getId()));
}
govTokenDto.setOrgIdPath(govLoginService.getOrgIdPath(staffId));

2
epmet-cloud-generator/src/main/resources/application.yml

@ -9,7 +9,7 @@ spring:
type: com.alibaba.druid.pool.DruidDataSource
#MySQL配置
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.1.130:3306/epmet_user?useUnicode=true&characterEncoding=UTF-8&useSSL=false
url: jdbc:mysql://192.168.1.130:3306/epmet_gov_voice?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: epmet_dba
password: EpmEt-dbA-UsEr
#oracle配置

4
epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/annotation/DataFilter.java

@ -32,12 +32,12 @@ public @interface DataFilter {
* public void test(String a, String b, String gridId) {...}
* @return
*/
String gridIdArgName() default "";
String gridIdsArgName() default "";
/**
* 部门ID参数名
* @return
*/
String deptIdArgName() default "";
String deptIdsArgName() default "";
}

26
epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/aspect/DataFilterAspect.java

@ -19,6 +19,8 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Set;
/**
* 数据过滤切面处理类
*
@ -57,24 +59,24 @@ public class DataFilterAspect {
MethodSignature methodSignature = (MethodSignature) point.getSignature();
DataFilter dataFilterAnno = methodSignature.getMethod().getAnnotation(DataFilter.class);
String tableAlias = dataFilterAnno.tableAliases()[0];
String gridIdArgName = dataFilterAnno.gridIdArgName();
String deptIdArgName = dataFilterAnno.deptIdArgName();
String gridIdsArgName = dataFilterAnno.gridIdsArgName();
String deptIdsArgName = dataFilterAnno.deptIdsArgName();
String[] parameterNames = methodSignature.getParameterNames();
// 取出注解参数中指定的gridId和deptId的入参的值
String gridId = null;
String deptId = null;
if (StringUtils.isNotBlank(gridIdArgName)) {
int gridIdArgIndex = ArrayUtils.indexOf(parameterNames, gridIdArgName);
Set<String> gridIds = null;
Set<String> deptIds = null;
if (StringUtils.isNotBlank(gridIdsArgName)) {
int gridIdArgIndex = ArrayUtils.indexOf(parameterNames, gridIdsArgName);
if (gridIdArgIndex >-1){
gridId = (String) point.getArgs()[gridIdArgIndex];
gridIds = (Set<String>) point.getArgs()[gridIdArgIndex];
}
}
if (StringUtils.isNotBlank(deptIdArgName)) {
int deptArgIndex = ArrayUtils.indexOf(parameterNames, deptIdArgName);
if (StringUtils.isNotBlank(deptIdsArgName)) {
int deptArgIndex = ArrayUtils.indexOf(parameterNames, deptIdsArgName);
if (deptArgIndex > -1) {
deptId = (String) point.getArgs()[deptArgIndex];
deptIds = (Set<String>) point.getArgs()[deptArgIndex];
}
}
@ -84,8 +86,8 @@ public class DataFilterAspect {
form.setApp(loginUserUtil.getLoginUserApp());
form.setClient(loginUserUtil.getLoginUserClient());
form.setUserId(loginUserUtil.getLoginUserId());
form.setDepartmentId(deptId);
form.setGridId(gridId);
form.setDepartmentIds(deptIds);
form.setGridIds(gridIds);
form.setOperationKey(requirePermission);
form.setTableAlias(tableAlias);
Result<String> sqlFilterSegmentRst = mybatisGovAccessFeignClient.getSqlFilterSegment(form);

5
epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/dto/form/GetSQLFilterFormDTO.java

@ -3,6 +3,7 @@ package com.epmet.commons.mybatis.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.Set;
@Data
public class GetSQLFilterFormDTO {
@ -21,8 +22,8 @@ public class GetSQLFilterFormDTO {
private String tableAlias;
private String gridId;
private Set<String> gridIds;
private String departmentId;
private Set<String> departmentIds;
}

17
epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/feign/MybatisGovAccessFeignClient.java

@ -16,25 +16,10 @@ import java.util.Set;
* @Description
* @Author sun
*/
//, url = "localhost:8099"
//@FeignClient(name = ServiceConstant.GOV_ACCESS_SERVER, fallback = MybatisGovAccessFeignClientFallback.class, url = "localhost:8099")
@FeignClient(name = ServiceConstant.GOV_ACCESS_SERVER, fallback = MybatisGovAccessFeignClientFallback.class)
public interface MybatisGovAccessFeignClient {
/**
* 查询角色的操作key对应操作范围列表
* @param operationScopeFormDTO
* @return
*/
@PostMapping("/gov/access/access/operationscopes")
Result<Set<OperationScopeDTO>> getOperationScopesByRoleId(OperationScopeFormDTO operationScopeFormDTO);
/**
* 查询角色所有operation及其范围(缓存)
* @return
*/
@PostMapping("/gov/access/access/roleallopesandscopes/{roleId}")
Result<List<RoleOpeScopeResultDTO>> listRoleAllOperationScopesByRoleId(@PathVariable("roleId") String roleId);
/**
* 查询sql过滤片段
* @param form

10
epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/feign/fallback/MybatisGovAccessFeignClientFallback.java

@ -21,16 +21,6 @@ import java.util.Set;
@Component
public class MybatisGovAccessFeignClientFallback implements MybatisGovAccessFeignClient {
@Override
public Result<Set<OperationScopeDTO>> getOperationScopesByRoleId(OperationScopeFormDTO operationScopeFormDTO) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ACCESS_SERVER, "getOperationScopesByRoleId", operationScopeFormDTO);
}
@Override
public Result<List<RoleOpeScopeResultDTO>> listRoleAllOperationScopesByRoleId(@PathVariable("roleId") String roleId){
return ModuleUtils.feignConError(ServiceConstant.GOV_ACCESS_SERVER, "listRoleAllOperationScopesByRoleId", roleId);
}
@Override
public Result<String> getSqlFilterSegment(GetSQLFilterFormDTO form) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ACCESS_SERVER, "getSqlFilterSegment", form);

37
epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/handler/FieldMetaObjectHandler.java

@ -48,14 +48,11 @@ public class FieldMetaObjectHandler implements MetaObjectHandler {
public void insertFill(MetaObject metaObject) {
Date date = new Date();
if (metaObject.getOriginalObject() instanceof BaseEpmetEntity) {
String loginUserId = loginUserUtil.getLoginUserId();
// epmet项目新增的
loginUserId = StringUtils.isBlank(loginUserId) ? Constant.APP_USER_FLAG : loginUserId;
//Long deptId = user == null ? null : user.getDeptId();
setFieldValByName(FieldConstant.CREATED_TIME_HUMP, date, metaObject);
setFieldValByName(FieldConstant.CREATED_BY_HUMP, loginUserId, metaObject);
setFieldValByName(FieldConstant.CREATED_BY_HUMP, getCreatedByFieldValue(metaObject), metaObject);
setFieldValByName(FieldConstant.UPDATED_TIME_HUMP, date, metaObject);
setFieldValByName(FieldConstant.UPDATED_BY_HUMP, loginUserId, metaObject);
setFieldValByName(FieldConstant.UPDATED_BY_HUMP, getUpdatedByFieldValue(metaObject), metaObject);
setFieldValByName(FieldConstant.REVISION_HUMP, NumConstant.ZERO, metaObject);
//删除标识
setFieldValByName(FieldConstant.DEL_FLAG_HUMP, EpmetDelFlagEnum.NORMAL.value(), metaObject);
@ -82,6 +79,32 @@ public class FieldMetaObjectHandler implements MetaObjectHandler {
}
}
public Object getCreatedByFieldValue(MetaObject metaObject) {
Object value = loginUserUtil.getLoginUserId();
if (value == null) {
if (metaObject.hasGetter(FieldConstant.CREATED_BY_HUMP)) {
value = metaObject.getValue(FieldConstant.CREATED_BY_HUMP);
}
if (value == null) {
value = Constant.APP_USER_FLAG;
}
}
return value;
}
public Object getUpdatedByFieldValue(MetaObject metaObject) {
Object value = loginUserUtil.getLoginUserId();
if (value == null) {
if (metaObject.hasGetter(FieldConstant.UPDATED_BY_HUMP)) {
value = metaObject.getValue(FieldConstant.UPDATED_BY_HUMP);
}
if (value == null) {
value = Constant.APP_USER_FLAG;
}
}
return value;
}
@Override
public void updateFill(MetaObject metaObject) {
@ -111,9 +134,7 @@ public class FieldMetaObjectHandler implements MetaObjectHandler {
//更新时间
setFieldValByName(UPDATE_DATE, new Date(), metaObject);
} else if (fillEsuaEntity) {
String loginUserId = loginUserUtil.getLoginUserId();
String userId = StringUtils.isBlank(loginUserId) ? Constant.APP_USER_FLAG : loginUserId;
setFieldValByName(FieldConstant.UPDATED_BY_HUMP, userId, metaObject);
setFieldValByName(FieldConstant.UPDATED_BY_HUMP, getUpdatedByFieldValue(metaObject), metaObject);
setFieldValByName(FieldConstant.UPDATED_TIME_HUMP, new Date(), metaObject);
}
}

6
epmet-commons/epmet-commons-tools/pom.xml

@ -123,6 +123,12 @@
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!-- httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
</dependencies>
<build>

20
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/BaseRequestLogAspect.java

@ -1,10 +1,7 @@
package com.epmet.commons.tools.aspect;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.exception.ErrorCode;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.exception.ValidateException;
import com.epmet.commons.tools.exception.*;
import com.epmet.commons.tools.utils.Result;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
@ -156,9 +153,18 @@ public abstract class BaseRequestLogAspect {
* @return
*/
private Result handleValidateException(ValidateException ex) {
Result result=new Result();
result.setCode(ex.getCode());
result.setMsg(ex.getMsg());
Result result = null;
if (Integer.valueOf(EpmetErrorCode.CUSTOMER_VALIDATE_ERROR.getCode()).equals(ex.getCode())) {
// 显示给客户的
result = new Result();
result.setCode(ex.getCode());
result.setMsg(ex.getMsg());
result.setInternalMsg(ex.getMsg());
} else {
// 不显示给客户的
result = new Result().error();
result.setInternalMsg(ex.getMsg());
}
return result;
}

5
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/AppClientConstant.java

@ -41,6 +41,11 @@ public interface AppClientConstant {
* */
String CLIENT = "client";
/**
* 客户ID
*/
String CUSTOMER_ID = "customerId";
/**
* 事务流水号每次请求串起来的多个服务拥有相同的流水号,便于日志追踪
*/

2
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/EpmetRoleKeyConstant.java

@ -1,7 +1,7 @@
package com.epmet.commons.tools.constant;
/**
* @Description
* @Description 居民端角色key
* @Author yinzuomei
* @Date 2020/3/30 16:38
*/

2
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/NumConstant.java

@ -16,6 +16,7 @@ public interface NumConstant {
int TWO = 2;
int THREE = 3;
int FOUR = 4;
int FIVE = 5;
int SIX = 6;
int SEVEN = 7;
int EIGHT = 8;
@ -39,6 +40,7 @@ public interface NumConstant {
long TWO_L = 2L;
long THREE_L = 3L;
long FOUR_L = 4L;
long MINUS_ONE_L = -1L;
String ZERO_STR = "0";
String ONE_STR = "1";

15
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/ServiceConstant.java

@ -103,4 +103,19 @@ public interface ServiceConstant {
* 共通
*/
String EPMET_COMMON_SERVICE = "common-service-server";
/**
* 政府端-党建声音
*/
String GOV_VOICE_SERVER = "gov-voice-server";
/**
* 居民端-党建声音
*/
String RESI_VOICE_SERVER = "resi-voice-server";
/**
* 数据统计
*/
String DATA_STATISTICAL_SERVER = "data-statistical-server";
}

10
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/StrConstant.java

@ -29,6 +29,11 @@ public interface StrConstant {
*/
String HYPHEN = "-";
/**
* 短下划线符号
*/
String UNDER_LINE = "_";
/**
* 英文逗号
*/
@ -38,4 +43,9 @@ public interface StrConstant {
* 冒号
*/
String COLON = ":";
/**
* 中文顿号
*/
String COMMA_ZH = "、";
}

88
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/DingTalkTextMsg.java

@ -0,0 +1,88 @@
package com.epmet.commons.tools.dto.form;
import com.alibaba.fastjson.JSON;
import lombok.Data;
import org.springframework.util.CollectionUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* desc: 钉钉文本消息参数 实体类
* date: 2019/2/20 11:00
* @author: jianjun liu
* email:liujianjun@yunzongnet.com
*/
public class DingTalkTextMsg {
/**
* 消息接收者
*/
private String receiver;
/**
* 发送内容
*/
private String content;
/**
* at的群成员手机号
*/
private List<String> atMobiles;
/**
* 是否at所有人
*/
private boolean isAtAll;
public String getReceiver() {
return receiver;
}
public void setReceiver(String receiver) {
this.receiver = receiver;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public List<String> getAtMobiles() {
return atMobiles;
}
public void setAtMobiles(List<String> atMobiles) {
this.atMobiles = atMobiles;
}
public boolean isAtAll() {
return isAtAll;
}
public void setAtAll(boolean atAll) {
isAtAll = atAll;
}
public String getMsgContent() {
Map<String, Object> items = new HashMap<>();
items.put("msgtype", "text");
Map<String, String> textContent = new HashMap<>();
textContent.put("content", getContent());
items.put("text", textContent);
Map<String, Object> atItems = new HashMap<>();
if (!CollectionUtils.isEmpty(atMobiles)) {
atItems.put("atMobiles", atMobiles);
}
if (isAtAll) {
atItems.put("isAtAll", isAtAll);
}
items.put("at", atItems);
return JSON.toJSONString(items);
}
}

50
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/RequirePermissionEnum.java

@ -76,23 +76,47 @@ public enum RequirePermissionEnum {
/**
* 基层治理-议题管理
*/
WORK_GRASSROOTS_ISSUE_VOTINGLIST("work_grassroots_issue_voting_list","表决中","表决中议题列表查询"),
WORK_GRASSROOTS_ISSUE_SHIFTED_PROJECT_LIST("work_grassroots_issue_shifted_project_list", "已转项目列表查询","已转项目议题列表查询"),
WORK_GRASSROOTS_ISSUE_CLOSED_LIST("work_grassroots_issue_closed_list","已关闭","已关闭议题列表查询"),
WORK_GRASSROOTS_ISSUE_DETAIL("work_grassroots_issue_detail", "议题详情","议题详情界面所有的api添加此校验"),
WORK_GRASSROOTS_ISSUE_SHIFT_PROJECT("work_grassroots_issue_shift_project", "转项目","转项目(选择处理部门api也需要添加此校验)"),
WORK_GRASSROOTS_ISSUE_CLOSE("work_grassroots_issue_close","关闭议题","关闭议题"),
WORK_GRASSROOTS_ISSUE_VOTINGLIST("work_grassroots_issue_voting_list","基层治理:议题管理:表决中","表决中议题列表查询"),
WORK_GRASSROOTS_ISSUE_SHIFTED_PROJECT_LIST("work_grassroots_issue_shifted_project_list", "基层治理:议题管理:已转项目列表查询","已转项目议题列表查询"),
WORK_GRASSROOTS_ISSUE_CLOSED_LIST("work_grassroots_issue_closed_list","基层治理:议题管理:已关闭","已关闭议题列表查询"),
WORK_GRASSROOTS_ISSUE_DETAIL("work_grassroots_issue_detail", "基层治理:议题管理:议题详情","议题详情界面所有的api添加此校验"),
WORK_GRASSROOTS_ISSUE_SHIFT_PROJECT("work_grassroots_issue_shift_project", "基层治理:议题管理:转项目","转项目(选择处理部门api也需要添加此校验)"),
WORK_GRASSROOTS_ISSUE_CLOSE("work_grassroots_issue_close","基层治理:议题管理:关闭议题","关闭议题"),
/**
* 工作-项目跟踪
*/
WORK_PROJECT_TRACE_PENDING_LIST("work_project_trace_pending_list","待处理","待处理的项目,列表查询"),
WORK_PROJECT_TRACE_CREATED_LIST("work_project_trace_created_list","我发起","我发起的项目,列表查询"),
WORK_PROJECT_TRACE_INVOLVED_LIST("work_project_trace_involved_list","我参与","我参与的项目,列表查询"),
WORK_PROJECT_TRACE_DETAIL("work_project_trace_detail","项目详情","项目详情界面所有的api添加此校验"),
WORK_PROJECT_TRACE_CLOSE("work_project_trace_close","结案","结案"),
WORK_PROJECT_TRACE_TRANSFER("work_project_trace_transfer","转其他部门","转其他部门(选择处理部门api也需要添加此校验)"),
WORK_PROJECT_TRACE_RETURN("work_project_trace_return","退回","退回");
WORK_PROJECT_TRACE_PENDING_LIST("work_project_trace_pending_list","项目跟踪:待处理","待处理的项目,列表查询"),
WORK_PROJECT_TRACE_CREATED_LIST("work_project_trace_created_list","项目跟踪:我发起","我发起的项目,列表查询"),
WORK_PROJECT_TRACE_INVOLVED_LIST("work_project_trace_involved_list","项目跟踪:我参与","我参与的项目,列表查询"),
WORK_PROJECT_TRACE_DETAIL("work_project_trace_detail","项目跟踪:项目详情","项目详情界面所有的api添加此校验"),
WORK_PROJECT_TRACE_CLOSE("work_project_trace_close","项目跟踪:结案","结案"),
WORK_PROJECT_TRACE_TRANSFER("work_project_trace_transfer","项目跟踪:转其他部门","转其他部门(选择处理部门api也需要添加此校验)"),
WORK_PROJECT_TRACE_RETURN("work_project_trace_return","项目跟踪:退回","退回"),
/**
* 党务工作-党建声音
*/
WORK_PARTY_VOICE_PUBLISHED_LIST("work_party_voice_published_list", "党建声音:已发布列表", "已发布文章列表查询"),
WORK_PARTY_VOICE_DETAIL("work_party_voice_detail", "党建声音:文章详情", "已发布详情、已下线详情"),
WORK_PARTY_VOICE_DRAFT_LIST("work_party_voice_draft_list", "党建声音:草稿箱列表", "草稿箱列表"),
WORK_PARTY_VOICE_DRAFT_EDIT("work_party_voice_draft_edit", "党建声音:编辑草稿", "编辑草稿"),
WORK_PARTY_VOICE_DRAFT_DELETE("work_party_voice_draft_delete", "党建声音:删除草稿", "删除草稿"),
WORK_PARTY_VOICE_OFFLINE_LIST("work_party_voice_offline_list", "党建声音:已下线列表", "已下线文章列表"),
WORK_PARTY_VOICE_PUBLISH("work_party_voice_publish", "党建声音:创建文章", ""),
WORK_PARTY_VOICE_EDIT("work_party_voice_edit", "党建声音:重新编辑", ""),
WORK_PARTY_VOICE_OFFLINE("work_party_voice_offline", "党建声音:下线文章", ""),
WORK_PARTY_VOICE_OPERATION_LIST("work_party_voice_operation_list","党建声音:查看文章操作记录",""),
/**
* 基层治理-支部管理
*/
WORK_GRASSROOTS_PARTY_BRANCH_ADD("work_grassroots_party_branch_add","基层治理:支部管理:添加党支部","支部管理-添加党支部"),
WORK_GRASSROOTS_PARTY_BRANCH_EDIT("work_grassroots_party_branch_edit","基层治理:支部管理:编辑党支部","支部管理-编辑党支部信息"),
WORK_GRASSROOTS_PARTY_BRANCH_DELETE("work_grassroots_party_branch_delete","基层治理:支部管理:删除党支部","支部管理-删除党支部"),
WORK_GRASSROOTS_PARTY_MEMBER_ADD("work_grassroots_party_member_add","基层治理:支部管理:添加党员","支部管理-添加党员"),
WORK_GRASSROOTS_PARTY_MEMBER_EDIT("work_grassroots_party_member_edit","基层治理:支部管理:编辑党员","支部管理-编辑党员"),
WORK_GRASSROOTS_PARTY_MEMBER_DELETE("work_grassroots_party_member_delete","基层治理:支部管理:删除党员","支部管理-删除党员");
private String key;

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

@ -6,6 +6,8 @@ package com.epmet.commons.tools.exception;
* @Description:
*/
public enum EpmetErrorCode {
ERR10002( 10002,"数据库中已存在该记录"),
/**
* 账号或密码错误ACCOUNT_NOT_EXIST
*/
@ -35,7 +37,13 @@ public enum EpmetErrorCode {
MOBILE_GET_CODE_ERROR(8104,"获取验证码失败"),
MESSAGE_SMS_SEND_ERROR(8105, "短信发送失败"),
NOT_DEL_GRID(8106,"该网格存在工作人员,不允许删除"),
ORG_IS_NOT_NULL(8107,"党组织关系不能为空"),
CANNOT_DELETE_PARTY_BRANCH(8108,"当前支部存在党员,不允许删除"),
IDCARDNO_ALREADY_EXITS(8109,"系统已存在相同身份证号码,请重新输入"),
IDCARDNO_ERROR(8110,"身份证号格式错误,请重新输入"),
CANNOT_DELETE_PARTY_MEMBER(8111,"该用户已注册党员,不允许删除"),
CANNOT_AUDIT_WARM(8201, "请完善居民信息"),
NOT_DEL_AGENCY(8202, "该机关存在下级机关,不允许删除"),
@ -65,8 +73,13 @@ public enum EpmetErrorCode {
OPER_UPLOAD_FILE_OVER_SIZE(8707, "文件体积过大"),
OPER_UPLOAD_FILE_TYPE_ERROR(8708, "文件类型错误"),
// 党建声音 前端提示 88段
DRAFT_CONTENT_IS_NULL(8801, "至少需要添加一个段落"),
ARTICLE_PUBLISH_ERROR(8801, "发布文章失败,请刷新重试"),
CUSTOMER_VALIDATE_ERROR(8999, "内部数据校验异常");
private int code;
private String msg;
@ -82,7 +95,7 @@ public enum EpmetErrorCode {
return epmetErrorCodeEnum.getMsg();
}
}
return null;
return EpmetErrorCode.SERVER_ERROR.getMsg();
}
public int getCode(){

21
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/CommonGovAccessFeignClient.java

@ -2,40 +2,21 @@ package com.epmet.commons.tools.feign;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.dto.form.HasSpecifiedPermissionFormDTO;
import com.epmet.commons.tools.dto.form.LoginUserInfoFormDTO;
import com.epmet.commons.tools.dto.form.LoginUserInfoResultDTO;
import com.epmet.commons.tools.dto.form.RoleOpeScopeResultDTO;
import com.epmet.commons.tools.feign.fallback.CommonGovAccessFeignClientFallback;
import com.epmet.commons.tools.utils.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
/**
* @Description
* @Author sun
*/
//, url = "localhost:8099"
//@FeignClient(name = ServiceConstant.GOV_ACCESS_SERVER, fallback = CommonGovAccessFeignClientFallback.class, url = "localhost:8099")
@FeignClient(name = ServiceConstant.GOV_ACCESS_SERVER, fallback = CommonGovAccessFeignClientFallback.class)
public interface CommonGovAccessFeignClient {
/**
* 查询登陆用户信息
* @return
*/
@PostMapping("/gov/access/access/loginuserinfo")
Result<LoginUserInfoResultDTO> getLoginUserInfo(@RequestBody LoginUserInfoFormDTO dto);
/**
* 查询角色所有operation及其范围(缓存)
* @return
*/
@PostMapping("/gov/access/access/roleallopesandscopes/{roleId}")
Result<List<RoleOpeScopeResultDTO>> listRoleAllOperationScopesByRoleId(@PathVariable("roleId") String roleId);
/**
* 用户是否具有指定权限
* @param form

16
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/fallback/CommonGovAccessFeignClientFallback.java

@ -2,16 +2,10 @@ package com.epmet.commons.tools.feign.fallback;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.dto.form.HasSpecifiedPermissionFormDTO;
import com.epmet.commons.tools.dto.form.LoginUserInfoFormDTO;
import com.epmet.commons.tools.dto.form.LoginUserInfoResultDTO;
import com.epmet.commons.tools.dto.form.RoleOpeScopeResultDTO;
import com.epmet.commons.tools.feign.CommonGovAccessFeignClient;
import com.epmet.commons.tools.utils.ModuleUtils;
import com.epmet.commons.tools.utils.Result;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PathVariable;
import java.util.List;
/**
* 调用政府端权限
@ -22,16 +16,6 @@ import java.util.List;
@Component
public class CommonGovAccessFeignClientFallback implements CommonGovAccessFeignClient {
@Override
public Result<LoginUserInfoResultDTO> getLoginUserInfo(LoginUserInfoFormDTO dto) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ACCESS_SERVER, "getLoginUserInfo", dto);
}
@Override
public Result<List<RoleOpeScopeResultDTO>> listRoleAllOperationScopesByRoleId(@PathVariable("roleId") String roleId){
return ModuleUtils.feignConError(ServiceConstant.GOV_ACCESS_SERVER, "listRoleAllOperationScopesByRoleId", roleId);
}
@Override
public Result<Boolean> hasSpecifiedPermission(HasSpecifiedPermissionFormDTO form) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ACCESS_SERVER, "hasSpecifiedPermission", form);

97
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/filter/LogMsgSendFilter.java

@ -0,0 +1,97 @@
package com.epmet.commons.tools.filter;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.filter.LevelFilter;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.classic.spi.IThrowableProxy;
import ch.qos.logback.classic.spi.StackTraceElementProxy;
import ch.qos.logback.core.spi.FilterReply;
import com.epmet.commons.tools.utils.HttpClientManager;
import com.epmet.commons.tools.utils.Result;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.SimpleDateFormat;
/**
* desc: 发送日志消息
*
* @date: 2020/6/24 17:47
* @author: jianjun liu
*/
public class LogMsgSendFilter extends LevelFilter {
private static final Logger logger = LoggerFactory.getLogger(LogMsgSendFilter.class);
@Override
public FilterReply decide(ILoggingEvent event) {
//如果日志级别等于设置的日志级别 则发送消息
if (event.getLevel().isGreaterOrEqual(Level.ERROR)) {
try {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("【日志告警】\n");
stringBuilder.append("\n");
stringBuilder.append("告警级别:" + event.getLevel());
stringBuilder.append("\n");
stringBuilder.append("故障时间:" + formatLongTime2Str(event.getTimeStamp()));
stringBuilder.append("\n");
stringBuilder.append("TraceId:" + Thread.currentThread().getName());
stringBuilder.append("\n");
stringBuilder.append("告警信息:" + event.getFormattedMessage());
stringBuilder.append("\n");
IThrowableProxy throwableProxy = event.getThrowableProxy();
//异常信息处理 暂时处理一级的5行数据
apendStackInfo(stringBuilder, throwableProxy);
Result<String> flag = HttpClientManager.getInstance().sendAlarmMsg(stringBuilder.toString());
if (!flag.success()) {
logger.warn("msgSender.sendMsg fail,param:{}", stringBuilder.toString());
}
} catch (Exception e) {
logger.warn("decide exception", e);
}
}
//交给其他filter继续向下处理
return super.decide(event);
}
private void apendStackInfo(StringBuilder stringBuilder, IThrowableProxy throwableProxy) {
int defaultRowLine = 5;
if (throwableProxy != null) {
stringBuilder.append("异常信息:")
.append(throwableProxy.getClassName())
.append(" : ")
.append(throwableProxy.getMessage())
.append("\n");
StackTraceElementProxy[] stackTraceElementProxyArray = throwableProxy.getStackTraceElementProxyArray();
StackTraceElementProxy stackTraceElementProxy = null;
if (stackTraceElementProxyArray.length < defaultRowLine) {
defaultRowLine = stackTraceElementProxyArray.length;
}
for (int i = 0; i < defaultRowLine; i++) {
stackTraceElementProxy = stackTraceElementProxyArray[i];
StackTraceElement stackTraceElement = stackTraceElementProxy.getStackTraceElement();
stringBuilder.append("\t\tat ");
stringBuilder.append(stackTraceElement.getClassName());
stringBuilder.append(".");
stringBuilder.append(stackTraceElement.getMethodName());
stringBuilder.append("(");
stringBuilder.append(stackTraceElement.getFileName());
stringBuilder.append(":");
stringBuilder.append(stackTraceElement.getLineNumber());
stringBuilder.append(")");
stringBuilder.append("\n");
}
}
}
private String formatLongTime2Str(long timestamp) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
return dateFormat.format(timestamp);
}
}

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

@ -8,6 +8,8 @@
package com.epmet.commons.tools.redis;
import com.epmet.commons.tools.constant.StrConstant;
/**
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
@ -213,4 +215,43 @@ public class RedisKeys {
public static String getAgencyByIdKey(String agencyId) {
return rootPrefix.concat("gov:agency:").concat(agencyId);
}
/**
* 客户标签排行 缓存Key
* @param customerId
* @return
*/
public static String getCustomerTagKey(String customerId) {
return rootPrefix.concat("tags:customer:rankingTag:").concat(customerId);
}
/**
* 客户关联标签 缓存Key
* @param customerId
* @param tagId
* @return
*/
public static String getCustomerReTagKey(String customerId,String tagId) {
return rootPrefix.concat("tags:customer:relationTag:").concat(customerId).concat(StrConstant.COLON).concat(tagId);
}
/**
* 网格标签排行 缓存Key
* @param gridId
* @return
*/
public static String getGridTagKey(String gridId) {
return rootPrefix.concat("tags:grid:rankingTag:").concat(gridId);
}
/**
* 网格关联标签 缓存Key
* @param gridId
* @param tagId
* @return
*/
public static String getGridReTagKey(String gridId,String tagId) {
return rootPrefix.concat("tags:grid:relationTag:").concat(gridId).concat(StrConstant.COLON).concat(tagId);
}
}

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

@ -10,10 +10,10 @@ package com.epmet.commons.tools.redis;
import com.epmet.commons.tools.constant.NumConstant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.support.atomic.RedisAtomicLong;
import org.springframework.stereotype.Component;
@ -262,4 +262,58 @@ public class RedisUtils {
return hGetAll(key);
}
/**
* @Description 获取集合的元素, 从大到小排序
* @param key
* @param start
* @param end
* @author zxc
*/
public Set<Object> zRevRange(String key, long start, long end) {
return redisTemplate.opsForZSet().reverseRange(key, start, end);
}
/**
* @Description 获取key集合与多个集合的交集
* @param key
* @param otherKeys
* @author zxc
*/
public Set<Object> intersect(String key, Collection<String> otherKeys) {
return redisTemplate.opsForSet().intersect(key, otherKeys);
}
/**
* @Description 获取集合set
* @param key
* @author zxc
*/
public Set<Object> sMembers(String key){
return redisTemplate.opsForSet().members(key);
}
/**
* @Description 获取 zset 中带score的集合
* @param key
* @param start
* @param end
* @author zxc
*/
public Set<ZSetOperations.TypedTuple<Object>> zReverseRangeWithScores(String key, long start, long end) {
Set<ZSetOperations.TypedTuple<Object>> typedTuples = redisTemplate.opsForZSet().reverseRangeWithScores(key, start, end);
return typedTuples;
}
/**
* @Description 标签使用数量缓存更新
* @param key
* @param value
* @param delta
* @author zxc
*/
public Double zIncrementScore(String key, Object value, double delta) {
return redisTemplate.opsForZSet().incrementScore(key, value, delta);
}
}

25
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/param/ImgScanParamDTO.java

@ -0,0 +1,25 @@
package com.epmet.commons.tools.scan.param;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* 审查参数
*
* @author jianjun liu
* @date 2020-06-04 21:57
**/
@Data
public class ImgScanParamDTO implements Serializable {
private static final long serialVersionUID = -5982388188212400644L;
/**
* 要检测的内容列表必填
* remark一组任务列表中的taskId不能相同
*/
private List<ImgTaskDTO> tasks = new ArrayList<>();
}

28
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/param/ImgTaskDTO.java

@ -0,0 +1,28 @@
package com.epmet.commons.tools.scan.param;
import lombok.Data;
import java.io.Serializable;
/**
* 任务参数
*
* @author jianjun liu
* @email liujianjun@yunzongnet.com
* @date 2020-06-04 22:13
**/
@Data
public class ImgTaskDTO implements Serializable {
private static final long serialVersionUID = -747206284930578105L;
/**
* 要检测的数据id 非必填
*
* */
private String dataId;
/**
* 图片url 必填
*/
private String url;
}

25
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/param/TextScanParamDTO.java

@ -0,0 +1,25 @@
package com.epmet.commons.tools.scan.param;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* 文本审查参数
*
* @author jianjun liu
* @date 2020-06-05 11:17
**/
@Data
public class TextScanParamDTO implements Serializable {
private static final long serialVersionUID = -6244354240835340471L;
/**
* 要检测的内容列表必填
* remark一组任务列表中的taskId不能相同
*/
private List<TextTaskDTO> tasks = new ArrayList<>();
}

28
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/param/TextTaskDTO.java

@ -0,0 +1,28 @@
package com.epmet.commons.tools.scan.param;
import lombok.Data;
import java.io.Serializable;
/**
* 任务参数
*
* @author jianjun liu
* @email liujianjun@yunzongnet.com
* @date 2020-06-04 22:13
**/
@Data
public class TextTaskDTO implements Serializable {
private static final long serialVersionUID = 6957195274696018630L;
/**
* 要检测的数据id 非必填
*
* */
private String dataId;
/**
* 文本内容 必填 最多不能超过10000
*/
private String content;
}

42
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/scan/result/SyncScanResult.java

@ -0,0 +1,42 @@
package com.epmet.commons.tools.scan.result;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* 检测结果
*
* @author jianjun liu
* @email liujianjun@yunzongnet.com
* @date 2020-06-05 10:52
**/
@Data
public class SyncScanResult implements Serializable {
/**
* 执行成功的任务Id集合
*/
private List<String> successDataIds = new ArrayList<>();
/**
* 执行失败的任务Id集合
*/
private List<String> failDataIds = new ArrayList<>();
/**
* 本地是否全部通过
*/
private boolean isAllPass;
public boolean isAllPass() {
if (failDataIds.isEmpty() && !successDataIds.isEmpty()) {
return true;
}
return isAllPass;
}
public void setAllPass(boolean allPass) {
isAllPass = allPass;
}
}

20
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/dto/GovTokenDto.java

@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSON;
import lombok.Data;
import java.io.Serializable;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
/**
@ -47,6 +49,11 @@ public class GovTokenDto extends BaseTokenDto implements Serializable {
/**
* 当前登录的组织id(顶级)
*/
private String rootAgencyId;
/**
* 当前用户所属的机关单位id
*/
private String agencyId;
/**
@ -77,7 +84,18 @@ public class GovTokenDto extends BaseTokenDto implements Serializable {
/**
* 角色ID列表
*/
private Set<String> roleIdList;
private List<Role> roleList;
@Data
public static class Role {
private String id;
private String roleKey;
private String roleName;
public Role() {
}
}
@Override
public String toString() {

5
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/dto/TokenDto.java

@ -40,6 +40,11 @@ public class TokenDto extends BaseTokenDto implements Serializable {
*/
private long updateTime;
/**
* 当前工作人员进入的客户id
*/
private String customerId;
@Override
public String toString() {
return JSON.toJSONString(this);

9
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/resolver/LoginUserHandlerMethodArgumentResolver.java

@ -10,6 +10,7 @@ package com.epmet.commons.tools.security.resolver;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.exception.ErrorCode;
import com.epmet.commons.tools.exception.RenException;
@ -77,10 +78,12 @@ public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgu
// String client=keyArray[1];
// String userId=keyArray[2];
// TokenDto tokenDto = cpUserDetailRedis.get(app,client,userId);
TokenDto tokenDto = new TokenDto();
tokenDto.setUserId(request.getHeader("userId"));
tokenDto.setApp(request.getHeader("app"));
tokenDto.setClient(request.getHeader("client"));
tokenDto.setUserId(request.getHeader(AppClientConstant.USER_ID));
tokenDto.setApp(request.getHeader(AppClientConstant.APP));
tokenDto.setClient(request.getHeader(AppClientConstant.CLIENT));
tokenDto.setCustomerId(request.getHeader(AppClientConstant.CUSTOMER_ID));
logger.info("resolveArgument TokenDto:"+ JSON.toJSONString(tokenDto));
logger.info("CURRENT-REDIS-DATABASE---------!!!!!!:"+redisDb);
return tokenDto;

317
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java

@ -1,8 +1,8 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* <p>
* https://www.renren.io
*
* <p>
* 版权所有侵权必究
*/
@ -16,7 +16,7 @@ import org.joda.time.format.DateTimeFormatter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.*;
/**
* 日期处理工具类
@ -25,21 +25,37 @@ import java.util.Date;
* @since 1.0.0
*/
public class DateUtils {
/** 时间格式(yyyy-MM-dd) */
public final static String DATE_PATTERN = "yyyy-MM-dd";
/** 时间格式(yyyy-MM-dd HH:mm:ss) */
public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
/** 季度月份列表 */
public static final List<Integer> Q1Months = Arrays.asList(1, 2, 3);
public static final List<Integer> Q2Months = Arrays.asList(4, 5, 6);
public static final List<Integer> Q3Months = Arrays.asList(7, 8, 9);
public static final List<Integer> Q4Months = Arrays.asList(10, 11, 12);
/** 时间格式(yyyy-MM-dd) */
public final static String DATE_PATTERN = "yyyy-MM-dd";
/** 时间格式(yyyy-MM-dd HH:mm:ss) */
public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
/** 时间格式(yyyyMMddHHmmss) */
public final static String DATE_TIME_NO_SPLIT = "yyyyMMddHHmmss";
public final static String DATE_TIME_NO_SPLIT = "yyyyMMddHHmmss";
/** 时间格式(yyyy-MM-dd HH:mm) */
public final static String DATE_TIME_PATTERN_END_WITH_MINUTE = "yyyy-MM-dd HH:mm";
public static final String DATE_PATTERN_YYYYMMDD = "yyyyMMdd";
public static final String DATE_NAME_PATTERN = "yyyy年MM月dd日";
public static final String MONTH_NAME_PATTERN = "yyyy年MM月";
public static final String DATE_PATTERN_YYYY = "yyyy";
public static final String DATE_PATTERN_YYYYMM = "yyyyMM";
public static final String DATE_PATTERN_YYYY_MM = "yyyy-MM";
public static final String WEEK_TYPE_ENGLISH = "english";
public static final String WEEK_TYPE_CHINESE = "chinese";
/**
* 日期格式化 日期格式为yyyy-MM-dd
* @param date 日期
* @return 返回yyyy-MM-dd格式日期
* @return 返回yyyy-MM-dd格式日期
*/
public static String format(Date date) {
public static String format(Date date) {
return format(date, DATE_PATTERN);
}
@ -47,10 +63,10 @@ public class DateUtils {
* 日期格式化 日期格式为yyyy-MM-dd
* @param date 日期
* @param pattern 格式DateUtils.DATE_TIME_PATTERN
* @return 返回yyyy-MM-dd格式日期
* @return 返回yyyy-MM-dd格式日期
*/
public static String format(Date date, String pattern) {
if(date != null){
if (date != null) {
SimpleDateFormat df = new SimpleDateFormat(pattern);
return df.format(date);
}
@ -61,7 +77,7 @@ public class DateUtils {
* 日期解析
* @param date 日期
* @param pattern 格式DateUtils.DATE_TIME_PATTERN
* @return 返回Date
* @return 返回Date
*/
public static Date parse(String date, String pattern) {
try {
@ -78,7 +94,7 @@ public class DateUtils {
* @param pattern 日期的格式DateUtils.DATE_TIME_PATTERN
*/
public static Date stringToDate(String strDate, String pattern) {
if (StringUtils.isBlank(strDate)){
if (StringUtils.isBlank(strDate)) {
return null;
}
@ -89,7 +105,7 @@ public class DateUtils {
/**
* 根据周数获取开始日期结束日期
* @param week 周期 0本周-1上周-2上上周1下周2下下周
* @return 返回date[0]开始日期date[1]结束日期
* @return 返回date[0]开始日期date[1]结束日期
*/
public static Date[] getWeekStartAndEnd(int week) {
DateTime dateTime = new DateTime();
@ -101,6 +117,21 @@ public class DateUtils {
return new Date[]{beginDate, endDate};
}
/**
* 根据日期获取周开始日期结束日期
* @param date
* @return
*/
public static Date[] getWeekStartAndEnd(Date date) {
DateTime dateTime = new DateTime(date);
LocalDate localDate = new LocalDate(dateTime);
localDate = localDate.dayOfWeek().withMinimumValue();
Date beginDate = localDate.toDate();
Date endDate = localDate.plusDays(6).toDate();
return new Date[]{beginDate, endDate};
}
/**
* 对日期的进行加/
*
@ -184,4 +215,260 @@ public class DateUtils {
DateTime dateTime = new DateTime(date);
return dateTime.plusYears(years).toDate();
}
/**
* 获取星期几例如星期一
* @param date
* @return
*/
public static String getWeekNameOfWeek(Date date, String type) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
String[] chineseWeekDayName = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
String[] englishWeekDayName = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
String weekDayName;
switch (type) {
case WEEK_TYPE_ENGLISH:
weekDayName = englishWeekDayName[dayOfWeek - 1];
break;
case WEEK_TYPE_CHINESE:
weekDayName = chineseWeekDayName[dayOfWeek - 1];
break;
default:
weekDayName = "";
}
return weekDayName;
}
//public static String getEnglishWeekName(Date date) {
// new SimpleDateFormat("E");
//}
/**
* 获取属于一年的第几周
* @param date
* @return
*/
public static int getWeekOfYear(Date date) {
DateTime dateTime = new DateTime(date);
return dateTime.getWeekOfWeekyear();
}
/**
* 按照格式进行时间取整
* @param targetDate
* @param pattern
* @return
*/
public static Date integrate(Date targetDate, String pattern) {
return DateUtils.parse(DateUtils.format(targetDate, pattern), pattern);
}
/**
* 查询指定日期是几月
* @param date
* @return
*/
public static int getMonthOfYear(Date date) {
LocalDate localDate = new LocalDate(date);
return localDate.getMonthOfYear();
}
/**
* 获取季度
* @param date
* @return
*/
public static int getQuarterIndex(Date date) {
LocalDate localDate = new LocalDate(date);
int monthOfYear = localDate.getMonthOfYear();
if (Q1Months.contains(monthOfYear)) {
return 1;
}
if (Q2Months.contains(monthOfYear)) {
return 2;
}
if (Q3Months.contains(monthOfYear)) {
return 3;
}
return 4;
}
/**
* 根据季度查询季度的月份列表
* @param quarterIndex
* @return
*/
public static List<Integer> getMonthsByQuarterIndex(Integer quarterIndex) {
switch (quarterIndex) {
case 1:
return Q1Months;
case 2:
return Q2Months;
case 3:
return Q3Months;
default:
return Q4Months;
}
}
/**
* 获取季度的开始date
* @param year
* @param quarterIndex
* @return
*/
public static Date getQuarterStartDate(String year, Integer quarterIndex) {
List<Integer> months = getMonthsByQuarterIndex(quarterIndex);
String yyyyMM = year.concat(String.format("%02d", months.get(0)));
return DateUtils.parse(yyyyMM, DateUtils.DATE_PATTERN_YYYYMM);
}
/**
* 获取季度的结束date
* @param year
* @param quarterIndex
* @return
*/
public static Date getQuarterEndDate(String year, Integer quarterIndex) {
List<Integer> months = getMonthsByQuarterIndex(quarterIndex);
String yyyyMM = year.concat(String.format("%02d", months.get(2)));
Date nextMonth = DateUtils.addDateMonths(DateUtils.parse(yyyyMM, DateUtils.DATE_PATTERN_YYYYMM), 1);
// 用下一个季度开头-1天就是上一个月季度最后一天
return DateUtils.addDateDays(nextMonth, -1);
}
public static void main(String[] args) {
//int weekOfYear = getWeekOfYear(new Date());
String format = String.format("%02d", 9);
System.out.println(666);
}
/**
* 获取日期前一天
* @author zhaoqifeng
* @date 2020/6/22 11:08
* @param date
* @return java.util.Date
*/
public static Date getBeforeDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, -1);
return calendar.getTime();
}
/**
* @return java.lang.String
* @param dateStr yyyyMMdd返回yyyy.MM.dd yyyyMM返回yyyy/MM
* @author yinzuomei
* @description 返回yyyy.MM.dd
* @Date 2020/6/22 18:38
**/
public static String getxAxisDatePattern(String dateStr,String character){
if(StringUtils.isNotBlank(dateStr)&&dateStr.length()==8){
return String.valueOf(new StringBuffer(dateStr).insert(4,character).insert(7,character));
}else if(StringUtils.isNotBlank(dateStr)&&dateStr.length()==6){
return String.valueOf(new StringBuffer(dateStr).insert(4,character));
}
return dateStr;
}
/**
* @return java.lang.String
* @param beforDay
* @author yinzuomei
* @description 获取当前日期的前n天 返回yyyyMMdd
* @Date 2020/6/23 1:50
**/
public static String getBeforeNDay(int beforDay){
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, - beforDay);
Date date = c.getTime();
return DateUtils.format(date,DateUtils.DATE_PATTERN_YYYYMMDD);
}
/**
* @return java.lang.String
* @param beforMonth
* @author yinzuomei
* @description 获取当前 月份的前n月 返回yyyyMM
* @Date 2020/6/23 1:50
**/
public static String getBeforeNMonth(int beforMonth){
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, - beforMonth);
Date date = c.getTime();
return DateUtils.format(date,DateUtils.DATE_PATTERN_YYYYMM);
}
/**
* @return java.util.List<java.lang.String> 返回yyyyMMdd
* @param startTime yyyyMMdd
* @param endTime yyyyMMdd
* @author yinzuomei
* @description 获取两个日期之间所有的日期集合包含开始结束
* @Date 2020/6/23 1:26
**/
public static List<String> getDaysBetween(String startTime, String endTime){
// 返回的日期集合
List<String> days = new ArrayList<String>();
try{
Date start = DateUtils.parse(startTime,DateUtils.DATE_PATTERN_YYYYMMDD);
Date end = DateUtils.parse(endTime,DateUtils.DATE_PATTERN_YYYYMMDD);
Calendar tempStart = Calendar.getInstance();
tempStart.setTime(start);
Calendar tempEnd = Calendar.getInstance();
tempEnd.setTime(end);
// 日期加1(包含结束)
tempEnd.add(Calendar.DATE, +1);
while (tempStart.before(tempEnd)) {
days.add(DateUtils.format(tempStart.getTime(),DateUtils.DATE_PATTERN_YYYYMMDD));
tempStart.add(Calendar.DAY_OF_YEAR, 1);
}
}catch (Exception e){
e.printStackTrace();
}
return days;
}
/**
* @return java.util.List<java.lang.String>
* @param minDate yyyMM
* @param maxDate yyyyMM
* @author yinzuomei
* @description 计算两个月份中间所有的月份包含起始
* @Date 2020/6/23 2:10
**/
public static List<String> getMonthBetween(String minDate, String maxDate){
ArrayList<String> result = new ArrayList<String>();
try{
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");//格式化为年月
Calendar min = Calendar.getInstance();
Calendar max = Calendar.getInstance();
min.setTime(sdf.parse(minDate));
min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);
max.setTime(sdf.parse(maxDate));
max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
Calendar curr = min;
while (curr.before(max)) {
result.add(sdf.format(curr.getTime()));
curr.add(Calendar.MONTH, 1);
}
min = null;max = null;curr = null;
}catch(Exception e){
e.printStackTrace();
}
return result;
}
}

221
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/HttpClientManager.java

@ -0,0 +1,221 @@
package com.epmet.commons.tools.utils;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.dto.form.DingTalkTextMsg;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.scan.param.TextScanParamDTO;
import com.epmet.commons.tools.scan.param.TextTaskDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.util.CollectionUtils;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* desc: http 工具类
* date: 2020/6/4 22:27
*
* @author: jianjun liu
*/
@Slf4j
public class HttpClientManager {
private static int connectionTimeout = 3000;// 连接超时时间,毫秒
private static int soTimeout = 10000;// 读取数据超时时间,毫秒
/**
* HttpClient对象
*/
private static CloseableHttpClient httpclient = HttpClients.custom().disableAutomaticRetries().build();
/*** 超时设置 ****/
private static RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(soTimeout)
.setConnectTimeout(connectionTimeout)
.build();//设置请求和传输超时时间
public static HttpClientManager getInstance() {
return SingleClass.instance;
}
private static class SingleClass {
private final static HttpClientManager instance = new HttpClientManager();
}
/**
* desc: 发送json post 请求
* param: url,jsonStrParam
* return: CallResult<String>
* date: 2019/2/21 9:12
*
* @author: jianjun liu
*/
public Result<String> sendPost(String url, Map<String, String> paramsMap) {
try {
HttpPost httppost = new HttpPost(url);
httppost.setConfig(requestConfig);
httppost.addHeader("Content-Type", "application/x-www-form-urlencoded charset=utf-8");
List<NameValuePair> list = new ArrayList<NameValuePair>();
for (String key : paramsMap.keySet()) {
list.add(new BasicNameValuePair(key, String.valueOf(paramsMap.get(key))));
}
UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(list, "utf-8");
httppost.setEntity(urlEncodedFormEntity);
return execute(httppost);
} catch (Exception e) {
e.printStackTrace();
log.error("send exception", e);
return new Result<String>().error(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
}
}
/**
* desc: 发送json post 请求
* param: url,jsonStrParam
* return: Result<String>
* date: 2019/2/21 9:12
*
* @author: jianjun liu
*/
public Result<String> sendPostByJSON(String url, String jsonStrParam) {
try {
HttpPost httppost = new HttpPost(url);
httppost.setConfig(requestConfig);
httppost.addHeader("Content-Type", "application/json; charset=utf-8");
if (StringUtils.isNotEmpty(jsonStrParam)) {
StringEntity se = new StringEntity(jsonStrParam, "utf-8");
httppost.setEntity(se);
}
return execute(httppost);
} catch (Exception e) {
log.error("send exception", e);
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
}
}
/**
* desc: 发送钉钉群消息 简版
* param: url,jsonStrParam
* return: Result<String>
*
* @author: jianjun liu
*/
public Result<String> sendAlarmMsg(String content) {
Long timestamp = System.currentTimeMillis();
String url = "https://oapi.dingtalk.com/robot/send?access_token=90782b119f82a5b6bb8e0f819b6a77bbc2102b53aa2d7d2e24fa10b66d580b1c";
String secret = "SEC080aac67ff78e79fdaba132aa51e3fb3f6060dec99492feaac82cabf9f8b6a19";
try {
String stringToSign = timestamp + "\n" + secret;
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)),"UTF-8");
DingTalkTextMsg msg = new DingTalkTextMsg();
msg.setContent(content);
url = url.concat("&timestamp="+timestamp+"&sign="+sign);
String jsonStrParam = msg.getMsgContent();
return sendPostByJSON(url, jsonStrParam);
} catch (Exception e) {
e.printStackTrace();
}
return new Result<String>().error();
}
/**
* desc: 发送get请求
* param:url, params
* return: CallResult<String>
* date: 2019/2/21 9:16
*
* @author: jianjun liu
*/
public Result<String> sendGet(String url, Map<String, Object> params) {
try {
URIBuilder builder = new URIBuilder(url);
if (!CollectionUtils.isEmpty(params)) {
Set<String> set = params.keySet();
for (String key : set) {
builder.setParameter(key, params.get(key) == null ? "" : String.valueOf(params.get(key)));
}
}
HttpGet httpGet = new HttpGet(builder.build());
httpGet.setConfig(requestConfig);
return execute(httpGet);
} catch (Exception e) {
log.error("sendGet exception", e);
return new Result<String>().error(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
}
}
private Result<String> execute(HttpRequestBase httpMethod) {
CloseableHttpResponse response = null;
try {
response = httpclient.execute(httpMethod);
log.debug("http send response:{}", JSON.toJSONString(response));
if (response != null && response.getStatusLine() != null) {
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String result = EntityUtils.toString(response.getEntity());
return new Result<String>().ok(result);
} else {
log.warn("execute http method fail,httpStatus:{0}", response.getStatusLine().getStatusCode());
}
}
} catch (Exception e) {
log.error("execute exception", e);
return new Result<String>().error(EpmetErrorCode.SERVER_ERROR.getCode(), e.getMessage());
} finally {
httpMethod.releaseConnection();
try {
if (response != null) {
response.close();
}
} catch (IOException e) {
}
}
return new Result<String>().error(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
}
public static void main(String[] args) {
String url = "http://localhost:8107/epmetscan/api/textSyncScan";
TextTaskDTO p = new TextTaskDTO();
p.setDataId("1");
p.setContent("neirong1");
List<TextTaskDTO> list = new ArrayList<>();
list.add(p);
TextScanParamDTO param = new TextScanParamDTO();
param.setTasks(list);
Result<String> result = HttpClientManager.getInstance().sendPostByJSON(url, JSON.toJSONString(param));
System.out.println(JSON.toJSONString(result));
}
}

101
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/ScanContentUtils.java

@ -0,0 +1,101 @@
package com.epmet.commons.tools.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.scan.param.ImgScanParamDTO;
import com.epmet.commons.tools.scan.param.TextScanParamDTO;
import com.epmet.commons.tools.scan.param.TextTaskDTO;
import com.epmet.commons.tools.scan.result.SyncScanResult;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
/**
* 扫描内容工具类
*
* @author jianjun liu
* @email liujianjun@yunzongnet.com
* @date 2020-06-08 8:28
**/
@Slf4j
public class ScanContentUtils {
/**
* desc:图片同步扫描
*
* @return
*/
public static Result<SyncScanResult> imgSyncScan(String url, ImgScanParamDTO param) {
log.debug("imgSyncScan param:{}", JSON.toJSONString(param));
if (StringUtils.isBlank(url) || param == null) {
throw new RenException("参数错误");
}
try {
Result<String> result = HttpClientManager.getInstance().sendPostByJSON(url, JSON.toJSONString(param));
log.debug("imgSyncScan result:{}", JSON.toJSONString(param));
if (result.success()) {
return JSON.parseObject(result.getData(),new TypeReference<Result<SyncScanResult>>(){});
}
Result<SyncScanResult> resultResult = new Result<>();
resultResult.error(result.getCode(),result.getMsg());
resultResult.setInternalMsg(result.getInternalMsg());
return resultResult;
} catch (Exception e) {
log.debug("imgSyncScan param:{}", JSON.toJSONString(param));
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), e.getMessage());
}
}
/**
* desc:文字同步扫描
*
* @return
*/
public static Result<SyncScanResult> textSyncScan(String url, TextScanParamDTO param) {
log.debug("textSyncScan param:{}", JSON.toJSONString(param));
if (StringUtils.isBlank(url) || param == null) {
throw new RenException("参数错误");
}
try {
Result<String> result = HttpClientManager.getInstance().sendPostByJSON(url, JSON.toJSONString(param));
log.debug("textSyncScan result:{}", JSON.toJSONString(result));
if (result.success()) {
//return JSON.parseObject(result.getData(),Result.class);
return JSON.parseObject(result.getData(),new TypeReference<Result<SyncScanResult>>(){});
}
Result<SyncScanResult> resultResult = new Result<>();
resultResult.error(result.getCode(),result.getMsg());
resultResult.setInternalMsg(result.getInternalMsg());
return resultResult;
} catch (Exception e) {
log.error("textSyncScan exception:", e);
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), e.getMessage());
}
}
public static void main(String[] args) {
String url = "http://localhost:8107/epmetscan/api/textSyncScan";
TextTaskDTO p = new TextTaskDTO();
p.setDataId("1");
p.setContent("neirong1");
List<TextTaskDTO> list = new ArrayList<>();
list.add(p);
TextScanParamDTO param = new TextScanParamDTO();
param.setTasks(list);
Result<SyncScanResult> imgSyncScanResult = ScanContentUtils.textSyncScan(url, param);
System.out.println(JSON.toJSONString(imgSyncScanResult));
SyncScanResult result = new SyncScanResult();
if (imgSyncScanResult != null){
SyncScanResult imgSyncScanResultData = imgSyncScanResult.getData();
if (imgSyncScanResult.success()&&imgSyncScanResultData.isAllPass()) {
result.setAllPass(imgSyncScanResultData.isAllPass());
result.getSuccessDataIds().addAll(imgSyncScanResultData.getSuccessDataIds());
result.getFailDataIds().addAll(imgSyncScanResultData.getFailDataIds());
System.out.println("================"+JSON.toJSONString(result));
}
}
}
}

212
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/validator/IdCardNoValidatorUtils.java

@ -0,0 +1,212 @@
package com.epmet.commons.tools.validator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Hashtable;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static java.util.regex.Pattern.*;
/**
* 身份证号校验
*
* @author yinzuomei@elink-cn.com
* @date 2020/6/18 9:59
*/
public class IdCardNoValidatorUtils {
private static Logger logger = LoggerFactory.getLogger(IdCardNoValidatorUtils.class);
/**
* 身份证验证
*
* @param idCardNo
* @return 校验信息correct为成功失败会返回对应的失败原因
*/
public static boolean checkIsIdCardNo(String idCardNo) {
String[] wf = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
String[] checkCode = {"7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"};
String iDCardNo = "";
try {
//判断号码的长度 15位或18位
if (idCardNo.length() != 15 && idCardNo.length() != 18) {
logger.error(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证号码长度应该为15位或18位"));
return false;
}
if (idCardNo.length() == 18) {
String lastStr = idCardNo.substring(idCardNo.length() - 1);
if (!Character.isDigit(lastStr.charAt(0))) {
if (Character.isLowerCase(lastStr.charAt(0))) {
logger.error(String.format("校验身份证号:%s错误:%s", idCardNo, "18身份证号最后一位字母需要大写"));
return false;
}
} else {
logger.info(String.format("身份证号%s最后一位为数字",idCardNo));
}
}
if (idCardNo.length() == 18) {
iDCardNo = idCardNo.substring(0, 17);
} else if (idCardNo.length() == 15) {
iDCardNo = idCardNo.substring(0, 6) + "19" + idCardNo.substring(6, 15);
}
if (isStrNum(iDCardNo) == false) {
logger.error(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证15位号码都应为数字;18位号码除最后一位外,都应为数字"));
return false;
}
//判断出生年月
String strYear = iDCardNo.substring(6, 10);// 年份
String strMonth = iDCardNo.substring(10, 12);// 月份
String strDay = iDCardNo.substring(12, 14);// 月份
if (isStrDate(strYear + "-" + strMonth + "-" + strDay) == false) {
logger.error(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证生日无效"));
return false;
}
GregorianCalendar gc = new GregorianCalendar();
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
if ((gc.get(Calendar.YEAR) - Integer.parseInt(strYear)) > 150 || (gc.getTime().getTime() - s.parse(strYear + "-" + strMonth + "-" + strDay).getTime()) < 0) {
logger.error(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证生日不在有效范围"));
return false;
}
if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0) {
logger.error(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证月份无效"));
return false;
}
if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0) {
logger.error(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证日期无效"));
return false;
}
//判断地区码
Hashtable h = GetAreaCode();
if (h.get(iDCardNo.substring(0, 2)) == null) {
logger.error(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证地区编码错误"));
return false;
}
//判断最后一位
int theLastOne = 0;
for (int i = 0; i < 17; i++) {
theLastOne = theLastOne + Integer.parseInt(String.valueOf(iDCardNo.charAt(i))) * Integer.parseInt(checkCode[i]);
}
int modValue = theLastOne % 11;
String strVerifyCode = wf[modValue];
iDCardNo = iDCardNo + strVerifyCode;
if (idCardNo.length() == 18 && !iDCardNo.equals(idCardNo)) {
logger.error(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证无效,不是合法的身份证号码"));
return false;
}
} catch (Exception e) {
logger.error(String.format("校验身份证号方法异常"));
e.printStackTrace();
}
return true;
}
/**
* 地区代码
*
* @return Hashtable
*/
private static Hashtable GetAreaCode() {
Hashtable<String, String> hashtable = new Hashtable<String, String>();
hashtable.put("11", "北京");
hashtable.put("12", "天津");
hashtable.put("13", "河北");
hashtable.put("14", "山西");
hashtable.put("15", "内蒙古");
hashtable.put("21", "辽宁");
hashtable.put("22", "吉林");
hashtable.put("23", "黑龙江");
hashtable.put("31", "上海");
hashtable.put("32", "江苏");
hashtable.put("33", "浙江");
hashtable.put("34", "安徽");
hashtable.put("35", "福建");
hashtable.put("36", "江西");
hashtable.put("37", "山东");
hashtable.put("41", "河南");
hashtable.put("42", "湖北");
hashtable.put("43", "湖南");
hashtable.put("44", "广东");
hashtable.put("45", "广西");
hashtable.put("46", "海南");
hashtable.put("50", "重庆");
hashtable.put("51", "四川");
hashtable.put("52", "贵州");
hashtable.put("53", "云南");
hashtable.put("54", "西藏");
hashtable.put("61", "陕西");
hashtable.put("62", "甘肃");
hashtable.put("63", "青海");
hashtable.put("64", "宁夏");
hashtable.put("65", "新疆");
hashtable.put("71", "台湾");
hashtable.put("81", "香港");
hashtable.put("82", "澳门");
hashtable.put("91", "国外");
return hashtable;
}
/**
* 判断字符串是否为数字
*
* @param str
* @return
*/
private static boolean isStrNum(String str) {
Pattern pattern = compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
if (isNum.matches()) {
return true;
} else {
return false;
}
}
/**
* 判断字符串是否为日期格式
*
* @param strDate
* @return
*/
public static boolean isStrDate(String strDate) {
Pattern pattern = compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$");
Matcher m = pattern.matcher(strDate);
if (m.matches()) {
return true;
} else {
return false;
}
}
//根据身份证号判断性别 1男2女0未知
public static String getGender(String idCard) {
String gender = "0";
if (!IdCardNoValidatorUtils.checkIsIdCardNo(idCard)) {
return gender;
}
if (idCard.length() == 18) {
if (Integer.parseInt(idCard.substring(16).substring(0, 1)) % 2 == 0) {
gender = "2";
} else {
gender = "1";
}
} else if (idCard.length() == 15) {
String usex = idCard.substring(14, 15);
if (Integer.parseInt(usex) % 2 == 0) {
gender = "2";
} else {
gender = "1";
}
}
return gender;
}
}

5
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/validator/ValidatorUtils.java

@ -50,7 +50,10 @@ public class ValidatorUtils {
List<Class<?>> customerShowGroups = new ArrayList<>();
List<Class<?>> internalGroups = new ArrayList<>();
if (groups == null || groups.length ==0){
validate(EpmetErrorCode.CUSTOMER_VALIDATE_ERROR ,object,groups);
return;
}
Arrays.asList(groups).forEach(g -> {
if (CustomerClientShowGroup.class.isAssignableFrom(g)) {
//如果派生自客户端显示分组,那么会优先校验,并且将错误提示给客户端,返回客户端可见的错误码

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

@ -2,7 +2,7 @@ version: "3.7"
services:
epmet-gateway-server:
container_name: epmet-gateway-server-dev
image: 192.168.1.130:10080/epmet-cloud-dev/epmet-gateway:0.3.13
image: 192.168.1.130:10080/epmet-cloud-dev/epmet-gateway:0.3.18
ports:
- "8080:8080"
network_mode: host # 使用现有网络

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

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

22
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"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>0.3.13</version>
<version>0.3.18</version>
<parent>
<groupId>com.epmet</groupId>
<artifactId>epmet-cloud</artifactId>
@ -169,6 +169,18 @@
<!-- 25、党建园地 -->
<gateway.routes.resi-home-server.uri>lb://resi-home-server</gateway.routes.resi-home-server.uri>
<!-- <gateway.routes.resi-home-server.uri>http://localhost:8104</gateway.routes.resi-home-server.uri>-->
<!-- 26、政府端-党建声音 -->
<gateway.routes.gov-voice-server.uri>lb://gov-voice-server</gateway.routes.gov-voice-server.uri>
<!-- <gateway.routes.gov-voice-server.uri>http://localhost:8105</gateway.routes.gov-voice-server.uri>-->
<!-- 27、居民端-党建声音 -->
<gateway.routes.resi-voice-server.uri>lb://resi-voice-server</gateway.routes.resi-voice-server.uri>
<!-- <gateway.routes.resi-voice-server.uri>http://localhost:8106</gateway.routes.resi-voice-server.uri>-->
<!-- 28、政府端-数据首页 -->
<gateway.routes.data-report-server.uri>lb://data-report-server</gateway.routes.data-report-server.uri>
<!-- <gateway.routes.data-report-server.uri>http://localhost:8109</gateway.routes.data-report-server.uri>-->
<!-- 29、统计服务 -->
<gateway.routes.data-statistical-server.uri>lb://data-statistical-server</gateway.routes.data-statistical-server.uri>
<!-- <gateway.routes.data-statistical-server.uri>http://localhost:8108</gateway.routes.data-statistical-server.uri>-->
</properties>
</profile>
<profile>
@ -241,6 +253,14 @@
<gateway.routes.common-service-server.uri>lb://common-service-server</gateway.routes.common-service-server.uri>
<!-- 25、党建园地 -->
<gateway.routes.resi-home-server.uri>lb://resi-home-server</gateway.routes.resi-home-server.uri>
<!-- 26、政府端-党建声音 -->
<gateway.routes.gov-voice-server.uri>lb://gov-voice-server</gateway.routes.gov-voice-server.uri>
<!-- 27、居民端-党建声音 -->
<gateway.routes.resi-voice-server.uri>lb://resi-voice-server</gateway.routes.resi-voice-server.uri>
<!-- 28、政府端-数据首页 -->
<gateway.routes.data-report-server.uri>lb://data-report-server</gateway.routes.data-report-server.uri>
<!-- 29、数据统计服务 -->
<gateway.routes.data-statistical-server.uri>lb://data-statistical-server</gateway.routes.data-statistical-server.uri>
</properties>
</profile>
</profiles>

124
epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java

@ -70,58 +70,98 @@ public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CpA
ServerHttpRequest request = exchange.getRequest();
String requestUri = request.getPath().pathWithinApplication().value();
//请求放行,无需验证权限
if (!pathMatcher(requestUri)) {
return chain.filter(exchange);
}
logger.info("CpAuthGatewayFilterFactory当前requestUri=[" + requestUri + "]CpAuthGatewayFilterFactory拦截成功");
HttpHeaders headers = request.getHeaders();
String token = headers.getFirst(Constant.AUTHORIZATION_HEADER);
if (StringUtils.isBlank(token)) {
token = headers.getFirst(Constant.TOKEN_HEADER);
logger.info("token=" + token);
} else {
logger.info("authorization=" + token);
}
if (StringUtils.isBlank(token)) {
token = request.getQueryParams().getFirst(Constant.AUTHORIZATION_HEADER);
logger.info("params token:" + token);
}
if (StringUtils.isBlank(token)) {
return response(exchange,new Result<>().error(EpmetErrorCode.ERR10005.getCode(),EpmetErrorCode.ERR10005.getMsg()));
String token = getTokenFromRequest(request);
//BaseTokenDto baseTokenDto = StringUtils.isNotBlank(token) ? getBaseTokenDto(token, jwtTokenUtils) : null;
BaseTokenDto baseTokenDto;
if(StringUtils.isNotBlank(token)){
try{
baseTokenDto = getBaseTokenDto(token, jwtTokenUtils);
}catch(RenException e){
return response(exchange,new Result<>().error(e.getCode(),e.getMsg()));
}
}else{
baseTokenDto = null;
}
try {
BaseTokenDto baseTokenDto = getBaseTokenDto(token, jwtTokenUtils);
String customerId = "";
if (baseTokenDto != null) {
if (AppClientConstant.APP_RESI.equals(baseTokenDto.getApp())) {
// 居民端
TokenDto resiTokenDto = getLoginUserInfoByToken(token, jwtTokenUtils, cpUserDetailRedis, TokenDto.class);
validateTokenDto(resiTokenDto, token);
if (resiTokenDto != null) {
customerId = resiTokenDto.getCustomerId();
baseTokenDto = resiTokenDto;
}
} else if (AppClientConstant.APP_GOV.equals(baseTokenDto.getApp())) {
// 政府端
GovTokenDto govTokenDto = getLoginUserInfoByToken(token, jwtTokenUtils, cpUserDetailRedis, GovTokenDto.class);
validateTokenDto(govTokenDto, token);
if (govTokenDto != null) {
customerId = govTokenDto.getCustomerId();
baseTokenDto = govTokenDto;
}
} else if(AppClientConstant.APP_OPER.equals(baseTokenDto.getApp())){
//运营端
TokenDto resiTokenDto = getLoginUserInfoByToken(token, jwtTokenUtils, cpUserDetailRedis, TokenDto.class);
validateTokenDto(resiTokenDto, token);
if (resiTokenDto != null) {
customerId = resiTokenDto.getCustomerId();
baseTokenDto = resiTokenDto;
}
}
}
//当前登录用户userId,添加到header中
//需要认证
if (needAuth(requestUri)) {
if (StringUtils.isBlank(token)) {
return response(exchange,new Result<>().error(EpmetErrorCode.ERR10005.getCode(),EpmetErrorCode.ERR10005.getMsg()));
}
// 校验token
try {
validateTokenDto(baseTokenDto, token);
} catch (RenException e) {
return response(exchange,new Result<>().error(e.getCode(),e.getMsg()));
}
}
if (baseTokenDto != null) {
String redisKey = baseTokenDto.getApp() + "-" + baseTokenDto.getClient() + "-" + baseTokenDto.getUserId();
logger.info("redisKey=" + redisKey);
ServerHttpRequest build = exchange.getRequest().mutate()
exchange.getRequest().mutate()
.header(Constant.APP_USER_KEY, redisKey)
.header(AppClientConstant.APP,baseTokenDto.getApp())
.header(AppClientConstant.CLIENT,baseTokenDto.getClient())
.header(AppClientConstant.USER_ID,baseTokenDto.getUserId())
.build();
.header(AppClientConstant.TRANSACTION_SERIAL_KEY, new String[]{getTransactionSerial()})
;
if(StringUtils.equals(baseTokenDto.getApp(),"gov")){
exchange.getRequest().mutate().header(AppClientConstant.CUSTOMER_ID,customerId);
}
ServerHttpRequest build = exchange.getRequest().mutate().build();
return chain.filter(exchange.mutate().request(build).build());
}catch(RenException e){
return response(exchange,new Result<>().error(e.getCode(),e.getMsg()));
}
return chain.filter(exchange);
};
}
/**
* 获取事务流水号
* @return
*/
public static String getTransactionSerial() {
String[] letterPool = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n"
, "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 2; i++) {
sb.append(letterPool[(int) (Math.random() * 25)]);
}
sb.append(System.currentTimeMillis());
return sb.toString();
}
//public TokenDto getLoginUserInfo(String token) {
// //是否过期
// Claims claims = jwtTokenUtils.getClaimByToken(token);
@ -160,7 +200,12 @@ public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CpA
return exchange.getResponse().writeWith(Flux.just(buffer));
}
private boolean pathMatcher(String requestUri) {
/**
* 是否需要认证
* @param requestUri
* @return
*/
private boolean needAuth(String requestUri) {
for (String url : cpProperty.getSwaggerUrls()) {
if (antPathMatcher.match(url, requestUri)) {
return false;
@ -213,4 +258,25 @@ public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CpA
}
}
}
/**
* 从请求中获取token
* @param request
* @return
*/
private String getTokenFromRequest(ServerHttpRequest request) {
HttpHeaders headers = request.getHeaders();
String token = headers.getFirst(Constant.AUTHORIZATION_HEADER);
if (StringUtils.isBlank(token)) {
token = headers.getFirst(Constant.TOKEN_HEADER);
logger.info("token=" + token);
} else {
logger.info("authorization=" + token);
}
if (StringUtils.isBlank(token)) {
token = request.getQueryParams().getFirst(Constant.AUTHORIZATION_HEADER);
logger.info("params token:" + token);
}
return token;
}
}

168
epmet-gateway/src/main/java/com/epmet/filter/FeignRequestFilter.java

@ -1,83 +1,85 @@
package com.epmet.filter;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.security.dto.BaseTokenDto;
import com.epmet.commons.tools.utils.CpUserDetailRedis;
import com.epmet.jwt.JwtTokenUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.http.HttpHeaders;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
/**
* Feign调用发送请求的Filter
* 目前用于封装用户相关信息到request供上游微服务使用
*/
@Component
public class FeignRequestFilter implements GlobalFilter, UserTokenFilter {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private JwtTokenUtils jwtTokenUtils;
@Autowired
private CpUserDetailRedis cpUserDetailRedis;
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
HttpHeaders headers = request.getHeaders();
String token = headers.getFirst(Constant.AUTHORIZATION_HEADER);
if (StringUtils.isBlank(token)) {
token = headers.getFirst(Constant.TOKEN_HEADER);
logger.info("token=" + token);
} else {
logger.info("authorization=" + token);
}
if (StringUtils.isBlank(token)) {
token = request.getQueryParams().getFirst(Constant.AUTHORIZATION_HEADER);
logger.info("params token:" + token);
}
if (StringUtils.isBlank(token)) {
return chain.filter(exchange);
}
BaseTokenDto baseTokenDto = getBaseTokenDto(token, jwtTokenUtils);
if (baseTokenDto != null) {
ServerHttpRequest build = exchange.getRequest().mutate()
.header(AppClientConstant.USER_ID, new String[]{baseTokenDto.getUserId()})
.header(AppClientConstant.TRANSACTION_SERIAL_KEY, new String[]{getTransactionSerial()})
.build();
return chain.filter(exchange.mutate().request(build).build());
}
return chain.filter(exchange);
}
/**
* 获取事务流水号
* @return
*/
public static String getTransactionSerial() {
String[] letterPool = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n"
, "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 2; i++) {
sb.append(letterPool[(int) (Math.random() * 25)]);
}
sb.append(System.currentTimeMillis());
return sb.toString();
}
}
//package com.epmet.filter;
//
//import com.epmet.commons.tools.constant.AppClientConstant;
//import com.epmet.commons.tools.constant.Constant;
//import com.epmet.commons.tools.security.dto.BaseTokenDto;
//import com.epmet.commons.tools.utils.CpUserDetailRedis;
//import com.epmet.jwt.JwtTokenUtils;
//import org.apache.commons.lang3.StringUtils;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.cloud.gateway.filter.GatewayFilterChain;
//import org.springframework.cloud.gateway.filter.GlobalFilter;
//import org.springframework.http.HttpHeaders;
//import org.springframework.http.server.reactive.ServerHttpRequest;
//import org.springframework.stereotype.Component;
//import org.springframework.web.server.ServerWebExchange;
//import reactor.core.publisher.Mono;
//
///**
// * Feign调用发送请求的Filter
// * 目前用于封装用户相关信息到request,供上游微服务使用
// * 已过时,功能移入CpAuthGatewayFilterFacotry
// */
//@Component
//@Deprecated
//public class FeignRequestFilter implements GlobalFilter, UserTokenFilter {
//
// private Logger logger = LoggerFactory.getLogger(getClass());
//
// @Autowired
// private JwtTokenUtils jwtTokenUtils;
// @Autowired
// private CpUserDetailRedis cpUserDetailRedis;
//
// @Override
// public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// ServerHttpRequest request = exchange.getRequest();
// HttpHeaders headers = request.getHeaders();
// String token = headers.getFirst(Constant.AUTHORIZATION_HEADER);
// if (StringUtils.isBlank(token)) {
// token = headers.getFirst(Constant.TOKEN_HEADER);
// logger.info("token=" + token);
// } else {
// logger.info("authorization=" + token);
// }
// if (StringUtils.isBlank(token)) {
// token = request.getQueryParams().getFirst(Constant.AUTHORIZATION_HEADER);
// logger.info("params token:" + token);
// }
//
// if (StringUtils.isBlank(token)) {
// return chain.filter(exchange);
// }
//
// BaseTokenDto baseTokenDto = getBaseTokenDto(token, jwtTokenUtils);
//
// if (baseTokenDto != null) {
// ServerHttpRequest build = exchange.getRequest().mutate()
// .header(AppClientConstant.USER_ID, new String[]{baseTokenDto.getUserId()})
// .header(AppClientConstant.TRANSACTION_SERIAL_KEY, new String[]{getTransactionSerial()})
// .build();
// return chain.filter(exchange.mutate().request(build).build());
// }
//
// return chain.filter(exchange);
// }
//
// /**
// * 获取事务流水号
// * @return
// */
// public static String getTransactionSerial() {
// String[] letterPool = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n"
// , "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
//
// StringBuilder sb = new StringBuilder();
// for (int i = 0; i < 2; i++) {
// sb.append(letterPool[(int) (Math.random() * 25)]);
// }
//
// sb.append(System.currentTimeMillis());
// return sb.toString();
// }
//}

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

@ -241,6 +241,42 @@ spring:
filters:
- StripPrefix=1
- CpAuth=true
#政府端-党建声音
- id: gov-voice-server
uri: @gateway.routes.gov-voice-server.uri@
order: 26
predicates:
- Path=${server.servlet.context-path}/gov/voice/**
filters:
- StripPrefix=1
- CpAuth=true
#居民端-党建声音
- id: resi-voice-server
uri: @gateway.routes.resi-voice-server.uri@
order: 27
predicates:
- Path=${server.servlet.context-path}/resi/voice/**
filters:
- StripPrefix=1
- CpAuth=true
#政府端-数据首页
- id: data-report-server
uri: @gateway.routes.data-report-server.uri@
order: 28
predicates:
- Path=${server.servlet.context-path}/data/report/**
filters:
- StripPrefix=1
- CpAuth=true
#统计服务
- id: data-statistical-server
uri: @gateway.routes.data-statistical-server.uri@
order: 29
predicates:
- Path=${server.servlet.context-path}/data/stats/**
filters:
- StripPrefix=1
- CpAuth=true
nacos:
discovery:
server-addr: @nacos.server-addr@

23
epmet-module/data-report/data-report-client/pom.xml

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>data-report</artifactId>
<groupId>com.epmet</groupId>
<version>2.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>data-report-client</artifactId>
<dependencies>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-commons-tools</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
</project>

40
epmet-module/data-report/data-report-client/src/main/java/com/epmet/constant/UserAnalysisConstant.java

@ -0,0 +1,40 @@
package com.epmet.constant;
/**
* 描述一下
*
* @author yinzuomei@elink-cn.com
* @date 2020/6/22 16:35
*/
public interface UserAnalysisConstant {
/**
* reg注册居民 parti参与用户如果值为null默认为reg
*/
String REG_FLAG="reg";
/**
* reg注册居民 parti参与用户如果值为null默认为reg
*/
String PARTI_FLAG="parti";
String QUERY_USER_AGENCY_FAILED="查询用户所属机关信息失败";
/**
* 普通居民(已注册)
*/
String REGISTERED_RESI= "居民";
/**
* 热心居民
*/
String WARMHEARTED="热心居民";
/**
* 党员
*/
String PARTYMEMBER="党员";
String DAY_TYPE="day";
String MONTH_TYPE="month";
}

46
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/DimAgencyDTO.java

@ -0,0 +1,46 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dto;
import lombok.Data;
import java.io.Serializable;
/**
* 机关维度
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2020-06-16
*/
@Data
public class DimAgencyDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 组织IDAGENCY_ID
*/
private String id;
/**
* 组织名称
*/
private String agencyName;
}

45
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/DimGridDTO.java

@ -0,0 +1,45 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dto;
import lombok.Data;
import java.io.Serializable;
/**
* 客户网格维度
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2020-06-16
*/
@Data
public class DimGridDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* GRID_ID
*/
private String id;
/**
* 网格名称
*/
private String gridName;
}

0
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/.gitignore

30
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/user/UserIncrTrendFormDTO.java

@ -0,0 +1,30 @@
package com.epmet.dto.form.user;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 按日按月查询注册用户数参与用户数增量折线图 入参
*
* @author yinzuomei@elink-cn.com
* @date 2020/6/22 12:57
*/
@Data
public class UserIncrTrendFormDTO implements Serializable {
public interface AddUserInternalGroup {
}
/**
* reg注册居民 parti参与用户如果值为null默认为reg
*/
@NotBlank(message = "regOrPatiFlag不能为空", groups = {AddUserInternalGroup.class})
private String regOrPatiFlag;
/**
* day日维度 | month月维度 | ()
*/
@NotBlank(message = "type不能为空", groups = {AddUserInternalGroup.class})
private String type;
}

28
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/user/UserSubAgencyFormDTO.java

@ -0,0 +1,28 @@
package com.epmet.dto.form.user;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 各机关注册用户数入参DTO
*
* @author yinzuomei@elink-cn.com
* @date 2020/6/22 12:47
*/
@Data
public class UserSubAgencyFormDTO implements Serializable {
private static final long serialVersionUID = -4558978951554887536L;
public interface AddUserInternalGroup {
}
/**
* reg注册居民 parti参与用户如果值为null默认为reg
*/
@NotBlank(message = "regOrPartiFlag不能为空",groups = {AddUserInternalGroup.class})
private String regOrPartiFlag;
@NotBlank(message = "查询日期不能为空",groups = {AddUserInternalGroup.class})
private String dateId;
}

29
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/user/UserSubGridFormDTO.java

@ -0,0 +1,29 @@
package com.epmet.dto.form.user;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 直属网格注册用户数 入参DTO
*
* @author yinzuomei@elink-cn.com
* @date 2020/6/22 12:52
*/
@Data
public class UserSubGridFormDTO implements Serializable {
private static final long serialVersionUID = -1815903503939673149L;
public interface AddUserInternalGroup {
}
/**
* reg注册居民 parti参与用户如果值为null默认为reg
*/
@NotBlank(message = "regOrPartiFlag不能为空", groups = {AddUserInternalGroup.class})
private String regOrPartiFlag;
@NotBlank(message = "查询日期不能为空", groups = {AddUserInternalGroup.class})
private String dateId;
}

24
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/user/UserSummaryInfoFormDTO.java

@ -0,0 +1,24 @@
package com.epmet.dto.form.user;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 用户汇总信息 入参DTO
*
* @author yinzuomei@elink-cn.com
* @date 2020/6/22 12:31
*/
@Data
public class UserSummaryInfoFormDTO implements Serializable {
private static final long serialVersionUID = -1802471335671321322L;
public interface AddUserInternalGroup {
}
/**
* reg注册居民 parti参与用户如果值为null默认为reg
*/
@NotBlank(message = "regOrPartiFlag不能为空",groups = {AddUserInternalGroup.class})
private String regOrPartiFlag;
}

0
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/.gitignore

20
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserIncrTrendResDTO.java

@ -0,0 +1,20 @@
package com.epmet.dto.result.user;
import lombok.Data;
import java.io.Serializable;
/**
* 描述一下
*
* @author yinzuomei@elink-cn.com
* @date 2020/6/23 9:13
*/
@Data
public class UserIncrTrendResDTO implements Serializable {
private static final long serialVersionUID = 290620373673325352L;
private Integer regIncr;
private Integer warmIncr;
private Integer partymemberIncr;
private String dateIdOrMonthId;
}

34
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserIncrTrendResultDTO.java

@ -0,0 +1,34 @@
package com.epmet.dto.result.user;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.io.Serializable;
/**
* 按日按月查询注册用户数参与用户数增量折线图 返参
*
* @author yinzuomei@elink-cn.com
* @date 2020/6/22 13:17
*/
@Data
public class UserIncrTrendResultDTO implements Serializable {
/**
* 日期如果按日查询返回yyyy/MM/dd,如果按月返回yyyy/MM
*/
private String date;
/**
* 居民党员热心居民返回中文描述
*/
private String type;
/**
* 增量值
*/
private Integer value;
// yyyyMMdd yyyyMM
@JsonIgnore
private String dateOrMonthId;
}

45
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserSubAgencyResDTO.java

@ -0,0 +1,45 @@
package com.epmet.dto.result.user;
import lombok.Data;
import java.io.Serializable;
/**
* 描述一下
*
* @author yinzuomei@elink-cn.com
* @date 2020/6/22 21:45
*/
@Data
public class UserSubAgencyResDTO implements Serializable {
private static final long serialVersionUID = 5807572279154511198L;
/**
* 机关id
*/
private String agencyId;
/**
* 机关名称
*/
private String agencyName;
/**
* 截止到本日参与用户总数
*/
private Integer regTotal;
/**
* 截止到本日参与用户中居民总数
*/
private Integer resiTotal;
/**
* 截止到本日参与用户中热心居民总数
*/
private Integer warmHeartedTotal;
/**
* 截止到本日参与用户中党员总数
*/
private Integer partymemberTotal;
}

40
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserSubAgencyResultDTO.java

@ -0,0 +1,40 @@
package com.epmet.dto.result.user;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.io.Serializable;
/**
* 各机关注册用户数入参DTO
*
* @author yinzuomei@elink-cn.com
* @date 2020/6/22 12:49
*/
@Data
public class UserSubAgencyResultDTO implements Serializable {
private static final long serialVersionUID = 3038896791082755087L;
/**
* 辽阳路街道
*/
private String name;
/**
* 数值
*/
private Integer value;
/**
* 类型:居民党员热心居民
*/
private String type;
/**
* 机关id
*/
private String agencyId;
@JsonIgnore
private Integer total;
}

21
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserSubGridResDTO.java

@ -0,0 +1,21 @@
package com.epmet.dto.result.user;
import lombok.Data;
import java.io.Serializable;
/**
* 直属网格注册用户数参与用户注册用户通用类
*
* @author yinzuomei@elink-cn.com
* @date 2020/6/22 23:57
*/
@Data
public class UserSubGridResDTO implements Serializable {
private static final long serialVersionUID = 2203260762393704885L;
private String gridId;
private Integer regTotal;
private Integer resiTotal;
private Integer warmHeartedTotal;
private Integer partymemberTotal;
}

41
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserSubGridResultDTO.java

@ -0,0 +1,41 @@
package com.epmet.dto.result.user;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.io.Serializable;
/**
* 直属网格注册用户数 返参DTO
*
* @author yinzuomei@elink-cn.com
* @date 2020/6/22 12:54
*/
@Data
public class UserSubGridResultDTO implements Serializable {
private static final long serialVersionUID = -7432747804212305863L;
/**
* 网格名称eg:第一网格
*/
private String name;
/**
* 数值
*/
private Integer value;
/**
* 类型:居民党员热心居民
*/
private String type;
/**
* 网格id
*/
private String gridId;
@JsonIgnore
private Integer total;
}

77
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserSummaryInfoResultDTO.java

@ -0,0 +1,77 @@
package com.epmet.dto.result.user;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 用户汇总信息 返参DTO
*
* @author yinzuomei@elink-cn.com
* @date 2020/6/22 12:34
*/
@Data
public class UserSummaryInfoResultDTO implements Serializable {
private static final long serialVersionUID = -4270726421611289755L;
/**
* 数据更新至yyyy.MM.dd
*/
private String currentDate;
private String dateId;
/**
* 注册居民数
*/
private Integer regTotal;
/**
* 参与用户数
*/
private Integer partiTotal;
/**
* 党员数
*/
private Integer partymemberTotal;
/**
* 党员占比
*/
private String partymemberProportion;
/**
* 热心居民数
*/
private Integer warmHeartedTotal;
/**
* 热心居民占比
*/
private String warmHeartedProportion;
@JsonIgnore
private BigDecimal partymemberProportionValue;
@JsonIgnore
private BigDecimal warmHeartedProportionValue;
@JsonIgnore
private String id;
public UserSummaryInfoResultDTO(){
this.currentDate="";
this.regTotal=0;
this.partiTotal=0;
this.partymemberTotal=0;
this.partymemberProportion="0%";
this.warmHeartedTotal=0;
this.warmHeartedProportion="0%";
this.id="";
}
public static void main(String[] args) {
StringBuffer s=new StringBuffer("20190305").insert(4,".").insert(7,".");
System.out.println(s);
}
}

12
epmet-module/data-report/data-report-client/src/main/java/com/epmet/group/constant/GroupConstant.java

@ -0,0 +1,12 @@
package com.epmet.group.constant;
/**
* @Author zxc
* @CreateTime 2020/6/20 15:24
*/
public interface GroupConstant {
String MONTH = "month";
String DATE = "day";
}

25
epmet-module/data-report/data-report-client/src/main/java/com/epmet/group/dto/form/GroupIncrTrendFormDTO.java

@ -0,0 +1,25 @@
package com.epmet.group.dto.form;
import lombok.Data;
import lombok.NonNull;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Author zxc
* @CreateTime 2020/6/20 12:07
*/
@Data
public class GroupIncrTrendFormDTO implements Serializable {
private static final long serialVersionUID = 1788937450915240575L;
public interface GroupJava {}
/**
* 类型 month date
*/
@NotBlank(message = "type不能为空", groups = {GroupJava.class})
private String type;
}

25
epmet-module/data-report/data-report-client/src/main/java/com/epmet/group/dto/result/GridInfoResultDTO.java

@ -0,0 +1,25 @@
package com.epmet.group.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @CreateTime 2020/6/20 14:30
*/
@Data
public class GridInfoResultDTO implements Serializable {
private static final long serialVersionUID = 5301902590768338888L;
/**
* 网格id
*/
private String gridId;
/**
* 网格名称
*/
private String gridName;
}

30
epmet-module/data-report/data-report-client/src/main/java/com/epmet/group/dto/result/GroupIncrTrendResultDTO.java

@ -0,0 +1,30 @@
package com.epmet.group.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @CreateTime 2020/6/20 12:03
*/
@Data
public class GroupIncrTrendResultDTO implements Serializable {
private static final long serialVersionUID = 5132636251609157706L;
/**
* 日期
*/
private String date;
/**
* 小组数量
*/
private Integer value;
/**
* 类型 小组数量
*/
private String type;
}

37
epmet-module/data-report/data-report-client/src/main/java/com/epmet/group/dto/result/GroupSubAgencyResultDTO.java

@ -0,0 +1,37 @@
package com.epmet.group.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @CreateTime 2020/6/20 11:56
* 网格小组下级机关小组数柱状图
*/
@Data
public class GroupSubAgencyResultDTO implements Serializable {
private static final long serialVersionUID = 8562403482616167221L;
/**
* 名称
*/
private String name;
/**
*
*/
private Integer value;
/**
* 类型
*/
private String type;
/**
* 机关ID
*/
private String agencyId;
}

37
epmet-module/data-report/data-report-client/src/main/java/com/epmet/group/dto/result/GroupSubGridResultDTO.java

@ -0,0 +1,37 @@
package com.epmet.group.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @CreateTime 2020/6/20 11:56
* 网格小组下级机关小组数柱状图
*/
@Data
public class GroupSubGridResultDTO implements Serializable {
private static final long serialVersionUID = -3260124064513560994L;
/**
* 名称
*/
private String name;
/**
*
*/
private Integer value;
/**
* 类型
*/
private String type;
/**
* 机关ID
*/
private String gridId;
}

40
epmet-module/data-report/data-report-client/src/main/java/com/epmet/group/dto/result/GroupSummaryInfoResultDTO.java

@ -0,0 +1,40 @@
package com.epmet.group.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @CreateTime 2020/6/20 11:05
*/
@Data
public class GroupSummaryInfoResultDTO implements Serializable {
private static final long serialVersionUID = 8529179932504931368L;
/**
* 网格总数量
*/
private Integer gridTotalCount;
/**
* 小组总数量
*/
private Integer groupTotalCount;
/**
* 小组平均人数
*/
private Integer groupPeopleAvg;
/**
* 小组人数中位数
*/
private Integer groupPeopleMedian;
/**
* 数据更新至 时间
*/
private String deadline;
}

25
epmet-module/data-report/data-report-client/src/main/java/com/epmet/group/dto/result/SubAgencyResultDTO.java

@ -0,0 +1,25 @@
package com.epmet.group.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @CreateTime 2020/6/20 14:02
*/
@Data
public class SubAgencyResultDTO implements Serializable {
private static final long serialVersionUID = 2276056225590553307L;
/**
* 机关ID
*/
private String agencyId;
/**
* 机关名称
*/
private String agencyName;
}

0
epmet-module/data-report/data-report-client/src/main/java/com/epmet/issue/.gitignore

14
epmet-module/data-report/data-report-client/src/main/java/com/epmet/issue/constant/IssueConstant.java

@ -0,0 +1,14 @@
package com.epmet.issue.constant;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/6/22 14:07
*/
public interface IssueConstant {
String MONTH = "month";
String DATE = "day";
String VOTING_NAME = "表决中";
String SHIFT_NAME = "已转项目";
String CLOSED_NAME = "已关闭";
}

19
epmet-module/data-report/data-report-client/src/main/java/com/epmet/issue/dto/form/IssueIncrtrendFormDTO.java

@ -0,0 +1,19 @@
package com.epmet.issue.dto.form;
import lombok.Data;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/6/22 16:32
*/
@Data
public class IssueIncrtrendFormDTO implements Serializable {
private static final long serialVersionUID = 4408419854627376175L;
/**
* 类型按日date 按月month
*/
private String type;
}

206
epmet-module/data-report/data-report-client/src/main/java/com/epmet/issue/dto/result/IssueDataDTO.java

@ -0,0 +1,206 @@
package com.epmet.issue.dto.result;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/6/22 14:11
*/
@Data
public class IssueDataDTO implements Serializable {
private static final long serialVersionUID = 9136989870868730175L;
/**
* 组织ID
*/
private String agencyId;
/**
* 组织名
*/
private String agencyName;
/**
* 网格ID
*/
private String gridId;
/**
* 网格名
*/
private String gridName;
/**
* 年度ID
*/
private String yearId;
/**
* 年度名
*/
private String yearName;
/**
* 季度ID
*/
private String quarterId;
/**
* 季度名
*/
private String quarterName;
/**
* 月度ID
*/
private String monthId;
/**
* 月度名
*/
private String monthName;
/**
* 周ID
*/
private String weekId;
/**
* 日期ID
*/
private String dateId;
/**
* 日期名
*/
private String dateName;
/**
* 当日议题增量
*/
private Integer issueIncr;
/**
* 议题总数
*/
private Integer issueTotal;
/**
* 当日已转项目的议题数增量
*/
private Integer shiftProjectIncr;
/**
* 已转项目的议题总数
*/
private Integer shiftProjectTotal;
/**
* 已转项目所占百分比
*/
private BigDecimal shiftProjectPercent;
/**
* 当日表决中议题数增量
*/
private Integer votingIncr;
/**
* 表决中议题总数
*/
private Integer votingTotal;
/**
* 表决中议题所占百分比
*/
private BigDecimal votingPercent;
/**
* 当日已关闭议题数增量
*/
private Integer closedIncr;
/**
* 当日已关闭议题中已解决数量
*/
private Integer closedResolvedIncr;
/**
* 当日已关闭议题中无需解决数量
*/
private Integer closedUnresolvedIncr;
/**
* 已关闭议题总数
*/
private Integer closedTotal;
/**
* 已关闭议题中已解决总数
*/
private Integer closedResolvedTotal;
/**
* 已关闭议题中未解决总数
*/
private Integer closedUnresolvedTotal;
/**
* 已关闭议题所占百分比
*/
private BigDecimal closedPercent;
/**
* 已关闭议题中已解决百分比
*/
private BigDecimal closedResolvedPercent;
/**
* 已关闭议题中未解决百分比
*/
private BigDecimal closedUnresolvedPercent;
/**
* 当日已结案议题数
*/
private Integer closedCaseIncr;
/**
* 当日已结案议题中已解决数
*/
private Integer closedCaseResolvedIncr;
/**
* 当日已结案议题中未解决数
*/
private Integer closedCaseUnresolvedIncr;
/**
* 已结案议题总数
*/
private Integer closedCaseTotal;
/**
* 已结案议题中已解决总数
*/
private Integer closedCaseResolvedTotal;
/**
* 已结案议题中未解决总数
*/
private Integer closedCaseUnresolvedTotal;
/**
* 已结案议题中已解决百分比
*/
private BigDecimal closedCaseResolvedPercent;
/**
* 已结案议题中未解决百分比
*/
private BigDecimal closedCaseUnresolvedPercent;
}

30
epmet-module/data-report/data-report-client/src/main/java/com/epmet/issue/dto/result/IssueIncrtrendResultDTO.java

@ -0,0 +1,30 @@
package com.epmet.issue.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/6/22 16:30
*/
@NoArgsConstructor
@Data
public class IssueIncrtrendResultDTO implements Serializable {
private static final long serialVersionUID = 7762529188251385355L;
/**
* 日期
*/
private String date;
/**
* 状态表决中已转项目已关闭
*/
private String type;
/**
* 数量
*/
private Integer value;
}

34
epmet-module/data-report/data-report-client/src/main/java/com/epmet/issue/dto/result/IssueSubAgencyResultDTO.java

@ -0,0 +1,34 @@
package com.epmet.issue.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/6/22 16:24
*/
@NoArgsConstructor
@Data
public class IssueSubAgencyResultDTO implements Serializable {
private static final long serialVersionUID = 2640337888693960513L;
/**
* 组织ID
*/
private String agencyId;
/**
* 组织名
*/
private String name;
/**
* 类型 表决中已转项目已关闭
*/
private String type;
/**
* 数量
*/
private Integer value;
}

27
epmet-module/data-report/data-report-client/src/main/java/com/epmet/issue/dto/result/IssueSubGridResultDTO.java

@ -0,0 +1,27 @@
package com.epmet.issue.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/6/22 16:27
*/
@Data
public class IssueSubGridResultDTO implements Serializable {
private static final long serialVersionUID = -3318384216762207856L;
/**
* 网格名
*/
private String name;
/**
* 类型 表决中已转项目已关闭
*/
private String type;
/**
* 数量
*/
private Integer value;
}

54
epmet-module/data-report/data-report-client/src/main/java/com/epmet/issue/dto/result/IssueSummaryInfoResultDTO.java

@ -0,0 +1,54 @@
package com.epmet.issue.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/6/22 16:17
*/
@NoArgsConstructor
@Data
public class IssueSummaryInfoResultDTO implements Serializable {
private static final long serialVersionUID = -7959140755148294338L;
/**
* 机关ID
*/
private String agencyId;
/**
* 议题总数
*/
private Integer issueTotal;
/**
* 表决中数量
*/
private Integer votingTotal;
/**
* 已转项目数量
*/
private Integer shiftProjectTotal;
/**
* 已关闭数量
*/
private Integer closedTotal;
/**
* 表决中占比
*/
private String votingRatio;
/**
* 已转项目占比
*/
private String shiftProjectRatio;
/**
* 已关闭占比
*/
private String closedRatio;
/**
* 更新至日期
*/
private String dateName;
}

30
epmet-module/data-report/data-report-client/src/main/java/com/epmet/issue/dto/result/IssueSummaryPieResultDTO.java

@ -0,0 +1,30 @@
package com.epmet.issue.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/6/22 16:21
*/
@NoArgsConstructor
@Data
public class IssueSummaryPieResultDTO implements Serializable {
private static final long serialVersionUID = -971115426789868580L;
/**
* 名称 表决中已转项目已关闭
*/
private String name;
/**
*
*/
private Integer value;
/**
* 百分比
*/
private String ratio;
}

21
epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/constant/ProjectConstant.java

@ -0,0 +1,21 @@
package com.epmet.project.constant;
/**
* @Author sun
* @Description 数据-项目
**/
public interface ProjectConstant {
String DAY = "day";
String MONTH = "month";
/**
* 根据Token获取组织信息失败
*/
String GET_AGENCYID = "根据Token获取组织信息失败";
/**
* 参数异常
*/
String TYPE_EXCEPTION = "必要参数为空或参数格式错误";
}

182
epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/FactAgencyProjectDailyDTO.java

@ -0,0 +1,182 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.project.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 机关下日项目数据统计 存放机关下截止到当前日期的各项总数据以及昨日新增各项数据每日定时执行先删后增
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2020-06-16
*/
@Data
public class FactAgencyProjectDailyDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 唯一标识
*/
private String id;
/**
* 客户Id dim_customer.id
*/
private String customerId;
/**
* 机关Id dim_agency.id
*/
private String agencyId;
/**
* 上级组织Iddim_agency.pid
*/
private String parentId;
/**
* 日维度Id dim_date.id
*/
private String dateId;
/**
* 周维度Id dim_week.id
*/
private String weekId;
/**
* 月维度Id dim_month.id
*/
private String monthId;
/**
* 季ID
*/
private String quarterId;
/**
* 年维度Id dim_year.id
*/
private String yearId;
/**
* 截止当日项目总数 当前组织及下级项目总数
*/
private Integer projectTotal;
/**
* 截止当日处理中项目数 当前组织及下级所有未结案项目总数
*/
private Integer pendingTotal;
/**
* 截止当日处理中项目占比 当前组织及下级未结案项目百分比存百分比数小数点后两位
*/
private BigDecimal pendingRatio;
/**
* 截止当日已结案项目数 当前组织及下级已结案项目总数
*/
private Integer closedTotal;
/**
* 截止当日已结案项目占比 当前组织及下级已结案项目百分比存百分比数小数点后两位
*/
private BigDecimal closedRatio;
/**
* 截止当日已结案中已解决项目数 当前组织及下级已结案项目中已解决总数
*/
private Integer resolvedTotal;
/**
* 截止当日已结案中已解决项目占比 当前组织及下级已结案项目中已解决占比
*/
private BigDecimal resolvedRatio;
/**
* 截止当日已结案中未解决项目数 当前组织及下级已结案项目中未解决总数
*/
private Integer unresolvedTotal;
/**
* 截止当日已结案中未解决项目占比 当前组织及下级已结案项目中未解决占比
*/
private BigDecimal unresolvedRatio;
/**
* 当日项目总数 当前组织及下级项目总数
*/
private Integer projectIncr;
/**
* 当日处理中项目数 当前组织及下级前一日新增处理中项目数
*/
private Integer pendingIncr;
/**
* 当日已结案项目数 当前组织及下级前一日新增结案项目数
*/
private Integer closedIncr;
/**
* 当日已结案项目中已解决数 当前组织及下级前一日新增结案中已解决项目数
*/
private Integer resolvedIncr;
/**
* 当日已结案项目组未解决数 当前组织及下级前一日新增结案中未解决项目数
*/
private Integer unresolvedIncr;
/**
* 删除标识 0.未删除 1.已删除
*/
private Integer delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

25
epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/form/ProjectIncrTrendFormDTO.java

@ -0,0 +1,25 @@
package com.epmet.project.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Author sun
* @Description 数据-项目-/月数据查询-接口入参
*/
@Data
public class ProjectIncrTrendFormDTO implements Serializable {
private static final long serialVersionUID = -4929038359220814068L;
public interface ProjectIncr {
}
/**
* 类型 month代表月 date代表日
*/
@NotBlank(message = "month / date 类型不能为空", groups = {ProjectIncr.class})
private String type;
}

31
epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectIncrTrendResultDTO.java

@ -0,0 +1,31 @@
package com.epmet.project.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Author sun
* @Description 数据-项目-获取组织下饼图数据-接口返参
**/
@Data
public class ProjectIncrTrendResultDTO implements Serializable {
private static final long serialVersionUID = 8529179932504931368L;
/**
* 日期(2020/1/1;2020/1/2...)
*/
private String date;
/**
* 类型对应数量
*/
private Integer value;
/**
* 类型名称(处理中已结案)
*/
private String type;
}

36
epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectSubAgencyResultDTO.java

@ -0,0 +1,36 @@
package com.epmet.project.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Author sun
* @Description 数据-项目-获取组织下饼图数据-接口返参
**/
@Data
public class ProjectSubAgencyResultDTO implements Serializable {
private static final long serialVersionUID = 8529179932504931368L;
/**
* 机关Id
*/
private String agencyId;
/**
* 机关名称
*/
private String name;
/**
* 不同类型对应数据
*/
private Integer value;
/**
* 类型名称(处理中已结案)
*/
private String type;
}

36
epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectSubGridResultDTO.java

@ -0,0 +1,36 @@
package com.epmet.project.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Author sun
* @Description 数据-项目-获取组织下饼图数据-接口返参
**/
@Data
public class ProjectSubGridResultDTO implements Serializable {
private static final long serialVersionUID = 8529179932504931368L;
/**
* 机关Id
*/
private String agencyId;
/**
* 机关名称
*/
private String name;
/**
* 不同类型对应数据
*/
private Integer value;
/**
* 类型名称(处理中已结案)
*/
private String type;
}

35
epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectSummaryInfoResultDTO.java

@ -0,0 +1,35 @@
package com.epmet.project.dto.result;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @Author sun
* @Description 数据-项目-获取组织下饼图数据-接口返参
**/
@Data
public class ProjectSummaryInfoResultDTO implements Serializable {
private static final long serialVersionUID = 8529179932504931368L;
/**
* 类型名称(处理中已结案)
*/
private String name;
/**
* 类型对应数量
*/
private Integer value;
/**
* 类型对应百分比(10% 10.1% 10.01%小数点后两位)
*/
@JsonIgnore
private BigDecimal ratioInt;
private String ratio;
}

56
epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectSummaryResultDTO.java

@ -0,0 +1,56 @@
package com.epmet.project.dto.result;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @Author sun
* @Description 数据-项目-汇总数据-接口返参
**/
@Data
public class ProjectSummaryResultDTO implements Serializable {
private static final long serialVersionUID = 8529179932504931368L;
/**
* 机关Id
*/
private String agencyId;
/**
* 项目总数
*/
private Integer projectTotal;
/**
* 更新日期
*/
private String dateName;
/**
* 处理中总数
*/
private Integer pendingTotal;
/**
* 处理中占比
*/
@JsonIgnore
private BigDecimal pendingRatioInt;
private String pendingRatio;
/**
* 已结案总数
*/
private Integer closedTotal;
/**
* 已结案占比
*/
@JsonIgnore
private BigDecimal closedRatioInt;
private String closedRatio;
}

29
epmet-module/data-report/data-report-client/src/main/java/com/epmet/publicity/dto/form/TagFormDTO.java

@ -0,0 +1,29 @@
package com.epmet.publicity.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Author jyy
* @CreateTime 2020/6/22 12:07
*/
@Data
public class TagFormDTO implements Serializable {
private static final long serialVersionUID = 1788937450915240575L;
public interface GroupJava {}
/**
* 获取数据条数默认为10
*/
private Integer pageSize;
/**
* 时间查询维度date:month;quarteryear
*/
@NotBlank(message = "type不能为空", groups = {GroupJava.class})
private String type;
}

61
epmet-module/data-report/data-report-client/src/main/java/com/epmet/publicity/dto/result/FactPublishedAgencyDTO.java

@ -0,0 +1,61 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.publicity.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* 文章发表数量下级机关统计
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2020-06-19
*/
@Data
public class FactPublishedAgencyDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 机关名称
*/
private String name;
/**
* 发文数量
*/
private Integer value;
/**
* 固定值文章数量
*/
private String type="文章数量";
/**
* 机关Id
*/
private String agencyId;
/**
* 上级机关Id
*/
private String pid;
}

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

Loading…
Cancel
Save