From 7c0a29757930dbb472edadd911248e09a5df3c76 Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Wed, 3 Nov 2021 23:14:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9A=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9excel=E8=A1=A8=E5=A4=B4=E8=A7=A3=E6=9E=90=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=8C=E4=BD=BF=E6=9B=B4=E9=80=9A=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/IcResiUserServiceImpl.java | 189 +++++++++++------- 1 file changed, 119 insertions(+), 70 deletions(-) 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 e116058d4e..1ce99e36da 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 @@ -435,9 +435,12 @@ public class IcResiUserServiceImpl extends BaseServiceImpl> headList = readListener.getHeadList(); List> dataList = readListener.getDataList(); @@ -458,10 +470,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl> headers = mergeHead(headList); // 查询form相关信息 - CustomerFormQueryDTO form = new CustomerFormQueryDTO(); - form.setFormCode("resi_base_info"); - Result> result = operCustomizeOpenFeignClient.listItems(form); - List customerItems = getResultDataOrThrowsException(result, ServiceConstant.OPER_CUSTOMIZE_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "【居民信息excel导入】查询表单相关信息失败"); + List customerItems = listFormItems("resi_base_info"); // 清洗表头数据 Map abandonedHeaders = washHeaders(headers, customerItems); @@ -481,12 +490,57 @@ public class IcResiUserServiceImpl extends BaseServiceImpl formItem) ); - Map headerColumnWrapper = integrate(formItemMap, combinedHeaders, dataList, abandonedHeaders); + Map headerColumnWrapper = convertExcelHeaders2DBColumnWrappers(formItemMap, combinedHeaders, dataList, abandonedHeaders); // 持久化 persist(headerColumnWrapper, dataList, currUserAgencyId, abandonedHeaders, customerItems.get(0).getTableName(), currUserAgencyPids, currentUserId); - return headerColumnWrapper; + return headers; + } + + /** + * excel导入居民附加信息 + * @param excelPathName + * @param sheetNo + * @param headRowNumber + * @param currUserAgencyId + * @param currUserAgencyPids + * @param currentUserId + * @return + */ + private Object importIcResiExtraInfoFromExcel(String excelPathName, int sheetNo, int headRowNumber, String currUserAgencyId, String currUserAgencyPids, String currentUserId) { + DynamicEasyExcelListener readListener = new DynamicEasyExcelListener(); + EasyExcelFactory.read(new File(excelPathName)).registerReadListener(readListener).headRowNumber(headRowNumber).sheet(sheetNo).doRead(); + + List> headList = readListener.getHeadList(); + List> dataList = readListener.getDataList(); + + Map> headers = mergeHead(headList); + + // 查询form相关信息 + List customerItems = listFormItems("resi_base_info"); + + // 清洗表头数据 + Map abandonedHeaders = washHeaders(headers, customerItems); + + //合并多级表头 + HashMap> combinedHeaders = combineHeaders(headers); + + // 得到客户配置item数据 + Map formItemMap = customerItems.stream().collect( + Collectors.toMap(formItem -> { + String groupLabel = formItem.getGroupLabel(); + String label = formItem.getLabel(); + if (StringUtils.isNotBlank(groupLabel)) { + return groupLabel.concat(":").concat(label); + } else { + return label; + } + }, formItem -> formItem) + ); + Map headerColumnWrapper = convertExcelHeaders2DBColumnWrappers(formItemMap, combinedHeaders, dataList, abandonedHeaders); + + return formItemMap; } /** @@ -574,6 +628,18 @@ public class IcResiUserServiceImpl extends BaseServiceImpl listFormItems(String formCode) { + CustomerFormQueryDTO form = new CustomerFormQueryDTO(); + form.setFormCode(formCode); + Result> result = operCustomizeOpenFeignClient.listItems(form); + return getResultDataOrThrowsException(result, ServiceConstant.OPER_CUSTOMIZE_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "【居民信息excel导入】查询表单相关信息失败"); + } + /** * @description 合并头 * @@ -626,14 +692,21 @@ public class IcResiUserServiceImpl extends BaseServiceImpl integrate(Map formItemMap, Map> combinedHeaders, - List> datas, Map abandonedHeaders) { + private Map convertExcelHeaders2DBColumnWrappers(Map formItemMap, Map> combinedHeaders, + List> datas, Map abandonedHeaders) { // HashMap> tables = new HashMap<>(); Map columns = new LinkedHashMap<>(combinedHeaders.size()); @@ -806,6 +879,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl> * * @param headList * @return @@ -813,67 +887,42 @@ public class IcResiUserServiceImpl extends BaseServiceImpl> mergeHead(List> headList) { - Map l1 = headList.get(0); - Map l2 = headList.get(1); - Map l3 = headList.get(2); - - String l1LastHeadName = ""; - String l2LastHeadName = ""; - - //Map resultMap = new HashMap<>(); - HashMap> result = new HashMap<>(); - - for (Map.Entry entry : l1.entrySet()) { - - StringBuilder headerNameConcatStr = new StringBuilder(); - Integer key = entry.getKey(); - String l1TempValue = entry.getValue(); + Map lastNotNullHeads = new LinkedHashMap<>(); + + Map> mergedHead = new LinkedHashMap<>(); + + int levelCount = headList.size(); - String l2TempValue = l2.get(key); - String l3TempValue = l3.get(key); + Map firstLevel = headList.get(0); + + // 遍历所有列 + for (Map.Entry column : firstLevel.entrySet()) { + Integer columIndex = column.getKey(); - if (StringUtils.isNotBlank(l1TempValue)) { - l1LastHeadName = l1TempValue; - } - - if (StringUtils.isNotBlank(l2TempValue)) { - l2LastHeadName = l2TempValue; - } - - // 开始拼接 - if (StringUtils.isNotBlank(l3TempValue)) { - //headerNameConcatStr.append(l1LastHeadName).append(":").append(l2LastHeadName).append(":").append(l3TempValue); - //resultMap.put(key, headerNameConcatStr.toString()); - ArrayList parts = new ArrayList<>(); - parts.add(l1LastHeadName); - parts.add(l2LastHeadName); - parts.add(l3TempValue); - result.put(key, parts); - continue; - } - - if (StringUtils.isNotBlank(l2TempValue)) { - //headerNameConcatStr.append(l1LastHeadName).append(":").append(l2LastHeadName); - //resultMap.put(key, headerNameConcatStr.toString()); - ArrayList parts = new ArrayList<>(); - parts.add(l1LastHeadName); - parts.add(l2LastHeadName); - result.put(key, parts); - continue; - } - - if (StringUtils.isNotBlank(l1TempValue)) { - //headerNameConcatStr.append(l1LastHeadName); - //resultMap.put(key, headerNameConcatStr.toString()); - ArrayList parts = new ArrayList<>(); - parts.add(l1LastHeadName); - result.put(key, parts); - continue; + List labels = new ArrayList<>(); + + // 竖着遍历该列的所有行 + for (int currentLevel = 0; currentLevel < levelCount; currentLevel ++) { + String label = headList.get(currentLevel).get(columIndex); + + if (StringUtils.isNotBlank(label)) { + lastNotNullHeads.put(currentLevel, label); + } else { + if (currentLevel == 0 || StringUtils.isBlank(headList.get(currentLevel - 1).get(columIndex))) { + label = lastNotNullHeads.get(currentLevel); + } + } + + if (StringUtils.isNotBlank(label)) { + labels.add(label); + } } + mergedHead.put(columIndex, labels); } - return result; + + return mergedHead; } /**