fix: 任务执行前检查 Android 设备连接 (#84)

This commit is contained in:
chengma
2026-08-10 09:35:46 +08:00
parent dee9f34035
commit e7fb06d7aa
11 changed files with 360 additions and 25 deletions
+9 -7
View File
@@ -322,13 +322,15 @@ Client 与 Admin 的任务交互只有三种调用:领一个任务、提交结
### 任务领取与执行
1. 调用 Admin `claim` 领一个任务;返回 204 表示暂时没活,按轮询周期退避后再试。
2. Client 持久化任务,状态置 `claimed`。
3. 根据 `task_type` 分派给采集或采购执行器。
4. 工作线程执行,持续更新 `current_step`(只写本地,不上报 Admin)。
5. 完成后在同一事务里写入结果与 Outbox,状态置 `result_pending`。
6. Outbox 提交成功、Admin 返回 `accepted: true` 后标记 `succeeded`。
7. 回到第 1 步领下一个任务。**同一时间只做一个任务。**
1. 优先补交一条本地 Outbox。提交结果不依赖 Android 设备。
2. 没有待提交结果时,在工作线程通过 ADB 检查已保存设备号是否仍为 `device` 状态。检查失败立即停止,不执行本地任务,也不领取新任务。
3. 执行最早的本地待处理任务;没有本地任务时才调用 Admin `claim`。返回 204 表示暂时没活,按轮询周期退避后再试。
4. Client 持久化新领取的任务,状态置 `claimed`。
5. 根据 `task_type` 分派给采集或采购执行器。
6. 工作线程执行,持续更新 `current_step`(只写本地,不上报 Admin)。
7. 完成后在同一事务里写入结果与 Outbox,状态置 `result_pending`。
8. Outbox 提交成功、Admin 返回 `accepted: true` 后标记 `succeeded`。
9. 回到第 1 步处理下一轮。**同一时间只做一个任务。**
`TaskDispatcher` 是能力声明的唯一入口。没有可用采购演练 Adapter、没有已保存
Android 设备或本地持久化未准备好时,只声明 `collect`;条件满足时才声明
+6
View File
@@ -67,6 +67,11 @@
或配置错误会停止自动获取。采购演练执行器和 Android 设备都准备好时,可以领取
采购任务;界面必须明确显示“演练”,任何路径都不得显示成真实下单。
- 补交本地 Outbox 不依赖手机,可以在 Android 设备断开时继续执行。
- 执行本地任务或向 Admin 领取新任务前,工作线程必须用 `adb devices -l` 检查已保存的精确设备号。USB 和 Wi-Fi 设备都只接受 `device` 状态。
- 设备未连接、`offline`、`unauthorized` 或 ADB 检查失败时,立即停止本轮和自动获取;不得领取新任务,也不得启动本地任务。
- 设备错误使用一条持久 `InfoBar` 提示,提供“打开设置”和“关闭提示”。重复错误替换旧提示,不得堆叠。
### 4.2 搜索与筛选
建议控件:
@@ -83,6 +88,7 @@
- “刷新”只重新读取本地任务列表,不请求 Admin,也不操作手机。
- “重新执行”位于刷新右侧;没有选中任务时禁用。
- 点击后先校验任务,再显示明确的“重新采集”确认弹窗。弹窗显示任务编号、商品标题,并说明新结果会覆盖 Client 和 Admin 的当前采集数据。“暂不重新采集”是默认聚焦的安全操作,点击该按钮、按 `Escape` 或关闭弹窗都不得启动任务。
- 用户确认后,工作线程必须先检查已保存 Android 设备的实际连接状态,再重置任务和创建执行记录。检查失败时保留原任务状态、采集结果和执行历史。
- 允许重新采集已经结束或处于“等待重试”的采集任务。采购、执行中、结果待提交、仍有未发送 Outbox 或自动获取忙碌时必须阻止,并用中文说明原因。
- 确认后只执行选中的稳定任务编号,不领取新任务,不先处理其他任务或 Outbox。
- 重新采集在工作线程运行。执行期间禁用“获取任务”,“重新执行”变为可点击的“停止重新采集”。