Browse Source

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

master
sunyuchao 5 years ago
parent
commit
e3524400a1
  1. 2
      epmet-auth/deploy/docker-compose-prod.yml
  2. 2
      epmet-auth/pom.xml
  3. 2
      epmet-cloud-generator/src/main/resources/application.yml
  4. 2
      epmet-commons/epmet-commons-dynamic-datasource/src/main/java/com/epmet/commons/dynamic/datasource/config/DynamicDataSource.java
  5. 6
      epmet-commons/epmet-commons-extapp-auth/pom.xml
  6. 32
      epmet-commons/epmet-commons-extapp-auth/src/main/java/com/epmet/commons/extappauth/annotation/InternalAppRequestAuth.java
  7. 126
      epmet-commons/epmet-commons-extapp-auth/src/main/java/com/epmet/commons/extappauth/aspect/ExternalAppRequestAuthAspect.java
  8. 41
      epmet-commons/epmet-commons-extapp-auth/src/main/java/com/epmet/commons/extappauth/jwt/JwtTokenProperties.java
  9. 130
      epmet-commons/epmet-commons-extapp-auth/src/main/java/com/epmet/commons/extappauth/jwt/JwtTokenUtils.java
  10. 7
      epmet-commons/epmet-commons-tools/pom.xml
  11. 56
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/config/RedissonConfig.java
  12. 2
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/Constant.java
  13. 6
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/NumConstant.java
  14. 21
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/TimeListResultDTO.java
  15. 2
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/CommonOperateTypeEnum.java
  16. 18
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/EnvEnum.java
  17. 6
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java
  18. 8
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/FeignConfig.java
  19. 10
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
  20. 88
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java
  21. 23
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/HttpClientManager.java
  22. 2
      epmet-gateway/deploy/docker-compose-prod.yml
  23. 9
      epmet-gateway/pom.xml
  24. 26
      epmet-gateway/src/main/java/com/epmet/auth/AuthProcessor.java
  25. 31
      epmet-gateway/src/main/java/com/epmet/auth/ExtAppAuthProcessor.java
  26. 92
      epmet-gateway/src/main/java/com/epmet/auth/ExtAppJwtAuthProcessor.java
  27. 75
      epmet-gateway/src/main/java/com/epmet/auth/ExtAppMD5AuthProcessor.java
  28. 103
      epmet-gateway/src/main/java/com/epmet/auth/ExternalAuthProcessor.java
  29. 198
      epmet-gateway/src/main/java/com/epmet/auth/InternalAuthProcessor.java
  30. 8
      epmet-gateway/src/main/java/com/epmet/constant/AuthTypeConstant.java
  31. 6
      epmet-gateway/src/main/java/com/epmet/constant/TokenHeaderKeyConstant.java
  32. 252
      epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java
  33. 9
      epmet-gateway/src/main/java/com/epmet/filter/CpProperty.java
  34. 35
      epmet-gateway/src/main/java/com/epmet/filter/UserTokenFilter.java
  35. 12
      epmet-gateway/src/main/java/com/epmet/jwt/JwtTokenUtils.java
  36. 15
      epmet-gateway/src/main/resources/bootstrap.yml
  37. 5
      epmet-module/data-report/data-report-client/pom.xml
  38. 2
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/constant/ScreenConstant.java
  39. 42
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AblityIndexFormDTO.java
  40. 47
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AblityListFormDTO.java
  41. 31
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AdvancedBranchRankFormDTO.java
  42. 31
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AnScreenFormDTO.java
  43. 28
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AnScreenRankFormDTO.java
  44. 25
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AnScreenTrendFormDTO.java
  45. 31
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/CompartmentByBizTypeFormDTO.java
  46. 44
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/GridIndexRankFormDTO.java
  47. 36
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/IndexScoreFormDTO.java
  48. 47
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/MonthAblityListFormDTO.java
  49. 42
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/MonthScoreListFormDTO.java
  50. 35
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/PartIndexScroeRankFormDTO.java
  51. 49
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/PeerComparisonFormDTO.java
  52. 24
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/RootAgencyFormDTO.java
  53. 38
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/ScoreListFormDTO.java
  54. 22
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/SubAgencyIndexRankYMFormDTO.java
  55. 37
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/SubSingleIndexRankFormDTO.java
  56. 22
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/TreeByTypeFormDTO.java
  57. 35
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/UserPointRankFormDTO.java
  58. 45
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/AblityIndexResultDTO.java
  59. 39
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/AblityListResultDTO.java
  60. 5
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/AgencyDistributionResultDTO.java
  61. 5
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/AnNingSubAgencyIndexRankResultDTO.java
  62. 28
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/DepartmentNameListResultDTO.java
  63. 42
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/GrassRootsGovernRankResultDTO.java
  64. 38
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/GrassRootsGovernResultDTO.java
  65. 42
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/GrassRootsGovernTrendDTO.java
  66. 44
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/GrassRootsGovernTrendResultDTO.java
  67. 34
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/GrassRootsOrgRankResultDTO.java
  68. 30
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/GrassRootsOrgResultDTO.java
  69. 33
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/GrassRootsOrgTrendDTO.java
  70. 34
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/GrassRootsOrgTrendResultDTO.java
  71. 4
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/GroupTopicShiftIssueRatioRankResultDTO.java
  72. 53
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/IndexAdvanceBranchRankResultDTO.java
  73. 30
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/IndexDictResultDTO.java
  74. 55
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/IndexScoreResultDTO.java
  75. 25
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/MonthAblityListResultDTO.java
  76. 54
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/MonthScoreListResultDTO.java
  77. 45
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/PartIndexScroeRankResultDTO.java
  78. 30
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/PeerComparisonResultDTO.java
  79. 50
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/PmRankResultDTO.java
  80. 34
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/PmTotalResultDTO.java
  81. 35
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/PmTotalTrendDTO.java
  82. 39
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/PmTotalTrendResultDTO.java
  83. 30
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/ProjectProfileResultDTO.java
  84. 12
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/PublicPartiProfileResultDTO.java
  85. 26
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/RootAgencyResultDTO.java
  86. 33
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/ScoreListResultDTO.java
  87. 6
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/UserJoinIndicatorGrowthRateResultDTO.java
  88. 46
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/UserPointRankListResultDTO.java
  89. 2
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/constant/ProjectConstant.java
  90. 61
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectDetailResultDTO.java
  91. 77
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectProcessResultDTO.java
  92. 2
      epmet-module/data-report/data-report-server/deploy/docker-compose-prod.yml
  93. 11
      epmet-module/data-report/data-report-server/pom.xml
  94. 66
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/constant/FactConstant.java
  95. 37
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/backdoor/BackDoorController.java
  96. 106
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/fact/FactIndexController.java
  97. 13
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/project/ProjectController.java
  98. 43
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/screen/AgencyController.java
  99. 175
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/screen/AnScreenController.java
  100. 12
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/screen/DistributionController.java

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

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

2
epmet-auth/pom.xml

@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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.69</version>
<version>0.3.70</version>
<parent>
<groupId>com.epmet</groupId>
<artifactId>epmet-cloud</artifactId>

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_evaluation_index?useUnicode=true&characterEncoding=UTF-8&useSSL=false
url: jdbc:mysql://192.168.1.130:3306/epmet_gov_project?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: epmet_dba
password: EpmEt-dbA-UsEr
#oracle配置

2
epmet-commons/epmet-commons-dynamic-datasource/src/main/java/com/epmet/commons/dynamic/datasource/config/DynamicDataSource.java

@ -25,7 +25,7 @@ public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
String ds = DynamicContextHolder.peek();
logger.info("动态数据源:{}" + ds);
logger.debug("动态数据源:{}", ds);
return ds;
}

6
epmet-commons/epmet-commons-extapp-auth/pom.xml

@ -27,6 +27,12 @@
</properties>
<dependencies>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>

32
epmet-commons/epmet-commons-extapp-auth/src/main/java/com/epmet/commons/extappauth/annotation/InternalAppRequestAuth.java

@ -0,0 +1,32 @@
/**
* Copyright 2018 人人开源 http://www.renren.io
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.epmet.commons.extappauth.annotation;
import java.lang.annotation.*;
/**
* 需要认证的内部请求
* @Author wxz
* @Description
* @Date 2020/4/23 16:17
**/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface InternalAppRequestAuth {
}

126
epmet-commons/epmet-commons-extapp-auth/src/main/java/com/epmet/commons/extappauth/aspect/ExternalAppRequestAuthAspect.java

@ -1,13 +1,24 @@
package com.epmet.commons.extappauth.aspect;
import cn.hutool.core.bean.BeanUtil;
import com.epmet.commons.extappauth.annotation.ExternalAppRequestAuth;
import com.epmet.commons.extappauth.annotation.InternalAppRequestAuth;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.extappauth.bean.ExternalAppRequestParam;
import com.epmet.commons.extappauth.jwt.JwtTokenUtils;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.security.dto.BaseTokenDto;
import com.epmet.commons.tools.security.dto.GovTokenDto;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.ExternalAppAuthFormDTO;
import com.epmet.dto.result.ExternalAppAuthResultDTO;
import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
import io.jsonwebtoken.Claims;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
@ -18,12 +29,14 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Parameter;
import java.util.Map;
/**
* 外部应用请求认证切面
@ -35,6 +48,7 @@ public class ExternalAppRequestAuthAspect {
private static Logger logger = LoggerFactory.getLogger(ExternalAppRequestAuthAspect.class);
public static final String AUTHORIZATION_TOKEN_HEADER_KEY = "Authorization";
public static final String ACCESS_TOKEN_HEADER_KEY = "AccessToken";
public static final String APP_ID_HEADER_KEY = "appId";
public static final String APP_ID_TIMESTAMP_KEY = "ts";
@ -44,15 +58,121 @@ public class ExternalAppRequestAuthAspect {
@Autowired
private EpmetCommonServiceOpenFeignClient commonServiceOpenFeignClient;
@Autowired
private JwtTokenUtils jwtTokenUtils;
@Autowired
private RedisUtils redisUtils;
/**
* 拦截加了ExternalRequestAuth注解的方法
*
* @param point
* @throws Throwable
*/
@Before("@annotation(com.epmet.commons.extappauth.annotation.ExternalAppRequestAuth)")
@Before("@annotation(com.epmet.commons.extappauth.annotation.ExternalAppRequestAuth) " +
"|| @annotation(com.epmet.commons.extappauth.annotation.InternalAppRequestAuth)")
public void auth(JoinPoint point) throws Throwable {
MethodSignature signature = (MethodSignature) point.getSignature();
HttpServletRequest request = getRequest();
if (signature.getMethod().getAnnotation(ExternalAppRequestAuth.class) != null
&& StringUtils.isNotBlank(request.getHeader(ACCESS_TOKEN_HEADER_KEY))) {
// 走外部应用认证
extAppAuth(signature, point, request);
} else if (signature.getMethod().getAnnotation(InternalAppRequestAuth.class) != null
&& StringUtils.isNotBlank(request.getHeader(AUTHORIZATION_TOKEN_HEADER_KEY))) {
// 走内部应用认证
internalAppAuth(signature, point, request);
} else {
logger.error("根据header无法找到适用的认证方式");
throw new RenException(EpmetErrorCode.ERR401.getCode(), EpmetErrorCode.ERR401.getMsg());
}
}
/**
* 内部应用认证
* @param signature
* @param point
* @param request
* @return
*/
private void internalAppAuth(MethodSignature signature, JoinPoint point, HttpServletRequest request) {
String authorization = request.getHeader(AUTHORIZATION_TOKEN_HEADER_KEY);
BaseTokenDto tokenDTO = getTokenDTO(authorization);
Map<String, Object> tokenMap = redisUtils.hGetAll(RedisKeys.getCpUserKey(tokenDTO.getApp(), tokenDTO.getClient(), tokenDTO.getUserId()));
if (CollectionUtils.isEmpty(tokenMap)) {
logger.error("内部应用认证,redis中没有找到登录缓存信息");
throw new RenException(EpmetErrorCode.ERR10006.getCode(), EpmetErrorCode.ERR10006.getMsg());
}
BaseTokenDto baseTokenDto = null;
String customerId;
if ("gov".equals(tokenDTO.getApp())) {
GovTokenDto govTokenDto = BeanUtil.mapToBean(tokenMap, GovTokenDto.class, true);
customerId = govTokenDto.getCustomerId();
baseTokenDto = govTokenDto;
} else {
TokenDto tokenDto = BeanUtil.mapToBean(tokenMap, TokenDto.class, true);
customerId = tokenDto.getCustomerId();
baseTokenDto = tokenDTO;
}
if (baseTokenDto == null) {
logger.error("内部应用认证,redis中没有找到登录缓存信息");
throw new RenException(EpmetErrorCode.ERR10006.getCode(), EpmetErrorCode.ERR10006.getMsg());
}
if (!authorization.equals(baseTokenDto.getToken())) {
logger.error("内部应用认证,redis中找到的token与header里面传入的不一致,可能发生了别处登录");
throw new RenException(EpmetErrorCode.ERR10007.getCode(), EpmetErrorCode.ERR10007.getMsg());
}
// header参数赋值
Parameter[] parameters = signature.getMethod().getParameters();
if (parameters != null && parameters.length != 0) {
for (int i = 0; i < parameters.length; i++) {
if (parameters[i].getType() == ExternalAppRequestParam.class) {
ExternalAppRequestParam requestParam = (ExternalAppRequestParam) point.getArgs()[i];
requestParam.setCustomerId(customerId);
}
}
}
}
private BaseTokenDto getTokenDTO(String authorization) {
if (StringUtils.isBlank(authorization)) {
logger.error("内部应用认证,没有携带authorization头信息");
throw new RenException(EpmetErrorCode.ERR401.getCode(), EpmetErrorCode.ERR401.getMsg());
}
//是否过期
Claims claims = jwtTokenUtils.getClaimByToken(authorization);
if (claims == null) {
logger.error("内部应用认证,Claims为空");
throw new RenException(EpmetErrorCode.ERR401.getCode(), EpmetErrorCode.ERR401.getMsg());
}
if (jwtTokenUtils.isTokenExpired(claims.getExpiration())) {
logger.error("内部应用认证,token过期");
throw new RenException(EpmetErrorCode.ERR10006.getCode(), EpmetErrorCode.ERR10006.getMsg());
}
//获取用户ID
String app = (String) claims.get("app");
String client = (String) claims.get("client");
String userId = (String) claims.get("userId");
return new BaseTokenDto(app, client, userId, authorization);
}
/**
* 外部应用认证
*
* @param signature
* @param point
*/
public void extAppAuth(MethodSignature signature, JoinPoint point, HttpServletRequest request) {
String token = request.getHeader(ACCESS_TOKEN_HEADER_KEY);
String appId = request.getHeader(APP_ID_HEADER_KEY);
String ts = request.getHeader(APP_ID_TIMESTAMP_KEY);
@ -89,14 +209,14 @@ public class ExternalAppRequestAuthAspect {
// header参数赋值
MethodSignature signature = (MethodSignature) point.getSignature();
Parameter[] parameters = signature.getMethod().getParameters();
if (parameters != null && parameters.length != 0) {
for (int i = 0; i < parameters.length; i++) {
if (parameters[i].getType() == ExternalAppRequestParam.class) {
ExternalAppRequestParam requestParam = (ExternalAppRequestParam) point.getArgs()[i];
requestParam.setAppId(appId);
requestParam.setCustomerId(authResult.getCustomerId() == null ? customerId : authResult.getCustomerId());
requestParam.setCustomerId(StringUtils.isBlank(authResult.getCustomerId()) ? customerId : authResult.getCustomerId());
logger.info("auth ExternalAppRequestParam:{}", JSON.toJSONString(requestParam));
}
}
}

41
epmet-commons/epmet-commons-extapp-auth/src/main/java/com/epmet/commons/extappauth/jwt/JwtTokenProperties.java

@ -0,0 +1,41 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* https://www.renren.io
*
* 版权所有侵权必究
*/
package com.epmet.commons.extappauth.jwt;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* Jwt
*
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
@Configuration
@ConfigurationProperties(prefix = "jwt.token")
public class JwtTokenProperties {
private String secret;
private int expire;
public String getSecret() {
return secret;
}
public void setSecret(String secret) {
this.secret = secret;
}
public int getExpire() {
return expire;
}
public void setExpire(int expire) {
this.expire = expire;
}
}

130
epmet-commons/epmet-commons-extapp-auth/src/main/java/com/epmet/commons/extappauth/jwt/JwtTokenUtils.java

@ -0,0 +1,130 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
* <p>
* https://www.renren.io
* <p>
* 版权所有侵权必究
*/
package com.epmet.commons.extappauth.jwt;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* Jwt工具类
*
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
@Component
public class JwtTokenUtils {
private static final Logger logger = LoggerFactory.getLogger(JwtTokenUtils.class);
@Autowired
private JwtTokenProperties jwtProperties;
/**
* 生成jwt token 弃用
*/
@Deprecated
public String generateToken(String userId) {
return Jwts.builder()
.setHeaderParam("typ", "JWT")
.setSubject(userId)
.setIssuedAt(new Date())
.setExpiration(DateTime.now().plusSeconds(jwtProperties.getExpire()).toDate())
.signWith(SignatureAlgorithm.HS512, jwtProperties.getSecret())
.compact();
}
public Claims getClaimByToken(String token) {
try {
return Jwts.parser()
.setSigningKey(jwtProperties.getSecret())
.parseClaimsJws(token)
.getBody();
} catch (Exception e) {
logger.debug("validate is token error, token = " + token, e);
return null;
}
}
/**
* @return java.util.Date
* @param token
* @Author yinzuomei
* @Description 获取token的有效期截止时间
* @Date 2020/3/18 22:17
**/
public Date getExpiration(String token){
try {
return Jwts.parser()
.setSigningKey(jwtProperties.getSecret())
.parseClaimsJws(token)
.getBody().getExpiration();
} catch (Exception e) {
logger.debug("validate is token error, token = " + token, e);
return null;
}
}
/**
* @param map
* @return java.lang.String
* @Author yinzuomei
* @Description 根据app+client+userId生成token
* @Date 2020/3/18 22:29
**/
public String createToken(Map<String, Object> map) {
return Jwts.builder()
.setHeaderParam("typ", "JWT")
.setClaims(map)
.setIssuedAt(new Date())
.setExpiration(DateTime.now().plusSeconds(jwtProperties.getExpire()).toDate())
.signWith(SignatureAlgorithm.HS512, jwtProperties.getSecret())
.compact();
}
/**
* token是否过期
*
* @return true过期
*/
public boolean isTokenExpired(Date expiration) {
return expiration.before(new Date());
}
public static void main(String[] args) {
Map<String, Object> map=new HashMap<>();
map.put("app","gov");
map.put("client","wxmp");
map.put("userId","100526ABC");
String tokenStr=Jwts.builder()
.setHeaderParam("typ", "JWT")
.setClaims(map)
.setIssuedAt(new Date())
.setExpiration(DateTime.now().plusSeconds(604800).toDate())
.signWith(SignatureAlgorithm.HS512, "7016867071f0ebf1c46f123eaaf4b9d6[elink.epmet]")
.compact();
System.out.println(tokenStr);
Claims claims= Jwts.parser()
.setSigningKey("7016867071f0ebf1c46f123eaaf4b9d6[elink.epmet]")
.parseClaimsJws(tokenStr)
.getBody();
System.out.println("app="+ claims.get("app"));
System.out.println("client="+ claims.get("client"));
System.out.println("userId="+ claims.get("userId"));
}
}

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

@ -49,6 +49,13 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.redisson/redisson -->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.12.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>

56
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/config/RedissonConfig.java

@ -0,0 +1,56 @@
package com.epmet.commons.tools.config;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.codec.JsonJacksonCodec;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* redisson 配置类
*/
@Slf4j
@Configuration
public class RedissonConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private String port;
@Value("${spring.redis.password}")
private String password;
@Bean
public RedissonClient getRedisson() {
if (StringUtils.isBlank(host)) {
log.warn("getRedisson redis param is null,don't need to init redissonClient");
return null;
}
try {
Config config = new Config();
config.setCodec(new JsonJacksonCodec());
config.setThreads(NumConstant.FOUR);
config.setNettyThreads(NumConstant.FOUR);
//redis://ip:port
//redis的部署方式有单节点部署、主从方式部署、哨兵方式部署、集群方式部署
config.useSingleServer().setAddress("redis://".concat(host).concat(StrConstant.COLON).concat(port));
config.useSingleServer().setPassword(password);
config.useSingleServer().setConnectTimeout(NumConstant.ONE_THOUSAND * NumConstant.FIVE);
config.useSingleServer().setDatabase(NumConstant.TEN);
return Redisson.create(config);
} catch (Exception e) {
log.error("初始化redisson失败", e);
return null;
}
}
}

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

@ -96,6 +96,8 @@ public interface Constant {
* authorization header
*/
String AUTHORIZATION_HEADER = "authorization";
String ACCESS_TOKEN_HEADER = "AccessToken";
/**
* APP用户标识
*/

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

@ -31,13 +31,19 @@ public interface NumConstant {
int FOURTEEN=14;
int TWENTY = 20;
int THIRTY = 30;
int THIRTY_ONE = 31;
int FORTY = 40;
int FORTY_ONE = 41;
int FIFTY = 50;
int FIFTY_ONE = 51;
int SIXTY = 60;
int ONE_HUNDRED = 100;
BigDecimal ONE_HUNDRED_DECIMAL = new BigDecimal(100);
BigDecimal ZERO_DECIMAL = new BigDecimal(0);
int ONE_THOUSAND = 1000;
int MAX = 99999999;
int EIGHTY_EIGHT = 88;
int EIGHTY = 80;
double ZERO_DOT_ZERO = 0.0;

21
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/TimeListResultDTO.java

@ -0,0 +1,21 @@
package com.epmet.commons.tools.dto.form;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2020/9/15 5:41 下午
*/
@Data
public class TimeListResultDTO implements Serializable {
private static final long serialVersionUID = 1482639109300981626L;
private String dateId;
private String weekId;
private String monthId;
private String quarterId;
private String yearId;
}

2
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/CommonOperateTypeEnum.java

@ -11,6 +11,8 @@ public enum CommonOperateTypeEnum {
ADD("add", "添加"),
EDIT("edit", "编辑"),
DEL("del", "删除"),
DESC("DESC", "降序"),
ASC("ASC", "升序"),
;
private String code;

18
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/EnvEnum.java

@ -11,21 +11,23 @@ import org.springframework.core.env.Environment;
* @date 2020-07-03 11:14
**/
public enum EnvEnum {
LOCAL("local", "本地环境"),
DEV("dev", "开发环境"),
TEST("test", "体验环境"),
PROD("prod", "生产环境"),
UN_KNOWN("un_known", "未知"),
LOCAL("local", "本地环境","http://localhost:8080/api/"),
DEV("dev", "开发环境","http://192.168.1.130:8080/api/"),
TEST("test", "体验环境","https://epmet-dev.elinkservice.cn/api/"),
PROD("prod", "生产环境","https://epmet-cloud.elinkservice.cn/api/"),
UN_KNOWN("un_known", "未知","https://epmet-dev.elinkservice.cn/api/"),
;
private String code;
private String name;
private String url;
EnvEnum(String code, String name) {
EnvEnum(String code, String name, String url) {
this.code = code;
this.name = name;
this.url = url;
}
public static EnvEnum getEnum(String code) {
@ -59,4 +61,8 @@ public enum EnvEnum {
public String getName() {
return name;
}
public String getUrl(){
return url;
}
}

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

@ -107,9 +107,9 @@ public enum EpmetErrorCode {
OPER_EXTERNAL_APP_AUTH_ERROR(8709, "外部应用认证失败"),
OPER_EXTERNAL_CUSTOMER_NOT_EXISTS(8710, "该客户不存在"),
OPER_EXTERNAL_APP_EXISTS(8711, "应用已存在"),
OPER_CUSTOMER_FOOTBAR_EXISTS(8712, "footbar已存在"),
OPER_CUSTOMER_FOOTBAR_NOT_FOUND(8713, "footbar不存在"),
OPER_EXT_APP_SECRET_RESET_FAIL(8713, "秘钥更新失败"),
OPER_CUSTOMER_FOOTBAR_EXISTS(8712, "footbar已存在"),
OPER_CUSTOMER_FOOTBAR_NOT_FOUND(8713, "footbar不存在"),
OPER_EXT_APP_SECRET_RESET_FAIL(8714, "秘钥更新失败"),
// 党建声音 前端提示 88段
DRAFT_CONTENT_IS_NULL(8801, "至少需要添加一个段落"),

8
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/FeignConfig.java

@ -8,8 +8,10 @@
package com.epmet.commons.tools.feign;
import feign.Logger;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
@ -18,6 +20,7 @@ import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
/**
* Feign调用携带header
*
@ -47,4 +50,9 @@ public class FeignConfig implements RequestInterceptor {
}
}
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;//控制台会输出debug日志
}
}

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

@ -313,7 +313,7 @@ public class RedisKeys {
* @return
*/
public static String getIndexCodeWeightKey(String customerId) {
return rootPrefix.concat("stats:indexcal:indexcode:weight").concat(customerId);
return rootPrefix.concat("stats:indexcal:indexcode:weight").concat(StrConstant.COLON).concat(customerId);
}
/**
@ -330,9 +330,17 @@ public class RedisKeys {
/**
* 获取计算标记的key前缀
*
* @return
*/
public static String getCustomerStatsCalKeyPrefix() {
return rootPrefix.concat("stats:calflag");
}
/**
* 插入大屏指标数据分布式锁 key
*/
public static String getScreenIndexDataLockKey() {
return rootPrefix.concat("stats:indexcal:lock");
}
}

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

@ -10,6 +10,7 @@ package com.epmet.commons.tools.utils;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.form.TimeListResultDTO;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
@ -18,7 +19,11 @@ import org.joda.time.format.DateTimeFormatter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DateTimeException;
import java.time.ZoneId;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 日期处理工具类
@ -593,4 +598,87 @@ public class DateUtils {
}
return StrConstant.EPMETY_STR;
}
/**
* @Description 根据dateId获取时间集合
* @param dateId
* @author zxc
* @date 2020/9/22 9:06 上午
*/
public static TimeListResultDTO getTimeList(String dateId){
TimeListResultDTO result = new TimeListResultDTO();
result.setDateId(dateId);
String monthId = dateId.substring(NumConstant.ZERO, NumConstant.SIX);
result.setMonthId(monthId);
result.setQuarterId(getQuarterId(monthId));
result.setYearId(getYearId(monthId));
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
try {
Date date = formatter.parse(dateId);
int weekOfYear = getWeekOfYear(date);
String weekId = dateId.substring(NumConstant.ZERO,NumConstant.FOUR).concat("W").concat(String.valueOf(weekOfYear));
result.setWeekId(weekId);
} catch (ParseException e) {
e.printStackTrace();
}
return result;
}
/**
* @Description 根据monthIdyyyyMM获取上一个月份ID
* @param monthId
* @author zxc
* @date 2020/9/21 2:43 下午
*/
public static String minusMonthId(String monthId){
String minusMonthId = null;
SimpleDateFormat sft = new SimpleDateFormat("yyyyMM");
try {
Date parse = sft.parse(monthId);
java.time.LocalDate birth = parse.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
java.time.LocalDate localDate = birth.minusMonths(NumConstant.ONE);
minusMonthId = localDate.toString().substring(NumConstant.ZERO, NumConstant.FOUR).concat(localDate.toString().substring(NumConstant.FIVE, NumConstant.SEVEN));
} catch (ParseException e) {
e.printStackTrace();
}
return minusMonthId;
}
/**
* @Description 根据传入的时间维度判断格式
* @param dimension
* @return
* @author wangc
* @date 2020.09.24 10:11
**/
public static String identifyTimeDimension(String dimension){
//yyyyMMdd DATE_PATTERN_YYYYMMDD
//yyyyMM DATE_PATTERN_YYYYMM
//yyyy DATE_PATTERN_YYYY
//yyyyWcc
//yyyyQc
if(dimension.length() == NumConstant.EIGHT){
SimpleDateFormat df = new SimpleDateFormat(DATE_PATTERN_YYYYMMDD);
try{ df.parse(dimension); }catch (ParseException e){ return null; }
return "date";
}else if(dimension.length() == NumConstant.FOUR){
SimpleDateFormat df = new SimpleDateFormat(DATE_PATTERN_YYYY);
try{df.parse(dimension);}catch (ParseException e){return null;}
return "year";
}else if(dimension.length() == NumConstant.SEVEN){
if(dimension.contains("W")){
return "week";
}else return null;
}else if(dimension.length() == NumConstant.SIX){
if(dimension.contains("Q")){
return "quarter";
}else{
SimpleDateFormat df = new SimpleDateFormat(DATE_PATTERN_YYYYMM);
try{df.parse(dimension);}catch (ParseException e){return null;}
return "month";
}
}else return null;
}
}

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

@ -159,6 +159,29 @@ public class HttpClientManager {
}
public Result<String> sendPostByJSONAndHeader(String url, String jsonStrParam,Map<String,String> headerMap) {
try {
HttpPost httppost = new HttpPost(url);
httppost.setConfig(requestConfig);
httppost.addHeader("Content-Type", "application/json; charset=utf-8");
if (null != headerMap){
headerMap.forEach((k,v) -> {
httppost.addHeader(k,v);
});
}
if (StringUtils.isNotEmpty(jsonStrParam)) {
StringEntity se = new StringEntity(jsonStrParam, "utf-8");
httppost.setEntity(se);
}
return execute(httppost, false);
} catch (Exception e) {
log.error("send exception", e);
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
}
}
/**
* 上传临时素材
* @author zhaoqifeng

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

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

9
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.35</version>
<version>0.3.39</version>
<parent>
<groupId>com.epmet</groupId>
<artifactId>epmet-cloud</artifactId>
@ -58,6 +58,13 @@
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
<!--用于外部应用认证的查询-->
<dependency>
<groupId>com.epmet</groupId>
<artifactId>common-service-client</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
<build>

26
epmet-gateway/src/main/java/com/epmet/auth/AuthProcessor.java

@ -0,0 +1,26 @@
package com.epmet.auth;
import com.alibaba.fastjson.JSON;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.nio.charset.StandardCharsets;
public abstract class AuthProcessor {
abstract Mono<Void> auth(ServerWebExchange exchange, GatewayFilterChain chain);
protected Mono<Void> response(ServerWebExchange exchange, Object object) {
String json = JSON.toJSONString(object);
DataBuffer buffer = exchange.getResponse().bufferFactory().wrap(json.getBytes(StandardCharsets.UTF_8));
exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON_UTF8);
exchange.getResponse().setStatusCode(HttpStatus.OK);
return exchange.getResponse().writeWith(Flux.just(buffer));
}
}

31
epmet-gateway/src/main/java/com/epmet/auth/ExtAppAuthProcessor.java

@ -0,0 +1,31 @@
package com.epmet.auth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.server.ServerWebExchange;
/**
* 外部应用认证处理器父类
*/
public abstract class ExtAppAuthProcessor {
private Logger logger = LoggerFactory.getLogger(getClass());
private int diffMillins = 1000 * 60 * 5;
public abstract void auth(String appId, String token, Long ts, ServerWebExchange exchange);
/**
* 时间戳校验
* @param timestamp
* @return
*/
protected boolean validTimeStamp(Long timestamp) {
long now = System.currentTimeMillis();
if (Math.abs(now - timestamp) > diffMillins) {
return false;
}
return true;
}
}

92
epmet-gateway/src/main/java/com/epmet/auth/ExtAppJwtAuthProcessor.java

@ -0,0 +1,92 @@
package com.epmet.auth;
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.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.utils.SpringContextUtils;
import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
import com.epmet.jwt.JwtTokenUtils;
import io.jsonwebtoken.Claims;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
/**
* jwt 认证处理器
*/
@Component
public class ExtAppJwtAuthProcessor extends ExtAppAuthProcessor {
private static Logger logger = LoggerFactory.getLogger(ExtAppJwtAuthProcessor.class);
@Autowired
private JwtTokenUtils jwtTokenUtils;
@Autowired
private RedisUtils redisUtils;
@Override
public void auth(String appId, String token, Long ts, ServerWebExchange exchange) {
String secret;
if (StringUtils.isBlank(secret = getTokenFromCache(appId))) {
throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), String.format("根据AppId:【%s】没有找到对应的秘钥", appId));
}
Claims claim;
try {
claim = jwtTokenUtils.getClaimByToken(token, secret);
} catch (Exception e) {
String errorStackTrace = ExceptionUtils.getErrorStackTrace(e);
logger.error("解析token失败:{}", errorStackTrace);
throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), "解析token失败");
}
String appIdIn = (String)claim.get("appId");
String customerId = (String)claim.get("customerId");
Long timestamp = (Long)claim.get("ts");
//校验时间戳,允许5分钟误差
if (StringUtils.isAnyBlank(appIdIn, customerId) || timestamp == null) {
logger.error("access token不完整。{},{},{}", appIdIn, customerId, timestamp);
throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), "AccessToken不完整");
}
if (!validTimeStamp(timestamp)) {
logger.error("extapp token已经超时,请求被拒绝");
throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), "AccessToken已经超时");
}
if (!appId.equals(appIdIn)) {
logger.error("AppId不对应,token外部的:{}, token内部解析出来的:{}", appId, appIdIn);
throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), "AppId不匹配");
}
// 添加客户ID等到请求头
exchange.getRequest().mutate().header("CustomerId", customerId);
}
/**
* 通过APP ID查询对应的秘钥
* @param appId
* @return
*/
public String getTokenFromCache(String appId) {
String secret = (String)redisUtils.get(RedisKeys.getExternalAppSecretKey(appId));
if (StringUtils.isBlank(secret)) {
EpmetCommonServiceOpenFeignClient commonService = SpringContextUtils.getBean(EpmetCommonServiceOpenFeignClient.class);
Result<String> result = commonService.getSecret(appId);
if (!result.success()) {
throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), result.getInternalMsg());
}
secret = result.getData();
redisUtils.set(RedisKeys.getExternalAppSecretKey(appId), secret);
}
return secret;
}
}

75
epmet-gateway/src/main/java/com/epmet/auth/ExtAppMD5AuthProcessor.java

@ -0,0 +1,75 @@
package com.epmet.auth;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.utils.Md5Util;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.utils.SpringContextUtils;
import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
/**
* md5 认证处理器
*/
@Component
public class ExtAppMD5AuthProcessor extends ExtAppAuthProcessor {
private static Logger logger = LoggerFactory.getLogger(ExtAppMD5AuthProcessor.class);
//@Autowired
//private EpmetCommonServiceOpenFeignClient commonServiceOpenFeignClient;
@Autowired
private RedisUtils redisUtils;
@Override
public void auth(String appId, String token, Long ts, ServerWebExchange exchange) {
if (ts == null) {
throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), "需要传入时间戳参数");
}
String secret;
if (StringUtils.isBlank(secret = getTokenFromCache(appId))) {
throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), String.format("根据AppId:%s没有找到对应的秘钥", appId));
}
String localDigest = Md5Util.md5(secret.concat(":") + ts);
if (!localDigest.equals(token)) {
// 调用方生成的摘要跟本地生成的摘要不匹配
throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), "签名不匹配,认证失败");
}
if (!validTimeStamp(ts)) {
logger.error("AccessToken已经超时,请求被拒绝");
throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), "AccessToken已经超时,请求被拒绝");
}
}
/**
* 通过APP ID查询对应的秘钥
*
* @param appId
* @return
*/
public String getTokenFromCache(String appId) {
String secret = (String) redisUtils.get(RedisKeys.getExternalAppSecretKey(appId));
if (StringUtils.isBlank(secret)) {
EpmetCommonServiceOpenFeignClient commonService = SpringContextUtils.getBean(EpmetCommonServiceOpenFeignClient.class);
Result<String> result = commonService.getSecret(appId);
if (!result.success()) {
throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), result.getInternalMsg());
}
secret = result.getData();
redisUtils.set(RedisKeys.getExternalAppSecretKey(appId), secret);
}
return secret;
}
}

103
epmet-gateway/src/main/java/com/epmet/auth/ExternalAuthProcessor.java

@ -0,0 +1,103 @@
package com.epmet.auth;
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.utils.Result;
import com.epmet.filter.CpProperty;
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.http.HttpHeaders;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
/**
* 外部应用认证
*/
@Component
public class ExternalAuthProcessor extends AuthProcessor {
private Logger logger = LoggerFactory.getLogger(getClass());
// 头s
public static final String AUTHORIZATION_TOKEN_HEADER_KEY = "Authorization";
public static final String ACCESS_TOKEN_HEADER_KEY = "AccessToken";
public static final String APP_ID_HEADER_KEY = "appId";
public static final String APP_ID_TIMESTAMP_KEY = "ts";
public static final String APP_ID_CUSTOMER_ID_KEY = "CustomerId";
public static final String APP_ID_AUTY_TYPE_KEY = "AuthType";
// 认证方式
public static final String APP_AUTH_TYPE_JWT = "jwt";
public static final String APP_AUTH_TYPE_MD5 = "md5";
@Autowired
private ExtAppJwtAuthProcessor jwtAuthProcessor;
@Autowired
private ExtAppMD5AuthProcessor md5AuthProcessor;
private final AntPathMatcher antPathMatcher = new AntPathMatcher();
@Autowired
private CpProperty cpProperty;
@Override
public Mono<Void> auth(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
// 只有在外部应用urls中的url才会允许外部应用访问,否则不允许访问
String requestUri = request.getPath().pathWithinApplication().value();
boolean inPaths = false;
for (String url : cpProperty.getExternalOpenUrls()) {
if (antPathMatcher.match(url, requestUri)) {
inPaths = true;
}
}
if (!inPaths) {
throw new RenException(EpmetErrorCode.ERR401.getCode(), "所请求的url并未对外部应用开放");
}
HttpHeaders headers = request.getHeaders();
String token = headers.getFirst(ACCESS_TOKEN_HEADER_KEY);
String appId = headers.getFirst(APP_ID_HEADER_KEY);
String ts = headers.getFirst(APP_ID_TIMESTAMP_KEY);
String customerId = headers.getFirst(APP_ID_CUSTOMER_ID_KEY);
String authType = headers.getFirst(APP_ID_AUTY_TYPE_KEY);
if (StringUtils.isAnyBlank(token, appId)) {
throw new RenException(EpmetErrorCode.ERR401.getCode(), "请求头中的AccessToken和AppId不能为空");
}
logger.info("外部应用请求认证拦截Aspect执行,appId:{}, token:{}, ts:{}, customerId:{}, authType:{}",
appId, token, ts, customerId, authType);
// 没传authType或者传的jwt都用jwtprocessor处理
try {
if (StringUtils.isBlank(authType) || APP_AUTH_TYPE_JWT.equals(authType)) {
jwtAuthProcessor.auth(appId, token, StringUtils.isNotBlank(ts) ? new Long(ts) : null, exchange);
} else if (APP_AUTH_TYPE_MD5.equals(authType)) {
md5AuthProcessor.auth(appId, token, StringUtils.isNotBlank(ts) ? new Long(ts) : null, exchange);
} else {
throw new RenException(EpmetErrorCode.OPER_EXTERNAL_APP_AUTH_ERROR.getCode(), "未知的外部认证类型");
}
} catch (RenException e) {
return response(exchange, new Result<>().error(e.getCode(), e.getMsg()));
} catch (Exception e) {
logger.error("外部应用请求认证发生未知错误:" + ExceptionUtils.getErrorStackTrace(e));
return response(exchange, new Result<>().error("外部应用请求认证发生未知错误"));
}
return chain.filter(exchange);
}
}

198
epmet-gateway/src/main/java/com/epmet/auth/InternalAuthProcessor.java

@ -0,0 +1,198 @@
package com.epmet.auth;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.security.dto.BaseTokenDto;
import com.epmet.commons.tools.security.dto.GovTokenDto;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.CpUserDetailRedis;
import com.epmet.commons.tools.utils.Result;
import com.epmet.filter.CpProperty;
import com.epmet.jwt.JwtTokenUtils;
import io.jsonwebtoken.Claims;
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.http.HttpHeaders;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
/**
* 内部认证处理器
*/
@Component
public class InternalAuthProcessor extends AuthProcessor {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private JwtTokenUtils jwtTokenUtils;
@Autowired
private CpUserDetailRedis cpUserDetailRedis;
private final AntPathMatcher antPathMatcher = new AntPathMatcher();
@Autowired
private CpProperty cpProperty;
@Override
public Mono<Void> auth(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
String requestUri = request.getPath().pathWithinApplication().value();
logger.info("CpAuthGatewayFilterFactory当前requestUri=[" + requestUri + "]CpAuthGatewayFilterFactory拦截成功");
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;
}
String customerId = "";
if (baseTokenDto != null) {
if (AppClientConstant.APP_RESI.equals(baseTokenDto.getApp())) {
// 居民端
TokenDto resiTokenDto = getLoginUserInfoByToken(token, jwtTokenUtils, TokenDto.class);
if (resiTokenDto != null) {
customerId = resiTokenDto.getCustomerId();
baseTokenDto = resiTokenDto;
}
} else if (AppClientConstant.APP_GOV.equals(baseTokenDto.getApp())) {
// 政府端
GovTokenDto govTokenDto = getLoginUserInfoByToken(token, jwtTokenUtils, GovTokenDto.class);
if (govTokenDto != null) {
customerId = govTokenDto.getCustomerId();
baseTokenDto = govTokenDto;
}
} else if(AppClientConstant.APP_OPER.equals(baseTokenDto.getApp())){
//运营端
TokenDto resiTokenDto = getLoginUserInfoByToken(token, jwtTokenUtils, TokenDto.class);
if (resiTokenDto != null) {
customerId = resiTokenDto.getCustomerId();
baseTokenDto = resiTokenDto;
}
}
}
if (needAuth(requestUri)) {
// 校验token
if (StringUtils.isBlank(token)) {
return response(exchange, new Result<>().error(EpmetErrorCode.ERR10005.getCode(), EpmetErrorCode.ERR10005.getMsg()));
}
try {
validateTokenDto(baseTokenDto, token);
} catch (RenException e) {
return response(exchange, new Result<>().error(e.getCode(), e.getMsg()));
}
}
// 添加header
if (baseTokenDto != null) {
String redisKey = baseTokenDto.getApp() + "-" + baseTokenDto.getClient() + "-" + baseTokenDto.getUserId();
logger.info("redisKey=" + redisKey);
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());
if (StringUtils.equals(baseTokenDto.getApp(), "gov")) {//工作端
if(StringUtils.isNotBlank(customerId)){
exchange.getRequest().mutate().header(AppClientConstant.CUSTOMER_ID, customerId);
}
} else if (StringUtils.equals(baseTokenDto.getApp(), "public")) {//公众号端
exchange.getRequest().mutate().header(AppClientConstant.CUSTOMER_ID, customerId);
}
ServerHttpRequest build = exchange.getRequest().mutate().build();
return chain.filter(exchange.mutate().request(build).build());
}
return chain.filter(exchange);
}
/**
* 是否需要认证
* @param requestUri
* @return
*/
private boolean needAuth(String requestUri) {
for (String url : cpProperty.getInternalAuthUrls()) {
if (antPathMatcher.match(url, requestUri)) {
return true;
}
}
return false;
}
/**
* 从请求中获取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);
}
if (StringUtils.isBlank(token)) {
token = request.getQueryParams().getFirst(Constant.AUTHORIZATION_HEADER);
}
return token;
}
private BaseTokenDto getBaseTokenDto(String token, JwtTokenUtils jwtTokenUtils) {
//是否过期
Claims claims = jwtTokenUtils.getClaimByToken(token);
if (claims == null || jwtTokenUtils.isTokenExpired(claims.getExpiration())) {
return null;
}
//获取用户ID
String app = (String) claims.get("app");
String client = (String) claims.get("client");
String userId = (String) claims.get("userId");
return new BaseTokenDto(app, client, userId, token);
}
private <T> T getLoginUserInfoByToken(String token, JwtTokenUtils jwtTokenUtils, Class<T> clz) {
BaseTokenDto baseTokenDto = getBaseTokenDto(token, jwtTokenUtils);
//查询Redis
return cpUserDetailRedis.get(baseTokenDto.getApp(), baseTokenDto.getClient(), baseTokenDto.getUserId(), clz);
}
/**
* 校验Token是否异常
* @param tokenDto
* @param tokenStr
*/
private void validateTokenDto(BaseTokenDto tokenDto, String tokenStr) {
if (null == tokenDto) {
//说明登录状态时效(超时)
throw new RenException(EpmetErrorCode.ERR10006.getCode());
}else{
//Redis中存在数据,取出token,进行比对
if(StringUtils.equals(tokenDto.getToken(),tokenStr)){
//用户携带token与Redis中一致
}else{
//用户携带token与Redis中不一致,说明当前用户此次会话失效,提示重新登陆
throw new RenException(EpmetErrorCode.ERR10007.getCode());
}
}
}
}

