job_log.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. # -*- coding: utf-8 -*-
  2. # @Author : YY
  3. from typing import List
  4. from flask import g
  5. from sqlalchemy import insert,delete,select
  6. from ruoyi_common.base.model import ExtraModel
  7. from ruoyi_common.sqlalchemy.model import ColumnEntityList
  8. from ruoyi_apscheduler.domain.po import SysJobLogPo
  9. from ruoyi_apscheduler.domain.entity import SysJobLog
  10. from ruoyi_admin.ext import db
  11. class SysJobLogMapper:
  12. default_fields = {
  13. "job_log_id", "job_name", "job_group", "invoke_target", "job_message",
  14. "status", "exception_info", "create_time"
  15. }
  16. default_columns = ColumnEntityList(SysJobLogPo, default_fields, False)
  17. @classmethod
  18. def select_job_log_list(cls, joblog:SysJobLog) -> List[SysJobLog]:
  19. """
  20. 查询任务日志列表
  21. Args:
  22. joblog (SysJobLog): 包含查询条件的数据传输对象
  23. Returns:
  24. List[SysJobLog]: 任务日志列表
  25. """
  26. criterions = []
  27. if joblog.job_name:
  28. criterions.append(SysJobLogPo.job_name.like(f"%{joblog.job_name}%"))
  29. if joblog.job_group:
  30. criterions.append(SysJobLogPo.job_group==joblog.job_group)
  31. if joblog.status:
  32. criterions.append(SysJobLogPo.status == joblog.status)
  33. if joblog.invoke_target:
  34. criterions.append(
  35. SysJobLogPo.invoke_target.like(f"%{joblog.invoke_target}%")
  36. )
  37. if "criterian_meta" in g and g.criterian_meta.extra:
  38. extra:ExtraModel = g.criterian_meta.extra
  39. if extra.start_time and extra.end_time:
  40. criterions.append(SysJobLogPo.create_time >= extra.start_time)
  41. criterions.append(SysJobLogPo.create_time <= extra.end_time)
  42. stmt = select(*cls.default_columns) \
  43. .where(*criterions)
  44. rows = db.session.execute(stmt).all()
  45. return [cls.default_columns.cast(row,SysJobLog) for row in rows]
  46. @classmethod
  47. def select_job_log_all(cls) -> List[SysJobLog]:
  48. """
  49. 查询所有任务日志
  50. Returns:
  51. List[SysJobLog]: 任务日志列表
  52. """
  53. stmt = select(*cls.default_columns)
  54. rows = db.session.execute(stmt).all()
  55. return [cls.default_columns.cast(row,SysJobLog) for row in rows]
  56. @classmethod
  57. def insert_job_log(cls, joblog:SysJobLog):
  58. """
  59. 新增任务日志
  60. Args:
  61. joblog (SysJobLog): 任务日志信息
  62. Returns:
  63. int: 影响的行数
  64. """
  65. fields = {
  66. "job_log_id", "job_name", "job_group", "invoke_target", "job_message",
  67. "status", "exception_info", "create_time"
  68. }
  69. data = joblog.model_dump(
  70. include=fields,exclude_unset=True,exclude_none=True
  71. )
  72. stmt = insert(SysJobLogPo).values(data)
  73. return db.session.execute(stmt).rowcount
  74. @classmethod
  75. def delete_job_log_by_id(cls, job_id:int):
  76. """
  77. 根据任务日志ID,删除任务日志
  78. Args:
  79. job_id (int): 任务日志ID
  80. Returns:
  81. int: 影响的行数
  82. """
  83. stmt = delete(SysJobLogPo).where(SysJobLogPo.job_log_id==job_id)
  84. return db.session.execute(stmt).rowcount
  85. @classmethod
  86. def delete_job_log_by_ids(cls, job_ids:List[int]):
  87. """
  88. 根据任务日志ID列表,删除任务日志
  89. Args:
  90. job_ids (List[int]): 任务日志ID列表
  91. Returns:
  92. int: 影响的行数
  93. """
  94. stmt = delete(SysJobLogPo).where(SysJobLogPo.job_log_id.in_(job_ids))
  95. return db.session.execute(stmt).rowcount
  96. @classmethod
  97. def clean_job_logs(cls):
  98. """
  99. 清空任务日志
  100. Returns:
  101. int: 影响的行数
  102. """
  103. stmt = delete(SysJobLogPo)
  104. return db.session.execute(stmt).rowcount