现象
入库单审批流程在「采购复核」节点点击「同意」后,审批历史已写入、钉钉待办已标记完成,但流程实例与业务单据未推进到下一节点(出纳审批),表现为流程「断掉」、长期停留在「审批中 / 采购复核」。
复现步骤
- 流程:
workflows.repositoryApproval(入库单-审批),采购入库路径 - 发起一张采购入库单并完成发起审批(实例正常落到节点
HdJtDr采购复核) - 采购复核角色成员在移动端(钉钉)对实例执行「同意」(
handleType=2,nodeId=HdJtDr) - 观察:审批历史新增「同意」记录,但实例
currentNodeid仍为HdJtDr,无出纳待办、无下一节点钉钉通知
已观测案例(脱敏):
| 字段 | 值 |
|---|---|
| 业务单号 | RK260703001 |
| 流程实例 id | 14416 |
| 业务主键 id | 1604 |
| 失败 requestId | ca1c1fd4006f4ea7b20f878928a0ce83 |
| 审批历史 id | 66888 |
| 发生时间 | 2026-07-03 09:58:38 (+08) |
期望 vs 实际
期望: WorkflowSvc/doHandle 在写入审批历史并完成钉钉 COMPLETED 后,应调用 workflowUtils.syncToTable,将实例推进至 BfAzoX(出纳审批),创建 WorkflowTaskModel 待办并 createPlatformTask 通知出纳角色成员。
实际: 失败请求在钉钉 COMPLETED 后未出现 syncToTable 日志,未创建下一节点待办,请求以 HTTP 200 正常结束;全程无 ERROR / Exception / Traceback(静默中断)。
日志证据(脱敏摘要)
失败链(RK260703001 · requestId ca1c1fd…)
server.log.3 约 44878–44958 行:
doHandle (HdJtDr, handleType=2)
→ models.listing upsert ✓
→ WorkflowHistoryModel insert id=66888 ✓
→ 钉钉 processCentres/tasks COMPLETED ✓
→ EventLogModel insert id=90411 ✓
→ 请求结束 ✗
(全程无 workflowUtils.syncToTable / WorkflowTaskModel / createPlatformTask)
gunicorn_access.log:POST …/WorkflowSvc/doHandle → HTTP 200,响应体约 227 字节。
成功对照(同审批人 · 同节点 · 同流程 · 约 5 分钟后)
单号 RK260702011,requestId 25d9a3f18cba494ba60802bdc2e178fd,server.log.3 约 47544–47652 行:
doHandle (HdJtDr, handleType=2)
→ WorkflowHistoryModel ✓
→ 钉钉 COMPLETED ✓
→ syncToTable: currNodeId=BfAzoX(出纳审批)✓
→ WorkflowTaskModel insert ✓
→ createPlatformTask + 钉钉通知出纳 ✓
同类失败(同日)
单号 RK260702012,requestId 49f701cb096c43e49fa8fcdf6e475a70,10:02:13 同样模式:历史 + 钉钉 COMPLETED 后结束,无 syncToTable。
可排除项
- 非角色空缺:
predictApproveList可解析 HdJtDr → 采购复核人、BfAzoX → 出纳审批人 - 非发起异常: 09:08:45 发起阶段
syncToTable→ HdJtDr 正常,待办与钉钉通知均已创建 - 非用户可见报错: 前端收到 200,审批人侧显示已同意
影响
- 数据一致性: 审批历史显示已同意,实例/单据仍停在上游节点,下游无法继续审批
- 业务阻塞: 至少观测到 2 笔采购入库单同日卡住;需人工干预实例才能恢复
- 用户感知: 审批人认为已处理完毕,出纳无待办,单据长期「审批中」