8
epmet-gateway/src/main/java/com/epmet/constant/AuthTypeConstant.java

@ -0,0 +1,8 @@
package com.epmet.constant;
public class AuthTypeConstant {
public static final String AUTH_TYPE_INTERNAL = "internal";
public static final String AUTH_TYPE_EXTERNAL = "external";
public static final String AUTH_TYPE_NO_NEED = "no_need";
public static final String AUTH_TYPE_UNKNOW = "unknow";
}

6
epmet-gateway/src/main/java/com/epmet/constant/TokenHeaderKeyConstant.java

@ -0,0 +1,6 @@
package com.epmet.constant;
public class TokenHeaderKeyConstant {
public static final String ACCESS_TOKEN_HEADER_KEY = "AccessToken";
public static final String AUTHORIZATION_TOKEN_HEADER_KEY = "Authorization";
}

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

@ -2,16 +2,15 @@
package com.epmet.filter;
import com.alibaba.fastjson.JSON;
import com.epmet.auth.ExternalAuthProcessor;
import com.epmet.auth.InternalAuthProcessor;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.security.dto.BaseTokenDto;
import com.epmet.commons.tools.security.dto.GovTokenDto;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.CpUserDetailRedis;
import com.epmet.commons.tools.utils.Result;
import com.epmet.jwt.JwtTokenUtils;
import com.epmet.constant.AuthTypeConstant;
import com.epmet.constant.TokenHeaderKeyConstant;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -40,16 +39,15 @@ import java.util.List;
* @since 1.0.0
*/
@Component("CpAuth")
public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CpAuthGatewayFilterFactory.CpAuthConfig> implements UserTokenFilter {
public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CpAuthGatewayFilterFactory.CpAuthConfig> {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private CpProperty cpProperty;
private final AntPathMatcher antPathMatcher = new AntPathMatcher();
@Autowired
private JwtTokenUtils jwtTokenUtils;
@Autowired
private CpUserDetailRedis cpUserDetailRedis;
private InternalAuthProcessor internalAuthProcessor;
@Autowired
private ExternalAuthProcessor externalAuthProcessor;
@Override
public List<String> shortcutFieldOrder() {
@ -67,82 +65,24 @@ public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CpA
return chain.filter(exchange);
}
ServerHttpRequest request = exchange.getRequest();
String requestUri = request.getPath().pathWithinApplication().value();
logger.info("CpAuthGatewayFilterFactory当前requestUri=[" + requestUri + "]CpAuthGatewayFilterFactory拦截成功");
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;
}
//添加流水号
exchange.getRequest().mutate().header(AppClientConstant.TRANSACTION_SERIAL_KEY, new String[]{getTransactionSerial()});
String customerId = "";
ServerHttpRequest request = exchange.getRequest();
if (baseTokenDto != null) {
if (AppClientConstant.APP_RESI.equals(baseTokenDto.getApp())) {
// 居民端
TokenDto resiTokenDto = getLoginUserInfoByToken(token, jwtTokenUtils, cpUserDetailRedis, TokenDto.class);
if (resiTokenDto != null) {
customerId = resiTokenDto.getCustomerId();
baseTokenDto = resiTokenDto;
}
} else if (AppClientConstant.APP_GOV.equals(baseTokenDto.getApp())) {
// 政府端
GovTokenDto govTokenDto = getLoginUserInfoByToken(token, jwtTokenUtils, cpUserDetailRedis, GovTokenDto.class);
if (govTokenDto != null) {
customerId = govTokenDto.getCustomerId();
baseTokenDto = govTokenDto;
}
} else if(AppClientConstant.APP_OPER.equals(baseTokenDto.getApp())){
//运营端
TokenDto resiTokenDto = getLoginUserInfoByToken(token, jwtTokenUtils, cpUserDetailRedis, TokenDto.class);
if (resiTokenDto != null) {
customerId = resiTokenDto.getCustomerId();
baseTokenDto = resiTokenDto;
}
}
}
String authType = getAuthType(request);
//需要认证
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()));
}
}
//添加流水号
exchange.getRequest().mutate().header(AppClientConstant.TRANSACTION_SERIAL_KEY, new String[]{getTransactionSerial()});
if (baseTokenDto != null) {
String redisKey = baseTokenDto.getApp() + "-" + baseTokenDto.getClient() + "-" + baseTokenDto.getUserId();
logger.info("redisKey=" + redisKey);
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())
;
if (StringUtils.equals(baseTokenDto.getApp(), "gov")) {//工作端
if(StringUtils.isNotBlank(customerId)){
exchange.getRequest().mutate().header(AppClientConstant.CUSTOMER_ID, customerId);
}
} else if (StringUtils.equals(baseTokenDto.getApp(), "public")) {//公众号端
exchange.getRequest().mutate().header(AppClientConstant.CUSTOMER_ID, customerId);
try {
switch (authType) {
case AuthTypeConstant.AUTH_TYPE_EXTERNAL:
return externalAuthProcessor.auth(exchange, chain);
case AuthTypeConstant.AUTH_TYPE_INTERNAL:
return internalAuthProcessor.auth(exchange, chain);
}
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.getMessage()));
} catch (Exception e) {
return response(exchange, new Result<>().error(e.getMessage()));
}
return chain.filter(exchange);
@ -150,85 +90,54 @@ public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CpA
}
/**
* 获取事务流水号
* 判断需要执行的认证方式(内部应用认证还是外部应用认证)
* @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)]);
private String getAuthType(ServerHttpRequest request) {
//String requestUri = request.getPath().pathWithinApplication().value();
// 是否在外部认证列表中(外部认证列表中的url,是对外部应用开放的,只有在这个列表中的url才对外部应用开放)
//boolean inExtAuthPaths = false;
//
//for (String url : cpProperty.getExternalAuthUrls()) {
// if (antPathMatcher.match(url, requestUri)) {
// inExtAuthPaths = true;
// }
//}
if (StringUtils.isNotBlank(request.getHeaders().getFirst(TokenHeaderKeyConstant.ACCESS_TOKEN_HEADER_KEY))) {
// url对外部应用开放,并且头里面有AccessToken,那么走外部应用认证
return AuthTypeConstant.AUTH_TYPE_EXTERNAL;
}
sb.append(System.currentTimeMillis());
return sb.toString();
return AuthTypeConstant.AUTH_TYPE_INTERNAL;
}
//public TokenDto getLoginUserInfo(String token) {
// //是否过期
// Claims claims = jwtTokenUtils.getClaimByToken(token);
// if (claims == null || jwtTokenUtils.isTokenExpired(claims.getExpiration())) {
// throw new RenException(ErrorCode.ERR401.getCode(),ErrorCode.ERR401.getMsg());
// }
// //获取用户ID
// String app = (String) claims.get("app");
// String client = (String) claims.get("client");
// String userId = (String) claims.get("userId");
// //查询Redis
// TokenDto tokenDto = cpUserDetailRedis.get(app, client, userId);
// if (null == tokenDto) {
// //说明登录状态时效(超时)
// throw new RenException(ErrorCode.ERR10006.getCode(),ErrorCode.ERR10006.getMsg());
// }else{
// //Redis中存在数据,取出token,进行比对
// if(StringUtils.equals(tokenDto.getToken(),token)){
// //用户携带token与Redis中一致
//
// }else{
// //用户携带token与Redis中不一致,说明当前用户此次会话失效,提示重新登陆
// throw new RenException(ErrorCode.ERR10007.getCode(),ErrorCode.ERR10007.getMsg());
// }
//
// }
//
// return tokenDto;
//}
private Mono<Void> response(ServerWebExchange exchange, Object object) {
String json = JSON.toJSONString(object);
DataBuffer buffer = exchange.getResponse().bufferFactory().wrap(json.getBytes(StandardCharsets.UTF_8));
exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON_UTF8);
exchange.getResponse().setStatusCode(HttpStatus.OK);
return exchange.getResponse().writeWith(Flux.just(buffer));
/**
* 获取请求头
* @param request
* @return
*/
private String getHeader(ServerHttpRequest request, String headerName) {
HttpHeaders headers = request.getHeaders();
return headers.getFirst(headerName);
}
/**
* 是否需要认证
* @param requestUri
* 获取事务流水号
* @return
*/
private boolean needAuth(String requestUri) {
// 优先判断白名单,在白名单中的就直接放行
for (String url : cpProperty.getUrlWhiteList()) {
if (antPathMatcher.match(url, requestUri)) {
return false;
}
}
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"};
for (String url : cpProperty.getSwaggerUrls()) {
if (antPathMatcher.match(url, requestUri)) {
return false;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 2; i++) {
sb.append(letterPool[(int) (Math.random() * 25)]);
}
for (String url : cpProperty.getUrls()) {
if (antPathMatcher.match(url, requestUri)) {
return true;
}
}
return false;
sb.append(System.currentTimeMillis());
return sb.toString();
}
public static class CpAuthConfig {
@ -250,45 +159,12 @@ public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CpA
}
}
/**
* 校验Token是否异常
* @param tokenDto
* @param tokenStr
*/
public void validateTokenDto(BaseTokenDto tokenDto, String tokenStr) {
if (null == tokenDto) {
//说明登录状态时效(超时)
throw new RenException(EpmetErrorCode.ERR10006.getCode());
}else{
//Redis中存在数据,取出token,进行比对
if(StringUtils.equals(tokenDto.getToken(),tokenStr)){
//用户携带token与Redis中一致
}else{
//用户携带token与Redis中不一致,说明当前用户此次会话失效,提示重新登陆
throw new RenException(EpmetErrorCode.ERR10007.getCode());
}
}
protected Mono<Void> response(ServerWebExchange exchange, Object object) {
String json = JSON.toJSONString(object);
DataBuffer buffer = exchange.getResponse().bufferFactory().wrap(json.getBytes(StandardCharsets.UTF_8));
exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON_UTF8);
exchange.getResponse().setStatusCode(HttpStatus.OK);
return exchange.getResponse().writeWith(Flux.just(buffer));
}
/**
* 从请求中获取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;
}
}

9
epmet-gateway/src/main/java/com/epmet/filter/CpProperty.java

@ -17,12 +17,15 @@ import java.util.List;
@ConfigurationProperties(prefix = "epmet")
public class CpProperty {
private List<String> urls;
/**
* 需要内部认证的url
*/
private List<String> internalAuthUrls;
/**
* 白名单
* 对外部应用开放的url列表
*/
private List<String> urlWhiteList;
private List<String> externalOpenUrls;
/**
* 不处理token直接通过

35
epmet-gateway/src/main/java/com/epmet/filter/UserTokenFilter.java

@ -1,35 +0,0 @@
package com.epmet.filter;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.security.dto.BaseTokenDto;
import com.epmet.commons.tools.utils.CpUserDetailRedis;
import com.epmet.jwt.JwtTokenUtils;
import io.jsonwebtoken.Claims;
/**
* 用户token的过滤器接口提供通用的默认方法
*/
public interface UserTokenFilter {
default BaseTokenDto getBaseTokenDto(String token, JwtTokenUtils jwtTokenUtils) {
//是否过期
Claims claims = jwtTokenUtils.getClaimByToken(token);
if (claims == null || jwtTokenUtils.isTokenExpired(claims.getExpiration())) {
// throw new RenException(EpmetErrorCode.ERR401.getCode());
return null;
}
//获取用户ID
String app = (String) claims.get("app");
String client = (String) claims.get("client");
String userId = (String) claims.get("userId");
return new BaseTokenDto(app, client, userId, token);
}
default <T> T getLoginUserInfoByToken(String token, JwtTokenUtils jwtTokenUtils, CpUserDetailRedis cpUserDetailRedis, Class<T> clz) {
BaseTokenDto baseTokenDto = getBaseTokenDto(token, jwtTokenUtils);
//查询Redis
return cpUserDetailRedis.get(baseTokenDto.getApp(), baseTokenDto.getClient(), baseTokenDto.getUserId(), clz);
}
}

12
epmet-gateway/src/main/java/com/epmet/jwt/JwtTokenUtils.java

