diff --git a/epmet-commons/epmet-commons-tools/pom.xml b/epmet-commons/epmet-commons-tools/pom.xml
index 258b1a09b2..d8073505ce 100644
--- a/epmet-commons/epmet-commons-tools/pom.xml
+++ b/epmet-commons/epmet-commons-tools/pom.xml
@@ -18,7 +18,7 @@
1.3.3
2.6
4.6.1
- 4.1.0
+ 4.1.3
2.9.9
1.2.60
2.8.6
@@ -95,6 +95,11 @@
easypoi-web
${easypoi.version}
+
+ cn.afterturn
+ easypoi-annotation
+ ${easypoi.version}
+
joda-time
joda-time
diff --git a/epmet-gateway/src/main/java/com/epmet/auth/ExtAppTakeTokenAuthProcessor.java b/epmet-gateway/src/main/java/com/epmet/auth/ExtAppTakeTokenAuthProcessor.java
index 6b527dc074..dcede2b1d0 100644
--- a/epmet-gateway/src/main/java/com/epmet/auth/ExtAppTakeTokenAuthProcessor.java
+++ b/epmet-gateway/src/main/java/com/epmet/auth/ExtAppTakeTokenAuthProcessor.java
@@ -1,7 +1,6 @@
package com.epmet.auth;
import com.epmet.commons.security.jwt.JwtUtils;
-import com.epmet.commons.security.sign.openapi.OpenApiSignUtils;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.redis.RedisKeys;
@@ -12,7 +11,6 @@ import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
import com.epmet.openapi.constant.InClusterHeaderKeys;
import com.epmet.openapi.constant.RequestParamKeys;
import io.jsonwebtoken.Claims;
-import io.jsonwebtoken.Jwts;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.server.reactive.ServerHttpRequest;
@@ -79,11 +77,11 @@ public class ExtAppTakeTokenAuthProcessor extends ExtAppAuthProcessor {
EpmetCommonServiceOpenFeignClient commonService = SpringContextUtils.getBean(EpmetCommonServiceOpenFeignClient.class);
Result result = commonService.getSecret(appId);
if (result == null || !result.success()) {
- throw new RenException("fetchToken方式的外部应用认证,获取secret失败");
+ throw new RenException("TakeToken方式的外部应用认证,获取secret失败");
}
String secret = result.getData();
if (StringUtils.isBlank(secret)) {
- throw new RenException("fetchToken方式的外部应用认证,获取secret失败");
+ throw new RenException("TakeToken方式的外部应用认证,获取secret失败");
}
return secret;
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 c9a19fa8b8..6513d27f04 100644
--- a/epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java
+++ b/epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java
@@ -5,6 +5,7 @@ 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;
@@ -26,13 +27,13 @@ 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.Arrays;
-import java.util.List;
+import java.util.*;
/**
* app接口权限过滤器
@@ -43,152 +44,197 @@ import java.util.List;
@Component("CpAuth")
public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory {
- private Logger logger = LoggerFactory.getLogger(getClass());
-
- @Autowired
- private InternalAuthProcessor internalAuthProcessor;
-
- @Autowired
- private ExternalAuthProcessor externalAuthProcessor;
-
- @Override
- public List shortcutFieldOrder() {
- return Arrays.asList("enabled");
- }
-
- public CpAuthGatewayFilterFactory() {
- super(CpAuthConfig.class);
- }
-
- @Override
- public GatewayFilter apply(CpAuthConfig config) {
- return (exchange, chain) -> {
- if (!config.isEnabled()) {
- return chain.filter(exchange);
- }
-
- //添加流水号
- ServerHttpRequest request = exchange.getRequest();
- List tranSerials = request.getHeaders().get(AppClientConstant.TRANSACTION_SERIAL_KEY);
- if (CollectionUtils.isEmpty(tranSerials) || StringUtils.isBlank(tranSerials.get(0))) {
- request.mutate().header(AppClientConstant.TRANSACTION_SERIAL_KEY, new String[]{getTransactionSerial()});
- }
-
- String authType = getAuthType(request);
- String requestUri = request.getPath().pathWithinApplication().value();
-
- logger.info("CpAuthGatewayFilterFactory当前requestUri=[" + requestUri + "],CpAuthGatewayFilterFactory拦截成功,客户端Id:{}", IpUtils.getClientIp(request));
- 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) {
- 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);
- };
- }
-
- /**
- * 判断需要执行的认证方式(内部应用认证还是外部应用认证)
- * @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;
- }
-
- /**
- * 获取请求头
- * @param request
- * @return
- */
- private String getHeader(ServerHttpRequest request, String headerName) {
- HttpHeaders headers = request.getHeaders();
- return headers.getFirst(headerName);
- }
-
- /**
- * 获取事务流水号
- * @return
- */
- public static String getTransactionSerial() {
- String[] letterPool = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n"
- , "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
-
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < 2; i++) {
- sb.append(letterPool[(int) (Math.random() * 25)]);
- }
-
- sb.append(System.currentTimeMillis());
- return sb.toString();
- }
-
- public static class CpAuthConfig {
-
- /**
- * 控制是否开启认证
- */
- private boolean enabled;
-
- public CpAuthConfig() {
- }
-
- public boolean isEnabled() {
- return enabled;
- }
-
- public void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
- }
-
- 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));
- }
+ private Logger logger = LoggerFactory.getLogger(getClass());
+
+ @Autowired
+ private InternalAuthProcessor internalAuthProcessor;
+
+ @Autowired
+ private ExternalAuthProcessor externalAuthProcessor;
+
+ @Override
+ public List shortcutFieldOrder() {
+ return Arrays.asList("enabled");
+ }
+
+ public CpAuthGatewayFilterFactory() {
+ super(CpAuthConfig.class);
+ }
+
+ @Override
+ public GatewayFilter apply(CpAuthConfig config) {
+ return (exchange, chain) -> {
+ if (!config.isEnabled()) {
+ return chain.filter(exchange);
+ }
+
+ //1.添加流水号
+ ServerHttpRequest request = exchange.getRequest();
+ List tranSerials = request.getHeaders().get(AppClientConstant.TRANSACTION_SERIAL_KEY);
+ if (CollectionUtils.isEmpty(tranSerials) || StringUtils.isBlank(tranSerials.get(0))) {
+ request.mutate().header(AppClientConstant.TRANSACTION_SERIAL_KEY, new String[]{getTransactionSerial()});
+ }
+
+ //2.获取请求路径,参数
+ String requestUri = request.getPath().pathWithinApplication().value();
+ MultiValueMap queryParams = request.getQueryParams();
+ String queryParamsStr = convertQueryParams2String(queryParams);
+ logger.info("CpAuthGatewayFilterFactory当前requestUri=[" + requestUri.concat(queryParamsStr) + "],CpAuthGatewayFilterFactory拦截成功,客户端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认证出错,错误信息:{}", ExceptionUtils.getErrorStackTrace(e));
+ return response(exchange, new Result<>().error(e.getCode(), e.getMessage()));
+ } catch (Exception e) {
+ logger.error("CpAuthGatewayFilterFactory认证出错,错误信息:{}", ExceptionUtils.getErrorStackTrace(e));
+ return response(exchange, new Result<>().error(e.getMessage()));
+ }
+
+ return chain.filter(exchange);
+ };
+ }
+
+ /**
+ * @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;
+ }
+
+ /**
+ * 获取请求头
+ *
+ * @param request
+ * @return
+ */
+ private String getHeader(ServerHttpRequest request, String headerName) {
+ HttpHeaders headers = request.getHeaders();
+ return headers.getFirst(headerName);
+ }
+
+ /**
+ * 获取事务流水号
+ *
+ * @return
+ */
+ public static String getTransactionSerial() {
+ String[] letterPool = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n"
+ , "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
+
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < 2; i++) {
+ sb.append(letterPool[(int) (Math.random() * 25)]);
+ }
+
+ sb.append(System.currentTimeMillis());
+ return sb.toString();
+ }
+
+ public static class CpAuthConfig {
+
+ /**
+ * 控制是否开启认证
+ */
+ private boolean enabled;
+
+ public CpAuthConfig() {
+ }
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+ }
+
+ 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));
+ }
}
diff --git a/epmet-gateway/src/main/resources/bootstrap.yml b/epmet-gateway/src/main/resources/bootstrap.yml
index dce0862481..23c16efb82 100644
--- a/epmet-gateway/src/main/resources/bootstrap.yml
+++ b/epmet-gateway/src/main/resources/bootstrap.yml
@@ -481,6 +481,7 @@ epmet:
- /message/template/**
- /data/aggregator/project/projectdistribution
- /data/aggregator/epmetuser/open-staffdetail
+ - /data/aggregator/pub/**
#stats external包下 公共的类只外部暴露方法 纯外部使用的 暴漏整个
- /data/stats/statsuser/gm-uploadevent
- /data/stats/statsuser/gm-uploaddata
diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/BaseDataFormDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/BaseDataFormDTO.java
index 1eae69043b..cbfa41f767 100644
--- a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/BaseDataFormDTO.java
+++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/BaseDataFormDTO.java
@@ -28,6 +28,7 @@ public class BaseDataFormDTO implements Serializable {
private String dateId;
private String startDateId;
private String endDateId;
+ private String agencyName;
public interface BaseData extends CustomerClientShowGroup{}
public interface AgencyIdAndLevel extends CustomerClientShowGroup{}
diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/SubTopicAndGroupFormDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/SubTopicAndGroupFormDTO.java
deleted file mode 100644
index 7a64b567d7..0000000000
--- a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/SubTopicAndGroupFormDTO.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.epmet.dataaggre.dto.datastats.form;
-
-import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
-import lombok.Data;
-
-import javax.validation.constraints.NotBlank;
-import java.io.Serializable;
-
-/**
- * @Description 对外接口-查询下级话题和小组数-接口入参
- * @Auth sun
- */
-@Data
-public class SubTopicAndGroupFormDTO implements Serializable {
-
- private static final long serialVersionUID = -3381286960911634231L;
- /**
- * 当前组织id;从组织树取
- */
- @NotBlank(message = "组织ID不能为空", groups = SubTopicAndGroupFormDTO.Agency.class)
- private String agencyId;
- /**
- * 当前组织级别;从组织树取
- * 机关级别(社区级:community,
- * 乡(镇、街道)级:street,
- * 区县级: district,
- * 市级: city
- * 省级:province)
- */
- @NotBlank(message = "组织级别不能为空", groups = SubTopicAndGroupFormDTO.Agency.class)
- private String agencyLevel;
- /**
- * 日维度Id【yyyyMMdd eg:20210808,默认前一天】
- */
- private String dateId;
- public interface Agency extends CustomerClientShowGroup{}
-
-}
diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/SubUserTotalFormDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/SubUserTotalFormDTO.java
deleted file mode 100644
index f97af0583e..0000000000
--- a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/SubUserTotalFormDTO.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.epmet.dataaggre.dto.datastats.form;
-
-import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
-import lombok.Data;
-
-import javax.validation.constraints.NotBlank;
-import java.io.Serializable;
-
-/**
- * @Description 对外接口-查询下级用户党员数-接口入参
- * @Auth sun
- */
-@Data
-public class SubUserTotalFormDTO implements Serializable {
-
- private static final long serialVersionUID = -3381286960911634231L;
- /**
- * 当前组织id;从组织树取
- */
- @NotBlank(message = "组织ID不能为空", groups = SubUserTotalFormDTO.Agency.class)
- private String agencyId;
- /**
- * 当前组织级别;从组织树取
- * 机关级别(社区级:community,
- * 乡(镇、街道)级:street,
- * 区县级: district,
- * 市级: city
- * 省级:province)
- */
- @NotBlank(message = "组织级别不能为空", groups = SubUserTotalFormDTO.Agency.class)
- private String agencyLevel;
- /**
- * 日维度Id【yyyyMMdd eg:20210808,默认前一天】
- */
- private String dateId;
- public interface Agency extends CustomerClientShowGroup{}
-
-}
diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/SubTopicAndGroupResultDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/SubTopicAndGroupResultDTO.java
index 0b76a3d2a1..3210cf7b8c 100644
--- a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/SubTopicAndGroupResultDTO.java
+++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/SubTopicAndGroupResultDTO.java
@@ -19,5 +19,6 @@ public class SubTopicAndGroupResultDTO implements Serializable {
private Integer topicTotal = 0;
//小组总数
private Integer groupTotal = 0;
+ private Integer sort = 1;
}
diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/SubUserTotalResultDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/SubUserTotalResultDTO.java
index 2f87e63143..aea6f6c0a7 100644
--- a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/SubUserTotalResultDTO.java
+++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/SubUserTotalResultDTO.java
@@ -19,5 +19,9 @@ public class SubUserTotalResultDTO implements Serializable {
private Integer userTotal = 0;
//党员总数
private Integer partyMemberTotal = 0;
+ /**
+ * 排名
+ */
+ private Integer sort = 1;
}
diff --git a/epmet-module/data-aggregator/data-aggregator-server/pom.xml b/epmet-module/data-aggregator/data-aggregator-server/pom.xml
index 6c2a9d38c6..0f216610be 100644
--- a/epmet-module/data-aggregator/data-aggregator-server/pom.xml
+++ b/epmet-module/data-aggregator/data-aggregator-server/pom.xml
@@ -91,6 +91,17 @@
true
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+
+
+ xls
+ xlsx
+
+
+
${project.basedir}/src/main/java
diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/aspect/RequestLogAspect.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/aspect/RequestLogAspect.java
index 34cf9f3d69..5bba1edfb0 100644
--- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/aspect/RequestLogAspect.java
+++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/aspect/RequestLogAspect.java
@@ -21,7 +21,7 @@ import javax.servlet.http.HttpServletRequest;
public class RequestLogAspect extends BaseRequestLogAspect {
@Override
- @Around(value = "execution(* com.epmet.dataaggre.controller.*Controller.*(..)) ")
+ @Around(value = "execution(* com.epmet.dataaggre.controller..*Controller.*(..)) ")
public Object proceed(ProceedingJoinPoint point) throws Throwable {
return super.proceed(point, getRequest());
}
diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/pub/PubController.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/pub/PubController.java
index 2d6b0fa999..8a0c8ae877 100644
--- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/pub/PubController.java
+++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/pub/PubController.java
@@ -1,5 +1,9 @@
package com.epmet.dataaggre.controller.pub;
+import cn.afterturn.easypoi.entity.vo.TemplateExcelConstants;
+import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
+import cn.afterturn.easypoi.view.EasypoiTemplateExcelView;
+import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dataaggre.dto.datastats.form.BaseDataFormDTO;
@@ -8,16 +12,19 @@ import com.epmet.dataaggre.dto.datastats.result.SubTopicAndGroupResultDTO;
import com.epmet.dataaggre.dto.datastats.result.SubUserTotalResultDTO;
import com.epmet.dataaggre.dto.datastats.result.WorkFactResultDTO;
import com.epmet.dataaggre.service.datastats.DataStatsService;
-import lombok.extern.log4j.Log4j;
+import lombok.extern.slf4j.Slf4j;
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 org.springframework.web.servlet.ModelAndView;
-import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
+import java.util.Date;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* 小程序相关配置,可以放在这,目前只放了footbar
@@ -25,7 +32,7 @@ import java.util.List;
* @author yinzuomei@elink-cn.com
* @date 2021/7/27 18:36
*/
-@Log4j
+@Slf4j
@RestController
@RequestMapping("pub")
public class PubController {
@@ -89,30 +96,52 @@ public class PubController {
/**
* 导出数据,使用map接收
*
- * @param map
+ * @param formDTO
* @param response
* @throws IOException
+ * @return
*/
- @PostMapping("/exportExcel")
- public void exportExcel(@RequestBody BaseDataFormDTO formDTO, HttpServletResponse response) throws IOException {
- /* try {
- Map mapData = new HashMap<>();
- BaseStatsDataResultDTO baseStatsData = dataStatsService.getBaseStatsData(formDTO);
- String templatePath = "excel/trace_temp.xlsx";
- log.info("exportExcel templatePath:{}",templatePath);
- mapData.put("dataType", baseStatsData);
+ @RequestMapping("/exportExcel")
+ public ModelAndView exportExcel(@RequestBody BaseDataFormDTO formDTO) {
+ //String paramStr = "{\"agencyId\":\"7b6f9a9f9f38d5f9fa7ce94a93d6eb28\",\"agencyLevel\":\"city\",\"dateId\":\"20210616\",\"type\":\"thisWeek\",\"agencyName\":\"组织名称\"}";
+ //formDTO = JSON.parseObject(paramStr, BaseDataFormDTO.class);
+ Map mapData = new HashMap<>();
+ mapData.put("collectData", dataStatsService.getBaseStatsData(formDTO));
+ mapData.put("subWorkFactList", dataStatsService.getSubWorkFact(formDTO));
+ mapData.put("subUserTotalList", dataStatsService.subUserTotal(formDTO));
+ mapData.put("subTopicAndGroupList", dataStatsService.subTopicAndGroup(formDTO));
+ mapData.put("orgName",formDTO.getAgencyName());
+ mapData.put("type",getSearchTimeStr(formDTO.getType()));
+
+ long start = System.currentTimeMillis();
+ //自定义导出字段
+ //String templatePath = this.getClass().getClassLoader().getResource("excel/data_template.xlsx").getPath();
- start = System.currentTimeMillis();
- Workbook workbook = ExcelExportUtil.exportExcel(new TemplateExportParams(templatePath, "数据汇总"), baseStatsData);
- //header
- response.setHeader("content-Type", "application/vnd.ms-excel");
- response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("继续追踪导出详情-".concat(DateUtils.formatDate()) + ".xlsx", "UTF-8"));
- //加密
- log.error("excelExport build wb cost:{}",System.currentTimeMillis()-start);
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }*/
+ String templatePath = "excel/data_template.xlsx";
+ log.info("exportExcel templatePath:"+templatePath);
+ ModelAndView mv = new ModelAndView(new EasypoiTemplateExcelView());
+ mv.addObject(TemplateExcelConstants.FILE_NAME, DateUtils.format(new Date(),DateUtils.DATE_TIME_NO_SPLIT));
+ TemplateExportParams templateExportParams = new TemplateExportParams(templatePath);
+ Integer[] integers = {0,1,2,3};
+ templateExportParams.setSheetNum(integers);
+ mv.addObject(TemplateExcelConstants.PARAMS, templateExportParams);
+ mv.addObject(TemplateExcelConstants.MAP_DATA, mapData);
+ log.info("excelExport cost:{}",System.currentTimeMillis()-start);
+ return mv;
+ }
+ private String getSearchTimeStr(String type){
+ //昨日/本周/本月
+ switch (type){
+ case "yesterday":
+ return "昨日";
+ case "thisWeek":
+ return "本周";
+ case "thisMonth":
+ return "本月";
+ default:
+ return "";
+ }
}
}
diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java
index ac853e29e7..0fede9e608 100644
--- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java
+++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java
@@ -1702,14 +1702,12 @@ public class DataStatsServiceImpl implements DataStatsService {
}
//4.按用户数降序排序并返回
- Collections.sort(resultList, new Comparator() {
- @Override
- public int compare(SubUserTotalResultDTO o1, SubUserTotalResultDTO o2) {
- //降序
- return o2.getUserTotal().compareTo(o1.getUserTotal());
- }
+ Collections.sort(resultList, (o1, o2) -> {
+ //降序
+ return o2.getUserTotal().compareTo(o1.getUserTotal());
});
-
+ AtomicInteger i = new AtomicInteger(1);
+ resultList.forEach(e->e.setSort(i.getAndIncrement()));
return resultList;
}
@@ -1792,14 +1790,12 @@ public class DataStatsServiceImpl implements DataStatsService {
}
//4.按用户数降序排序并返回
- Collections.sort(resultList, new Comparator() {
- @Override
- public int compare(SubTopicAndGroupResultDTO o1, SubTopicAndGroupResultDTO o2) {
- //降序
- return o2.getTopicTotal().compareTo(o1.getTopicTotal());
- }
+ Collections.sort(resultList, (o1, o2) -> {
+ //降序
+ return o2.getTopicTotal().compareTo(o1.getTopicTotal());
});
-
+ AtomicInteger i = new AtomicInteger(1);
+ resultList.forEach(e->e.setSort(i.getAndIncrement()));
return resultList;
}
diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/excel/data_template.xlsx b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/excel/data_template.xlsx
new file mode 100644
index 0000000000..af7104be32
Binary files /dev/null and b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/excel/data_template.xlsx differ
diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/FactGridMemberStatisticsDailyDao.xml b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/FactGridMemberStatisticsDailyDao.xml
index fdbb6fdc04..ffec0be996 100644
--- a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/FactGridMemberStatisticsDailyDao.xml
+++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/FactGridMemberStatisticsDailyDao.xml
@@ -85,9 +85,11 @@
from fact_grid_member_statistics_daily member
-
- member.GRID_ID = #{gridId}
+ member.GRID_ID in (
+
+ #{gridId}
+ )
and member.STAFF_NAME like CONCAT('%',#{searchedStaffName},'%')
diff --git a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AdvancedBranchRankFormDTO.java b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AdvancedBranchRankFormDTO.java
index 27f638f3d2..cd3cf536af 100644
--- a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AdvancedBranchRankFormDTO.java
+++ b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AdvancedBranchRankFormDTO.java
@@ -29,8 +29,9 @@ public class AdvancedBranchRankFormDTO implements Serializable {
private String monthId;
/**
- * 组织类型 agency grid
+ * areaCode
*/
- private String orgType;
+ private String areaCode;
+
public interface AddUserInternalGroup {}
}
diff --git a/epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenIndexDataMonthlyDao.xml b/epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenIndexDataMonthlyDao.xml
index 51729c6479..43d30e9193 100644
--- a/epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenIndexDataMonthlyDao.xml
+++ b/epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenIndexDataMonthlyDao.xml
@@ -260,9 +260,17 @@
WHERE
dm.del_flag = '0'
AND rd.del_flag = '0'
+
+
+ AND org.AREA_CODE LIKE concat(#{areaCode}, '%')
+
+
+ AND dm.all_parent_ids LIKE concat('%', #{agencyId}, '%')
+
+
AND dm.org_type = 'grid'
AND dm.month_id = #{monthId}
- AND dm.all_parent_ids LIKE concat('%', #{agencyId}, '%')
+
ORDER BY dm.index_total DESC
LIMIT #{topNum}