129 lines
3.7 KiB
Python
129 lines
3.7 KiB
Python
|
|
# =============================================================================
|
|||
|
|
# 企微IT智能服务台 — 待办事项模型
|
|||
|
|
# =============================================================================
|
|||
|
|
# 说明:对应数据库 todo_items 表,存储坐席的待办事项
|
|||
|
|
# 待办类型:ticket(工单)/approval(审批)/device(设备) 等
|
|||
|
|
# =============================================================================
|
|||
|
|
|
|||
|
|
import uuid
|
|||
|
|
from datetime import datetime
|
|||
|
|
from typing import Any, Dict, Optional
|
|||
|
|
|
|||
|
|
from sqlalchemy import Boolean, DateTime, Integer, JSON, String
|
|||
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|||
|
|
|
|||
|
|
from app.database import Base
|
|||
|
|
|
|||
|
|
|
|||
|
|
class TodoItem(Base):
|
|||
|
|
"""待办事项模型 — 对应 todo_items 表。
|
|||
|
|
|
|||
|
|
存储坐席需要跟进的各类待办事项,包括工单、审批、设备处理等。
|
|||
|
|
|
|||
|
|
Attributes:
|
|||
|
|
id: 待办唯一标识(UUID,数据库自动生成)
|
|||
|
|
type: 待办类型(ticket/approval/device)
|
|||
|
|
title: 待办标题
|
|||
|
|
priority: 优先级(urgent/high/normal)
|
|||
|
|
description: 详细描述(JSON,存储结构化数据)
|
|||
|
|
status: 状态(pending/processing/resolved)
|
|||
|
|
assigned_agent_id: 分配的坐席ID(可为空,表示未分配)
|
|||
|
|
corp_id: 企业微信企业ID
|
|||
|
|
created_at: 创建时间
|
|||
|
|
updated_at: 更新时间
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
# 表名
|
|||
|
|
__tablename__ = "todo_items"
|
|||
|
|
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
# 字段定义
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
# 主键:UUID
|
|||
|
|
id: Mapped[str] = mapped_column(
|
|||
|
|
String(36),
|
|||
|
|
primary_key=True,
|
|||
|
|
default=lambda: str(uuid.uuid4()),
|
|||
|
|
comment="待办唯一标识",
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 待办类型
|
|||
|
|
type: Mapped[str] = mapped_column(
|
|||
|
|
String(20),
|
|||
|
|
nullable=False,
|
|||
|
|
default="ticket",
|
|||
|
|
comment="待办类型: ticket/approval/device",
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 待办标题
|
|||
|
|
title: Mapped[str] = mapped_column(
|
|||
|
|
String(256),
|
|||
|
|
nullable=False,
|
|||
|
|
default="",
|
|||
|
|
comment="待办标题",
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 优先级
|
|||
|
|
priority: Mapped[str] = mapped_column(
|
|||
|
|
String(20),
|
|||
|
|
nullable=False,
|
|||
|
|
default="normal",
|
|||
|
|
comment="优先级: urgent/high/normal",
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 详细描述(JSON 格式,存储结构化数据)
|
|||
|
|
description: Mapped[Dict[str, Any]] = mapped_column(
|
|||
|
|
JSON,
|
|||
|
|
nullable=False,
|
|||
|
|
default=dict,
|
|||
|
|
comment="详细描述",
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 状态
|
|||
|
|
status: Mapped[str] = mapped_column(
|
|||
|
|
String(20),
|
|||
|
|
nullable=False,
|
|||
|
|
default="pending",
|
|||
|
|
comment="状态: pending/processing/resolved",
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 分配的坐席ID(可为空,表示未分配)
|
|||
|
|
assigned_agent_id: Mapped[Optional[str]] = mapped_column(
|
|||
|
|
String(64),
|
|||
|
|
nullable=True,
|
|||
|
|
comment="分配的坐席ID",
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 企业微信企业ID
|
|||
|
|
corp_id: Mapped[str] = mapped_column(
|
|||
|
|
String(64),
|
|||
|
|
nullable=False,
|
|||
|
|
default="",
|
|||
|
|
comment="企业微信企业ID",
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 创建时间
|
|||
|
|
created_at: Mapped[datetime] = mapped_column(
|
|||
|
|
DateTime(timezone=True),
|
|||
|
|
nullable=False,
|
|||
|
|
default=datetime.now,
|
|||
|
|
comment="创建时间",
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 更新时间
|
|||
|
|
updated_at: Mapped[datetime] = mapped_column(
|
|||
|
|
DateTime(timezone=True),
|
|||
|
|
nullable=False,
|
|||
|
|
default=datetime.now,
|
|||
|
|
onupdate=datetime.now,
|
|||
|
|
comment="更新时间",
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
def __repr__(self) -> str:
|
|||
|
|
"""待办事项对象的字符串表示。"""
|
|||
|
|
return (
|
|||
|
|
f"<TodoItem(id={self.id}, type={self.type}, "
|
|||
|
|
f"title={self.title}, status={self.status})>"
|
|||
|
|
)
|