diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelServiceImpl.java index 4c91ca962..a8531647b 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelServiceImpl.java @@ -167,13 +167,31 @@ public class ModelServiceImpl implements ModelService { if (datasourceDO == null) { return; } - checkDelete(id); + // cascade delete metrics and dimensions under the model + deleteModelItems(id, user); datasourceDO.setStatus(StatusEnum.DELETED.getCode()); datasourceDO.setUpdatedAt(new Date()); datasourceDO.setUpdatedBy(user.getName()); modelRepository.updateModel(datasourceDO); } + private void deleteModelItems(Long modelId, User user) { + MetaFilter metaFilter = new MetaFilter(); + metaFilter.setModelIds(Lists.newArrayList(modelId)); + List metricResps = metricService.getMetrics(metaFilter); + List dimensionResps = dimensionService.getDimensions(metaFilter); + List metricIds = metricResps.stream().map(MetricResp::getId) + .collect(Collectors.toList()); + List 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 public ItemDateResp getItemDate(ItemDateFilter dimension, ItemDateFilter metric) { List 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 metricResps = metricService.getMetrics(metaFilter); - List 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 itemDates) { if (CollectionUtils.isEmpty(itemDates)) { log.warn("itemDates is empty!");