123 lines
4.1 KiB
Python
123 lines
4.1 KiB
Python
# =============================================================================
|
||
# 企微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"<ConversationEvaluation(id={self.id}, "
|
||
f"conversation_id={self.conversation_id}, "
|
||
f"star_rating={self.star_rating}, emoji={self.emoji})>"
|
||
)
|