Skip to content

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

@Gygkimo95

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions