(fix)(headless) fix schemaItem useCnt always 0

This commit is contained in:
lxwcodemonkey
2025-01-04 18:39:29 +08:00
committed by jerryjzhang
parent 4821f31e15
commit 6af345044a
4 changed files with 38 additions and 26 deletions

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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 {