(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 String startTime;
private Long modelId; private Long modelId;
private Long dataSetId;
private List<Long> dataSetIds;
private List<Long> modelIds; private List<Long> modelIds;
private Boolean cacheEnable = true; private Boolean cacheEnable = true;
private String metric; 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 com.tencent.supersonic.headless.server.persistence.repository.StatRepository;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@@ -82,7 +83,12 @@ public class StatRepositoryImpl implements StatRepository {
if (Objects.nonNull(itemUseReq.getMetric())) { if (Objects.nonNull(itemUseReq.getMetric())) {
queryWrapper.lambda().like(QueryStatDO::getMetrics, 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); 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.DataSetSchema;
import com.tencent.supersonic.headless.api.pojo.ItemDateFilter; import com.tencent.supersonic.headless.api.pojo.ItemDateFilter;
import com.tencent.supersonic.headless.api.pojo.MetaFilter; 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.SemanticSchema;
import com.tencent.supersonic.headless.api.pojo.enums.SchemaType; import com.tencent.supersonic.headless.api.pojo.enums.SchemaType;
import com.tencent.supersonic.headless.api.pojo.request.DataSetFilterReq; 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) { private void fillCnt(List<DataSetSchemaResp> dataSetSchemaResps, List<ItemUseResp> statInfos) {
if (CollectionUtils.isEmpty(statInfos)) {
return;
}
Map<String, ItemUseResp> typeIdAndStatPair = statInfos.stream() Map<String, ItemUseResp> typeIdAndStatPair = statInfos.stream()
.collect(Collectors.toMap( .collect(Collectors.toMap(
itemUseInfo -> itemUseInfo.getType() + AT_SYMBOL + AT_SYMBOL itemUseInfo -> itemUseInfo.getType() + AT_SYMBOL + AT_SYMBOL
@@ -296,40 +299,41 @@ public class SchemaServiceImpl implements SchemaService {
private void fillMetricCnt(DataSetSchemaResp dataSetSchemaResp, private void fillMetricCnt(DataSetSchemaResp dataSetSchemaResp,
Map<String, ItemUseResp> typeIdAndStatPair) { Map<String, ItemUseResp> typeIdAndStatPair) {
List<MetricSchemaResp> metrics = dataSetSchemaResp.getMetrics(); List<MetricSchemaResp> metrics = dataSetSchemaResp.getMetrics();
if (CollectionUtils.isEmpty(dataSetSchemaResp.getMetrics())) { if (CollectionUtils.isEmpty(metrics)) {
return; return;
} }
metrics.forEach(metric -> {
if (!CollectionUtils.isEmpty(metrics)) { metric.setUseCnt(getItemCnt(metric, typeIdAndStatPair));
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());
}
});
}
dataSetSchemaResp.setMetrics(metrics); dataSetSchemaResp.setMetrics(metrics);
} }
private void fillDimCnt(DataSetSchemaResp dataSetSchemaResp, private void fillDimCnt(DataSetSchemaResp dataSetSchemaResp,
Map<String, ItemUseResp> typeIdAndStatPair) { Map<String, ItemUseResp> typeIdAndStatPair) {
List<DimSchemaResp> dimensions = dataSetSchemaResp.getDimensions(); List<DimSchemaResp> dimensions = dataSetSchemaResp.getDimensions();
if (CollectionUtils.isEmpty(dataSetSchemaResp.getDimensions())) { if (CollectionUtils.isEmpty(dimensions)) {
return; return;
} }
if (!CollectionUtils.isEmpty(dimensions)) { dimensions.forEach(dim -> {
dimensions.stream().forEach(dim -> { dim.setUseCnt(getItemCnt(dim, typeIdAndStatPair));
String key = TypeEnums.DIMENSION.name().toLowerCase() + AT_SYMBOL + AT_SYMBOL });
+ dim.getBizName();
if (typeIdAndStatPair.containsKey(key)) {
dim.setUseCnt(typeIdAndStatPair.get(key).getUseCnt());
}
});
}
dataSetSchemaResp.setDimensions(dimensions); 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 @Override
public DimensionResp getDimension(String bizName, Long modelId) { public DimensionResp getDimension(String bizName, Long modelId) {
return dimensionService.getDimension(bizName, modelId); return dimensionService.getDimension(bizName, modelId);
@@ -469,7 +473,7 @@ public class SchemaServiceImpl implements SchemaService {
List<Long> dataSetIds = dataSetSchemaResps.stream().map(DataSetSchemaResp::getId) List<Long> dataSetIds = dataSetSchemaResps.stream().map(DataSetSchemaResp::getId)
.collect(Collectors.toList()); .collect(Collectors.toList());
ItemUseReq itemUseReq = new ItemUseReq(); ItemUseReq itemUseReq = new ItemUseReq();
itemUseReq.setModelIds(dataSetIds); itemUseReq.setDataSetIds(dataSetIds);
List<ItemUseResp> statInfos = getStatInfo(itemUseReq); List<ItemUseResp> statInfos = getStatInfo(itemUseReq);
log.debug("statInfos:{}", statInfos); log.debug("statInfos:{}", statInfos);

View File

@@ -137,8 +137,8 @@ public class StatUtils {
QueryStat queryStatInfo = new QueryStat(); QueryStat queryStatInfo = new QueryStat();
List<String> aggFields = SqlSelectHelper.getAggregateFields(querySqlReq.getSql()); List<String> aggFields = SqlSelectHelper.getAggregateFields(querySqlReq.getSql());
List<String> allFields = SqlSelectHelper.getAllSelectFields(querySqlReq.getSql()); List<String> allFields = SqlSelectHelper.getAllSelectFields(querySqlReq.getSql());
List<String> dimensions = List<String> dimensions = allFields.stream().filter(field -> !aggFields.contains(field))
allFields.stream().filter(aggFields::contains).collect(Collectors.toList()); .collect(Collectors.toList());
String userName = getUserName(facadeUser); String userName = getUserName(facadeUser);
try { try {