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(
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):

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

@ -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

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.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

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_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,

Loading…
Cancel
Save