From 5c9ebd968ccb15dab78bbea70b1c9a1a104d3e29 Mon Sep 17 00:00:00 2001 From: chengma Date: Sun, 9 Aug 2026 21:45:28 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=BD=92=E6=A1=A3=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?#63?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/task/63-采集任务重新执行入口.md | 60 ++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 docs/task/63-采集任务重新执行入口.md diff --git a/docs/task/63-采集任务重新执行入口.md b/docs/task/63-采集任务重新执行入口.md new file mode 100644 index 0000000..7392bcb --- /dev/null +++ b/docs/task/63-采集任务重新执行入口.md @@ -0,0 +1,60 @@ +# 63 为选中的采集任务增加重新执行入口 + +- 类型:需求 +- 父级大工单:#1 +- 所属 MVP / 版本:#2 Client 可运行任务闭环(MVP) +- 状态:已完成,待用户验收 +- 日期:2026-08-09 +- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/63 + +## 背景与目标 + +任务列表原来只能查看和刷新。采集结果需要复核或补全时,操作人员没有安全、 +可追踪的重新采集入口。本任务增加单条采集任务重新执行能力,同时禁止从该入口 +重新执行采购任务。 + +## 最终方案 + +- 在刷新按钮右侧增加“重新执行”,没有选中行时禁用。 +- 点击后校验任务类型、任务状态、Outbox、自动获取状态和设备设置,再显示明确的 + “重新采集”确认弹窗。 +- 只允许重新采集已结束的采集任务;采购、活动状态和未发送结果均拦截。 +- 后台线程按 `remote_task_id` 执行指定任务,不领取新任务,也不先处理其他任务。 +- 新采集生成新的 `attempt_id` 和幂等键。`pdd_tasks.pdd_data` 保存最新结果并按 + 原接口提交 Admin;新增 `task_runs.result_data` 保存每次成功结果,避免历史丢失。 +- SQLite 使用 v2 追加迁移,旧数据库原有任务和执行记录不变。 + +## 改了哪些 + +- `client/src/pdd_ui.py`:增加重新执行按钮、信号、选择状态和运行中禁用状态。 +- `client/src/pdd_ui_event.py`:增加确认、校验、指定任务 Worker 和中文结果提示。 +- `client/src/collect_task_service.py`:增加只执行指定本地任务的入口。 +- `client/src/task_repository.py`:增加重新采集事务校验和状态准备,并保存每次结果。 +- `client/src/db_schema.py`、`client/src/task_models.py`:增加数据库 v2 和执行结果字段。 +- `client/test/`:补充迁移、Repository、服务和界面事件测试。 +- `docs/client/03-data-model.md`、`docs/client/05-ui-specification.md`:同步稳定规则。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 刷新右侧显示重新执行,没有选中项时不可用 | 通过 | +| 明确确认后只重新采集选中的终态采集任务 | 通过 | +| 采购、活动状态、未发送 Outbox 和忙碌状态被拦截 | 通过 | +| 新执行使用新的尝试编号和幂等键 | 通过 | +| 当前结果更新,旧成功结果保存在执行记录 | 通过 | +| 手机自动化与网络提交不阻塞 Qt 主线程 | 通过 | +| 不触发采购和真实下单 | 通过 | + +## 测试 + +- 执行的命令: + - `C:/Python310/python.exe -m unittest discover -s test -v` + - `C:/Python310/python.exe -m py_compile src/pdd_ui.py src/pdd_ui_event.py src/task_repository.py src/collect_task_service.py src/db_schema.py` + - 设置 `QT_QPA_PLATFORM=offscreen` 后创建并关闭 `MainWindow` +- 结果:182 项单元测试全部通过;语法检查通过;离屏冒烟输出 `OK`。 +- **没验证到的部分**:没有连接真机执行重新采集,也没有在真实 Admin 数据上验证当前结果覆盖;采购任务未做真机测试,避免触发采购行为。 + +## 相关提交 + +- `eda3661` 增加采集任务重新执行入口