feat: 支持持续自动获取任务 (#45)

This commit is contained in:
chengma
2026-08-09 10:54:18 +08:00
parent 4022feee43
commit 5fd71981e0
4 changed files with 317 additions and 30 deletions
+1 -1
View File
@@ -87,7 +87,7 @@ client/
|---|---|---|
| 主窗口文件 | `src/ui/main_window.py` | `src/ui_main.py`。**注意**:`client/AGENTS.md` 已按 `src/ui_main.py` 写规则,两处不一致,见下方说明 |
| 目录分层 | domain / application / infrastructure / workers / ui | 平铺在 `src/` 下:`db.py`、`db_schema.py`、`task_repository.py`、`settings_repository.py`、`task_models.py` 等,另有 `src/util/`、`src/demo1/` |
| 主按钮文案 | 「获取任务」⇄「停止获取」 | #32 暂为「获取任务」单次模式,运行期间禁用 |
| 主按钮文案 | 「开始自动获取」⇄「停止自动获取」 | 已按持续串行模式实现 |
| Admin 网关 | `AdminGateway` + Mock/HTTP 两实现 | 登记、领取、结果和失败提交已实现 |
| 采集任务协调器 | `CollectTaskService` | 已实现单条采集任务流程;采购仍未接入 |
| Outbox 提交 | 从 `outbox_events` 取件重试 | 采集结果与失败已实现,重试不重复采集 |
+9 -8
View File
@@ -35,7 +35,7 @@
```text
┌─────────────────────────────────────────────────────────────┐
│ PDD 任务 │
│ [获取任务] [类型▼] [状态▼] [关键词................] [搜索] │
│ [开始自动获取] [类型▼] [状态▼] [关键词............] [搜索] │
├─────────────────────────────────────────────────────────────┤
│ 类型 │ 商品标题 │ 颜色 │ 尺码 │ 价格 │ 数量 │ 状态 │ 更新时间 │详情│
│ │
@@ -50,20 +50,21 @@
## 4. 顶部命令区
### 4.1 获取任务 / 停止获取
### 4.1 开始自动获取 / 停止自动获取
- 使用 `PrimaryPushButton`,是页面唯一主要强调操作。
- 初始文本为“获取任务”,图标表达开始。
- 启动成功后文本变为“停止获取”,按钮位置和宽度尽量稳定。
- 初始文本为“开始自动获取”,图标表达开始。
- 启动成功后文本变为“停止自动获取”,按钮位置和宽度尽量稳定。
- `[必须]` 这两个文案是**按钮标签**。状态栏里的“自动获取:已开启/已停止”说的是**功能状态**,两者不是一回事,不要混改。
- 启动过程中禁用重复点击,显示“正在启动”。
- 停止表示不再领取新任务;当前任务进入安全停止流程。
- 如果设备、Admin 或必要设置无效,按钮可禁用,但附近必须说明缺少的条件。
**当前单任务模式(#32):**按钮文字固定为“获取任务”,每次点击先补交一条本地
Outbox;若无待提交结果则执行最早的本地采集任务,再没有才向 Admin 领取一条。
领取、手机采集和提交都在工作线程完成,运行期间按钮禁用,结束后刷新任务表。
当前不循环领取,也不执行采购任务。
每一轮先补交一条本地 Outbox;若无待提交结果则执行最早的本地采集任务,再没有
才向 Admin 领取一条。领取、手机采集和提交都在单独的工作线程完成,一轮结束且
线程完全退出后,由主线程的单次定时器安排下一轮。暂无任务时默认 5 秒后重试;
可恢复的 Admin 错误按 5、10、20、30 秒退避。需要人工处理、不可恢复错误、设备
或配置错误会停止自动获取。当前仍不执行采购任务。
### 4.2 搜索与筛选