mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-10 11:07:06 +00:00
(fix)(headless) fix schemaItem useCnt always 0
This commit is contained in:
committed by
jerryjzhang
parent
4821f31e15
commit
6af345044a
@@ -13,6 +13,8 @@ public class ItemUseReq {
|
||||
|
||||
private String startTime;
|
||||
private Long modelId;
|
||||
private Long dataSetId;
|
||||
private List<Long> dataSetIds;
|
||||
private List<Long> modelIds;
|
||||
private Boolean cacheEnable = true;
|
||||
private String metric;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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<DataSetSchemaResp> dataSetSchemaResps, List<ItemUseResp> statInfos) {
|
||||
|
||||
if (CollectionUtils.isEmpty(statInfos)) {
|
||||
return;
|
||||
}
|
||||
Map<String, ItemUseResp> 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<String, ItemUseResp> typeIdAndStatPair) {
|
||||
List<MetricSchemaResp> 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<String, ItemUseResp> typeIdAndStatPair) {
|
||||
List<DimSchemaResp> 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<String, ItemUseResp> 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<Long> dataSetIds = dataSetSchemaResps.stream().map(DataSetSchemaResp::getId)
|
||||
.collect(Collectors.toList());
|
||||
ItemUseReq itemUseReq = new ItemUseReq();
|
||||
itemUseReq.setModelIds(dataSetIds);
|
||||
itemUseReq.setDataSetIds(dataSetIds);
|
||||
|
||||
List<ItemUseResp> statInfos = getStatInfo(itemUseReq);
|
||||
log.debug("statInfos:{}", statInfos);
|
||||
|
||||
@@ -137,8 +137,8 @@ public class StatUtils {
|
||||
QueryStat queryStatInfo = new QueryStat();
|
||||
List<String> aggFields = SqlSelectHelper.getAggregateFields(querySqlReq.getSql());
|
||||
List<String> allFields = SqlSelectHelper.getAllSelectFields(querySqlReq.getSql());
|
||||
List<String> dimensions =
|
||||
allFields.stream().filter(aggFields::contains).collect(Collectors.toList());
|
||||
List<String> dimensions = allFields.stream().filter(field -> !aggFields.contains(field))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
String userName = getUserName(facadeUser);
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user