Browse Source

修复:

1.居民导入:options缓存问题
master
wangxianzhang 4 years ago
parent
commit
0da1035fea
  1. 65
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java
  2. 4
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java

65
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java

@ -87,10 +87,12 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
/** /**
* key: itemId * key: itemId
* value: * value:
* key: 当前item的super itemId
* value: superItem的子item列表
* key: option的中文 * key: option的中文
* value: options的英文key也可能是数据id * 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 @Autowired
@ -661,7 +663,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
for (Map.Entry<String, ColumnWrapper> itemIdAndColumnWrapper : itemIdAndColumnWrappers.entrySet()) { for (Map.Entry<String, ColumnWrapper> itemIdAndColumnWrapper : itemIdAndColumnWrappers.entrySet()) {
String itemId = itemIdAndColumnWrapper.getKey();
ColumnWrapper columnWrapper = itemIdAndColumnWrapper.getValue(); ColumnWrapper columnWrapper = itemIdAndColumnWrapper.getValue();
if ("input".equals(columnWrapper.getItemType()) if ("input".equals(columnWrapper.getItemType())
|| "textarea".equals(columnWrapper.getItemType()) || "textarea".equals(columnWrapper.getItemType())
|| "datepicker".equals(columnWrapper.getItemType()) || "datepicker".equals(columnWrapper.getItemType())
@ -687,14 +691,38 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
columnWrapper.setColValue(colValue); columnWrapper.setColValue(colValue);
} else { } else {
// remote类型。优先从缓存取 // remote类型。优先从缓存取
Map<String, String> optionsOfItem = itemIdAndOptionsCache.getIfPresent(itemIdAndColumnWrapper.getKey()); String fullUri = columnWrapper.getOptionSourceValue();
if (optionsOfItem == null || optionsOfItem.size() == 0) { String[] uriParts = splitOptionSourceUrl(fullUri);
optionsOfItem = listRemoteOptions(itemIdAndColumnWrappers, columnWrapper.getOptionSourceValue(), currUserAgencyId, "saveorupdate"); String pureUri = uriParts[0];
itemIdAndOptionsCache.put(itemIdAndColumnWrapper.getKey(), optionsOfItem); 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 = optionsOfItem.get(cellContent);
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); columnWrapper.setColValue(colValue);
} }
}
} else if ("checkbox".equals(columnWrapper.getItemType())) { } else if ("checkbox".equals(columnWrapper.getItemType())) {
String checkBoxColValue = getCheckBoxColValue(columnWrapper, row, checkBoxOptionColumnIdxAndLabel); String checkBoxColValue = getCheckBoxColValue(columnWrapper, row, checkBoxOptionColumnIdxAndLabel);
columnWrapper.setColValue(checkBoxColValue); columnWrapper.setColValue(checkBoxColValue);
@ -899,27 +927,36 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
} }
/** /**
* 远程获取options * 分割sourceUrl为纯url和父itemId
* @param fullUri * @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 pureUri = null;
String cascadeItemId = null; String cascadeItemId = null;
ColumnWrapper cascadeItemColumnWrapper = null;
if (fullUri.indexOf(StrConstant.QUESTION_MARK) != -1) { if (fullUri.indexOf(StrConstant.QUESTION_MARK) != -1) {
String[] uriParts = fullUri.split(StrConstant.QUESTION_MARK_TRANSFER); String[] uriParts = fullUri.split(StrConstant.QUESTION_MARK_TRANSFER);
pureUri = uriParts[0]; pureUri = uriParts[0];
cascadeItemId = uriParts[1]; cascadeItemId = uriParts[1];
} 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的值 // 根据uri上的id,找到关联的itemid,从而找到关联的item的值
if (columnWrappers != null){ if (columnWrappers != null && StringUtils.isNotBlank(cascadeItemId)){
cascadeItemColumnWrapper = columnWrappers.get(cascadeItemId); cascadeItemColumnWrapper = columnWrappers.get(cascadeItemId);
} }
} else {
pureUri = fullUri;
}
List<OptionResultDTO> options = null; List<OptionResultDTO> options = null;

4
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java

@ -962,7 +962,9 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
if (StringUtils.isNotBlank(cacheValue)){ if (StringUtils.isNotBlank(cacheValue)){
map.put(columnName,cacheValue); map.put(columnName,cacheValue);
} else { } else {
Map<String, String> remoteOptions = icResiUserImportService.listRemoteOptions(columnWrappers, e.getOptionSourceValue(), currentStaffAgencyId, "query"); String[] parts = icResiUserImportService.splitOptionSourceUrl(e.getOptionSourceValue());
Map<String, String> remoteOptions = icResiUserImportService.listRemoteOptions(parts[0], parts[1], columnWrappers, currentStaffAgencyId, "query");
if (FormItemTypeEnum.CHECKBOX.getCode().equals(e.getItemType())) { if (FormItemTypeEnum.CHECKBOX.getCode().equals(e.getItemType())) {
remoteOptions.forEach((label, value) -> map.put(value, vauleStr.contains(value) ? "是" : "否")); remoteOptions.forEach((label, value) -> map.put(value, vauleStr.contains(value) ? "是" : "否"));
} else if (FormItemTypeEnum.SELECT.getCode().equals(e.getItemType())) { } else if (FormItemTypeEnum.SELECT.getCode().equals(e.getItemType())) {

Loading…
Cancel
Save