refactor(model): 重构模型删除逻辑实现级联删除
Some checks failed
supersonic CentOS CI / build (21) (push) Has been cancelled
supersonic mac CI / build (21) (push) Has been cancelled
supersonic ubuntu CI / build (21) (push) Has been cancelled
supersonic windows CI / build (21) (push) Has been cancelled

- 删除原有的删除检查方法 checkDelete
- 新增 deleteModelItems 方法实现模型下指标和维度的级联删除
- 在模型删除时自动清理相关的指标和维度数据
- 移除对在线状态指标和维度的删除限制检查
This commit is contained in:
jerryjzhang
2026-08-03 14:13:24 +08:00
parent ce904e329b
commit af08d869c4

View File

@@ -167,13 +167,31 @@ public class ModelServiceImpl implements ModelService {
if (datasourceDO == null) { if (datasourceDO == null) {
return; return;
} }
checkDelete(id); // cascade delete metrics and dimensions under the model
deleteModelItems(id, user);
datasourceDO.setStatus(StatusEnum.DELETED.getCode()); datasourceDO.setStatus(StatusEnum.DELETED.getCode());
datasourceDO.setUpdatedAt(new Date()); datasourceDO.setUpdatedAt(new Date());
datasourceDO.setUpdatedBy(user.getName()); datasourceDO.setUpdatedBy(user.getName());
modelRepository.updateModel(datasourceDO); modelRepository.updateModel(datasourceDO);
} }
private void deleteModelItems(Long modelId, User user) {
MetaFilter metaFilter = new MetaFilter();
metaFilter.setModelIds(Lists.newArrayList(modelId));
List<MetricResp> metricResps = metricService.getMetrics(metaFilter);
List<DimensionResp> dimensionResps = dimensionService.getDimensions(metaFilter);
List<Long> metricIds = metricResps.stream().map(MetricResp::getId)
.collect(Collectors.toList());
List<Long> dimensionIds = dimensionResps.stream().map(DimensionResp::getId)
.collect(Collectors.toList());
if (!CollectionUtils.isEmpty(metricIds)) {
metricService.deleteMetricBatch(metricIds, user);
}
if (!CollectionUtils.isEmpty(dimensionIds)) {
dimensionService.deleteDimensionBatch(dimensionIds, user);
}
}
@Override @Override
public ItemDateResp getItemDate(ItemDateFilter dimension, ItemDateFilter metric) { public ItemDateResp getItemDate(ItemDateFilter dimension, ItemDateFilter metric) {
List<DateInfoReq> itemDates = new ArrayList<>(); List<DateInfoReq> itemDates = new ArrayList<>();
@@ -331,20 +349,6 @@ public class ModelServiceImpl implements ModelService {
} }
} }
private void checkDelete(Long modelId) {
MetaFilter metaFilter = new MetaFilter();
metaFilter.setModelIds(Lists.newArrayList(modelId));
List<MetricResp> metricResps = metricService.getMetrics(metaFilter);
List<DimensionResp> dimensionResps = dimensionService.getDimensions(metaFilter);
boolean validMetric = metricResps.stream().anyMatch(
metricResp -> Objects.equals(metricResp.getStatus(), StatusEnum.ONLINE.getCode()));
boolean validDimension = dimensionResps.stream().anyMatch(dimensionResp -> Objects
.equals(dimensionResp.getStatus(), StatusEnum.ONLINE.getCode()));
if (validMetric || validDimension) {
throw new RuntimeException("存在基于该模型创建的指标和维度, 暂不能删除, 请确认");
}
}
private ItemDateResp calculateDateInternal(List<DateInfoReq> itemDates) { private ItemDateResp calculateDateInternal(List<DateInfoReq> itemDates) {
if (CollectionUtils.isEmpty(itemDates)) { if (CollectionUtils.isEmpty(itemDates)) {
log.warn("itemDates is empty!"); log.warn("itemDates is empty!");