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/core/src/main/java/com/tencent/supersonic/headless/core/file/FileHandlerImpl.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/file/FileHandlerImpl.java index c22573671..a25ce17fa 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/file/FileHandlerImpl.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/file/FileHandlerImpl.java @@ -3,6 +3,8 @@ package com.tencent.supersonic.headless.core.file; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; + +import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -17,9 +19,9 @@ import java.util.List; @Slf4j @Component public class FileHandlerImpl implements FileHandler { + public static final String FILE_SPILT = File.separator; private final LocalFileConfig localFileConfig; - public FileHandlerImpl(LocalFileConfig localFileConfig) { this.localFileConfig = localFileConfig; } @@ -31,8 +33,8 @@ public class FileHandlerImpl implements FileHandler { createDir(dictDirectoryBackup); } - String source = localFileConfig.getDictDirectoryLatest() + "/" + fileName; - String target = dictDirectoryBackup + "/" + fileName; + String source = localFileConfig.getDictDirectoryLatest() + FILE_SPILT + fileName; + String target = dictDirectoryBackup + FILE_SPILT + fileName; Path sourcePath = Paths.get(source); Path targetPath = Paths.get(target); try { @@ -88,7 +90,7 @@ public class FileHandlerImpl implements FileHandler { if (!existPath(dictDirectoryLatest)) { createDir(dictDirectoryLatest); } - String filePath = dictDirectoryLatest + "/" + fileName; + String filePath = dictDirectoryLatest + FILE_SPILT + fileName; if (existPath(filePath)) { backupFile(fileName); } @@ -117,7 +119,7 @@ public class FileHandlerImpl implements FileHandler { @Override public Boolean deleteDictFile(String fileName) { backupFile(fileName); - deleteFile(localFileConfig.getDictDirectoryLatest() + "/" + fileName); + deleteFile(localFileConfig.getDictDirectoryLatest() + FILE_SPILT + fileName); return true; } diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/file/LocalFileConfig.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/file/LocalFileConfig.java index 6e2c8b4ba..7dc232e3d 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/file/LocalFileConfig.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/file/LocalFileConfig.java @@ -1,10 +1,13 @@ package com.tencent.supersonic.headless.core.file; +import com.tencent.supersonic.headless.core.knowledge.helper.HanlpHelper; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; +import java.io.FileNotFoundException; + @Data @Configuration @Slf4j @@ -18,16 +21,21 @@ public class LocalFileConfig { private String dictDirectoryBackup; public String getDictDirectoryLatest() { - return getResourceDir() + dictDirectoryLatest; + return getDictDirectoryPrefixDir() + dictDirectoryLatest; } public String getDictDirectoryBackup() { - return getResourceDir() + dictDirectoryBackup; + return getDictDirectoryPrefixDir() + dictDirectoryBackup; } - private String getResourceDir() { - //return hanlpPropertiesPath = HanlpHelper.getHanlpPropertiesPath(); - return ClassLoader.getSystemClassLoader().getResource("").getPath(); + private String getDictDirectoryPrefixDir() { + try { + return HanlpHelper.getHanlpPropertiesPath(); + } catch (FileNotFoundException e) { + log.warn("getDictDirectoryPrefixDir error: " + e); + e.printStackTrace(); + } + return ""; } } \ No newline at end of file diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SysTimeDimensionBuilder.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SysTimeDimensionBuilder.java index 311f3e124..e86298418 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SysTimeDimensionBuilder.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SysTimeDimensionBuilder.java @@ -16,7 +16,7 @@ import java.util.List; public class SysTimeDimensionBuilder { public static void addSysTimeDimension(List dims, DbAdaptor engineAdaptor) { - log.info("addSysTimeDimension before:{}, engineAdaptor:{}", dims, engineAdaptor); + log.debug("addSysTimeDimension before:{}, engineAdaptor:{}", dims, engineAdaptor); Dim timeDim = getTimeDim(dims); if (timeDim == null) { timeDim = Dim.getDefault(); 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 4388b1c63..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; @@ -56,4 +58,12 @@ public class TagController { 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 5724530e9..422e07472 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,11 @@ 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 { @@ -17,4 +19,7 @@ public interface TagService { 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 7babbb66b..67d82f508 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,16 +1,27 @@ 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; @@ -19,6 +30,7 @@ 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; @@ -31,9 +43,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 @@ -98,10 +115,74 @@ 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},'%') diff --git a/launchers/standalone/src/test/java/com/tencent/supersonic/chat/plugin/PluginRecognizeTest.java b/launchers/standalone/src/test/java/com/tencent/supersonic/chat/plugin/PluginRecognizeTest.java index 66c29febb..055d40e42 100644 --- a/launchers/standalone/src/test/java/com/tencent/supersonic/chat/plugin/PluginRecognizeTest.java +++ b/launchers/standalone/src/test/java/com/tencent/supersonic/chat/plugin/PluginRecognizeTest.java @@ -57,7 +57,7 @@ public class PluginRecognizeTest extends BasePluginTest { QueryFilter queryFilter = new QueryFilter(); queryFilter.setElementID(2L); queryFilter.setValue("alice"); - queryRequest.setModelId(1L); + // queryRequest.setModelId(1L); queryFilters.getFilters().add(queryFilter); queryRequest.setQueryFilters(queryFilters); diff --git a/launchers/standalone/src/test/resources/db/schema-h2.sql b/launchers/standalone/src/test/resources/db/schema-h2.sql index 973d55d21..e12dd1d64 100644 --- a/launchers/standalone/src/test/resources/db/schema-h2.sql +++ b/launchers/standalone/src/test/resources/db/schema-h2.sql @@ -529,4 +529,24 @@ CREATE TABLE IF NOT EXISTS `s2_view` ( query_config VARCHAR(3000), `admin` varchar(3000) DEFAULT NULL, `admin_org` varchar(3000) DEFAULT NULL -); \ No newline at end of file +); + +CREATE TABLE IF NOT EXISTS `s2_tag` ( + `id` INT NOT NULL AUTO_INCREMENT, + `model_id` INT NOT NULL , + `name` varchar(255) NOT NULL , + `biz_name` varchar(255) NOT NULL , + `description` varchar(500) DEFAULT NULL , + `status` INT NOT NULL , + `sensitive_level` INT NOT NULL , + `type` varchar(50) NOT NULL , -- ATOMIC, DERIVED + `define_type` varchar(50) NOT NULL, -- FIELD, DIMENSION + `type_params` LONGVARCHAR DEFAULT NULL , + `created_at` TIMESTAMP NOT NULL , + `created_by` varchar(100) NOT NULL , + `updated_at` TIMESTAMP DEFAULT NULL , + `updated_by` varchar(100) DEFAULT NULL , + `ext` LONGVARCHAR DEFAULT NULL , + PRIMARY KEY (`id`) + ); +COMMENT ON TABLE s2_tag IS 'tag information'; \ No newline at end of file