sys_user_post.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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 SysUserPost
  7. from ruoyi_system.domain.po import SysUserPostPo
  8. from ruoyi_admin.ext import db
  9. class SysUserPostMapper:
  10. """
  11. 用户与岗位相关联的数据访问层
  12. """
  13. @classmethod
  14. @Transactional(db.session)
  15. def delete_user_post_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(SysUserPostPo).where(SysUserPostPo.user_id == user_id)
  24. return db.session.execute(stmt).rowcount
  25. @classmethod
  26. def count_user_post_by_id(cls, post_id: int) -> int:
  27. """
  28. 通过岗位ID查询岗位使用数量
  29. Args:
  30. post_id (int): 岗位ID
  31. Returns:
  32. int: 使用该岗位的用户数量
  33. """
  34. stmt = select(func.count()).select_from(SysUserPostPo) \
  35. .where(SysUserPostPo.post_id == post_id)
  36. return db.session.execute(stmt).scalar_one_or_none() or 0
  37. @classmethod
  38. @Transactional(db.session)
  39. def delete_user_post(cls, ids: List[int]) -> int:
  40. """
  41. 批量删除用户和岗位关联
  42. Args:
  43. ids (List[int]): 用户ID列表
  44. Returns:
  45. int: 影响的行数
  46. """
  47. stmt = delete(SysUserPostPo).where(SysUserPostPo.user_id.in_(ids))
  48. return db.session.execute(stmt).rowcount
  49. @classmethod
  50. @Transactional(db.session)
  51. def batch_user_post(cls, user_post_list: List[SysUserPost]) -> int:
  52. """
  53. 批量新增用户岗位信息
  54. Args:
  55. user_post_list (List[SysUserPost]): 用户岗位列表
  56. Returns:
  57. int: 影响的行数
  58. """
  59. user_post_list = [
  60. row.model_dump(
  61. exclude_none=True,
  62. exclude_unset=True
  63. )
  64. for row in user_post_list]
  65. stmt = insert(SysUserPostPo).values(user_post_list)
  66. return db.session.execute(stmt).rowcount