sys_role_menu.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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 check_menu_exist_role(cls, menu_id: int) -> int:
  15. """
  16. 查询菜单下的菜单数量
  17. Args:
  18. menu_id: 菜单ID
  19. Returns:
  20. 角色数量
  21. """
  22. stmt = select(func.count()).select_from(SysRoleMenuPo) \
  23. .where(SysRoleMenuPo.menu_id == menu_id)
  24. return db.session.execute(stmt).scalar() or 0
  25. @classmethod
  26. @Transactional(db.session)
  27. def delete_role_menu_by_role_id(cls, role_id: int) -> int:
  28. """
  29. 删除角色下的关联菜单
  30. Args:
  31. role_id: 角色ID
  32. Returns:
  33. 删除的行数
  34. """
  35. stmt = delete(SysRoleMenuPo) \
  36. .where(SysRoleMenuPo.role_id == role_id)
  37. return db.session.execute(stmt).rowcount
  38. @classmethod
  39. @Transactional(db.session)
  40. def delete_role_menu(cls, ids: List[int]) -> int:
  41. """
  42. 批量删除角色下的关联菜单
  43. Args:
  44. ids: 角色ID列表
  45. Returns:
  46. 删除的行数
  47. """
  48. stmt = delete(SysRoleMenuPo) \
  49. .where(SysRoleMenuPo.role_id.in_(ids))
  50. return db.session.execute(stmt).rowcount
  51. @classmethod
  52. @Transactional(db.session)
  53. def batch_role_menu(cls, role_menu_list: List[SysRoleMenu]) -> int:
  54. """
  55. 批量新增角色菜单信息
  56. Args:
  57. role_menu_list: 角色菜单列表
  58. Returns:
  59. 新增的行数
  60. """
  61. role_menu_list = [
  62. row.model_dump(
  63. exclude_none=True,
  64. exclude_unset=True
  65. ) for row in role_menu_list]
  66. stmt = insert(SysRoleMenuPo).values(role_menu_list)
  67. return db.session.execute(stmt).rowcount