Files
FastapiAdmin/backend/app/plugin/module_application/job/model.py
T
zhangtao 1d54dca76c style: 统一代码格式和字符串引号使用
refactor: 优化代码结构和可读性

feat: 添加http_limit模块实现请求限制功能

fix: 修复异步任务中使用time.sleep的问题

chore: 更新依赖项并添加pytest测试框架

docs: 更新项目描述信息

perf: 优化Redis序列化方式使用JSON替代pickle

test: 添加测试相关配置和依赖
2026-01-17 20:07:25 +08:00

87 lines
3.4 KiB
Python

from sqlalchemy import Boolean, ForeignKey, Integer, String, Text
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.core.base_model import ModelMixin, UserMixin
class JobModel(ModelMixin, UserMixin):
"""
定时任务调度表
- 0: 运行中
- 1: 暂停中
"""
__tablename__: str = "app_job"
__table_args__: dict[str, str] = {"comment": "定时任务调度表"}
__loader_options__: list[str] = ["job_logs", "created_by", "updated_by"]
name: Mapped[str | None] = mapped_column(
String(64), nullable=True, default="", comment="任务名称"
)
jobstore: Mapped[str | None] = mapped_column(
String(64), nullable=True, default="default", comment="存储器"
)
executor: Mapped[str | None] = mapped_column(
String(64), nullable=True, default="default", comment="执行器"
)
trigger: Mapped[str] = mapped_column(String(64), nullable=False, comment="触发器")
trigger_args: Mapped[str | None] = mapped_column(Text, nullable=True, comment="触发器参数")
func: Mapped[str] = mapped_column(Text, nullable=False, comment="任务函数")
args: Mapped[str | None] = mapped_column(Text, nullable=True, comment="位置参数")
kwargs: Mapped[str | None] = mapped_column(Text, nullable=True, comment="关键字参数")
coalesce: Mapped[bool] = mapped_column(
Boolean,
nullable=True,
default=False,
comment="是否合并运行",
)
max_instances: Mapped[int] = mapped_column(
Integer, nullable=True, default=1, comment="最大实例数"
)
start_date: Mapped[str | None] = mapped_column(String(64), nullable=True, comment="开始时间")
end_date: Mapped[str | None] = mapped_column(String(64), nullable=True, comment="结束时间")
# 关联关系
job_logs: Mapped[list["JobLogModel"] | None] = relationship(
back_populates="job", lazy="selectin"
)
class JobLogModel(ModelMixin):
"""
定时任务调度日志表
"""
__tablename__: str = "app_job_log"
__table_args__: dict[str, str] = {"comment": "定时任务调度日志表"}
__loader_options__: list[str] = ["job"]
job_name: Mapped[str] = mapped_column(String(64), nullable=False, comment="任务名称")
job_group: Mapped[str] = mapped_column(String(64), nullable=False, comment="任务组名")
job_executor: Mapped[str] = mapped_column(String(64), nullable=False, comment="任务执行器")
invoke_target: Mapped[str] = mapped_column(
String(500), nullable=False, comment="调用目标字符串"
)
job_args: Mapped[str | None] = mapped_column(
String(255), nullable=True, default="", comment="位置参数"
)
job_kwargs: Mapped[str | None] = mapped_column(
String(255), nullable=True, default="", comment="关键字参数"
)
job_trigger: Mapped[str | None] = mapped_column(
String(255), nullable=True, default="", comment="任务触发器"
)
job_message: Mapped[str | None] = mapped_column(
String(500), nullable=True, default="", comment="日志信息"
)
exception_info: Mapped[str | None] = mapped_column(
String(2000), nullable=True, default="", comment="异常信息"
)
# 任务关联
job_id: Mapped[int | None] = mapped_column(
ForeignKey("app_job.id", ondelete="CASCADE"), nullable=True, index=True, comment="任务ID"
)
job: Mapped["JobModel | None"] = relationship(back_populates="job_logs", lazy="selectin")