| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -435,9 +435,12 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    @Override | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public Object importIcResiInfoFromExcel(String currUserAgencyId) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        String excelPathName = "/opt/test/基础信息表/resi_info.xls"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        CustomerAgencyDTO agencyInfo = getResultDataOrThrowsException(govOrgOpenFeignClient.getAgencyById(currUserAgencyId), ServiceConstant.GOV_ORG_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), null); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        String loginUserId = loginUserUtil.getLoginUserId(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return importIcResiInfoFromExcel(0, 3, currUserAgencyId, agencyInfo.getPids(), loginUserId); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					         | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        //return importIcResiInfoFromExcel(excelPathName, 0, 3, currUserAgencyId, agencyInfo.getPids(), loginUserId);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return importIcResiExtraInfoFromExcel(excelPathName, 1, 2, currUserAgencyId, agencyInfo.getPids(), loginUserId); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//        imporExcel(1, 1);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//        imporExcel(2, 1);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//        imporExcel(3, 1);
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -448,9 +451,18 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//        imporExcel(8, 1);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private Object importIcResiInfoFromExcel(int sheetNo, int headRowNumber, String currUserAgencyId, String currUserAgencyPids, String currentUserId) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * excel导入居民基本信息 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param sheetNo | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param headRowNumber | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param currUserAgencyId | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param currUserAgencyPids | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param currentUserId | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @return | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private Object importIcResiInfoFromExcel(String excelPathName, int sheetNo, int headRowNumber, String currUserAgencyId, String currUserAgencyPids, String currentUserId) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        DynamicEasyExcelListener readListener = new DynamicEasyExcelListener(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        EasyExcelFactory.read(new File("/opt/test/基础信息表/resi_info.xls")).registerReadListener(readListener).headRowNumber(3).sheet(sheetNo).doRead(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        EasyExcelFactory.read(new File(excelPathName)).registerReadListener(readListener).headRowNumber(headRowNumber).sheet(sheetNo).doRead(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        List<Map<Integer, String>> headList = readListener.getHeadList(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        List<Map<Integer, String>> dataList = readListener.getDataList(); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -458,10 +470,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, List<String>> headers = mergeHead(headList); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 查询form相关信息
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        CustomerFormQueryDTO form = new CustomerFormQueryDTO(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        form.setFormCode("resi_base_info"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Result<List<FormItem>> result = operCustomizeOpenFeignClient.listItems(form); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        List<FormItem> customerItems = getResultDataOrThrowsException(result, ServiceConstant.OPER_CUSTOMIZE_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "【居民信息excel导入】查询表单相关信息失败"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        List<FormItem> customerItems = listFormItems("resi_base_info"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 清洗表头数据
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, String> abandonedHeaders = washHeaders(headers, customerItems); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -481,12 +490,57 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                }, formItem -> formItem) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String, ColumnWrapper> headerColumnWrapper = integrate(formItemMap, combinedHeaders, dataList, abandonedHeaders); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String, ColumnWrapper> 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<Map<Integer, String>> headList = readListener.getHeadList(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        List<Map<Integer, String>> dataList = readListener.getDataList(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, List<String>> headers = mergeHead(headList); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 查询form相关信息
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        List<FormItem> customerItems = listFormItems("resi_base_info"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 清洗表头数据
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, String> abandonedHeaders = washHeaders(headers, customerItems); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        //合并多级表头
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        HashMap<String, List<Integer>> combinedHeaders = combineHeaders(headers); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 得到客户配置item数据
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String, FormItem> 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<String, ColumnWrapper> headerColumnWrapper = convertExcelHeaders2DBColumnWrappers(formItemMap, combinedHeaders, dataList, abandonedHeaders); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					         | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return formItemMap; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -574,6 +628,18 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * 根据formCode查询该form的item列表 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param formCode | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @return | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private List<FormItem> listFormItems(String formCode) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        CustomerFormQueryDTO form = new CustomerFormQueryDTO(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        form.setFormCode(formCode); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Result<List<FormItem>> 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<IcResiUserDao, IcResi | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @description 数据整合 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @description 数据整合,将excel表头汉字信息转化成ColumnWrapper列封装数据 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     *      *      key:itemId | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     *      *      value:ColumnWrapper列包装信息 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param formItemMap item map | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     *                    key:itemId; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     *                    value: 合并之后的head字符串,例如:健康信息:监护人 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param combinedHeaders 合并之后的head信息。 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     *                        key:合并之后head字符串(例如:党员信息:入党时间); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     *                        value:列号组成的列表(例如[1,2,3]) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param datas | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param abandonedHeaders | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @return | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @author wxz | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @date 2021.10.28 17:08:51 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private Map<String, ColumnWrapper> integrate(Map<String, FormItem> formItemMap, Map<String, List<Integer>> combinedHeaders, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                                           List<Map<Integer, String>> datas, Map<Integer, String> abandonedHeaders) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private Map<String, ColumnWrapper> convertExcelHeaders2DBColumnWrappers(Map<String, FormItem> formItemMap, Map<String, List<Integer>> combinedHeaders, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                                                            List<Map<Integer, String>> datas, Map<Integer, String> abandonedHeaders) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//        HashMap<String, List<ColumnWrapper>> tables = new HashMap<>();
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String, ColumnWrapper> columns = new LinkedHashMap<>(combinedHeaders.size()); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -806,6 +879,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @description 合并表头 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     *          Map<Integer, List<String>> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param headList | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @return | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -813,67 +887,42 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @date 2021.10.27 16:17:34 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private Map<Integer, List<String>> mergeHead(List<Map<Integer, String>> headList) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, String> l1 = headList.get(0); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, String> l2 = headList.get(1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, String> l3 = headList.get(2); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        String l1LastHeadName = ""; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        String l2LastHeadName = ""; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        //Map<Integer, String> resultMap = new HashMap<>();
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        HashMap<Integer, List<String>> result = new HashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, String> lastNotNullHeads = new LinkedHashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					         | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for (Map.Entry<Integer, String> entry : l1.entrySet()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, List<String>> mergedHead = new LinkedHashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					         | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            StringBuilder headerNameConcatStr = new StringBuilder(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        int levelCount = headList.size(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            Integer key = entry.getKey(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String l1TempValue = entry.getValue(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, String> firstLevel = headList.get(0); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					         | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String l2TempValue = l2.get(key); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String l3TempValue = l3.get(key); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (StringUtils.isNotBlank(l1TempValue)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                l1LastHeadName = l1TempValue; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 遍历所有列
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for (Map.Entry<Integer, String> column : firstLevel.entrySet()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            Integer columIndex = column.getKey(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (StringUtils.isNotBlank(l2TempValue)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                l2LastHeadName = l2TempValue; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            List<String> labels = new ArrayList<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					             | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // 开始拼接
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (StringUtils.isNotBlank(l3TempValue)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //headerNameConcatStr.append(l1LastHeadName).append(":").append(l2LastHeadName).append(":").append(l3TempValue);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //resultMap.put(key, headerNameConcatStr.toString());
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                ArrayList<String> parts = new ArrayList<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                parts.add(l1LastHeadName); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                parts.add(l2LastHeadName); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                parts.add(l3TempValue); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                result.put(key, parts); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                continue; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // 竖着遍历该列的所有行
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            for (int currentLevel = 0; currentLevel < levelCount; currentLevel ++) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                String label = headList.get(currentLevel).get(columIndex); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (StringUtils.isNotBlank(l2TempValue)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //headerNameConcatStr.append(l1LastHeadName).append(":").append(l2LastHeadName);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //resultMap.put(key, headerNameConcatStr.toString());
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                ArrayList<String> parts = new ArrayList<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                parts.add(l1LastHeadName); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                parts.add(l2LastHeadName); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                result.put(key, parts); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                continue; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                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(l1TempValue)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //headerNameConcatStr.append(l1LastHeadName);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //resultMap.put(key, headerNameConcatStr.toString());
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                ArrayList<String> parts = new ArrayList<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                parts.add(l1LastHeadName); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                result.put(key, parts); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                continue; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (StringUtils.isNotBlank(label)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    labels.add(label); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            mergedHead.put(columIndex, labels); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return result; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					         | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return mergedHead; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |