[BUG] 工作流 doHandle 同意后未 syncToTable 导致入库审批流程卡住

临时修复方案(消费仓 Semi-A · 已落地)

本评论记录运维侧手工补偿方案,用于在平台 syncToTable 根因修复前恢复卡住的入库审批单。
平台官方 API;不替代引擎正常推进。

背景结论(实测)

  • WorkflowSvc.syncToTable / advanceNode / repairInstance无对外 APIerrcode: 60001
  • 卡单形态:审批历史已有「同意」,但实例 nodeId / 业务单 currentNodeid 未推进
  • 正常 syncToTable 会:更新 listing + 实例 + 创建 WorkflowTaskModel + createPlatformTask(钉钉)
  • 手工补偿仅覆盖前三项不触发钉钉待办

脚本(已提交 main · 0e2acfb

路径:scripts/workflow-semi-a-repair.sh

两步式(MUST):先 confirm 只读确认,再 apply 写库

# 第一步:确认流程/节点/角色(不写库)
./scripts/workflow-semi-a-repair.sh confirm --repo-number <入库单号>
# 或 --instance-id <实例id>

# 第二步:确认报告无误后实施
./scripts/workflow-semi-a-repair.sh apply --state scripts/.workflow-repair-confirm/<instanceId>.json
# 非交互:加 --yes

运行时状态目录已加入 .gitignore(不纳入 Git):

  • scripts/.workflow-repair-confirm/
  • scripts/.workflow-repair-applied/

apply 写库内容

  1. models.listingcurrentNodeid → 目标节点,approvalStatus=审批中
  2. WorkflowInstanceModelnodeIdsortKeynodePathList 追加目标节点
  3. WorkflowTaskModel — 新建待办(含 createTimenoApprover=1agentId=0
  4. WorkflowCommentModel — 运维备注(关联本 Issue)

已实施单据(2026-07-05)

单号 实例 卡住节点 推进至 待办 taskId 下一审批人
RK260702009 14406 出纳 BfAzoX 会计 LokxIK 26144 会计
RK260703001 14416 采购复核 HdJtDr 出纳 BfAzoX 26145 出纳
RK260702012 14409 采购复核 HdJtDr 出纳 BfAzoX 26146 出纳

运维注意事项(踩坑记录)

  1. WorkflowTaskModel.createTime 必填
    若为 null,打开流程 / getWorkflowHistory 会报:'<' not supported between instances of 'NoneType' and 'str'

  2. noApprover 应对齐平台标准
    引擎创建的待办多为 noApprover=1agentId=0;手工创建若写 0 可能影响待办中心展示

  3. 请勿让已同意节点重复点「同意」
    历史记录是对的,重复操作可能引入新异常

  4. 钉钉
    手工补偿不调用 createPlatformTask,需人工通知下一审批人走 PC 待办Workflow/form?id=<instanceId>

只读诊断 API(脚本 confirm 阶段使用)

  • getWorkflowHistory — 审批历史 + Semi-A 判定
  • predictApproveList — 节点角色与下一审批人
  • getDisplayTaskByInstanceId — 实例与业务单一致性

与根因修复的关系

本方案为消费仓临时止血;平台侧仍需修复 doHandle 同意后未执行 syncToTable 的问题(见 Issue 正文日志:requestId 对比成功/失败单)。


提交人:消费仓 Agent · 2026-07-05