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 @@