(improvement)(Headless) Modify metric category name, add information about whether metrics and dimensions are tags in fetchDataSetSchema (#857)

This commit is contained in:
lexluo09
2024-03-25 15:37:11 +08:00
committed by GitHub
parent aa5f3c9a83
commit f6aefe2fb0
17 changed files with 127 additions and 86 deletions

View File

@@ -23,20 +23,22 @@ public class MetricBaseReq extends SchemaItem {
private DataFormat dataFormat; private DataFormat dataFormat;
private List<String> tags; private List<String> classifications;
private RelateDimension relateDimension; private RelateDimension relateDimension;
private int isTag;
private Map<String, Object> ext = new HashMap<>(); private Map<String, Object> ext = new HashMap<>();
public String getTag() { public String getClassifications() {
if (tags == null) { if (classifications == null) {
return null; return null;
} }
if (CollectionUtils.isEmpty(tags)) { if (CollectionUtils.isEmpty(classifications)) {
return ""; return "";
} }
return StringUtils.join(tags, ","); return StringUtils.join(classifications, ",");
} }
} }

View File

@@ -43,7 +43,7 @@ public class MetricResp extends SchemaItem {
private String alias; private String alias;
private List<String> tags; private List<String> classifications;
private RelateDimension relateDimension; private RelateDimension relateDimension;
@@ -63,11 +63,11 @@ public class MetricResp extends SchemaItem {
private int isTag; private int isTag;
public void setTag(String tag) { public void setClassifications(String tag) {
if (StringUtils.isBlank(tag)) { if (StringUtils.isBlank(tag)) {
tags = Lists.newArrayList(); classifications = Lists.newArrayList();
} else { } else {
tags = Arrays.asList(tag.split(",")); classifications = Arrays.asList(tag.split(","));
} }
} }

View File

@@ -87,7 +87,7 @@ public class MetricDO {
/** /**
* *
*/ */
private String tags; private String classifications;
/** /**
* *

View File

@@ -2,9 +2,11 @@ package com.tencent.supersonic.headless.server.service;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.headless.api.pojo.enums.TagDefineType;
import com.tencent.supersonic.headless.api.pojo.request.TagDeleteReq; import com.tencent.supersonic.headless.api.pojo.request.TagDeleteReq;
import com.tencent.supersonic.headless.api.pojo.request.TagFilterPageReq; import com.tencent.supersonic.headless.api.pojo.request.TagFilterPageReq;
import com.tencent.supersonic.headless.api.pojo.request.TagReq; import com.tencent.supersonic.headless.api.pojo.request.TagReq;
import com.tencent.supersonic.headless.api.pojo.response.TagItem;
import com.tencent.supersonic.headless.api.pojo.response.TagResp; import com.tencent.supersonic.headless.api.pojo.response.TagResp;
import com.tencent.supersonic.headless.server.persistence.dataobject.TagDO; import com.tencent.supersonic.headless.server.persistence.dataobject.TagDO;
import com.tencent.supersonic.headless.server.pojo.TagFilter; import com.tencent.supersonic.headless.server.pojo.TagFilter;
@@ -28,4 +30,6 @@ public interface TagMetaService {
List<TagDO> getTagDOList(TagFilter tagFilter, User user); List<TagDO> getTagDOList(TagFilter tagFilter, User user);
PageInfo<TagResp> queryTagMarketPage(TagFilterPageReq tagMarketPageReq, User user); PageInfo<TagResp> queryTagMarketPage(TagFilterPageReq tagMarketPageReq, User user);
List<TagItem> getTagItems(User user, List<Long> itemIds, TagDefineType tagDefineType);
} }

View File

@@ -26,22 +26,13 @@ import com.tencent.supersonic.headless.api.pojo.response.DomainResp;
import com.tencent.supersonic.headless.api.pojo.response.MetricResp; import com.tencent.supersonic.headless.api.pojo.response.MetricResp;
import com.tencent.supersonic.headless.api.pojo.response.TagItem; import com.tencent.supersonic.headless.api.pojo.response.TagItem;
import com.tencent.supersonic.headless.server.persistence.dataobject.DataSetDO; import com.tencent.supersonic.headless.server.persistence.dataobject.DataSetDO;
import com.tencent.supersonic.headless.server.persistence.dataobject.TagDO;
import com.tencent.supersonic.headless.server.persistence.mapper.DataSetDOMapper; import com.tencent.supersonic.headless.server.persistence.mapper.DataSetDOMapper;
import com.tencent.supersonic.headless.server.pojo.MetaFilter; import com.tencent.supersonic.headless.server.pojo.MetaFilter;
import com.tencent.supersonic.headless.server.pojo.TagFilter;
import com.tencent.supersonic.headless.server.service.DataSetService; import com.tencent.supersonic.headless.server.service.DataSetService;
import com.tencent.supersonic.headless.server.service.DimensionService; import com.tencent.supersonic.headless.server.service.DimensionService;
import com.tencent.supersonic.headless.server.service.DomainService; import com.tencent.supersonic.headless.server.service.DomainService;
import com.tencent.supersonic.headless.server.service.MetricService; import com.tencent.supersonic.headless.server.service.MetricService;
import com.tencent.supersonic.headless.server.service.TagMetaService; import com.tencent.supersonic.headless.server.service.TagMetaService;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.Date; import java.util.Date;
@@ -52,6 +43,13 @@ import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@Service @Service
public class DataSetServiceImpl public class DataSetServiceImpl
@@ -164,21 +162,6 @@ public class DataSetServiceImpl
domainIds.contains(dataSetResp.getDomainId())).collect(Collectors.toList()); domainIds.contains(dataSetResp.getDomainId())).collect(Collectors.toList());
} }
private List<TagItem> getTagItems(User user, List<Long> dimensionIds, TagDefineType tagDefineType) {
TagFilter tagFilter = new TagFilter();
tagFilter.setTagDefineType(tagDefineType);
tagFilter.setItemIds(dimensionIds);
Set<Long> dimensionItemSet = tagMetaService.getTagDOList(tagFilter, user).stream().map(TagDO::getItemId)
.collect(Collectors.toSet());
return dimensionIds.stream().map(entry -> {
TagItem tagItem = new TagItem();
tagItem.setIsTag(Boolean.compare(dimensionItemSet.contains(entry), false));
tagItem.setItemId(entry);
return tagItem;
}
).collect(Collectors.toList());
}
private DataSetResp convert(DataSetDO dataSetDO, User user) { private DataSetResp convert(DataSetDO dataSetDO, User user) {
DataSetResp dataSetResp = new DataSetResp(); DataSetResp dataSetResp = new DataSetResp();
BeanMapper.mapper(dataSetDO, dataSetResp); BeanMapper.mapper(dataSetDO, dataSetResp);
@@ -191,10 +174,11 @@ public class DataSetServiceImpl
dataSetResp.setAdminOrgs(StringUtils.isBlank(dataSetDO.getAdminOrg()) dataSetResp.setAdminOrgs(StringUtils.isBlank(dataSetDO.getAdminOrg())
? Lists.newArrayList() : Arrays.asList(dataSetDO.getAdminOrg().split(","))); ? Lists.newArrayList() : Arrays.asList(dataSetDO.getAdminOrg().split(",")));
dataSetResp.setTypeEnum(TypeEnums.DATASET); dataSetResp.setTypeEnum(TypeEnums.DATASET);
List<TagItem> dimensionItems = getTagItems(user, dataSetResp.dimensionIds(), TagDefineType.DIMENSION); List<TagItem> dimensionItems = tagMetaService.getTagItems(user, dataSetResp.dimensionIds(),
TagDefineType.DIMENSION);
dataSetResp.setAllDimensions(dimensionItems); dataSetResp.setAllDimensions(dimensionItems);
List<TagItem> metricItems = getTagItems(user, dataSetResp.metricIds(), TagDefineType.METRIC); List<TagItem> metricItems = tagMetaService.getTagItems(user, dataSetResp.metricIds(), TagDefineType.METRIC);
dataSetResp.setAllMetrics(metricItems); dataSetResp.setAllMetrics(metricItems);
return dataSetResp; return dataSetResp;
} }

View File

@@ -27,6 +27,7 @@ import com.tencent.supersonic.headless.api.pojo.response.DatabaseResp;
import com.tencent.supersonic.headless.api.pojo.response.DimensionResp; import com.tencent.supersonic.headless.api.pojo.response.DimensionResp;
import com.tencent.supersonic.headless.api.pojo.response.ModelResp; import com.tencent.supersonic.headless.api.pojo.response.ModelResp;
import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
import com.tencent.supersonic.headless.api.pojo.response.TagItem;
import com.tencent.supersonic.headless.server.persistence.dataobject.DimensionDO; import com.tencent.supersonic.headless.server.persistence.dataobject.DimensionDO;
import com.tencent.supersonic.headless.server.persistence.dataobject.TagDO; import com.tencent.supersonic.headless.server.persistence.dataobject.TagDO;
import com.tencent.supersonic.headless.server.persistence.repository.DimensionRepository; import com.tencent.supersonic.headless.server.persistence.repository.DimensionRepository;
@@ -81,12 +82,12 @@ public class DimensionServiceImpl implements DimensionService {
public DimensionServiceImpl(DimensionRepository dimensionRepository, public DimensionServiceImpl(DimensionRepository dimensionRepository,
ModelService modelService, ModelService modelService,
ChatGptHelper chatGptHelper, ChatGptHelper chatGptHelper,
DatabaseService databaseService, DatabaseService databaseService,
ModelRelaService modelRelaService, ModelRelaService modelRelaService,
DataSetService dataSetService, DataSetService dataSetService,
TagMetaService tagMetaService) { TagMetaService tagMetaService) {
this.modelService = modelService; this.modelService = modelService;
this.dimensionRepository = dimensionRepository; this.dimensionRepository = dimensionRepository;
this.chatGptHelper = chatGptHelper; this.chatGptHelper = chatGptHelper;
@@ -125,7 +126,7 @@ public class DimensionServiceImpl implements DimensionService {
return; return;
} }
List<DimensionDO> dimensionDOS = dimensionToInsert.stream().peek(dimension -> List<DimensionDO> dimensionDOS = dimensionToInsert.stream().peek(dimension ->
dimension.createdBy(user.getName())) dimension.createdBy(user.getName()))
.map(DimensionConverter::convert2DimensionDO) .map(DimensionConverter::convert2DimensionDO)
.collect(Collectors.toList()); .collect(Collectors.toList());
dimensionRepository.createDimensionBatch(dimensionDOS); dimensionRepository.createDimensionBatch(dimensionDOS);
@@ -216,7 +217,7 @@ public class DimensionServiceImpl implements DimensionService {
BeanUtils.copyProperties(pageDimensionReq, dimensionFilter); BeanUtils.copyProperties(pageDimensionReq, dimensionFilter);
dimensionFilter.setModelIds(pageDimensionReq.getModelIds()); dimensionFilter.setModelIds(pageDimensionReq.getModelIds());
PageInfo<DimensionDO> dimensionDOPageInfo = PageHelper.startPage(pageDimensionReq.getCurrent(), PageInfo<DimensionDO> dimensionDOPageInfo = PageHelper.startPage(pageDimensionReq.getCurrent(),
pageDimensionReq.getPageSize()) pageDimensionReq.getPageSize())
.doSelectPageInfo(() -> queryDimension(dimensionFilter)); .doSelectPageInfo(() -> queryDimension(dimensionFilter));
PageInfo<DimensionResp> pageInfo = new PageInfo<>(); PageInfo<DimensionResp> pageInfo = new PageInfo<>();
BeanUtils.copyProperties(dimensionDOPageInfo, pageInfo); BeanUtils.copyProperties(dimensionDOPageInfo, pageInfo);
@@ -240,6 +241,22 @@ public class DimensionServiceImpl implements DimensionService {
BeanUtils.copyProperties(metaFilter, dimensionFilter); BeanUtils.copyProperties(metaFilter, dimensionFilter);
List<DimensionDO> dimensionDOS = dimensionRepository.getDimension(dimensionFilter); List<DimensionDO> dimensionDOS = dimensionRepository.getDimension(dimensionFilter);
List<DimensionResp> dimensionResps = convertList(dimensionDOS, modelService.getModelMap()); List<DimensionResp> dimensionResps = convertList(dimensionDOS, modelService.getModelMap());
List<Long> dimensionIds = dimensionResps.stream().map(dimensionResp -> dimensionResp.getId())
.collect(Collectors.toList());
List<TagItem> tagItems = tagMetaService.getTagItems(User.getFakeUser(), dimensionIds, TagDefineType.METRIC);
Map<Long, TagItem> itemIdToTagItem = tagItems.stream()
.collect(Collectors.toMap(tag -> tag.getItemId(), tag -> tag, (newTag, oldTag) -> newTag));
if (Objects.nonNull(itemIdToTagItem)) {
dimensionResps.stream().forEach(metricResp -> {
Long metricRespId = metricResp.getId();
if (itemIdToTagItem.containsKey(metricRespId)) {
metricResp.setIsTag(itemIdToTagItem.get(metricRespId).getIsTag());
}
});
}
if (!CollectionUtils.isEmpty(metaFilter.getFieldsDepend())) { if (!CollectionUtils.isEmpty(metaFilter.getFieldsDepend())) {
return filterByField(dimensionResps, metaFilter.getFieldsDepend()); return filterByField(dimensionResps, metaFilter.getFieldsDepend());
} }
@@ -282,7 +299,7 @@ public class DimensionServiceImpl implements DimensionService {
} }
private List<DimensionResp> convertList(List<DimensionDO> dimensionDOS, private List<DimensionResp> convertList(List<DimensionDO> dimensionDOS,
Map<Long, ModelResp> modelRespMap) { Map<Long, ModelResp> modelRespMap) {
List<DimensionResp> dimensionResps = Lists.newArrayList(); List<DimensionResp> dimensionResps = Lists.newArrayList();
if (!CollectionUtils.isEmpty(dimensionDOS)) { if (!CollectionUtils.isEmpty(dimensionDOS)) {
dimensionResps = dimensionDOS.stream() dimensionResps = dimensionDOS.stream()

View File

@@ -34,6 +34,7 @@ import com.tencent.supersonic.headless.api.pojo.response.DataSetResp;
import com.tencent.supersonic.headless.api.pojo.response.DimensionResp; import com.tencent.supersonic.headless.api.pojo.response.DimensionResp;
import com.tencent.supersonic.headless.api.pojo.response.MetricResp; import com.tencent.supersonic.headless.api.pojo.response.MetricResp;
import com.tencent.supersonic.headless.api.pojo.response.ModelResp; import com.tencent.supersonic.headless.api.pojo.response.ModelResp;
import com.tencent.supersonic.headless.api.pojo.response.TagItem;
import com.tencent.supersonic.headless.server.persistence.dataobject.CollectDO; import com.tencent.supersonic.headless.server.persistence.dataobject.CollectDO;
import com.tencent.supersonic.headless.server.persistence.dataobject.MetricDO; import com.tencent.supersonic.headless.server.persistence.dataobject.MetricDO;
import com.tencent.supersonic.headless.server.persistence.dataobject.MetricQueryDefaultConfigDO; import com.tencent.supersonic.headless.server.persistence.dataobject.MetricQueryDefaultConfigDO;
@@ -93,13 +94,13 @@ public class MetricServiceImpl implements MetricService {
private TagMetaService tagMetaService; private TagMetaService tagMetaService;
public MetricServiceImpl(MetricRepository metricRepository, public MetricServiceImpl(MetricRepository metricRepository,
ModelService modelService, ModelService modelService,
ChatGptHelper chatGptHelper, ChatGptHelper chatGptHelper,
CollectService collectService, CollectService collectService,
DataSetService dataSetService, DataSetService dataSetService,
ApplicationEventPublisher eventPublisher, ApplicationEventPublisher eventPublisher,
DimensionService dimensionService, DimensionService dimensionService,
TagMetaService tagMetaService) { TagMetaService tagMetaService) {
this.metricRepository = metricRepository; this.metricRepository = metricRepository;
this.modelService = modelService; this.modelService = modelService;
this.chatGptHelper = chatGptHelper; this.chatGptHelper = chatGptHelper;
@@ -220,7 +221,7 @@ public class MetricServiceImpl implements MetricService {
} }
} }
PageInfo<MetricDO> metricDOPageInfo = PageHelper.startPage(pageMetricReq.getCurrent(), PageInfo<MetricDO> metricDOPageInfo = PageHelper.startPage(pageMetricReq.getCurrent(),
pageMetricReq.getPageSize()) pageMetricReq.getPageSize())
.doSelectPageInfo(() -> queryMetric(metricFilter)); .doSelectPageInfo(() -> queryMetric(metricFilter));
PageInfo<MetricResp> pageInfo = new PageInfo<>(); PageInfo<MetricResp> pageInfo = new PageInfo<>();
BeanUtils.copyProperties(metricDOPageInfo, pageInfo); BeanUtils.copyProperties(metricDOPageInfo, pageInfo);
@@ -240,6 +241,20 @@ public class MetricServiceImpl implements MetricService {
MetricFilter metricFilter = new MetricFilter(); MetricFilter metricFilter = new MetricFilter();
BeanUtils.copyProperties(metaFilter, metricFilter); BeanUtils.copyProperties(metaFilter, metricFilter);
List<MetricResp> metricResps = convertList(queryMetric(metricFilter)); List<MetricResp> metricResps = convertList(queryMetric(metricFilter));
List<Long> metricIds = metricResps.stream().map(metricResp -> metricResp.getId()).collect(Collectors.toList());
List<TagItem> tagItems = tagMetaService.getTagItems(User.getFakeUser(), metricIds, TagDefineType.METRIC);
Map<Long, TagItem> itemIdToTagItem = tagItems.stream()
.collect(Collectors.toMap(tag -> tag.getItemId(), tag -> tag, (newTag, oldTag) -> newTag));
if (Objects.nonNull(itemIdToTagItem)) {
metricResps.stream().forEach(metricResp -> {
Long metricRespId = metricResp.getId();
if (itemIdToTagItem.containsKey(metricRespId)) {
metricResp.setIsTag(itemIdToTagItem.get(metricRespId).getIsTag());
}
});
}
if (!CollectionUtils.isEmpty(metaFilter.getFieldsDepend())) { if (!CollectionUtils.isEmpty(metaFilter.getFieldsDepend())) {
return filterByField(metricResps, metaFilter.getFieldsDepend()); return filterByField(metricResps, metaFilter.getFieldsDepend());
} }
@@ -254,6 +269,7 @@ public class MetricServiceImpl implements MetricService {
if (CollectionUtils.isEmpty(metricRespList)) { if (CollectionUtils.isEmpty(metricRespList)) {
return; return;
} }
TagFilter tagFilter = new TagFilter(); TagFilter tagFilter = new TagFilter();
tagFilter.setTagDefineType(TagDefineType.METRIC); tagFilter.setTagDefineType(TagDefineType.METRIC);
List<Long> metricIds = metricRespList.stream().map(metric -> metric.getId()) List<Long> metricIds = metricRespList.stream().map(metric -> metric.getId())
@@ -282,7 +298,7 @@ public class MetricServiceImpl implements MetricService {
} }
private boolean filterByField(List<MetricResp> metricResps, MetricResp metricResp, private boolean filterByField(List<MetricResp> metricResps, MetricResp metricResp,
List<String> fields, Set<MetricResp> metricRespFiltered) { List<String> fields, Set<MetricResp> metricRespFiltered) {
if (MetricDefineType.METRIC.equals(metricResp.getMetricDefineType())) { if (MetricDefineType.METRIC.equals(metricResp.getMetricDefineType())) {
List<Long> ids = metricResp.getMetricDefineByMetricParams().getMetrics() List<Long> ids = metricResp.getMetricDefineByMetricParams().getMetrics()
.stream().map(MetricParam::getId).collect(Collectors.toList()); .stream().map(MetricParam::getId).collect(Collectors.toList());
@@ -320,8 +336,8 @@ public class MetricServiceImpl implements MetricService {
metricFilter.setModelIds(Lists.newArrayList(modelId)); metricFilter.setModelIds(Lists.newArrayList(modelId));
List<MetricResp> metricResps = getMetrics(metricFilter); List<MetricResp> metricResps = getMetrics(metricFilter);
return metricResps.stream().filter(metricResp -> return metricResps.stream().filter(metricResp ->
MetricDefineType.FIELD.equals(metricResp.getMetricDefineType()) MetricDefineType.FIELD.equals(metricResp.getMetricDefineType())
|| MetricDefineType.MEASURE.equals(metricResp.getMetricDefineType())) || MetricDefineType.MEASURE.equals(metricResp.getMetricDefineType()))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@@ -391,7 +407,7 @@ public class MetricServiceImpl implements MetricService {
return new HashSet<>(); return new HashSet<>();
} }
return metricResps.stream().flatMap(metricResp -> return metricResps.stream().flatMap(metricResp ->
metricResp.getTags().stream()).collect(Collectors.toSet()); metricResp.getClassifications().stream()).collect(Collectors.toSet());
} }
@Override @Override
@@ -594,7 +610,7 @@ public class MetricServiceImpl implements MetricService {
} }
private Set<Long> getModelIds(Set<Long> modelIdsByDomainId, List<MetricResp> metricResps, private Set<Long> getModelIds(Set<Long> modelIdsByDomainId, List<MetricResp> metricResps,
List<DimensionResp> dimensionResps) { List<DimensionResp> dimensionResps) {
Set<Long> result = new HashSet<>(); Set<Long> result = new HashSet<>();
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(modelIdsByDomainId)) { if (org.apache.commons.collections.CollectionUtils.isNotEmpty(modelIdsByDomainId)) {
result.addAll(modelIdsByDomainId); result.addAll(modelIdsByDomainId);

View File

@@ -15,6 +15,7 @@ import com.tencent.supersonic.headless.api.pojo.response.DimensionResp;
import com.tencent.supersonic.headless.api.pojo.response.DomainResp; import com.tencent.supersonic.headless.api.pojo.response.DomainResp;
import com.tencent.supersonic.headless.api.pojo.response.MetricResp; import com.tencent.supersonic.headless.api.pojo.response.MetricResp;
import com.tencent.supersonic.headless.api.pojo.response.ModelResp; import com.tencent.supersonic.headless.api.pojo.response.ModelResp;
import com.tencent.supersonic.headless.api.pojo.response.TagItem;
import com.tencent.supersonic.headless.api.pojo.response.TagObjectResp; import com.tencent.supersonic.headless.api.pojo.response.TagObjectResp;
import com.tencent.supersonic.headless.api.pojo.response.TagResp; import com.tencent.supersonic.headless.api.pojo.response.TagResp;
import com.tencent.supersonic.headless.server.persistence.dataobject.CollectDO; import com.tencent.supersonic.headless.server.persistence.dataobject.CollectDO;
@@ -58,9 +59,9 @@ public class TagMetaServiceImpl implements TagMetaService {
private final DomainService domainService; private final DomainService domainService;
public TagMetaServiceImpl(TagRepository tagRepository, ModelService modelService, public TagMetaServiceImpl(TagRepository tagRepository, ModelService modelService,
CollectService collectService, @Lazy DimensionService dimensionService, CollectService collectService, @Lazy DimensionService dimensionService,
@Lazy MetricService metricService, TagObjectService tagObjectService, @Lazy MetricService metricService, TagObjectService tagObjectService,
DomainService domainService) { DomainService domainService) {
this.tagRepository = tagRepository; this.tagRepository = tagRepository;
this.modelService = modelService; this.modelService = modelService;
this.collectService = collectService; this.collectService = collectService;
@@ -155,10 +156,10 @@ public class TagMetaServiceImpl implements TagMetaService {
TagFilter tagFilter = new TagFilter(); TagFilter tagFilter = new TagFilter();
BeanUtils.copyProperties(tagMarketPageReq, tagFilter); BeanUtils.copyProperties(tagMarketPageReq, tagFilter);
List<CollectDO> collectList = collectService.getCollectList(user.getName()); List<CollectDO> collectList = collectService.getCollectList(user.getName());
List<Long> collectIds = collectList.stream()
.filter(collectDO -> SchemaElementType.TAG.name().equalsIgnoreCase(collectDO.getType()))
.map(CollectDO::getCollectId).collect(Collectors.toList());
if (tagMarketPageReq.isHasCollect()) { if (tagMarketPageReq.isHasCollect()) {
List<Long> collectIds = collectList.stream()
.filter(collectDO -> SchemaElementType.TAG.name().equalsIgnoreCase(collectDO.getType()))
.map(CollectDO::getCollectId).collect(Collectors.toList());
if (CollectionUtils.isEmpty(collectIds)) { if (CollectionUtils.isEmpty(collectIds)) {
tagFilter.setIds(Lists.newArrayList(-1L)); tagFilter.setIds(Lists.newArrayList(-1L));
} else { } else {
@@ -167,7 +168,7 @@ public class TagMetaServiceImpl implements TagMetaService {
} }
tagFilter.setModelIds(modelIds); tagFilter.setModelIds(modelIds);
PageInfo<TagResp> tagDOPageInfo = PageHelper.startPage(tagMarketPageReq.getCurrent(), PageInfo<TagResp> tagDOPageInfo = PageHelper.startPage(tagMarketPageReq.getCurrent(),
tagMarketPageReq.getPageSize()) tagMarketPageReq.getPageSize())
.doSelectPageInfo(() -> getTags(tagFilter)); .doSelectPageInfo(() -> getTags(tagFilter));
List<TagResp> tagRespList = tagDOPageInfo.getList(); List<TagResp> tagRespList = tagDOPageInfo.getList();
@@ -364,4 +365,19 @@ public class TagMetaServiceImpl implements TagMetaService {
tagDO.setType(tagReq.getTagDefineType().name()); tagDO.setType(tagReq.getTagDefineType().name());
return tagDO; return tagDO;
} }
public List<TagItem> getTagItems(User user, List<Long> itemIds, TagDefineType tagDefineType) {
TagFilter tagFilter = new TagFilter();
tagFilter.setTagDefineType(tagDefineType);
tagFilter.setItemIds(itemIds);
Set<Long> dimensionItemSet = getTagDOList(tagFilter, user).stream().map(TagDO::getItemId)
.collect(Collectors.toSet());
return itemIds.stream().map(entry -> {
TagItem tagItem = new TagItem();
tagItem.setIsTag(Boolean.compare(dimensionItemSet.contains(entry), false));
tagItem.setItemId(entry);
return tagItem;
}
).collect(Collectors.toList());
}
} }

View File

@@ -31,7 +31,7 @@ public class MetricConverter {
metricDO.setType(metricReq.getMetricType().name()); metricDO.setType(metricReq.getMetricType().name());
metricDO.setTypeParams(metricReq.getTypeParamsJson()); metricDO.setTypeParams(metricReq.getTypeParamsJson());
metricDO.setDataFormat(JSONObject.toJSONString(metricReq.getDataFormat())); metricDO.setDataFormat(JSONObject.toJSONString(metricReq.getDataFormat()));
metricDO.setTags(metricReq.getTag()); metricDO.setClassifications(metricReq.getClassifications());
metricDO.setRelateDimensions(JSONObject.toJSONString(metricReq.getRelateDimension())); metricDO.setRelateDimensions(JSONObject.toJSONString(metricReq.getRelateDimension()));
metricDO.setStatus(StatusEnum.ONLINE.getCode()); metricDO.setStatus(StatusEnum.ONLINE.getCode());
metricDO.setExt(JSONObject.toJSONString(metricReq.getExt())); metricDO.setExt(JSONObject.toJSONString(metricReq.getExt()));
@@ -48,8 +48,8 @@ public class MetricConverter {
if (metricReq.getRelateDimension() != null) { if (metricReq.getRelateDimension() != null) {
metricDO.setRelateDimensions(JSONObject.toJSONString(metricReq.getRelateDimension())); metricDO.setRelateDimensions(JSONObject.toJSONString(metricReq.getRelateDimension()));
} }
if (metricReq.getTag() != null) { if (metricReq.getClassifications() != null) {
metricDO.setTags(metricReq.getTag()); metricDO.setClassifications(metricReq.getClassifications());
} }
if (metricReq.getExt() != null) { if (metricReq.getExt() != null) {
metricDO.setExt(JSONObject.toJSONString(metricReq.getExt())); metricDO.setExt(JSONObject.toJSONString(metricReq.getExt()));
@@ -76,7 +76,7 @@ public class MetricConverter {
metricResp.setDomainId(modelResp.getDomainId()); metricResp.setDomainId(modelResp.getDomainId());
} }
metricResp.setIsCollect(collect != null && collect.contains(metricDO.getId())); metricResp.setIsCollect(collect != null && collect.contains(metricDO.getId()));
metricResp.setTag(metricDO.getTags()); metricResp.setClassifications(metricDO.getClassifications());
metricResp.setRelateDimension(JSONObject.parseObject(metricDO.getRelateDimensions(), metricResp.setRelateDimension(JSONObject.parseObject(metricDO.getRelateDimensions(),
RelateDimension.class)); RelateDimension.class));
if (metricDO.getExt() != null) { if (metricDO.getExt() != null) {

View File

@@ -19,7 +19,7 @@
<result column="data_format_type" jdbcType="VARCHAR" property="dataFormatType"/> <result column="data_format_type" jdbcType="VARCHAR" property="dataFormatType"/>
<result column="data_format" jdbcType="VARCHAR" property="dataFormat"/> <result column="data_format" jdbcType="VARCHAR" property="dataFormat"/>
<result column="alias" jdbcType="VARCHAR" property="alias"/> <result column="alias" jdbcType="VARCHAR" property="alias"/>
<result column="tags" jdbcType="VARCHAR" property="tags"/> <result column="classifications" jdbcType="VARCHAR" property="classifications"/>
<result column="define_type" jdbcType="VARCHAR" property="defineType"/> <result column="define_type" jdbcType="VARCHAR" property="defineType"/>
</resultMap> </resultMap>
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs"
@@ -60,7 +60,7 @@
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id id
, model_id, name, biz_name, description, status, sensitive_level, type, created_at, , model_id, name, biz_name, description, status, sensitive_level, type, created_at,
created_by, updated_at, updated_by, data_format_type, data_format, alias, tags, define_type created_by, updated_at, updated_by, data_format_type, data_format, alias, classifications, define_type
</sql> </sql>
<sql id="Blob_Column_List"> <sql id="Blob_Column_List">
type_params type_params
@@ -110,7 +110,7 @@
biz_name like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or biz_name like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or
description like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or description like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or
alias like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or alias like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or
tags like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or classifications like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or
created_by like CONCAT('%',#{key , jdbcType=VARCHAR},'%') ) created_by like CONCAT('%',#{key , jdbcType=VARCHAR},'%') )
</if> </if>
<if test="id != null"> <if test="id != null">

View File

@@ -1,5 +1,8 @@
package com.tencent.supersonic.headless.server.service; package com.tencent.supersonic.headless.server.service;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.common.pojo.DataFormat; import com.tencent.supersonic.common.pojo.DataFormat;
@@ -22,16 +25,12 @@ import com.tencent.supersonic.headless.server.persistence.repository.MetricRepos
import com.tencent.supersonic.headless.server.service.impl.DataSetServiceImpl; import com.tencent.supersonic.headless.server.service.impl.DataSetServiceImpl;
import com.tencent.supersonic.headless.server.service.impl.MetricServiceImpl; import com.tencent.supersonic.headless.server.service.impl.MetricServiceImpl;
import com.tencent.supersonic.headless.server.utils.MetricConverter; import com.tencent.supersonic.headless.server.utils.MetricConverter;
import java.util.HashMap;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.mockito.Mockito; import org.mockito.Mockito;
import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisher;
import java.util.HashMap;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
public class MetricServiceImplTest { public class MetricServiceImplTest {
@Test @Test
@@ -94,7 +93,7 @@ public class MetricServiceImplTest {
new MeasureParam("s2_uv", "department='hr'"))); new MeasureParam("s2_uv", "department='hr'")));
typeParams.setExpr("s2_pv/s2_uv"); typeParams.setExpr("s2_pv/s2_uv");
metricReq.setMetricDefineByMeasureParams(typeParams); metricReq.setMetricDefineByMeasureParams(typeParams);
metricReq.setTags(Lists.newArrayList("核心指标")); metricReq.setClassifications(Lists.newArrayList("核心指标"));
metricReq.setRelateDimension( metricReq.setRelateDimension(
RelateDimension.builder().drillDownDimensions(Lists.newArrayList( RelateDimension.builder().drillDownDimensions(Lists.newArrayList(
new DrillDownDimension(1L), new DrillDownDimension(1L),
@@ -125,7 +124,7 @@ public class MetricServiceImplTest {
new MeasureParam("s2_uv", "department='hr'"))); new MeasureParam("s2_uv", "department='hr'")));
typeParams.setExpr("s2_pv/s2_uv"); typeParams.setExpr("s2_pv/s2_uv");
metricResp.setMetricDefineByMeasureParams(typeParams); metricResp.setMetricDefineByMeasureParams(typeParams);
metricResp.setTags(Lists.newArrayList("核心指标")); metricResp.setClassifications("核心指标");
metricResp.setRelateDimension( metricResp.setRelateDimension(
RelateDimension.builder().drillDownDimensions(Lists.newArrayList( RelateDimension.builder().drillDownDimensions(Lists.newArrayList(
new DrillDownDimension(1L), new DrillDownDimension(1L),

View File

@@ -114,7 +114,7 @@ CREATE TABLE IF NOT EXISTS `s2_metric` (
`data_format_type` varchar(50) DEFAULT NULL , `data_format_type` varchar(50) DEFAULT NULL ,
`data_format` varchar(500) DEFAULT NULL, `data_format` varchar(500) DEFAULT NULL,
`alias` varchar(500) DEFAULT NULL, `alias` varchar(500) DEFAULT NULL,
`tags` varchar(500) DEFAULT NULL, `classifications` varchar(500) DEFAULT NULL,
`relate_dimensions` varchar(500) DEFAULT NULL, `relate_dimensions` varchar(500) DEFAULT NULL,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
); );

View File

@@ -411,7 +411,7 @@ public class ModelDemoDataLoader {
metricReq.setBizName("stay_hours"); metricReq.setBizName("stay_hours");
metricReq.setSensitiveLevel(SensitiveLevelEnum.HIGH.getCode()); metricReq.setSensitiveLevel(SensitiveLevelEnum.HIGH.getCode());
metricReq.setDescription("停留时长"); metricReq.setDescription("停留时长");
metricReq.setTags(Collections.singletonList("核心指标")); metricReq.setClassifications(Collections.singletonList("核心指标"));
metricReq.setAlias("访问时长"); metricReq.setAlias("访问时长");
MetricDefineByMeasureParams metricTypeParams = new MetricDefineByMeasureParams(); MetricDefineByMeasureParams metricTypeParams = new MetricDefineByMeasureParams();
metricTypeParams.setExpr("s2_stay_time_statis_stay_hours"); metricTypeParams.setExpr("s2_stay_time_statis_stay_hours");
@@ -476,7 +476,7 @@ public class ModelDemoDataLoader {
metricReq.setBizName("pv_avg"); metricReq.setBizName("pv_avg");
metricReq.setSensitiveLevel(SensitiveLevelEnum.HIGH.getCode()); metricReq.setSensitiveLevel(SensitiveLevelEnum.HIGH.getCode());
metricReq.setDescription("每个用户平均访问的次数"); metricReq.setDescription("每个用户平均访问的次数");
metricReq.setTags(Collections.singletonList("核心指标")); metricReq.setClassifications(Collections.singletonList("核心指标"));
metricReq.setAlias("平均访问次数"); metricReq.setAlias("平均访问次数");
MetricDefineByMetricParams metricTypeParams = new MetricDefineByMetricParams(); MetricDefineByMetricParams metricTypeParams = new MetricDefineByMetricParams();
metricTypeParams.setExpr("pv/uv"); metricTypeParams.setExpr("pv/uv");

View File

@@ -286,3 +286,6 @@ CREATE TABLE IF NOT EXISTS `s2_query_rule` (
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
); );
COMMENT ON TABLE s2_query_rule IS 'tag query rule table'; COMMENT ON TABLE s2_query_rule IS 'tag query rule table';
--20240325
ALTER TABLE s2_metric RENAME COLUMN tags TO classifications;

View File

@@ -186,7 +186,7 @@ CREATE TABLE IF NOT EXISTS `s2_metric` (
`data_format_type` varchar(50) DEFAULT NULL , `data_format_type` varchar(50) DEFAULT NULL ,
`data_format` varchar(500) DEFAULT NULL, `data_format` varchar(500) DEFAULT NULL,
`alias` varchar(500) DEFAULT NULL, `alias` varchar(500) DEFAULT NULL,
`tags` varchar(500) DEFAULT NULL, `classifications` varchar(500) DEFAULT NULL,
`relate_dimensions` varchar(500) DEFAULT NULL, `relate_dimensions` varchar(500) DEFAULT NULL,
`ext` LONGVARCHAR DEFAULT NULL , `ext` LONGVARCHAR DEFAULT NULL ,
`define_type` varchar(50) NOT NULL, -- MEASURE, FIELD, METRIC `define_type` varchar(50) NOT NULL, -- MEASURE, FIELD, METRIC

View File

@@ -291,7 +291,7 @@ CREATE TABLE `s2_metric`
`data_format_type` varchar(50) DEFAULT NULL COMMENT '数值类型', `data_format_type` varchar(50) DEFAULT NULL COMMENT '数值类型',
`data_format` varchar(500) DEFAULT NULL COMMENT '数值类型参数', `data_format` varchar(500) DEFAULT NULL COMMENT '数值类型参数',
`alias` varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, `alias` varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`tags` varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, `classifications` varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`relate_dimensions` varchar(500) DEFAULT NULL COMMENT '指标相关维度', `relate_dimensions` varchar(500) DEFAULT NULL COMMENT '指标相关维度',
`ext` text DEFAULT NULL, `ext` text DEFAULT NULL,
`define_type` varchar(50) DEFAULT NULL, -- MEASURE, FIELD, METRIC `define_type` varchar(50) DEFAULT NULL, -- MEASURE, FIELD, METRIC

View File

@@ -186,7 +186,7 @@ CREATE TABLE IF NOT EXISTS `s2_metric` (
`data_format_type` varchar(50) DEFAULT NULL , `data_format_type` varchar(50) DEFAULT NULL ,
`data_format` varchar(500) DEFAULT NULL, `data_format` varchar(500) DEFAULT NULL,
`alias` varchar(500) DEFAULT NULL, `alias` varchar(500) DEFAULT NULL,
`tags` varchar(500) DEFAULT NULL, `classifications` varchar(500) DEFAULT NULL,
`relate_dimensions` varchar(500) DEFAULT NULL, `relate_dimensions` varchar(500) DEFAULT NULL,
`ext` LONGVARCHAR DEFAULT NULL , `ext` LONGVARCHAR DEFAULT NULL ,
`define_type` varchar(50) NOT NULL, -- MEASURE, FIELD, METRIC `define_type` varchar(50) NOT NULL, -- MEASURE, FIELD, METRIC