现象
费用单审批流程(workflows.costSheetsApproval)中,加签节点(会签)的全部审批人均已同意,单据仍为「审批中」,但:
- 审批历史不再出现下一审批节点任务
- 流程实例状态仍为进行中(
instanceStatus = 1) - 业务上表现为「流程断了」:无人待办、也无法继续往下批
同流程、同样「双人加签」的其他费用单在相近时间可正常进入后续审批并结束,当前仅发现个别实例卡死。
正常路径(对照)
发起 → 加签(多人会签)→ 审批节点 A → 审批节点 B → 结束(+ 抄送)
异常路径(问题单)
发起 → 加签人1同意 → 加签人2同意 → ✗ 未创建下一审批节点待办(空转)
运行时证据(脱敏)
| 项 | 值 |
|---|---|
| 模型 | models.costSheets |
| 工作流 | workflows.costSheetsApproval |
| 单据状态 | 审批中 |
| 流程实例 | 进行中,无下一节点 |
| 加签节点 | nGFVHP(审批人取自成员字段,会签 approveRule.checked=1) |
| 预期下一节点 | tCmHeZ(角色审批) |
| 访问日志 | 末次同意 WorkflowSvc/doHandle HTTP 200,无 5xx |
| 应用日志 | 对应时段 无 Traceback;同意当日上午的详细 server.log 已轮转,无法还原 doHandle 内部栈 |
| 复操作 | 卡住后再次对同一审批页执行 doHandle 仍 HTTP 200,流程仍不前进 |
配置隐患(可能相关,非本单独有充分条件)
workflows/costSheetsApproval/config.json 连线 fromPort 存在命名错误(与历史销售订单审批「同意后到不了结束」同类问题):
| 连线 | 当前 fromPort | 疑似应为 |
|---|---|---|
nGFVHP → tCmHeZ |
bottom-tCmHeZ |
bottom-nGFVHP |
LzjFTe → EndNode |
bottom-tCmHeZ |
bottom-LzjFTe |
说明:多数同配置单据仍能从加签进入 tCmHeZ,故 fromPort 更像隐患/偶发诱因;本单直接表现是「会签完成后未生成下一节点」。
影响
- 卡死实例无法自愈;改配置不会自动修复已卡住实例
- 业务侧目前只能:撤销实例后重新发起(加签需重批)
期望
- 会签全部同意后,稳定创建下一节点待办并继续流转
- 明确
fromPort写错时引擎行为(严格匹配 / 单出边回退),并给出配置校验或设计器纠错 - 提供卡死实例的运维手段(强制推进 / 安全重放下一节点),避免只能整单撤销重提
- 建议保留或加长工作流
doHandle关键路径的详细日志,便于事后定位
验收建议
- 双人(或多于 2 人)加签会签全部同意后,历史中必出现下一审批节点,且存在对应待办
- 修连线并 build 后,新发起单据不再出现同类空转
- 对已卡死实例有文档化修复步骤