Browse Source

限制重复配置---

2025年3月5日19:26:31
qingyuan_dev_new
lishuai 10 months ago
parent
commit
25a3698f11
  1. 32
      modules/calculation/src/main/java/com/thing/calculation/service/impl/CalcTargetConfigServiceImpl.java

32
modules/calculation/src/main/java/com/thing/calculation/service/impl/CalcTargetConfigServiceImpl.java

@ -202,6 +202,14 @@ public class CalcTargetConfigServiceImpl
// 目标物公式描述生成计算物配置默认信息设置
List<CalcSourceConfigDTO> sourceConfigs = targetConfig.getSourceConfigs();
List<CalcSourceConfigDTO> duplicates = findDuplicates(sourceConfigs);
if(!CollectionUtils.isEmpty(duplicates)){
String result = duplicates.stream()
.map(CalcSourceConfigDTO::toString) // 或者自定义拼接方法 dto.getSourceThingCode() + " " + dto.getSourceAttrCode()
.collect(Collectors.joining(", ")); // 使用 ", " 作为分隔符
throw new SysException("计算源物配置重复:" + result);
}
// 如果是映射则自动生成公式方便统一处理
if (CalcConfigType.isMapping(targetConfig.getConfigType())) {
autoGenerateFormula(targetConfig, sourceConfigs);
@ -233,6 +241,30 @@ public class CalcTargetConfigServiceImpl
operation.accept(targetConfig);
}
public static List<CalcSourceConfigDTO> findDuplicates(List<CalcSourceConfigDTO> sourceConfigs) {
Set<String> seen = new HashSet<>();
Set<String> duplicates = new HashSet<>();
// 遍历源列表收集重复的项
for (CalcSourceConfigDTO dto : sourceConfigs) {
String key = dto.getSourceThingCode() + ":" + dto.getSourceAttrCode();
if (!seen.add(key)) { // 如果 add 返回 false说明是重复的
duplicates.add(key);
}
}
// 筛选出重复的元素
List<CalcSourceConfigDTO> result = new ArrayList<>();
for (CalcSourceConfigDTO dto : sourceConfigs) {
String key = dto.getSourceThingCode() + ":" + dto.getSourceAttrCode();
if (duplicates.contains(key)) {
result.add(dto);
}
}
return result;
}
@Override
@CacheEvict(value = CacheNameEnum.THING_CALC_CONFIG, key = "'all'")
public void handleUpdate(CalcTargetConfigDTO targetConfig) {

Loading…
Cancel
Save