sys_role_menu.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. # -*- coding: utf-8 -*-
  2. # @Author : YY
  3. from typing import List
  4. from sqlalchemy import delete, func, insert, select
  5. from ruoyi_common.sqlalchemy.transaction import Transactional
  6. from ruoyi_system.domain.entity import SysRoleMenu
  7. from ruoyi_admin.ext import db
  8. from ruoyi_system.domain.po import SysRoleMenuPo
  9. class SysRoleMenuMapper:
  10. """
  11. 角色与菜单相关联的数据访问层
  12. """
  13. @classmethod
  14. def select_menu_ids_by_role_id(cls, role_id: int) -> List[int]:
  15. """
  16. 查询角色下的菜单ID列表
  17. Args:
  18. role_id: 角色ID
  19. Returns:
  20. 菜单ID列表
  21. """
  22. stmt = select(SysRoleMenuPo.menu_id) \
  23. .where(SysRoleMenuPo.role_id == role_id)
  24. return db.session.execute(stmt).scalars().all()
  25. @classmethod
  26. def check_menu_exist_role(cls, menu_id: int) -> int:
  27. """
  28. 查询菜单下的菜单数量
  29. Args:
  30. menu_id: 菜单ID
  31. Returns:
  32. 角色数量
  33. """
  34. stmt = select(func.count()).select_from(SysRoleMenuPo) \
  35. .where(SysRoleMenuPo.menu_id == menu_id)
  36. return db.session.execute(stmt).scalar() or 0
  37. @classmethod
  38. @Transactional(db.session)
  39. def delete_role_menu_by_role_id(cls, role_id: int) -> int:
  40. """
  41. 删除角色下的关联菜单
  42. Args:
  43. role_id: 角色ID
  44. Returns:
  45. 删除的行数
  46. """
  47. stmt = delete(SysRoleMenuPo) \
  48. .where(SysRoleMenuPo.role_id == role_id)
  49. return db.session.execute(stmt).rowcount
  50. @classmethod
  51. @Transactional(db.session)
  52. def delete_role_menu(cls, ids: List[int]) -> int:
  53. """
  54. 批量删除角色下的关联菜单
  55. Args:
  56. ids: 角色ID列表
  57. Returns:
  58. 删除的行数
  59. """
  60. stmt = delete(SysRoleMenuPo) \
  61. .where(SysRoleMenuPo.role_id.in_(ids))
  62. return db.session.execute(stmt).rowcount
  63. @classmethod
  64. @Transactional(db.session)
  65. def batch_role_menu(cls, role_menu_list: List[SysRoleMenu]) -> int:
  66. """
  67. 批量新增角色菜单信息
  68. Args:
  69. role_menu_list: 角色菜单列表
  70. Returns:
  71. 新增的行数
  72. """
  73. role_menu_list = [
  74. row.model_dump(
  75. exclude_none=True,
  76. exclude_unset=True
  77. ) for row in role_menu_list]
  78. stmt = insert(SysRoleMenuPo).values(role_menu_list)
  79. return db.session.execute(stmt).rowcount