sys_user_role.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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(cls, ids: List[int]) -> int:
  28. """
  29. 批量删除用户和角色关联
  30. Args:
  31. ids (List[int]): 需要删除的数据ID列表
  32. Returns:
  33. int: 影响的行数
  34. """
  35. stmt = delete(SysUserRolePo) \
  36. .where(SysUserRolePo.role_id.in_(ids))
  37. return db.session.execute(stmt).rowcount
  38. @classmethod
  39. def count_user_role_by_role_id(cls, role_id: int) -> int:
  40. """
  41. 通过角色ID查询角色使用数量
  42. Args:
  43. role_id (int): 角色ID
  44. Returns:
  45. int: 使用该角色的用户数量
  46. """
  47. stmt = select(func.count()).select_from(SysUserRolePo) \
  48. .where(SysUserRolePo.role_id==role_id)
  49. return db.session.execute(stmt).scalar() or 0
  50. @classmethod
  51. @Transactional(db.session)
  52. def batch_user_role(cls, user_role_list: List[SysUserRole]) -> int:
  53. """
  54. 批量新增用户角色信息
  55. Args:
  56. user_role_list (List[SysUserRole]): 用户角色列表
  57. Returns:
  58. int: 影响的行数
  59. """
  60. user_role_list = [
  61. row.model_dump(
  62. exclude_none=True,
  63. exclude_unset=True
  64. )
  65. for row in user_role_list]
  66. stmt = insert(SysUserRolePo).values(user_role_list)
  67. return db.session.execute(stmt).rowcount
  68. @classmethod
  69. @Transactional(db.session)
  70. def delete_user_role_info(cls, user_role: SysUserRole) -> int:
  71. """
  72. 删除用户和角色关联信息
  73. Args:
  74. user_role (SysUserRole): 用户角色信息
  75. Returns:
  76. int: 影响的行数
  77. """
  78. stmt = delete(SysUserRolePo).where(
  79. SysUserRolePo.user_id==user_role.user_id,
  80. SysUserRolePo.role_id==user_role.role_id
  81. )
  82. return db.session.execute(stmt).rowcount
  83. @classmethod
  84. @Transactional(db.session)
  85. def delete_user_role_infos(cls, role_id: int, user_ids: List[int]) -> int:
  86. """
  87. 批量取消授权用户角色
  88. Args:
  89. role_id (int): 角色ID
  90. user_ids (List[int]): 用户ID列表
  91. Returns:
  92. int: 影响的行数
  93. """
  94. stmt = delete(SysUserRolePo).where(
  95. SysUserRolePo.user_id.in_(user_ids),
  96. SysUserRolePo.role_id==role_id
  97. )
  98. return db.session.execute(stmt).rowcount