diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/StrConstant.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/StrConstant.java index 2e1d7d5bea..a18f34f72b 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/StrConstant.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/StrConstant.java @@ -75,6 +75,8 @@ public interface StrConstant { String STAR="*"; String QUESTION_MARK="?"; + String QUESTION_MARK_TRANSFER="\\?"; + String AND_MARK="&"; /** * 空字符串 diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/FormItemTypeEnum.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/FormItemTypeEnum.java new file mode 100644 index 0000000000..753852bfff --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/FormItemTypeEnum.java @@ -0,0 +1,53 @@ +/** + * Copyright (c) 2018 人人开源 All rights reserved. + * + * https://www.renren.io + * + * 版权所有,侵权必究! + */ + +package com.epmet.commons.tools.enums; + +/** + * form表单 配置item类型 枚举 + * + * @author Mark sunlightcs@gmail.com + * @since 1.0.0 + */ +public enum FormItemTypeEnum { + //枚举类型 + INPUT("input", "输入框"), + RADIO("radio", "单选框"), + CHECKBOX("checkbox", "复选框"), + SELECT("select", "下拉框"), + TEXTAREA("textarea", "文本域"), + CASCADER("cascader", "及联"), + DATE_PICKER("datepicker", "组织"), + UN_KNOWN("un_known", "不支持的类型"); + + private String code; + private String desc; + + FormItemTypeEnum(String value,String name) { + this.code = value; + this.desc = name; + } + + public static FormItemTypeEnum getEnum(String code) { + FormItemTypeEnum[] values = FormItemTypeEnum.values(); + for (FormItemTypeEnum value : values) { + if (value.getCode().equals(code)) { + return value; + } + } + return UN_KNOWN; + } + + public String getCode() { + return code; + } + + public String getDesc() { + return desc; + } +} diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcNeighborHoodController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcNeighborHoodController.java index 14dcda318a..fcd64c4658 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcNeighborHoodController.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcNeighborHoodController.java @@ -45,7 +45,7 @@ import java.util.Map; @RestController @RequestMapping("icneighborhood") public class IcNeighborHoodController { - + @Autowired private IcNeighborHoodService icNeighborHoodService; @@ -109,4 +109,4 @@ public class IcNeighborHoodController { return new Result>().ok(icNeighborHoodService.getListByIds(ids)); } -} \ No newline at end of file +} diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/constant/IcResiUserConstant.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/constant/IcResiUserConstant.java new file mode 100644 index 0000000000..6b32f663fc --- /dev/null +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/constant/IcResiUserConstant.java @@ -0,0 +1,11 @@ +package com.epmet.constant; + +/** + * @author zhaoqifeng + * @dscription + * @date 2021/6/8 15:28 + */ +public interface IcResiUserConstant { + + String IC_RESI_USER = "ic_resi_user"; +} 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 8b571dce85..fd3a88fd79 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 @@ -44,10 +44,12 @@ import com.epmet.commons.tools.utils.HttpClientManager; import com.epmet.commons.tools.utils.IpUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.ValidatorUtils; +import com.epmet.constant.IcResiUserConstant; import com.epmet.dto.IcResiUserDTO; import com.epmet.dto.form.*; import com.epmet.dto.result.*; import com.epmet.enums.IcResiUserTableEnum; +import com.epmet.excel.support.ExportResiUserItemDTO; import com.epmet.feign.OperCustomizeOpenFeignClient; import com.epmet.feign.OssFeignClient; import com.epmet.service.IcResiUserImportService; @@ -84,7 +86,7 @@ import java.util.stream.Collectors; @RestController @RequestMapping("icresiuser") public class IcResiUserController { - private static final String BASE_TABLE_NAME = "ic_resi_user"; + //todo 枚举吧 private static final String IC_RESI_FORM_CODE = "resi_base_info"; @@ -227,7 +229,7 @@ public class IcResiUserController { Map> otherSheetItems = buildItemMap(resiFormItems); - Map> resiMainList = icResiUserService.getDataForExport(otherSheetItems.get(BASE_TABLE_NAME), BASE_TABLE_NAME, pageFormDTO, staffInfoCacheResult.getAgencyId(), staffOrgPath); + Map> resiMainList = null;//icResiUserService.getDataForExport(otherSheetItems.get(IcResiUserConstant.IC_RESI_USER), IcResiUserConstant.IC_RESI_USER, pageFormDTO, staffInfoCacheResult.getAgencyId(), staffOrgPath); //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\"}]"); log.info("resiMainList:{}", JSON.toJSONString(resiMainList)); String templatePath = "excel/ic_resi_info_cid.xls"; @@ -241,13 +243,13 @@ public class IcResiUserController { AtomicInteger n = new AtomicInteger(); for (FormItemResult item : resiFormItems.getItemList()) { //如果 childGroup是空 或者是主表 则跳过 继续下次循环 - if (item.getChildGroup() == null || BASE_TABLE_NAME.equals(item.getChildGroup().getTableName())) { + if (item.getChildGroup() == null || IcResiUserConstant.IC_RESI_USER.equals(item.getChildGroup().getTableName())) { continue; } String tableName = item.getChildGroup().getTableName(); Map itemMap1 = otherSheetItems.get(tableName); - Map> resiChildMap = icResiUserService.getDataForExport(itemMap1, tableName, pageFormDTO, staffInfoCacheResult.getAgencyId(), staffOrgPath); + Map> resiChildMap = null;//icResiUserService.getDataForExport(itemMap1, tableName, pageFormDTO, staffInfoCacheResult.getAgencyId(), staffOrgPath); //resiChildMap.forEach((key, value) -> value.putAll(resiMainList.get(key))); Map mapData2 = new HashMap<>(); @@ -286,7 +288,7 @@ public class IcResiUserController { ExcelWriter excelWriter = EasyExcel.write(getOutputStream("居民基本信息.xlsx", response)).withTemplate(file).build(); FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).build(); - IcResiUserTableEnum tableEnums = IcResiUserTableEnum.getObjectByTableName(BASE_TABLE_NAME); + IcResiUserTableEnum tableEnums = IcResiUserTableEnum.getObjectByTableName(IcResiUserConstant.IC_RESI_USER); WriteSheet fistSheet = EasyExcel.writerSheet(tableEnums.getSheetNo()).build(); pageFormDTO.setPageSize(NumConstant.FIVE_HUNDRED); @@ -296,24 +298,24 @@ public class IcResiUserController { Map childTableWriteSheetMap = new HashMap<>(); Map> resiMainTableMap = null; do { - resiMainTableMap = icResiUserService.getDataForExport(otherSheetItems.get(BASE_TABLE_NAME), BASE_TABLE_NAME, pageFormDTO, staffInfoCacheResult.getAgencyId(), staffOrgPath); + resiMainTableMap = null;//icResiUserService.getDataForExport(otherSheetItems.get(IcResiUserConstant.IC_RESI_USER), IcResiUserConstant.IC_RESI_USER, pageFormDTO, staffInfoCacheResult.getAgencyId(), staffOrgPath); //如果 返回的条数小于每页显示的数 则退出查询 if (resiMainTableMap.keySet().size() < pageFormDTO.getPageSize()) { - stopSearchSet.add(BASE_TABLE_NAME); + stopSearchSet.add(IcResiUserConstant.IC_RESI_USER); } //写入数据 excelWriter.fill(new FillWrapper("t1", resiMainTableMap.values()), fillConfig, fistSheet); pageFormDTO.setPageNo(pageFormDTO.getPageNo() + 1); //重置数据 resiMainTableMap.clear(); - } while (!stopSearchSet.contains(BASE_TABLE_NAME)); + } while (!stopSearchSet.contains(IcResiUserConstant.IC_RESI_USER)); //子表数据写入 AtomicInteger n = new AtomicInteger(); for (FormItemResult item : resiFormItems.getItemList()) { //如果 childGroup是空 或者是主表 则跳过 继续下次循环 - if (item.getChildGroup() == null || BASE_TABLE_NAME.equals(item.getChildGroup().getTableName())) { + if (item.getChildGroup() == null || IcResiUserConstant.IC_RESI_USER.equals(item.getChildGroup().getTableName())) { continue; } String tableName = item.getChildGroup().getTableName(); @@ -326,7 +328,7 @@ public class IcResiUserController { continue; } Map itemMap1 = otherSheetItems.get(tableName); - Map> resiChildMap = icResiUserService.getDataForExport(itemMap1, tableName, pageFormDTO, staffInfoCacheResult.getAgencyId(), staffOrgPath); + Map> resiChildMap = null;//icResiUserService.getDataForExport(itemMap1, tableName, pageFormDTO, staffInfoCacheResult.getAgencyId(), staffOrgPath); //如果 返回的条数小于每页显示的数 则退出查询 if (resiChildMap.keySet().size() < pageFormDTO.getPageSize()) { stopSearchSet.add(tableName); @@ -365,8 +367,6 @@ public class IcResiUserController { pageFormDTO.setCustomerId(customerId); pageFormDTO.setPageFlag(false); - - //获取模版文件 File file = getExportTemplateFile(customerId); ExcelWriter excelWriter = null; @@ -381,34 +381,56 @@ public class IcResiUserController { //获取表单项 List resiFormAllItems = icResiUserService.listFormItems(customerId, IC_RESI_FORM_CODE); + Map allItemMap = resiFormAllItems.stream().collect(Collectors.toMap(FormItemResult::getItemId, o -> o)); + Map map = new HashMap<>(); + allItemMap.values().forEach(item->{ + String tableName = item.getTableName(); + ExportResiUserItemDTO exportItem = map.getOrDefault(tableName, new ExportResiUserItemDTO()); + map.putIfAbsent(tableName,exportItem); + String columnName = item.getColumnName().concat(item.getColumnNum() == NumConstant.ZERO ? StrConstant.EPMETY_STR : item.getColumnNum().toString()); + exportItem.getItemMap().put(columnName,item); + if (item.getOptionSourceType().equals("remote")&&item.getOptionSourceValue().contains(StrConstant.QUESTION_MARK)){ + //多个参数 + String[] paramArr = item.getOptionSourceValue().split(StrConstant.QUESTION_MARK_TRANSFER)[NumConstant.ONE].split(StrConstant.AND_MARK); + Arrays.stream(paramArr).forEach(o->{ + FormItemResult value = allItemMap.get(o); + if (value == null){ + return; + } + Set conditionSet = exportItem.getRemoteItemConditionMap().getOrDefault(item.getItemId(),new HashSet<>()); + conditionSet.add(value); + exportItem.getRemoteItemConditionMap().putIfAbsent(item.getItemId(),conditionSet); + }); + } + }); + //每个表对应的 item ;key:表名,value:<字段名:item对象> - Map> tableItemMap = resiFormAllItems.stream() - .collect(Collectors.groupingBy(FormItemResult::getTableName, - Collectors.toMap(o->o.getColumnName().concat(NumConstant.ZERO == o.getColumnNum()? StrConstant.EPMETY_STR:o.getColumnNum().toString()), o -> o))); Map childTableWriteSheetMap = new HashMap<>(); //表数据写入 //通过枚举获取相关表并按照sheetNo排序 List resiTableList = Arrays.stream(IcResiUserTableEnum.values()) .sorted(Comparator.comparing(IcResiUserTableEnum::getSheetNo)) .collect(Collectors.toList()); + List> resiResultList = null; for (IcResiUserTableEnum tableEnum : resiTableList) { String tableName = tableEnum.getTableName(); pageFormDTO.setPageNo(NumConstant.ONE); - //循环一次 写入每个sheet + //循环一次 写入一个sheet do { - Map> resiChildMap = icResiUserService.getDataForExport(tableItemMap.get(tableName), tableName, pageFormDTO, staffInfoCacheResult.getAgencyId(), staffOrgPath); + resiResultList = icResiUserService.getDataForExport(map.get(tableName), tableName, pageFormDTO, staffInfoCacheResult.getAgencyId(), staffOrgPath); //如果 返回的条数小于每页显示的数 则退出查询 - if (resiChildMap.keySet().size() < pageFormDTO.getPageSize()) { + if (resiResultList.size() < pageFormDTO.getPageSize()) { stopSearchSet.add(tableName); } //如果没有 构建新的writeSheet WriteSheet writeSheet = childTableWriteSheetMap.getOrDefault(tableName,EasyExcel.writerSheet(tableEnum.getSheetNo()).build()); childTableWriteSheetMap.putIfAbsent(tableName, writeSheet); //写入数据 - excelWriter.fill(new FillWrapper("t" + (tableEnum.getSheetNo() + NumConstant.ONE), resiChildMap.values()), writeSheet); + excelWriter.fill(new FillWrapper("t" + (tableEnum.getSheetNo() + NumConstant.ONE), resiResultList), writeSheet); pageFormDTO.setPageNo(pageFormDTO.getPageNo() + NumConstant.ONE); //重置数据 - resiChildMap.clear(); + resiResultList.clear(); + //如果包含则说明子表的数据 已经查询完毕 无需再继续查询了 } while (!stopSearchSet.contains(tableName)); } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/enums/IcResiUserTableEnum.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/enums/IcResiUserTableEnum.java index eb4ecd977e..ffd0076429 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/enums/IcResiUserTableEnum.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/enums/IcResiUserTableEnum.java @@ -10,7 +10,9 @@ import lombok.AllArgsConstructor; */ @AllArgsConstructor public enum IcResiUserTableEnum { - + /** + * 注释 + */ IC_RESI_USER("ic_resi_user","社区居民基本信息录入表", 0, 3, null), IC_PARTY_MEMBER("ic_party_member","党员信息录入表", 1, 2, "IS_PARTY"), IC_ENSURE_HOUSE("ic_ensure_house","保障房人员信息录入表", 2, 2, "IS_ENSURE_HOUSE"), diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/support/ExportResiUserItemDTO.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/support/ExportResiUserItemDTO.java new file mode 100644 index 0000000000..8f7cb6de14 --- /dev/null +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/support/ExportResiUserItemDTO.java @@ -0,0 +1,29 @@ +package com.epmet.excel.support; + +import com.epmet.dto.result.FormItemResult; +import lombok.Data; + +import java.io.Serializable; +import java.util.*; + +/** + * desc: + * + * @author: LiuJanJun + * @date: 2021/11/18 3:31 下午 + * @version: 1.0 + */ +@Data +public class ExportResiUserItemDTO implements Serializable { + + private static final long serialVersionUID = -6581208659638591761L; + + /** + * 该表对应的 字段名:item + */ + private Map itemMap = new HashMap<>(); + /** + * 该表对应的所有远程item的相关条件 key:remote的itemID value:条件中用到的所有的item + */ + private Map> remoteItemConditionMap = new HashMap<>(); +} 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 d18d47d1b3..52e256105c 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 @@ -23,6 +23,7 @@ import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.dto.form.*; import com.epmet.dto.result.*; import com.epmet.entity.IcResiUserEntity; +import com.epmet.excel.support.ExportResiUserItemDTO; import java.util.List; import java.util.Map; @@ -105,12 +106,12 @@ public interface IcResiUserService extends BaseService { /** * desc:条件导出 * - * @param itemList + * @param exportResiUserItemDTO * @param baseTableName * @return Map> 用户Id:用户信息所有的字段名及值 */ - Map> getDataForExport(Map itemList, String baseTableName, IcResiUserPageFormDTO pageFormDTO, String currentStaffAgencyId, - String staffOrgPath); + List> getDataForExport(ExportResiUserItemDTO exportResiUserItemDTO, String baseTableName, IcResiUserPageFormDTO pageFormDTO, String currentStaffAgencyId, + String staffOrgPath); /** * @Description 家庭关系 diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java index e0e1bac217..b2adb20543 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java @@ -7,6 +7,7 @@ import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcelFactory; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.epmet.commons.tools.constant.ServiceConstant; +import com.epmet.commons.tools.constant.StrConstant; import com.epmet.commons.tools.dto.result.OptionResultDTO; import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.ExceptionUtils; @@ -15,7 +16,6 @@ import com.epmet.commons.tools.feign.ResultDataResolver; import com.epmet.commons.tools.security.user.LoginUserUtil; import com.epmet.dao.IcResiUserDao; import com.epmet.dto.*; -import com.epmet.dto.form.AgencyIdFormDTO; import com.epmet.dto.form.GridOptionFormDTO; import com.epmet.dto.form.HouseFormDTO; import com.epmet.dto.form.LoginUserDetailsFormDTO; @@ -90,7 +90,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res // 是否必填 private Integer required; - private List colIndexs; + private List colIndex; //private List colContents; // 单元格内容 private String cellContent; @@ -544,7 +544,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res || "daterange".equals(columnWrapper.getItemType()) ) { - String cellContent = row.get(columnWrapper.getColIndexs().get(0)); + String cellContent = row.get(columnWrapper.getColIndex().get(0)); columnWrapper.setCellContent(cellContent); columnWrapper.setColValue(cellContent); @@ -553,7 +553,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res String optionSourceType = columnWrapper.getOptionSourceType(); // 取单元格的内容 - String cellContent = row.get(columnWrapper.getColIndexs().get(0)); + String cellContent = row.get(columnWrapper.getColIndex().get(0)); columnWrapper.setCellContent(cellContent); if ("local".equals(optionSourceType)) { @@ -677,7 +677,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res String combinedLabel = StringUtils.isBlank(groupLabel) ? item.getLabel() : groupLabel.concat(":").concat(item.getLabel()); columnWrapper.setCombinedLabel(combinedLabel); columnWrapper.setColumnName(item.getColumnName()); - columnWrapper.setColIndexs(entry.getValue()); + columnWrapper.setColIndex(entry.getValue()); columnWrapper.setRequired(item.getRequired()); columnWrapper.setOptionSourceType(item.getOptionSourceType()); @@ -699,7 +699,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res private String getCheckBoxColValue(ColumnWrapper columnWrapper, Map dataRow, Map checkboxOptions) { Map options = columnWrapper.getOptions(); - List colIndexs = columnWrapper.getColIndexs(); + List colIndexs = columnWrapper.getColIndex(); List optionValues = colIndexs.stream().filter(i -> { String cellContent = dataRow.get(i); @@ -770,8 +770,8 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res String cascadeItemId = null; ColumnWrapper cascadeItemColumnWrapper = null; - if (fullUri.indexOf("?") != -1) { - String[] uriParts = fullUri.split("\\?"); + if (fullUri.indexOf(StrConstant.QUESTION_MARK) != -1) { + String[] uriParts = fullUri.split(StrConstant.QUESTION_MARK_TRANSFER); pureUri = uriParts[0]; cascadeItemId = uriParts[1]; @@ -819,8 +819,11 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res break; case "/gov/org/icneighborhood/neighborhoodoption": IcNeighborHoodDTO nform = new IcNeighborHoodDTO(); - nform.setAgencyId(currUserAgencyId); - nform.setGridId(cascadeItemColumnWrapper.getColValue()); + String gridId = cascadeItemColumnWrapper.getColValue(); + if (StringUtils.isBlank(gridId)){ + nform.setAgencyId(currUserAgencyId); + } + nform.setGridId(gridId); options = getResultDataOrThrowsException(govOrgOpenFeignClient.getNeighborHoodOptions(nform), ServiceConstant.GOV_ORG_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), null, null); break; case "/sys/dict/data/education": @@ -838,6 +841,8 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res case "/sys/dict/data/relationship": options = getResultDataOrThrowsException(adminOpenFeignClient.getRelationshipOption(), ServiceConstant.GOV_ORG_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), null, null); break; + default: + log.warn("listRemoteOptions url is not supported"); } 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 ddb7c9307d..277b7220a7 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 @@ -27,6 +27,7 @@ import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.constant.StrConstant; import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult; +import com.epmet.commons.tools.enums.FormItemTypeEnum; import com.epmet.commons.tools.enums.GenderEnum; import com.epmet.commons.tools.enums.HouseTypeEnum; import com.epmet.commons.tools.enums.RelationshipEnum; @@ -44,6 +45,7 @@ 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.IcResiUserConstant; import com.epmet.constant.SystemMessageType; import com.epmet.constant.UserConstant; import com.epmet.dao.IcResiUserDao; @@ -55,6 +57,7 @@ import com.epmet.dto.form.*; import com.epmet.dto.form.demand.UserDemandNameQueryFormDTO; import com.epmet.dto.result.*; import com.epmet.entity.IcResiUserEntity; +import com.epmet.excel.support.ExportResiUserItemDTO; import com.epmet.feign.EpmetHeartOpenFeignClient; import com.epmet.feign.EpmetMessageOpenFeignClient; import com.epmet.feign.GovOrgOpenFeignClient; @@ -63,6 +66,8 @@ import com.epmet.service.IcResiUserService; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -639,131 +644,136 @@ public class IcResiUserServiceImpl extends BaseServiceImpl> getDataForExport(Map formItemMap, String baseTableName,IcResiUserPageFormDTO pageFormDTO, - String currentStaffAgencyId, - String staffOrgPath) { + public List> getDataForExport(ExportResiUserItemDTO formItemMap, String baseTableName, IcResiUserPageFormDTO pageFormDTO, + String currentStaffAgencyId, + String staffOrgPath) { Page> mapListPage = PageHelper.startPage(pageFormDTO.getPageNo(), pageFormDTO.getPageSize(), pageFormDTO.getPageFlag()).doSelectPage(() -> { this.dynamicQuery(pageFormDTO.getCustomerId(), pageFormDTO.getFormCode(), baseTableName, pageFormDTO.getConditions(), currentStaffAgencyId, staffOrgPath); }); - List> mapList = mapListPage.getResult(); - 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); - - //把checkbox radio select的值放入到map里 并添加对应的 - - }); - Object gridId = map.get(UserConstant.GRID_ID); + mapListPage.getResult().stream().filter(Objects::nonNull).forEach(map -> { String resiId = null; - //获取用户Id - if ("ic_resi_user".equals(baseTableName)) { + if (IcResiUserConstant.IC_RESI_USER.equals(baseTableName)) { resiId = (String) map.get("ID"); }else { resiId = (String) map.get(UserConstant.IC_RESI_USER); } - if (StringUtils.isBlank(resiId)){ log.error("getDataForExport error,resiId is net exist:{}",map); return; } - //把人放进去 - result.put(resiId, map); - - for (Map.Entry e : formItemMap.entrySet()) { - String k = e.getKey(); - FormItemResult v = e.getValue(); - Object temp = map.get(k); - String vauleStr = temp == null ? "" : temp.toString(); - - if (v.getOptionSourceType().equals("remote")) { - try { - Map columnWrappers = new HashMap<>(); - if (v.getItemId().equals("1078")) { - IcResiUserImportServiceImpl.ColumnWrapper value = new IcResiUserImportServiceImpl.ColumnWrapper(); - value.setColValue(gridId.toString()); - columnWrappers.put("1001", value); - }else if (v.getOptionSourceValue().contains(StrConstant.QUESTION_MARK)){ - continue; - } - //todo 获取 options - Map stringMap = icResiUserImportService.listRemoteOptions(columnWrappers, v.getOptionSourceValue(), currentStaffAgencyId, "query"); - if ("checkbox".equals(v.getItemType())) { - stringMap.forEach((label, value) -> map.put(value, vauleStr.contains(value) ? "是" : "否")); - } else if ("select".equals(v.getItemType())) { - stringMap.forEach((label, value) -> { - if (vauleStr.equals(value)) { - map.put(k, label); - } - }); - } - } catch (Exception ex) { - log.warn("listRemoteOptions url:{}", v.getOptionSourceValue()); - } - } else { - if ("checkbox".equals(v.getItemType())) { + //遍历所有字段 格式化时间字段 + map.forEach((k,o) -> { + if (o instanceof java.sql.Date){ + o = DateUtils.format(((Date) o),DateUtils.DATE_PATTERN); + }else if (o instanceof java.sql.Timestamp){ + o = DateUtils.format(new Date(((Timestamp) o).getTime()),DateUtils.DATE_TIME_PATTERN); + } + map.put(k,o); + FormItemResult itemResult = formItemMap.getItemMap().get(k); + if (itemResult == null){ + return; + } + }); - v.getOptions().forEach(optionDTO -> { - map.put(optionDTO.getValue(), vauleStr.contains(optionDTO.getValue()) ? "是" : "否"); - }); - } else if ("select".equals(v.getItemType())) { - v.getOptions().forEach(optionDTO -> { - if (optionDTO.getValue().equals(vauleStr)) { - map.put(k, optionDTO.getLabel()); - } - }); - } else if ("radio".equals(v.getItemType())) { - v.getOptions().forEach(optionDTO -> { - if (optionDTO.getValue().equals(vauleStr)) { - map.put(k, optionDTO.getLabel()); - } - }); - } + //当前条数据原始的id值 map + Map originalConditionMap = new HashMap<>(); + for (FormItemResult e : formItemMap.getItemMap().values()) { + String columnName = getColumnName(e); + Object temp = map.get(columnName); + String vauleStr = temp == null ? StrConstant.EPMETY_STR : temp.toString(); + originalConditionMap.putIfAbsent(columnName,vauleStr); + if ("remote".equals(e.getOptionSourceType()) && StringUtils.isNotBlank(vauleStr)) { + putRemoteValue(formItemMap.getRemoteItemConditionMap().get(e.getItemId()), currentStaffAgencyId, map,originalConditionMap, e, columnName, vauleStr); + } else { + putOptionValue(map, e, columnName, vauleStr); } } - if (!"ic_resi_user".equals(baseTableName)) { + if (!IcResiUserConstant.IC_RESI_USER.equals(baseTableName)) { Map o = redisUtils.hGetAll(RedisKeys.getExportResiBaseInfoKey(resiId)); if (o != null){ map.putAll(o); } return; } + //把人放入redis缓存 便于后面的sheet使用基础信息 + redisUtils.hMSet(RedisKeys.getExportResiBaseInfoKey(resiId),map,RedisUtils.MINUTE_THIRTY_EXPIRE); + }); + remoteOptionCacheMap.clear(); + return mapListPage.getResult(); + } - /*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_NAME, gridInfoRes.getData().getGridName()); + /** + * key:itemId,value: key:columnName,中文 + */ + private static Map> remoteOptionCacheMap = new HashMap<>(); + private void putRemoteValue(Set conditionItemSet, String currentStaffAgencyId, Map map, Map originalConditionMap, FormItemResult e, String columnName, String vauleStr) { + try { + Map columnWrappers = new HashMap<>(); + if (e.getOptionSourceValue().contains(StrConstant.QUESTION_MARK)){ + for (FormItemResult o : conditionItemSet) { + String column = getColumnName(o); + Object conditionValue = originalConditionMap.getOrDefault(column, map.get(column)); + originalConditionMap.putIfAbsent(column,conditionValue.toString()); + IcResiUserImportServiceImpl.ColumnWrapper value = new IcResiUserImportServiceImpl.ColumnWrapper(); + value.setColValue(conditionValue.toString()); + columnWrappers.put(o.getItemId(), value); } + } + /*if (e.getItemId().equals("1078")) { + IcResiUserImportServiceImpl.ColumnWrapper value = new IcResiUserImportServiceImpl.ColumnWrapper(); + value.setColValue(gridId.toString()); + columnWrappers.put("1001", value); + }else if (e.getOptionSourceValue().contains(StrConstant.QUESTION_MARK)){ + continue; }*/ - 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.getHouseName()); - map.put("UNIT_ID", houseInfoDTO.getUnitName()); + Cache cache = remoteOptionCacheMap.getOrDefault(e.getItemId(), CacheBuilder.newBuilder().maximumSize(NumConstant.FIVE_HUNDRED).build()); + remoteOptionCacheMap.put(e.getItemId(),cache); + String cacheValue = cache.getIfPresent(vauleStr); + if (StringUtils.isNotBlank(cacheValue)){ + map.put(columnName,cacheValue); + } else { + Map remoteOptions = icResiUserImportService.listRemoteOptions(columnWrappers, e.getOptionSourceValue(), currentStaffAgencyId, "query"); + if (FormItemTypeEnum.CHECKBOX.getCode().equals(e.getItemType())) { + remoteOptions.forEach((label, value) -> map.put(value, vauleStr.contains(value) ? "是" : "否")); + } else if (FormItemTypeEnum.SELECT.getCode().equals(e.getItemType())) { + remoteOptions.forEach((label, value) -> { + if (vauleStr.equals(value)) { + map.put(columnName, label); + } + cache.put(value,label); + }); } } - //把人放入缓存 - redisUtils.hMSet(RedisKeys.getExportResiBaseInfoKey(resiId),map,RedisUtils.MINUTE_THIRTY_EXPIRE); - }); - return result; + } catch (Exception ex) { + log.warn("listRemoteOptions url:{}", e.getOptionSourceValue()); + } + } + + private void putOptionValue(Map map, FormItemResult e, String columnName, String vauleStr) { + FormItemTypeEnum itemTypeEnum = FormItemTypeEnum.getEnum(e.getItemType()); + switch (itemTypeEnum) { + case CHECKBOX: + e.getOptions().forEach(optionDTO -> { + map.put(optionDTO.getValue(), vauleStr.contains(optionDTO.getValue()) ? "是" : "否"); + }); + break; + case SELECT: + case RADIO: + e.getOptions().forEach(optionDTO -> { + if (optionDTO.getValue().equals(vauleStr)) { + map.put(columnName, optionDTO.getLabel()); + } + }); + break; + default: + } + } + + private String getColumnName(FormItemResult e) { + return e.getColumnNum() == NumConstant.ZERO? e.getColumnName():e.getColumnName().concat(e.getColumnNum().toString()); } /** diff --git a/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_cid_for_easy_excel.xlsx b/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_cid_for_easy_excel.xlsx index c427b87ad5..bb88725ee6 100644 Binary files a/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_cid_for_easy_excel.xlsx and b/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_cid_for_easy_excel.xlsx differ