from sqlalchemy import Column, Integer, String, Text, DateTime, Float, Boolean, ForeignKey from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship from datetime import datetime Base = declarative_base() class WorkOrder(Base): """工单模型""" __tablename__ = "work_orders" id = Column(Integer, primary_key=True) order_id = Column(String(50), unique=True, nullable=False) title = Column(String(200), nullable=False) description = Column(Text, nullable=False) category = Column(String(100), nullable=False) priority = Column(String(20), nullable=False) status = Column(String(20), nullable=False) created_at = Column(DateTime, default=datetime.now) updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now) resolution = Column(Text) satisfaction_score = Column(Float) # 关联对话记录 conversations = relationship("Conversation", back_populates="work_order") class Conversation(Base): """对话记录模型""" __tablename__ = "conversations" id = Column(Integer, primary_key=True) work_order_id = Column(Integer, ForeignKey("work_orders.id")) user_message = Column(Text, nullable=False) assistant_response = Column(Text, nullable=False) timestamp = Column(DateTime, default=datetime.now) confidence_score = Column(Float) knowledge_used = Column(Text) # 使用的知识库条目 response_time = Column(Float) # 响应时间(秒) work_order = relationship("WorkOrder", back_populates="conversations") class KnowledgeEntry(Base): """知识库条目模型""" __tablename__ = "knowledge_entries" id = Column(Integer, primary_key=True) question = Column(Text, nullable=False) answer = Column(Text, nullable=False) category = Column(String(100), nullable=False) confidence_score = Column(Float, default=0.0) usage_count = Column(Integer, default=0) created_at = Column(DateTime, default=datetime.now) updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now) is_active = Column(Boolean, default=True) is_verified = Column(Boolean, default=False) # 是否已验证 verified_by = Column(String(100)) # 验证人 verified_at = Column(DateTime) # 验证时间 vector_embedding = Column(Text) # 向量嵌入的JSON字符串 class VehicleData(Base): """车辆实时数据模型""" __tablename__ = "vehicle_data" id = Column(Integer, primary_key=True) vehicle_id = Column(String(50), nullable=False) # 车辆ID vehicle_vin = Column(String(17)) # 车架号 data_type = Column(String(50), nullable=False) # 数据类型(位置、状态、故障等) data_value = Column(Text, nullable=False) # 数据值(JSON格式) timestamp = Column(DateTime, default=datetime.now) # 数据时间戳 is_active = Column(Boolean, default=True) # 是否有效 # 索引 __table_args__ = ( {'extend_existing': True} ) class Analytics(Base): """分析统计模型""" __tablename__ = "analytics" id = Column(Integer, primary_key=True) date = Column(DateTime, nullable=False) total_orders = Column(Integer, default=0) resolved_orders = Column(Integer, default=0) avg_resolution_time = Column(Float, default=0.0) satisfaction_avg = Column(Float, default=0.0) knowledge_hit_rate = Column(Float, default=0.0) category_distribution = Column(Text) # JSON格式的类别分布 created_at = Column(DateTime, default=datetime.now) class Alert(Base): """预警模型""" __tablename__ = "alerts" id = Column(Integer, primary_key=True) rule_name = Column(String(100), nullable=False) alert_type = Column(String(50), nullable=False) level = Column(String(20), nullable=False) # info, warning, error, critical message = Column(Text, nullable=False) data = Column(Text) # JSON格式的预警数据 is_active = Column(Boolean, default=True) created_at = Column(DateTime, default=datetime.now) resolved_at = Column(DateTime)