Files

49 lines
2.1 KiB
Python
Raw Permalink Normal View History

from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey, JSON, Text
from sqlalchemy.sql import func
from app.core.database import Base
class PredictionTask(Base):
"""AI预测任务元数据"""
__tablename__ = "prediction_tasks"
id = Column(Integer, primary_key=True, autoincrement=True)
device_id = Column(Integer, ForeignKey("devices.id"))
prediction_type = Column(String(50), nullable=False) # pv, load, heatpump, optimization
horizon_hours = Column(Integer, default=24)
status = Column(String(20), default="pending") # pending, running, completed, failed
parameters = Column(JSON) # extra config for the prediction run
error_message = Column(Text)
created_at = Column(DateTime(timezone=True), server_default=func.now())
completed_at = Column(DateTime(timezone=True))
class PredictionResult(Base):
"""AI预测结果时序数据"""
__tablename__ = "prediction_results"
id = Column(Integer, primary_key=True, autoincrement=True)
task_id = Column(Integer, ForeignKey("prediction_tasks.id"), nullable=False, index=True)
timestamp = Column(DateTime(timezone=True), nullable=False, index=True)
predicted_value = Column(Float, nullable=False)
confidence_lower = Column(Float)
confidence_upper = Column(Float)
actual_value = Column(Float) # filled later for accuracy tracking
unit = Column(String(20))
class OptimizationSchedule(Base):
"""AI优化调度建议"""
__tablename__ = "optimization_schedules"
id = Column(Integer, primary_key=True, autoincrement=True)
device_id = Column(Integer, ForeignKey("devices.id"))
date = Column(DateTime(timezone=True), nullable=False, index=True)
schedule_data = Column(JSON) # hourly on/off + setpoints
expected_savings_kwh = Column(Float, default=0)
expected_savings_yuan = Column(Float, default=0)
status = Column(String(20), default="pending") # pending, approved, executed, rejected
approved_by = Column(Integer, ForeignKey("users.id"))
approved_at = Column(DateTime(timezone=True))
created_at = Column(DateTime(timezone=True), server_default=func.now())