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