From 3752543921533542d5ff736a1e839f9ef3f5a6cc Mon Sep 17 00:00:00 2001 From: jerryjzhang Date: Thu, 7 May 2026 15:51:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(dataset):=20=E5=AE=9E=E7=8E=B0=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=9B=86=E6=A8=A1=E5=9E=8B=E9=85=8D=E7=BD=AE=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E5=85=A8=E9=87=8F=E7=BB=B4=E5=BA=A6=E6=8C=87=E6=A0=87?= =?UTF-8?q?=E6=89=A9=E5=B1=95=E5=8A=9F=E8=83=BD=20-=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=20expandIncludesAllModels=20=E6=96=B9=E6=B3=95=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=85=A8=E9=87=8F=E7=BB=B4=E5=BA=A6=E6=8C=87=E6=A0=87?= =?UTF-8?q?=E6=98=A0=E5=B0=84=20-=20=E6=A0=B9=E6=8D=AE=E6=A8=A1=E5=9E=8BID?= =?UTF-8?q?=E5=88=86=E7=BB=84=E6=94=B6=E9=9B=86=E7=BB=B4=E5=BA=A6=E5=92=8C?= =?UTF-8?q?=E6=8C=87=E6=A0=87=E5=B9=B6=E5=90=88=E5=B9=B6=E5=88=B0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E4=B8=AD=20-=20=E5=B0=86=20includesAll=20=E6=A0=87?= =?UTF-8?q?=E5=BF=97=E9=87=8D=E7=BD=AE=E4=B8=BA=20false=20=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E9=87=8D=E5=A4=8D=E6=89=A9=E5=B1=95=20-=20=E7=A1=AE?= =?UTF-8?q?=E4=BF=9D=E5=9C=A8=E7=BA=BF=E7=8A=B6=E6=80=81=E7=9A=84=E7=BB=B4?= =?UTF-8?q?=E5=BA=A6=E5=92=8C=E6=8C=87=E6=A0=87=E8=A2=AB=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=E5=8C=85=E5=90=AB=E5=88=B0=E6=95=B0=E6=8D=AE=E9=9B=86=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DataSetServiceImpl.java | 65 ++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DataSetServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DataSetServiceImpl.java index a2cf6c91e..a3c23ce1a 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DataSetServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DataSetServiceImpl.java @@ -13,6 +13,7 @@ import com.tencent.supersonic.common.pojo.enums.TypeEnums; import com.tencent.supersonic.common.pojo.exception.InvalidArgumentException; import com.tencent.supersonic.common.util.BeanMapper; import com.tencent.supersonic.headless.api.pojo.DataSetDetail; +import com.tencent.supersonic.headless.api.pojo.DataSetModelConfig; import com.tencent.supersonic.headless.api.pojo.MetaFilter; import com.tencent.supersonic.headless.api.pojo.QueryConfig; import com.tencent.supersonic.headless.api.pojo.request.*; @@ -52,6 +53,9 @@ public class DataSetServiceImpl extends ServiceImpl @Autowired private MetricService metricService; + @Autowired + private ModelService modelService; + @Override public DataSetResp save(DataSetReq dataSetReq, User user) { dataSetReq.createdBy(user.getName()); @@ -77,7 +81,13 @@ public class DataSetServiceImpl extends ServiceImpl @Override public DataSetResp getDataSet(Long id) { DataSetDO dataSetDO = getById(id); - return convert(dataSetDO); + DataSetResp dataSetResp = convert(dataSetDO); + + if (dataSetResp.getDataSetDetail() != null) { + expandIncludesAllModels(dataSetResp); + } + + return dataSetResp; } @Override @@ -273,6 +283,59 @@ public class DataSetServiceImpl extends ServiceImpl .map(Object::toString).collect(Collectors.toList()); } + private void expandIncludesAllModels(DataSetResp dataSetResp) { + List configs = dataSetResp.getDataSetDetail().getDataSetModelConfigs(); + if (CollectionUtils.isEmpty(configs)) { + return; + } + + Set includeAllModelIds = configs.stream() + .filter(DataSetModelConfig::getIncludesAll) + .map(DataSetModelConfig::getId) + .collect(Collectors.toSet()); + + if (CollectionUtils.isEmpty(includeAllModelIds)) { + return; + } + + MetaFilter metaFilter = new MetaFilter(); + metaFilter.setModelIds(new ArrayList<>(includeAllModelIds)); + metaFilter.setStatus(StatusEnum.ONLINE.getCode()); + + List allDimensions = dimensionService.getDimensions(metaFilter); + List allMetrics = metricService.getMetrics(metaFilter); + + Map> modelDimensionMap = allDimensions.stream() + .collect(Collectors.groupingBy( + DimensionResp::getModelId, + Collectors.mapping(DimensionResp::getId, Collectors.toList()) + )); + + Map> modelMetricMap = allMetrics.stream() + .collect(Collectors.groupingBy( + MetricResp::getModelId, + Collectors.mapping(MetricResp::getId, Collectors.toList()) + )); + + for (DataSetModelConfig config : configs) { + if (Boolean.TRUE.equals(config.getIncludesAll())) { + Long modelId = config.getId(); + + List modelDimensions = modelDimensionMap.getOrDefault(modelId, Lists.newArrayList()); + Set existingDimensions = new HashSet<>(config.getDimensions()); + existingDimensions.addAll(modelDimensions); + config.setDimensions(new ArrayList<>(existingDimensions)); + + List modelMetrics = modelMetricMap.getOrDefault(modelId, Lists.newArrayList()); + Set existingMetrics = new HashSet<>(config.getMetrics()); + existingMetrics.addAll(modelMetrics); + config.setMetrics(new ArrayList<>(existingMetrics)); + + config.setIncludesAll(false); + } + } + } + public Long getDataSetIdFromSql(String sql, User user) { List dataSets = null; try {