From 66a7322337c9872a8c4e8f5fbfa63b2a6b5bdebc Mon Sep 17 00:00:00 2001 From: jianjun Date: Tue, 9 Nov 2021 23:47:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E9=A1=B9=E7=9B=AE=E8=AF=A6?= =?UTF-8?q?=E6=83=85=20=E5=A4=A7=E6=95=B0=E6=8D=AE=E6=B5=81=E6=94=AF?= =?UTF-8?q?=E6=8C=81=20=E8=AF=A5=E7=94=A8easyExcel=20=E5=BE=AA=E7=8E=AF?= =?UTF-8?q?=E5=86=99=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/commons/tools/utils/ExcelUtils.java | 11 ++- .../result/CategoryProjectListResultDTO.java | 10 +++ .../data-report/data-report-server/pom.xml | 6 ++ .../screen/ScreenProjectController.java | 72 ++++++++++++------ .../screen/impl/ScreenProjectServiceImpl.java | 12 ++- .../excel/project_temp_easy_excel.xlsx | Bin 0 -> 9188 bytes 6 files changed, 81 insertions(+), 30 deletions(-) create mode 100644 epmet-module/data-report/data-report-server/src/main/resources/excel/project_temp_easy_excel.xlsx diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/ExcelUtils.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/ExcelUtils.java index 773291dfcc..6dae6eb249 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/ExcelUtils.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/ExcelUtils.java @@ -19,8 +19,8 @@ import org.springframework.util.CollectionUtils; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.io.OutputStream; import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -121,5 +121,14 @@ public class ExcelUtils { out.flush(); out.close(); } + public static OutputStream getOutputStream(String fileName, HttpServletResponse response) throws Exception { + fileName = URLEncoder.encode(fileName, "UTF-8"); + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf8"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName); + response.addHeader("Access-Control-Expose-Headers", "Content-disposition"); + + return response.getOutputStream(); + } } diff --git a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/CategoryProjectListResultDTO.java b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/CategoryProjectListResultDTO.java index 5250826a3c..ec8694fd1b 100644 --- a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/CategoryProjectListResultDTO.java +++ b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/CategoryProjectListResultDTO.java @@ -25,6 +25,11 @@ public class CategoryProjectListResultDTO implements Serializable { */ private String projectStatus; + /** + * 项目状态:待处理 pending,结案closed + */ + private String projectStatusDesc; + /** * 项目标题 */ @@ -69,8 +74,13 @@ public class CategoryProjectListResultDTO implements Serializable { public CategoryProjectListResultDTO() { this.category = ""; this.projectStatus = ""; + this.projectStatusDesc = ""; this.projectTitle = ""; this.gridName = ""; this.createTime = ""; } + + public String getProjectStatusDesc() { + return "closed".equals(projectStatus)?"已结案":"处理中"; + } } diff --git a/epmet-module/data-report/data-report-server/pom.xml b/epmet-module/data-report/data-report-server/pom.xml index 15936771b6..25a8220b54 100644 --- a/epmet-module/data-report/data-report-server/pom.xml +++ b/epmet-module/data-report/data-report-server/pom.xml @@ -100,6 +100,12 @@ 2.0.0 compile + + com.alibaba + easyexcel + 3.0.3 + compile + diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/screen/ScreenProjectController.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/screen/ScreenProjectController.java index 87aa340fac..81babdb9ce 100644 --- a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/screen/ScreenProjectController.java +++ b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/screen/ScreenProjectController.java @@ -2,12 +2,17 @@ package com.epmet.datareport.controller.screen; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.TemplateExportParams; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; import com.epmet.commons.tools.annotation.LoginUser; +import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.StrConstant; import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult; import com.epmet.commons.tools.redis.common.CustomerStaffRedis; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.commons.tools.utils.ExcelUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.datareport.service.evaluationindex.screen.ScreenProjectOrgDailyService; @@ -241,30 +246,53 @@ public class ScreenProjectController { * @date 2021/11/4 3:38 下午 */ @PostMapping("selectcategoryprojectlist/export") - public void selectProjectCategoryExport(@RequestBody CategoryProjectListFormDTO formDTO,@LoginUser TokenDto tokenDto, HttpServletResponse response) throws Exception { - //tokenDto.setUserId("36bc0fb38565ecdebf8ab9b476b44548"); - //tokenDto.setCustomerId("45687aa479955f9d06204d415238f7cc"); - formDTO.setIsPage(false); - //formDTO.setStatus("all"); - //formDTO.setCategoryCode("0102"); - ValidatorUtils.validateEntity(formDTO, ProjectCategoryFormDTO.CategoryProjectExportForm.class); - PageCategoryProjectListResultDTO data = screenProjectService.selectCategoryProjectList(formDTO,tokenDto); - String templatePath = "excel/project_temp.xlsx"; + public void selectProjectCategoryExport(@RequestBody CategoryProjectListFormDTO formDTO, @LoginUser TokenDto tokenDto, HttpServletResponse response) throws Exception { + ExcelWriter excelWriter = null; + try { + //tokenDto.setUserId("36bc0fb38565ecdebf8ab9b476b44548"); + //tokenDto.setCustomerId("45687aa479955f9d06204d415238f7cc"); - CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(tokenDto.getCustomerId(), tokenDto.getUserId()); - Map mapData = new HashMap<>(); - mapData.put("list",data.getList()); - mapData.put("orgName",staffInfo.getAgencyName()); - mapData.put("exportDate",getExportDateStr(formDTO.getStartTime(),formDTO.getEndTime())); - mapData.put("categoryName", formDTO.getCategoryName()); - if (StringUtils.isNotBlank(formDTO.getParentCategoryName())){ - mapData.put("categoryName", formDTO.getParentCategoryName().concat(StrConstant.HYPHEN).concat(formDTO.getCategoryName())); - } + formDTO.setIsPage(false); + ValidatorUtils.validateEntity(formDTO, ProjectCategoryFormDTO.CategoryProjectExportForm.class); - Workbook workbook = ExcelExportUtil.exportExcel(new TemplateExportParams(templatePath), mapData); - response.setHeader("content-Type", "application/vnd.ms-excel"); - response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("项目统计.xls", "UTF-8")); - workbook.write(response.getOutputStream()); + CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(tokenDto.getCustomerId(), tokenDto.getUserId()); + Map mapData = new HashMap<>(); + mapData.put("orgName", staffInfo == null ? StrConstant.EPMETY_STR : staffInfo.getAgencyName()); + mapData.put("exportDate", getExportDateStr(formDTO.getStartTime(), formDTO.getEndTime())); + mapData.put("categoryName", formDTO.getCategoryName()); + if (StringUtils.isNotBlank(formDTO.getParentCategoryName())) { + mapData.put("categoryName", formDTO.getParentCategoryName().concat(StrConstant.HYPHEN).concat(formDTO.getCategoryName())); + } + + String templatePath = "/excel/project_temp_easy_excel.xlsx"; + String template = this.getClass().getResource(templatePath).getPath(); + String fileName = "项目统计.xls"; + excelWriter = EasyExcel.write(ExcelUtils.getOutputStream(fileName, response)).withTemplate(template).build(); + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + excelWriter.fill(mapData, writeSheet); + + formDTO.setPageSize(NumConstant.ONE); + PageCategoryProjectListResultDTO data = null; + do { + data = screenProjectService.selectCategoryProjectList(formDTO, tokenDto); + if (data.getList().isEmpty()) { + break; + } + formDTO.setPageNo(formDTO.getPageNo() + 1); + excelWriter.fill(data.getList(), writeSheet); + } while (data.getList().size() == formDTO.getPageSize()); + +// String templatePath = "excel/project_temp.xlsx"; +// Workbook workbook = ExcelExportUtil.exportExcel(new TemplateExportParams(templatePath), mapData); +// response.setHeader("content-Type", "application/vnd.ms-excel"); +// response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("项目统计.xls", "UTF-8")); +// workbook.write(response.getOutputStream()); + + } finally { + if (excelWriter != null) { + excelWriter.finish(); + } + } } @NotNull diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/impl/ScreenProjectServiceImpl.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/impl/ScreenProjectServiceImpl.java index 4c0833ba3e..bc23641267 100644 --- a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/impl/ScreenProjectServiceImpl.java +++ b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/impl/ScreenProjectServiceImpl.java @@ -375,13 +375,11 @@ public class ScreenProjectServiceImpl implements ScreenProjectService { } PageCategoryProjectListResultDTO result = new PageCategoryProjectListResultDTO(); List list; - if (formDTO.getIsPage()){ - PageInfo objectPageInfo = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize()).doSelectPageInfo(() -> screenProjectDataDao.selectCategoryProjectList(tokenDto.getCustomerId(), formDTO.getOrgId(), formDTO.getCategoryCode(), formDTO.getStatus())); - list = objectPageInfo.getList(); - result.setTotal(Integer.valueOf(String.valueOf(objectPageInfo.getTotal()))); - }else { - list = screenProjectDataDao.selectCategoryProjectList(tokenDto.getCustomerId(), formDTO.getOrgId(), formDTO.getCategoryCode(), formDTO.getStatus()); - } + PageInfo objectPageInfo = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize(), formDTO.getIsPage()) + .doSelectPageInfo(() -> screenProjectDataDao.selectCategoryProjectList(tokenDto.getCustomerId(), formDTO.getOrgId(), formDTO.getCategoryCode(), formDTO.getStatus())); + list = objectPageInfo.getList(); + result.setTotal(Integer.valueOf(String.valueOf(objectPageInfo.getTotal()))); + if (!CollectionUtils.isEmpty(list)){ list.forEach(l -> { if (l.getOrgType().equals(FactConstant.AGENCY)){ diff --git a/epmet-module/data-report/data-report-server/src/main/resources/excel/project_temp_easy_excel.xlsx b/epmet-module/data-report/data-report-server/src/main/resources/excel/project_temp_easy_excel.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..41f27c780cc850023910d8d0b2cc94decb68fe93 GIT binary patch literal 9188 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 literal 0 HcmV?d00001