docs: 归档任务 #71

This commit is contained in:
chengma
2026-08-09 23:40:18 +08:00
parent 311d55f0da
commit 460619392f
+66
View File
@@ -0,0 +1,66 @@
# 71 实现采购任务演练执行与结果回传
- 类型:需求
- 父级大工单:#1
- 所属 MVP / 版本:#2 Client 可运行任务闭环(MVP)
- 状态:已完成,待用户验收
- 日期:2026-08-09
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/71
## 背景与目标
Client 已认识采购任务数据,但没有独立采购执行器。直接开放领取会让任务卡在
已领取状态,也可能把尚未验证的页面操作带入真实订单流程。本任务先建立只处理
本地任务的 `dry_run` 演练服务,在最终提交订单前停止并可靠回传结果。
## 最终方案
- 新增独立 `PurchaseTaskService`,不复用采集执行器,也不领取 Admin 任务。
- 新增可注入的 `PddPurchaseAdapter` 窄接口。接口没有提交订单或付款方法。
- 动态规格使用完整 `options` 对象精确选择和比较,不写死颜色、尺码维度。
- 进入打开商品、选择规格、设置数量和确认页等关键动作前先持久化步骤;动作前后
重新读取商品、规格、数量和人民币分价格。
- 多候选、无匹配、价格超限、验证码、登录失效、未知页面、风控页和支付页均停止。
- 演练结果明确记录 `mode=dry_run`、确认规格、数量、价格、未提交订单和未付款。
- 结果或失败与执行记录、Outbox 在 SQLite 事务内一起保存。提交失败只补交 Outbox,
不重新执行手机流程。
- HTTP Gateway 保持只声明 `collect`,采购领取留给依赖工单 #72。
## 改了哪些文件
- `client/src/pdd_purchase_adapter.py`:采购演练适配层接口和最新页面状态对象。
- `client/src/purchase_task_service.py`:本地采购演练、校验、失败分类和结果提交。
- `client/src/task_repository.py`:采购运行、步骤、结果、失败及 Outbox 原子持久化。
- `client/src/task_models.py`:执行记录说明同时适用于采集和采购。
- `client/test/test_purchase_task_service.py`:正常演练和安全停止场景测试。
- `docs/client/02-architecture.md`:记录采购服务和无下单入口的适配边界。
- `docs/client/03-data-model.md`:采购结果改用动态 `options` 对象。
## 验收结果
| 验收标准 | 结果 |
|---|---|
| 本地采购任务创建独立执行记录并进入演练 | 通过 |
| 动态 options 精确选择,不写死颜色尺码 | 通过 |
| 关键动作前后使用最新页面状态复核 | 通过 |
| 价格超过人民币分上限时停止 | 通过 |
| 多候选、无匹配、验证码、登录和未知页面安全停止 | 通过 |
| 到达最终提交前停止,不提交订单或付款 | 通过 |
| 结果先写 SQLite 与 Outbox,提交失败不重跑手机流程 | 通过 |
| HTTP Client 仍只声明 collect | 通过 |
## 测试
- 执行的命令:
- `C:/Python310/python.exe -m unittest discover -s test -p "test_purchase*.py" -v`
- `C:/Python310/python.exe -m unittest discover -s test -p "test_*.py" -q`
- `C:/Python310/python.exe -m py_compile src/task_models.py src/task_repository.py src/pdd_purchase_adapter.py src/purchase_task_service.py`
- 设置 `QT_QPA_PLATFORM=offscreen` 后创建并关闭 `MainWindow`
- 结果:采购专项 6 项通过;Client 全量 193 项通过;语法检查通过;离屏冒烟输出
`MAIN_WINDOW_OK`。
- **未验证到的部分**:未连接真实 Android 设备;本工单使用可注入 Mock Adapter
验证应用层和安全边界,没有点击真实提交订单或付款。
## 相关提交
- `311d55f` 实现采购任务安全演练