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})>"
|
|||
|
|
)
|