目标仓库: perfect-panel/backend
目标分支: next
规划基线: origin/main@ea28a7685f4c89f91895c4d789a5726e806aa3f0
目标
在已有工单基础上补齐客服生命周期:分类、优先级、分配、状态机、SLA、附件、内部备注、用户/管理员通知、审计和列表 Read Model。该项作为 P1 运营能力保留;若另有安全隔离或敏感泄露缺陷,应由对应 P0 安全项单独处理。
源码已有
- 已有
ticket / ticket_follow、Pending / Waiting / Processed / Closed 状态、用户/管理员创建、回复、详情、状态变更。
- 已有 Telegram 话题镜像和用户隔离测试。
- 当前缺少状态机校验、分类/优先级/分配、附件、内部备注、SLA、RBAC 和完整审计。
范围
- 定义工单状态机:新建、待客服、待用户、处理中、已解决、已关闭、重开;限制非法跳转。
- 支持分类、优先级、标签、负责人/协作者、SLA 到期时间、首次响应时间和解决时间。
- 支持附件引用对象存储、内部备注、用户可见回复、管理员备注和系统事件。
- 用户端/管理员端通知接入统一通知中心,避免重复散落发送逻辑。
- 工单列表遵循统一 Read Model:用户摘要、处理人摘要、最后回复、SLA 状态、附件数、未读数。
明确不做
数据 / API / 流程
- 数据:ticket_categories、ticket_assignments、ticket_events、ticket_sla_policies、ticket_attachments、ticket_internal_notes。
- API:
- Public:创建工单、回复、上传附件、关闭/重开、查看状态和 SLA 提示。
- Admin:分类/优先级/分配、回复、内部备注、状态迁移、批量操作、SLA 策略配置。
- 流程:用户创建 → 自动分类/分配可选 → 首响计时 → 待用户/待客服流转 → 解决 → 关闭 → 评价/重开。
RBAC / 审计
- 查看、回复、分配、修改优先级、内部备注、关闭、重开、批量导出分别登记权限点。
- 所有状态迁移、分配、内部备注、附件删除和批量操作写管理员审计。
- 用户可见事件与内部备注严格分离;导出遵循权限投影和脱敏。
验收
- 非法状态跳转返回明确 4xx,不产生半更新。
- 用户只能访问自己的工单;管理员按 RBAC 和业务资源归属校验访问。
- 附件删除遵循对象存储引用保护,私有文件不暴露长期签名 URL。
- SLA 到期、分配、回复、关闭和重开均产生可查询事件。
- 工单列表一次 API 返回页面展示所需摘要,无前端 N+1 查询。
- OpenAPI 覆盖 Public/Admin 工单流程、错误码、状态枚举和权限边界。
依赖
开发与测试门禁
- MySQL/PostgreSQL 迁移、OpenAPI 契约、RBAC API 权限点、管理员审计和敏感信息脱敏测试必须同步提交。
- 复用现有源码能力和 P0 底座,不重复实现支付、订阅、流量、修复命令或发布门禁执行层。
目标
在已有工单基础上补齐客服生命周期:分类、优先级、分配、状态机、SLA、附件、内部备注、用户/管理员通知、审计和列表 Read Model。该项作为 P1 运营能力保留;若另有安全隔离或敏感泄露缺陷,应由对应 P0 安全项单独处理。
源码已有
ticket/ticket_follow、Pending / Waiting / Processed / Closed 状态、用户/管理员创建、回复、详情、状态变更。范围
明确不做
数据 / API / 流程
RBAC / 审计
验收
依赖
开发与测试门禁