diff --git a/epmet-admin/epmet-admin-server/pom.xml b/epmet-admin/epmet-admin-server/pom.xml
index 32cdbb8688..3661fc8c37 100644
--- a/epmet-admin/epmet-admin-server/pom.xml
+++ b/epmet-admin/epmet-admin-server/pom.xml
@@ -245,6 +245,9 @@
false
+
+ false
+
true
diff --git a/epmet-auth/pom.xml b/epmet-auth/pom.xml
index 5d8ac8a789..5f67b41712 100644
--- a/epmet-auth/pom.xml
+++ b/epmet-auth/pom.xml
@@ -351,6 +351,9 @@
false
+
+ false
+
wxcb6ce2ed0c5ae54c
c7f74941ee97fa9b2e1065772d34c397
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/resolver/LoginUserHandlerMethodArgumentResolver.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/resolver/LoginUserHandlerMethodArgumentResolver.java
index 5c725c2ec4..79ee2d538a 100644
--- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/resolver/LoginUserHandlerMethodArgumentResolver.java
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/resolver/LoginUserHandlerMethodArgumentResolver.java
@@ -27,8 +27,14 @@ import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
+import org.springframework.web.servlet.HandlerMapping;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
/**
* 有@LoginUser注解的方法参数,注入当前登录用户
@@ -68,6 +74,12 @@ public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgu
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container,
NativeWebRequest request, WebDataBinderFactory factory) throws Exception {
+
+ HttpServletRequest nativeReq = (HttpServletRequest) request.getNativeRequest();
+ String requestURI = nativeReq.getRequestURI();
+
+ logger.info("【LoginUserHandlerMethodArgumentResolver】请求uri:{}", requestURI);
+
//app-client-userId
String redisKey = request.getHeader(Constant.APP_USER_KEY);
if (StringUtils.isEmpty(redisKey)) {
diff --git a/epmet-gateway/pom.xml b/epmet-gateway/pom.xml
index a4567dfc65..e09410668d 100644
--- a/epmet-gateway/pom.xml
+++ b/epmet-gateway/pom.xml
@@ -497,6 +497,10 @@
false
+
+
+ false
+
lb://epmet-auth-server
diff --git a/epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java b/epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java
index ee9125db57..4ed4a4cf66 100644
--- a/epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java
+++ b/epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java
@@ -1,38 +1,14 @@
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.exception.ExceptionUtils;
-import com.epmet.commons.tools.exception.RenException;
-import com.epmet.commons.tools.utils.IpUtils;
-import com.epmet.commons.tools.utils.Result;
-import com.epmet.constant.AuthTypeConstant;
-import com.epmet.constant.TokenHeaderKeyConstant;
-import com.epmet.openapi.constant.AuthTypes;
-import com.epmet.openapi.constant.RequestParamKeys;
-import com.epmet.utils.ServerHttpRequestUtils;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
-import org.springframework.core.io.buffer.DataBuffer;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
-import org.springframework.util.MultiValueMap;
-import org.springframework.web.server.ServerWebExchange;
-import reactor.core.publisher.Flux;
-import reactor.core.publisher.Mono;
-import java.nio.charset.StandardCharsets;
import java.util.*;
/**
@@ -42,10 +18,9 @@ import java.util.*;
* @since 1.0.0
*/
@Component("CpAuth")
+@Slf4j
public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory {
- private Logger logger = LoggerFactory.getLogger(getClass());
-
@Autowired
private InternalAuthProcessor internalAuthProcessor;
@@ -61,181 +36,6 @@ public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory {
- if (!config.isEnabled()) {
- return chain.filter(exchange);
- }
-
- ServerHttpRequest request = exchange.getRequest();
-
- //0.添加流水号
- String tranSerial = getTranserialFromRequestHeader(request);
- if (StringUtils.isBlank(tranSerial)) {
- tranSerial = generateTransactionSerial();
- // 设置当前线程名
- request.mutate().header(AppClientConstant.TRANSACTION_SERIAL_KEY, new String[]{tranSerial});
- }
- Thread.currentThread().setName(tranSerial);
-
- //1.打印请求信息
- logRequest(request);
-
- //2.获取请求路径,参数
- String requestUri = request.getPath().pathWithinApplication().value();
- MultiValueMap queryParams = request.getQueryParams();
- String queryParamsStr = convertQueryParams2String(queryParams);
- logger.info("当前requestUri=[" + requestUri.concat(queryParamsStr) + "],客户端Id:{}", IpUtils.getClientIp(request));
-
- //3.认证
- String authType = getAuthType(request);
- logger.info("认证类型为:{}", authType);
- try {
- switch (authType) {
- case AuthTypeConstant.AUTH_TYPE_ALL:
- externalAuthProcessor.auth(exchange, chain);
- internalAuthProcessor.auth(exchange, chain);
- break;
- case AuthTypeConstant.AUTH_TYPE_EXTERNAL:
- externalAuthProcessor.auth(exchange, chain);
- break;
- case AuthTypeConstant.AUTH_TYPE_INTERNAL:
- internalAuthProcessor.auth(exchange, chain);
- break;
- }
- } catch (RenException e) {
- logger.error("CpAuthGatewayFilterFactory认证出错RenException,错误信息:{}", ExceptionUtils.getErrorStackTrace(e));
- return response(exchange, new Result<>().error(e.getCode(), e.getMessage()));
- } catch (Exception e) {
- logger.error("CpAuthGatewayFilterFactory认证出错Exception,错误信息:{}", ExceptionUtils.getErrorStackTrace(e));
- return response(exchange, new Result<>().error(e.getMessage()));
- }
-
- return chain.filter(exchange);
- };
- }
-
- /**
- * @Description 打印请求头
- * @param request 请求
- * @return void
- * @author wxz
- * @date 2021.08.18 11:18:00
- */
- private void logRequest(ServerHttpRequest request) {
- HttpHeaders headers = request.getHeaders();
- StringBuilder sb = new StringBuilder("请求头:");
- for (Map.Entry> entry : headers.entrySet()) {
- String headerKey = entry.getKey();
- List headerValue = entry.getValue();
- sb.append(headerKey).append(":").append(headerValue).append(",");
- }
- logger.info(sb.toString());
- }
-
- /**
- * @Description 从request请求头中获取传递过来的流水号
- * @param request
- * @return java.lang.String
- * @author wxz
- * @date 2021.08.18 15:55:30
- */
- private String getTranserialFromRequestHeader(ServerHttpRequest request) {
- List tranSerials = request.getHeaders().get(AppClientConstant.TRANSACTION_SERIAL_KEY);
- return CollectionUtils.isEmpty(tranSerials) ? null : tranSerials.get(0);
- }
-
- /**
- * @return
- * @Description 将url参数转化为String
- * @author wxz
- * @date 2021.08.11 23:12
- */
- private String convertQueryParams2String(MultiValueMap queryParams) {
- try {
- if (queryParams == null || queryParams.size() == 0) {
- return "";
- }
- StringBuilder sb = new StringBuilder("");
- queryParams.entrySet().forEach(entry -> {
- String key = entry.getKey();
- List values = entry.getValue();
-
- String value = "";
- if (values != null && values.size() > 0) {
- value = values.get(0);
- }
-
- sb.append("&").append(key).append("=").append(value);
- });
- String result = sb.toString();
- if (result.startsWith("&")) {
- result = result.substring(1);
- return "?".concat(result);
- }
- return "";
- } catch (Exception e) {
- logger.warn("gateway中将url参数转化为String失败,程序继续执行,错误信息:".concat(ExceptionUtils.getErrorStackTrace(e)));
- return "";
- }
- }
-
- /**
- * 判断需要执行的认证方式(内部应用认证还是外部应用认证)
- *
- * @return
- */
- 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;
- // }
- //}
-
- String authType = ServerHttpRequestUtils.getRequestParam(request, RequestParamKeys.AUTH_TYPE);
- if (StringUtils.isNotBlank(authType) && AuthTypes.TAKE_TOKEN.equals(authType)) {
- return AuthTypeConstant.AUTH_TYPE_EXTERNAL;
- }
-
- boolean needExternal = StringUtils.isNotBlank(request.getHeaders().getFirst(TokenHeaderKeyConstant.ACCESS_TOKEN_HEADER_KEY));
- boolean needInternal = StringUtils.isNotBlank(request.getHeaders().getFirst(TokenHeaderKeyConstant.AUTHORIZATION_TOKEN_HEADER_KEY));
-
- if (needExternal && needInternal) {
- return AuthTypeConstant.AUTH_TYPE_ALL;
- }
-
- if (needExternal) {
- // url对外部应用开放,并且头里面有AccessToken,那么走外部应用认证
- return AuthTypeConstant.AUTH_TYPE_EXTERNAL;
- }
-
- return AuthTypeConstant.AUTH_TYPE_INTERNAL;
- }
-
- /**
- * 获取事务流水号
- *
- * @return
- */
- public static String generateTransactionSerial() {
- String[] letterPool = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n"
- , "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
-
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < 2; i++) {
- sb.append(letterPool[(int) (Math.random() * 25)]);
- }
-
- sb.append(System.currentTimeMillis());
- return sb.toString();
- }
-
public static class CpAuthConfig {
/**
@@ -255,12 +55,8 @@ public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory 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));
+ @Override
+ public GatewayFilter apply(CpAuthConfig config) {
+ return new EpmetGatewayFilter(config, internalAuthProcessor, externalAuthProcessor);
}
-
}
diff --git a/epmet-gateway/src/main/java/com/epmet/filter/EpmetGatewayFilter.java b/epmet-gateway/src/main/java/com/epmet/filter/EpmetGatewayFilter.java
new file mode 100644
index 0000000000..ef18f3d4de
--- /dev/null
+++ b/epmet-gateway/src/main/java/com/epmet/filter/EpmetGatewayFilter.java
@@ -0,0 +1,263 @@
+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.exception.EpmetErrorCode;
+import com.epmet.commons.tools.exception.ExceptionUtils;
+import com.epmet.commons.tools.exception.RenException;
+import com.epmet.commons.tools.utils.IpUtils;
+import com.epmet.commons.tools.utils.Result;
+import com.epmet.constant.AuthTypeConstant;
+import com.epmet.constant.TokenHeaderKeyConstant;
+import com.epmet.openapi.constant.AuthTypes;
+import com.epmet.openapi.constant.RequestParamKeys;
+import com.epmet.utils.ServerHttpRequestUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.cloud.gateway.filter.GatewayFilter;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.core.io.buffer.DataBuffer;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description Gateway过滤器,可用于认证,请求相关日志打印
+ * @author wxz
+ * @date 2021.10.12 09:10:02
+*/
+@Slf4j
+public class EpmetGatewayFilter implements GatewayFilter {
+
+ private CpAuthGatewayFilterFactory.CpAuthConfig config;
+
+ private InternalAuthProcessor internalAuthProcessor;
+
+ private ExternalAuthProcessor externalAuthProcessor;
+
+ public EpmetGatewayFilter(CpAuthGatewayFilterFactory.CpAuthConfig config,
+ InternalAuthProcessor internalAuthProcessor,
+ ExternalAuthProcessor externalAuthProcessor) {
+ this.config = config;
+ this.internalAuthProcessor = internalAuthProcessor;
+ this.externalAuthProcessor = externalAuthProcessor;
+ }
+
+ @Override
+ public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+ try {
+ if (!config.isEnabled()) {
+ return chain.filter(exchange);
+ }
+
+ return doFilter(exchange, chain);
+ } catch (RenException re) {
+ // 人为抛出,则携带错误码和错误信息响应给前端
+ log.error("EpmetGatewayFilter认证出错RenException,错误信息:{}", ExceptionUtils.getErrorStackTrace(re));
+ return response(exchange, new Result<>().error(re.getCode(), re.getMessage()));
+ } catch (Exception t) {
+ // 其他非人为抛出异常,打印日志,返回"服务器开小差..."给前端
+ log.error("EpmetGatewayFilter认证出错Exception,错误信息:{}", ExceptionUtils.getErrorStackTrace(t));
+ return response(exchange, new Result<>().error(EpmetErrorCode.SERVER_ERROR.getCode()));
+ }
+ }
+
+ /**
+ * @description 执行请求过滤和验证
+ *
+ * @param exchange
+ * @param chain
+ * @return
+ * @author wxz
+ * @date 2021.10.12 09:16:15
+ */
+ private Mono doFilter(ServerWebExchange exchange, GatewayFilterChain chain) {
+
+ ServerHttpRequest request = exchange.getRequest();
+
+ //0.添加流水号
+ String tranSerial = getTranserialFromRequestHeader(request);
+ if (StringUtils.isBlank(tranSerial)) {
+ tranSerial = generateTransactionSerial();
+ // 设置当前线程名
+ request.mutate().header(AppClientConstant.TRANSACTION_SERIAL_KEY, new String[]{tranSerial});
+ }
+ Thread.currentThread().setName(tranSerial);
+
+ //1.打印请求信息
+ logRequest(request);
+
+ //2.获取请求路径,参数
+ String requestUri = request.getPath().pathWithinApplication().value();
+ MultiValueMap queryParams = request.getQueryParams();
+ String queryParamsStr = convertQueryParams2String(queryParams);
+ log.info("当前requestUri=[" + requestUri.concat(queryParamsStr) + "],客户端Id:{}", IpUtils.getClientIp(request));
+
+ //3.认证
+ String authType = getAuthType(request);
+ log.info("认证类型为:{}", authType);
+
+ switch (authType) {
+ case AuthTypeConstant.AUTH_TYPE_ALL:
+ externalAuthProcessor.auth(exchange, chain);
+ internalAuthProcessor.auth(exchange, chain);
+ break;
+ case AuthTypeConstant.AUTH_TYPE_EXTERNAL:
+ externalAuthProcessor.auth(exchange, chain);
+ break;
+ case AuthTypeConstant.AUTH_TYPE_INTERNAL:
+ internalAuthProcessor.auth(exchange, chain);
+ break;
+ }
+
+ return chain.filter(exchange);
+ }
+
+ /**
+ * @param exchange
+ * @param object
+ * @return
+ * @description 产生Response对象
+ * @author wxz
+ * @date 2021.10.12 09:00:20
+ */
+ protected Mono 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 void
+ * @Description 打印请求头
+ * @author wxz
+ * @date 2021.08.18 11:18:00
+ */
+ private void logRequest(ServerHttpRequest request) {
+ HttpHeaders headers = request.getHeaders();
+ StringBuilder sb = new StringBuilder("请求头:");
+ for (Map.Entry> entry : headers.entrySet()) {
+ String headerKey = entry.getKey();
+ List headerValue = entry.getValue();
+ sb.append(headerKey).append(":").append(headerValue).append(",");
+ }
+ log.info(sb.toString());
+ }
+
+ /**
+ * @param request
+ * @return java.lang.String
+ * @Description 从request请求头中获取传递过来的流水号
+ * @author wxz
+ * @date 2021.08.18 15:55:30
+ */
+ private String getTranserialFromRequestHeader(ServerHttpRequest request) {
+ List tranSerials = request.getHeaders().get(AppClientConstant.TRANSACTION_SERIAL_KEY);
+ return CollectionUtils.isEmpty(tranSerials) ? null : tranSerials.get(0);
+ }
+
+ /**
+ * @return
+ * @Description 将url参数转化为String
+ * @author wxz
+ * @date 2021.08.11 23:12
+ */
+ private String convertQueryParams2String(MultiValueMap queryParams) {
+ try {
+ if (queryParams == null || queryParams.size() == 0) {
+ return "";
+ }
+ StringBuilder sb = new StringBuilder("");
+ queryParams.entrySet().forEach(entry -> {
+ String key = entry.getKey();
+ List values = entry.getValue();
+
+ String value = "";
+ if (values != null && values.size() > 0) {
+ value = values.get(0);
+ }
+
+ sb.append("&").append(key).append("=").append(value);
+ });
+ String result = sb.toString();
+ if (result.startsWith("&")) {
+ result = result.substring(1);
+ return "?".concat(result);
+ }
+ return "";
+ } catch (Exception e) {
+ log.warn("gateway中将url参数转化为String失败,程序继续执行,错误信息:".concat(ExceptionUtils.getErrorStackTrace(e)));
+ return "";
+ }
+ }
+
+ /**
+ * 判断需要执行的认证方式(内部应用认证还是外部应用认证)
+ *
+ * @return
+ */
+ 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;
+ // }
+ //}
+
+ String authType = ServerHttpRequestUtils.getRequestParam(request, RequestParamKeys.AUTH_TYPE);
+ if (StringUtils.isNotBlank(authType) && AuthTypes.TAKE_TOKEN.equals(authType)) {
+ return AuthTypeConstant.AUTH_TYPE_EXTERNAL;
+ }
+
+ boolean needExternal = StringUtils.isNotBlank(request.getHeaders().getFirst(TokenHeaderKeyConstant.ACCESS_TOKEN_HEADER_KEY));
+ boolean needInternal = StringUtils.isNotBlank(request.getHeaders().getFirst(TokenHeaderKeyConstant.AUTHORIZATION_TOKEN_HEADER_KEY));
+
+ if (needExternal && needInternal) {
+ return AuthTypeConstant.AUTH_TYPE_ALL;
+ }
+
+ if (needExternal) {
+ // url对外部应用开放,并且头里面有AccessToken,那么走外部应用认证
+ return AuthTypeConstant.AUTH_TYPE_EXTERNAL;
+ }
+
+ return AuthTypeConstant.AUTH_TYPE_INTERNAL;
+ }
+
+ /**
+ * 获取事务流水号
+ *
+ * @return
+ */
+ public String generateTransactionSerial() {
+ String[] letterPool = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n"
+ , "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
+
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < 2; i++) {
+ sb.append(letterPool[(int) (Math.random() * 25)]);
+ }
+
+ sb.append(System.currentTimeMillis());
+ return sb.toString();
+ }
+}
\ No newline at end of file
diff --git a/epmet-gateway/src/main/java/com/epmet/healthcheck/HealthCheckController.java b/epmet-gateway/src/main/java/com/epmet/healthcheck/HealthCheckController.java
new file mode 100644
index 0000000000..881cc37548
--- /dev/null
+++ b/epmet-gateway/src/main/java/com/epmet/healthcheck/HealthCheckController.java
@@ -0,0 +1,27 @@
+package com.epmet.healthcheck;
+
+import com.epmet.commons.tools.utils.Result;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Description 健康检查。gateway中的/api前缀只用于匹配转发路由,自身的Controller的前缀为/
+ * @author wxz
+ * @date 2021.10.11 17:56:34
+*/
+@RestController
+@RequestMapping("/gateway/healthcheck")
+public class HealthCheckController {
+
+ /**
+ * http健康检查
+ * @return
+ */
+ @PostMapping("http")
+ public Result httpHealthCheck() {
+ return new Result();
+ }
+
+}
diff --git a/epmet-gateway/src/main/resources/bootstrap.yml b/epmet-gateway/src/main/resources/bootstrap.yml
index aaa119e446..a147811112 100644
--- a/epmet-gateway/src/main/resources/bootstrap.yml
+++ b/epmet-gateway/src/main/resources/bootstrap.yml
@@ -510,6 +510,8 @@ epmet:
- /data/stats/basereport/**
- /data/stats/governance/**
- /third/private-epmet/push-component-access-token
+ - /data/stats/plugins/ofs/**
+ - /data/stats/plugins/workrecord/**
# 对外开放接口认证白名单
diff --git a/epmet-module/data-aggregator/data-aggregator-server/pom.xml b/epmet-module/data-aggregator/data-aggregator-server/pom.xml
index c9c6c26b1c..64f67470f9 100644
--- a/epmet-module/data-aggregator/data-aggregator-server/pom.xml
+++ b/epmet-module/data-aggregator/data-aggregator-server/pom.xml
@@ -570,6 +570,9 @@
false
+
+ false
+
true
diff --git a/epmet-module/data-report/data-report-server/pom.xml b/epmet-module/data-report/data-report-server/pom.xml
index 185b224577..43c7bffcae 100644
--- a/epmet-module/data-report/data-report-server/pom.xml
+++ b/epmet-module/data-report/data-report-server/pom.xml
@@ -329,6 +329,9 @@
false
+
+ false
+
true
diff --git a/epmet-module/data-statistical/data-statistical-server/pom.xml b/epmet-module/data-statistical/data-statistical-server/pom.xml
index dba76e743a..714dfa2c01 100644
--- a/epmet-module/data-statistical/data-statistical-server/pom.xml
+++ b/epmet-module/data-statistical/data-statistical-server/pom.xml
@@ -603,6 +603,8 @@
false
+
+ false
false
diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/constant/ProjectConstant.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/constant/ProjectConstant.java
index af4ef095f6..e099b5f89d 100644
--- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/constant/ProjectConstant.java
+++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/constant/ProjectConstant.java
@@ -55,7 +55,7 @@ public interface ProjectConstant {
/**
* 统计数据执行失败日志前缀
*/
- String STATS_FAILED_PREFIX = "统计数据执行失败:%s 客户ID:%s,统计日期:%s";
+ String STATS_FAILED_PREFIX = "统计数据执行失败:%s 客户ID:%s,统计日期:%s,异常信息:%s";
/**
* 自身
diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java
index ca81ce0ba7..a25e563a07 100644
--- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java
+++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java
@@ -50,6 +50,7 @@ import com.epmet.service.org.CustomerGridService;
import com.epmet.service.stats.DimAgencyService;
import com.epmet.service.stats.DimCustomerPartymemberService;
import com.epmet.service.stats.DimCustomerService;
+import com.epmet.util.DimIdGenerator;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@@ -59,6 +60,8 @@ import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
@@ -695,10 +698,22 @@ public class DemoController {
@PostMapping("governRankDaily")
public Result governRankDaily(@RequestBody CustomerIdAndDateIdFormDTO formDTO){
- governRankDataExtractService.extractGridDataDaily(formDTO.getCustomerId(), formDTO.getDateId());
- governRankDataExtractService.extractCommunityDataDaily(formDTO.getCustomerId(), formDTO.getDateId());
- governRankDataExtractService.extractStreetDataDaily(formDTO.getCustomerId(), formDTO.getDateId());
- governRankDataExtractService.extractDistrictDataDaily(formDTO.getCustomerId(), formDTO.getDateId());
+ List dateIds = new ArrayList<>();
+ if ((StringUtils.isBlank(formDTO.getStartDate()) && StringUtils.isBlank(formDTO.getEndDate()))){
+ if (StringUtils.isNotBlank(formDTO.getDateId())){
+ dateIds.add(formDTO.getDateId());
+ }else {
+ dateIds.add(DimIdGenerator.getDateDimId(DateUtils.addDateDays(new Date(), -1)));
+ }
+ }else {
+ dateIds = DateUtils.getDaysBetween(formDTO.getStartDate(), formDTO.getEndDate());
+ }
+ dateIds.forEach(dateId -> {
+ governRankDataExtractService.extractGridDataDaily(formDTO.getCustomerId(), dateId);
+ governRankDataExtractService.extractCommunityDataDaily(formDTO.getCustomerId(), dateId);
+ governRankDataExtractService.extractStreetDataDaily(formDTO.getCustomerId(), dateId);
+ governRankDataExtractService.extractDistrictDataDaily(formDTO.getCustomerId(), dateId);
+ });
return new Result();
}
diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsUserServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsUserServiceImpl.java
index dc082b44ca..bdc1999ff7 100644
--- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsUserServiceImpl.java
+++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsUserServiceImpl.java
@@ -3,6 +3,7 @@ package com.epmet.service.impl;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.constant.NumConstant;
+import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.constant.ProjectConstant;
@@ -29,7 +30,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.Calendar;
@@ -138,7 +138,7 @@ public class StatsUserServiceImpl implements StatsUserService {
UserStatisticalData agencyData = userService.traverseAgencyUser(agencies, date, timeDimension);
userStatisticalService.insertUniquely(agencyData);
} catch (Exception e) {
- log.error(String.format(ProjectConstant.STATS_FAILED_PREFIX, ModuleConstant.EXCEPTION_DING_INTERCEPTOR_PREFIX_AGENCY_USER_STATISTICAL, customerId, new Date().toString(), e.getMessage()));
+ log.error(String.format(ProjectConstant.STATS_FAILED_PREFIX, ModuleConstant.EXCEPTION_DING_INTERCEPTOR_PREFIX_AGENCY_USER_STATISTICAL, customerId, new Date().toString(), ExceptionUtils.getErrorStackTrace(e)));
}
//5.计算网格统计数据、生成唯一性统计数据
@@ -146,7 +146,7 @@ public class StatsUserServiceImpl implements StatsUserService {
UserStatisticalData gridData = userService.traverseGridUser(agencies, date, timeDimension);
userStatisticalService.insertUniquely(gridData);
} catch (Exception e) {
- log.error(String.format(ProjectConstant.STATS_FAILED_PREFIX, ModuleConstant.EXCEPTION_DING_INTERCEPTOR_PREFIX_GRID_USER_STATISTICAL, customerId, new Date().toString(), e.getMessage()));
+ log.error(String.format(ProjectConstant.STATS_FAILED_PREFIX, ModuleConstant.EXCEPTION_DING_INTERCEPTOR_PREFIX_GRID_USER_STATISTICAL, customerId, new Date().toString(), ExceptionUtils.getErrorStackTrace(e)));
}
}
diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/user/impl/UserStatisticalServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/user/impl/UserStatisticalServiceImpl.java
index 50b3ade54f..3e3c0c8b61 100644
--- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/user/impl/UserStatisticalServiceImpl.java
+++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/user/impl/UserStatisticalServiceImpl.java
@@ -6,15 +6,17 @@ import com.epmet.dao.stats.user.*;
import com.epmet.dto.stats.user.*;
import com.epmet.dto.stats.user.result.UserStatisticalData;
import com.epmet.service.stats.user.UserStatisticalService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.ListUtils;
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.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
/**
* @Description
@@ -22,10 +24,10 @@ import java.util.List;
* @Auth wangc
* @Date 2020-06-23 14:27
*/
+@Slf4j
@Service
public class UserStatisticalServiceImpl implements UserStatisticalService {
- private static final Logger logger = LoggerFactory.getLogger(UserStatisticalServiceImpl.class);
@Autowired
private FactParticipationUserAgencyDailyDao participationUserAgencyDailyDao;
@@ -51,104 +53,229 @@ public class UserStatisticalServiceImpl implements UserStatisticalService {
@Autowired
private FactRegUserGridMonthlyDao regUserGridMonthlyDao;
+ @Autowired
+ private ExecutorService executorService;
+
@Override
- @Transactional(rollbackFor = Exception.class)
public void insertUniquely(UserStatisticalData data) {
- if (null == data) return ;
+ if (null == data) {
+ return;
+ }
+ long start = System.currentTimeMillis();
+ if (StringUtils.isBlank(data.getDateId()) || StringUtils.isBlank(data.getMonthId())) {
+ log.error("缺失重要参数:dateId或monthId");
+ return;
+ }
+ CountDownLatch countDownLatch = new CountDownLatch(8);
+ executorService.submit(() -> {
+ try {
+ insertParticipationUserAgencyDaily(data);
+ } catch (Exception e) {
+ log.error("insertParticipationUserAgencyDaily exception", e);
+ } finally {
+ countDownLatch.countDown();
+ }
+ });
+
+ executorService.submit(() -> {
+ try {
+ insertParticipationUserAgencyMonthly(data);
+ } catch (Exception e) {
+ log.error("insertParticipationUserAgencyMonthly exception", e);
+ } finally {
+ countDownLatch.countDown();
+ }
+ });
+
+ executorService.submit(() -> {
+ try {
+ insertParticipationUserGridMonthly(data);
+ } catch (Exception e) {
+ log.error("insertParticipationUserGridMonthly exception", e);
+ } finally {
+ countDownLatch.countDown();
+ }
+ });
+
+ executorService.submit(() -> {
+ try {
+ insertParticipationUserGridDaily(data);
+ } catch (Exception e) {
+ log.error("insertParticipationUserGridDaily exception", e);
+ } finally {
+ countDownLatch.countDown();
+ }
+ });
- if(StringUtils.isBlank(data.getDateId()) || StringUtils.isBlank(data.getMonthId())){
- logger.warn("缺失重要参数:dateId或monthId");
- return ;
+ executorService.submit(() -> {
+ try {
+ insertRegUserAgencyDaily(data);
+ } catch (Exception e) {
+ log.error("insertRegUserAgencyDaily exception", e);
+ } finally {
+ countDownLatch.countDown();
+ }
+ });
+
+ executorService.submit(() -> {
+ try {
+ insertRegUserAgencyMonthly(data);
+ } catch (Exception e) {
+ log.error("insertRegUserAgencyMonthly exception", e);
+ } finally {
+ countDownLatch.countDown();
+ }
+ });
+
+ executorService.submit(() -> {
+ try {
+ insertRegUserGridDaily(data);
+ } catch (Exception e) {
+ log.error("insertRegUserGridDaily exception", e);
+ } finally {
+ countDownLatch.countDown();
+ }
+ });
+
+ executorService.submit(() -> {
+ try {
+ insertRegUserGridMonthly(data);
+ } catch (Exception e) {
+ log.error("insertRegUserGridMonthly exception", e);
+ } finally {
+ countDownLatch.countDown();
+ }
+ });
+
+
+ try {
+ countDownLatch.await();
+ } catch (InterruptedException e) {
+ log.error("countDownLatch exception", e);
}
- if(null != data.getPartiAgencyDailyList() && data.getPartiAgencyDailyList().size() > NumConstant.ZERO){
+ /* insertParticipationUserAgencyDaily(data);
+ insertParticipationUserAgencyMonthly(data);
+ insertParticipationUserGridMonthly(data);
+ insertParticipationUserGridDaily(data);
+ insertRegUserAgencyDaily(data);
+ insertRegUserAgencyMonthly(data);
+ insertRegUserGridDaily(data);
+ insertRegUserGridMonthly(data);*/
+
+ log.warn("执行完毕======总耗时:{}ms,customerId:{}",System.currentTimeMillis()-start, data.getCustomerId());
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ public void insertRegUserGridMonthly(UserStatisticalData data) {
+ if (CollectionUtils.isNotEmpty(data.getRegGridMonthlyList())) {
Integer delNum;
do {
- delNum = participationUserAgencyDailyDao.deleteByParams(data.getDateId(),data.getCustomerId());
- }while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND);
- List> partition = ListUtils.partition(data.getPartiAgencyDailyList(), NumConstant.ONE_HUNDRED);
+ delNum = regUserGridMonthlyDao.deleteByParams(data.getMonthId(), data.getCustomerId());
+ } while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND);
+ List> partition = ListUtils.partition(data.getRegGridMonthlyList(), NumConstant.ONE_HUNDRED);
partition.forEach(p -> {
- participationUserAgencyDailyDao.insertBatch(p);
+ regUserGridMonthlyDao.insertBatch(p);
});
}
+ }
- if(null != data.getPartiAgencyMonthlyList() && data.getPartiAgencyMonthlyList().size() > NumConstant.ZERO){
+ @Transactional(rollbackFor = Exception.class)
+ public void insertRegUserGridDaily(UserStatisticalData data) {
+ if (CollectionUtils.isNotEmpty(data.getRegGridDailyList())) {
Integer delNum;
do {
- delNum = participationUserAgencyMonthlyDao.deleteByParams(data.getMonthId(),data.getCustomerId());
- }while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND);
- List> partition = ListUtils.partition(data.getPartiAgencyMonthlyList(), NumConstant.ONE_HUNDRED);
+ delNum = regUserGridDailyDao.deleteByParams(data.getDateId(), data.getCustomerId());
+ } while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND);
+ List> partition = ListUtils.partition(data.getRegGridDailyList(), NumConstant.ONE_HUNDRED);
partition.forEach(p -> {
- participationUserAgencyMonthlyDao.insertBatch(p);
+ regUserGridDailyDao.insertBatch(p);
});
}
+ }
- if(null != data.getPartiGridMonthlyList() && data.getPartiGridMonthlyList().size() > NumConstant.ZERO){
+ @Transactional(rollbackFor = Exception.class)
+ public void insertRegUserAgencyMonthly(UserStatisticalData data) {
+ if (CollectionUtils.isNotEmpty(data.getRegAgencyMonthlyList())) {
Integer delNum;
do {
- delNum = participationUserGridMonthlyDao.deleteByParams(data.getMonthId(),data.getCustomerId());
- }while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND);
- List> partition = ListUtils.partition(data.getPartiGridMonthlyList(), NumConstant.ONE_HUNDRED);
+ delNum = regUserAgencyMonthlyDao.deleteByParams(data.getMonthId(), data.getCustomerId());
+ } while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND);
+ List> partition = ListUtils.partition(data.getRegAgencyMonthlyList(), NumConstant.ONE_HUNDRED);
partition.forEach(p -> {
- participationUserGridMonthlyDao.insertBatch(p);
+ regUserAgencyMonthlyDao.insertBatch(p);
});
}
+ }
- if(null != data.getPartiGridDailyList() && data.getPartiGridDailyList().size() > NumConstant.ZERO){
+ @Transactional(rollbackFor = Exception.class)
+ public void insertRegUserAgencyDaily(UserStatisticalData data) {
+ if (CollectionUtils.isNotEmpty(data.getRegAgencyDailyList())) {
Integer delNum;
do {
- delNum = participationUserGridDailyDao.deleteByParams(data.getDateId(),data.getCustomerId());
- }while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND);
- List> partition = ListUtils.partition(data.getPartiGridDailyList(), NumConstant.ONE_HUNDRED);
+ delNum = regUserAgencyDailyDao.deleteByParams(data.getDateId(), data.getCustomerId());
+ } while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND);
+ List> partition = ListUtils.partition(data.getRegAgencyDailyList(), NumConstant.ONE_HUNDRED);
partition.forEach(p -> {
- participationUserGridDailyDao.insertBatch(p);
+ regUserAgencyDailyDao.insertBatch(p);
});
}
+ }
- if(null != data.getRegAgencyDailyList() && data.getRegAgencyDailyList().size() > NumConstant.ZERO){
+ @Transactional(rollbackFor = Exception.class)
+ public void insertParticipationUserGridDaily(UserStatisticalData data) {
+ if (CollectionUtils.isNotEmpty(data.getPartiGridDailyList())) {
Integer delNum;
do {
- delNum = regUserAgencyDailyDao.deleteByParams(data.getDateId(),data.getCustomerId());
- }while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND);
- List> partition = ListUtils.partition(data.getRegAgencyDailyList(), NumConstant.ONE_HUNDRED);
+ delNum = participationUserGridDailyDao.deleteByParams(data.getDateId(), data.getCustomerId());
+ } while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND);
+ List> partition = ListUtils.partition(data.getPartiGridDailyList(), NumConstant.ONE_HUNDRED);
partition.forEach(p -> {
- regUserAgencyDailyDao.insertBatch(p);
+ participationUserGridDailyDao.insertBatch(p);
});
}
+ }
- if(null != data.getRegAgencyMonthlyList() && data.getRegAgencyMonthlyList().size() > NumConstant.ZERO){
+ @Transactional(rollbackFor = Exception.class)
+ public void insertParticipationUserGridMonthly(UserStatisticalData data) {
+ if (CollectionUtils.isNotEmpty(data.getPartiGridMonthlyList())) {
Integer delNum;
do {
- delNum = regUserAgencyMonthlyDao.deleteByParams(data.getMonthId(),data.getCustomerId());
- }while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND);
- List> partition = ListUtils.partition(data.getRegAgencyMonthlyList(), NumConstant.ONE_HUNDRED);
+ delNum = participationUserGridMonthlyDao.deleteByParams(data.getMonthId(), data.getCustomerId());
+ } while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND);
+ List> partition = ListUtils.partition(data.getPartiGridMonthlyList(), NumConstant.ONE_HUNDRED);
partition.forEach(p -> {
- regUserAgencyMonthlyDao.insertBatch(p);
+ participationUserGridMonthlyDao.insertBatch(p);
});
}
+ }
- if(null != data.getRegGridDailyList() && data.getRegGridDailyList().size() > NumConstant.ZERO){
+ @Transactional(rollbackFor = Exception.class)
+ public void insertParticipationUserAgencyMonthly(UserStatisticalData data) {
+ if (CollectionUtils.isNotEmpty(data.getPartiAgencyMonthlyList())) {
Integer delNum;
do {
- delNum = regUserGridDailyDao.deleteByParams(data.getDateId(),data.getCustomerId());
- }while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND);
- List> partition = ListUtils.partition(data.getRegGridDailyList(), NumConstant.ONE_HUNDRED);
+ delNum = participationUserAgencyMonthlyDao.deleteByParams(data.getMonthId(), data.getCustomerId());
+ } while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND);
+ List> partition = ListUtils.partition(data.getPartiAgencyMonthlyList(), NumConstant.ONE_HUNDRED);
partition.forEach(p -> {
- regUserGridDailyDao.insertBatch(p);
+ participationUserAgencyMonthlyDao.insertBatch(p);
});
}
+ }
- if(null != data.getRegGridMonthlyList() && data.getRegGridMonthlyList().size() > NumConstant.ZERO){
+ @Transactional(rollbackFor = Exception.class)
+ public void insertParticipationUserAgencyDaily(UserStatisticalData data) {
+ if (CollectionUtils.isNotEmpty(data.getPartiAgencyDailyList())) {
Integer delNum;
do {
- delNum = regUserGridMonthlyDao.deleteByParams(data.getMonthId(),data.getCustomerId());
- }while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND);
- List> partition = ListUtils.partition(data.getRegGridMonthlyList(), NumConstant.ONE_HUNDRED);
+ delNum = participationUserAgencyDailyDao.deleteByParams(data.getDateId(), data.getCustomerId());
+ } while (delNum > NumConstant.ZERO && delNum == NumConstant.ONE_THOUSAND);
+ List> partition = ListUtils.partition(data.getPartiAgencyDailyList(), NumConstant.ONE_HUNDRED);
partition.forEach(p -> {
- regUserGridMonthlyDao.insertBatch(p);
+ participationUserAgencyDailyDao.insertBatch(p);
});
}
-
}
}
diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/UserServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/UserServiceImpl.java
index c154ead20b..95c7c333ff 100644
--- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/UserServiceImpl.java
+++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/UserServiceImpl.java
@@ -152,7 +152,7 @@ public class UserServiceImpl implements UserService {
isParty.set(true);
}
});
- result.put(userId,isParty.get() == true ? NumConstant.ONE : NumConstant.ZERO);
+ result.put(userId, isParty.get() ? NumConstant.ONE : NumConstant.ZERO);
});
}
for (String userId : userIds) {
@@ -932,8 +932,8 @@ public class UserServiceImpl implements UserService {
}
regGridD.setPartymemberProportion(regGridD.getRegTotal() == NumConstant.ZERO ? BigDecimal.ZERO : new BigDecimal(numberFormat.format((float)regGridD.getPartymemberTotal()/(float)regGridD.getRegTotal())));
regGridD.setWarmHeartedProportion(regGridD.getRegTotal() == NumConstant.ZERO ? BigDecimal.ZERO : new BigDecimal(numberFormat.format((float)regGridD.getWarmHeartedTotal()/(float)regGridD.getRegTotal())));
- partiGridD.setPartymemberProportion(partiGridD.getPartymemberTotal() == NumConstant.ZERO ? BigDecimal.ZERO : new BigDecimal(numberFormat.format((float)partiGridD.getPartymemberTotal()/(float)partiGridD.getRegTotal() )));
- partiGridD.setWarmHeartedProportion(partiGridD.getPartymemberTotal() == NumConstant.ZERO ? BigDecimal.ZERO : new BigDecimal(numberFormat.format((float)partiGridD.getWarmHeartedTotal()/(float)partiGridD.getRegTotal() )));
+ partiGridD.setPartymemberProportion(partiGridD.getRegTotal() == NumConstant.ZERO ? BigDecimal.ZERO : new BigDecimal(numberFormat.format((float)partiGridD.getPartymemberTotal()/(float)partiGridD.getRegTotal() )));
+ partiGridD.setWarmHeartedProportion(partiGridD.getRegTotal() == NumConstant.ZERO ? BigDecimal.ZERO : new BigDecimal(numberFormat.format((float)partiGridD.getWarmHeartedTotal()/(float)partiGridD.getRegTotal() )));
regGridM.setPartymemberProportion(regGridD.getPartymemberProportion());
regGridM.setWarmHeartedProportion(regGridD.getWarmHeartedProportion());
partiGridM.setPartymemberProportion(partiGridD.getPartymemberProportion());
diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenGovernRankDataDailyDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenGovernRankDataDailyDao.xml
index b738c0f217..88f2b71e92 100644
--- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenGovernRankDataDailyDao.xml
+++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenGovernRankDataDailyDao.xml
@@ -27,7 +27,7 @@
delete from screen_govern_rank_data_daily
where CUSTOMER_ID = #{customerId}
- AND DATE_ID <= #{dateId}
+ AND DATE_ID = #{dateId}
and ORG_TYPE=#{orgType}
@@ -91,4 +91,4 @@
-
\ No newline at end of file
+
diff --git a/epmet-module/epmet-activiti/epmet-activiti-server/pom.xml b/epmet-module/epmet-activiti/epmet-activiti-server/pom.xml
index 09de8b0f25..b1218dbe2c 100644
--- a/epmet-module/epmet-activiti/epmet-activiti-server/pom.xml
+++ b/epmet-module/epmet-activiti/epmet-activiti-server/pom.xml
@@ -277,6 +277,8 @@
false
+
+ false
true
diff --git a/epmet-module/epmet-common-service/common-service-server/pom.xml b/epmet-module/epmet-common-service/common-service-server/pom.xml
index 06a966a303..4e27c15d03 100644
--- a/epmet-module/epmet-common-service/common-service-server/pom.xml
+++ b/epmet-module/epmet-common-service/common-service-server/pom.xml
@@ -260,6 +260,8 @@
false
+
+ false
true
diff --git a/epmet-module/epmet-ext/epmet-ext-server/pom.xml b/epmet-module/epmet-ext/epmet-ext-server/pom.xml
index faf7cb0922..bebc41ab98 100644
--- a/epmet-module/epmet-ext/epmet-ext-server/pom.xml
+++ b/epmet-module/epmet-ext/epmet-ext-server/pom.xml
@@ -339,6 +339,8 @@
false
+
+ false
true
diff --git a/epmet-module/epmet-heart/epmet-heart-server/pom.xml b/epmet-module/epmet-heart/epmet-heart-server/pom.xml
index ac1f514cec..b5b36b0ee1 100644
--- a/epmet-module/epmet-heart/epmet-heart-server/pom.xml
+++ b/epmet-module/epmet-heart/epmet-heart-server/pom.xml
@@ -263,7 +263,7 @@
false
- true
+ false
true
https://epmet-open.elinkservice.cn/api/epmetscan/api
diff --git a/epmet-module/epmet-job/epmet-job-server/pom.xml b/epmet-module/epmet-job/epmet-job-server/pom.xml
index 1731ac910a..e29f5759e5 100644
--- a/epmet-module/epmet-job/epmet-job-server/pom.xml
+++ b/epmet-module/epmet-job/epmet-job-server/pom.xml
@@ -245,6 +245,9 @@
false
+
+ false
+
true
diff --git a/epmet-module/epmet-job/epmet-job-server/src/main/resources/bootstrap.yml b/epmet-module/epmet-job/epmet-job-server/src/main/resources/bootstrap.yml
index 97a801f969..e0cbb99af4 100644
--- a/epmet-module/epmet-job/epmet-job-server/src/main/resources/bootstrap.yml
+++ b/epmet-module/epmet-job/epmet-job-server/src/main/resources/bootstrap.yml
@@ -102,6 +102,7 @@ feign:
config:
default:
loggerLevel: FULL
+ readTimeout: 600000
okhttp:
enabled: true
@@ -115,10 +116,10 @@ hystrix:
execution:
isolation:
thread:
- timeoutInMilliseconds: 90000 #缺省为1000
+ timeoutInMilliseconds: 600000 #缺省为1000
ribbon:
- ReadTimeout: 300000
+ ReadTimeout: 600000
ConnectTimeout: 300000
dingTalk:
diff --git a/epmet-module/epmet-message/epmet-message-server/pom.xml b/epmet-module/epmet-message/epmet-message-server/pom.xml
index 5c9768296a..87d40ea5fb 100644
--- a/epmet-module/epmet-message/epmet-message-server/pom.xml
+++ b/epmet-module/epmet-message/epmet-message-server/pom.xml
@@ -331,6 +331,9 @@
false
+
+ false
+
true
diff --git a/epmet-module/epmet-oss/epmet-oss-server/pom.xml b/epmet-module/epmet-oss/epmet-oss-server/pom.xml
index 3a0f9cd454..e8b08e97cc 100644
--- a/epmet-module/epmet-oss/epmet-oss-server/pom.xml
+++ b/epmet-module/epmet-oss/epmet-oss-server/pom.xml
@@ -259,6 +259,8 @@
false
+
+ false
true
diff --git a/epmet-module/epmet-point/epmet-point-server/pom.xml b/epmet-module/epmet-point/epmet-point-server/pom.xml
index 620bad9d41..1a4f6eb6f9 100644
--- a/epmet-module/epmet-point/epmet-point-server/pom.xml
+++ b/epmet-module/epmet-point/epmet-point-server/pom.xml
@@ -283,6 +283,8 @@
false
+
+ false
true
diff --git a/epmet-module/epmet-third/epmet-third-server/pom.xml b/epmet-module/epmet-third/epmet-third-server/pom.xml
index 6090c1a743..a885af4c93 100644
--- a/epmet-module/epmet-third/epmet-third-server/pom.xml
+++ b/epmet-module/epmet-third/epmet-third-server/pom.xml
@@ -319,6 +319,8 @@
false
+
+ false
true
diff --git a/epmet-module/gov-access/gov-access-server/pom.xml b/epmet-module/gov-access/gov-access-server/pom.xml
index 299c03e7ac..28e033fa3b 100644
--- a/epmet-module/gov-access/gov-access-server/pom.xml
+++ b/epmet-module/gov-access/gov-access-server/pom.xml
@@ -238,6 +238,8 @@
false
+
+ false
true
diff --git a/epmet-module/gov-grid/gov-grid-server/pom.xml b/epmet-module/gov-grid/gov-grid-server/pom.xml
index c4c7c2146b..0e81d0360b 100644
--- a/epmet-module/gov-grid/gov-grid-server/pom.xml
+++ b/epmet-module/gov-grid/gov-grid-server/pom.xml
@@ -218,6 +218,8 @@
false
+
+ false
true
diff --git a/epmet-module/gov-issue/gov-issue-server/pom.xml b/epmet-module/gov-issue/gov-issue-server/pom.xml
index f25c9fea6a..a28e3463a8 100644
--- a/epmet-module/gov-issue/gov-issue-server/pom.xml
+++ b/epmet-module/gov-issue/gov-issue-server/pom.xml
@@ -291,6 +291,8 @@
false
+
+ false
true
https://epmet-open.elinkservice.cn/api/epmetscan/api
diff --git a/epmet-module/gov-mine/gov-mine-server/pom.xml b/epmet-module/gov-mine/gov-mine-server/pom.xml
index 0f5266756d..b8206f3b95 100644
--- a/epmet-module/gov-mine/gov-mine-server/pom.xml
+++ b/epmet-module/gov-mine/gov-mine-server/pom.xml
@@ -232,6 +232,8 @@
false
+
+ false
diff --git a/epmet-module/gov-org/gov-org-server/pom.xml b/epmet-module/gov-org/gov-org-server/pom.xml
index c0b1e136a9..2bc10abf21 100644
--- a/epmet-module/gov-org/gov-org-server/pom.xml
+++ b/epmet-module/gov-org/gov-org-server/pom.xml
@@ -293,6 +293,8 @@
false
+
+ false
true
diff --git a/epmet-module/gov-project/gov-project-server/pom.xml b/epmet-module/gov-project/gov-project-server/pom.xml
index ba501c15bf..f49d89d16a 100644
--- a/epmet-module/gov-project/gov-project-server/pom.xml
+++ b/epmet-module/gov-project/gov-project-server/pom.xml
@@ -286,6 +286,8 @@
false
+
+ false
true
https://epmet-open.elinkservice.cn/api/epmetscan/api
diff --git a/epmet-module/gov-voice/gov-voice-server/pom.xml b/epmet-module/gov-voice/gov-voice-server/pom.xml
index 3435fb2bfb..0403af0463 100644
--- a/epmet-module/gov-voice/gov-voice-server/pom.xml
+++ b/epmet-module/gov-voice/gov-voice-server/pom.xml
@@ -249,6 +249,8 @@
false
+
+ false
true
https://epmet-open.elinkservice.cn/api/epmetscan/api
diff --git a/epmet-module/oper-access/oper-access-server/pom.xml b/epmet-module/oper-access/oper-access-server/pom.xml
index e4dd1d870a..147992b041 100644
--- a/epmet-module/oper-access/oper-access-server/pom.xml
+++ b/epmet-module/oper-access/oper-access-server/pom.xml
@@ -234,6 +234,8 @@
false
+
+ false
true
diff --git a/epmet-module/oper-crm/oper-crm-server/pom.xml b/epmet-module/oper-crm/oper-crm-server/pom.xml
index 7bf8e220de..c058e133cb 100644
--- a/epmet-module/oper-crm/oper-crm-server/pom.xml
+++ b/epmet-module/oper-crm/oper-crm-server/pom.xml
@@ -283,7 +283,7 @@
false
- true
+ false
true
diff --git a/epmet-module/oper-customize/oper-customize-server/pom.xml b/epmet-module/oper-customize/oper-customize-server/pom.xml
index c7e92b84ff..8c68930e9c 100644
--- a/epmet-module/oper-customize/oper-customize-server/pom.xml
+++ b/epmet-module/oper-customize/oper-customize-server/pom.xml
@@ -266,6 +266,8 @@
false
+
+ false
true
diff --git a/epmet-module/resi-group/resi-group-server/pom.xml b/epmet-module/resi-group/resi-group-server/pom.xml
index ed8dd00950..117e26696c 100644
--- a/epmet-module/resi-group/resi-group-server/pom.xml
+++ b/epmet-module/resi-group/resi-group-server/pom.xml
@@ -352,6 +352,10 @@
false
+
+
+ false
+
true
diff --git a/epmet-module/resi-guide/resi-guide-server/pom.xml b/epmet-module/resi-guide/resi-guide-server/pom.xml
index 4cf6f0f33f..94b83622e0 100644
--- a/epmet-module/resi-guide/resi-guide-server/pom.xml
+++ b/epmet-module/resi-guide/resi-guide-server/pom.xml
@@ -256,6 +256,9 @@
false
+
+ false
+
true
diff --git a/epmet-module/resi-hall/resi-hall-server/pom.xml b/epmet-module/resi-hall/resi-hall-server/pom.xml
index a8083d10de..299e457a6d 100644
--- a/epmet-module/resi-hall/resi-hall-server/pom.xml
+++ b/epmet-module/resi-hall/resi-hall-server/pom.xml
@@ -201,6 +201,8 @@
false
+
+ false
true
diff --git a/epmet-module/resi-home/resi-home-server/pom.xml b/epmet-module/resi-home/resi-home-server/pom.xml
index 2991ddd0a7..23a2239cac 100644
--- a/epmet-module/resi-home/resi-home-server/pom.xml
+++ b/epmet-module/resi-home/resi-home-server/pom.xml
@@ -222,6 +222,10 @@
false
+
+
+ false
+
https://oapi.dingtalk.com/robot/send?access_token=a5f66c3374b1642fe2142dbf56d5997e280172d4e8f2b546c9423a68c82ece6c
diff --git a/epmet-module/resi-mine/resi-mine-server/pom.xml b/epmet-module/resi-mine/resi-mine-server/pom.xml
index 3dc61e993e..9101e0841f 100644
--- a/epmet-module/resi-mine/resi-mine-server/pom.xml
+++ b/epmet-module/resi-mine/resi-mine-server/pom.xml
@@ -238,6 +238,10 @@
false
+
+
+ false
+
https://oapi.dingtalk.com/robot/send?access_token=a5f66c3374b1642fe2142dbf56d5997e280172d4e8f2b546c9423a68c82ece6c
diff --git a/epmet-module/resi-partymember/resi-partymember-server/pom.xml b/epmet-module/resi-partymember/resi-partymember-server/pom.xml
index 0921d16762..f52ffd6714 100644
--- a/epmet-module/resi-partymember/resi-partymember-server/pom.xml
+++ b/epmet-module/resi-partymember/resi-partymember-server/pom.xml
@@ -265,6 +265,9 @@
false
+
+ false
+
true
diff --git a/epmet-module/resi-voice/resi-voice-server/pom.xml b/epmet-module/resi-voice/resi-voice-server/pom.xml
index 04aa056d32..0fc30b2de3 100644
--- a/epmet-module/resi-voice/resi-voice-server/pom.xml
+++ b/epmet-module/resi-voice/resi-voice-server/pom.xml
@@ -203,6 +203,9 @@
false
+
+ false
+
diff --git a/epmet-openapi/epmet-openapi-scan/pom.xml b/epmet-openapi/epmet-openapi-scan/pom.xml
index f038ac9ec4..3c3f385f5e 100644
--- a/epmet-openapi/epmet-openapi-scan/pom.xml
+++ b/epmet-openapi/epmet-openapi-scan/pom.xml
@@ -204,6 +204,9 @@
false
+
+ false
+
diff --git a/epmet-user/epmet-user-server/pom.xml b/epmet-user/epmet-user-server/pom.xml
index 281e8b3efe..79c3f816af 100644
--- a/epmet-user/epmet-user-server/pom.xml
+++ b/epmet-user/epmet-user-server/pom.xml
@@ -293,6 +293,9 @@
false
+
+ false
+
true
https://epmet-open.elinkservice.cn/api/epmetscan/api
diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/StaffPatrolController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/StaffPatrolController.java
index 66a82f226a..53933da2ae 100644
--- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/StaffPatrolController.java
+++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/StaffPatrolController.java
@@ -2,6 +2,7 @@ package com.epmet.controller;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.annotation.RequirePermission;
+import com.epmet.commons.tools.aop.NoRepeatSubmit;
import com.epmet.commons.tools.enums.RequirePermissionEnum;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
@@ -62,6 +63,7 @@ public class StaffPatrolController {
* @author zhaoqifeng
* @date 2021/6/7 16:46
*/
+ @NoRepeatSubmit
@PostMapping("startpatrol")
@RequirePermission(requirePermission = RequirePermissionEnum.WORK_GRASSROOT_GOVERN_PATROL)
public Result startPatrol(@LoginUser TokenDto tokenDto, @RequestBody StartPatrolFormDTO formDTO) {
diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBaseInfoServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBaseInfoServiceImpl.java
index acb101464e..0f4d76d821 100644
--- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBaseInfoServiceImpl.java
+++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBaseInfoServiceImpl.java
@@ -152,6 +152,9 @@ public class UserBaseInfoServiceImpl extends BaseServiceImpl 1){
+ logger.error("queryUserBaseInfoFromCache userId:{} exist more than one record",userId);
+ }
UserBaseInfoResultDTO userBaseInfoResultDTO = userBaseInfoResultDTOS.get(0);
logger.debug("getUserResiInfoDTO userId:{},result:{}", userId,JSON.toJSONString(userBaseInfoResultDTO));
return userBaseInfoResultDTO;