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}