Browse Source

perf: 优化部分接口dao层查询

master
insistence 7 months ago
parent
commit
0ee473fd07
  1. 4
      ruoyi-fastapi-backend/module_admin/dao/dept_dao.py
  2. 2
      ruoyi-fastapi-backend/module_admin/dao/menu_dao.py
  3. 18
      ruoyi-fastapi-backend/module_admin/dao/role_dao.py
  4. 3
      ruoyi-fastapi-backend/module_admin/service/menu_service.py

4
ruoyi-fastapi-backend/module_admin/dao/dept_dao.py

@ -88,14 +88,14 @@ class DeptDao:
dept_result = (await db.execute( dept_result = (await db.execute(
select(SysDept) select(SysDept)
.where(SysDept.dept_id != dept_info.dept_id, .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', SysDept.del_flag == '0', SysDept.status == '0',
eval(data_scope_sql)) eval(data_scope_sql))
.order_by(SysDept.order_num) .order_by(SysDept.order_num)
.distinct() .distinct()
)).scalars().all() )).scalars().all()
return list_format_datetime(dept_result) return dept_result
@classmethod @classmethod
async def get_children_dept(cls, db: AsyncSession, dept_id: int): async def get_children_dept(cls, db: AsyncSession, dept_id: int):

2
ruoyi-fastapi-backend/module_admin/dao/menu_dao.py

@ -168,7 +168,7 @@ class MenuDao:
menu_count = (await db.execute( menu_count = (await db.execute(
select(func.count('*')) select(func.count('*'))
.select_from(SysMenu) .select_from(SysMenu)
.where(SysMenu.menu_id == menu_id) .where(SysMenu.parent_id == menu_id)
)).scalar() )).scalar()
return menu_count return menu_count

18
ruoyi-fastapi-backend/module_admin/dao/role_dao.py

@ -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.user_do import SysUser, SysUserRole
from module_admin.entity.do.role_do import SysRole, SysRoleMenu, SysRoleDept 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.dept_do import SysDept
from module_admin.entity.do.menu_do import SysMenu
from module_admin.entity.vo.role_vo import * from module_admin.entity.vo.role_vo import *
from utils.page_util import PageUtil from utils.page_util import PageUtil
from datetime import datetime, time from datetime import datetime, time
@ -169,17 +170,24 @@ class RoleDao:
) )
@classmethod @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获取角色菜单关联列表信息 根据角色id获取角色菜单关联列表信息
:param db: orm对象 :param db: orm对象
:param role_id: 角色id :param role: 角色对象
:return: 角色菜单关联列表信息 :return: 角色菜单关联列表信息
""" """
role_menu_query_all = (await db.execute( role_menu_query_all = (await db.execute(
select(SysRoleMenu) select(SysMenu)
.where(SysRoleMenu.role_id == role_id) .join(SysRoleMenu, SysRoleMenu.menu_id == SysMenu.menu_id)
.distinct() .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() )).scalars().all()
return role_menu_query_all return role_menu_query_all

3
ruoyi-fastapi-backend/module_admin/service/menu_service.py

@ -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_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) 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] checked_keys = [row.menu_id for row in role_menu_list]
result = RoleMenuQueryModel( result = RoleMenuQueryModel(
menus=menu_tree_result, menus=menu_tree_result,

Loading…
Cancel
Save