feat: 完善采购任务安全恢复 (#73)

This commit is contained in:
chengma
2026-08-10 00:27:52 +08:00
parent d6339a810f
commit c86c7482d9
15 changed files with 786 additions and 12 deletions
+8 -3
View File
@@ -340,9 +340,12 @@ Admin 侧必须无条件接受,见 [04](04-admin-api-contract.md) §6.1。
### 采购崩溃恢复
- 在最终提交订单前写入不可逆阶段标记。
- 如果进程在该阶段退出,重启后进入订单核对流程。
- 核对不到订单时进入人工处理,禁止自动重新下单。
- 每个采购关键动作前,先在同一 SQLite 事务中更新任务和执行记录的步骤。
- 演练运行中断且没有不可逆标记时,原执行记录先结束为失败,任务再回到
`claimed`;恢复执行必须创建新的 `attempt_id`,不会存在两条并发运行。
- `irreversible_action_at` 有值时,启动恢复立即转为 `manual_review / reconcile_purchase`。
`PurchaseReconcileService` 只能调用独立的只读 Adapter,不会调用采购 Adapter。
- 核对到唯一候选也仍需人工最终确认;未找到、多候选或结果不确定均保持人工处理。
- Admin 提交失败只重试 Outbox,不再次操作拼多多。
## 9. PDD 适配边界
@@ -359,6 +362,8 @@ reconcile_purchase(task, run) -> PurchaseResult | ManualReview
打开商品、读取状态、精确选择动态规格、设置数量、进入提交前确认页和停止,
**不提供提交订单或付款方法**。这样即使应用层调用错误,也没有可误触的真实下单入口。
采购规格使用完整 `options` 对象精确比较,不假定只有颜色和尺码两个维度。
只读核对另用 `PddPurchaseReconcileAdapter`,只暴露 `read_order_match`
和 `close`,不暴露选规格、设数量、下单或付款方法。
现有 `wait_goods_page`、规格面板坐标、颜色尺码选择和下单按钮定位函数可以迁移到该适配层。实验脚本中的硬编码商品、设备、文件路径和 `print` 不得进入正式服务。