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