采购任务在提交订单前失败时,现有“重新采购”可以安全创建新运行;但任务已经写入 task_runs.irreversible_action_at、随后只读核单失败并进入 reconcile_manual_review 后,同一入口只显示“安全条件阻止”,无法使用 #261 的多微信选择器兼容逻辑再次读取已经存在的待付款订单。
task_runs.irreversible_action_at
reconcile_manual_review
目标是在不增加按钮的前提下,让“重新采购”入口按不可逆历史安全分流:提交前失败仍重新采购;提交后失败只继续核单,绝不重新下单。
irreversible_action_at
client/src/task_models.py
client/src/task_repository.py
reconcile_purchase
attempt_id
client/src/pdd_ui_event.py
PurchaseReconcileService
PurchaseTaskService
从 client/ 执行:
client/
C:/Python310/python.exe -m py_compile src/task_models.py src/task_repository.py src/pdd_ui_event.py C:/Python310/python.exe -m pytest -q test/test_task_repository.py test/test_pdd_ui_event.py test/test_purchase_recovery.py C:/Python310/python.exe -m pytest -q test $env:QT_QPA_PLATFORM="offscreen" C:/Python310/python.exe -c "from src.ui_main import MainWindow; from PyQt5.QtWidgets import QApplication; app=QApplication([]); w=MainWindow(); print('OK'); app.quit()" Remove-Item Env:QT_QPA_PLATFORM
真机只允许对���存在不可逆标记、已经生成订单的任务执行一次只读核单,不得重新提交订单或触发付款。
主要风险是误把不可逆任务送入采购执行器,导致重复订单。实现必须用独立分类和独立执行分支,恢复事务不得清除不可逆标记;只读核单必须排在真正重新采购之前。回退时删除继续核单分类和恢复入口,恢复为安全阻止;历史不可逆数据保持不变。
本机只读检查确认 cg44 满足新的继续核单条件;实施和测试期间没有修改该任务数据。
cg44
0.1.2
0.1.0
OK
5ea8aa3
9f6705a
docs/task/262-安全分流失败采购任务并继续只读核单.md
状态:待用户验收。
No dependencies set.
The note is not visible to the blocked user.
基本信息
要解决什么
采购任务在提交订单前失败时,现有“重新采购”可以安全创建新运行;但任务已经写入
task_runs.irreversible_action_at、随后只读核单失败并进入reconcile_manual_review后,同一入口只显示“安全条件阻止”,无法使用 #261 的多微信选择器兼容逻辑再次读取已经存在的待付款订单。目标是在不增加按钮的前提下,让“重新采购”入口按不可逆历史安全分流:提交前失败仍重新采购;提交后失败只继续核单,绝不重新下单。
做什么 / 不做什么
reconcile_manual_review增加保留原运行记录和不可逆标记的恢复事务;同一入口先处理只读核单任务;确认框明确区分重新采购和继续核单;补充回归测试。irreversible_action_at;不为已进入不可逆阶段的任务创建新采购运行;不调用采购 Adapter 或再次提交订单;不自动付款;不增加按钮;不修改 Admin、接口或数据库结构。怎么做
client/src/task_models.py,让批量预检结果分别表达可重新采购任务、只读核单任务、类型过滤任务和其他安全阻止任务。client/src/task_repository.py:历史无不可逆标记时沿用重新采购校验;历史有不可逆标记且最新运行、任务均处于reconcile_manual_review时允许进入只读核单分类;增加原子方法把任务和原运行的步骤恢复为reconcile_purchase,保留原attempt_id、确认快照和不可逆时间。client/src/pdd_ui_event.py:同一“重新采购”入口的确认文案显示两类数量;执行时只读核单任务优先,并直接调用PurchaseReconcileService,不经过PurchaseTaskService;核单未形成成功闭环时停止剩余队列。验收标准
reconcile_manual_review且历史有不可逆标记的任务可从同一入口进入“继续核单”。attempt_id、irreversible_action_at和最终确认快照,不创建新的采购运行。PurchaseReconcileService,不会调用采购 Adapter、提交订单或付款。怎么验证
从
client/执行:真机只允许对���存在不可逆标记、已经生成订单的任务执行一次只读核单,不得重新提交订单或触发付款。
风险和回退
主要风险是误把不可逆任务送入采购执行器,导致重复订单。实现必须用独立分类和独立执行分支,恢复事务不得清除不可逆标记;只读核单必须排在真正重新采购之前。回退时删除继续核单分类和恢复入口,恢复为安全阻止;历史不可逆数据保持不变。
实施完成,待用户验收
最终实现
reconcile_manual_review、最新运行有不可逆标记且没有未发送 Outbox 时允许恢复核单。attempt_id、确认快照和irreversible_action_at,不创建新采购运行。PurchaseReconcileService;提交器注入禁止创建采购 Adapter 的工厂。本机只读检查确认
cg44满足新的继续核单条件;实施和测试期间没有修改该任务数据。验证结果
0.1.2,测试仍期待0.1.0),与本工单无关。OK。提交与归档
5ea8aa39f6705adocs/task/262-安全分流失败采购任务并继续只读核单.md状态:待用户验收。