From 6ab79e6c526f2e52191e2b948f8dc48873202495 Mon Sep 17 00:00:00 2001 From: jianjun Date: Tue, 2 Nov 2021 18:27:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=87=BA=20=E5=B1=85=E6=B0=91?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data-statistical-server/pom.xml | 16 ++++- .../epmet-demo/epmet-demo-server/pom.xml | 16 ++++- epmet-user/epmet-user-server/pom.xml | 16 ++++- .../java/com/epmet/constant/UserConstant.java | 2 + .../controller/IcResiUserController.java | 27 +++----- .../com/epmet/service/IcResiUserService.java | 13 +++- .../service/impl/IcResiUserServiceImpl.java | 59 ++++++++++++++++-- .../main/resources/excel/ic_resi_info_cid.xls | Bin 79872 -> 79872 bytes 8 files changed, 121 insertions(+), 28 deletions(-) diff --git a/epmet-module/data-statistical/data-statistical-server/pom.xml b/epmet-module/data-statistical/data-statistical-server/pom.xml index cf2f0f200b..687c01b462 100644 --- a/epmet-module/data-statistical/data-statistical-server/pom.xml +++ b/epmet-module/data-statistical/data-statistical-server/pom.xml @@ -97,7 +97,21 @@ com.alibaba easyexcel - 2.2.6 + 2.2.10 + + + poi + org.apache.poi + + + poi-ooxml + org.apache.poi + + + poi-ooxml-schemas + org.apache.poi + + io.github.wnjustdoit diff --git a/epmet-module/epmet-demo/epmet-demo-server/pom.xml b/epmet-module/epmet-demo/epmet-demo-server/pom.xml index 8ef89773a9..4f6c0b6021 100644 --- a/epmet-module/epmet-demo/epmet-demo-server/pom.xml +++ b/epmet-module/epmet-demo/epmet-demo-server/pom.xml @@ -16,7 +16,21 @@ com.alibaba easyexcel - 2.2.6 + 2.2.10 + + + poi + org.apache.poi + + + poi-ooxml + org.apache.poi + + + poi-ooxml-schemas + org.apache.poi + + com.epmet diff --git a/epmet-user/epmet-user-server/pom.xml b/epmet-user/epmet-user-server/pom.xml index 0d8854d5ff..cbf241f718 100644 --- a/epmet-user/epmet-user-server/pom.xml +++ b/epmet-user/epmet-user-server/pom.xml @@ -16,7 +16,21 @@ com.alibaba easyexcel - 2.2.6 + 2.2.10 + + + poi + org.apache.poi + + + poi-ooxml + org.apache.poi + + + poi-ooxml-schemas + org.apache.poi + + com.epmet diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/constant/UserConstant.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/constant/UserConstant.java index 69046a3f84..31d86dadf7 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/constant/UserConstant.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/constant/UserConstant.java @@ -101,4 +101,6 @@ public interface UserConstant { String GRID_ID="GRID_ID"; String GENDER="GENDER"; String HOUSE_TYPE_KEY="HOUSE_TYPE"; + String HOME_ID = "HOME_ID"; + } 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 f93c505efb..1f61e9f683 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 @@ -331,7 +331,7 @@ public class IcResiUserController { pageFormDTO.setPageFlag(false); //PageData> mapPageData = icResiUserService.pageResiMap(pageFormDTO); //List> list = mapPageData.getList(); - List> list = icResiUserService.dynamicQuery(pageFormDTO.getCustomerId(), pageFormDTO.getFormCode(), BASE_TABLE_NAME, pageFormDTO.getConditions()); + List> list = icResiUserService.getDataForExport(pageFormDTO.getCustomerId(), pageFormDTO.getFormCode(), BASE_TABLE_NAME, pageFormDTO.getConditions()); //list = (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\"}]"); log.info("list:{}", JSON.toJSONString(list)); @@ -350,30 +350,18 @@ public class IcResiUserController { if (item.getChildGroup() != null){ if (!item.getChildGroup().getTableName().equals(BASE_TABLE_NAME)) { sheetMap.put( n.incrementAndGet(),mapData); - System.out.println(n.get()); } } }); - for (FormGroupDTO group : resiFormItems.getGroupList()) { - - } - - - Workbook workbook = ExcelExportUtil.exportExcel(sheetMap, params); + workbook.setActiveSheet(0); + //header + String fileName = "居民信息.xls"; response.setHeader("content-Type", "application/vnd.ms-excel"); - response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("居民信息.xls", "UTF-8")); + response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8")); workbook.write(response.getOutputStream()); - - /* //方式1 通过mv导出 - ModelAndView mv = new ModelAndView(new EasypoiTemplateExcelView()); - mv.addObject(TemplateExcelConstants.FILE_NAME, "继续追踪导出详情-")); - mv.addObject(TemplateExcelConstants.PARAMS, new TemplateExportParams(templatePath)); - mv.addObject(TemplateExcelConstants.MAP_DATA, mapData); - return mv;*/ - } @PostMapping("import/excel") @@ -383,8 +371,9 @@ public class IcResiUserController { } @PostMapping("test") - public Result>> test(@LoginUser TokenDto tokenDto,@RequestBody DynamicQueryFormDTO formDTO){ - formDTO.setCustomerId(tokenDto.getCustomerId()); + public Result>> test(@RequestBody DynamicQueryFormDTO formDTO){ + formDTO.setCustomerId("45687aa479955f9d06204d415238f7cc"); + //formDTO.setCustomerId(tokenDto.getCustomerId()); return new Result>>().ok(icResiUserService.dynamicQuery(formDTO.getCustomerId(), formDTO.getFormCode(), formDTO.getResultTableName(), diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java index cefe0c0e88..0dea424f07 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java @@ -133,4 +133,15 @@ public interface IcResiUserService extends BaseService { String formCode, String resultTableName, List conditions); -} \ No newline at end of file + + /** + * desc:条件导出 + * @param customerId + * @param formCode + * @param baseTableName + * @param conditions + * @return + */ + List> getDataForExport(String customerId, String formCode, String baseTableName, List conditions); + +} 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 b71e120176..69990f2d9d 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 @@ -39,6 +39,7 @@ import com.epmet.commons.tools.utils.Result; import com.epmet.constant.UserConstant; import com.epmet.dao.IcResiUserDao; import com.epmet.dto.CustomerAgencyDTO; +import com.epmet.dto.CustomerGridDTO; import com.epmet.dto.IcResiUserDTO; import com.epmet.dto.form.*; import com.epmet.dto.result.*; @@ -322,8 +323,8 @@ public class IcResiUserServiceImpl extends BaseServiceImpl> gridInfoRes=govOrgOpenFeignClient.getGridListByGridIds(gridIds); @@ -342,7 +343,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl options; } + + /** + * desc:动态查询 某表的所有字段值 + * @param customerId + * @param formCode + * @param resultTableName + * @param conditions + * @return + */ + @Override public List> dynamicQuery(String customerId, String formCode, String resultTableName, @@ -732,4 +743,42 @@ public class IcResiUserServiceImpl extends BaseServiceImpl> getDataForExport(String customerId, String formCode, String baseTableName, List conditions) { + List> mapList = this.dynamicQuery(customerId, formCode, baseTableName, conditions); + mapList.parallelStream().forEach(map -> { + Object gridId = map.get(UserConstant.GRID_ID); + if (gridId != null) { + CustomerGridFormDTO formDTO = new CustomerGridFormDTO(); + formDTO.setGridId(gridId.toString()); + Result gridInfoRes = govOrgOpenFeignClient.getGridBaseInfoByGridId(formDTO); + if (gridInfoRes != null && gridInfoRes.success() && gridInfoRes.getData() != null) { + map.put(UserConstant.GRID_ID, gridInfoRes.getData().getGridName()); + } + } + Object homeId = map.get(UserConstant.HOME_ID); + if (homeId != null) { + HashSet houseIds = new HashSet<>(); + houseIds.add(homeId.toString()); + Result> houseInfoRes = govOrgOpenFeignClient.queryListHouseInfo(houseIds); + if (houseInfoRes != null && houseInfoRes.success() && CollectionUtils.isNotEmpty(houseInfoRes.getData())){ + HouseInfoDTO houseInfoDTO = houseInfoRes.getData().get(NumConstant.ZERO); + map.put("VILLAGE_NAME", houseInfoDTO.getNeighborHoodName()); + map.put("BUILD_NAME", houseInfoDTO.getBuildingName()); + map.put("HOME_ID", houseInfoDTO.getDoorName()); + } + } + }); + return mapList; + } +} diff --git a/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_cid.xls b/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_cid.xls index b6a67b92057a4a34c4e65381aaa929e24b3f3344..59747c941454bd35a0341ab329df5c96eeb52a43 100644 GIT binary patch delta 7366 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 wNQ