From 8b9e03d7cfe7266d08abca7cb5b5d7a8725f64c9 Mon Sep 17 00:00:00 2001 From: CaptainB Date: Wed, 4 Jun 2025 19:39:21 +0800 Subject: [PATCH] feat: update knowledge retrieval logic and optimize SQL queries for application listing --- apps/knowledge/serializers/knowledge.py | 15 ++++++--------- apps/knowledge/sql/list_knowledge_application.sql | 10 +--------- 2 files changed, 7 insertions(+), 18 deletions(-) diff --git a/apps/knowledge/serializers/knowledge.py b/apps/knowledge/serializers/knowledge.py index 5b2d0a170..e678fc776 100644 --- a/apps/knowledge/serializers/knowledge.py +++ b/apps/knowledge/serializers/knowledge.py @@ -236,15 +236,13 @@ class KnowledgeSerializer(serializers.Serializer): def list_application(self, with_valid=True): if with_valid: self.is_valid(raise_exception=True) - knowledge = QuerySet(Knowledge).get(id=self.data.get("knowledge_id")) + # knowledge = QuerySet(Knowledge).get(id=self.data.get("knowledge_id")) return select_list( get_file_content( os.path.join(PROJECT_DIR, "apps", "knowledge", 'sql', 'list_knowledge_application.sql') ), [ - self.data.get('user_id') if self.data.get('user_id') == str(knowledge.user_id) else None, - knowledge.user_id, - self.data.get('user_id') + self.data.get('user_id'), ] ) @@ -252,15 +250,14 @@ class KnowledgeSerializer(serializers.Serializer): self.is_valid() query_set_dict = { 'default_sql': QuerySet( - model=get_dynamics_model({'temp.id': models.UUIDField()}) + model=get_dynamics_model({'temp.id': models.CharField()}) ).filter(**{'temp.id': self.data.get("knowledge_id")}), 'knowledge_custom_sql': QuerySet( model=get_dynamics_model({'knowledge.user_id': models.CharField()}) ).filter(**{'knowledge.user_id': self.data.get("user_id")}), + 'folder_query_set': QuerySet(KnowledgeFolder) } - # todo 这里需要优化 - # all_application_list = [str(adm.get('id')) for adm in self.list_application(with_valid=False)] - all_application_list = [] + all_application_list = [str(adm.get('id')) for adm in self.list_application(with_valid=False)] return { **native_search(query_set_dict, select_string=get_file_content( os.path.join(PROJECT_DIR, "apps", "knowledge", 'sql', 'list_knowledge.sql')), with_search_one=True), @@ -555,7 +552,7 @@ class KnowledgeSerializer(serializers.Serializer): {'name': document_name, 'paragraphs': paragraphs, 'meta': {'source_url': child_link.url.strip(), 'selector': knowledge.meta.get('selector')}, - 'type': Knowledge.WEB}, with_valid=True) + 'type': KnowledgeType.WEB}, with_valid=True) except Exception as e: logging.getLogger("max_kb_error").error(f'{str(e)}:{traceback.format_exc()}') diff --git a/apps/knowledge/sql/list_knowledge_application.sql b/apps/knowledge/sql/list_knowledge_application.sql index 9da36a3cf..3963f0ac0 100644 --- a/apps/knowledge/sql/list_knowledge_application.sql +++ b/apps/knowledge/sql/list_knowledge_application.sql @@ -9,12 +9,4 @@ SELECT FROM application WHERE - "id" IN ( - SELECT - team_member_permission.target - FROM - team_member team_member - LEFT JOIN team_member_permission team_member_permission ON team_member_permission.member_id = team_member."id" - WHERE - ( "team_member_permission"."auth_target_type" = 'APPLICATION' AND "team_member_permission"."operate"::text[] @> ARRAY['USE'] AND team_member.team_id = %s AND team_member.user_id =%s ) - ) \ No newline at end of file + "id" in (select target from workspace_user_resource_permission where auth_target_type = 'APPLICATION' and 'VIEW' = any (permission_list)) \ No newline at end of file