# ============================================================================= # 企微IT智能服务台 — 满意度评价模型 # ============================================================================= # 说明:对应数据库 conversation_evaluations 表,存储会话满意度评价数据 # 核心概念:每个会话结束后,员工对本次服务进行满意度评价 # 评价要素:星级(1-5)、表情(满意/一般/不满意)、文字反馈 # ============================================================================= import uuid from datetime import datetime from typing import Optional from sqlalchemy import DateTime, Index, Integer, String, Text from sqlalchemy.orm import Mapped, mapped_column from app.database import Base class ConversationEvaluation(Base): """满意度评价模型 — 对应 conversation_evaluations 表。 在会话结束后,员工对本次IT服务进行满意度评价。 评价数据关联会话ID,用于服务质量分析和改进。 Attributes: id: 评价记录唯一标识(UUID,数据库自动生成) conversation_id: 关联的会话ID(关联 conversations 表) employee_id: 评价员工UserID employee_name: 评价员工姓名(冗余存储) star_rating: 星级评分(1-5) emoji: 表情评价(satisfied:满意/neutral:一般/dissatisfied:不满意) feedback_text: 文字反馈(可选,限200字) created_at: 评价时间 """ # 表名 __tablename__ = "conversation_evaluations" # -------------------------------------------------------------------------- # 字段定义 # -------------------------------------------------------------------------- # 主键:UUID,Python端生成 id: Mapped[str] = mapped_column( String(36), primary_key=True, default=lambda: str(uuid.uuid4()), ) # 关联的会话ID(关联 conversations 表) conversation_id: Mapped[str] = mapped_column( String(36), nullable=False, comment="关联的会话ID", ) # 评价员工UserID employee_id: Mapped[str] = mapped_column( String(64), nullable=False, comment="评价员工UserID", ) # 评价员工姓名(冗余存储) employee_name: Mapped[str] = mapped_column( String(128), nullable=False, default="", comment="评价员工姓名", ) # 星级评分(1-5) star_rating: Mapped[int] = mapped_column( Integer, nullable=False, comment="星级评分(1-5)", ) # 表情评价 # satisfied: 满意 😀 # neutral: 一般 😐 # dissatisfied: 不满意 😞 emoji: Mapped[str] = mapped_column( String(20), nullable=False, comment="表情评价(satisfied/neutral/dissatisfied)", ) # 文字反馈(可选,限200字) feedback_text: Mapped[Optional[str]] = mapped_column( Text, nullable=True, comment="文字反馈(可选,限200字)", ) # 评价时间 created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), nullable=False, default=datetime.now, comment="评价时间", ) # -------------------------------------------------------------------------- # 索引定义 # -------------------------------------------------------------------------- __table_args__ = ( # 按会话ID查询(获取某会话的评价) Index("idx_evaluations_conversation_id", "conversation_id"), # 按员工ID查询(查询某员工的评价历史) Index("idx_evaluations_employee_id", "employee_id"), # 按创建时间倒序查询 Index("idx_evaluations_created_at", "created_at"), ) def __repr__(self) -> str: """评价对象的字符串表示。""" return ( f"" )