diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/LocalSemanticInterpreter.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/LocalSemanticInterpreter.java index d6989d091..dec5c7c71 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/LocalSemanticInterpreter.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/LocalSemanticInterpreter.java @@ -14,6 +14,7 @@ import com.tencent.supersonic.headless.api.pojo.request.ViewFilterReq; 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.ExplainResp; +import com.tencent.supersonic.headless.api.pojo.response.ItemResp; import com.tencent.supersonic.headless.api.pojo.response.MetricResp; import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.api.pojo.response.ViewResp; @@ -104,4 +105,9 @@ public class LocalSemanticInterpreter extends BaseSemanticInterpreter { return metricService.queryMetric(pageMetricReq, user); } + @Override + public List getDomainViewTree() { + return schemaService.getDomainViewTree(); + } + } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/RemoteSemanticInterpreter.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/RemoteSemanticInterpreter.java index 79f251cd5..993d4b27e 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/RemoteSemanticInterpreter.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/RemoteSemanticInterpreter.java @@ -21,6 +21,7 @@ import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq; 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.ExplainResp; +import com.tencent.supersonic.headless.api.pojo.response.ItemResp; import com.tencent.supersonic.headless.api.pojo.response.MetricResp; import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.api.pojo.response.ViewResp; @@ -253,8 +254,14 @@ public class RemoteSemanticInterpreter extends BaseSemanticInterpreter { return null; } + @Override + public List getDomainViewTree() { + return null; + } + @Override public List getViewList(Long domainId) { return null; } + } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/SemanticInterpreter.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/SemanticInterpreter.java index 93fe476cd..4e210622d 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/SemanticInterpreter.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/SemanticInterpreter.java @@ -12,6 +12,7 @@ import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq; 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.ExplainResp; +import com.tencent.supersonic.headless.api.pojo.response.ItemResp; import com.tencent.supersonic.headless.api.pojo.response.MetricResp; import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.api.pojo.response.ViewResp; @@ -56,4 +57,6 @@ public interface SemanticInterpreter { List getViewList(Long domainId); + List getDomainViewTree(); + } diff --git a/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/ChatConfigController.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/ChatConfigController.java index 91d810897..4898b6708 100644 --- a/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/ChatConfigController.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/ChatConfigController.java @@ -15,6 +15,7 @@ import com.tencent.supersonic.headless.api.pojo.request.PageDimensionReq; import com.tencent.supersonic.headless.api.pojo.request.PageMetricReq; 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.ItemResp; import com.tencent.supersonic.headless.api.pojo.response.MetricResp; import com.tencent.supersonic.headless.api.pojo.response.ViewResp; import org.springframework.beans.factory.annotation.Autowired; @@ -106,4 +107,9 @@ public class ChatConfigController { return semanticInterpreter.getMetricPage(pageMetricReq, user); } + @GetMapping("/getDomainViewTree") + public List getDomainViewTree() { + return semanticInterpreter.getDomainViewTree(); + } + } diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/ItemResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/ItemResp.java new file mode 100644 index 000000000..ebdd0e2b0 --- /dev/null +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/ItemResp.java @@ -0,0 +1,33 @@ +package com.tencent.supersonic.headless.api.pojo.response; + +import com.google.common.collect.Lists; +import com.tencent.supersonic.common.pojo.enums.TypeEnums; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ItemResp { + + private Long id; + + private Long parentId; + + private String name; + + private TypeEnums type; + + private List children = Lists.newArrayList(); + + public ItemResp(Long id, Long parentId, String name, TypeEnums type) { + this.id = id; + this.parentId = parentId; + this.name = name; + this.type = type; + } + +} diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/SchemaService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/SchemaService.java index 4c34ad624..86a51237f 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/SchemaService.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/SchemaService.java @@ -11,6 +11,7 @@ import com.tencent.supersonic.headless.api.pojo.request.SchemaItemQueryReq; import com.tencent.supersonic.headless.api.pojo.request.ViewFilterReq; 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.ItemResp; import com.tencent.supersonic.headless.api.pojo.response.ItemUseResp; import com.tencent.supersonic.headless.api.pojo.response.MetricResp; import com.tencent.supersonic.headless.api.pojo.response.ModelResp; @@ -40,4 +41,6 @@ public interface SchemaService { SemanticSchemaResp fetchSemanticSchema(SchemaFilterReq schemaFilterReq); List getStatInfo(ItemUseReq itemUseReq) throws ExecutionException; + + List getDomainViewTree(); } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java index 80bfddecf..6ba6a61d7 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java @@ -22,6 +22,7 @@ import com.tencent.supersonic.headless.api.pojo.response.DatabaseResp; import com.tencent.supersonic.headless.api.pojo.response.DimSchemaResp; 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.ItemResp; import com.tencent.supersonic.headless.api.pojo.response.ItemUseResp; import com.tencent.supersonic.headless.api.pojo.response.MetricResp; import com.tencent.supersonic.headless.api.pojo.response.MetricSchemaResp; @@ -307,6 +308,34 @@ public class SchemaServiceImpl implements SchemaService { return statUtils.getStatInfo(itemUseReq); } + @Override + public List getDomainViewTree() { + List domainResps = domainService.getDomainList(); + List itemResps = domainResps.stream().map(domain -> + new ItemResp(domain.getId(), domain.getParentId(), domain.getName(), TypeEnums.DOMAIN)) + .collect(Collectors.toList()); + Map itemRespMap = itemResps.stream() + .collect(Collectors.toMap(ItemResp::getId, item -> item)); + for (ItemResp itemResp : itemResps) { + ItemResp parentItem = itemRespMap.get(itemResp.getParentId()); + if (parentItem == null) { + continue; + } + parentItem.getChildren().add(itemResp); + } + List viewResps = viewService.getViewList(new MetaFilter()); + for (ViewResp viewResp : viewResps) { + ItemResp itemResp = itemRespMap.get(viewResp.getDomainId()); + if (itemResp != null) { + ItemResp view = new ItemResp(viewResp.getId(), viewResp.getDomainId(), + viewResp.getName(), TypeEnums.VIEW); + itemResp.getChildren().add(view); + } + } + return itemResps.stream().filter(itemResp -> itemResp.getParentId() == 0) + .collect(Collectors.toList()); + } + private void fillStaticInfo(List viewSchemaResps) throws ExecutionException { List viewIds = viewSchemaResps.stream() .map(ViewSchemaResp::getId).collect(Collectors.toList()); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ViewServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ViewServiceImpl.java index be083dec3..46e783bc0 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ViewServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ViewServiceImpl.java @@ -15,8 +15,10 @@ import com.tencent.supersonic.headless.api.pojo.response.ViewResp; import com.tencent.supersonic.headless.server.persistence.dataobject.ViewDO; import com.tencent.supersonic.headless.server.persistence.mapper.ViewDOMapper; import com.tencent.supersonic.headless.server.pojo.MetaFilter; +import com.tencent.supersonic.headless.server.service.DomainService; import com.tencent.supersonic.headless.server.service.ViewService; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -29,6 +31,9 @@ import java.util.stream.Collectors; public class ViewServiceImpl extends ServiceImpl implements ViewService { + @Autowired + private DomainService domainService; + @Override public ViewResp save(ViewReq viewReq, User user) { viewReq.createdBy(user.getName());