mirror of
https://github.com/tencentmusic/supersonic.git
synced 2026-08-10 10:56:52 +08:00
refactor(model): 重构模型删除逻辑实现级联删除
- 删除原有的删除检查方法 checkDelete - 新增 deleteModelItems 方法实现模型下指标和维度的级联删除 - 在模型删除时自动清理相关的指标和维度数据 - 移除对在线状态指标和维度的删除限制检查
This commit is contained in:
@@ -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!");
|
||||||
|
|||||||
Reference in New Issue
Block a user