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