You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
2.2 KiB

"""
缓存任务模型
"""
from datetime import datetime, date
from sqlalchemy import Column, Integer, BigInteger, String, Numeric, Text, Date, DateTime, ForeignKey
from sqlalchemy.orm import relationship
from app.db.base import Base
class CacheTask(Base):
"""缓存任务表"""
__tablename__ = "cache_tasks"
id = Column(Integer, primary_key=True, index=True)
task_name = Column(String(200), nullable=False)
task_type = Column(String(50), nullable=False) # detect_missing, cache_data, sync_data
security_type = Column(String(20), nullable=False) # stock, future, index
period_type = Column(String(10)) # daily, min1, min5, etc.
start_date = Column(Date, nullable=False)
end_date = Column(Date, nullable=False)
code_list = Column(Text) # 逗号分隔的代码列表
status = Column(String(20), default="pending") # pending, running, completed, failed, cancelled
progress = Column(Numeric(5, 2), default=0)
total_count = Column(Integer, default=0)
success_count = Column(Integer, default=0)
error_count = Column(Integer, default=0)
error_message = Column(Text)
created_by = Column(Integer, ForeignKey("users.id"))
created_at = Column(DateTime(timezone=True), default=datetime.utcnow)
started_at = Column(DateTime(timezone=True))
completed_at = Column(DateTime(timezone=True))
details = relationship("CacheTaskDetail", back_populates="task", cascade="all, delete-orphan")
class CacheTaskDetail(Base):
"""缓存任务详情表"""
__tablename__ = "cache_task_details"
id = Column(BigInteger, primary_key=True, index=True)
task_id = Column(Integer, ForeignKey("cache_tasks.id", ondelete="CASCADE"), nullable=False, index=True)
code = Column(String(20), nullable=False, index=True)
trade_date = Column(Date, nullable=False)
expected_count = Column(Integer, default=0)
actual_count = Column(Integer, default=0)
is_missing = Column(Integer, default=0)
status = Column(String(20), default="pending") # pending, success, failed, skipped
error_message = Column(Text)
processed_at = Column(DateTime(timezone=True))
created_at = Column(DateTime(timezone=True), default=datetime.utcnow)
task = relationship("CacheTask", back_populates="details")