| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -6,6 +6,9 @@ import cn.afterturn.easypoi.excel.entity.ExportParams; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.alibaba.excel.EasyExcel; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.alibaba.excel.EasyExcelFactory; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.bean.ResiImportCategoryData; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.bean.ResiImportResiCategoryChangedCache; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.bean.ResiImportChangedData; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.commons.tools.constant.ServiceConstant; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.commons.tools.constant.StrConstant; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.commons.tools.dto.result.OptionResultDTO; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -22,12 +25,14 @@ import com.epmet.dto.form.LoginUserDetailsFormDTO; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.dto.result.FormItemResult; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.dto.result.LoginUserDetailsResultDTO; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.dto.result.OptionDTO; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.dto.result.ResiCategoryItemResultDTO; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.entity.IcResiUserEntity; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.enums.IcResiUserTableEnum; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.excel.handler.DynamicEasyExcelListener; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.feign.EpmetAdminOpenFeignClient; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.feign.EpmetUserOpenFeignClient; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.feign.GovOrgOpenFeignClient; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.feign.OperCustomizeOpenFeignClient; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.service.IcResiUserImportService; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.google.common.cache.Cache; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.google.common.cache.CacheBuilder; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -61,6 +66,16 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public static final ThreadLocal<Map<String, List<ErrorRow>>> errorRows = new ThreadLocal<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public static final ThreadLocal<Map<String, List<SkipedRow>>> skipedRows = new ThreadLocal<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * 类别发生变更的居民 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public static final ThreadLocal<ResiImportResiCategoryChangedCache> categoryChangedResi = new ThreadLocal<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * 居民类别items列表 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public static final ThreadLocal<List<String>> resiCategoryItemsCache = new ThreadLocal<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * key: itemId | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * value: | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -85,6 +100,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    @Autowired | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private IcResiUserDao icResiUserDao; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    @Autowired | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private OperCustomizeOpenFeignClient operCustomizeOpenFeignClient; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @description 列信息封装 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -168,6 +186,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    @Override | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public void importIcResiInfoFromExcel(List<FormItemResult> formItemList, String excelPathName, HttpServletResponse response) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        String loginUserId = loginUserUtil.getLoginUserId(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        String loginUserApp = loginUserUtil.getLoginUserApp(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        String loginUserClient = loginUserUtil.getLoginUserClient(); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -185,7 +204,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        String customerId = agencyInfo.getCustomerId(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            initThreadLocalRowsStorage(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            initImportThreadLocal(customerId); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // 上传主表信息
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            importIcResiBaseInfoFromExcel(formItemList,excelPathName, IcResiUserTableEnum.IC_RESI_USER.getSheetNo(), IcResiUserTableEnum.IC_RESI_USER.getHeadRowNo(), | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -209,11 +228,10 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            //String errors = JSON.toJSONString(errorRows.get());
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            //String skipeds = JSON.toJSONString(skipedRows.get());
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            //log.error(errors);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            //log.error(skipeds);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // 执行人员类别变更记录
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            Map<String, ResiImportCategoryData> newResis = categoryChangedResi.get().getNewResis(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            Map<String, ResiImportChangedData> categoryChangedResis = categoryChangedResi.get().getCategoryChangedResis(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            Map<String, ResiImportChangedData> transferedResis = categoryChangedResi.get().getTransferedResis(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                downLoadResults(response); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -223,25 +241,42 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } finally { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            skipedRows.remove(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            errorRows.remove(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            categoryChangedResi.remove(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            resiCategoryItemsCache.remove(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            itemIdAndOptionsCache.invalidateAll(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * 暂存rows信息初始化 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * threadLocal初始化 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private void initThreadLocalRowsStorage() { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private void initImportThreadLocal(String customerId) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 跳过的,不导入的行
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String, List<SkipedRow>> skipedRowsMap = new LinkedHashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for (IcResiUserTableEnum e : IcResiUserTableEnum.values()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            skipedRowsMap.put(e.getTableName(), new LinkedList<>()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        skipedRows.set(skipedRowsMap); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 错误信息
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String, List<ErrorRow>> errorRowsMap = new LinkedHashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for (IcResiUserTableEnum e : IcResiUserTableEnum.values()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            errorRowsMap.put(e.getTableName(), new LinkedList<>()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        errorRows.set(errorRowsMap); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 居民类别信息
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ResiImportResiCategoryChangedCache c = new ResiImportResiCategoryChangedCache(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        categoryChangedResi.set(c); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        List<ResiCategoryItemResultDTO> resiCategoryItems = getResultDataOrThrowsException(operCustomizeOpenFeignClient.listResiCategoryItems(customerId), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                ServiceConstant.OPER_CUSTOMIZE_SERVER, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                String.format("【居民信息导入】查询居民类别items失败,customerId:%s", customerId), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                "居民信息导入失败"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        List<String> l = resiCategoryItems.stream().map(ResiCategoryItemResultDTO::getColumnName).collect(Collectors.toList()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        resiCategoryItemsCache.set(l); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -374,26 +409,45 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                String idCard = columnAndValues.get("ID_CARD"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                LambdaQueryWrapper<IcResiUserEntity> idCardQuery = new LambdaQueryWrapper<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                idCardQuery.eq(IcResiUserEntity::getIdCard, idCard); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                IcResiUserEntity resiBaseInfo = icResiUserDao.selectOne(idCardQuery); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //IcResiUserEntity resiBaseInfo = icResiUserDao.selectOne(idCardQuery);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                Map<String, String> existingResiMap = icResiUserDao.selectResiInfoMap(idCard); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (existingResiMap != null) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    // 修改居民信息
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    icResiUserDao.upTable(tableName, existingResiMap.get("ID"), columnAndValues); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (resiBaseInfo != null) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    icResiUserDao.upTable(tableName, resiBaseInfo.getId(), columnAndValues); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    // 任意组织维度一个发生变化,则放到调动居民缓存中
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    ResiImportChangedData transferData; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if ((transferData = this.getResiImportTrasferData(existingResiMap, columnAndValues)) != null) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        categoryChangedResi.get().getTransferedResis().put(existingResiMap.get("ID"), transferData); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        // 组织维度没有发生变化,看是否有居民类型变更
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        ResiImportChangedData d = getResiImportCategoryChangedData(existingResiMap, columnAndValues); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        if (d != null) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            categoryChangedResi.get().getCategoryChangedResis().put(existingResiMap.get("ID"), d); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    // 新增居民
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    columnAndValues.put("CREATED_BY", currentUserId); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    columnAndValues.put("ID", UUID.randomUUID().toString().replace("-", "")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    icResiUserDao.add(tableName, columnAndValues); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //if (icResiUserDao.selectCount(idCardQuery) > 0) {
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //    //log.info("身份证号为【{}】的居民信息已存在,跳过导入", idCard);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //    SkipedRow skipedRow = new SkipedRow();
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //    skipedRow.setName(columnAndValues.get("NAME"));
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //    skipedRow.setIdCard(idCard);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //    skipedRow.setInfo("身份证号已存在,跳过导入");
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //    skipedRow.setTableName(tableName);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //    skipedRows.get().get(IcResiUserTableEnums.IC_RESI_USER.getTableName()).add(skipedRow);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //    continue;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //}
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    Map<String, String> categories = resiCategoryItemsCache.get() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            .stream() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            .filter((categoryColumnName) -> "1".equals(columnAndValues.get(categoryColumnName))) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            .collect(Collectors.toMap((k) -> k, (k) -> columnAndValues.get(k))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    categoryChangedResi.get().getNewResis().put(columnAndValues.get("ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            new ResiImportCategoryData(columnAndValues.get("AGENCY_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                    columnAndValues.get("GRID_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                    columnAndValues.get("VILLAGE_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                    columnAndValues.get("BUILD_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                    columnAndValues.get("UNIT_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                    columnAndValues.get("HOME_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                    categories)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } catch (Exception e) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                String errorMsg; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -950,4 +1004,145 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        workbook.write(response.getOutputStream()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public ResiImportCategoryData generateResiImportChangeData(String agencyId, String gridId, String villageId, String buildId, String unitId, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                                               String homeId , Map<String, String> categories) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ResiImportCategoryData ricd = new ResiImportCategoryData(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ricd.setAgencyId(agencyId); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ricd.setBuildId(buildId); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ricd.setGridId(gridId); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ricd.setVillageId(villageId); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ricd.setUnitId(unitId); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ricd.setHomeId(homeId); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ricd.setCategories(categories); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return ricd; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ///**
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // * 判断是否有组织维度的变化
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // * @param existingResiMap
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // * @param newResiMap
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // * @return
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // */
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //public boolean isOrgDimChanged(Map<String, String> existingResiMap, Map<String, String> newResiMap) {
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //    return !existingResiMap.get("AGENCY_ID").equals(newResiMap.get("AGENCY_ID"))
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //            || !existingResiMap.get("GRID_ID").equals(newResiMap.get("GRID_ID"))
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //            || !existingResiMap.get("VILLAGE_ID").equals(newResiMap.get("VILLAGE_ID"))
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //            || !existingResiMap.get("BUILD_ID").equals(newResiMap.get("BUILD_ID"))
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //            || !existingResiMap.get("UNIT_ID").equals(newResiMap.get("UNIT_ID"))
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //            || !existingResiMap.get("HOME_ID").equals(newResiMap.get("HOME_ID"))
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //}
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * 生成导入调动数据 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param existingResiMap | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param newResiMap | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @return | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private ResiImportChangedData getResiImportTrasferData(Map<String, String> existingResiMap, Map<String, String> newResiMap) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 维度未变化,则返回null
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if (existingResiMap.get("AGENCY_ID").equals(newResiMap.get("AGENCY_ID")) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                && existingResiMap.get("GRID_ID").equals(newResiMap.get("GRID_ID")) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                && existingResiMap.get("VILLAGE_ID").equals(newResiMap.get("VILLAGE_ID")) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                && existingResiMap.get("BUILD_ID").equals(newResiMap.get("BUILD_ID")) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                && existingResiMap.get("UNIT_ID").equals(newResiMap.get("UNIT_ID")) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                && existingResiMap.get("HOME_ID").equals(newResiMap.get("HOME_ID"))) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return null; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        HashMap<String, String> existingResiCategories = new HashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        HashMap<String, String> newResiCategories = new HashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for (String categoryColumnName : resiCategoryItemsCache.get()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String oldCategoryValue = existingResiMap.get(categoryColumnName); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String newCategoryValue = newResiMap.get(categoryColumnName); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (StringUtils.isNotBlank(oldCategoryValue) && "1".equals(oldCategoryValue)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                existingResiCategories.put(categoryColumnName, oldCategoryValue); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (StringUtils.isNotBlank(newCategoryValue) && "1".equals(newCategoryValue)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                newResiCategories.put(categoryColumnName, newResiMap.get(categoryColumnName)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ResiImportCategoryData oldOne = new ResiImportCategoryData( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                existingResiMap.get("AGENCY_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                existingResiMap.get("GRID_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                existingResiMap.get("VILLAGE_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                existingResiMap.get("BUILD_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                existingResiMap.get("UNIT_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                existingResiMap.get("HOME_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                existingResiCategories); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ResiImportCategoryData newOne = new ResiImportCategoryData(existingResiMap.get("AGENCY_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                newResiMap.get("GRID_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                newResiMap.get("VILLAGE_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                newResiMap.get("BUILD_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                newResiMap.get("UNIT_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                newResiMap.get("HOME_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                newResiCategories); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return new ResiImportChangedData(oldOne, newOne); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * 类别变更的居民信息封装 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param existingResiMap | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param newResiMap | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @return | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private ResiImportChangedData getResiImportCategoryChangedData(Map<String, String> existingResiMap, Map<String, String> newResiMap) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 发生变化的类别列明
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        HashMap<String, String> oldCategories = new HashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        HashMap<String, String> newCategories = new HashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        List<String> categoryColumnNames = resiCategoryItemsCache.get(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for (String categoryColumnName : categoryColumnNames) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String existingColumnValue = existingResiMap.get(categoryColumnName); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String newColumnValue = newResiMap.get(categoryColumnName); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (StringUtils.isAllBlank(existingColumnValue, newColumnValue)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                // 都为空,则没发生变化
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                continue; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } else if (StringUtils.isNoneBlank(existingColumnValue, newColumnValue)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                // 都不为空,则执行比较
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (!existingColumnValue.equals(newColumnValue)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    oldCategories.put(categoryColumnName, existingColumnValue); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    newCategories.put(categoryColumnName, newColumnValue); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    continue; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                // 一个为空一个不为空,则发生变化
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                oldCategories.put(categoryColumnName, existingColumnValue); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                newCategories.put(categoryColumnName, newColumnValue); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if (oldCategories.size() == 0) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return null; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ResiImportCategoryData oldOne = new ResiImportCategoryData( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                existingResiMap.get("AGENCY_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                existingResiMap.get("GRID_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                existingResiMap.get("VILLAGE_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                existingResiMap.get("BUILD_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                existingResiMap.get("UNIT_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                existingResiMap.get("HOME_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                oldCategories); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ResiImportCategoryData newOne = new ResiImportCategoryData(existingResiMap.get("AGENCY_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                newResiMap.get("GRID_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                newResiMap.get("VILLAGE_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                newResiMap.get("BUILD_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                newResiMap.get("UNIT_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                newResiMap.get("HOME_ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                newCategories); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return new ResiImportChangedData(oldOne, newOne); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
					 | 
				
				 | 
				
					
  |