From 00814a38071a6141ea670a78fe6510abb03fc54b Mon Sep 17 00:00:00 2001 From: jerryjzhang Date: Sat, 17 May 2025 16:43:15 +0800 Subject: [PATCH] [fix][heaadless]Avoid duplicate semantic fields in modelDetail. --- .../service/impl/MetricServiceImpl.java | 3 +- .../server/service/impl/ModelServiceImpl.java | 20 +++++++++- .../headless/server/utils/ModelConverter.java | 37 +++++++++++++------ 3 files changed, 45 insertions(+), 15 deletions(-) diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java index bd89778db..af95bf1d2 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java @@ -439,9 +439,8 @@ public class MetricServiceImpl extends ServiceImpl metricFilter.setBizName(bizName); metricFilter.setModelIds(Lists.newArrayList(modelId)); List metricResps = getMetrics(metricFilter); - MetricResp metricResp = null; if (CollectionUtils.isEmpty(metricResps)) { - return metricResp; + return null; } return metricResps.get(0); } 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 cf5afe3de..aed149841 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 @@ -241,12 +241,28 @@ public class ModelServiceImpl implements ModelService { private void batchCreateDimension(ModelDO modelDO, User user) throws Exception { List dimensionReqs = ModelConverter.convertDimensionList(modelDO); - dimensionService.createDimensionBatch(dimensionReqs, user); + List dimensionToCreate = new ArrayList<>(); + for (DimensionReq dimensionReq : dimensionReqs) { + DimensionResp dimensionResp = + dimensionService.getDimension(dimensionReq.getBizName(), modelDO.getId()); + if (dimensionResp == null) { + dimensionToCreate.add(dimensionReq); + } + } + dimensionService.createDimensionBatch(dimensionToCreate, user); } private void batchCreateMetric(ModelDO modelDO, User user) throws Exception { List metricReqs = ModelConverter.convertMetricList(modelDO); - metricService.createMetricBatch(metricReqs, user); + List metricToCreate = new ArrayList<>(); + for (MetricReq metricReq : metricReqs) { + MetricResp metricResp = + metricService.getMetric(modelDO.getId(), metricReq.getBizName()); + if (metricResp == null) { + metricToCreate.add(metricReq); + } + } + metricService.createMetricBatch(metricToCreate, user); } private void checkParams(ModelReq modelReq) { diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ModelConverter.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ModelConverter.java index 32f2418b6..5f4a6cdf6 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ModelConverter.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ModelConverter.java @@ -164,19 +164,34 @@ public class ModelConverter { fields.add(new Field(semanticColumn.getColumnName(), semanticColumn.getDataType())); if (getIdentifyType(fieldType) != null) { - Identify identify = new Identify(semanticColumn.getName(), - getIdentifyType(fieldType).name(), semanticColumn.getColumnName(), 1); - modelDetail.getIdentifiers().add(identify); + Optional optional = modelDetail.getIdentifiers().stream().filter( + identify -> identify.getBizName().equals(semanticColumn.getColumnName())) + .findAny(); + if (optional.isEmpty()) { + Identify identify = new Identify(semanticColumn.getName(), + getIdentifyType(fieldType).name(), semanticColumn.getColumnName(), 1); + modelDetail.getIdentifiers().add(identify); + } } else if (FieldType.measure.equals(fieldType)) { - Measure measure = new Measure(semanticColumn.getName(), - semanticColumn.getColumnName(), semanticColumn.getExpr(), - semanticColumn.getAgg().getOperator(), semanticColumn.getUnit(), 1); - modelDetail.getMeasures().add(measure); + Optional optional = modelDetail.getMeasures().stream().filter( + measure -> measure.getBizName().equals(semanticColumn.getColumnName())) + .findAny(); + if (optional.isEmpty()) { + Measure measure = new Measure(semanticColumn.getName(), + semanticColumn.getColumnName(), semanticColumn.getExpr(), + semanticColumn.getAgg().getOperator(), semanticColumn.getUnit(), 1); + modelDetail.getMeasures().add(measure); + } } else { - Dimension dim = new Dimension(semanticColumn.getName(), - semanticColumn.getColumnName(), semanticColumn.getExpr(), - DimensionType.valueOf(semanticColumn.getFiledType().name()), 1); - modelDetail.getDimensions().add(dim); + Optional optional = modelDetail.getDimensions().stream().filter( + dimension -> dimension.getBizName().equals(semanticColumn.getColumnName())) + .findAny(); + if (optional.isEmpty()) { + Dimension dim = new Dimension(semanticColumn.getName(), + semanticColumn.getColumnName(), semanticColumn.getExpr(), + DimensionType.valueOf(semanticColumn.getFiledType().name()), 1); + modelDetail.getDimensions().add(dim); + } } } modelDetail.setFields(fields);