临时修复方案(消费仓 Semi-A · 已落地)
本评论记录运维侧手工补偿方案,用于在平台
syncToTable根因修复前恢复卡住的入库审批单。
非平台官方 API;不替代引擎正常推进。
背景结论(实测)
WorkflowSvc.syncToTable/advanceNode/repairInstance等无对外 API(errcode: 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 写库内容
models.listing—currentNodeid→ 目标节点,approvalStatus=审批中WorkflowInstanceModel—nodeId、sortKey、nodePathList追加目标节点WorkflowTaskModel— 新建待办(含createTime、noApprover=1、agentId=0)WorkflowCommentModel— 运维备注(关联本 Issue)
已实施单据(2026-07-05)
| 单号 | 实例 | 卡住节点 | 推进至 | 待办 taskId | 下一审批人 |
|---|---|---|---|---|---|
| RK260702009 | 14406 | 出纳 BfAzoX | 会计 LokxIK | 26144 | 会计 |
| RK260703001 | 14416 | 采购复核 HdJtDr | 出纳 BfAzoX | 26145 | 出纳 |
| RK260702012 | 14409 | 采购复核 HdJtDr | 出纳 BfAzoX | 26146 | 出纳 |
运维注意事项(踩坑记录)
-
WorkflowTaskModel.createTime必填
若为null,打开流程 /getWorkflowHistory会报:'<' not supported between instances of 'NoneType' and 'str' -
noApprover应对齐平台标准
引擎创建的待办多为noApprover=1、agentId=0;手工创建若写0可能影响待办中心展示 -
请勿让已同意节点重复点「同意」
历史记录是对的,重复操作可能引入新异常 -
钉钉
手工补偿不调用createPlatformTask,需人工通知下一审批人走 PC 待办 或Workflow/form?id=<instanceId>
只读诊断 API(脚本 confirm 阶段使用)
getWorkflowHistory— 审批历史 + Semi-A 判定predictApproveList— 节点角色与下一审批人getDisplayTaskByInstanceId— 实例与业务单一致性
与根因修复的关系
本方案为消费仓临时止血;平台侧仍需修复 doHandle 同意后未执行 syncToTable 的问题(见 Issue 正文日志:requestId 对比成功/失败单)。
提交人:消费仓 Agent · 2026-07-05