Browse Source

Merge branch 'wxz_resiimport_optimize' of http://git.elinkit.com.cn:7070/r/epmet-cloud into release_temp

master
wangxianzhang 4 years ago
parent
commit
89df934c9b
  1. 76
      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

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

@ -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) {

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

@ -970,7 +970,9 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
if (StringUtils.isNotBlank(cacheValue)){
map.put(columnName,cacheValue);
} 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())) {
remoteOptions.forEach((label, value) -> map.put(value, vauleStr.contains(value) ? StrConstant.YES : StrConstant.NO));
} else if (FormItemTypeEnum.SELECT.getCode().equals(e.getItemType())) {

Loading…
Cancel
Save