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