Browse Source

Merge remote-tracking branch 'remotes/origin/dev' into dev_bugfix_ljj

dev_shibei_match
jianjun 4 years ago
parent
commit
e8082f2ae5
  1. 7
      epmet-commons/epmet-commons-tools/pom.xml
  2. 6
      epmet-gateway/src/main/java/com/epmet/auth/ExtAppTakeTokenAuthProcessor.java
  3. 344
      epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java
  4. 1
      epmet-gateway/src/main/resources/bootstrap.yml
  5. 1
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/BaseDataFormDTO.java
  6. 38
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/SubTopicAndGroupFormDTO.java
  7. 38
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/SubUserTotalFormDTO.java
  8. 1
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/SubTopicAndGroupResultDTO.java
  9. 4
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/SubUserTotalResultDTO.java
  10. 11
      epmet-module/data-aggregator/data-aggregator-server/pom.xml
  11. 2
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/aspect/RequestLogAspect.java
  12. 73
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/pub/PubController.java
  13. 24
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java
  14. BIN
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/excel/data_template.xlsx
  15. 6
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/FactGridMemberStatisticsDailyDao.xml

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

@ -18,7 +18,7 @@
<commons.fileupload.version>1.3.3</commons.fileupload.version>
<commons.io.version>2.6</commons.io.version>
<hutool.version>4.6.1</hutool.version>
<easypoi.version>4.1.0</easypoi.version>
<easypoi.version>4.1.3</easypoi.version>
<joda.time.version>2.9.9</joda.time.version>
<fastjson.version>1.2.60</fastjson.version>
<gson.version>2.8.6</gson.version>
@ -95,6 +95,11 @@
<artifactId>easypoi-web</artifactId>
<version>${easypoi.version}</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>${easypoi.version}</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>

6
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<String> 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;

344
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<CpAuthGatewayFilterFactory.CpAuthConfig> {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private InternalAuthProcessor internalAuthProcessor;
@Autowired
private ExternalAuthProcessor externalAuthProcessor;
@Override
public List<String> 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<String> 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<Void> response(ServerWebExchange exchange, Object object) {
String json = JSON.toJSONString(object);
DataBuffer buffer = exchange.getResponse().bufferFactory().wrap(json.getBytes(StandardCharsets.UTF_8));
exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON_UTF8);
exchange.getResponse().setStatusCode(HttpStatus.OK);
return exchange.getResponse().writeWith(Flux.just(buffer));
}
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private InternalAuthProcessor internalAuthProcessor;
@Autowired
private ExternalAuthProcessor externalAuthProcessor;
@Override
public List<String> 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<String> 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<String, String> 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<String, String> queryParams) {
try {
if (queryParams == null || queryParams.size() == 0) {
return "";
}
StringBuilder sb = new StringBuilder("");
queryParams.entrySet().forEach(entry -> {
String key = entry.getKey();
List<String> 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<Void> response(ServerWebExchange exchange, Object object) {
String json = JSON.toJSONString(object);
DataBuffer buffer = exchange.getResponse().bufferFactory().wrap(json.getBytes(StandardCharsets.UTF_8));
exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON_UTF8);
exchange.getResponse().setStatusCode(HttpStatus.OK);
return exchange.getResponse().writeWith(Flux.just(buffer));
}
}

1
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

1
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{}

38
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/SubTopicAndGroupFormDTO.java

@ -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;
/**
* 日维度IdyyyyMMdd eg20210808默认前一天
*/
private String dateId;
public interface Agency extends CustomerClientShowGroup{}
}

38
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/SubUserTotalFormDTO.java

@ -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;
/**
* 日维度IdyyyyMMdd eg20210808默认前一天
*/
private String dateId;
public interface Agency extends CustomerClientShowGroup{}
}

1
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;
}

4
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;
}

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

@ -91,6 +91,17 @@
<skipTests>true</skipTests>
</configuration>
</plugin>
<!-- 避免font文件的二进制文件格式压缩破坏 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
<resources>

2
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());
}

73
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<String, Object> 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<String, Object> 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 "";
}
}
}

24
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<SubUserTotalResultDTO>() {
@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<SubTopicAndGroupResultDTO>() {
@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;
}

BIN
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/excel/data_template.xlsx

Binary file not shown.

6
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
<where>
<if test="gridIds != null and gridIds.size() > 0">
<foreach collection="gridIds" item="gridId" separator="OR" open="(" close=")">
member.GRID_ID = #{gridId}
member.GRID_ID in (
<foreach collection="gridIds" item="gridId" separator=",">
#{gridId}
</foreach>
)
</if>
<if test="searchedStaffName != null and searchedStaffName != ''">
and member.STAFF_NAME like CONCAT('%',#{searchedStaffName},'%')

Loading…
Cancel
Save