Browse Source

机器人,知识库列表查询修改

zhouyuexiang 2 months ago
parent
commit
63c4ce19e5
2 changed files with 20 additions and 10 deletions
  1. 10 5
      api/services/app_service.py
  2. 10 5
      api/services/dataset_service.py

+ 10 - 5
api/services/app_service.py

@@ -6,6 +6,7 @@ from typing import Optional, cast
 from flask_login import current_user  # type: ignore
 from flask_login import current_user  # type: ignore
 from flask_sqlalchemy.pagination import Pagination
 from flask_sqlalchemy.pagination import Pagination
 from sqlalchemy import select, union
 from sqlalchemy import select, union
+from sqlalchemy.orm import aliased
 
 
 from configs import dify_config
 from configs import dify_config
 from constants.model_template import default_app_templates
 from constants.model_template import default_app_templates
@@ -112,11 +113,15 @@ class AppService:
                 AppPermissionAll.has_read_permission == True,
                 AppPermissionAll.has_read_permission == True,
                 AppPermissionAll.account_id == user_id
                 AppPermissionAll.account_id == user_id
             )
             )
-        if args.get("creator"):
-            main_query = main_query.where(App.created_by == args.get("creator"))
-        if args.get("creator_dept"):
-            main_query = main_query.join(Account, App.created_by == Account.id)
-            main_query = main_query.where(Account.dept_id == args.get("creator_dept"))
+        if args.get("creator") or args.get("creator_dept"):
+            # 使用别名避免重复连接
+            creator_account = aliased(Account)
+            main_query = main_query.join(creator_account, App.created_by == creator_account.id)
+
+            if args.get("creator"):
+                main_query = main_query.where(creator_account.name.ilike(f"%{args.get('creator')}%"))
+            if args.get("creator_dept"):
+                main_query = main_query.where(creator_account.dept_id == args.get("creator_dept"))
 
 
         print(str(main_query))
         print(str(main_query))
 
 

+ 10 - 5
api/services/dataset_service.py

@@ -10,7 +10,7 @@ from typing import Any, Optional
 
 
 from flask_login import current_user  # type: ignore
 from flask_login import current_user  # type: ignore
 from sqlalchemy import func, literal, text
 from sqlalchemy import func, literal, text
-from sqlalchemy.orm import Session
+from sqlalchemy.orm import Session, aliased
 from werkzeug.exceptions import NotFound
 from werkzeug.exceptions import NotFound
 
 
 from configs import dify_config
 from configs import dify_config
@@ -833,12 +833,17 @@ class DatasetService:
 
 
         # 添加创建人部门过滤
         # 添加创建人部门过滤
         if creator_dept:
         if creator_dept:
-            union_query = union_query.join(Account, Dataset.created_by == Account.id)
-            union_query = union_query.filter(Account.dept_id == literal(str(creator_dept)))
+            from sqlalchemy.orm import aliased
+            CreatorAccount = aliased(Account)
+            union_query = union_query.join(CreatorAccount, Dataset.created_by == CreatorAccount.id)
+            union_query = union_query.filter(CreatorAccount.dept_id == literal(str(creator_dept)))
 
 
         # 添加创建人过滤
         # 添加创建人过滤
         if creator:
         if creator:
-            union_query = union_query.filter(Dataset.created_by == creator)
+            from sqlalchemy.orm import aliased
+            CreatorAccount = aliased(Account)
+            union_query = union_query.join(CreatorAccount, Dataset.created_by == CreatorAccount.id)
+            union_query = union_query.filter(CreatorAccount.name.ilike(f"%{creator}%"))
 
 
         # 其它过滤
         # 其它过滤
         if search:
         if search:
@@ -857,7 +862,7 @@ class DatasetService:
                 union_query = union_query.filter(Dataset.id.in_(target_ids_by_category_ids))
                 union_query = union_query.filter(Dataset.id.in_(target_ids_by_category_ids))
             else:
             else:
                 return [], 0
                 return [], 0
-
+        print(str(union_query))
         datasets = union_query.order_by(Dataset.created_at.desc()).paginate(
         datasets = union_query.order_by(Dataset.created_at.desc()).paginate(
             page=page, per_page=per_page, max_per_page=100, error_out=False
             page=page, per_page=per_page, max_per_page=100, error_out=False
         )
         )