Tag market (#835)

This commit is contained in:
daikon
2024-03-20 11:35:47 +08:00
committed by GitHub
parent 6a403c6179
commit 69a76ffc04
14 changed files with 81 additions and 101 deletions

View File

@@ -56,6 +56,7 @@ public class TagRepositoryImpl implements TagRepository {
@Override
public void deleteBatch(TagDeleteReq tagDeleteReq) {
tagCustomMapper.deleteBatch(tagDeleteReq.getItemIds(), tagDeleteReq.getIds(), tagDeleteReq.getType().name());
tagCustomMapper.deleteBatch(tagDeleteReq.getItemIds(), tagDeleteReq.getIds(),
tagDeleteReq.getTagDefineType().name());
}
}

View File

@@ -86,7 +86,7 @@ public class TagObjectController {
* @return
* @throws Exception
*/
@PostMapping("/query/tagObject")
@PostMapping("/query")
public List<TagObjectResp> queryTagObject(@RequestBody TagObjectFilter filter,
HttpServletRequest request,
HttpServletResponse response) throws Exception {

View File

@@ -27,8 +27,8 @@ 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.ModelResp;
import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
import com.tencent.supersonic.headless.api.pojo.response.TagResp;
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.repository.DimensionRepository;
import com.tencent.supersonic.headless.server.pojo.DimensionFilter;
import com.tencent.supersonic.headless.server.pojo.DimensionsFilter;
@@ -300,14 +300,18 @@ public class DimensionServiceImpl implements DimensionService {
}
TagFilter tagFilter = new TagFilter();
tagFilter.setTagDefineType(TagDefineType.DIMENSION);
Map<String, TagResp> keyAndTagMap = tagMetaService.getTags(tagFilter).stream()
.collect(Collectors.toMap(tag -> tag.getModelId() + "_" + tag.getBizName(), tag -> tag,
List<Long> dimensionIds = dimensionResps.stream().map(dimension -> dimension.getId())
.collect(Collectors.toList());
tagFilter.setItemIds(dimensionIds);
Map<Long, TagDO> keyAndTagMap = tagMetaService.getTagDOList(tagFilter, User.getFakeUser()).stream()
.collect(Collectors.toMap(tag -> tag.getItemId(), tag -> tag,
(newTag, oldTag) -> newTag));
if (Objects.nonNull(keyAndTagMap)) {
dimensionResps.stream().forEach(dim -> {
String key = dim.getModelId() + "_" + dim.getBizName();
if (keyAndTagMap.containsKey(key)) {
if (keyAndTagMap.containsKey(dim.getId())) {
dim.setIsTag(1);
} else {
dim.setIsTag(0);
}
});
}

View File

@@ -34,10 +34,10 @@ 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.MetricResp;
import com.tencent.supersonic.headless.api.pojo.response.ModelResp;
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.MetricDO;
import com.tencent.supersonic.headless.server.persistence.dataobject.MetricQueryDefaultConfigDO;
import com.tencent.supersonic.headless.server.persistence.dataobject.TagDO;
import com.tencent.supersonic.headless.server.persistence.repository.MetricRepository;
import com.tencent.supersonic.headless.server.pojo.DimensionsFilter;
import com.tencent.supersonic.headless.server.pojo.MetaFilter;
@@ -256,13 +256,18 @@ public class MetricServiceImpl implements MetricService {
}
TagFilter tagFilter = new TagFilter();
tagFilter.setTagDefineType(TagDefineType.METRIC);
Map<String, TagResp> keyAndTagMap = tagMetaService.getTags(tagFilter).stream()
.collect(Collectors.toMap(tag -> tag.getModelId() + "_" + tag.getBizName(), tag -> tag));
List<Long> metricIds = metricRespList.stream().map(metric -> metric.getId())
.collect(Collectors.toList());
tagFilter.setItemIds(metricIds);
Map<Long, TagDO> keyAndTagMap = tagMetaService.getTagDOList(tagFilter, User.getFakeUser()).stream()
.collect(Collectors.toMap(tag -> tag.getItemId(), tag -> tag,
(newTag, oldTag) -> newTag));
if (Objects.nonNull(keyAndTagMap)) {
metricRespList.stream().forEach(metric -> {
String key = metric.getModelId() + "_" + metric.getBizName();
if (keyAndTagMap.containsKey(key)) {
if (keyAndTagMap.containsKey(metric.getId())) {
metric.setIsTag(1);
} else {
metric.setIsTag(0);
}
});
}

View File

@@ -5,9 +5,7 @@ import com.github.pagehelper.PageInfo;
import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.common.pojo.enums.AuthType;
import com.tencent.supersonic.common.pojo.enums.TypeEnums;
import com.tencent.supersonic.headless.api.pojo.TagDefineParams;
import com.tencent.supersonic.headless.api.pojo.enums.TagDefineType;
import com.tencent.supersonic.headless.api.pojo.request.TagBatchCreateReq;
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.TagReq;
@@ -112,10 +110,9 @@ public class TagMetaServiceImpl implements TagMetaService {
List<TagResp> tagRespList = Arrays.asList(tagResp);
fillModelInfo(tagRespList);
fillDomainInfo(tagRespList);
tagResp = tagRespList.get(0);
tagResp = fillTagObjectInfo(tagResp, user);
tagResp = fillCollectAndAdminInfo(tagResp, user);
return tagResp;
fillTagObjectInfo(tagRespList, user);
fillCollectAndAdminInfo(tagRespList, user);
return tagRespList.get(0);
}
@Override
@@ -151,6 +148,8 @@ public class TagMetaServiceImpl implements TagMetaService {
fillModelInfo(tagRespList);
fillDomainInfo(tagRespList);
fillTagObjectInfo(tagRespList, user);
fillCollectAndAdminInfo(tagRespList, user);
tagDOPageInfo.setList(tagRespList);
return tagDOPageInfo;
}
@@ -240,51 +239,6 @@ public class TagMetaServiceImpl implements TagMetaService {
return modelRespList;
}
private int loadMetricTagBatch(TagBatchCreateReq tagLoadReq, List<MetricResp> metrics, User user) {
if (!CollectionUtils.isEmpty(tagLoadReq.getItemIds())) {
metrics = metrics.stream().filter(metric -> tagLoadReq.getItemIds().contains(metric.getId()))
.collect(Collectors.toList());
}
metrics.parallelStream().forEach(metric -> {
TagReq tagReq = new TagReq();
BeanUtils.copyProperties(metric, tagReq);
tagReq.setId(null);
tagReq.setTagDefineType(TagDefineType.METRIC);
TagDefineParams tagDefineParams = new TagDefineParams();
tagDefineParams.setExpr(metric.getBizName());
tagDefineParams.setDependencies(new ArrayList<>(Arrays.asList(metric.getId())));
try {
create(tagReq, user);
} catch (Exception e) {
log.info("loadMetricTagBatch, e:{}", e.getMessage());
}
});
return metrics.size();
}
private Integer loadDimTagBatch(TagBatchCreateReq tagLoadReq, List<DimensionResp> dimensions, User user) {
if (!CollectionUtils.isEmpty(tagLoadReq.getItemIds())) {
dimensions = dimensions.stream().filter(dim -> tagLoadReq.getItemIds().contains(dim.getId()))
.collect(Collectors.toList());
}
dimensions.parallelStream().forEach(dim -> {
TagReq tagReq = new TagReq();
BeanUtils.copyProperties(dim, tagReq);
tagReq.setId(null);
tagReq.setTagDefineType(TagDefineType.DIMENSION);
TagDefineParams tagDefineParams = new TagDefineParams();
tagDefineParams.setExpr(dim.getBizName());
tagDefineParams.setDependencies(new ArrayList<>(Arrays.asList(dim.getId())));
try {
create(tagReq, user);
} catch (Exception e) {
log.info("loadDimTagBatch, e:{}", e.getMessage());
}
});
return dimensions.size();
}
private void fillModelInfo(List<TagResp> tagRespList) {
Map<Long, ModelResp> modelIdAndRespMap = modelService.getModelMap();
tagRespList.stream().forEach(tagResp -> {
@@ -310,6 +264,23 @@ public class TagMetaServiceImpl implements TagMetaService {
return tagRespList.get(0);
}
private TagResp fillCollectAndAdminInfo(List<TagResp> tagRespList, User user) {
List<Long> collectIds = collectService.getCollectList(user.getName())
.stream().filter(collectDO -> TypeEnums.TAG.name().equalsIgnoreCase(collectDO.getType()))
.map(CollectDO::getCollectId).collect(Collectors.toList());
tagRespList.stream().forEach(tagResp -> {
if (CollectionUtils.isNotEmpty(collectIds) && collectIds.contains(tagResp.getId())) {
tagResp.setIsCollect(true);
} else {
tagResp.setIsCollect(false);
}
});
fillAdminRes(tagRespList, user);
return tagRespList.get(0);
}
private void fillAdminRes(List<TagResp> tagRespList, User user) {
List<ModelResp> modelRespList = modelService.getModelListWithAuth(user, null, AuthType.ADMIN);
if (CollectionUtils.isEmpty(modelRespList)) {
@@ -317,7 +288,7 @@ public class TagMetaServiceImpl implements TagMetaService {
}
Set<Long> modelIdSet = modelRespList.stream().map(ModelResp::getId).collect(Collectors.toSet());
for (TagResp tagResp : tagRespList) {
if (modelIdSet.contains(tagResp.getModelId())) {
if (modelIdSet.contains(tagResp.getModelId()) || tagResp.getCreatedBy().equalsIgnoreCase(user.getName())) {
tagResp.setHasAdminRes(true);
} else {
tagResp.setHasAdminRes(false);
@@ -334,7 +305,7 @@ public class TagMetaServiceImpl implements TagMetaService {
List<TagDO> tagRespList = tagRepository.getTagDOList(tagFilter);
if (!CollectionUtils.isEmpty(tagRespList)) {
throw new RuntimeException(String.format("the tag is exit, itemId:{}", tagReq.getItemId()));
throw new RuntimeException(String.format("the tag is exit, itemId:%s", tagReq.getItemId()));
}
}
@@ -343,7 +314,7 @@ public class TagMetaServiceImpl implements TagMetaService {
DimensionResp dimension = dimensionService.getDimension(tagReq.getItemId());
ModelResp model = modelService.getModel(dimension.getModelId());
if (Objects.isNull(model.getTagObjectId())) {
throw new RuntimeException(String.format("this dimension:{} is not supported to create tag",
throw new RuntimeException(String.format("this dimension:%s is not supported to create tag",
tagReq.getItemId()));
}
}
@@ -351,7 +322,7 @@ public class TagMetaServiceImpl implements TagMetaService {
MetricResp metric = metricService.getMetric(tagReq.getItemId());
ModelResp model = modelService.getModel(metric.getModelId());
if (Objects.isNull(model.getTagObjectId())) {
throw new RuntimeException(String.format("this metric:{} is not supported to create tag",
throw new RuntimeException(String.format("this metric:%s is not supported to create tag",
tagReq.getItemId()));
}
}

View File

@@ -37,7 +37,6 @@ public class TagObjectServiceImpl implements TagObjectService {
tagObjectDO.setUpdatedBy(user.getName());
tagObjectDO.setUpdatedAt(date);
tagObjectDO.setStatus(StatusEnum.ONLINE.getCode());
tagObjectRepository.create(tagObjectDO).longValue();
TagObjectDO tagObjectById = tagObjectRepository.getTagObjectById(tagObjectDO.getId());
return TagObjectConverter.convert2Resp(tagObjectById);

View File

@@ -52,14 +52,14 @@
<select id="queryTagRespList" resultMap="TagResp">
select * from (
select s2_tag.id as id, s2_dimension.model_id as model_id, 'DIMENSION' as type, s2_dimension.id as item_id,
s2_dimension.name as name, s2_dimension.biz_name as biz_name, s2_dimension.description as description, s2_tag.updated_at as updated_at
select s2_tag.* , s2_dimension.model_id as model_id,
s2_dimension.name as name, s2_dimension.biz_name as biz_name, s2_dimension.description as description
from s2_tag join s2_dimension
on s2_tag.item_id = s2_dimension.id
where s2_dimension.status=1 and s2_tag.type='DIMENSION'
union
select s2_tag.id as id, s2_metric.model_id as model_id, 'METRIC' as type, s2_metric.id as item_id,
s2_metric.name as name, s2_metric.biz_name as biz_name, s2_metric.description as description, s2_tag.updated_at as updated_at
select s2_tag.*, s2_metric.model_id as model_id,
s2_metric.name as name, s2_metric.biz_name as biz_name, s2_metric.description as description
from s2_tag join s2_metric
on s2_tag.item_id = s2_metric.id
where s2_metric.status=1 and s2_tag.type='METRIC'