perf: 优化部分接口dao层查询
This commit is contained in:
@@ -88,14 +88,14 @@ class DeptDao:
|
||||
dept_result = (await db.execute(
|
||||
select(SysDept)
|
||||
.where(SysDept.dept_id != dept_info.dept_id,
|
||||
SysDept.parent_id != dept_info.dept_id,
|
||||
~SysDept.dept_id.in_(select(SysDept.dept_id).where(func.find_in_set(dept_info.dept_id, SysDept.ancestors))),
|
||||
SysDept.del_flag == '0', SysDept.status == '0',
|
||||
eval(data_scope_sql))
|
||||
.order_by(SysDept.order_num)
|
||||
.distinct()
|
||||
)).scalars().all()
|
||||
|
||||
return list_format_datetime(dept_result)
|
||||
return dept_result
|
||||
|
||||
@classmethod
|
||||
async def get_children_dept(cls, db: AsyncSession, dept_id: int):
|
||||
|
@@ -168,7 +168,7 @@ class MenuDao:
|
||||
menu_count = (await db.execute(
|
||||
select(func.count('*'))
|
||||
.select_from(SysMenu)
|
||||
.where(SysMenu.menu_id == menu_id)
|
||||
.where(SysMenu.parent_id == menu_id)
|
||||
)).scalar()
|
||||
|
||||
return menu_count
|
||||
|
@@ -3,6 +3,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from module_admin.entity.do.user_do import SysUser, SysUserRole
|
||||
from module_admin.entity.do.role_do import SysRole, SysRoleMenu, SysRoleDept
|
||||
from module_admin.entity.do.dept_do import SysDept
|
||||
from module_admin.entity.do.menu_do import SysMenu
|
||||
from module_admin.entity.vo.role_vo import *
|
||||
from utils.page_util import PageUtil
|
||||
from datetime import datetime, time
|
||||
@@ -169,17 +170,24 @@ class RoleDao:
|
||||
)
|
||||
|
||||
@classmethod
|
||||
async def get_role_menu_dao(cls, db: AsyncSession, role_id: int):
|
||||
async def get_role_menu_dao(cls, db: AsyncSession, role: RoleModel):
|
||||
"""
|
||||
根据角色id获取角色菜单关联列表信息
|
||||
:param db: orm对象
|
||||
:param role_id: 角色id
|
||||
:param role: 角色对象
|
||||
:return: 角色菜单关联列表信息
|
||||
"""
|
||||
role_menu_query_all = (await db.execute(
|
||||
select(SysRoleMenu)
|
||||
.where(SysRoleMenu.role_id == role_id)
|
||||
.distinct()
|
||||
select(SysMenu)
|
||||
.join(SysRoleMenu, SysRoleMenu.menu_id == SysMenu.menu_id)
|
||||
.where(SysRoleMenu.role_id == role.role_id,
|
||||
~SysMenu.menu_id.in_(
|
||||
select(SysMenu.parent_id)
|
||||
.select_from(SysMenu)
|
||||
.join(SysRoleMenu,
|
||||
and_(SysRoleMenu.menu_id == SysMenu.menu_id, SysRoleMenu.role_id == role.role_id))
|
||||
) if role.menu_check_strictly else True)
|
||||
.order_by(SysMenu.parent_id, SysMenu.order_num)
|
||||
)).scalars().all()
|
||||
|
||||
return role_menu_query_all
|
||||
|
@@ -38,7 +38,8 @@ class MenuService:
|
||||
"""
|
||||
menu_list_result = await MenuDao.get_menu_list_for_tree(query_db, current_user.user.user_id, current_user.user.role)
|
||||
menu_tree_result = cls.list_to_tree(menu_list_result)
|
||||
role_menu_list = await RoleDao.get_role_menu_dao(query_db, role_id)
|
||||
role = await RoleDao.get_role_detail_by_id(query_db, role_id)
|
||||
role_menu_list = await RoleDao.get_role_menu_dao(query_db, role)
|
||||
checked_keys = [row.menu_id for row in role_menu_list]
|
||||
result = RoleMenuQueryModel(
|
||||
menus=menu_tree_result,
|
||||
|
Reference in New Issue
Block a user