feat: 增加采集任务重新执行入口 (#63)
This commit is contained in:
@@ -210,7 +210,8 @@ LIMIT :limit OFFSET :offset;
|
||||
|
||||
## 4. `task_runs`
|
||||
|
||||
每次自动执行生成一条记录,任务重试时创建新的 `attempt_no`,不得覆盖历史。
|
||||
每次自动执行或人工确认的重新采集都生成一条记录。任务再次执行时创建新的
|
||||
`attempt_no`,不得覆盖历史。
|
||||
|
||||
```sql
|
||||
CREATE TABLE task_runs (
|
||||
@@ -232,6 +233,7 @@ CREATE TABLE task_runs (
|
||||
error_code TEXT,
|
||||
error_message TEXT,
|
||||
diagnostics_json TEXT,
|
||||
result_data TEXT,
|
||||
artifact_directory TEXT,
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL,
|
||||
@@ -244,6 +246,8 @@ CREATE INDEX idx_task_runs_task
|
||||
```
|
||||
|
||||
`irreversible_action_at` 一旦写入,恢复逻辑不得再次下单,只能核对订单或转人工处理。
|
||||
`result_data` 保存这次成功采集的完整结果;`pdd_tasks.pdd_data` 只保存最新结果。
|
||||
这样重新采集可以更新当前数据,同时仍能按 `attempt_no` 追查旧结果。
|
||||
|
||||
## 5. `outbox_events`
|
||||
|
||||
@@ -424,8 +428,7 @@ CREATE TABLE app_settings (
|
||||
| `retry_wait` 重试等待 | `running` | 退避时间到,**本地直接重跑**,新建 `task_runs` 记录(`attempt_no` 加 1) | 任务协调器 |
|
||||
| `retry_wait` | `failed` | 超过最大重试次数,且从未进入不可逆阶段 | 任务协调器 |
|
||||
| `retry_wait` | `manual_review` | 超过最大重试次数,但**曾经进入过不可逆阶段** | 任务协调器 |
|
||||
| `manual_review` 需要人工 | 不自动变 | 只能由人在 Admin 侧处理;需要再执行时由 Admin 下发新任务 | 人 |
|
||||
| `succeeded` / `failed` / `cancelled` | **终态,不再变化** | — | — |
|
||||
| `manual_review` / `succeeded` / `failed` / `cancelled` | `claimed` | 用户在 Client 明确确认重新采集;仅限采集任务,且没有未发送 Outbox | 人 |
|
||||
|
||||
**注意 `retry_wait` → `running` 是纯本地操作。** 任务已经在本地库里了,重试直接重跑就行,
|
||||
**不需要再向 Admin 要一次**。没有租约,也就没有"重新获取执行权"这回事。
|
||||
@@ -435,9 +438,10 @@ CREATE TABLE app_settings (
|
||||
- `[必须]` 任务只能通过 `claim` 成功进入本地库,不许本地自己造一条 `claimed` 记录。
|
||||
- `[必须]` 只有 `running` 状态才允许操作设备、产生业务执行步骤。
|
||||
- `[必须]` 只有 Admin 返回 `accepted: true` 才能进入 `succeeded`,本地不许自己判定成功。
|
||||
- `[必须]` `manual_review` 不自动重新执行,任何自动流程都不许把它改回 `running`。
|
||||
- `[必须]` 已经是 `succeeded`、`failed`、`cancelled` 的任务,不得被迟到的后台回调改回运行中状态。
|
||||
- `[必须]` `manual_review` 不自动重新执行;只有用户在 Client 明确确认重新采集,才允许先回到 `claimed`。
|
||||
- `[必须]` 已经是 `succeeded`、`failed`、`cancelled` 的任务,不得被迟到的后台回调改回运行中状态;人工确认的重新采集除外。
|
||||
- `[必须]` 每次重试都要新建一条 `task_runs` 记录(`attempt_no` 加 1),不许覆盖上一次的记录。
|
||||
- `[必须]` 采购任务不能从“重新执行”入口启动;重新采集不处理任何采购动作。
|
||||
|
||||
### 7.3 崩溃重启后怎么恢复
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
## 1. 设计目标
|
||||
|
||||
- 让操作人员在一个页面完成任务监控、搜索和异常定位。
|
||||
- 界面上只有一个会产生外部后果的命令:“获取任务”。其余操作全部只读本地数据库。
|
||||
- “获取任务”和“重新执行”会产生外部后果;后者当前只允许重新采集,不允许采购。
|
||||
- 长任务状态始终可找到,不使用连续模态弹窗打断工作。
|
||||
- 任务表格在数据增长后仍保持响应速度、稳定选择和可访问性。
|
||||
- 界面只展示任务状态,不在 Qt 主线程执行 Admin 或手机自动化。
|
||||
@@ -35,7 +35,7 @@
|
||||
```text
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ PDD 任务 │
|
||||
│ [开始自动获取] [类型▼] [状态▼] [关键词............] [搜索] │
|
||||
│ [开始自动获取] [类型▼] [状态▼] [关键词...] [搜索] [刷新] [重新执行] │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ 类型 │ 商品标题 │ 颜色 │ 尺码 │ 价格 │ 数量 │ 状态 │ 更新时间 │详情│
|
||||
│ │
|
||||
@@ -77,6 +77,16 @@
|
||||
|
||||
筛选条件之间采用 AND。点击搜索或在关键词输入框按 Enter 执行本地数据库查询,不请求领取任务。活动筛选必须可见,筛选无结果时保留条件并提供清除入口。
|
||||
|
||||
### 4.3 刷新与重新执行
|
||||
|
||||
- “刷新”只重新读取本地任务列表,不请求 Admin,也不操作手机。
|
||||
- “重新执行”位于刷新右侧;没有选中任务时禁用。
|
||||
- 点击后先校验任务,再显示明确的“重新采集”确认弹窗。弹窗显示任务编号、商品标题,并说明新结果会覆盖 Client 和 Admin 的当前采集数据。
|
||||
- 只允许重新采集已经结束的采集任务。采购、执行中、结果待提交、等待重试、仍有未发送 Outbox 或自动获取忙碌时必须阻止,并用中文说明原因。
|
||||
- 确认后只执行选中的稳定任务编号,不领取新任务,不先处理其他任务或 Outbox。
|
||||
- 重新采集在工作线程运行。执行期间禁用“获取任务”和“重新执行”,完成后刷新列表。
|
||||
- 每次重新采集创建新的执行记录和幂等键;当前结果更新,旧结果保存在历史执行记录中。
|
||||
|
||||
## 5. 任务表格
|
||||
|
||||
表格显示的是**本机已领取的全部任务**,包括正在做的和早已做完的。已完成任务永久保留,不会被清理,所以数据只增不减——增量加载和索引是必须的,不是优化。
|
||||
@@ -333,7 +343,7 @@ self.show_recoverable_error(
|
||||
|
||||
## 10. 键盘与无障碍
|
||||
|
||||
- Tab 顺序:自动获取 → 类型 → 状态 → 关键词 → 搜索 → 表格 → 状态区可操作项。
|
||||
- Tab 顺序:自动获取 → 类型 → 状态 → 关键词 → 搜索 → 刷新 → 重新执行 → 表格 → 状态区可操作项。
|
||||
- `Ctrl+F` 聚焦关键词,Enter 打开当前行详情。不绑定 `F5`——界面上没有需要刷新的远端数据。
|
||||
- 仅图标按钮必须设置准确的无障碍名称和工具提示。
|
||||
- 表单具有可见标签,占位符不能替代标签。
|
||||
|
||||
Reference in New Issue
Block a user