Commit 8426ebab by zhangxingmin

push

parent b118fe20
......@@ -69,28 +69,52 @@ public class ApiAttributeSettingServiceImpl implements ApiAttributeSettingServic
.build());
if (!CollectionUtils.isEmpty(attributeSettingList)) {
//收集所有需要批量查询的字段值业务ID
// 存储每个属性设置的原始值和可能的业务ID
Map<String, List<String>> settingDtoToBizIdsMap = new HashMap<>();
Map<String, List<String>> settingDtoToOriginalValuesMap = new HashMap<>();
List<String> allFieldValueBizIds = new ArrayList<>();
Map<String, List<String>> settingDtoToValueBizIdsMap = new HashMap<>();
for (int i = 0; i < attributeSettingList.size(); i++) {
AttributeSetting dto = attributeSettingList.get(i);
List<String> fieldValueBizIds = new ArrayList<>();
List<String> bizIds = new ArrayList<>();
List<String> originalValues = new ArrayList<>();
// 处理原始值
if (StringUtils.isNotBlank(dto.getValue())) {
if (dto.getValue().contains(";")) {
// 多选情况
originalValues.addAll(Arrays.asList(dto.getValue().split(";")));
} else {
// 单选情况
originalValues.add(dto.getValue());
}
}
// 收集fieldValueBizId中的业务ID
// 收集业务ID
// 1. 首先从fieldValueBizId字段收集
if (StringUtils.isNotBlank(dto.getFieldValueBizId())) {
if (dto.getFieldValueBizId().contains(";")) {
// 多选情况,多个字段值业务ID用分号分隔
fieldValueBizIds.addAll(Arrays.asList(dto.getFieldValueBizId().split(";")));
bizIds.addAll(Arrays.asList(dto.getFieldValueBizId().split(";")));
} else {
// 单选情况
fieldValueBizIds.add(dto.getFieldValueBizId());
bizIds.add(dto.getFieldValueBizId());
}
}
// 2. 如果fieldValueBizId为空,但originalValues看起来像是业务ID,也收集
else if (!originalValues.isEmpty()) {
// 检查所有原始值是否都像是业务ID
boolean allValuesLookLikeBizIds = originalValues.stream()
.allMatch(this::isLikelyBizId);
if (allValuesLookLikeBizIds) {
bizIds.addAll(originalValues);
}
}
settingDtoToBizIdsMap.put(String.valueOf(i), bizIds);
settingDtoToOriginalValuesMap.put(String.valueOf(i), originalValues);
if (!fieldValueBizIds.isEmpty()) {
allFieldValueBizIds.addAll(fieldValueBizIds);
settingDtoToValueBizIdsMap.put(String.valueOf(i), fieldValueBizIds);
if (!bizIds.isEmpty()) {
allFieldValueBizIds.addAll(bizIds);
}
}
......@@ -139,46 +163,47 @@ public class ApiAttributeSettingServiceImpl implements ApiAttributeSettingServic
ApiAttributeSettingDto settingDto = new ApiAttributeSettingDto();
BeanUtils.copyProperties(dto, settingDto);
List<String> valueBizIds = settingDtoToValueBizIdsMap.get(String.valueOf(i));
if (!CollectionUtils.isEmpty(valueBizIds)) {
// 构建字段值名称(多个值用分号分隔)
List<String> bizIds = settingDtoToBizIdsMap.get(String.valueOf(i));
List<String> originalValues = settingDtoToOriginalValuesMap.get(String.valueOf(i));
if (!bizIds.isEmpty()) {
// 有业务ID的情况
Map<String, String> finalFieldValueBizIdToNameMap = fieldValueBizIdToNameMap;
List<String> valueNames = valueBizIds.stream()
.map(fieldValueBizId -> {
Map<String, String> finalFieldValueBizIdToCodeMap = fieldValueBizIdToCodeMap;
List<String> valueNames = bizIds.stream()
.map(bizId -> {
// 首先尝试从字段值服务查询名称
String name = finalFieldValueBizIdToNameMap.get(fieldValueBizId);
// 如果查询不到名称,使用value字段的值
// 这里使用一个简单的判断:如果value字段看起来像是业务ID,则使用业务ID本身
// 否则使用value字段
if (StringUtils.isBlank(name)) {
// 判断value字段是否看起来像是业务ID
if (isLikelyBusinessId(dto.getValue())) {
// 如果是业务ID,使用业务ID本身
return fieldValueBizId;
} else {
// 如果不是业务ID,使用value字段的值
return dto.getValue();
String name = finalFieldValueBizIdToNameMap.get(bizId);
if (StringUtils.isNotBlank(name)) {
return name;
}
// 如果查询不到,使用原始值(如果原始值不是业务ID)或业务ID本身
// 这里需要找到对应的原始值
int index = bizIds.indexOf(bizId);
if (index >= 0 && index < originalValues.size()) {
String originalValue = originalValues.get(index);
// 如果原始值看起来像是业务ID,则使用业务ID本身
if (isLikelyBizId(originalValue)) {
return bizId;
}
return name;
return originalValue;
}
return bizId;
})
.collect(Collectors.toList());
settingDto.setValueNames(StringUtils.join(valueNames, ";"));
// 构建字段值编码(多个值用分号分隔)
Map<String, String> finalFieldValueBizIdToCodeMap = fieldValueBizIdToCodeMap;
List<String> valueCodes = valueBizIds.stream()
.map(fieldValueBizId -> {
String code = finalFieldValueBizIdToCodeMap.get(fieldValueBizId);
// 如果查询不到字段值编码,就塞空字符串
List<String> valueCodes = bizIds.stream()
.map(bizId -> {
String code = finalFieldValueBizIdToCodeMap.get(bizId);
return StringUtils.isNotBlank(code) ? code : "";
})
.collect(Collectors.toList());
settingDto.setValueCodes(StringUtils.join(valueCodes, ";"));
} else {
// 如果没有字段值业务ID,则使用原始值
settingDto.setValueNames(dto.getValue());
} else if (!originalValues.isEmpty()) {
// 没有业务ID,但有原始值的情况
settingDto.setValueNames(StringUtils.join(originalValues, ";"));
settingDto.setValueCodes("");
}
......@@ -190,15 +215,14 @@ public class ApiAttributeSettingServiceImpl implements ApiAttributeSettingServic
/**
* 判断一个字符串是否可能是业务ID
* 这是一个保守的判断,只检查基本特征
*/
private boolean isLikelyBusinessId(String str) {
private boolean isLikelyBizId(String str) {
if (StringUtils.isBlank(str)) {
return false;
}
// 业务ID通常包含下划线,且长度较长
// 这是一个简单的判断,可以根据实际情况调整
// 这是一个保守的判断
return str.contains("_") && str.length() > 10;
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment