From 633a8ed975625851f23398f896594581c179f612 Mon Sep 17 00:00:00 2001
From: zhaoqingang <zhaoqg0118@163.com>
Date: 星期一, 23 十二月 2024 09:45:50 +0800
Subject: [PATCH] mysql链接数量

---
 env_conf/menu_conf.json      |   18 +-
 app/models/resource_model.py |    5 
 app/service/organization.py  |    4 
 app/service/user.py          |  100 +++++++++----
 app/models/base_model.py     |    2 
 app/api/agent.py             |   25 +-
 app/service/resource.py      |   64 +++++++-
 app/api/resource.py          |   20 +-
 app/models/user_model.py     |   35 ++--
 app/api/organization.py      |    2 
 app/service/dialog.py        |   54 +++++++
 app/config/const.py          |    8 +
 app/task/fetch_agent.py      |   25 ++-
 app/api/dialog.py            |   13 +
 app/models/dialog_model.py   |   11 +
 15 files changed, 270 insertions(+), 116 deletions(-)

diff --git a/app/api/agent.py b/app/api/agent.py
index 6270da4..fb1ad87 100644
--- a/app/api/agent.py
+++ b/app/api/agent.py
@@ -9,6 +9,7 @@
 from app.api import Response, get_current_user, ResponseList, process_files
 from app.api.user import reset_user_pwd
 from app.config.config import settings
+from app.models import DialogModel, MenuCapacityModel
 from app.models.agent_model import AgentType, AgentModel
 from app.models.base_model import get_db
 from app.models.session_model import SessionModel
@@ -17,6 +18,7 @@
 from app.service.dialog import get_session_history
 from app.service.ragflow import RagflowService
 from app.service.service_token import get_ragflow_token, get_bisheng_token
+from app.task.fetch_agent import initialize_agents
 
 router = APIRouter()
 
@@ -35,25 +37,24 @@
         limit: int = Query(1000, ge=1, le=1000),
         db: Session = Depends(get_db),
         current_user: UserModel = Depends(get_current_user)):
-    print(111)
-    agent = db.query(AgentModel).filter(AgentModel.id == agent_id).first()
+    # agent = db.query(AgentModel).filter(AgentModel.id == agent_id).first()
+    agent = db.query(MenuCapacityModel).filter(MenuCapacityModel.chat_id == agent_id).first()
     if not agent:
         return ResponseList(code=404, msg="Agent not found")
-
-    if agent.agent_type == AgentType.RAGFLOW:
-        print(222)
+    agent_type = int(agent.capacity_type)
+    if agent_type == AgentType.RAGFLOW:
         ragflow_service = RagflowService(base_url=settings.fwr_base_url)
         try:
             token = await get_ragflow_token(db, current_user.id)
             result = await ragflow_service.get_chat_sessions(token, agent_id)
             if not result:
-                result = await get_session_history(db, current_user.id, agent_id)
+                result = await get_session_history(db, current_user.id, agent_id, page, limit)
         except Exception as e:
             print(e)
             raise HTTPException(status_code=500, detail=str(e))
         return ResponseList(code=200, msg="", data=result)
 
-    elif agent.agent_type == AgentType.BISHENG:
+    elif agent_type == AgentType.BISHENG:
         bisheng_service = BishengService(base_url=settings.sgb_base_url)
         try:
             token = await get_bisheng_token(db, current_user.id)
@@ -62,13 +63,13 @@
             raise HTTPException(status_code=500, detail=str(e))
         return ResponseList(code=200, msg="", data=result)
 
-    elif agent.agent_type == AgentType.BASIC:
+    elif agent_type == AgentType.BASIC:
         offset = (page - 1) * limit
         records = db.query(SessionModel).filter(SessionModel.agent_id == agent_id, SessionModel.tenant_id==current_user.id).order_by(SessionModel.create_date.desc()).offset(offset).limit(limit).all()
         result = [item.to_dict() for item in records]
         return ResponseList(code=200, msg="", data=result)
 
-    elif agent.agent_type == AgentType.DIFY:
+    elif agent_type == AgentType.DIFY:
         offset = (page - 1) * limit
         records = db.query(SessionModel).filter(SessionModel.agent_id == agent_id, SessionModel.tenant_id==current_user.id).order_by(SessionModel.create_date.desc()).offset(offset).limit(limit).all()
         result = [item.to_dict() for item in records]
@@ -253,8 +254,8 @@
 
 @router.get("/get-chat-id/{agent_id}", response_model=Response)
 async def get_chat_id(agent_id: str, db: Session = Depends(get_db)):
-    agent = db.query(AgentModel).filter(AgentModel.id == agent_id).first()
-    if not agent:
-        return Response(code=404, msg="Agent not found")
+    # agent = db.query(AgentModel).filter(AgentModel.id == agent_id).first()
+    # if not agent:
+    #     return Response(code=404, msg="Agent not found")
 
     return Response(code=200, msg="", data={"chat_id": uuid.uuid4().hex})
diff --git a/app/api/dialog.py b/app/api/dialog.py
index 6e97966..799d7ea 100644
--- a/app/api/dialog.py
+++ b/app/api/dialog.py
@@ -2,11 +2,11 @@
 
 from fastapi import APIRouter, Depends
 from app.api import Response, get_current_user, ResponseList
-from app.models.dialog_model import dialogData, dialogDataUpdate
+from app.models.dialog_model import dialogData, dialogDataUpdate, dialogList
 from app.models.base_model import get_db
 from app.models.user_model import UserModel
 from app.service.dialog import get_dialog_list, create_dialog_service, update_dialog_status_service, \
-    delete_dialog_service, update_dialog_icon_service
+    delete_dialog_service, update_dialog_icon_service, get_dialog_manage_list
 
 dialog_router = APIRouter()
 
@@ -63,4 +63,11 @@
     is_create = await update_dialog_icon_service(db, dialog.id, dialog.icon)
     if not is_create:
         return Response(code=500, msg="dialog update failure", data={})
-    return Response(code=200, msg="dialog update success", data={})
\ No newline at end of file
+    return Response(code=200, msg="dialog update success", data={})
+
+
+@dialog_router.post("/dialog_list", response_model=Response)
+async def dialog_list_api(dialog:dialogList,
+                      current_user: UserModel = Depends(get_current_user),
+                      db=Depends(get_db)):
+    return Response(code=200, msg="", data=await get_dialog_manage_list(db, current_user.id, dialog.keyword, dialog.label, dialog.status, dialog.pageSize, dialog.current, dialog.mode))
\ No newline at end of file
diff --git a/app/api/organization.py b/app/api/organization.py
index fcb2447..e5e73a6 100644
--- a/app/api/organization.py
+++ b/app/api/organization.py
@@ -67,4 +67,4 @@
     msg = await edit_organization_status(db, dept.deptId, str(dept.status))
     if msg:
         return Response(code=400, msg=f"{msg}", data={})
-    return Response(code=200, msg="dept delete successfully", data={})
+    return Response(code=200, msg="dept status update successfully", data={})
diff --git a/app/api/resource.py b/app/api/resource.py
index 421b83b..1b82fa4 100644
--- a/app/api/resource.py
+++ b/app/api/resource.py
@@ -21,10 +21,11 @@
 
 @menu_router.delete("/{menuId}", response_model=Response)
 async def delete_resource(menuId, current_user: UserModel = Depends(get_current_user), db=Depends(get_db)):
-    is_edit = await delete_resource_info(db, menuId)
-    if not is_edit:
-        return Response(code=500, msg="menu delete failure", data={})
+    msg = await delete_resource_info(db, menuId)
+    if msg:
+        return Response(code=400, msg=f"{msg}", data={})
     return Response(code=200, msg="menu delete successfully", data={})
+
 
 
 @menu_router.post("/add_menu", response_model=Response)
@@ -47,15 +48,16 @@
         return Response(code=400, msg="The status cannot be {}!".format(menu.status))
     is_create = await edit_resource_data(db, menu.menuId, menu.menuName, menu.component, menu.path, menu.orderNum, menu.perms, menu.menuType, menu.description, menu.parentId, menu.status,menu.icon)
     if not is_create:
-        return Response(code=500, msg="dept edit failure", data={})
-    return Response(code=200, msg="dept edit successfully", data={})
+        return Response(code=500, msg="menu edit failure", data={})
+    return Response(code=200, msg="menu edit successfully", data={})
 
 
 @menu_router.put("/status", response_model=Response)
 async def resource_edit_status(menu: MenuStatus, current_user: UserModel = Depends(get_current_user), db=Depends(get_db)):
     if menu.status not in ["0", "1"]:
         return Response(code=400, msg="The status cannot be {}!".format(menu.status))
-    is_create = await edit_resource_status(db, menu.menuId, menu.status)
-    if not is_create:
-        return Response(code=500, msg="dept status edit failure", data={})
-    return Response(code=200, msg="dept status edit success", data={})
+    # is_create = await edit_resource_status(db, menu.menuId, menu.status)
+    msg = await edit_resource_status(db, menu.menuId, str(menu.status))
+    if msg:
+        return Response(code=400, msg=f"{msg}", data={})
+    return Response(code=200, msg="menu status update successfully", data={})
diff --git a/app/config/const.py b/app/config/const.py
index 800ebf0..7a0a328 100644
--- a/app/config/const.py
+++ b/app/config/const.py
@@ -23,6 +23,8 @@
 USER_STATSU_OFF = "0"
 
 Dialog_STATSU_DELETE = "2"
+Dialog_STATSU_ON = "1"
+Dialog_STATSU_OFF = "0"
 
 DEPT_STATUS_DELETE = "2"
 DEPT_STATUS_ON = "1"
@@ -30,4 +32,8 @@
 
 ROLE_STATUS_DELETE = "2"
 ROLE_STATUS_ON = "1"
-ROLE_STATUS_OFF = "0"
\ No newline at end of file
+ROLE_STATUS_OFF = "0"
+
+RESOURCE_STATUS_DELETE = "2"
+RESOURCE_STATUS_ON = "1"
+RESOURCE_STATUS_OFF = "0"
\ No newline at end of file
diff --git a/app/models/base_model.py b/app/models/base_model.py
index b8efcb8..580f262 100644
--- a/app/models/base_model.py
+++ b/app/models/base_model.py
@@ -8,7 +8,7 @@
 
 DATABASE_URL = os.getenv('DATABASE_URL') or settings.database_url
 
-engine = create_engine(DATABASE_URL)
+engine = create_engine(DATABASE_URL, pool_size=20, max_overflow=50)
 SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
 
 Base = declarative_base()
diff --git a/app/models/dialog_model.py b/app/models/dialog_model.py
index beac4bd..4a6a29e 100644
--- a/app/models/dialog_model.py
+++ b/app/models/dialog_model.py
@@ -81,4 +81,13 @@
 class dialogDataUpdate(BaseModel):
     id: str
     status: Optional[str] = "1"
-    icon: Optional[str] = ""
\ No newline at end of file
+    icon: Optional[str] = ""
+
+
+class dialogList(BaseModel):
+    current: Optional[int] = 1
+    pageSize: Optional[int] = 10
+    keyword: Optional[str] = ""
+    label: Optional[list] = []
+    status: Optional[str] = ""
+    mode: Optional[str] = ""
\ No newline at end of file
diff --git a/app/models/resource_model.py b/app/models/resource_model.py
index 00bd03f..c819bd9 100644
--- a/app/models/resource_model.py
+++ b/app/models/resource_model.py
@@ -5,6 +5,7 @@
 from sqlalchemy import Column, Integer, String, DateTime, Table, ForeignKey
 from sqlalchemy.orm import relationship, backref
 
+from app.config.const import RESOURCE_STATUS_DELETE
 from app.models.base_model import Base
 
 class ResourceModel(Base):
@@ -58,7 +59,7 @@
             'menuType': self.resource_type_id,
             'parentId': self.get_pid(),
             'parentName': self.get_pName(),
-            'children': [res.to_tree_select_json() for res in self.children]
+            'children': [res.to_tree_select_json() for res in self.children if res if res.status != RESOURCE_STATUS_DELETE]
         }
 
     def to_router_json(self):
@@ -94,11 +95,13 @@
         router = {
             'id': self.id,
             'name': self.path.capitalize() if self.path else '',
+            # 'name': self.name,
             'path': self.path,
             'hidden': bool(self.hidden),
             'redirect': 'noRedirect',
             'component': self.url,
             'alwaysShow': True,
+            'perms': self.perms,
             'resourceType': self.get_type_json(),
             'meta': {
                 'title': self.name,
diff --git a/app/models/user_model.py b/app/models/user_model.py
index dcbb612..b76cdc8 100644
--- a/app/models/user_model.py
+++ b/app/models/user_model.py
@@ -112,25 +112,26 @@
 
         # if len(self.roles) > 0:
         roles = {role.id: role.to_dict() for role in self.roles}
-        ogt_set = set()
-        for ogt in self.organizations:
-            if ogt.id in ogt_set:
-                continue
-            print(ogt.id)
-            ogt_set.add(ogt.id)
-            for role in ogt.roles:
-                roles[role.id] = role.to_dict()
-            parent_ogt = ogt.parent
-            while parent_ogt:
-                if parent_ogt.id not in ogt_set:
-                    ogt_set.add(ogt.id)
-                    for role in parent_ogt.roles:
-                        roles[role.id] = role.to_dict()
-                    parent_ogt = parent_ogt.parent
-                else:
-                    break
+        # ogt_set = set()
+        # for ogt in self.organizations:
+        #     if ogt.id in ogt_set:
+        #         continue
+        #     print(ogt.id)
+        #     ogt_set.add(ogt.id)
+        #     for role in ogt.roles:
+        #         roles[role.id] = role.to_dict()
+        #     parent_ogt = ogt.parent
+        #     while parent_ogt:
+        #         if parent_ogt.id not in ogt_set:
+        #             ogt_set.add(ogt.id)
+        #             for role in parent_ogt.roles:
+        #                 roles[role.id] = role.to_dict()
+        #             parent_ogt = parent_ogt.parent
+        #         else:
+        #             break
 
         json['roles'] = list(roles.values())
+        json['depts'] = [i.to_base_json() for i in self.organizations]
         return json
 
 
diff --git a/app/service/dialog.py b/app/service/dialog.py
index 1bf4e4a..bfc1fc0 100644
--- a/app/service/dialog.py
+++ b/app/service/dialog.py
@@ -83,10 +83,10 @@
             db.rollback()
 
 
-async def get_session_history(db, user_id, dialog_id):
+async def get_session_history(db, user_id, dialog_id,  page, limit):
     session_list = db.query(ConversationModel).filter(ConversationModel.tenant_id.__eq__(user_id),
                                                       ConversationModel.dialog_id.__eq__(dialog_id)).order_by(
-        ConversationModel.update_time.desc()).all()
+        ConversationModel.update_time.desc()).limit(limit).offset((page - 1) * limit).all()
     return [i.to_json() for i in session_list]
 
 
@@ -134,4 +134,52 @@
         logger.error(e)
         db.rollback()
         return False
-    return True
\ No newline at end of file
+    return True
+
+
+async def get_dialog_manage_list(db, user_id, keyword, label, status, page_size, page_index, mode):
+    user = db.query(UserModel).filter(UserModel.id == user_id).first()
+    if user is None:
+        return {"rows": []}
+    query = db.query(DialogModel).filter(DialogModel.status != Dialog_STATSU_DELETE)
+    id_list = []
+    if label:
+        id_list = set([i.object_id for i in db.query(LabelWorkerModel).filter(LabelWorkerModel.label_id.in_(label)).all()])
+    if user.permission != "admin":
+        dia_list = [j.id for i in user.groups for j in i.dialogs if not label or j.id in id_list]
+        query = query.filter(or_(DialogModel.tenant_id == user_id, DialogModel.id.in_(dia_list)))
+    else:
+        if label:
+            query = query.filter(or_(DialogModel.id.in_(id_list)))
+
+    if keyword:
+        query = query.filter(DialogModel.name.like('%{}%'.format(keyword)))
+
+    if status:
+        # print(status)
+        query = query.filter(DialogModel.status == status)
+    if mode:
+        query = query.filter(DialogModel.mode == mode)
+    query = query.order_by(DialogModel.update_date.desc())
+    total = query.count()
+    if page_size:
+        query = query.limit(page_size).offset((page_index - 1) * page_size)
+
+    rows = []
+    user_id_set = set()
+    dialog_id_set = set()
+    label_dict = {}
+    for kld in query.all():
+        user_id_set.add(kld.tenant_id)
+        dialog_id_set.add(kld.id)
+        rows.append(kld.to_json())
+    user_dict = {str(i.id): i.to_dict() for i in db.query(UserModel).filter(UserModel.id.in_(user_id_set)).all()}
+    for i in db.query(LabelModel.id, LabelModel.name, LabelWorkerModel.object_id).outerjoin(LabelWorkerModel,
+                                                                LabelModel.id == LabelWorkerModel.label_id).filter(
+            LabelWorkerModel.object_id.in_(dialog_id_set)).all():
+
+        label_dict[i.object_id] = label_dict.get(i.object_id, []) +[{"labelId": i.id, "labelName": i.name}]
+    for r in rows:
+        r["user"] = user_dict.get(r["user_id"], {})
+        r["label"] = label_dict.get(r["id"], [])
+    return {"total":  total, "rows": rows}
\ No newline at end of file
diff --git a/app/service/organization.py b/app/service/organization.py
index 0954c6c..608cbf2 100644
--- a/app/service/organization.py
+++ b/app/service/organization.py
@@ -113,6 +113,10 @@
     next_dept_list = []
     base_dept = db.query(OrganizationModel).filter(OrganizationModel.id.__eq__(dept_id)).first()
     if status == DEPT_STATUS_ON:
+        print(11)
+        print(base_dept.name)
+        if base_dept.parent and base_dept.parent.status != DEPT_STATUS_ON:
+            return '涓婄骇鑺傜偣鐘舵�佸紓甯革紒'
         try:
             base_dept.status=status
             db.commit()
diff --git a/app/service/resource.py b/app/service/resource.py
index 7880c01..869910b 100644
--- a/app/service/resource.py
+++ b/app/service/resource.py
@@ -1,6 +1,7 @@
 import uuid
 
 from Log import logger
+from app.config.const import RESOURCE_STATUS_ON, RESOURCE_STATUS_OFF, RESOURCE_STATUS_DELETE
 from app.models import ResourceModel
 
 
@@ -17,14 +18,28 @@
 
 
 async def delete_resource_info(db, menu_id):
+    delete_list = []
+    dept_list = []
+    next_dept_list = []
+    base_dept = db.query(ResourceModel).filter(ResourceModel.id.__eq__(menu_id)).first()
+    dept_list.append(base_dept)
+    while dept_list:
+        for dept in dept_list:
+            delete_list.append(dept.id)
+            for child_dept in dept.children:
+                next_dept_list.append(child_dept)
+
+        dept_list = next_dept_list
+        next_dept_list = []
+
     try:
-        db.query(ResourceModel).filter(ResourceModel.id.__eq__(menu_id)).delete()
+        db.query(ResourceModel).filter(ResourceModel.id.in_(delete_list)).update({"status": RESOURCE_STATUS_DELETE})
         db.commit()
     except Exception as e:
         logger.error(e)
         db.rollback()
-        return False
-    return True
+        return '鏈嶅姟寮傚父 锛�'
+    return ""
 
 
 async def create_menu(db, menu_name, component, path, order_num, perms, menu_type, description, parent_id, status, icon):
@@ -66,13 +81,36 @@
 
 
 async def edit_resource_status(db, menu_id, status):
-    try:
-        dept_model = db.query(ResourceModel).filter(ResourceModel.id == menu_id).first()
-        dept_model.status = status
-        db.commit()
-        db.refresh(dept_model)
-    except Exception as e:
-        logger.error(e)
-        db.rollback()
-        return False
-    return True
\ No newline at end of file
+    delete_list = []
+    dept_list = []
+    next_dept_list = []
+    base_dept = db.query(ResourceModel).filter(ResourceModel.id.__eq__(menu_id)).first()
+    if status == RESOURCE_STATUS_ON:
+        if base_dept.parent and base_dept.parent.status != RESOURCE_STATUS_ON:
+            return '涓婄骇鑺傜偣鐘舵�佸紓甯革紒'
+        try:
+            base_dept.status = status
+            db.commit()
+        except Exception as e:
+            logger.error(e)
+            db.rollback()
+            return '鏈嶅姟寮傚父 锛�'
+    else:
+        dept_list.append(base_dept)
+        while dept_list:
+            for dept in dept_list:
+                delete_list.append(dept.id)
+                for child_dept in dept.children:
+                    next_dept_list.append(child_dept)
+
+            dept_list = next_dept_list
+            next_dept_list = []
+        try:
+            db.query(ResourceModel).filter(ResourceModel.id.in_(delete_list)).update(
+                {"status": RESOURCE_STATUS_OFF})
+            db.commit()
+        except Exception as e:
+            logger.error(e)
+            db.rollback()
+            return '鏈嶅姟寮傚父 锛�'
+    return ""
\ No newline at end of file
diff --git a/app/service/user.py b/app/service/user.py
index 0cf305c..42bb7fd 100644
--- a/app/service/user.py
+++ b/app/service/user.py
@@ -1,10 +1,12 @@
 import time
 from datetime import datetime
+from traceback import print_tb
 
 from app.api import pwd_context
 from app.api.dialog import dialog_list
 from app.config.config import settings
-from app.config.const import RAGFLOW, BISHENG, DIFY, USER_STATSU_DELETE, ROLE_STATUS_ON, DEPT_STATUS_ON
+from app.config.const import RAGFLOW, BISHENG, DIFY, USER_STATSU_DELETE, ROLE_STATUS_ON, DEPT_STATUS_ON, \
+    Dialog_STATSU_ON
 from app.models import RoleModel, GroupModel, AgentType, role_resource_table, DialogModel, OrganizationModel, \
     ResourceModel
 from app.models.menu_model import WebMenuModel, MenuCapacityModel
@@ -107,6 +109,8 @@
 
 async def edit_user_data(db, user_id, email, phone, login_name, roles, groups):
     try:
+        print(121221)
+        print(roles)
         user = db.query(UserModel).filter(UserModel.id == user_id).first()
         user.email = email
         user.phone = phone
@@ -116,6 +120,7 @@
         user.roles = [db.get(RoleModel, roleId) for roleId in roles]
         # user.groups = [db.get(GroupModel, groupId) for groupId in groups]
         db.commit()
+        print(4343)
     except Exception as e:
         logger.error(e)
         db.rollback()
@@ -201,35 +206,37 @@
     role_set = set()
     dept_set = set()
     user = db.query(UserModel).filter_by(id=user_id).first()
+    parent_resource = db.query(ResourceModel).filter(ResourceModel.status == DEPT_STATUS_ON, ResourceModel.resource_id == None).first()
     parent_id = ""
+    print(user_id)
+    if parent_resource:
+        parent_id = parent_resource.id
     tmp_dit = {}
     if user.permission == "admin":
         dept_list = db.query(ResourceModel).filter(ResourceModel.status==DEPT_STATUS_ON, ResourceModel.resource_type_id != "1").all()
         for dept in dept_list:
-            if not dept.resource_id:
-                parent_id = dept.id
-                continue
-            permissions[dept.id] = dept.to_router_dict()
+            permissions[dept.id] = dept
     else:
         async def role_resource(role_set, permissions, roles):
             nonlocal parent_id
             for role in roles:
+                print(role.name)
                 if role.id not in role_set and role.status == ROLE_STATUS_ON:
                     role_set.add(role.id)
 
                     for r in role.resources:
                         if r.resource_type_id != "1" and r.status==DEPT_STATUS_ON:
-                            if not r.resource_id:
-                                parent_id = r.id
-                                continue
-                            permissions[r.id] = r.to_router_dict()
+                            permissions[r.id] = r
 
         await role_resource(role_set, permissions, user.roles)
         for ogt in user.organizations:
+            print(ogt.name)
             if ogt.status != DEPT_STATUS_ON:
                 continue
+            print(ogt.name)
             if ogt.roles:
-                await role_resource(role_set, permissions, user.roles)
+                print(9877)
+                await role_resource(role_set, permissions,ogt.roles)
             parent_ogt = ogt.parent
             while parent_ogt:
                 if parent_ogt.id not in dept_set:
@@ -238,12 +245,29 @@
                     parent_ogt = parent_ogt.parent
                 else:
                     break
+    # print(permissions.keys())
+    def get_parent(parent, permissions):
+        # print(parent.id)
+        # nonlocal permissions
+        if parent.id not in permissions:
 
-    for permission in permissions.values():
+            permissions[parent.id] = parent  # .to_router_dict()
+            # print(permissions.keys())
+            parent = parent.parent
+            if parent:
+                get_parent(parent, permissions)
+    # permission_list = []
+    for permission in list(permissions.values()):
+        if permission.parent:
+            get_parent(permission.parent, permissions)
+
+    permission_list = [p.to_router_dict() for p in permissions.values()]
+    for permission in permission_list:
         tmp_dit[permission["parentId"]] = tmp_dit.get(permission["parentId"], []) + [permission]
-
+    # print(permissions.keys())
     def get_child(parent_id):
-        res = permissions[parent_id]
+        # if parent_id in tmp_dit:
+        res = permissions[parent_id].to_router_dict()
         res["children"] = [get_child(i["id"]) for i in tmp_dit.get(parent_id, [])]
         return res
 
@@ -256,12 +280,17 @@
     res = []
     # print(user_id)
     user = db.query(UserModel).filter_by(id=user_id).first()
-    for group in user.groups:
-        for dialog in group.dialogs:
-            dialog_list.append(dialog.id)
+    if user.permission == "admin":
+        dialog_list = [i.id for i in db.query(DialogModel).filter(DialogModel.status==Dialog_STATSU_ON).all()]
+    else:
+        for group in user.groups:
+            for dialog in group.dialogs:
+                dialog_list.append(dialog.id)
+
+
     # print(dialog_list)
     menu_list = db.query(WebMenuModel.id, WebMenuModel.title, WebMenuModel.describe, WebMenuModel.icon, WebMenuModel.desc,WebMenuModel.rank,
-                         WebMenuModel.img, MenuCapacityModel.capacity_id, MenuCapacityModel.capacity_type, MenuCapacityModel.chat_id.label("agentId")).outerjoin(
+                         WebMenuModel.img, MenuCapacityModel.capacity_id, MenuCapacityModel.capacity_type, MenuCapacityModel.chat_id.label("agentId"), MenuCapacityModel.chat_type).outerjoin(
         MenuCapacityModel, WebMenuModel.id == MenuCapacityModel.menu_id).outerjoin(
         DialogModel, MenuCapacityModel.capacity_id == DialogModel.id).filter(DialogModel.status=="1").all()
 
@@ -277,14 +306,16 @@
                 break
         else:
             res.append({
-            'id': menus[0].id,
-            'title': menus[0].title,
+            'menuId': menus[0].id,
+            'name': menus[0].title,
             'icon': menus[0].icon,
             'img': menus[0].img,
             'desc': menus[0].desc,
             'dialog': menus[0].describe,
-            'agentId': menus[0].agentId,
-            'rank': menus[0].rank
+            'id': menus[0].agentId,
+            'rank': menus[0].rank,
+            'agent_type': menus[0].capacity_type,
+            'type': menus[0].chat_type
         })
     return sorted(res, key=lambda x: x['rank'], reverse=True)
 
@@ -307,15 +338,15 @@
 
                 for r in role.resources:
                     if r.resource_type_id != "1":
-                        if not r.resource_id:
-                            parent_id = r.id
-                            continue
+                    #     if not r.resource_id:
+                    #         parent_id = r.id
+                    #         continue
                         permissions[r.id] = r.to_router_dict()
 
     await role_resource(role_set, permissions, user.roles)
     for ogt in user.organizations:
         if ogt.roles:
-            await role_resource(role_set, permissions, user.roles)
+            await role_resource(role_set, permissions, ogt.roles)
         parent_ogt = ogt.parent
         while parent_ogt:
 
@@ -327,16 +358,17 @@
             else:
                 break
 
-    tmp_dit = {}
-    for permission in permissions.values():
-        tmp_dit[permission["parentId"]] = tmp_dit.get(permission["parentId"], []) + [permission]
+    # tmp_dit = {}
+    # for permission in permissions.values():
+    #     tmp_dit[permission["parentId"]] = tmp_dit.get(permission["parentId"], []) + [permission]
+    #
+    # def get_child(parent_id):
+    #     res = permissions[parent_id]
+    #     res["children"] = [get_child(i["id"]) for i in tmp_dit.get(parent_id, [])]
+    #     return res
 
-    def get_child(parent_id):
-        res = permissions[parent_id]
-        res["children"] = [get_child(i["id"]) for i in tmp_dit.get(parent_id, [])]
-        return res
-
-    res["menus"] = [get_child(i["id"]) for i in tmp_dit.get(parent_id, [])]
+    # res["menus"] = [get_child(i["id"]) for i in tmp_dit.get(parent_id, [])]
+    res["menus"] = list(permissions.values())
     for group in user.groups:
         for klg in group.knowledges:
             knowledge_dict[klg.id] = klg.to_json()
diff --git a/app/task/fetch_agent.py b/app/task/fetch_agent.py
index 6373653..303d8f6 100644
--- a/app/task/fetch_agent.py
+++ b/app/task/fetch_agent.py
@@ -49,6 +49,7 @@
     status = Column(String(16), nullable=False)
     description = Column(Text, nullable=False)
     tenant_id = Column(String(36), nullable=False)
+    mode = Column(String(36), nullable=False)
 
 
 class RgKnowledge(Base):
@@ -210,14 +211,14 @@
     try:
         if names:
             query = db.query(Flow.id, Flow.name, Flow.description, Flow.status, Flow.user_id) \
-                .filter(Flow.name.in_(names))
+                .filter(Flow.name.in_(names), Flow.status=="1")
         else:
-            query = db.query(Flow.id, Flow.name, Flow.description, Flow.status, Flow.user_id)
+            query = db.query(Flow.id, Flow.name, Flow.description, Flow.status, Flow.user_id).filter(Flow.status=="1")
 
         results = query.all()
         # print(f"Executing query: {query}")
         # 鏍煎紡鍖杋d涓篣UID
-        formatted_results = [{"id":format_uuid(row[0]), "name": row[1], "description": row[2], "status": "1" if row[3] ==2 else "0", "user_id": str(row[4])} for row in results]
+        formatted_results = [{"id":row[0], "name": row[1], "description": row[2], "status": row[3], "user_id": str(row[4]), "mode": "agent-dialog"} for row in results]
         return formatted_results
     finally:
         db.close()
@@ -233,8 +234,8 @@
 
         results = query.all()
         formatted_results = [
-            {"id": format_uuid(row[0]), "name": row[1], "description": row[2], "status": str(row[3]) if row[3]  ==1 else "2",
-             "user_id": str(row[4])} for row in results]
+            {"id": row[0], "name": row[1], "description": row[2], "status": "1" if row[3]  == "1" else "2",
+             "user_id": str(row[4]), "mode": "agent-dialog"} for row in results]
         return formatted_results
     finally:
         db.close()
@@ -244,15 +245,15 @@
     db = SessionDify()
     try:
         if names:
-            query = db.query(DfApps.id, DfApps.name, DfApps.description, DfApps.status, DfApps.tenant_id) \
+            query = db.query(DfApps.id, DfApps.name, DfApps.description, DfApps.status, DfApps.tenant_id, DfApps.mode) \
                 .filter( DfApps.name.in_(names))
         else:
-            query = db.query(DfApps.id, DfApps.name, DfApps.description, DfApps.status, DfApps.tenant_id)
+            query = db.query(DfApps.id, DfApps.name, DfApps.description, DfApps.status, DfApps.tenant_id, DfApps.mode)
 
         results = query.all()
         formatted_results = [
             {"id": str(row[0]), "name": row[1], "description": row[2], "status": "1",
-             "user_id": str(row[4])} for row in results]
+             "user_id": str(row[4]), "mode": row[5]} for row in results]
         return formatted_results
     finally:
         db.close()
@@ -269,15 +270,17 @@
             existing_agent = db.query(DialogModel).filter_by(id=row["id"]).first()
             if existing_agent:
                 existing_agent.name = row["name"]
-                existing_agent.status = row["status"]
                 existing_agent.description = row["description"]
+                existing_agent.status = row["status"]
+                existing_agent.mode = row["mode"]
                 # existing_agent.tenant_id = get_rag_user_id(db, row["user_id"], type_dict[dialog_type])
             else:
-                existing = DialogModel(id=row["id"], status=row["status"], name=row["name"], description=row["description"], tenant_id=get_rag_user_id(db, row["user_id"], type_dict[dialog_type]), dialog_type=dialog_type)
+                existing = DialogModel(id=row["id"], status=row["status"], name=row["name"], description=row["description"], tenant_id=get_rag_user_id(db, row["user_id"], type_dict[dialog_type]), dialog_type=dialog_type, mode=row["mode"])
                 db.add(existing)
         db.commit()
         for dialog in db.query(DialogModel).filter_by(dialog_type=dialog_type).all():
             if dialog.id not in agent_id_list:
+                # print(dialog.id)
                 db.query(DialogModel).filter_by(id=dialog.id).update({"status": "2"})
                 db.commit()
     except IntegrityError:
@@ -343,7 +346,7 @@
                                        knowledge_type=1, permission=row["permission"], documents=row["doc_num"])
                 db.add(existing)
         db.commit()
-        for dialog in db.query(KnowledgeModel).filter_by(knowledge_type=type_dict[klg_type]).all():
+        for dialog in db.query(KnowledgeModel).filter_by(knowledge_type=klg_type).all():
             if dialog.id not in agent_id_list:
                 db.query(KnowledgeModel).filter_by(id=dialog.id).delete()
                 db.commit()
diff --git a/env_conf/menu_conf.json b/env_conf/menu_conf.json
index 224189b..e044dde 100644
--- a/env_conf/menu_conf.json
+++ b/env_conf/menu_conf.json
@@ -44,8 +44,8 @@
       "rank": 98,
       "dialog": [
         {
-          "id": "42e4fcdc-9bea-11ef-ac30-0242ac160006",
-          "chat_id": "42e4fcdc-9bea-11ef-ac30-0242ac160006",
+          "id": "e476db7cbdbb11ef82b50242ac130006",
+          "chat_id": "e476db7cbdbb11ef82b50242ac130006",
           "chat_type": "knowledgeQA",
           "agentType": 1
         }
@@ -61,10 +61,10 @@
       "rank": 97,
       "dialog": [
         {
-          "id": "c684bab4-f05b-423e-8727-f50497e73ebf",
-          "chat_id": "c684bab4-f05b-423e-8727-f50497e73ebf",
-          "chat_type": "report",
-          "agentType": 2
+          "id": "7638f006-38a2-4c21-a68e-c6c49b304a35",
+          "chat_id": "7638f006-38a2-4c21-a68e-c6c49b304a35",
+          "chat_type": "documentIa",
+          "agentType": 4
         }
       ]
     },
@@ -78,8 +78,8 @@
       "rank": 96,
       "dialog": [
         {
-          "id": "90d53372-9c02-11ef-bf6b-0242ac160006",
-          "chat_id": "90d53372-9c02-11ef-bf6b-0242ac160006",
+          "id": "90d533729c0211efbf6b0242ac160006",
+          "chat_id": "90d533729c0211efbf6b0242ac160006",
           "chat_type": "chat",
           "agentType": 1
         }
@@ -98,7 +98,7 @@
           "id": "basic_excel_talk",
           "chat_id": "basic_excel_talk",
           "chat_type": "excelTalk",
-          "agentType": 1
+          "agentType": 3
         }
       ]
     },

--
Gitblit v1.8.0