"""定时任务模型 — 基于纯SQL的自动化任务。""" from sqlalchemy import Column, Integer, String, Text, Boolean, DateTime, ForeignKey, func from app.core.database import Base class ScheduledTask(Base): """定时任务:insert / update / delete 三种类型,指定数据源+库表+纯SQL。""" __tablename__ = "scheduled_tasks" id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(100), nullable=False) description = Column(Text, nullable=True) task_sql_type = Column(String(20), nullable=False, default="insert") # insert / update / delete instance_id = Column(Integer, ForeignKey("instances.id", ondelete="CASCADE"), nullable=False) target_db = Column(String(100), nullable=True) target_table = Column(String(100), nullable=True) sql_content = Column(Text, nullable=False) cron_expression = Column(String(50), nullable=False) is_enabled = Column(Boolean, default=True) # 运行状态 last_run_at = Column(DateTime, nullable=True) last_run_status = Column(String(20), nullable=True) # success / failed last_run_message = Column(Text, nullable=True) next_run_at = Column(DateTime, nullable=True) run_count = Column(Integer, default=0) created_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL"), nullable=True) created_at = Column(DateTime, server_default=func.now()) updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now()) class ScheduledTaskLog(Base): """定时任务执行日志。""" __tablename__ = "scheduled_task_logs" id = Column(Integer, primary_key=True, autoincrement=True) task_id = Column(Integer, ForeignKey("scheduled_tasks.id", ondelete="CASCADE"), nullable=False) status = Column(String(20), nullable=False) # success / failed / running sql_content = Column(Text, nullable=True) affected_rows = Column(Integer, default=0) duration_ms = Column(Integer, nullable=True) error_message = Column(Text, nullable=True) started_at = Column(DateTime, server_default=func.now()) finished_at = Column(DateTime, nullable=True)