feat: 任务失败后继续执行下一条 (#170)
This commit is contained in:
@@ -136,7 +136,7 @@ Client 应执行:
|
||||
|
||||
1. **Admin:**服务地址、Client 编号、认证状态、请求超时和测试连接。
|
||||
2. **Android 设备:**ADB 地址、拼多多包名、设备测试连接。
|
||||
3. **自动化:**轮询周期、任务超时、最大重试次数和演练模式。
|
||||
3. **自动化:**轮询周期、任务超时和演练模式。
|
||||
4. **安全与诊断:**价格允许偏差、最大购买数量、日志目录、截图/XML 保留周期。
|
||||
5. **软件更新:**当前版本、清单地址、账号、密码、保存/检查按钮和稳定状态文字。
|
||||
|
||||
@@ -146,6 +146,9 @@ Client 应执行:
|
||||
|
||||
任务共有 8 个标准状态:`claimed`、`running`、`result_pending`、`retry_wait`、`manual_review`、`succeeded`、`failed`、`cancelled`。
|
||||
|
||||
`retry_wait` 只为兼容旧数据和采集进程异常退出保留;自动任务不会选择它,也不会
|
||||
自动重试失败任务。
|
||||
|
||||
没有"待领取"状态——任务在领取成功那一刻才写进本地库,见 [03 数据模型](03-data-model.md) §3.1。
|
||||
|
||||
**每个状态的中文显示、含义和允许的转换,以 [03 数据模型](03-data-model.md) §7 为准**(那是唯一权威定义,写代码和写测试都看那一张表)。
|
||||
|
||||
@@ -450,26 +450,25 @@ CREATE TABLE app_settings (
|
||||
|---|---|---|---|
|
||||
| (无记录) | `claimed` | `claim` 成功,任务首次写入本地库 | 任务协调器 |
|
||||
| `claimed` 已领取 | `running` | 工作线程开始操作设备 | 任务执行器 |
|
||||
| `claimed` | `retry_wait` | 设备连不上等可恢复错误,**还没碰过设备** | 任务执行器 |
|
||||
| `claimed` | `failed` | 任务数据不合法(缺必填字段、数量为 0 等) | 任务执行器 |
|
||||
| `claimed` | `cancelled` | 用户停止,且尚未开始执行 | 任务协调器 |
|
||||
| `running` 执行中 | `result_pending` | PDD 操作完成,**且结果已落库**(见 §5.1) | 任务执行器 |
|
||||
| `running` | `retry_wait` | 可恢复失败(页面超时、网络抖动),**且未进入不可逆阶段** | 任务执行器 |
|
||||
| `running` | `manual_review` | 需要人判断:多个订单候选、验证码、登录失效、价格超限、规格不确定 | 任务执行器 |
|
||||
| `running` | `failed` | 不可恢复且不需要人处理(商品下架、链接失效) | 任务执行器 |
|
||||
| `running` | `manual_review` | 登录、验证码、风控或不可逆采购等必须停队列并由人处理 | 任务执行器 |
|
||||
| `running` | `failed` | 本次采集或采购失败;失败上报成功后继续下一条,不自动重试当前任务 | 任务执行器 |
|
||||
| `running` | `cancelled` | 用户停止,且已到安全点、未进入不可逆阶段 | 任务协调器 |
|
||||
| `result_pending` 结果待提交 | `succeeded` | Admin 返回 `accepted: true` | 结果提交服务 |
|
||||
| `result_pending` | `manual_review` | 重试次数超上限仍提交不上去 | 结果提交服务 |
|
||||
| `manual_review / reconcile_purchase` | `result_pending` | 严格核对到唯一未付款订单,结果和 Outbox 已在同一事务落库 | 只读核单服务 |
|
||||
| `retry_wait` 重试等待 | `running` | 重新启动获取任务,或用户确认“重新执行”;**本地直接重跑**并新建 `task_runs` 记录 | 任务协调器 / 人 |
|
||||
| `retry_wait` | `failed` | 超过最大重试次数,且从未进入不可逆阶段 | 任务协调器 |
|
||||
| `retry_wait` | `manual_review` | 超过最大重试次数,但**曾经进入过不可逆阶段** | 任务协调器 |
|
||||
| `retry_wait` 旧数据/中断恢复 | `claimed` | 用户明确确认重新采集;自动获取不会选择该状态 | 人 |
|
||||
| `manual_review` / `succeeded` / `failed` / `cancelled` | `claimed` | 用户在 Client 明确确认重新采集;仅限采集任务,且没有未发送 Outbox | 人 |
|
||||
|
||||
**注意 `retry_wait` → `running` 是纯本地操作。** 任务已经在本地库里了,重试直接重跑就行,
|
||||
**不需要再向 Admin 要一次**。没有租约,也就没有"重新获取执行权"这回事。
|
||||
当前 `retry_wait` 不包含倒计时。自动获取因可恢复采集错误停止后,界面必须显示
|
||||
“重试已暂停”;用户可以选择任务点击“重新执行”,或重新启动获取任务。
|
||||
自动流程对一条任务只执行一次。任务自身失败时写入 `failed`,界面按类型显示
|
||||
“采集失败”或“采购失败”;失败原因保存在 `last_error_code` 和
|
||||
`last_error_message`。只有用户明确点击重新采集或重新采购,才创建新的
|
||||
`task_runs` 记录再次执行。
|
||||
|
||||
`retry_wait` 不再表示程序正在等待。它只兼容旧数据和“采集运行中异常退出”的恢复
|
||||
结果,界面同样显示为“采集失败”,并且不会被自动任务查询选中。
|
||||
|
||||
### 7.2 补充规则
|
||||
|
||||
@@ -478,7 +477,7 @@ CREATE TABLE app_settings (
|
||||
- `[必须]` 只有 Admin 返回 `accepted: true` 才能进入 `succeeded`,本地不许自己判定成功。
|
||||
- `[必须]` `manual_review` 不自动重新执行;只有用户在 Client 明确确认重新采集,才允许先回到 `claimed`。
|
||||
- `[必须]` 已经是 `succeeded`、`failed`、`cancelled` 的任务,不得被迟到的后台回调改回运行中状态;人工确认的重新采集除外。
|
||||
- `[必须]` 每次重试都要新建一条 `task_runs` 记录(`attempt_no` 加 1),不许覆盖上一次的记录。
|
||||
- `[必须]` 每次用户手动重新执行都要新建一条 `task_runs` 记录(`attempt_no` 加 1),不许覆盖上一次的记录。
|
||||
- `[必须]` 采购任务不能从“重新执行”入口启动;重新采集不处理任何采购动作。
|
||||
|
||||
### 7.3 崩溃重启后怎么恢复
|
||||
@@ -496,8 +495,9 @@ CREATE TABLE app_settings (
|
||||
|
||||
一句话记住:**`irreversible_action_at` 有值 = 只准查,不准买。**
|
||||
|
||||
可重试的设备错误在采购演练中也先进入 `manual_review`,不会因为技术上
|
||||
“可重试”就隐式重跑采购。这与采集任务的 `retry_wait` 规则不同。
|
||||
采集和采购都不自动重试。设备断开、登录、验证码、风控、Admin 不可用以及
|
||||
不可逆采购待核单属于全局阻塞,必须停止队列;普通任务自身失败并成功上报后继续
|
||||
下一条。
|
||||
|
||||
## 8. `pdd_data` JSON
|
||||
|
||||
|
||||
@@ -107,8 +107,9 @@ Client 首次显示主窗口时使用标准 Windows 最大化状态,不使用
|
||||
- 用户确认批量操作后立即刷新列表,并在状态区显示已加入队列的数量。排队中的任务保持原状态;
|
||||
只有工作线程已经把当前任务写成 `running` 后,才通知主线程刷新该行并显示“采集中”或
|
||||
“采购中”。每条完成、失败、跳过或取消后再次刷新,再开始下一条。
|
||||
- “等待重试”当前没有倒计时。自动获取因可恢复采集错误停止时,底部状态显示
|
||||
“重试已暂停”,并提示选择任务点击“重新执行”或重新启动获取任务。
|
||||
- 自动流程对每条任务只执行一次,不显示“等待重试”。普通失败按任务类型显示
|
||||
“采集失败”或“采购失败”,详情保留具体原因;失败信息成功上报后继续下一条。
|
||||
只有设备、登录、验证码、风控、Admin 或不可逆采购等全局问题才停止队列。
|
||||
- “重新上报”作用于当前已经加载并勾选的任务。执行前显示任务数量,并明确说明不会重新采集、采购或操作手机。
|
||||
- 重新上报先查找每条任务最早一条尚未发送的 Outbox,包括 `task_failure`;全部事件都已发送时,才重发最新的 `collect_result` 或 `purchase_result`。
|
||||
- 重新上报使用事件原来的 `idempotency_key` 和 `payload_json`,不重新组装数据、不创建新 Outbox。历史结果再次得到 Admin 确认时不得覆盖任务最新执行状态;最新失败信息上报成功后应恢复对应失败状态。
|
||||
|
||||
Reference in New Issue
Block a user