104 lines
4.0 KiB
Python
104 lines
4.0 KiB
Python
|
|
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)
|