From af08d869c4609bf8d48d64e78c61427fe93f7489 Mon Sep 17 00:00:00 2001 From: jerryjzhang Date: Mon, 3 Aug 2026 14:13:24 +0800 Subject: [PATCH] =?UTF-8?q?refactor(model):=20=E9=87=8D=E6=9E=84=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E5=88=A0=E9=99=A4=E9=80=BB=E8=BE=91=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E7=BA=A7=E8=81=94=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除原有的删除检查方法 checkDelete - 新增 deleteModelItems 方法实现模型下指标和维度的级联删除 - 在模型删除时自动清理相关的指标和维度数据 - 移除对在线状态指标和维度的删除限制检查 --- .../server/service/impl/ModelServiceImpl.java | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) 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!");