|  |  | @ -15,6 +15,7 @@ import com.epmet.commons.tools.constant.StrConstant; | 
			
		
	
		
			
				
					|  |  |  | import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult; | 
			
		
	
		
			
				
					|  |  |  | import com.epmet.commons.tools.dto.result.OptionResultDTO; | 
			
		
	
		
			
				
					|  |  |  | import com.epmet.commons.tools.exception.EpmetErrorCode; | 
			
		
	
		
			
				
					|  |  |  | import com.epmet.commons.tools.exception.EpmetException; | 
			
		
	
		
			
				
					|  |  |  | import com.epmet.commons.tools.exception.ExceptionUtils; | 
			
		
	
		
			
				
					|  |  |  | import com.epmet.commons.tools.exception.RenException; | 
			
		
	
		
			
				
					|  |  |  | import com.epmet.commons.tools.feign.ResultDataResolver; | 
			
		
	
	
		
			
				
					|  |  | @ -87,10 +88,12 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
			
		
	
		
			
				
					|  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |      * key: itemId | 
			
		
	
		
			
				
					|  |  |  |      * value: | 
			
		
	
		
			
				
					|  |  |  |      *      key: option的中文 | 
			
		
	
		
			
				
					|  |  |  |      *      value: options的英文key,也可能是数据id | 
			
		
	
		
			
				
					|  |  |  |      *      key: 当前item的super itemId | 
			
		
	
		
			
				
					|  |  |  |      *      value: superItem的子item列表 | 
			
		
	
		
			
				
					|  |  |  |      *           key: option的中文 | 
			
		
	
		
			
				
					|  |  |  |      *           value: options的英文key,也可能是数据id | 
			
		
	
		
			
				
					|  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |     Cache<String, Map<String, String>> itemIdAndOptionsCache = CacheBuilder.newBuilder().maximumSize(500).build(); | 
			
		
	
		
			
				
					|  |  |  |     Cache<String, Map<String, Map<String, String>>> itemIdAndOptionsCache = CacheBuilder.newBuilder().maximumSize(500).build(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     @Autowired | 
			
		
	
	
		
			
				
					|  |  | @ -514,7 +517,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             } catch (Exception e) { | 
			
		
	
		
			
				
					|  |  |  |                 String errorMsg; | 
			
		
	
		
			
				
					|  |  |  |                 if (e instanceof RenException) { | 
			
		
	
		
			
				
					|  |  |  |                 if (e instanceof RenException | e instanceof EpmetException) { | 
			
		
	
		
			
				
					|  |  |  |                     errorMsg = e.getMessage(); | 
			
		
	
		
			
				
					|  |  |  |                 } else { | 
			
		
	
		
			
				
					|  |  |  |                     errorMsg = "未知系统错误"; | 
			
		
	
	
		
			
				
					|  |  | @ -661,7 +664,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         for (Map.Entry<String, ColumnWrapper> itemIdAndColumnWrapper : itemIdAndColumnWrappers.entrySet()) { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             String itemId = itemIdAndColumnWrapper.getKey(); | 
			
		
	
		
			
				
					|  |  |  |             ColumnWrapper columnWrapper = itemIdAndColumnWrapper.getValue(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             if ("input".equals(columnWrapper.getItemType()) | 
			
		
	
		
			
				
					|  |  |  |                     || "textarea".equals(columnWrapper.getItemType()) | 
			
		
	
		
			
				
					|  |  |  |                     || "datepicker".equals(columnWrapper.getItemType()) | 
			
		
	
	
		
			
				
					|  |  | @ -687,13 +692,37 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
			
		
	
		
			
				
					|  |  |  |                     columnWrapper.setColValue(colValue); | 
			
		
	
		
			
				
					|  |  |  |                 } else { | 
			
		
	
		
			
				
					|  |  |  |                     // remote类型。优先从缓存取
 | 
			
		
	
		
			
				
					|  |  |  |                     Map<String, String> optionsOfItem = itemIdAndOptionsCache.getIfPresent(itemIdAndColumnWrapper.getKey()); | 
			
		
	
		
			
				
					|  |  |  |                     if (optionsOfItem == null || optionsOfItem.size() == 0) { | 
			
		
	
		
			
				
					|  |  |  |                         optionsOfItem = listRemoteOptions(itemIdAndColumnWrappers, columnWrapper.getOptionSourceValue(), currUserAgencyId, "saveorupdate"); | 
			
		
	
		
			
				
					|  |  |  |                         itemIdAndOptionsCache.put(itemIdAndColumnWrapper.getKey(), optionsOfItem); | 
			
		
	
		
			
				
					|  |  |  |                     String fullUri = columnWrapper.getOptionSourceValue(); | 
			
		
	
		
			
				
					|  |  |  |                     String[] uriParts = splitOptionSourceUrl(fullUri); | 
			
		
	
		
			
				
					|  |  |  |                     String pureUri = uriParts[0]; | 
			
		
	
		
			
				
					|  |  |  |                     String superItemId = uriParts[1]; | 
			
		
	
		
			
				
					|  |  |  |                     String superColumValue; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                     if (StringUtils.isNotBlank(superItemId)) { | 
			
		
	
		
			
				
					|  |  |  |                         superColumValue = itemIdAndColumnWrappers.get(superItemId).getColValue(); | 
			
		
	
		
			
				
					|  |  |  |                     } else { | 
			
		
	
		
			
				
					|  |  |  |                         superColumValue = "-"; | 
			
		
	
		
			
				
					|  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                     Map<String, Map<String, String>> superOptions = itemIdAndOptionsCache.getIfPresent(itemId); | 
			
		
	
		
			
				
					|  |  |  |                     if (superOptions != null && superOptions.size() > 0) { | 
			
		
	
		
			
				
					|  |  |  |                         Map<String, String> options = superOptions.get(superColumValue); | 
			
		
	
		
			
				
					|  |  |  |                         if (options == null || options.size() == 0) { | 
			
		
	
		
			
				
					|  |  |  |                             options = listRemoteOptions(pureUri, superItemId, itemIdAndColumnWrappers, currUserAgencyId, "saveorupdate"); | 
			
		
	
		
			
				
					|  |  |  |                             superOptions.put(superColumValue, options); | 
			
		
	
		
			
				
					|  |  |  |                         } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                         String colValue = options.get(cellContent); | 
			
		
	
		
			
				
					|  |  |  |                         columnWrapper.setColValue(colValue); | 
			
		
	
		
			
				
					|  |  |  |                     } else { | 
			
		
	
		
			
				
					|  |  |  |                         Map<String, String> options = listRemoteOptions(pureUri, superItemId, itemIdAndColumnWrappers, currUserAgencyId, "saveorupdate"); | 
			
		
	
		
			
				
					|  |  |  |                         superOptions = new HashMap<>(); | 
			
		
	
		
			
				
					|  |  |  |                         superOptions.put(superColumValue, options); | 
			
		
	
		
			
				
					|  |  |  |                         itemIdAndOptionsCache.put(itemId, superOptions); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                         String colValue = options.get(cellContent); | 
			
		
	
		
			
				
					|  |  |  |                         columnWrapper.setColValue(colValue); | 
			
		
	
		
			
				
					|  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |                     String colValue = optionsOfItem.get(cellContent); | 
			
		
	
		
			
				
					|  |  |  |                     columnWrapper.setColValue(colValue); | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |             } else if ("checkbox".equals(columnWrapper.getItemType())) { | 
			
		
	
		
			
				
					|  |  |  |                 String checkBoxColValue = getCheckBoxColValue(columnWrapper, row, checkBoxOptionColumnIdxAndLabel); | 
			
		
	
	
		
			
				
					|  |  | @ -899,28 +928,37 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |      * 远程获取options | 
			
		
	
		
			
				
					|  |  |  |      * 分割sourceUrl为纯url和父itemId | 
			
		
	
		
			
				
					|  |  |  |      * @param fullUri | 
			
		
	
		
			
				
					|  |  |  |      * @return | 
			
		
	
		
			
				
					|  |  |  |      * @return [ pureUri, cascadeItemId(父itemId) ] | 
			
		
	
		
			
				
					|  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |     public Map<String, String> listRemoteOptions(Map<String, ColumnWrapper> columnWrappers, String fullUri, String currUserAgencyId, String purpose) { | 
			
		
	
		
			
				
					|  |  |  |     public String[] splitOptionSourceUrl(String fullUri) { | 
			
		
	
		
			
				
					|  |  |  |         String pureUri = null; | 
			
		
	
		
			
				
					|  |  |  |         String cascadeItemId = null; | 
			
		
	
		
			
				
					|  |  |  |         ColumnWrapper cascadeItemColumnWrapper = null; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         if (fullUri.indexOf(StrConstant.QUESTION_MARK) != -1) { | 
			
		
	
		
			
				
					|  |  |  |             String[] uriParts = fullUri.split(StrConstant.QUESTION_MARK_TRANSFER); | 
			
		
	
		
			
				
					|  |  |  |             pureUri = uriParts[0]; | 
			
		
	
		
			
				
					|  |  |  |             cascadeItemId = uriParts[1]; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             // 根据uri上的id,找到关联的itemid,从而找到关联的item的值
 | 
			
		
	
		
			
				
					|  |  |  |             if (columnWrappers != null){ | 
			
		
	
		
			
				
					|  |  |  |                 cascadeItemColumnWrapper = columnWrappers.get(cascadeItemId); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |         } else { | 
			
		
	
		
			
				
					|  |  |  |             pureUri = fullUri; | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         return new String[] { pureUri, cascadeItemId }; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |      * 远程获取options | 
			
		
	
		
			
				
					|  |  |  |      * @return | 
			
		
	
		
			
				
					|  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |     public Map<String, String> listRemoteOptions(String pureUri, String cascadeItemId, Map<String, ColumnWrapper> columnWrappers, String currUserAgencyId, String purpose) { | 
			
		
	
		
			
				
					|  |  |  |         ColumnWrapper cascadeItemColumnWrapper = null; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         // 根据uri上的id,找到关联的itemid,从而找到关联的item的值
 | 
			
		
	
		
			
				
					|  |  |  |         if (columnWrappers != null && StringUtils.isNotBlank(cascadeItemId)){ | 
			
		
	
		
			
				
					|  |  |  |             cascadeItemColumnWrapper = columnWrappers.get(cascadeItemId); | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         List<OptionResultDTO> options = null; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         switch (pureUri) { | 
			
		
	
	
		
			
				
					|  |  | 
 |