@ -62,6 +62,18 @@ public class JwtTokenUtils {
}
}
public Claims getClaimByToken(String token, String secret) {
try {
return Jwts.parser()
.setSigningKey(secret)
.parseClaimsJws(token)
.getBody();
} catch (Exception e) {
logger.debug("validate is token error, token = " + token, e);
return null;
}
}
/**
* @return java.util.Date
* @param token

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

@ -61,6 +61,7 @@ spring:
- Path=${server.servlet.context-path}/message/**
filters:
- StripPrefix=1
- CpAuth=true
#工作流服务
- id: epmet-activiti-server
uri: @gateway.routes.epmet-activiti-server.uri@
@ -415,8 +416,8 @@ ribbon:
ConnectTimeout: 300000
epmet:
# 党群e事通(校验是否登录)
urls:
# 内部认证,需要Authorization请求头
internalAuthUrls:
- /oper/customize/**
- /oper/crm/**
- /epmetuser/**
@ -438,11 +439,11 @@ epmet:
- /resi/home/**
- /data/report/**
# url认证白名单,先判断白名单,在白名单中的url直接放行,不再判断上述需要认证的名单
urlWhiteList:
- /data/report/test/test
- /data/report/screen/**
- /data/report/kcscreen/**
# 外部应用认证,使用AccessToken等头进行认证
externalOpenUrls:
- /data/report/**
- /data/stats/**
- /epmet/ext/**
- /epmetuser/customerstaff/customerlist
swaggerUrls:

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

@ -17,6 +17,11 @@
<artifactId>epmet-commons-tools</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>gov-project-client</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>

2
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/constant/ScreenConstant.java

@ -16,6 +16,8 @@ public interface ScreenConstant {
String COMMA = ",";
String COLON = ":";
String MONTH_ID = "month";
String YEAR_ID = "year";

42
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AblityIndexFormDTO.java

@ -0,0 +1,42 @@
package com.epmet.evaluationindex.screen.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 能力指数--接口入参
* @Author sun
*/
@Data
public class AblityIndexFormDTO implements Serializable {
private static final long serialVersionUID = -2880432640584616651L;
public interface AddUserInternalGroup {}
/**
* 组织或网格Id
*/
@NotBlank(message = "组织或网格ID不能为空",groups = {AblityIndexFormDTO.AddUserInternalGroup.class})
private String orgId;
/**
* 组织Id
*/
@NotBlank(message = "客户ID不能为空",groups = {AblityIndexFormDTO.AddUserInternalGroup.class})
private String customerId;
/**
* 组织或网格类型
*/
@NotBlank(message = "组织或网格类型不能为空",groups = {AblityIndexFormDTO.AddUserInternalGroup.class})
private String orgType;
/**
* 查询月份的前12个月对应的monthId
*/
private String startMonthId;
/**
* 月份Id格式202009
*/
@NotBlank(message = "月份ID不能为空",groups = {AblityIndexFormDTO.AddUserInternalGroup.class})
private String monthId;
}

47
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AblityListFormDTO.java

@ -0,0 +1,47 @@
package com.epmet.evaluationindex.screen.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 按月查询各项指标数据--接口入参
* @Author sun
*/
@Data
public class AblityListFormDTO implements Serializable {
private static final long serialVersionUID = -2880432640584616651L;
/**
* 客户Id
*/
@NotBlank(message = "客户ID不能为空",groups = {AblityListFormDTO.AddUserInternalGroup.class})
private String customerId;
/**
* 组织或网格Id
*/
@NotBlank(message = "组织或网格ID不能为空",groups = {AblityListFormDTO.AddUserInternalGroup.class})
private String orgId;
/**
* 组织或网格类型
*/
@NotBlank(message = "组织或网格类型不能为空",groups = {AblityListFormDTO.AddUserInternalGroup.class})
private String orgType;
public interface AddUserInternalGroup {}
/**
* 月份Id格式202009
*/
@NotBlank(message = "月份ID不能为空",groups = {AblityListFormDTO.AddUserInternalGroup.class})
private String monthId;
/**
* 类型党建能力dangjiannengli治理能力zhilinengli服务能力fuwunengli
*/
@NotBlank(message = "类型不能为空",groups = {AblityListFormDTO.AddUserInternalGroup.class})
private String indexCode;
/**
* 所有有权重的指标code拼接的字符串 冒号隔开
*/
private String allParentIndexCode;
}

31
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AdvancedBranchRankFormDTO.java

@ -0,0 +1,31 @@
package com.epmet.evaluationindex.screen.dto.form;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 先进排行-先进支部排行--接口入参
* @Author sun
*/
@Data
public class AdvancedBranchRankFormDTO implements Serializable {
private static final long serialVersionUID = -8674763412362557239L;
/**
* 机关Id
* */
@NotBlank(message = "机关Id不能为空" , groups = AdvancedBranchRankFormDTO.AddUserInternalGroup.class)
private String agencyId;
/**
* 显示多少条
* */
@Min(value = 1, message = "查询条数必须大于0", groups = {AdvancedBranchRankFormDTO.AddUserInternalGroup.class })
private Integer topNum;
/**
* 月份Id
* */
private String monthId;
public interface AddUserInternalGroup {}
}

31
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AnScreenFormDTO.java

@ -0,0 +1,31 @@
package com.epmet.evaluationindex.screen.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/10/9 9:47
*/
@Data
public class AnScreenFormDTO implements Serializable {
private static final long serialVersionUID = 5402826635847080766L;
public interface AnScreenGroup extends CustomerClientShowGroup {}
/**
* 组织ID
*/
@NotBlank(message = "机关Id不能为空", groups = AnScreenGroup.class)
private String agencyId;
/**
* 月份ID
*/
@NotBlank(message = "月份Id不能为空", groups = AnScreenGroup.class)
private String monthId;
}

28
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AnScreenRankFormDTO.java

@ -0,0 +1,28 @@
package com.epmet.evaluationindex.screen.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/10/9 9:47
*/
@Data
public class AnScreenRankFormDTO implements Serializable {
private static final long serialVersionUID = -766779327034367216L;
public interface AnScreenRankGroup extends CustomerClientShowGroup {}
/**
* 组织ID
*/
@NotBlank(message = "机关Id不能为空", groups = AnScreenRankFormDTO.AnScreenRankGroup.class)
private String agencyId;
@NotNull(message = "top值不能为空", groups = AnScreenRankFormDTO.AnScreenRankGroup.class)
private Integer topNum;
}

25
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AnScreenTrendFormDTO.java

@ -0,0 +1,25 @@
package com.epmet.evaluationindex.screen.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/10/9 9:48
*/
@Data
public class AnScreenTrendFormDTO implements Serializable {
private static final long serialVersionUID = -766779327034367216L;
public interface AnScreenTrendGroup extends CustomerClientShowGroup {}
/**
* 组织ID
*/
@NotBlank(message = "机关Id不能为空", groups = AnScreenTrendFormDTO.AnScreenTrendGroup.class)
private String agencyId;
}

31
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/CompartmentByBizTypeFormDTO.java

@ -0,0 +1,31 @@
package com.epmet.evaluationindex.screen.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2020/10/22
*/
@Data
public class CompartmentByBizTypeFormDTO implements Serializable {
private static final long serialVersionUID = -3354778434424878413L;
public interface CompartmentByBizType extends CustomerClientShowGroup {}
/**
* 机关ID
*/
@NotBlank(message = "机关ID不能为空",groups = {CompartmentByBizType.class})
private String agencyId;
/**
* 业务类型
*/
@NotBlank(message = "bizType不能为空", groups = {CompartmentByBizType.class})
private String bizType;
}

44
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/GridIndexRankFormDTO.java

@ -0,0 +1,44 @@
package com.epmet.evaluationindex.screen.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2020/8/20 9:54 上午
*/
@Data
public class GridIndexRankFormDTO implements Serializable {
private static final long serialVersionUID = 7865119038417362515L;
/**
* 机关ID
*/
private String agencyId;
/**
* 默认查询前几名
*/
@NotNull(message = "默认查询名次不能为空")
private Integer topNum;
/**
* 客户I
*/
@NotBlank(message = "客户Id不能为空")
private String customerId;
/**
* 年Id
*/
private String yearId;
/**
* 组织类别 agency组织部门department网格grid
*/
private String orgType;
}

36
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/IndexScoreFormDTO.java

@ -0,0 +1,36 @@
package com.epmet.evaluationindex.screen.dto.form;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 组织月度指数得分--接口入参
* @Author sun
*/
@Data
public class IndexScoreFormDTO implements Serializable {
private static final long serialVersionUID = -2880432640584616651L;
/**
* 组织或网格Id
*/
@NotBlank(message = "组织或网格ID不能为空",groups = {IndexScoreFormDTO.AddUserInternalGroup.class})
private String orgId;
/**
* 类型组织agency 网格grid
* 大屏接口此字段值为空
*/
//@NotBlank(message = "数据类型不能为空",groups = {IndexScoreFormDTO.AddUserInternalGroup.class})
private String orgType;
/**
* 月份Id eg202009
* 大屏接口此字段值为空
*/
//@NotBlank(message = "月份Id不能为空",groups = {IndexScoreFormDTO.AddUserInternalGroup.class})
private String monthId;
public interface AddUserInternalGroup {}
}

47
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/MonthAblityListFormDTO.java

@ -0,0 +1,47 @@
package com.epmet.evaluationindex.screen.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 按月查询各项指标最近12个月数据--接口入参
* @Author sun
*/
@Data
public class MonthAblityListFormDTO implements Serializable {
private static final long serialVersionUID = -2880432640584616651L;
/**
* 客户Id
*/
@NotBlank(message = "客户ID不能为空",groups = {MonthAblityListFormDTO.AddUserInternalGroup.class})
private String customerId;
/**
* 组织或网格Id
*/
@NotBlank(message = "组织或网格ID不能为空",groups = {MonthAblityListFormDTO.AddUserInternalGroup.class})
private String orgId;
/**
* 组织或网格类型
*/
@NotBlank(message = "组织或网格类型不能为空",groups = {MonthAblityListFormDTO.AddUserInternalGroup.class})
private String orgType;
public interface AddUserInternalGroup {}
/**
* 月份Id格式202009
*/
@NotBlank(message = "月份ID不能为空",groups = {MonthAblityListFormDTO.AddUserInternalGroup.class})
private String monthId;
/**
* 月份Id格式202009
*/
@NotBlank(message = "类型key不能为空",groups = {MonthAblityListFormDTO.AddUserInternalGroup.class})
private String key;
/**
* 查询月份的前12个月对应的monthId
*/
private String startMonthId;
}

42
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/MonthScoreListFormDTO.java

@ -0,0 +1,42 @@
package com.epmet.evaluationindex.screen.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 能力指数--接口入参
* @Author sun
*/
@Data
public class MonthScoreListFormDTO implements Serializable {
private static final long serialVersionUID = -2880432640584616651L;
public interface AddUserInternalGroup {}
/**
* 组织或网格Id
*/
@NotBlank(message = "组织或网格ID不能为空",groups = {MonthScoreListFormDTO.AddUserInternalGroup.class})
private String orgId;
/**
* 组织Id
*/
@NotBlank(message = "客户ID不能为空",groups = {MonthScoreListFormDTO.AddUserInternalGroup.class})
private String customerId;
/**
* 组织或网格类型
*/
@NotBlank(message = "组织或网格类型不能为空",groups = {MonthScoreListFormDTO.AddUserInternalGroup.class})
private String orgType;
/**
* 月份Id格式202009
*/
@NotBlank(message = "月份ID不能为空",groups = {MonthScoreListFormDTO.AddUserInternalGroup.class})
private String monthId;
/**
* 查询月份的前12个月对应的monthId
*/
private String startMonthId;
}

35
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/PartIndexScroeRankFormDTO.java

@ -0,0 +1,35 @@
package com.epmet.evaluationindex.screen.dto.form;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 党员指标得分排行--接口入参
* @Author sun
*/
@Data
public class PartIndexScroeRankFormDTO implements Serializable {
private static final long serialVersionUID = -2880432640584616651L;
/**
* 组织或网格Id
*/
@NotBlank(message = "组织或网格ID不能为空",groups = {PartIndexScroeRankFormDTO.AddUserInternalGroup.class})
private String orgId;
/**
* 类型组织agency 网格grid
*/
@NotBlank(message = "数据类型不能为空",groups = {PartIndexScroeRankFormDTO.AddUserInternalGroup.class})
private String orgType;
/**
* 默认显示前5名
*/
@Min(value = 1, message = "查询条数必须大于0", groups = {PartIndexScroeRankFormDTO.AddUserInternalGroup.class })
private Integer topNum;
public interface AddUserInternalGroup {}
}

49
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/PeerComparisonFormDTO.java

@ -0,0 +1,49 @@
package com.epmet.evaluationindex.screen.dto.form;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 同级对比各项数据查询--接口入参
* @Author sun
*/
@Data
public class PeerComparisonFormDTO implements Serializable {
private static final long serialVersionUID = -2880432640584616651L;
/**
* 客户Id
*/
@NotBlank(message = "客户ID不能为空",groups = {PeerComparisonFormDTO.AddUserInternalGroup.class})
private String customerId;
/**
* 月份Id格式202009
*/
//@NotBlank(message = "月份ID不能为空",groups = {PeerComparisonFormDTO.AddUserInternalGroup.class})
private String monthId;
/**
* 组织或网格Id
*/
@NotBlank(message = "组织或网格ID不能为空",groups = {PeerComparisonFormDTO.AddUserInternalGroup.class})
private String orgId;
/**
* 组织或网格类型
*/
@NotBlank(message = "组织或网格类型不能为空",groups = {PeerComparisonFormDTO.AddUserInternalGroup.class})
private String orgType;
public interface AddUserInternalGroup {}
/**
* 类型党建能力dangjiannengli治理能力zhilinengli服务能力fuwunengli
*/
@NotBlank(message = "数据类型不能为空",groups = {PeerComparisonFormDTO.AddUserInternalGroup.class})
private String indexCode;
/**
* 查询条数
*/
@Min(value = 1, message = "查询条数必须大于0", groups = {PeerComparisonFormDTO.AddUserInternalGroup.class })
private Integer pageSize;
}

24
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/RootAgencyFormDTO.java

@ -0,0 +1,24 @@
package com.epmet.evaluationindex.screen.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 是否根组织--接口入参
* @Author sun
*/
@Data
public class RootAgencyFormDTO implements Serializable {
private static final long serialVersionUID = -2880432640584616651L;
public interface AddUserInternalGroup {}
/**
* 组织Id
*/
@NotBlank(message = "组织ID不能为空",groups = {RootAgencyFormDTO.AddUserInternalGroup.class})
private String agencyId;
}

38
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/ScoreListFormDTO.java

@ -0,0 +1,38 @@
package com.epmet.evaluationindex.screen.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 按月份查询各项能力分数--接口入参
* @Author sun
*/
@Data
public class ScoreListFormDTO implements Serializable {
private static final long serialVersionUID = -2880432640584616651L;
public interface AddUserInternalGroup {}
/**
* 组织或网格Id
*/
@NotBlank(message = "组织或网格ID不能为空",groups = {ScoreListFormDTO.AddUserInternalGroup.class})
private String orgId;
/**
* 组织Id
*/
@NotBlank(message = "客户ID不能为空",groups = {ScoreListFormDTO.AddUserInternalGroup.class})
private String customerId;
/**
* 组织或网格类型
*/
@NotBlank(message = "组织或网格类型不能为空",groups = {ScoreListFormDTO.AddUserInternalGroup.class})
private String orgType;
/**
* 月份Id格式202009
*/
@NotBlank(message = "月份ID不能为空",groups = {ScoreListFormDTO.AddUserInternalGroup.class})
private String monthId;
}

22
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AnNingSubAgencyIndexRankFormDTO.java → epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/SubAgencyIndexRankYMFormDTO.java

@ -8,20 +8,22 @@ import java.io.Serializable;
/**
* 5下级部门指数排行安宁数据段用 入参
*
* @Author zhangyong
* @DateTime 2020/09/08 9:54
*/
@Data
public class AnNingSubAgencyIndexRankFormDTO implements Serializable {
public class SubAgencyIndexRankYMFormDTO implements Serializable {
private static final long serialVersionUID = -2920561669035794486L;
public interface SubAgencyIndexRank{}
public interface SubAgencyIndexRank {
}
/**
* 机关ID
*/
@NotBlank(message = "组织id不能为空",groups = {SubAgencyIndexRank.class})
@NotBlank(message = "组织id不能为空", groups = {SubAgencyIndexRank.class})
private String agencyId;
/**
@ -33,12 +35,22 @@ public class AnNingSubAgencyIndexRankFormDTO implements Serializable {
/**
* asc 正序 desc 降序
*/
@NotNull(message = "排序方式不能为空",groups = {SubAgencyIndexRank.class})
@NotNull(message = "排序方式不能为空", groups = {SubAgencyIndexRank.class})
private String sort;
/**
* 年度year 月度month
*/
@NotNull(message = "年度、月度不能为空",groups = {SubAgencyIndexRank.class})
@NotNull(message = "年度、月度不能为空", groups = {SubAgencyIndexRank.class})
private String type;
/**
* 月份Id
*/
private String monthId;
/**
* 组织类型 组织agency 网格grid
*/
private String orgType;
}

37
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/SubSingleIndexRankFormDTO.java

@ -0,0 +1,37 @@
package com.epmet.evaluationindex.screen.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* desc:下级组织单项排行分数 form
*
* @DateTime 2020/8/20 9:54 上午
*/
@Data
public class SubSingleIndexRankFormDTO implements Serializable {
private static final long serialVersionUID = -2920561669035794486L;
@NotBlank(message = "客户ID不能为空")
private String customerId;
/**
* 机关ID
*/
@NotBlank(message = "机关ID不能为空")
private String agencyId;
@NotBlank(message = "指标code不能为空")
private String indexCode;
/**
* 默认查询前几名
*/
private Integer topNum;
private String monthId;
private String orgType;
private String sort;
}

22
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/TreeByTypeFormDTO.java

@ -0,0 +1,22 @@
package com.epmet.evaluationindex.screen.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2020/10/22 10:52 上午
*/
@Data
public class TreeByTypeFormDTO implements Serializable {
private static final long serialVersionUID = -1438758394814978472L;
public interface TreeByType extends CustomerClientShowGroup{}
@NotBlank(message = "bizType不能为空",groups = TreeByType.class)
private String bizType;
}

35
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/UserPointRankFormDTO.java

@ -0,0 +1,35 @@
package com.epmet.evaluationindex.screen.dto.form;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 热心市民积分排行列表--接口入参
* @Author sun
*/
@Data
public class UserPointRankFormDTO implements Serializable {
private static final long serialVersionUID = -2880432640584616651L;
/**
* 组织或网格Id
*/
@NotBlank(message = "组织或网格ID不能为空",groups = {UserPointRankFormDTO.AddUserInternalGroup.class})
private String orgId;
/**
* 类型组织agency 网格grid
*/
@NotBlank(message = "数据类型不能为空",groups = {UserPointRankFormDTO.AddUserInternalGroup.class})
private String orgType;
/**
* 默认显示前5名
*/
@Min(value = 1, message = "查询条数必须大于0", groups = {UserPointRankFormDTO.AddUserInternalGroup.class })
private Integer topNum;
public interface AddUserInternalGroup {}
}

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

@ -0,0 +1,45 @@
package com.epmet.evaluationindex.screen.dto.result;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 能力指数--接口返参
* @Author sun
*/
@Data
public class AblityIndexResultDTO implements Serializable {
private static final long serialVersionUID = 3860268744336541373L;
/**
* 党建能力dangjiannengli治理能力zhilinengli服务能力fuwunengli
*/
private String indexCode;
/**
* 每项能力最近12月各项分数对象
*/
private List<AblityIndexResultDTO.ScoreListResultDTO> scoreList;
@Data
public static class ScoreListResultDTO implements Serializable {
/**
* 能力总分
*/
private Double indexTotal;
/**
* 横坐标202009
*/
private String monthId;
/**
* 能力类型 党建能力dangjiannengli治理能力zhilinengli服务能力fuwunengli
*/
@JsonIgnore
private String indexCode;
}
}

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

@ -0,0 +1,39 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 按月查询各项指标数据--接口返参
* @Author sun
*/
@Data
public class AblityListResultDTO implements Serializable {
private static final long serialVersionUID = 3860268744336541373L;
/**
* 各项指标名称
*/
private String name;
/**
* 指标对应值数值或百分比
*/
private String value = "0";
/**
* 各项指标对应key值(index_dict字典表)
*/
private String key;
/**
* 指标值类型 none整数integer小数: decimal;百分比percent
*/
private String showType;
/**
* 指标对应的权重
*/
private BigDecimal weight;
}

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

@ -37,4 +37,9 @@ public class AgencyDistributionResultDTO implements Serializable {
* 组织agency; 网格grid ; 部门dept
*/
private String type;
public AgencyDistributionResultDTO() {
this.subAreaMarks = "";
this.subCenterMark = "";
}
}

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

@ -42,4 +42,9 @@ public class AnNingSubAgencyIndexRankResultDTO implements Serializable {
* 组织id或者网格id
*/
private String orgId = "";
/**
* 组织类型
*/
private String orgType = "";
}

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

@ -0,0 +1,28 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @Author zxc
* @DateTime 2020/10/26 3:36 下午
*/
@Data
@AllArgsConstructor
public class DepartmentNameListResultDTO implements Serializable {
private static final long serialVersionUID = -801407836277197080L;
/**
* 部门名
*/
private String departmentName;
/**
* 工作人员
*/
private List<String> staffList;
}

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

@ -0,0 +1,42 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription 09基层治理-治理排行
* @date 2020/10/9 10:54
*/
@NoArgsConstructor
@Data
public class GrassRootsGovernRankResultDTO implements Serializable {
private static final long serialVersionUID = 5175488557393182160L;
/**
* 参与项目数
*/
private Integer partiProjectTotal;
/**
* 办结项目数
*/
private Integer closedProjectTotal;
/**
* 响应度
*/
private String projectResponseRatio;
/**
* 满意度
*/
private String projectSatisRatio;
/**
* 办结率 当前界面在社区时才显示
*/
private String closedProjectRatio;
/**
* 组织名称
*/
private String orgName;
}

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

@ -0,0 +1,38 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription 07基层治理-总数
* @date 2020/10/9 10:36
*/
@NoArgsConstructor
@Data
public class GrassRootsGovernResultDTO implements Serializable {
private static final long serialVersionUID = 3455494963816549169L;
/**
* 参与项目数
*/
private Integer partiProjectTotal;
/**
* 办结项目数
*/
private Integer closedProjectTotal;
/**
* 项目响应度
*/
private String projectResponseRatio;
/**
* 项目满意率
*/
private String projectSatisRatio;
/**
* 办结率当前界面是社区时显示
*/
private String closedProjectRatio;
}

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

@ -0,0 +1,42 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/10/9 15:08
*/
@NoArgsConstructor
@Data
public class GrassRootsGovernTrendDTO implements Serializable {
private static final long serialVersionUID = 4977117178308139861L;
/**
* 月份
*/
private String monthId;
/**
* 参与项目数
*/
private Integer partiProjectTotal;
/**
* 办结项目数
*/
private Integer closedProjectTotal;
/**
* 项目响应度
*/
private BigDecimal projectResponseRatio;
/**
* 项目满意率
*/
private BigDecimal projectSatisRatio;
/**
* 办结率当前界面是社区时显示
*/
private BigDecimal closedProjectRatio;
}

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

@ -0,0 +1,44 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
* @author zhaoqifeng
* @dscription 08基层治理-指标月度趋势
* @date 2020/10/9 10:48
*/
@NoArgsConstructor
@Data
public class GrassRootsGovernTrendResultDTO implements Serializable {
private static final long serialVersionUID = 5640652259031475809L;
/**
* 横坐标集合
*/
private List<String> xAxis;
/**
* 参与项目数
*/
private List<Integer> partiProjectTotalList;
/**
* 办结项目数
*/
private List<Integer> closedProjectTotalList;
/**
* 项目响应度
*/
private List<BigDecimal> projectResponseRatioList;
/**
* 项目满意率
*/
private List<BigDecimal> projectSatisRatioList;
/**
* 办结率当前界面是社区时显示
*/
private List<BigDecimal> closedProjectRatioList;
}

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

@ -0,0 +1,34 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription 06基层组织-组织排行榜单
* @date 2020/10/9 10:32
*/
@NoArgsConstructor
@Data
public class GrassRootsOrgRankResultDTO implements Serializable {
private static final long serialVersionUID = 3573854743057339033L;
/**
* 党群数
*/
private Integer groupTotal;
/**
* 议题数
*/
private Integer issueTotal;
/**
* 项目数
*/
private Integer projectTotal;
/**
* 组织名称
*/
private String orgName;
}

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

@ -0,0 +1,30 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription 04基层组织-党群数议题数项目数
* @date 2020/10/9 10:22
*/
@NoArgsConstructor
@Data
public class GrassRootsOrgResultDTO implements Serializable {
private static final long serialVersionUID = 6623022965863266247L;
/**
* 党群数
*/
private Integer groupTotal;
/**
* 议题数
*/
private Integer issueTotal;
/**
* 项目数
*/
private Integer projectTotal;
}

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

@ -0,0 +1,33 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/10/9 15:10
*/
@NoArgsConstructor
@Data
public class GrassRootsOrgTrendDTO implements Serializable {
private static final long serialVersionUID = 6172847581584903056L;
/**
* 月份
*/
private String monthId;
/**
* 党群数
*/
private Integer groupTotal;
/**
* 议题数
*/
private Integer issueTotal;
/**
* 项目数
*/
private Integer projectTotal;
}

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

@ -0,0 +1,34 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* @author zhaoqifeng
* @dscription 05基层组织-指标月度趋势
* @date 2020/10/9 10:25
*/
@NoArgsConstructor
@Data
public class GrassRootsOrgTrendResultDTO implements Serializable {
private static final long serialVersionUID = -6911028881641915610L;
/**
* 横坐标集合
*/
private List<String> xAxis;
/**
* 党群数
*/
private List<Integer> groupTotalList;
/**
* 议题数
*/
private List<Integer> issueTotalList;
/**
* 项目数
*/
private List<Integer> projectTotal;
}

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

@ -22,9 +22,9 @@ public class GroupTopicShiftIssueRatioRankResultDTO implements Serializable {
*/
private String groupName = "";
/**
* 话题数
* 转为议题的话题数
*/
private Integer topicCount = 0;
private Integer shifitIssueCount = 0;
/**
* 群主名称
*/

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

@ -0,0 +1,53 @@
package com.epmet.evaluationindex.screen.dto.result;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 先进排行-先进支部排行--接口返参
*
* @Author sun
*/
@Data
public class IndexAdvanceBranchRankResultDTO implements Serializable {
private static final long serialVersionUID = 330099297596334388L;
/**
* 名称 XXXX社区党委
*/
private String name;
/**
* 指标得分
*/
@JsonIgnore
private String totalScore;
private BigDecimal scroe;
/**
* 党员数
*/
private Integer partyMemberNum;
/**
* 议题数
*/
private Integer issueNum;
/**
* 项目数
*/
private Integer projectNum;
/**
* 满意度 90.64% 返回字符串前端直接显示
*/
private String satisfactionRatio;
/**
* 结案率 94.3% 返回字符串前端直接显示
*/
private String closedProjectRatio;
}

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

@ -0,0 +1,30 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 评价指标字典表数据--接口返参
* @Author sun
*/
@Data
public class IndexDictResultDTO implements Serializable {
private static final long serialVersionUID = 3860268744336541373L;
/**
* 指标名
*/
private String indexName;
/**
* 指标code
*/
private String indexCode;
/**
* 指标值类型 百分比percent
*/
private String valueType;
}

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

@ -0,0 +1,55 @@
package com.epmet.evaluationindex.screen.dto.result;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 组织月度指数得分--接口返参
* @Author sun
*/
@Data
public class IndexScoreResultDTO implements Serializable {
private static final long serialVersionUID = 3860268744336541373L;
/**
* 年度平均指数(保留一位小数)
*/
@JsonIgnore
private String total;
private BigDecimal totalScore;
/**
* 党建能力(保留一位小数)
*/
@JsonIgnore
private String party;
private BigDecimal partyDevAbility;
/**
* 党建能力权重(保留一位小数)
*/
private String partyDevAbilityWeight;
/**
* 治理能力(保留一位小数)
*/
@JsonIgnore
private String govern;
private BigDecimal governAbility;
/**
* 治理能力权重(保留一位小数)
*/
private String governAbilityWeight;
/**
* 服务能力(保留一位小数)
*/
@JsonIgnore
private String service;
private BigDecimal serviceAbility;
/**
* 服务能力权重(保留一位小数)
*/
private String serviceAbilityWeight;
}

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

@ -0,0 +1,25 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* 按月查询各项指标最近12个月数据--接口返参
* @Author sun
*/
@Data
public class MonthAblityListResultDTO implements Serializable {
private static final long serialVersionUID = 3860268744336541373L;
/**
* 横坐标(202009)
*/
private String monthId;
/**
* 指标对应值数值或百分比
*/
private String ablity;
}

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

@ -0,0 +1,54 @@
package com.epmet.evaluationindex.screen.dto.result;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 按月份查询各项能力最近12个月得分--接口返参
* @Author sun
*/
@Data
public class MonthScoreListResultDTO implements Serializable {
private static final long serialVersionUID = 3860268744336541373L;
/**
* 党建能力dangjiannengli治理能力zhilinengli服务能力fuwunengli
*/
private String indexCode;
/**
* 每项能力最近12月各项分数对象
*/
private List<MonthScoreListResultDTO.ScoreListResultDTO> scoreList;
@Data
public static class ScoreListResultDTO implements Serializable {
/**
* 能力总分
*/
private Double indexTotal;
/**
* 本级能力分
*/
private Double agencyScore;
/**
* 下级能力分
*/
private Double subAgencyScore;
/**
* 横坐标202009
*/
private String monthId;
/**
* 类型党建能力dangjiannengli治理能力zhilinengli服务能力fuwunengli
*/
@JsonIgnore
private String indexCode;
}
}

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

@ -0,0 +1,45 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* 党员指标得分排行--接口返参
* @Author sun
*/
@Data
public class PartIndexScroeRankResultDTO implements Serializable {
private static final long serialVersionUID = 3860268744336541373L;
/**
* 组织ID
*/
private String agencyId;
/**
* 组织名称
*/
private String agencyName;
/**
* 用户Id
*/
private String userId;
/**
* 用户名称
*/
private String userName;
/**
* 网格Id
*/
private String gridId;
/**
* 网格名称
*/
private String gridName;
/**
* 党员指标得分
*/
private Double indexScore;
}

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

@ -0,0 +1,30 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* 同级对比(下级单项指数排行)各项数据查询--接口返参
*
* @Author sun
*/
@Data
public class PeerComparisonResultDTO implements Serializable {
private static final long serialVersionUID = 3860268744336541373L;
/**
* 组织或网格Id
*/
private String orgId;
/**
* 组织或网格名称
*/
private String orgName;
/**
* 能力分值(保留一位小数)
*/
private Double score;
}

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

@ -0,0 +1,50 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription 03基层党员-党员排行榜单
* @date 2020/10/9 10:12
*/
@NoArgsConstructor
@Data
public class PmRankResultDTO implements Serializable {
private static final long serialVersionUID = 2939125411579816231L;
/**
* 用户ID
*/
private String userId;
/**
* 姓名
*/
private String userName;
/**
* 所属支部名称
*/
private String branchName;
/**
* 所属社区名称
*/
private String communityName;
/**
* 群成员数
*/
private Integer groupMemberTotal;
/**
* 话题数
*/
private Integer topicTotal;
/**
* 参与人次
*/
private Integer partiUserTotal;
/**
* 议题数
*/
private Integer issueTotal;
}

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

@ -0,0 +1,34 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription 01基层党员-各类总数
* @date 2020/10/9 10:04
*/
@NoArgsConstructor
@Data
public class PmTotalResultDTO implements Serializable {
private static final long serialVersionUID = 4317234373580733128L;
/**
* 群成员数
*/
private Integer groupMemberTotal;
/**
* 话题数
*/
private Integer topicTotal;
/**
* 话题参与人次
*/
private Integer topicPartiUserTotal;
/**
* 议题数
*/
private Integer issueTotal;
}

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

@ -0,0 +1,35 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/10/9 15:05
*/
@Data
public class PmTotalTrendDTO implements Serializable {
private static final long serialVersionUID = -6773118646805355171L;
/**
* 月份
*/
private String monthId;
/**
* 群成员数
*/
private Integer groupMemberTotal;
/**
* 话题数
*/
private Integer topicTotal;
/**
* 话题参与人次
*/
private Integer topicPartiUserTotal;
/**
* 议题数
*/
private Integer issueTotal;
}

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

@ -0,0 +1,39 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* @author zhaoqifeng
* @dscription 02基层党员-指标月度趋势
* @date 2020/10/9 10:06
*/
@NoArgsConstructor
@Data
public class PmTotalTrendResultDTO implements Serializable {
private static final long serialVersionUID = -5705077703115309896L;
/**
* 横坐标集合
*/
private List<String> xAxis;
/**
* 群成员数
*/
private List<Integer> groupMemberTotalList;
/**
* 话题数
*/
private List<Integer> topicTotalList;
/**
* 话题参与人次
*/
private List<Integer> topicPartiUserTotalList;
/**
* 议题数
*/
private List<Integer> issueTotalList;
}

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

@ -0,0 +1,30 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription 10项目
* @date 2020/10/9 10:57
*/
@NoArgsConstructor
@Data
public class ProjectProfileResultDTO implements Serializable {
private static final long serialVersionUID = -6525050844558886157L;
/**
* 组织id
*/
private String orgId;
/**
* 项目数量
*/
private Integer projectTotal;
/**
* 级别
*/
private String level;
}

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

@ -4,6 +4,7 @@ import com.epmet.commons.tools.constant.NumConstant;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @Description 3公众参与概况返参DTO
@ -24,7 +25,7 @@ public class PublicPartiProfileResultDTO implements Serializable {
* */
private String monthTrend = "";
private Integer averageIssue = NumConstant.ZERO;
private BigDecimal averageIssue = new BigDecimal(NumConstant.ZERO);
/**
* 较上月百分比
@ -33,14 +34,17 @@ public class PublicPartiProfileResultDTO implements Serializable {
/**
* 较上月趋势incr上升decr下降
* */
*/
private String issueCompareLatestTrend = "";
/**
* 平均参与度
* */
private Integer averageJoin = NumConstant.ZERO;
*/
private BigDecimal averageJoin = new BigDecimal(NumConstant.ZERO);
/**
* 较上月百分比
*/
private String joinCompareLatestMonth = "";
private String joinCompareLatestTrend = "";

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

@ -0,0 +1,26 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* 是否根组织--接口返参
* @Author sun
*/
@Data
public class RootAgencyResultDTO implements Serializable {
private static final long serialVersionUID = 3860268744336541373L;
/**
* 是否根组织true false
*/
private Boolean isRoot = true;
/**
* 数据更新至上月月末时间
*/
private String date;
}

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

@ -0,0 +1,33 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* 按月份查询各项能力分数--接口返参
* @Author sun
*/
@Data
public class ScoreListResultDTO implements Serializable {
private static final long serialVersionUID = 3860268744336541373L;
/**
* 类型党建能力dangjiannengli治理能力zhilinengli服务能力fuwunengli
*/
private String indexCode;
/**
* 总分(保留一位小数)
*/
private Double indexTotal;
/**
* 本级分数(保留一位小数)
*/
private Double agencyScore;
/**
* 下级分数(保留一位小数)
*/
private Double subAgencyScore;
}

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

@ -24,7 +24,7 @@ public class UserJoinIndicatorGrowthRateResultDTO implements Serializable {
* */
private String monthTrend;
private Integer averageIssue;
private BigDecimal averageIssue;
/**
* 较上月百分比
@ -38,8 +38,8 @@ public class UserJoinIndicatorGrowthRateResultDTO implements Serializable {
/**
* 平均参与度
* */
private Integer averageJoin;
*/
private BigDecimal averageJoin;
private BigDecimal joinCompareLatestMonth;

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

@ -0,0 +1,46 @@
package com.epmet.evaluationindex.screen.dto.result;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 热心市民积分排行列表--接口返参
* @Author sun
*/
@Data
public class UserPointRankListResultDTO implements Serializable {
private static final long serialVersionUID = 3860268744336541373L;
/**
* 组织ID
*/
private String agencyId;
/**
* 组织名称
*/
private String agencyName;
/**
* 用户Id
*/
private String userId;
/**
* 用户名称
*/
private String userName;
/**
* 网格Id
*/
private String gridId;
/**
* 网格名称
*/
private String gridName;
/**
* 用户积分
*/
private Integer pointTotal;
}

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

@ -20,4 +20,6 @@ public interface ProjectConstant {
*/
String TYPE_EXCEPTION = "必要参数为空或参数格式错误";
String PROCESS_FAILURE = "查询项目进展失败......";
}

61
epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectDetailResultDTO.java

@ -0,0 +1,61 @@
package com.epmet.project.dto.result;
import com.epmet.evaluationindex.screen.dto.result.DepartmentNameListResultDTO;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* @Author zxc
* @DateTime 2020/10/23 10:13 上午
*/
@Data
public class ProjectDetailResultDTO implements Serializable {
private static final long serialVersionUID = 2450826789942547426L;
/** 事件 = 项目
* 事件标题
*/
private String eventTitle;
/**
* 事件内容
*/
private String eventContent;
/**
* 事件来源
*/
private String eventSource;
/**
* 事件图片集合
*/
private List<String> imgUrlList;
/**
* 项目进展
*/
private List<ProjectProcessResultDTO> processList;
/**
* 当前跟进部门
*/
private List<String> departmentNameList;
/**
* 当前跟进部门
*/
private List<DepartmentNameListResultDTO> departmentList;
public ProjectDetailResultDTO() {
this.eventTitle = "";
this.eventContent = "";
this.eventSource = "";
this.imgUrlList = new ArrayList<>();
this.processList = new ArrayList<>();
}
}

77
epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectProcessResultDTO.java

@ -0,0 +1,77 @@
/**
* 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.result;
import lombok.Data;
import java.io.Serializable;
/**
* 项目跟踪-项目处理进展列表-接口返参
*
* @author sun
*/
@Data
public class ProjectProcessResultDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 项目Id
*/
private String projectId = "";
/**
* 项目处理进展Id
*/
private String processId = "";
/**
* 处理进展名称
*/
private String processName = "";
/**
* 处理进展时间
*/
private Long processTime;
/**
* 处理进展时间 字符串
*/
//@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
//private String processTimeStr;
/**
* 处理部门
*/
private String departmentName = "";
/**
* 公开答复
*/
private String publicReply = "";
/**
* 内部备注
*/
private String internalRemark = "";
}

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

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

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

@ -3,7 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<version>0.3.37</version>
<version>0.3.44</version>
<artifactId>data-report-server</artifactId>
<parent>
@ -29,6 +29,11 @@
<artifactId>epmet-user-client</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>common-service-client</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
@ -62,11 +67,11 @@
<version>0.3.1</version>
</dependency>
<dependency>
<!--<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-commons-extapp-auth</artifactId>
<version>2.0.0</version>
</dependency>
</dependency>-->
<!--动态数据源-->
<dependency>
<groupId>com.epmet</groupId>

66
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/constant/FactConstant.java

@ -0,0 +1,66 @@
package com.epmet.datareport.constant;
/**
* @author sun
* @dscription 数据
*/
public interface FactConstant {
/**
* 组织类型
*/
String AGENCY = "agency";
/**
* 网格类型
*/
String GRID = "grid";
/**
* 能力指标
*/
String NLZB = "nenglizhibiao";
/**
* 党建能力
*/
String DJNL = "dangjiannengli";
/**
* 治理能力
*/
String ZLNL = "zhilinengli";
/**
* 服务能力
*/
String FWNL = "fuwunengli";
/**
* 全区相关
*/
String QUAN_QU_XIANG_GUAN = "quanquxiangguan";
/**
* 街道相关
*/
String JIE_DAO_XIANG_GUAN = "jiedaoxiangguan";
/**
* 社区相关
*/
String SHE_QU_XIANG_GUAN = "shequxiangguan";
/**
* 网格相关
*/
String WANG_GE_XIANG_GUAN = "wanggexiangguan";
/**
* 评价指标类型-
*/
String NONE = "none";
/**
* 评价指标类型-整数
*/
String INTEGER = "integer";
/**
* 评价指标类型-小数
*/
String DECIMAL = "decimal";
/**
* 评价指标类型-百分比
*/
String PERCENT = "percent";
String URL = "https://epmet-dev.elinkservice.cn/api/";
}

37
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/backdoor/BackDoorController.java

@ -0,0 +1,37 @@
package com.epmet.datareport.controller.backdoor;
import com.epmet.datareport.service.backdoor.BackDoorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @Author zxc
* @DateTime 2020/10/21 5:17 下午
*/
@RestController
@RequestMapping("backdoor")
public class BackDoorController {
@Autowired
private BackDoorService backDoorService;
/**
* desc: 重定向到target 方法适用于外部鉴权接口的查询 比如大屏的查询接口
*
* @param dataType
* @param appId
* @param target
* @param targetParam
* @return java.lang.String
* @author LiuJanJun
* @date 2020/10/23 1:44 下午
*/
@PostMapping("redirect/external")
public Object backDoor(@RequestHeader(value = "Data-Type", defaultValue = "real", required = false) String dataType,
@RequestHeader(value = "env", defaultValue = "test", required = false) String env,
@RequestHeader("AppId") String appId, @RequestHeader("target") String target,
@RequestBody(required = false) Object targetParam) {
return backDoorService.redirect(dataType, appId, target, targetParam,env);
}
}

106
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/fact/FactIndexController.java

@ -0,0 +1,106 @@
package com.epmet.datareport.controller.fact;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.datareport.service.fact.FactIndexService;
import com.epmet.evaluationindex.screen.dto.form.*;
import com.epmet.evaluationindex.screen.dto.result.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 数据改版api
*
* @author sun
*/
@RestController
@RequestMapping("fact")
public class FactIndexController {
@Autowired
private FactIndexService factIndexService;
/**
* @param formDTO
* @Description 能力指数
* @author sun
*/
@PostMapping("index/ablityindex")
public Result<List<AblityIndexResultDTO>> ablityIndex(@RequestBody AblityIndexFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, AblityIndexFormDTO.AddUserInternalGroup.class);
return new Result<List<AblityIndexResultDTO>>().ok(factIndexService.ablityIndex(formDTO));
}
/**
* @param formDTO
* @Description 按月份查询本级及下级分数
* @author sun
*/
@PostMapping("index/scorelist")
public Result<List<ScoreListResultDTO>> scoreList(@RequestBody ScoreListFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, ScoreListFormDTO.AddUserInternalGroup.class);
return new Result<List<ScoreListResultDTO>>().ok(factIndexService.scoreList(formDTO));
}
/**
* @param formDTO
* @Description 按月份查询各项能力最近12个月得分
* @author sun
*/
@PostMapping("index/monthscorelist")
public Result<List<MonthScoreListResultDTO>> monthScoreList(@RequestBody MonthScoreListFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, MonthScoreListFormDTO.AddUserInternalGroup.class);
return new Result<List<MonthScoreListResultDTO>>().ok(factIndexService.monthScoreList(formDTO));
}
/**
* @param formDTO
* @Description 按月查询各项指标数据
* @author sun
*/
@PostMapping("index/ablitylist")
public Result<List<AblityListResultDTO>> ablityList(@RequestBody AblityListFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, AblityListFormDTO.AddUserInternalGroup.class);
return new Result<List<AblityListResultDTO>>().ok(factIndexService.ablityList(formDTO));
}
/**
* @param formDTO
* @Description 按月查询各项指标最近12个月数据
* @author sun
*/
@PostMapping("index/monthablitylist")
public Result<List<MonthAblityListResultDTO>> monthAblityList(@RequestBody MonthAblityListFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, MonthAblityListFormDTO.AddUserInternalGroup.class);
return new Result<List<MonthAblityListResultDTO>>().ok(factIndexService.monthAblityList(formDTO));
}
/**
* @param formDTO
* @Description 同级对比各项数据查询
* @author sun
*/
@PostMapping("index/peercomparison")
public Result<List<PeerComparisonResultDTO>> peerComparison(@RequestBody PeerComparisonFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, PeerComparisonFormDTO.AddUserInternalGroup.class);
return new Result<List<PeerComparisonResultDTO>>().ok(factIndexService.peerComparison(formDTO));
}
/**
* @param formDTO
* @Description 是否根组织
* @author sun
*/
@PostMapping("index/rootagency")
public Result<RootAgencyResultDTO> rootAgency(@RequestBody RootAgencyFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, RootAgencyFormDTO.AddUserInternalGroup.class);
return new Result<RootAgencyResultDTO>().ok(factIndexService.rootAgency(formDTO));
}
}

13
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/project/ProjectController.java

@ -5,6 +5,7 @@ import com.epmet.commons.tools.exception.RenException;
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.ProcessListFormDTO;
import com.epmet.module.project.service.ProjectService;
import com.epmet.project.constant.ProjectConstant;
import com.epmet.project.dto.form.ProjectIncrTrendFormDTO;
@ -78,4 +79,16 @@ public class ProjectController {
return new Result<List<ProjectIncrTrendResultDTO>>().ok(projectService.getProjectIncrTrend(tokenDto, formDTO));
}
/**
* @Description 项目详情
* @Param processListFormDTO
* @author zxc
* @date 2020/10/23 10:31 上午
*/
@PostMapping("projectdetail")
public Result<ProjectDetailResultDTO> projectDetail(@RequestBody ProcessListFormDTO processListFormDTO){
ValidatorUtils.validateEntity(processListFormDTO);
return new Result<ProjectDetailResultDTO>().ok(projectService.projectDetail(processListFormDTO));
}
}

43
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/screen/AgencyController.java

@ -1,21 +1,15 @@
package com.epmet.datareport.controller.screen;
import com.epmet.commons.extappauth.annotation.ExternalAppRequestAuth;
import com.epmet.commons.extappauth.bean.ExternalAppRequestParam;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.datareport.service.evaluationindex.screen.AgencyService;
import com.epmet.evaluationindex.screen.dto.form.CompartmentByBizTypeFormDTO;
import com.epmet.evaluationindex.screen.dto.form.CompartmentFormDTO;
import com.epmet.evaluationindex.screen.dto.form.TreeByTypeFormDTO;
import com.epmet.evaluationindex.screen.dto.result.CompartmentResultDTO;
import com.epmet.evaluationindex.screen.dto.result.TreeResultDTO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.*;
/**
* 组织相关api
@ -31,19 +25,27 @@ public class AgencyController {
private AgencyService agencyService;
/**
* @Description 1组织机构树
* @param
* @Description 1组织机构树 只返回 is_display = '1'
* @author zxc
* @date 2020/8/18 2:04 下午
*/
@ExternalAppRequestAuth
@PostMapping("tree")
public Result<TreeResultDTO> tree(HttpServletRequest request, ExternalAppRequestParam externalAppRequestParam){
String customerId = request.getHeader("CustomerId");
if(StringUtils.isBlank(externalAppRequestParam.getCustomerId())){
externalAppRequestParam.setCustomerId(customerId);
}
return new Result<TreeResultDTO>().ok(agencyService.tree(externalAppRequestParam));
public Result<TreeResultDTO> tree(@RequestHeader("CustomerId") String customerId){
return new Result<TreeResultDTO>().ok(agencyService.tree(customerId));
}
/**
* @Description 智慧社区的tree
* @Param customerId
* @Param bizType
* @author zxc
* @date 2020/10/21 2:49 下午
*/
@PostMapping("treebytype")
public Result<TreeResultDTO> treeByType(@RequestHeader("CustomerId") String customerId,@RequestBody TreeByTypeFormDTO bizType){
ValidatorUtils.validateEntity(bizType, TreeByTypeFormDTO.TreeByType.class);
return new Result<TreeResultDTO>().ok(agencyService.treeByType(customerId,bizType));
}
/**
@ -52,11 +54,16 @@ public class AgencyController {
* @author zxc
* @date 2020/8/18 2:33 下午
*/
@ExternalAppRequestAuth
@PostMapping("compartment")
public Result<CompartmentResultDTO> compartment(@RequestBody CompartmentFormDTO compartmentFormDTO){
ValidatorUtils.validateEntity(compartmentFormDTO, CompartmentFormDTO.Compartment.class);
return new Result<CompartmentResultDTO>().ok(agencyService.compartment(compartmentFormDTO));
}
@PostMapping("compartmentbybiztype")
public Result<CompartmentResultDTO> compartmentByBizType(@RequestBody CompartmentByBizTypeFormDTO compartmentFormDTO){
ValidatorUtils.validateEntity(compartmentFormDTO, CompartmentByBizTypeFormDTO.CompartmentByBizType.class);
return new Result<CompartmentResultDTO>().ok(agencyService.compartmentByBizType(compartmentFormDTO));
}
}

