sys_user_role.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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 SysUserRole
  7. from ruoyi_admin.ext import db
  8. from ruoyi_system.domain.po import SysUserRolePo
  9. class SysUserRoleMapper:
  10. """
  11. 用户与角色相关联的数据访问层
  12. """
  13. @classmethod
  14. @Transactional(db.session)
  15. def delete_user_role_by_user_id(cls, user_id: int) -> int:
  16. """
  17. 通过用户ID删除用户和角色关联
  18. Args:
  19. user_id (int): 用户ID
  20. Returns:
  21. int: 影响的行数
  22. """
  23. stmt = delete(SysUserRolePo).where(SysUserRolePo.user_id==user_id)
  24. return db.session.execute(stmt).rowcount
  25. @classmethod
  26. @Transactional(db.session)
  27. def delete_user_role_by_user_ids(cls, user_ids: List[int]) -> int:
  28. """
  29. 批量通过用户ID删除用户和角色关联
  30. Args:
  31. user_ids (List[int]): 用户ID列表
  32. Returns:
  33. int: 影响的行数
  34. """
  35. if not user_ids:
  36. return 0
  37. stmt = delete(SysUserRolePo).where(SysUserRolePo.user_id.in_(user_ids))
  38. return db.session.execute(stmt).rowcount
  39. @classmethod
  40. @Transactional(db.session)
  41. def delete_user_role(cls, ids: List[int]) -> int:
  42. """
  43. 批量删除用户和角色关联
  44. Args:
  45. ids (List[int]): 需要删除的数据ID列表
  46. Returns:
  47. int: 影响的行数
  48. """
  49. stmt = delete(SysUserRolePo) \
  50. .where(SysUserRolePo.role_id.in_(ids))
  51. return db.session.execute(stmt).rowcount
  52. @classmethod
  53. def count_user_role_by_role_id(cls, role_id: int) -> int:
  54. """
  55. 通过角色ID查询角色使用数量
  56. Args:
  57. role_id (int): 角色ID
  58. Returns:
  59. int: 使用该角色的用户数量
  60. """
  61. stmt = select(func.count()).select_from(SysUserRolePo) \
  62. .where(SysUserRolePo.role_id==role_id)
  63. return db.session.execute(stmt).scalar() or 0
  64. @classmethod
  65. @Transactional(db.session)
  66. def batch_user_role(cls, user_role_list: List[SysUserRole]) -> int:
  67. """
  68. 批量新增用户角色信息
  69. Args:
  70. user_role_list (List[SysUserRole]): 用户角色列表
  71. Returns:
  72. int: 影响的行数
  73. """
  74. user_role_list = [
  75. row.model_dump(
  76. exclude_none=True,
  77. exclude_unset=True
  78. )
  79. for row in user_role_list]
  80. stmt = insert(SysUserRolePo).values(user_role_list)
  81. return db.session.execute(stmt).rowcount
  82. @classmethod
  83. @Transactional(db.session)
  84. def delete_user_role_info(cls, user_role: SysUserRole) -> int:
  85. """
  86. 删除用户和角色关联信息
  87. Args:
  88. user_role (SysUserRole): 用户角色信息
  89. Returns:
  90. int: 影响的行数
  91. """
  92. stmt = delete(SysUserRolePo).where(
  93. SysUserRolePo.user_id==user_role.user_id,
  94. SysUserRolePo.role_id==user_role.role_id
  95. )
  96. return db.session.execute(stmt).rowcount
  97. @classmethod
  98. @Transactional(db.session)
  99. def delete_user_role_infos(cls, role_id: int, user_ids: List[int]) -> int:
  100. """
  101. 批量取消授权用户角色
  102. Args:
  103. role_id (int): 角色ID
  104. user_ids (List[int]): 用户ID列表
  105. Returns:
  106. int: 影响的行数
  107. """
  108. stmt = delete(SysUserRolePo).where(
  109. SysUserRolePo.user_id.in_(user_ids),
  110. SysUserRolePo.role_id==role_id
  111. )
  112. return db.session.execute(stmt).rowcount