job.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. # -*- coding: utf-8 -*-
  2. # @Author : YY
  3. from typing import List, Optional
  4. from sqlalchemy import insert,update,delete,select
  5. from ruoyi_common.sqlalchemy.model import ColumnEntityList
  6. from ruoyi_apscheduler.domain.po import SysJobPo
  7. from ruoyi_apscheduler.domain.entity import SysJob
  8. from ruoyi_admin.ext import db
  9. class SysJobMapper:
  10. default_fields = {
  11. "job_id","job_name","job_group","invoke_target","cron_expression", \
  12. "misfire_policy","concurrent","status","create_by","create_time", \
  13. "remark"
  14. }
  15. default_columns = ColumnEntityList(SysJobPo, default_fields, False)
  16. @classmethod
  17. def select_job_list(cls, job:SysJob) -> List[SysJob]:
  18. """
  19. 有条件查询任务列表
  20. Args:
  21. job (SysJob): 查询条件
  22. Returns:
  23. List[SysJob]: 任务列表
  24. """
  25. criterions = []
  26. if job.job_name:
  27. criterions.append(SysJobPo.job_name.like(f"%{job.job_name}%"))
  28. if job.job_group:
  29. criterions.append(SysJobPo.job_group==job.job_group)
  30. if job.status:
  31. criterions.append(SysJobPo.status == job.status)
  32. if job.invoke_target:
  33. criterions.append(
  34. SysJobPo.invoke_target.like(f"%{job.invoke_target}%")
  35. )
  36. stmt = select(*cls.default_columns) \
  37. .where(*criterions)
  38. rows = db.session.execute(stmt).all()
  39. return [cls.default_columns.cast(row,SysJob) for row in rows]
  40. @classmethod
  41. def select_job_all(cls) -> List[SysJob]:
  42. """
  43. 查询所有任务
  44. Returns:
  45. List[SysJob]: 任务列表
  46. """
  47. stmt = select(*cls.default_columns).select_from(SysJobPo)
  48. rows = db.session.execute(stmt).all()
  49. return [cls.default_columns.cast(row,SysJob) for row in rows]
  50. @classmethod
  51. def select_job_by_id(cls, job_id:int) -> Optional[SysJob]:
  52. """
  53. 根据任务ID,查询任务
  54. Args:
  55. job_id (int): 任务ID
  56. Returns:
  57. Optional[SysJob]: 任务
  58. """
  59. stmt = select(*cls.default_columns) \
  60. .where(SysJobPo.job_id==job_id)
  61. row = db.session.execute(stmt).one_or_none()
  62. return cls.default_columns.cast(row,SysJob) if row else None
  63. @classmethod
  64. def insert_job(cls, job:SysJob) -> Optional[int]:
  65. """
  66. 新增任务
  67. Args:
  68. job (SysJob): 任务
  69. Returns:
  70. Optional[int]: 任务ID
  71. """
  72. fields = {
  73. "job_id","job_name","job_group","invoke_target","cron_expression", \
  74. "misfire_policy","concurrent","status","create_by","create_time", \
  75. "remark"
  76. }
  77. data = job.model_dump(
  78. include=fields,exclude_unset=True,exclude_none=True
  79. )
  80. stmt = insert(SysJobPo).values(data)
  81. return db.session.execute(stmt).scalar_one_or_none()
  82. @classmethod
  83. def update_job(cls, job:SysJob) -> int:
  84. """
  85. 更新任务
  86. Args:
  87. job (SysJob): 任务
  88. Returns:
  89. int: 影响行数
  90. """
  91. fields = {
  92. "job_name","job_group","invoke_target","cron_expression", \
  93. "misfire_policy","concurrent","status","update_by","update_time", \
  94. "remark"
  95. }
  96. data = job.model_dump(
  97. include=fields,exclude_unset=True,exclude_none=True
  98. )
  99. stmt = update(SysJobPo) \
  100. .where(SysJobPo.job_id==job.job_id) \
  101. .values(data)
  102. return db.session.execute(stmt).rowcount
  103. @classmethod
  104. def delete_job_by_id(cls, job_id:int) -> int:
  105. """
  106. 根据任务ID,删除任务
  107. Args:
  108. job_id (int): 任务ID
  109. Returns:
  110. int: 影响行数
  111. """
  112. stmt = delete(SysJobPo).where(SysJobPo.job_id==job_id)
  113. return db.session.execute(stmt).rowcount
  114. @classmethod
  115. def delete_job_by_ids(cls, job_ids:List[int]) -> int:
  116. """
  117. 根据任务ID列表,删除任务
  118. Args:
  119. job_ids (List[int]): 任务ID列表
  120. Returns:
  121. int: 影响行数
  122. """
  123. stmt = delete(SysJobPo).where(SysJobPo.job_id.in_(job_ids))
  124. return db.session.execute(stmt).rowcount