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-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/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 184e00a313..bf93ab9948 100644
--- a/epmet-module/data-aggregator/data-aggregator-server/pom.xml
+++ b/epmet-module/data-aggregator/data-aggregator-server/pom.xml
@@ -103,6 +103,9 @@
true
${basedir}/src/main/resources
+
+ **/*.xlsx
+
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..a034d63750 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.alibaba.fastjson.JSON;
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,18 @@ 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.HashMap;
import java.util.List;
+import java.util.Map;
/**
* 小程序相关配置,可以放在这,目前只放了footbar
@@ -25,7 +31,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 +95,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(required = false) BaseDataFormDTO formDTO) throws IOException {
+ 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, "数据导出-");
+ 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 build wb 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 2b42fbda86..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
@@ -2,7 +2,8 @@
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.tools.constant.NumConstant;
-import com.epmet.commons.tools.enums.OrgLevelEnum;
+ import com.epmet.commons.tools.constant.StrConstant;
+ import com.epmet.commons.tools.enums.OrgLevelEnum;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.dataaggre.constant.DataSourceConstant;
import com.epmet.dataaggre.constant.OrgConstant;
@@ -1485,6 +1486,7 @@ public class DataStatsServiceImpl implements DataStatsService {
formDTO.setDateId(format.format(yesterday));
}
String startDate = null;
+ String actulStartDate = null;
String endDate = null;
Date dateIdDate = DateUtils.parse(formDTO.getDateId(), DateUtils.DATE_PATTERN_YYYYMMDD);
boolean isYesterday = DateUtils.getBeforeNDay(1,DateUtils.DATE_PATTERN_YYYYMMDD).equals(formDTO.getDateId());
@@ -1492,18 +1494,19 @@ public class DataStatsServiceImpl implements DataStatsService {
case "yesterday":
startDate = DateUtils.getBeforeNDay(formDTO.getDateId(),1);
endDate = formDTO.getDateId();
+ actulStartDate = formDTO.getDateId();
break;
case "thisWeek":
- startDate = DateUtils.getWeekStart(formDTO.getDateId());
- startDate = DateUtils.getBeforeNDay(startDate,1);
+ actulStartDate = DateUtils.getWeekStart(formDTO.getDateId());
+ startDate = DateUtils.getBeforeNDay(actulStartDate,1);
DateUtils.format(DateUtils.addDateDays(yesterday, -1),DateUtils.DATE_PATTERN_YYYYMMDD);
if (!isYesterday){
endDate = DateUtils.getWeekEnd(formDTO.getDateId());
}
break;
case "thisMonth":
- startDate = DateUtils.format(DateUtils.getMonthStart(dateIdDate),DateUtils.DATE_PATTERN_YYYYMMDD);
- startDate = DateUtils.getBeforeNDay(startDate,1);
+ actulStartDate = DateUtils.format(DateUtils.getMonthStart(dateIdDate),DateUtils.DATE_PATTERN_YYYYMMDD);
+ startDate = DateUtils.getBeforeNDay(actulStartDate,1);
if (!isYesterday) {
endDate = DateUtils.format(DateUtils.getMonthEnd(dateIdDate), DateUtils.DATE_PATTERN_YYYYMMDD);
}
@@ -1538,7 +1541,7 @@ public class DataStatsServiceImpl implements DataStatsService {
Map closeProjectStartMap = closeProjectStart.stream().collect(Collectors.toMap(SubGridProjectResultDTO::getGridId, SubGridProjectResultDTO::getClosedProjectTotal, (o1, o2) -> o1));
Map closeProjectEndMap = closeProjectEnd.stream().collect(Collectors.toMap(SubGridProjectResultDTO::getGridId, SubGridProjectResultDTO::getClosedProjectTotal, (o1, o2) -> o1));
//巡查次数和时间
- List patrolList = statsStaffPatrolRecordDailyService.getPatrolSumList(gridIdList,formDTO.getStartDateId(),formDTO.getEndDateId());
+ List patrolList = statsStaffPatrolRecordDailyService.getPatrolSumList(gridIdList,actulStartDate,formDTO.getEndDateId());
Map patrolListMap = patrolList.stream().collect(Collectors.toMap(PatrolDailySumResult::getFullAgencyId, o -> o, (o1, o2) -> o1));
subAgencyList.forEach(agency->{
@@ -1551,13 +1554,7 @@ public class DataStatsServiceImpl implements DataStatsService {
resultDTO.setClosedProjectTotal(getTotal(closeProjectStartMap,closeProjectEndMap,gridId));
PatrolDailySumResult patrolRecordDTO = patrolListMap.get(agency.getAllParentIds());
- if (patrolRecordDTO != null){
- resultDTO.setPatrolTotal(patrolRecordDTO.getPatrolTotal());
- Integer totalTime = patrolRecordDTO.getTotalTime();
- int minutes = totalTime / 60;
- String totalTimeDesc = minutes / 60 + "小时"+ minutes % 60 + "分";
- resultDTO.setPatrolTotalTime(totalTimeDesc);
- }
+ setPatrolAttr(resultDTO, patrolRecordDTO);
result.add(resultDTO);
});
}else {
@@ -1584,8 +1581,8 @@ public class DataStatsServiceImpl implements DataStatsService {
Map closeProjectStartMap = closeProjectStart.stream().collect(Collectors.toMap(SubAgencyProjectResultDTO::getAgencyId, SubAgencyProjectResultDTO::getClosedProjectTotal, (o1, o2) -> o1));
Map closeProjectEndMap = closeProjectEnd.stream().collect(Collectors.toMap(SubAgencyProjectResultDTO::getAgencyId, SubAgencyProjectResultDTO::getClosedProjectTotal, (o1, o2) -> o1));
//巡查次数和时间
- List agencyFullIds = subAgencyList.stream().map(o -> o.getPids().concat(o.getAgencyId())).collect(Collectors.toList());
- List patrolList = statsStaffPatrolRecordDailyService.getPatrolSumList(agencyFullIds,formDTO.getStartDateId(),formDTO.getEndDateId());
+ List agencyFullIds = subAgencyList.stream().map(o -> o.getPids().concat(StrConstant.COLON).concat(o.getAgencyId())).collect(Collectors.toList());
+ List patrolList = statsStaffPatrolRecordDailyService.getPatrolSumList(agencyFullIds,actulStartDate,formDTO.getEndDateId());
Map patrolListMap = patrolList.stream().collect(Collectors.toMap(PatrolDailySumResult::getFullAgencyId, o -> o, (o1, o2) -> o1));
subAgencyList.forEach(agency->{
@@ -1596,15 +1593,9 @@ public class DataStatsServiceImpl implements DataStatsService {
resultDTO.setTopicToIssueTotal(getTotal(toIssueStartMap,toIssueEndMap,agencyId));
resultDTO.setIssueToProjectTotal(getTotal(toProjectStartMap,toProjectEndMap,agencyId));
resultDTO.setClosedProjectTotal(getTotal(closeProjectStartMap,closeProjectEndMap,agencyId));
- String fullAgencyId = agency.getPids().concat(agencyId);
+ String fullAgencyId = agency.getPids().concat(StrConstant.COLON).concat(agencyId);
PatrolDailySumResult patrolRecordDTO = patrolListMap.get(fullAgencyId);
- if (patrolRecordDTO != null){
- resultDTO.setPatrolTotal(patrolRecordDTO.getPatrolTotal());
- Integer totalTime = patrolRecordDTO.getTotalTime();
- int minutes = totalTime / 60;
- String totalTimeDesc = minutes / 60 + "小时"+ minutes % 60 + "分";
- resultDTO.setPatrolTotalTime(totalTimeDesc);
- }
+ setPatrolAttr(resultDTO,patrolRecordDTO);
result.add(resultDTO);
});
}
@@ -1612,12 +1603,24 @@ public class DataStatsServiceImpl implements DataStatsService {
List newResult = result.stream().sorted(Comparator.comparing(o -> o.getTopicToIssueTotal() + o.getIssueToProjectTotal() + o.getClosedProjectTotal() + o.getPatrolTotal())).collect(Collectors.toList());
return newResult;
}
+
+ private void setPatrolAttr(WorkFactResultDTO resultDTO, PatrolDailySumResult patrolRecordDTO) {
+ if (patrolRecordDTO != null){
+ resultDTO.setPatrolTotal(patrolRecordDTO.getPatrolTotal());
+ Integer totalTime = patrolRecordDTO.getTotalTime();
+ if (totalTime != null || totalTime > 0){
+ int minutes = totalTime / 60;
+ if (minutes >0){
+ String totalTimeDesc = minutes / 60 + "小时"+ minutes % 60 + "分";
+ resultDTO.setPatrolTotalTime(totalTimeDesc);
+ }
+ }
+ }
+ }
+
private Integer getTotal(Map startMap, Map endMap,String agencyId){
Integer total1 = startMap.getOrDefault(agencyId,NumConstant.ZERO);
Integer total2 = endMap.getOrDefault(agencyId,NumConstant.ZERO);
- if (total1.equals(total2)){
- log.warn("===========相等,total:{}",total1);
- }
return Math.max(total2-total1,0);
}
@@ -1699,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;
}
@@ -1789,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..9b2c0c94d9
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/epmetuser/StatsStaffPatrolRecordDailyDao.xml b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/StatsStaffPatrolRecordDailyDao.xml
index 3470e2f60d..5642d17f40 100644
--- a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/StatsStaffPatrolRecordDailyDao.xml
+++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/StatsStaffPatrolRecordDailyDao.xml
@@ -4,7 +4,7 @@