diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictMetaHelper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictMetaHelper.java index 6833f7237..7f9b8173c 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictMetaHelper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictMetaHelper.java @@ -19,6 +19,7 @@ import com.tencent.supersonic.knowledge.dictionary.DictUpdateMode; import com.tencent.supersonic.knowledge.dictionary.DimValue2DictCommand; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -29,6 +30,7 @@ import java.util.stream.Collectors; import com.tencent.supersonic.semantic.api.model.request.PageDimensionReq; import com.tencent.supersonic.semantic.api.model.response.DimensionResp; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -139,20 +141,14 @@ public class DictMetaHelper { ChatDefaultRichConfigResp chatDefaultConfig = chaConfigRichDesc.getChatAggRichConfig().getChatDefaultConfig(); - KnowledgeAdvancedConfig globalKnowledgeConfigAgg = chaConfigRichDesc.getChatAggRichConfig() - .getGlobalKnowledgeConfig(); List knowledgeAggInfo = chaConfigRichDesc.getChatAggRichConfig().getKnowledgeInfos(); - KnowledgeAdvancedConfig globalKnowledgeConfigDetail = chaConfigRichDesc.getChatDetailRichConfig() - .getGlobalKnowledgeConfig(); List knowledgeDetailInfo = chaConfigRichDesc.getChatDetailRichConfig().getKnowledgeInfos(); - fillKnowledgeDimValue(knowledgeDetailInfo, chatDefaultConfig, dimValueDOList, dimIdAndDescPair, - modelId, globalKnowledgeConfigDetail); - fillKnowledgeDimValue(knowledgeAggInfo, chatDefaultConfig, dimValueDOList, dimIdAndDescPair, - modelId, globalKnowledgeConfigAgg); + fillKnowledgeDimValue(knowledgeDetailInfo, chatDefaultConfig, dimValueDOList, dimIdAndDescPair, modelId); + fillKnowledgeDimValue(knowledgeAggInfo, chatDefaultConfig, dimValueDOList, dimIdAndDescPair, modelId); } @@ -161,8 +157,9 @@ public class DictMetaHelper { private void fillKnowledgeDimValue(List knowledgeInfos, ChatDefaultRichConfigResp chatDefaultConfig, List dimValueDOList, - Map dimIdAndDescPair, Long modelId, - KnowledgeAdvancedConfig globalKnowledgeConfigDetail) { + Map dimIdAndDescPair, Long modelId) { + Map dimIdAndRespPair = queryDimensionRespByModelId( + new ArrayList<>(Arrays.asList(modelId))); if (!CollectionUtils.isEmpty(knowledgeInfos)) { List dimensions = new ArrayList<>(); List defaultMetricDescList = new ArrayList<>(); @@ -202,9 +199,14 @@ public class DictMetaHelper { = knowledgeInfo.getKnowledgeAdvancedConfig(); BeanUtils.copyProperties(knowledgeAdvancedConfig, dim4Dict); - if (Objects.nonNull(globalKnowledgeConfigDetail) - && !CollectionUtils.isEmpty(globalKnowledgeConfigDetail.getRuleList())) { - dim4Dict.getRuleList().addAll(globalKnowledgeConfigDetail.getRuleList()); + if (Objects.nonNull(dimIdAndRespPair) + && dimIdAndRespPair.containsKey(dim4Dict.getDimId())) { + String datasourceFilterSql = dimIdAndRespPair.get( + dim4Dict.getDimId()).getDatasourceFilterSql(); + if (StringUtils.isNotEmpty(datasourceFilterSql)) { + dim4Dict.getRuleList().add(datasourceFilterSql); + } + } } dimensions.add(dim4Dict); @@ -221,6 +223,18 @@ public class DictMetaHelper { } } + private Map queryDimensionRespByModelId(List modelIds) { + Map dimIdAndRespPair = new HashMap<>(); + PageDimensionReq pageDimensionCmd = new PageDimensionReq(); + pageDimensionCmd.setModelIds(modelIds); + PageInfo dimensionPage = semanticInterpreter.getDimensionPage(pageDimensionCmd); + if (Objects.nonNull(dimensionPage) && !CollectionUtils.isEmpty(dimensionPage.getList())) { + List dimList = dimensionPage.getList(); + dimIdAndRespPair = dimList.stream().collect(Collectors.toMap(DimensionResp::getId, v -> v, (v1, v2) -> v2)); + } + return dimIdAndRespPair; + } + private String queryDataSourceByDimId(Long id) { PageDimensionReq pageDimensionCmd = new PageDimensionReq(); pageDimensionCmd.setId(id.toString()); diff --git a/semantic/api/src/main/java/com/tencent/supersonic/semantic/api/model/response/DimensionResp.java b/semantic/api/src/main/java/com/tencent/supersonic/semantic/api/model/response/DimensionResp.java index f6bc5f5d7..712af0ab0 100644 --- a/semantic/api/src/main/java/com/tencent/supersonic/semantic/api/model/response/DimensionResp.java +++ b/semantic/api/src/main/java/com/tencent/supersonic/semantic/api/model/response/DimensionResp.java @@ -28,6 +28,8 @@ public class DimensionResp extends SchemaItem { private String datasourceName; private String datasourceBizName; + + private String datasourceFilterSql; //DATE ID CATEGORY private String semanticType; diff --git a/semantic/model/src/main/java/com/tencent/supersonic/semantic/model/domain/utils/DimensionConverter.java b/semantic/model/src/main/java/com/tencent/supersonic/semantic/model/domain/utils/DimensionConverter.java index 91869c181..c6e30be3e 100644 --- a/semantic/model/src/main/java/com/tencent/supersonic/semantic/model/domain/utils/DimensionConverter.java +++ b/semantic/model/src/main/java/com/tencent/supersonic/semantic/model/domain/utils/DimensionConverter.java @@ -71,6 +71,8 @@ public class DimensionConverter { if (dimensionDO.getDefaultValues() != null) { dimensionResp.setDefaultValues(JSONObject.parseObject(dimensionDO.getDefaultValues(), List.class)); } + dimensionResp.setDatasourceFilterSql( + datasourceRespMap.getOrDefault(dimensionResp.getDatasourceId(), new DatasourceResp()).getFilterSql()); if (Strings.isNotEmpty(dimensionDO.getDimValueMaps())) { dimensionResp.setDimValueMaps(JsonUtil.toList(dimensionDO.getDimValueMaps(), DimValueMap.class)); }