175
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/screen/AnScreenController.java

@ -0,0 +1,175 @@
package com.epmet.datareport.controller.screen;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.datareport.service.evaluationindex.screen.AnScreenService;
import com.epmet.evaluationindex.screen.dto.form.AnScreenFormDTO;
import com.epmet.evaluationindex.screen.dto.form.AnScreenRankFormDTO;
import com.epmet.evaluationindex.screen.dto.form.AnScreenTrendFormDTO;
import com.epmet.evaluationindex.screen.dto.result.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 安宁大屏
*
* @author zhaoqifeng
* @date 2020/10/9 9:32
*/
@RestController
@RequestMapping("anscreen")
public class AnScreenController {
@Autowired
private AnScreenService anScreenService;
/**
* 基层党员-各类总数
*
* @param formDTO
* @return com.epmet.evaluationindex.screen.dto.result.PmTotalResultDTO
* @author zhaoqifeng
* @date 2020/10/9 13:55
*/
@PostMapping("pmtotal")
public Result<PmTotalResultDTO> pmTotal(@RequestBody AnScreenFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, AnScreenFormDTO.AnScreenGroup.class);
PmTotalResultDTO result = anScreenService.pmTotal(formDTO);
return new Result<PmTotalResultDTO>().ok(result);
}
/**
* 基层党员-指标月度趋势
*
* @param formDTO
* @return com.epmet.evaluationindex.screen.dto.result.PmTotalTrendResultDTO
* @author zhaoqifeng
* @date 2020/10/9 13:57
*/
@PostMapping("pmtotaltrend")
public Result<PmTotalTrendResultDTO> pmTotalTrend(@RequestBody AnScreenTrendFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, AnScreenTrendFormDTO.AnScreenTrendGroup.class);
PmTotalTrendResultDTO result = anScreenService.pmTotalTrend(formDTO);
return new Result<PmTotalTrendResultDTO>().ok(result);
}
/**
* 基层党员-党员排行榜单
*
* @param formDTO
* @return java.util.List<com.epmet.evaluationindex.screen.dto.result.PmRankResultDTO>
* @author zhaoqifeng
* @date 2020/10/9 13:59
*/
@PostMapping("pmrank")
public Result<List<PmRankResultDTO>> pmRank(@RequestBody AnScreenRankFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, AnScreenRankFormDTO.AnScreenRankGroup.class);
List<PmRankResultDTO> result = anScreenService.pmRank(formDTO);
return new Result<List<PmRankResultDTO>>().ok(result);
}
/**
* 基层组织-党群数议题数项目数
*
* @param formDTO
* @return java.util.List<com.epmet.evaluationindex.screen.dto.result.GrassRootsOrgResultDTO>
* @author zhaoqifeng
* @date 2020/10/9 14:01
*/
@PostMapping("grassrootsorg")
public Result<GrassRootsOrgResultDTO> grassRootsOrg(@RequestBody AnScreenFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, AnScreenFormDTO.AnScreenGroup.class);
GrassRootsOrgResultDTO result = anScreenService.grassRootsOrg(formDTO);
return new Result<GrassRootsOrgResultDTO>().ok(result);
}
/**
* 基层组织-指标月度趋势
*
* @param formDTO
* @return com.epmet.evaluationindex.screen.dto.result.GrassRootsOrgTrendResultDTO
* @author zhaoqifeng
* @date 2020/10/9 14:03
*/
@PostMapping("grassrootsorgtrend")
public Result<GrassRootsOrgTrendResultDTO> grassRootsOrgTrend(@RequestBody AnScreenTrendFormDTO formDTO) {
GrassRootsOrgTrendResultDTO result = anScreenService.grassRootsOrgTrend(formDTO);
return new Result<GrassRootsOrgTrendResultDTO>().ok(result);
}
/**
* 基层组织-组织排行榜单
*
* @param formDTO
* @return java.util.List<com.epmet.evaluationindex.screen.dto.result.GrassRootsOrgRankResultDTO>
* @author zhaoqifeng
* @date 2020/10/9 14:06
*/
@PostMapping("grassrootsorgrank")
public Result<List<GrassRootsOrgRankResultDTO>> grassRootsOrgRank(@RequestBody AnScreenFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, AnScreenFormDTO.AnScreenGroup.class);
List<GrassRootsOrgRankResultDTO> result = anScreenService.grassRootsOrgRank(formDTO);
return new Result<List<GrassRootsOrgRankResultDTO>>().ok(result);
}
/**
* 基层治理-总数
*
* @param formDTO
* @return com.epmet.evaluationindex.screen.dto.result.GrassRootsGovernResultDTO
* @author zhaoqifeng
* @date 2020/10/9 14:10
*/
@PostMapping("grassrootsgovern")
public Result<GrassRootsGovernResultDTO> grassRootsGovern(@RequestBody AnScreenFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, AnScreenFormDTO.AnScreenGroup.class);
GrassRootsGovernResultDTO result = anScreenService.grassRootsGovern(formDTO);
return new Result<GrassRootsGovernResultDTO>().ok(result);
}
/**
* 基层治理-指标月度趋势
*
* @param formDTO
* @return com.epmet.evaluationindex.screen.dto.result.GrassRootsGovernTrendResultDTO
* @author zhaoqifeng
* @date 2020/10/9 14:11
*/
@PostMapping("grassrootsgoverntrend")
public Result<GrassRootsGovernTrendResultDTO> grassRootsGovernTrend(@RequestBody AnScreenTrendFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, AnScreenTrendFormDTO.AnScreenTrendGroup.class);
GrassRootsGovernTrendResultDTO result = anScreenService.grassRootsGovernTrend(formDTO);
return new Result<GrassRootsGovernTrendResultDTO>().ok(result);
}
/**
* 基层治理-治理排行
*
* @param formDTO
* @return java.util.List<com.epmet.evaluationindex.screen.dto.result.GrassRootsGovernRankResultDTO>
* @author zhaoqifeng
* @date 2020/10/9 14:13
*/
@PostMapping("grassrootsgovernrank")
public Result<List<GrassRootsGovernRankResultDTO>> grassRootsGovernRank(@RequestBody AnScreenFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, AnScreenFormDTO.AnScreenGroup.class);
List<GrassRootsGovernRankResultDTO> result = anScreenService.grassRootsGovernRank(formDTO);
return new Result<List<GrassRootsGovernRankResultDTO>>().ok(result);
}
/**
* 项目
*
* @param customerId
* @return java.util.List<com.epmet.evaluationindex.screen.dto.result.ProjectProfileResultDTO>
* @author zhaoqifeng
* @date 2020/10/9 14:16
*/
@PostMapping("projectprofile")
public Result<List<ProjectProfileResultDTO>> projectProfile(@RequestHeader("CustomerId") String customerId) {
List<ProjectProfileResultDTO> result = anScreenService.projectProfile(customerId);
return new Result<List<ProjectProfileResultDTO>>().ok(result);
}
}

12
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/screen/DistributionController.java

@ -1,6 +1,5 @@
package com.epmet.datareport.controller.screen;
import com.epmet.commons.extappauth.annotation.ExternalAppRequestAuth;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.datareport.service.evaluationindex.screen.DistributionService;
@ -28,12 +27,11 @@ public class DistributionController {
private DistributionService distributionService;
/**
* @Description 1党支部
* @param formDTO
* @Description 1党支部分布 只显示 screen_customer_biz_org 表中存在的orgId的数据
* @author zxc
* @date 2020/8/18 10:59 上午
*/
@ExternalAppRequestAuth
@PostMapping("branch")
public Result<List<BranchResultDTO>> branch(@RequestBody BranchFormDTO formDTO){
ValidatorUtils.validateEntity(formDTO, BranchFormDTO.Branch.class);
@ -41,12 +39,11 @@ public class DistributionController {
}
/**
* @Description 2用户分布
* @Description 2用户分布 只显示 screen_customer_biz_org 表中存在的orgId的数据
* @param userFormDTO
* @author zxc
* @date 2020/8/18 11:10 上午
*/
@ExternalAppRequestAuth
@PostMapping("user")
public Result<UserResultDTO> user(@RequestBody UserFormDTO userFormDTO){
ValidatorUtils.validateEntity(userFormDTO, UserFormDTO.User.class);
@ -54,12 +51,11 @@ public class DistributionController {
}
/**
* @Description 3党员分布
* @Description 3党员分布 只显示 screen_customer_biz_org 表中存在的orgId的数据
* @param parymemberFormDTO
* @author zxc
* @date 2020/8/18 11:20 上午
*/
@ExternalAppRequestAuth
@PostMapping("parymember")
public Result<ParymemberResultDTO> parymember(@RequestBody ParymemberFormDTO parymemberFormDTO){
ValidatorUtils.validateEntity(parymemberFormDTO, ParymemberFormDTO.Parymember.class);
@ -72,7 +68,6 @@ public class DistributionController {
* @author zxc
* @date 2020/8/19 1:29 下午
*/
@ExternalAppRequestAuth
@PostMapping("project")
public Result<List<ProjectResultDTO>> project(@RequestBody ProjectFormDTO projectFormDTO){
ValidatorUtils.validateEntity(projectFormDTO, ProjectFormDTO.Project.class);
@ -85,7 +80,6 @@ public class DistributionController {
* @author zxc
* @date 2020/8/19 1:52 下午
*/
@ExternalAppRequestAuth
@PostMapping("topprofile")
public Result<TopProfileResultDTO> topProfile(@RequestBody TopProfileFormDTO topProfileFormDTO){
ValidatorUtils.validateEntity(topProfileFormDTO, TopProfileFormDTO.TopProfile.class);

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

Loading…
Cancel
Save