需求描述(Describe)
背景
DMS 工单状态机当前只设计了"推进路径"未设计"衰减路径"——上线工单/导出工单执行失败后进入 exec_failed / 导出失败 状态,该状态无任何出口边,工单永久滞留在失败 Tab 中作为"待办"。
客户场景两难:
- 若设计自动归档,会把"失败"这一异常信号时间性消声——创建人看不到、管理员无从兜底
- 若完全不处理,失败单长期沉积为噪声待办,干扰其他业务操作
核心张力:"失败"是异常信号必须保留给人类确认,而非被自动清理模糊掉。
目标
为 exec_failed(SQL 上线工单)和 导出失败(数据导出工单)两类状态补一条人工 ack 型的关闭出口边:
- 保留失败信号可见性——未关闭失败单在列表 Tab 和 Dashboard"待处理工单"口径中持续可见
- 支持创建人 ack 归档——"我知道了,不处理了" → 手动关闭后进入已关闭 Tab
- 支持管理员批量代关——项目/平台管理员在批量清理场景下代位关闭
- 与 20260401 自动关闭方案长期共存——手动 ack 是主轴,自动兜底是长期保险
功能范围
前端
后端
i18n
跨需求影响(需 20260401 同步决策)
权限模型(最终定稿)
| 角色 |
关闭范围 |
权限 |
| 工单创建人 |
自己创建的失败单 |
✅ 主处置权 |
| 项目管理员 |
所属项目内任意失败单 |
✅ 代关权 |
| 平台管理员 |
所有失败单 |
✅ 代关权 |
| 审批人 |
— |
❌ |
| 工单上线人 |
— |
❌(虽不可关,但仍是失败通知必达接收对象) |
核心约束:代关(操作者 ≠ 创建人)→ 关闭通知必达原创建人。
验收要点
- AC-状态机:
exec_failed → canceled / 导出失败 → 已关闭 打通;canceled 为终态,不提供重新打开入口;手动关闭后该工单不再进入 20260401 扫描队列
- AC-权限:前端按钮可见性与后端接口 403 分别验证;批量时越权单条跳过且在确认弹窗提示
- AC-通知:失败时必达创建人 + 上线人(上线人 == 创建人时不重复);自关仅通知上线人,不自通知;代关必达原创建人 + 上线人;批量按接收人聚合
- AC-列表联动:关闭后从失败 Tab 移出、进入已关闭 Tab;已关闭列表一视同仁,不区分来源
- AC-Dashboard 联动:失败工单计入"待处理工单"计数;关闭后数字 -1
- AC-审计:每次关闭生成操作日志(操作人 / 时间 / 关闭原因);不引入
close_type 字段;批量关闭为每条工单生成独立日志
- AC-二次确认:单条弹二次确认含"关闭原因(选填)";批量只弹一次汇总确认框,原因作用所有选中工单
- AC-20260401 协同:已发"即将自动关闭"前置通知的单,期间被手动关闭 → 自动关闭流程静默跳过
- AC-i18n:中英文覆盖;中文 Tab 名称沿用既有文案(
已关闭 / 已归档),不为本需求改名
完整场景推演(8 个端到端场景)与全量验收点(9 组 26+ 条)见需求分析文档 Phase 6.11。
关联文档
- 需求分析:
knowledge/requirements/20260420_失败工单手动关闭.md(PMforDMS 仓)
- 兄弟需求(自动关闭,长期共存):
knowledge/requirements/20260401_失败工单自动关闭.md
- 相关页面知识:
knowledge/pages/workflow_list.md、knowledge/pages/global_dashboard.md
- 产品认知:
knowledge/product_overview.md(工单状态机 + 失败工单处置归属)
实现方案
变更影响面
受影响的模块或功能
外部引用的潜在问题或风险
版本兼容性
测试建议
需求描述(Describe)
背景
DMS 工单状态机当前只设计了"推进路径"未设计"衰减路径"——上线工单/导出工单执行失败后进入
exec_failed/导出失败状态,该状态无任何出口边,工单永久滞留在失败 Tab 中作为"待办"。客户场景两难:
核心张力:"失败"是异常信号必须保留给人类确认,而非被自动清理模糊掉。
目标
为
exec_failed(SQL 上线工单)和导出失败(数据导出工单)两类状态补一条人工 ack 型的关闭出口边:功能范围
前端
exec_failed状态下新增[关闭工单]按钮(按权限可见)+ 二次确认弹窗(关闭原因选填)Execution failedTab):行内[关闭]按钮(按权限展示)+[Batch close]扩展覆盖失败单导出失败状态下)exec_failed/导出失败;不新增卡片/筛选/徽标后端
exec_failed → canceled边(SQL 上线工单 + 数据导出工单各一条)当前用户 ∈ {创建人, 项目管理员, 平台管理员};批量按条逐一校验,越权单条跳过并反馈close_type等结构化枚举,手动/自动区分由closed_by(user_id /system)承载i18n
跨需求影响(需 20260401 同步决策)
close_type枚举字段(改由closed_by承载)权限模型(最终定稿)
核心约束:代关(操作者 ≠ 创建人)→ 关闭通知必达原创建人。
验收要点
exec_failed → canceled/导出失败 → 已关闭打通;canceled为终态,不提供重新打开入口;手动关闭后该工单不再进入 20260401 扫描队列close_type字段;批量关闭为每条工单生成独立日志已关闭/已归档),不为本需求改名关联文档
knowledge/requirements/20260420_失败工单手动关闭.md(PMforDMS 仓)knowledge/requirements/20260401_失败工单自动关闭.mdknowledge/pages/workflow_list.md、knowledge/pages/global_dashboard.mdknowledge/product_overview.md(工单状态机 + 失败工单处置归属)实现方案
变更影响面
受影响的模块或功能
外部引用的潜在问题或风险
版本兼容性
测试建议