diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/ItemUseReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/ItemUseReq.java index 7cf3994d1..b5184c564 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/ItemUseReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/ItemUseReq.java @@ -13,6 +13,8 @@ public class ItemUseReq { private String startTime; private Long modelId; + private Long dataSetId; + private List dataSetIds; private List modelIds; private Boolean cacheEnable = true; private String metric; diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/StatRepositoryImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/StatRepositoryImpl.java index 064f38b78..f344412f2 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/StatRepositoryImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/StatRepositoryImpl.java @@ -12,6 +12,7 @@ import com.tencent.supersonic.headless.server.persistence.mapper.StatMapper; import com.tencent.supersonic.headless.server.persistence.repository.StatRepository; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Repository; @@ -82,7 +83,12 @@ public class StatRepositoryImpl implements StatRepository { if (Objects.nonNull(itemUseReq.getMetric())) { queryWrapper.lambda().like(QueryStatDO::getMetrics, itemUseReq.getMetric()); } - + if (Objects.nonNull(itemUseReq.getDataSetId())) { + queryWrapper.lambda().eq(QueryStatDO::getDataSetId, itemUseReq.getDataSetId()); + } + if (CollectionUtils.isNotEmpty(itemUseReq.getDataSetIds())) { + queryWrapper.lambda().in(QueryStatDO::getDataSetId, itemUseReq.getDataSetIds()); + } return statMapper.selectList(queryWrapper); } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java index 950db495e..b27c9de5f 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java @@ -14,6 +14,7 @@ import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.headless.api.pojo.DataSetSchema; import com.tencent.supersonic.headless.api.pojo.ItemDateFilter; import com.tencent.supersonic.headless.api.pojo.MetaFilter; +import com.tencent.supersonic.headless.api.pojo.SchemaItem; import com.tencent.supersonic.headless.api.pojo.SemanticSchema; import com.tencent.supersonic.headless.api.pojo.enums.SchemaType; import com.tencent.supersonic.headless.api.pojo.request.DataSetFilterReq; @@ -280,7 +281,9 @@ public class SchemaServiceImpl implements SchemaService { } private void fillCnt(List dataSetSchemaResps, List statInfos) { - + if (CollectionUtils.isEmpty(statInfos)) { + return; + } Map typeIdAndStatPair = statInfos.stream() .collect(Collectors.toMap( itemUseInfo -> itemUseInfo.getType() + AT_SYMBOL + AT_SYMBOL @@ -296,40 +299,41 @@ public class SchemaServiceImpl implements SchemaService { private void fillMetricCnt(DataSetSchemaResp dataSetSchemaResp, Map typeIdAndStatPair) { List metrics = dataSetSchemaResp.getMetrics(); - if (CollectionUtils.isEmpty(dataSetSchemaResp.getMetrics())) { + if (CollectionUtils.isEmpty(metrics)) { return; } - - if (!CollectionUtils.isEmpty(metrics)) { - metrics.stream().forEach(metric -> { - String key = TypeEnums.METRIC.name().toLowerCase() + AT_SYMBOL + AT_SYMBOL - + metric.getBizName(); - if (typeIdAndStatPair.containsKey(key)) { - metric.setUseCnt(typeIdAndStatPair.get(key).getUseCnt()); - } - }); - } + metrics.forEach(metric -> { + metric.setUseCnt(getItemCnt(metric, typeIdAndStatPair)); + }); dataSetSchemaResp.setMetrics(metrics); } private void fillDimCnt(DataSetSchemaResp dataSetSchemaResp, Map typeIdAndStatPair) { List dimensions = dataSetSchemaResp.getDimensions(); - if (CollectionUtils.isEmpty(dataSetSchemaResp.getDimensions())) { + if (CollectionUtils.isEmpty(dimensions)) { return; } - if (!CollectionUtils.isEmpty(dimensions)) { - dimensions.stream().forEach(dim -> { - String key = TypeEnums.DIMENSION.name().toLowerCase() + AT_SYMBOL + AT_SYMBOL - + dim.getBizName(); - if (typeIdAndStatPair.containsKey(key)) { - dim.setUseCnt(typeIdAndStatPair.get(key).getUseCnt()); - } - }); - } + dimensions.forEach(dim -> { + dim.setUseCnt(getItemCnt(dim, typeIdAndStatPair)); + }); dataSetSchemaResp.setDimensions(dimensions); } + private Long getItemCnt(SchemaItem schemaItem, Map typeIdAndStatPair) { + String bizNameKey = schemaItem.getTypeEnum().name().toLowerCase() + AT_SYMBOL + AT_SYMBOL + + schemaItem.getBizName(); + String nameKey = schemaItem.getTypeEnum().name().toLowerCase() + AT_SYMBOL + AT_SYMBOL + + schemaItem.getName(); + if (typeIdAndStatPair.containsKey(bizNameKey)) { + return typeIdAndStatPair.get(bizNameKey).getUseCnt(); + } + if (typeIdAndStatPair.containsKey(nameKey)) { + return typeIdAndStatPair.get(nameKey).getUseCnt(); + } + return 0L; + } + @Override public DimensionResp getDimension(String bizName, Long modelId) { return dimensionService.getDimension(bizName, modelId); @@ -469,7 +473,7 @@ public class SchemaServiceImpl implements SchemaService { List dataSetIds = dataSetSchemaResps.stream().map(DataSetSchemaResp::getId) .collect(Collectors.toList()); ItemUseReq itemUseReq = new ItemUseReq(); - itemUseReq.setModelIds(dataSetIds); + itemUseReq.setDataSetIds(dataSetIds); List statInfos = getStatInfo(itemUseReq); log.debug("statInfos:{}", statInfos); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/StatUtils.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/StatUtils.java index 52e215616..ff7d9f478 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/StatUtils.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/StatUtils.java @@ -137,8 +137,8 @@ public class StatUtils { QueryStat queryStatInfo = new QueryStat(); List aggFields = SqlSelectHelper.getAggregateFields(querySqlReq.getSql()); List allFields = SqlSelectHelper.getAllSelectFields(querySqlReq.getSql()); - List dimensions = - allFields.stream().filter(aggFields::contains).collect(Collectors.toList()); + List dimensions = allFields.stream().filter(field -> !aggFields.contains(field)) + .collect(Collectors.toList()); String userName = getUserName(facadeUser); try {