diff --git a/common/src/main/java/com/tencent/supersonic/common/pojo/enums/TypeEnums.java b/common/src/main/java/com/tencent/supersonic/common/pojo/enums/TypeEnums.java index 40b3d84ca..dacdfb09e 100644 --- a/common/src/main/java/com/tencent/supersonic/common/pojo/enums/TypeEnums.java +++ b/common/src/main/java/com/tencent/supersonic/common/pojo/enums/TypeEnums.java @@ -4,6 +4,7 @@ public enum TypeEnums { METRIC, DIMENSION, + TAG, DOMAIN, ENTITY, VIEW, diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/TagResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/TagResp.java index 6857330fa..ccc30c78d 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/TagResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/TagResp.java @@ -16,6 +16,10 @@ public class TagResp extends SchemaItem { private String type; + private Boolean isCollect; + + private boolean hasAdminRes; + private Map ext = new HashMap<>(); private TagDefineType tagDefineType = TagDefineType.FIELD; diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/TagFilterPage.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/TagFilterPage.java new file mode 100644 index 000000000..bb1dbb1b4 --- /dev/null +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/TagFilterPage.java @@ -0,0 +1,11 @@ +package com.tencent.supersonic.headless.server.pojo; + + +import com.tencent.supersonic.headless.api.pojo.request.PageSchemaItemReq; + +import java.util.List; + +public class TagFilterPage extends PageSchemaItemReq { + private String type; + private List statusList; +} \ No newline at end of file diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TagController.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TagController.java index 58ff57fb2..e9c7b0947 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TagController.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TagController.java @@ -1,9 +1,11 @@ package com.tencent.supersonic.headless.server.rest; +import com.github.pagehelper.PageInfo; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.auth.api.authentication.utils.UserHolder; import com.tencent.supersonic.headless.api.pojo.request.TagReq; import com.tencent.supersonic.headless.api.pojo.response.TagResp; +import com.tencent.supersonic.headless.server.pojo.TagFilterPage; import com.tencent.supersonic.headless.server.service.TagService; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -53,7 +55,15 @@ public class TagController { public TagResp getTag(@PathVariable("id") Long id, HttpServletRequest request, HttpServletResponse response) { - return tagService.getMetric(id); + return tagService.getTag(id); + } + + @PostMapping("/queryTag") + public PageInfo queryPage(@RequestBody TagFilterPage tagFilterPage, + HttpServletRequest request, + HttpServletResponse response) throws Exception { + User user = UserHolder.findUser(request, response); + return tagService.queryPage(tagFilterPage, user); } } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/TagService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/TagService.java index 7ff9f86e8..8c5956d86 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/TagService.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/TagService.java @@ -1,9 +1,12 @@ package com.tencent.supersonic.headless.server.service; +import com.github.pagehelper.PageInfo; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.headless.api.pojo.request.TagReq; import com.tencent.supersonic.headless.api.pojo.response.TagResp; import com.tencent.supersonic.headless.server.pojo.TagFilter; +import com.tencent.supersonic.headless.server.pojo.TagFilterPage; + import java.util.List; public interface TagService { @@ -14,7 +17,9 @@ public interface TagService { void delete(Long id, User user) throws Exception; - TagResp getMetric(Long id); + TagResp getTag(Long id); List query(TagFilter tagFilter); + + PageInfo queryPage(TagFilterPage tagFilterPage, User user); } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagServiceImpl.java index 0cc41fc92..9d7f3333d 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagServiceImpl.java @@ -1,25 +1,38 @@ package com.tencent.supersonic.headless.server.service.impl; import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.google.common.collect.Lists; import com.tencent.supersonic.auth.api.authentication.pojo.User; +import com.tencent.supersonic.common.pojo.enums.AuthType; import com.tencent.supersonic.common.pojo.enums.StatusEnum; +import com.tencent.supersonic.common.pojo.enums.TypeEnums; import com.tencent.supersonic.common.pojo.exception.InvalidArgumentException; 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.TagReq; +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.TagDO; import com.tencent.supersonic.headless.server.persistence.repository.TagRepository; import com.tencent.supersonic.headless.server.pojo.TagFilter; +import com.tencent.supersonic.headless.server.pojo.TagFilterPage; +import com.tencent.supersonic.headless.server.service.CollectService; +import com.tencent.supersonic.headless.server.service.ModelService; import com.tencent.supersonic.headless.server.service.TagService; import com.tencent.supersonic.headless.server.utils.NameCheckUtils; + import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; + import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -31,9 +44,14 @@ import org.springframework.stereotype.Service; public class TagServiceImpl implements TagService { private final TagRepository tagRepository; + private final ModelService modelService; + private final CollectService collectService; - public TagServiceImpl(TagRepository tagRepository) { + public TagServiceImpl(TagRepository tagRepository, ModelService modelService, + CollectService collectService) { this.tagRepository = tagRepository; + this.modelService = modelService; + this.collectService = collectService; } @Override @@ -85,7 +103,7 @@ public class TagServiceImpl implements TagService { } @Override - public TagResp getMetric(Long id) { + public TagResp getTag(Long id) { return convert(tagRepository.getTagById(id)); } @@ -98,10 +116,73 @@ public class TagServiceImpl implements TagService { return new ArrayList<>(); } + @Override + public PageInfo queryPage(TagFilterPage tagFilterPage, User user) { + TagFilter tagFilter = new TagFilter(); + BeanUtils.copyProperties(tagFilterPage, tagFilter); + List modelRespList = modelService.getAllModelByDomainIds(tagFilterPage.getDomainIds()); + List modelIds = modelRespList.stream().map(ModelResp::getId).collect(Collectors.toList()); + tagFilterPage.getModelIds().addAll(modelIds); + tagFilter.setModelIds(tagFilterPage.getModelIds()); + + List collectList = collectService.getCollectList(user.getName()) + .stream().filter(collectDO -> TypeEnums.TAG.name().equalsIgnoreCase(collectDO.getType())) + .collect(Collectors.toList()); + List collectIds = collectList.stream().map(CollectDO::getCollectId).collect(Collectors.toList()); + if (tagFilterPage.isHasCollect()) { + if (CollectionUtils.isEmpty(collectIds)) { + tagFilter.setIds(Lists.newArrayList(-1L)); + } else { + tagFilter.setIds(collectIds); + } + } + + PageInfo tagDOPageInfo = PageHelper.startPage(tagFilterPage.getCurrent(), + tagFilterPage.getPageSize()) + .doSelectPageInfo(() -> query(tagFilter)); + PageInfo pageInfo = new PageInfo<>(); + BeanUtils.copyProperties(tagDOPageInfo, pageInfo); + List tagRespList = convertList(tagDOPageInfo.getList(), collectIds); + fillAdminRes(tagRespList, user); + pageInfo.setList(tagRespList); + + return pageInfo; + } + + private void fillAdminRes(List tagRespList, User user) { + List modelRespList = modelService.getModelListWithAuth(user, null, AuthType.ADMIN); + if (CollectionUtils.isEmpty(modelRespList)) { + return; + } + Set modelIdSet = modelRespList.stream().map(ModelResp::getId).collect(Collectors.toSet()); + for (TagResp tagResp : tagRespList) { + if (modelIdSet.contains(tagResp.getModelId())) { + tagResp.setHasAdminRes(true); + } else { + tagResp.setHasAdminRes(false); + } + } + } + + private List convertList(List tagDOList, List collectIds) { + List tagRespList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(tagDOList)) { + tagDOList.stream().forEach(tagDO -> { + TagResp tagResp = convert(tagDO); + if (CollectionUtils.isNotEmpty(collectIds) && collectIds.contains(tagDO.getId())) { + tagResp.setIsCollect(true); + } else { + tagResp.setIsCollect(false); + } + tagRespList.add(tagResp); + }); + } + return tagRespList; + } + private void checkExit(TagReq tagReq) { TagFilter tagFilter = new TagFilter(); tagFilter.setModelIds(Arrays.asList(tagReq.getModelId())); - //tagFilter.setStatusList(Arrays.asList(StatusEnum.ONLINE.getCode(),StatusEnum.OFFLINE.getCode())); List tagResps = query(tagFilter); if (!CollectionUtils.isEmpty(tagResps)) { Long bizNameSameCount = tagResps.stream().filter(tagResp -> !tagResp.getId().equals(tagReq.getId())) diff --git a/headless/server/src/main/resources/mapper/custom/TagCustomMapper.xml b/headless/server/src/main/resources/mapper/custom/TagCustomMapper.xml index 339aefbb7..f18d8d90d 100644 --- a/headless/server/src/main/resources/mapper/custom/TagCustomMapper.xml +++ b/headless/server/src/main/resources/mapper/custom/TagCustomMapper.xml @@ -71,7 +71,7 @@ and ( id like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or name like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or biz_name like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or - description like CONCAT('%',#{key , jdbcType=VARCHAR},'%') + description like CONCAT('%',#{key , jdbcType=VARCHAR},'%')) and id like CONCAT('%',#{id , jdbcType=VARCHAR},'%')