From 30421b494123352c0282b0320dcedddfbcfe8efa Mon Sep 17 00:00:00 2001 From: jianjun Date: Tue, 9 Nov 2021 15:15:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data-statistical-server/pom.xml | 2 +- .../epmet-demo/epmet-demo-server/pom.xml | 2 +- .../com/epmet/dto/result/HouseInfoDTO.java | 4 +- .../src/main/resources/mapper/IcHouseDao.xml | 5 +- epmet-user/epmet-user-server/pom.xml | 2 +- .../controller/IcResiUserController.java | 156 ++++++++++++++++++ .../service/impl/IcResiUserServiceImpl.java | 22 ++- .../java/com/epmet/util/TestFileUtil.java | 36 ++++ .../main/resources/excel/ic_resi_info_cid.xls | Bin 92160 -> 92160 bytes .../excel/ic_resi_info_cid_for_easy_excel.xls | Bin 0 -> 96256 bytes 10 files changed, 215 insertions(+), 14 deletions(-) create mode 100644 epmet-user/epmet-user-server/src/main/java/com/epmet/util/TestFileUtil.java create mode 100644 epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_cid_for_easy_excel.xls diff --git a/epmet-module/data-statistical/data-statistical-server/pom.xml b/epmet-module/data-statistical/data-statistical-server/pom.xml index 687c01b462..7a0ae49569 100644 --- a/epmet-module/data-statistical/data-statistical-server/pom.xml +++ b/epmet-module/data-statistical/data-statistical-server/pom.xml @@ -97,7 +97,7 @@ com.alibaba easyexcel - 2.2.10 + 3.0.3 poi diff --git a/epmet-module/epmet-demo/epmet-demo-server/pom.xml b/epmet-module/epmet-demo/epmet-demo-server/pom.xml index 4f6c0b6021..2a2ee9e597 100644 --- a/epmet-module/epmet-demo/epmet-demo-server/pom.xml +++ b/epmet-module/epmet-demo/epmet-demo-server/pom.xml @@ -16,7 +16,7 @@ com.alibaba easyexcel - 2.2.10 + 3.0.3 poi diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/HouseInfoDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/HouseInfoDTO.java index 3221ee3647..5077e99a33 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/HouseInfoDTO.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/HouseInfoDTO.java @@ -57,4 +57,6 @@ public class HouseInfoDTO implements Serializable { * 房屋类型,1楼房,2平房,3别墅 */ private String houseType; -} \ No newline at end of file + + private String houseName; +} diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml index 08cf9c92a5..0857166540 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml @@ -240,7 +240,8 @@ ih.BUILDING_UNIT_ID as buildingUnitId, u.UNIT_NAME as unitName, ih.DOOR_NAME as doorName, - ih.house_type + ih.house_type, + ih.HOUSE_NAME FROM ic_house ih left JOIN ic_neighbor_hood n ON ( ih.NEIGHBOR_HOOD_ID = n.id ) @@ -277,4 +278,4 @@ and ih.id !=#{houseId} - \ No newline at end of file + diff --git a/epmet-user/epmet-user-server/pom.xml b/epmet-user/epmet-user-server/pom.xml index 790d22ecf2..dcd727ce13 100644 --- a/epmet-user/epmet-user-server/pom.xml +++ b/epmet-user/epmet-user-server/pom.xml @@ -21,7 +21,7 @@ com.alibaba easyexcel - 2.2.10 + 3.0.3 poi diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java index 24c8b5b5fe..044e03f476 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java @@ -19,6 +19,12 @@ package com.epmet.controller; 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.converters.date.DateDateConverter; +import com.alibaba.excel.converters.date.DateStringConverter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillWrapper; import com.alibaba.fastjson.JSON; import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.exception.EpmetErrorCode; @@ -35,6 +41,7 @@ import com.epmet.dto.result.*; import com.epmet.feign.OperCustomizeOpenFeignClient; import com.epmet.service.IcResiUserImportService; import com.epmet.service.IcResiUserService; +import com.epmet.util.TestFileUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; @@ -48,6 +55,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.FileOutputStream; import java.io.IOException; +import java.io.OutputStream; import java.net.URLEncoder; import java.nio.file.Files; import java.nio.file.Path; @@ -221,6 +229,7 @@ public class IcResiUserController { Map> sheetMap = new HashMap<>(); Map mapData = new HashMap<>(); mapData.put("list", resiMainList.values()); + System.out.println("========="+JSON.toJSONString(resiMainList.values())); sheetMap.put(0, mapData); AtomicInteger n = new AtomicInteger(); for (FormItem item : resiFormItems.getItemList()) { @@ -233,6 +242,7 @@ public class IcResiUserController { Map mapData2 = new HashMap<>(); mapData2.put("list", resiChildMap.values()); + System.out.println("========="+JSON.toJSONString(mapData2)); sheetMap.put(n.incrementAndGet(), mapData2); } } @@ -247,6 +257,152 @@ public class IcResiUserController { workbook.write(response.getOutputStream()); } + @RequestMapping(value = "/exportExcel2") + public void exportExcelByEasyExcel(@RequestHeader String customerId, @RequestBody IcResiUserPageFormDTO pageFormDTO, HttpServletResponse response) throws Exception { + pageFormDTO.setCustomerId(customerId); + pageFormDTO.setPageFlag(false); + CustomerFormResultDTO resiFormItems = getResiFormItems(pageFormDTO.getCustomerId()); + + Map> otherSheetItems = new HashMap<>(); + + //主表的 + for (FormItem formItem : resiFormItems.getItemList()) { + if (StringUtils.isBlank(formItem.getColumnName())) { + continue; + } + + Map itemMap = otherSheetItems.getOrDefault(formItem.getTableName(), new HashMap<>()); + otherSheetItems.putIfAbsent(formItem.getTableName(), itemMap); + if (formItem.getItemType().equals("checkbox") || formItem.getItemType().equals("select") || formItem.getItemType().equals("radio")) { + itemMap.put(formItem.getColumnName().concat(formItem.getColumnNum() == 0 ? "" : formItem.getColumnNum().toString()), formItem); + } + if (formItem.getChildGroup() != null) { + itemMap = otherSheetItems.getOrDefault(formItem.getChildGroup().getTableName(), new HashMap<>()); + otherSheetItems.putIfAbsent(formItem.getChildGroup().getTableName(), itemMap); + for (FormItem2 item2 : formItem.getChildGroup().getItemList()) { + if (StringUtils.isBlank(item2.getColumnName())) { + continue; + } + + if ("checkbox".equals(item2.getItemType()) || "select".equals(item2.getItemType()) || "radio".equals(item2.getItemType())) { + itemMap.put(item2.getColumnName().concat(item2.getColumnNum() == 0 ? "" : item2.getColumnNum().toString()), ConvertUtils.sourceToTarget(item2, FormItem.class)); + } + } + + } + } + //其他sheet + + for (FormGroupDTO groupItem : resiFormItems.getGroupList()) { + if (groupItem.getItemList() == null) { + continue; + } + Map itemMap = otherSheetItems.getOrDefault(groupItem.getTableName(), new HashMap<>()); + otherSheetItems.putIfAbsent(groupItem.getTableName(), itemMap); + for (FormItem2 formItem2 : groupItem.getItemList()) { + if (StringUtils.isBlank(formItem2.getColumnName())) { + continue; + } + if ("checkbox".equals(formItem2.getItemType()) || "select".equals(formItem2.getItemType()) || "radio".equals(formItem2.getItemType())) { + itemMap.put(formItem2.getColumnName().concat(formItem2.getColumnNum() == 0 ? "" : formItem2.getColumnNum().toString()), ConvertUtils.sourceToTarget(formItem2, FormItem.class)); + } + } + } + + Map> resiMainList = icResiUserService.getDataForExport(otherSheetItems.get(BASE_TABLE_NAME),new HashMap<>(), pageFormDTO.getCustomerId(), pageFormDTO.getFormCode(), BASE_TABLE_NAME, pageFormDTO.getConditions()); + + //========================================= + + + // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替 + // {} 代表普通变量 {.} 代表是list的变量 {前缀.} 前缀可以区分不同的list + +// String templatePath = "/excel/ic_resi_info_cid_for_easy_excel.xls"; +// String s1 = this.getClass().getResource(templatePath).getPath(); +// System.out.println("模版路径:"+s1); +// +// String templateFileName = s1; +// System.out.println("=templateFileName=="+templateFileName); +// String fileName = TestFileUtil.getPath() + "/excel/ic_resi_info_cid_for_easy_excel0000.xls"; +// System.out.println(fileName); +// ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build(); +// WriteSheet writeSheet = EasyExcel.writerSheet(0).build(); +// WriteSheet build = EasyExcel.writerSheet(1).build(); +// // 如果有多个list 模板上必须有{前缀.} 这里的前缀就是 data1,然后多个list必须用 FillWrapper包裹 +// excelWriter.fill(new FillWrapper("t1", resiMainList.values()), writeSheet); +// excelWriter.fill(new FillWrapper("t2", resiMainList.values()), build); + + // 别忘记关闭流 + //excelWriter.finish(); + //EasyExcel.write(new File(fileName)); + //========================================= + //resiMainList = (List>)JSON.parse("[{\"IS_BDHJ\":\"1\",\"IS_SPECIAL\":\"1\",\"IS_XFRY\":\"0\",\"REMARKS\":\"beizhu\",\"IS_PARTY\":\"1\",\"icResiUserId\":\"yzmtest2\",\"HOME_ID\":\"中海国际社区一里城1号楼1单元101\",\"HOUSE_TYPE\":\"平房\",\"UNIT_NAME\":\"1单元\",\"GRID_ID\":\"市北区-市北区第三网格3\",\"IS_DB\":\"0\",\"GENDER\":\"男\",\"BIRTHDAY\":\"2021-10-04\",\"IS_VETERANS\":\"0\",\"IS_MB\":\"0\",\"IS_UNEMPLOYED\":\"0\",\"DEMAND_NAME\":null,\"IS_KC\":\"0\",\"IS_ENSURE_HOUSE\":\"0\",\"IS_SD\":\"0\",\"NAME\":\"尹作梅\",\"RDSJ\":null,\"IS_VOLUNTEER\":\"1\",\"GRID_ID_VALUE\":\"e74829ffc43d5470eba6b5e060c11e63\",\"IS_SZ\":\"0\",\"IS_CJ\":\"0\",\"HOME_ID_VALUE\":\"200\",\"DEMAND_CATEGORY_IDS\":null,\"VILLAGE_NAME\":\"中海国际社区一里城\",\"IS_DBH\":\"0\",\"IS_SN\":\"0\",\"BUILD_NAME\":\"1号楼\",\"IS_YLFN\":\"0\",\"IS_UNITED_FRONT\":\"0\",\"ID_CARD\":\"371325199310260529\",\"MOBILE\":\"15764229697\",\"IS_OLD_PEOPLE\":\"0\",\"DOOR_NAME\":\"101\"},{\"IS_SPECIAL\":\"1\",\"IS_XFRY\":\"0\",\"REMARKS\":\"beizhu\",\"IS_PARTY\":\"1\",\"icResiUserId\":\"yzmtest\",\"HOME_ID\":\"中海国际社区一里城1号楼1单元101\",\"HOUSE_TYPE\":\"平房\",\"UNIT_NAME\":\"1单元\",\"GRID_ID\":\"市北区-市北区第三网格3\",\"IS_DB\":\"0\",\"GENDER\":\"男\",\"BIRTHDAY\":\"2021-10-04\",\"IS_VETERANS\":\"0\",\"IS_MB\":\"0\",\"IS_UNEMPLOYED\":\"0\",\"DEMAND_NAME\":\"心理咨询\",\"IS_KC\":\"0\",\"IS_ENSURE_HOUSE\":\"0\",\"IS_SD\":\"0\",\"NAME\":\"尹作梅\",\"RDSJ\":\"2021-10-28 00:00:00\",\"IS_VOLUNTEER\":\"1\",\"GRID_ID_VALUE\":\"e74829ffc43d5470eba6b5e060c11e63\",\"IS_SZ\":\"0\",\"IS_CJ\":\"0\",\"HOME_ID_VALUE\":\"200\",\"DEMAND_CATEGORY_IDS\":\"10180002\",\"VILLAGE_NAME\":\"中海国际社区一里城\",\"IS_DBH\":\"0\",\"IS_SN\":\"0\",\"BUILD_NAME\":\"1号楼\",\"IS_YLFN\":\"0\",\"IS_UNITED_FRONT\":\"0\",\"ID_CARD\":\"371325199310260529\",\"MOBILE\":\"15764229697\",\"IS_OLD_PEOPLE\":\"0\",\"DOOR_NAME\":\"101\"}]"); + String originValue = JSON.toJSONString(resiMainList.values()); + System.out.println("========="+ originValue); + String templatePath = "/excel/ic_resi_info_cid_for_easy_excel.xls"; + String s1 = this.getClass().getResource(templatePath).getPath(); + System.out.println("模版路径:"+s1); + //TemplateExportParams params = new TemplateExportParams(templatePath, true); + String fileName = TestFileUtil.getPath() + "compositeFill" + "ic_resi_info_cid_for_easy_excel.xls"; + fileName = "/Users/liujianjun/Downloads/ic_resi_info_cid_for_easy_excel2.xls"; + System.out.println("fileName======="+fileName); + //String fileName = "居民基本信息.xls"; + ExcelWriter excelWriter = EasyExcel.write(getOutputStream(fileName,response)).registerConverter(new DateStringConverter()).registerConverter(new DateDateConverter()).withTemplate(s1).build(); + //ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(s1).build(); + WriteSheet fistSheet = EasyExcel.writerSheet(0).build(); + try { + excelWriter.fill(new FillWrapper("t1", resiMainList.values()), fistSheet); + } catch (Exception e) { + e.printStackTrace(); + } + + //======================================= + + /* Map> sheetMap = new HashMap<>(); + Map mapData = new HashMap<>(); + mapData.put("list", resiMainList.values()); + System.out.println("========="+JSON.toJSONString(resiMainList.values())); + sheetMap.put(0, mapData);*/ + AtomicInteger n = new AtomicInteger(); + for (FormItem item : resiFormItems.getItemList()) { + + if (item.getChildGroup() != null) { + if (!item.getChildGroup().getTableName().equals(BASE_TABLE_NAME)) { + Map itemMap1 = otherSheetItems.get(item.getChildGroup().getTableName()); + Map> resiChildMap = icResiUserService.getDataForExport(itemMap1,resiMainList, pageFormDTO.getCustomerId(), pageFormDTO.getFormCode(), item.getChildGroup().getTableName(), pageFormDTO.getConditions()); + resiChildMap.forEach((key, value) -> value.putAll(resiMainList.get(key))); + + /*Map mapData2 = new HashMap<>(); + mapData2.put("list", resiChildMap.values()); + System.out.println("========="+JSON.toJSONString(mapData2)); + sheetMap.put(n.incrementAndGet(), mapData2);*/ + int sheetNo = n.incrementAndGet(); + WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo).build(); + System.out.println("======"+JSON.toJSONString(resiChildMap.values())); + excelWriter.fill(new FillWrapper("t"+(sheetNo+1), resiChildMap.values()), writeSheet); + } + } + } + + /* Workbook workbook = ExcelExportUtil.exportExcel(sheetMap, params); + workbook.setActiveSheet(0);*/ + excelWriter.finish(); + + + /* response.setHeader("content-Type", "application/vnd.ms-excel"); + response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8")); + workbook.write(response.getOutputStream());*/ + } + private 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 + ".xls"); + response.addHeader("Access-Control-Expose-Headers", "Content-disposition"); + + return response.getOutputStream(); + } + /** * excel导入居民基本信息 * diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java index d91d541047..4b2a407e7e 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java @@ -17,7 +17,6 @@ package com.epmet.service.impl; -import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -37,16 +36,13 @@ import com.epmet.commons.tools.redis.common.CustomerStaffRedis; import com.epmet.commons.tools.redis.common.bean.GridInfoCache; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.commons.tools.utils.DateUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.constant.IcPlatformConstant; import com.epmet.constant.SystemMessageType; import com.epmet.constant.UserConstant; import com.epmet.dao.IcResiUserDao; -import com.epmet.dto.CustomerAgencyDTO; -import com.epmet.dto.CustomerGridDTO; -import com.epmet.dto.IcHouseDTO; -import com.epmet.dto.IcResiCategoryStatsConfigDTO; -import com.epmet.dto.IcNeighborHoodDTO; +import com.epmet.dto.*; import com.epmet.dto.form.*; import com.epmet.dto.result.*; import com.epmet.entity.IcResiUserEntity; @@ -59,11 +55,12 @@ import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.sql.Date; +import java.sql.Timestamp; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -623,6 +620,15 @@ public class IcResiUserServiceImpl extends BaseServiceImpl> mapList = this.dynamicQuery(customerId, formCode, baseTableName, conditions); Map> result = new LinkedHashMap<>(); mapList.stream().filter(Objects::nonNull).forEach(map -> { + map.forEach((k,o) -> { + if (o instanceof java.sql.Date){ + o = DateUtils.format(((Date) o),DateUtils.DATE_PATTERN); + } + if (o instanceof java.sql.Timestamp){ + o = DateUtils.format(new Date(((Timestamp) o).getTime()),DateUtils.DATE_TIME_PATTERN); + } + map.put(k,o); + }); String resiId = (String) map.getOrDefault(UserConstant.IC_RESI_USER, ""); if ("ic_resi_user".equals(baseTableName)) { @@ -707,7 +713,7 @@ public class IcResiUserServiceImpl extends BaseServiceImplBBjt4&UgS@DvlqMS2%LWPDgp`>`UT#k~bQ%EQ(@z_~82~9L1%dV8NzPqV80-WW5WN5C8SeY(T&U%b-AJ>bzFF-)^twgIP^2N_4J zeHd_(b@C*Kmif=Evbzsty6>4U(Ag<_GLG%`JZ$YJTXG&TZ2aoW7xG(2$xy=Jm`LAE zS60zVFp>qadGV)ZYbs`!FN>|%xea{Kf44$7@~CWoePnSp(ke4C#JY2S zZbJ%yIY^s5qEI}aSc?}LgYvOG?*;BsGeCPQz^zM^eUlF~*7@`4l+7T~7U_BF%O=2<f;v1x4}0wW#&YOjDGQkH?)k=bgKp%S`(tQ~M*+ z<@W|70QzX?rfCEs9hZLg$ zTNy3jE}F z#`>w)J|!H~o`q4mT~Dx1j>LVy4Gnh?S!0QkEGz2vh5N#g^t#q8{sh8ec}&Hr-!{dp zTWz7$c0bLxdFZ6YMH_7)zbmWyGP;`4T258PV)W5k7R|NTqxB<7=zX4cIz8MY78Fn? z@=w*+T-7XXeU0{bku9qn?Ukx{fPUGX5w&x%cYWU640Hc+tUxh3hKy2Q_mD&REp@u*Hi!V0qi`l@`Wt1 zDv-)$gLicnhg;X4N?%X?n>&EI*E;)(o+nG#Ci;{NvI%67g9bi>D&!@sOKFj}TABEm zY6ISCR3m}}lBhsza|NnIoK#<-e6O7;@l{R0x{ZLN8Pq!&C8gFOHls+3=$+76jf{QyfSd(W1!7~G`KE&#-nzVn8wwbrMGVuGJ;T?=TOLkiSP^ANCa7(AxMy~Vz4KTeCK;YB zW~fYSV0ae07e3y=e3GN)Y=2K_19M76`v*c#Q;(Uf8hdnErmLsAk@Xg^&Yqu5%xwM( DQrAiP diff --git a/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_cid_for_easy_excel.xls b/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_cid_for_easy_excel.xls new file mode 100644 index 0000000000000000000000000000000000000000..01ec6893d33393e51f04c07d53642284f3af7235 GIT binary patch literal 96256 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 literal 0 HcmV?d00001