| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -17,9 +17,7 @@ import com.epmet.commons.tools.exception.EpmetErrorCode; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.commons.tools.exception.ExceptionUtils; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.commons.tools.exception.RenException; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.commons.tools.feign.ResultDataResolver; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.commons.tools.redis.common.CustomerOrgRedis; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.commons.tools.redis.common.CustomerStaffRedis; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.commons.tools.redis.common.bean.GridInfoCache; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.commons.tools.security.user.LoginUserUtil; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.commons.tools.utils.Result; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import com.epmet.dao.IcResiUserDao; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -73,14 +71,14 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public static final ThreadLocal<Map<String, List<SkipedRow>>> skipedRows = new ThreadLocal<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * 类别发生变更的居民 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * 导入的居民中,新增或者变动的居民 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public static final ThreadLocal<ResiImportResiCategoryChangedCache> categoryChangedResi = new ThreadLocal<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public static final ThreadLocal<ResiImportResiCategoryChangedCache> newlyOrChangedResi = new ThreadLocal<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * 居民类别items列表 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * 居民类别items列表。<columnName,label> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public static final ThreadLocal<Map<String, String>> resiCategoryItemsCache = new ThreadLocal<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public static final ThreadLocal<Map<String, String>> resiCategoryColumnNameAndLabel = new ThreadLocal<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * key: itemId | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -122,6 +120,13 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private UserService userService; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * 字表中不需要的列 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private List<String> subTableNeedlessColumns = Arrays.asList("GRID_ID", "VILLAGE_ID", "BUILD_ID", "UNIT_ID", "HOME_ID", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            "IS_BDHJ", "NAME", "MOBILE", "GENDER", "ID_CARD", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            "BIRTHDAY", "CONTACTS", "CONTACTS_MOBILE"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @description 列信息封装 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -249,10 +254,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // 执行人员类别变更记录
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            Map<String, ResiImportCategoryData> newResis = categoryChangedResi.get().getNewResis(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // todo 此处没测试
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            Map<String, ResiImportChangedData> categoryChangedResis = categoryChangedResi.get().getCategoryChangedResis(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            Map<String, ResiImportChangedData> transferedResis = categoryChangedResi.get().getTransferedResis(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            Map<String, ResiImportCategoryData> newResis = newlyOrChangedResi.get().getNewResis(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            Map<String, ResiImportChangedData> categoryChangedResis = newlyOrChangedResi.get().getCategoryChangedResis(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            Map<String, ResiImportChangedData> transferedResis = newlyOrChangedResi.get().getTransferedResis(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            //保存调动或者变更记录
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            saveNewResiCategoryRecord(newResis); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -267,8 +271,8 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } finally { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            skipedRows.remove(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            errorRows.remove(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            categoryChangedResi.remove(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            resiCategoryItemsCache.remove(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            newlyOrChangedResi.remove(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            resiCategoryColumnNameAndLabel.remove(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            itemIdAndOptionsCache.invalidateAll(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -293,7 +297,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 居民类别信息
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ResiImportResiCategoryChangedCache c = new ResiImportResiCategoryChangedCache(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        categoryChangedResi.set(c); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        newlyOrChangedResi.set(c); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        List<ResiCategoryItemResultDTO> resiCategoryItems = getResultDataOrThrowsException(operCustomizeOpenFeignClient.listResiCategoryItems(customerId), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                ServiceConstant.OPER_CUSTOMIZE_SERVER, | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -303,7 +307,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String, String> columnNameAndLabel = resiCategoryItems.stream().collect(Collectors.toMap((o) -> o.getColumnName(), (o) -> o.getLabel())); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        resiCategoryItemsCache.set(columnNameAndLabel); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        resiCategoryColumnNameAndLabel.set(columnNameAndLabel); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -326,16 +330,17 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        List<Map<Integer, String>> headList = readListener.getHeadList(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        List<Map<Integer, String>> dataList = readListener.getDataList(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, List<String>> headers = mergeHead(headList); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 合并多级表头到一个list中,key为列序号
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, List<String>> headers = mergeMultiLevelHeadLabels(headList); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 清洗表头数据
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, String> abandonedHeaders = washHeaders(headers, formItemList); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 清洗表头数据,通过items剔除,并且得到options
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, String> abandonedHeaders = removeAndGetOptionsFromHeaders(headers, formItemList); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        //合并多级表头
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        HashMap<String, List<Integer>> combinedHeaders = combineHeaders(headers); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 交换表头信息,以label连起来的string作为key,列号的列表作为value
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        HashMap<String, List<Integer>> combinedHeaders = exchangeKeyAndValueOfHeaders(headers); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 得到客户配置item数据
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String, FormItemResult> formItemMap = formItemList.stream().collect( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 得到客户配置item数据。<"兴趣爱好:兴趣特长", item对象>
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String, FormItemResult> customizedLabelCompbinedItemsMap = formItemList.stream().collect( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                Collectors.toMap(formItem -> { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    String groupLabel = formItem.getGroupLabel(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    String label = formItem.getLabel(); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -346,10 +351,11 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                }, formItem -> formItem) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String, ColumnWrapper> headerColumnWrapper = convertExcelHeaders2DBColumnWrappers(formItemMap, combinedHeaders, dataList, abandonedHeaders); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String, ColumnWrapper> itemIdAndColumnWrapper = convertExcelHeaders2DBColumnWrappers(customizedLabelCompbinedItemsMap, combinedHeaders); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 持久化
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        persistIcResiBaseInfo(headerColumnWrapper, dataList, currUserAgencyId, abandonedHeaders, currUserAgencyPids, currentUserId, tableName); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        persistIcResiBaseInfo(itemIdAndColumnWrapper, dataList, currUserAgencyId, abandonedHeaders, currUserAgencyPids, currentUserId, tableName); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return headers; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -374,15 +380,12 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        List<Map<Integer, String>> headList = readListener.getHeadList(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        List<Map<Integer, String>> dataList = readListener.getDataList(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, List<String>> headers = mergeHead(headList); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, List<String>> headers = mergeMultiLevelHeadLabels(headList); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 清洗表头数据
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, String> abandonedHeaders = washHeaders(headers, formItemList); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, String> abandonedHeaders = removeAndGetOptionsFromHeaders(headers, formItemList); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        //合并多级表头
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        HashMap<String, List<Integer>> combinedHeaders = combineHeaders(headers); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        HashMap<String, List<Integer>> combinedHeaders = exchangeKeyAndValueOfHeaders(headers); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // 得到客户配置item数据
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String, FormItemResult> formItemMap = formItemList.stream().collect( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                Collectors.toMap(formItem -> { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    String groupLabel = formItem.getGroupLabel(); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -394,19 +397,19 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                }, formItem -> formItem) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String, ColumnWrapper> headerColumnWrapper = convertExcelHeaders2DBColumnWrappers(formItemMap, combinedHeaders, dataList, abandonedHeaders); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String, ColumnWrapper> headerColumnWrapper = convertExcelHeaders2DBColumnWrappers(formItemMap, combinedHeaders); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        persistIcResiExtraInfo(headerColumnWrapper, dataList, currUserAgencyId, abandonedHeaders, currentUserId, targetTableName, customerId); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return headerColumnWrapper; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * 持久化IC居民基础信息 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param headerColumnWrapper 数据库列包装信息 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param itemIdAndColumnWrapper 数据库列包装信息 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param dataRows 数据行集合 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param currUserAgencyId 当前用户的组织id | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param checkBoxOptionColumnIdxAndLabel 复选框的列号&label中文 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private void persistIcResiBaseInfo(Map<String, ColumnWrapper> headerColumnWrapper, List<Map<Integer, String>> dataRows, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private void persistIcResiBaseInfo(Map<String, ColumnWrapper> itemIdAndColumnWrapper, List<Map<Integer, String>> dataRows, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                       String currUserAgencyId, Map<Integer, String> checkBoxOptionColumnIdxAndLabel, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                       String currUserAgencyPids, String currentUserId, String tableName) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -415,8 +418,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            LinkedHashMap<String, String> columnAndValues = new LinkedHashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                convertColumnWrappers2Map4Persist(headerColumnWrapper, row, currUserAgencyId, checkBoxOptionColumnIdxAndLabel, columnAndValues); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                convertColumnWrappers2Map4Persist(itemIdAndColumnWrapper, row, currUserAgencyId, checkBoxOptionColumnIdxAndLabel, columnAndValues, true); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                // 因为还没有读取子sheet,所以这些居民类别没有办法获取,先默认设置成0,后面读取子sheet的时候再更新
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                columnAndValues.put("IS_ENSURE_HOUSE", "0"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                columnAndValues.put("IS_OLD_PEOPLE", "0"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                columnAndValues.put("IS_PARTY", "0"); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -447,12 +451,12 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    // 任意组织维度一个发生变化,则放到调动居民缓存中
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    ResiImportChangedData transferData; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if ((transferData = this.getResiImportTrasferData(existingResiMap, columnAndValues)) != null) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        categoryChangedResi.get().getTransferedResis().put(existingResiMap.get("ID"), transferData); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        newlyOrChangedResi.get().getTransferedResis().put(existingResiMap.get("ID"), transferData); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        // 组织维度没有发生变化,看是否有居民类型变更
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        ResiImportChangedData d = getResiImportCategoryChangedData(existingResiMap, columnAndValues); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        if (d != null) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            categoryChangedResi.get().getCategoryChangedResis().put(existingResiMap.get("ID"), d); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            newlyOrChangedResi.get().getCategoryChangedResis().put(existingResiMap.get("ID"), d); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } else { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -461,19 +465,20 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    columnAndValues.put("ID", UUID.randomUUID().toString().replace("-", "")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    icResiUserDao.add(tableName, columnAndValues); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    Map<String, String> categories = resiCategoryItemsCache.get().keySet() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    // 过滤出本居民含有哪些类别
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    Map<String, String> resiCategories = resiCategoryColumnNameAndLabel.get().keySet() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            .stream() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            .filter((categoryColumnName) -> "1".equals(columnAndValues.get(categoryColumnName))) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            .collect(Collectors.toMap((k) -> k, (k) -> columnAndValues.get(k))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    categoryChangedResi.get().getNewResis().put(columnAndValues.get("ID"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    newlyOrChangedResi.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)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                    resiCategories)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } catch (Exception e) { | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -515,12 +520,16 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for (Map<Integer, String> row : dataRows) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                convertColumnWrappers2Map4Persist(headerColumnWrapper, row, currUserAgencyId, checkBoxOptionColumnIdxAndLabel, columnAndValues); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                convertColumnWrappers2Map4Persist(headerColumnWrapper, row, currUserAgencyId, checkBoxOptionColumnIdxAndLabel, columnAndValues, false); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                // 检验身份证号
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                String idCard = columnAndValues.get("ID_CARD"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (StringUtils.isBlank(idCard)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    throw new RenException(EpmetErrorCode.IDCARDNO_ERROR.getCode(), String.format("用户【%s】身份证号未填写或格式错误", columnAndValues.get("NAME"))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    String resiName = columnAndValues.get("NAME"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (resiName == null) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        resiName = ""; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    throw new RenException(EpmetErrorCode.IDCARDNO_ERROR.getCode(), String.format("用户【%s】身份证号未填写或格式错误", resiName)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                // 检查用户是否存在
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -604,23 +613,24 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * 将当前行数据转化成LinkedHashMap,供后续插入 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param headerColumnWrapper 当前行的ColumnWrapper,每一个ColumnWrapper元素都是当前行中的一个列 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param itemIdAndColumnWrappers 当前行的ColumnWrapper,每一个ColumnWrapper元素都是当前行中的一个列,key:itemId | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param row  当前行数据 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param currUserAgencyId 当前用户所属机构ID | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param checkBoxOptionColumnIdxAndLabel 复选框options列表。key:列号,value:复选框中文 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param target 要将数据放到哪个对象中 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param isPrimaryTable 是否是主表 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private void convertColumnWrappers2Map4Persist(Map<String, ColumnWrapper> headerColumnWrapper, Map<Integer, String> row, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private void convertColumnWrappers2Map4Persist(Map<String, ColumnWrapper> itemIdAndColumnWrappers, Map<Integer, String> row, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                                   String currUserAgencyId, Map<Integer, String> checkBoxOptionColumnIdxAndLabel, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                                   LinkedHashMap<String, String> target) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                                   LinkedHashMap<String, String> target, boolean isPrimaryTable) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        boolean interupt = false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        List<String> errorColumnNames = new LinkedList<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for (Map.Entry<String, ColumnWrapper> columnWrapperEntry : headerColumnWrapper.entrySet()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for (Map.Entry<String, ColumnWrapper> itemIdAndColumnWrapper : itemIdAndColumnWrappers.entrySet()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ColumnWrapper columnWrapper = columnWrapperEntry.getValue(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ColumnWrapper columnWrapper = itemIdAndColumnWrapper.getValue(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if ("input".equals(columnWrapper.getItemType()) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    || "textarea".equals(columnWrapper.getItemType()) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    || "datepicker".equals(columnWrapper.getItemType()) | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -646,10 +656,10 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    columnWrapper.setColValue(colValue); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    // remote类型。优先从缓存取
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    Map<String, String> optionsOfItem = itemIdAndOptionsCache.getIfPresent(columnWrapperEntry.getKey()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    Map<String, String> optionsOfItem = itemIdAndOptionsCache.getIfPresent(itemIdAndColumnWrapper.getKey()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (optionsOfItem == null || optionsOfItem.size() == 0) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        optionsOfItem = listRemoteOptions(headerColumnWrapper, columnWrapper.getOptionSourceValue(), currUserAgencyId, "saveorupdate"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        itemIdAndOptionsCache.put(columnWrapperEntry.getKey(), optionsOfItem); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        optionsOfItem = listRemoteOptions(itemIdAndColumnWrappers, columnWrapper.getOptionSourceValue(), currUserAgencyId, "saveorupdate"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        itemIdAndOptionsCache.put(itemIdAndColumnWrapper.getKey(), optionsOfItem); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    String colValue = optionsOfItem.get(cellContent); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    columnWrapper.setColValue(colValue); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -659,10 +669,21 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                columnWrapper.setColValue(checkBoxColValue); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // requiredColumns中的值为必填项
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (columnWrapper.getRequired() == 1 && StringUtils.isBlank(columnWrapper.colValue)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                interupt = true; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                errorColumnNames.add(columnWrapper.combinedLabel); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // requiredColumns中的值不在排除字段中 && 是必填 && 未填写
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (isPrimaryTable) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                // 主表没有需要排除的列
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (columnWrapper.getRequired() == 1 && StringUtils.isBlank(columnWrapper.colValue)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    interupt = true; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    errorColumnNames.add(columnWrapper.combinedLabel); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                // 从表需要排除掉一些不必要校验的列
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (!subTableNeedlessColumns.contains(columnWrapper.columnName) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        && columnWrapper.getRequired() == 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        && StringUtils.isBlank(columnWrapper.colValue)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    interupt = true; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    errorColumnNames.add(columnWrapper.combinedLabel); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            target.put(columnWrapper.columnName, columnWrapper.colValue); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -674,22 +695,22 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @description 合并头 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @description 调换表头信息。将中文label做key,列号list作value(因为复选框的原因,会出现相同的label对应多个列号,以兴趣特长为例) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param headers | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @return | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param headers 例: <38:[兴趣爱好,兴趣特长]>  <39:[兴趣爱好,兴趣特长]> <40:[兴趣爱好,兴趣特长]>... | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @return  <"兴趣爱好,兴趣特长":[38,39,40...]> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @author wxz | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @date 2021.10.28 21:27:18 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private HashMap<String, List<Integer>> combineHeaders(Map<Integer, List<String>> headers) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private HashMap<String, List<Integer>> exchangeKeyAndValueOfHeaders(Map<Integer, List<String>> headers) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        HashMap<String, List<Integer>> itemAndColIndexs = new LinkedHashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        headers.forEach((k, v) -> { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String tempKey = String.join(":", v); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            List<Integer> colIndexs = itemAndColIndexs.get(tempKey); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String combinedHeaderLabels = String.join(":", v); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            List<Integer> colIndexs = itemAndColIndexs.get(combinedHeaderLabels); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (colIndexs == null) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                colIndexs = new ArrayList<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                itemAndColIndexs.put(tempKey, colIndexs); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                itemAndColIndexs.put(combinedHeaderLabels, colIndexs); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            colIndexs.add(k); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -698,56 +719,54 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @description 洗头 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @description 复选框在excel中体现为多个列,他们在oper_customize.items表中不存在,所以要从headers中剔除这部分。然后将剔除的部分返回 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param headers | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param items | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @return | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param headers excel表头。 <列号:中文label列表> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param items customize库中查询出来的,items的列表 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @return 被移除的options | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @author wxz | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @date 2021.10.28 21:07:12 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private Map<Integer, String> washHeaders(Map<Integer, List<String>> headers, List<FormItemResult> items) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private Map<Integer, String> removeAndGetOptionsFromHeaders(Map<Integer, List<String>> headers, List<FormItemResult> items) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        List<String> itemLabels = items.stream().map(i -> i.getLabel()).collect(Collectors.toList()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, String> abandonedHeaders = new HashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, String> abandonedOptions = new HashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for (Map.Entry<Integer, List<String>> entry:headers.entrySet()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            Integer colIdx = entry.getKey(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            List<String> v = entry.getValue(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            int lastPartIndex = v.size() - 1; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String lastValuePart = v.get(lastPartIndex); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (!itemLabels.contains(lastValuePart)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            Integer columnIndex = entry.getKey(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            List<String> headerLabels = entry.getValue(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            int lastLevelHeaderLevel = headerLabels.size() - 1; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // 最后一集header的中文label
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String lastLevelHeaderLabel = headerLabels.get(lastLevelHeaderLevel); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (!itemLabels.contains(lastLevelHeaderLabel)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                // 该部分为options,它的上一级是item,那么去掉options这一级
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                v.remove(lastPartIndex); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                abandonedHeaders.put(colIdx, lastValuePart); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                headerLabels.remove(lastLevelHeaderLevel); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                abandonedOptions.put(columnIndex, lastLevelHeaderLabel); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return abandonedHeaders; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return abandonedOptions; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @description 数据整合,将excel表头汉字信息转化成ColumnWrapper列封装数据 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     *      *      key:itemId | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     *      *      value:ColumnWrapper列包装信息 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param formItemMap item map | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param customizedLabelCompbinedItemsMap item map | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     *                    key:itemId; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     *                    value: 合并之后的head字符串,例如:健康信息:监护人 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param combinedHeaders 合并之后的head信息。 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     *                        key:合并之后head字符串(例如:党员信息:入党时间); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     *                        value:列号组成的列表(例如[1,2,3]) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param datas | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param abandonedHeaders | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @return | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @return key:itemId;value:columnWrapper | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private Map<String, ColumnWrapper> convertExcelHeaders2DBColumnWrappers(Map<String, FormItemResult> formItemMap, Map<String, List<Integer>> combinedHeaders, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                                                            List<Map<Integer, String>> datas, Map<Integer, String> abandonedHeaders) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private Map<String, ColumnWrapper> convertExcelHeaders2DBColumnWrappers(Map<String, FormItemResult> customizedLabelCompbinedItemsMap, Map<String, List<Integer>> combinedHeaders) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//        HashMap<String, List<ColumnWrapper>> tables = new HashMap<>();
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String, ColumnWrapper> columns = new LinkedHashMap<>(combinedHeaders.size()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for (Map.Entry<String, List<Integer>> entry : combinedHeaders.entrySet()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String combinedHeader = entry.getKey(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for (Map.Entry<String, List<Integer>> labelAndColumnIndexs : combinedHeaders.entrySet()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String combinedHeader = labelAndColumnIndexs.getKey(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            FormItemResult item = formItemMap.get(combinedHeader); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            FormItemResult item = customizedLabelCompbinedItemsMap.get(combinedHeader); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (item == null) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                // 如果数据库中没有该项,可能是用户自己定义的项,忽略
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -766,7 +785,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String combinedLabel = StringUtils.isBlank(groupLabel) ? item.getLabel() : groupLabel.concat(":").concat(item.getLabel()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            columnWrapper.setCombinedLabel(combinedLabel); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            columnWrapper.setColumnName((columnNum == null || columnNum == 0) ? columnName : columnName + columnNum); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            columnWrapper.setColIndex(entry.getValue()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            columnWrapper.setColIndex(labelAndColumnIndexs.getValue()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            columnWrapper.setRequired(item.getRequired()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            columnWrapper.setOptionSourceType(item.getOptionSourceType()); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -802,15 +821,14 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @description 合并表头 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     *          Map<Integer, List<String>> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @description 合并多级表头,竖着将多级表头放入同一个list,然后以列号为key,list为value,放入map | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param headList | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @return | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @param headList 表头列表,每一个元素都是一行表头。Map结构:<列号:某级表头中文> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @return  表头列表,Map结构:<列号:[一级表头中文,二级表头中文,三级表头中文]> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @author wxz | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @date 2021.10.27 16:17:34 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private Map<Integer, List<String>> mergeHead(List<Map<Integer, String>> headList) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private Map<Integer, List<String>> mergeMultiLevelHeadLabels(List<Map<Integer, String>> headList) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<Integer, String> lastNotNullHeads = new LinkedHashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1045,7 +1063,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        HashMap<String, String> existingResiCategories = new HashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        HashMap<String, String> newResiCategories = new HashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for (String categoryColumnName : resiCategoryItemsCache.get().keySet()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for (String categoryColumnName : resiCategoryColumnNameAndLabel.get().keySet()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String oldCategoryValue = existingResiMap.get(categoryColumnName); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String newCategoryValue = newResiMap.get(categoryColumnName); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1091,7 +1109,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        HashMap<String, String> oldCategories = new HashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        HashMap<String, String> newCategories = new HashMap<>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Set<String> categoryColumnNames = resiCategoryItemsCache.get().keySet(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Set<String> categoryColumnNames = resiCategoryColumnNameAndLabel.get().keySet(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for (String categoryColumnName : categoryColumnNames) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String existingColumnValue = existingResiMap.get(categoryColumnName); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String newColumnValue = newResiMap.get(categoryColumnName); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1142,7 +1160,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    private void saveSubTableInfoToCategoryChangedResiCache(String icResiId, String columnName) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ResiImportResiCategoryChangedCache cc = categoryChangedResi.get(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ResiImportResiCategoryChangedCache cc = newlyOrChangedResi.get(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String, ResiImportCategoryData> newResis = cc.getNewResis(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String, ResiImportChangedData> categoryChangedResis = cc.getCategoryChangedResis(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Map<String, ResiImportChangedData> transferedResis = cc.getTransferedResis(); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1224,7 +1242,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                String beforeValueName = "0".equals(oldColumnValue) ? "否" : "是"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                String newValueName = "0".equals(newColumnValue) ? "否" : "是"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                String label = resiCategoryItemsCache.get().get(columnName); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                String label = resiCategoryColumnNameAndLabel.get().get(columnName); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                sbBefore.append(label).append(":").append(beforeValueName).append("\n"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                sbAfter.append(label).append(":").append(newValueName).append("\n"); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1411,32 +1429,38 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    newAgencyId, newGridId, newvillageId, newBuildId, newUnitId, newHomeId, oldOrg, newOrg); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            icUserTransferRecordDao.insert(transferRecord); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // 保存 changeRecord
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            IcUserChangeRecordEntity changeRecord = fillChangeRecord(customerId, resiId, resiInfo.getName(), transferRecord.getId(), operator.getStaffId(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // 保存 调动changeRecord
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            IcUserChangeRecordEntity transferChangeRecord = fillChangeRecord(customerId, resiId, resiInfo.getName(), transferRecord.getId(), operator.getStaffId(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    operator.getRealName(), sbBefore.toString(), sbAfter.toString(), "transfer", "调动", "", now); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            icUserChangeRecordDao.insert(changeRecord); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            icUserChangeRecordDao.insert(transferChangeRecord); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // 保存 类别变更changeRecord
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            IcUserChangeRecordEntity categoryChangeRecord = fillChangeRecord(customerId, resiId, resiInfo.getName(), transferRecord.getId(), operator.getStaffId(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    operator.getRealName(), sbBefore.toString(), sbAfter.toString(), "category", "类别", "", now); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            icUserChangeRecordDao.insert(categoryChangeRecord); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // 保存 changeDetail
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            for (Map.Entry<String, String> oldCategories : oldData.getCategories().entrySet()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                String key = oldCategories.getKey(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                String value = oldCategories.getValue(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                // String value = oldCategories.getValue();
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                // 之前是这个类型,那这个类型需要-1
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                IcUserChangeDetailedEntity changeDetail = fillChangeDetail(customerId, resiId, changeRecord.getId(), oldData.getAgencyId(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                IcUserChangeDetailedEntity changeDetail = fillChangeDetail(customerId, resiId, categoryChangeRecord.getId(), oldData.getAgencyId(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        oldData.getGridId(), oldData.getVillageId(), oldData.getBuildId(), oldData.getUnitId(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        oldData.getHomeId(), "category", "调动", key, -1, resiInfo.getPids()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        oldData.getHomeId(), categoryChangeRecord.getType(), categoryChangeRecord.getTypeName(), key, -1, resiInfo.getPids()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                icUserChangeDetailedDao.insert(changeDetail); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // 保存 changeDetail
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            for (Map.Entry<String, String> newCategories : newData.getCategories().entrySet()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                String key = newCategories.getKey(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                String value = newCategories.getValue(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                // String value = newCategories.getValue();
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                // 现在是这个类型,这个类型要+1
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                IcUserChangeDetailedEntity changeDetail = fillChangeDetail(customerId, resiId, changeRecord.getId(), newData.getAgencyId(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                IcUserChangeDetailedEntity changeDetail = fillChangeDetail(customerId, resiId, categoryChangeRecord.getId(), newData.getAgencyId(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        newData.getGridId(), newData.getVillageId(), newData.getBuildId(), newData.getUnitId(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        newData.getHomeId(), "category", "调动", key, 1, resiInfo.getPids()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        newData.getHomeId(), categoryChangeRecord.getType(), categoryChangeRecord.getTypeName(), key, 1, resiInfo.getPids()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                icUserChangeDetailedDao.insert(changeDetail); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |