|
|
@ -87,10 +87,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 |
|
|
@ -661,7 +663,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 +691,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 +927,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) { |
|
|
|