Skip to content

[工单] 执行失败工单支持手动关闭 #3268

Description

@Gygkimo95

需求描述(Describe)

背景

DMS 工单状态机当前只设计了"推进路径"未设计"衰减路径"——上线工单/导出工单执行失败后进入 exec_failed / 导出失败 状态,该状态无任何出口边,工单永久滞留在失败 Tab 中作为"待办"。

客户场景两难:

  • 若设计自动归档,会把"失败"这一异常信号时间性消声——创建人看不到、管理员无从兜底
  • 若完全不处理,失败单长期沉积为噪声待办,干扰其他业务操作

核心张力:"失败"是异常信号必须保留给人类确认,而非被自动清理模糊掉

目标

exec_failed(SQL 上线工单)和 导出失败(数据导出工单)两类状态补一条人工 ack 型的关闭出口边:

  • 保留失败信号可见性——���关闭失败单在列表 Tab 和 Dashboard"待处理工单"口径中持续可见
  • 支持创建人 ack 归档——"我知道了,不处理了" → 手动关闭后进入已关闭 Tab
  • 支持管理员批量代关——项目/平台管理员在批量清理场景下代位关闭
  • 与 20260401 自动关闭方案长期共存——手动 ack 是主轴,自动兜底是长期保险

功能范围

前端

  • SQL 上线工单详情页:exec_failed 状态下新增 [关闭工单] 按钮(按权限可见)+ 二次确认弹窗(关闭原因选填)
  • SQL 上线工单列表(Execution failed Tab):行内 [关闭] 按钮(按权限展示)+ [Batch close] 扩展覆盖失败单
  • 数据导出工单详情页 / 列表:同构覆盖(导出失败 状态下)
  • 已关闭 / 已归档 Tab:无变更(不新增"关闭方式"列、不新增筛选、不区分关闭来源)
  • 全局 Dashboard:"待处理工单"计数口径确认包含 exec_failed / 导出失败;不新增卡片/筛选/徽标

后端

  • 状态机:新增 exec_failed → canceled 边(SQL 上线工单 + 数据导出工单各一条)
  • 权限校验:关闭接口校验 当前用户 ∈ {创建人, 项目管理员, 平台管理员};批量按条逐一校验,越权单条跳过并反馈
  • 失败通知分发扩展:接收人从"创建人"扩展为"创建人 + 上线人";"上线人"识别覆盖立即上线 / 定时上线 / 定期执行(20260330)三种场景
  • 关闭通知分发:代关时通知原创建人 + 上线人;自关时通知上线人;批量关闭按接收人聚合发送
  • 审计:关闭原因写入工单操作日志;不新增 close_type 等结构化枚举,手动/自动区分由 closed_by(user_id / system)承载
  • 与 20260401 协同:手动关闭的工单退出自动关闭扫描队列

i18n

  • 按钮文案、两种二次确认弹窗文案、三类通知模板(代关→创建人、代关→上线人、自关→上线人)

跨需求影响(需 20260401 同步决策)

  • 建议 20260401 方案同步取消原设计的 close_type 枚举字段(改由 closed_by 承载)

权限模型(最终定稿)

角色 关闭范围 权限
工单创建人 自己创建的失败单 ✅ 主处置权
项目管理员 所属项目内任意失败单 ✅ 代关权
平台管理员 所有失败单 ✅ 代关权
审批人
工单上线人 ❌(虽不可关,但仍是失败通知必达接收对象)

核心约束:代关(操作者 ≠ 创建人)→ 关闭通知必达原创建人。

验收要点

  • 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.mdknowledge/pages/global_dashboard.md
  • 产品认知:knowledge/product_overview.md(工单状态机 + 失败工单处置归属)

实现方案

变更影响面

受影响的模块或功能

外部引用的潜在问题或风险

版本兼容性

测试建议

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions