采集采购前检查 Android 设备连接状态 #84

Closed
opened 2026-08-10 09:24:26 +08:00 by ila · 5 comments
Owner

基本信息

  • 类型:缺陷
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 Client 可运行任务闭环(MVP)
  • 阶段:Android 设备与任务安全前置检查

要解决什么

Client 开始自动采集/采购或手动重新采集前,目前只判断是否保存了 Android 设备号,没有确认对应 USB/Wi-Fi 设备仍在 ADB 列表中且状态为 device。设备断开时,任务可能先被领取或改为待执行,直到 uiautomator2 真正连接时才失败。

做什么 / 不做什么

  • 做:增加指定设备 ADB 连接状态检查;自动流程在 Outbox 补交之后、领取或执行任务之前检查;重新采集在改变任务状态之前检查;失败时显示可关闭且不堆叠的中文提示并中断操作。
  • 不做:不修改 Admin 接口、SQLite 表结构或 pdd_data;不自动打开无线调试或自动切换设备;不增加采购“重新执行”入口;不改变真实下单安全开关。

怎么做

  • client/src/android_device_service.py:增加 require_connected(serial),通过一次 adb devices -l 精确匹配已保存设备,并区分未连接、offline、unauthorized 和 ADB 执行失败。
  • client/src/task_dispatcher.py:保留无设备也能补交 Outbox;在只读核对、本地手机任务和 Admin 新任务领取之前执行连接检查。
  • client/src/pdd_ui_event.py:将同一检查器注入自动任务 Worker;手动重新采集在 prepare_collect_rerun 之前完成检查,失败时不改变任务状态。
  • 连接检查和 ADB 调用只在 Worker 线程运行;运行期间断线仍由现有 uiautomator2 连接异常处理兜底。
  • 使用持久 Fluent InfoBar 显示“Android 设备未连接,任务未开始”,提供“打开设置”和“关闭提示”,同类新提示替换旧提示;底部同步状态。
  • 更新相关测试和 docs/client/05-ui-specification.md。

验收标准

  • 已保存设备未出现在 ADB 列表时,自动采集/采购不领取新任务且不创建执行记录。
  • 已保存设备状态为 offline 或 unauthorized 时明确提示并中断。
  • 已连接 USB 或 Wi-Fi 设备状态为 device 时允许继续。
  • Outbox 补交在设备未连接时仍可执行。
  • 手动重新采集连接检查失败时,任务状态和已有数据不改变。
  • 设备检查不在 Qt 主线程运行。
  • 错误提示包含“打开设置”和“关闭提示”,同一时间不堆叠。
  • 运行期间突然断线继续由现有设备错误安全停止。
  • Client 专项测试和全量回归通过。

怎么验证

从 client/ 执行:

C:/Python310/python.exe -m unittest discover -s test -p "test_android_device_service.py" -v
C:/Python310/python.exe -m unittest discover -s test -p "test_task_dispatcher.py" -v
C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_ui_event.py" -v
C:/Python310/python.exe -m unittest discover -s test -p "test_*.py"
C:/Python310/python.exe -m py_compile src/android_device_service.py src/task_dispatcher.py src/pdd_ui_event.py

使用假 ADB 输出覆盖 USB、Wi-Fi、未连接、offline、unauthorized 和命令失败;离屏验证提示按钮和状态。不执行真实采购、下单或付款。

风险和回退

风险:预检查通过后设备仍可能立即断开,因此不能删除运行期连接检查。ADB 预检查超时会中断本轮任务,但不会领取或改变任务状态。若出现回归,可回退本工单提交,恢复由自动化连接阶段发现断线的行为。

## 基本信息 - 类型:缺陷 - 父级大工单:#1 - 所属 MVP / 版本:#2 Client 可运行任务闭环(MVP) - 阶段:Android 设备与任务安全前置检查 ## 要解决什么 Client 开始自动采集/采购或手动重新采集前,目前只判断是否保存了 Android 设备号,没有确认对应 USB/Wi-Fi 设备仍在 ADB 列表中且状态为 `device`。设备断开时,任务可能先被领取或改为待执行,直到 uiautomator2 真正连接时才失败。 ## 做什么 / 不做什么 - 做:增加指定设备 ADB 连接状态检查;自动流程在 Outbox 补交之后、领取或执行任务之前检查;重新采集在改变任务状态之前检查;失败时显示可关闭且不堆叠的中文提示并中断操作。 - 不做:不修改 Admin 接口、SQLite 表结构或 `pdd_data`;不自动打开无线调试或自动切换设备;不增加采购“重新执行”入口;不改变真实下单安全开关。 ## 怎么做 - `client/src/android_device_service.py`:增加 `require_connected(serial)`,通过一次 `adb devices -l` 精确匹配已保存设备,并区分未连接、offline、unauthorized 和 ADB 执行失败。 - `client/src/task_dispatcher.py`:保留无设备也能补交 Outbox;在只读核对、本地手机任务和 Admin 新任务领取之前执行连接检查。 - `client/src/pdd_ui_event.py`:将同一检查器注入自动任务 Worker;手动重新采集在 `prepare_collect_rerun` 之前完成检查,失败时不改变任务状态。 - 连接检查和 ADB 调用只在 Worker 线程运行;运行期间断线仍由现有 uiautomator2 连接异常处理兜底。 - 使用持久 Fluent `InfoBar` 显示“Android 设备未连接,任务未开始”,提供“打开设置”和“关闭提示”,同类新提示替换旧提示;底部同步状态。 - 更新相关测试和 `docs/client/05-ui-specification.md`。 ## 验收标准 - [ ] 已保存设备未出现在 ADB 列表时,自动采集/采购不领取新任务且不创建执行记录。 - [ ] 已保存设备状态为 offline 或 unauthorized 时明确提示并中断。 - [ ] 已连接 USB 或 Wi-Fi 设备状态为 device 时允许继续。 - [ ] Outbox 补交在设备未连接时仍可执行。 - [ ] 手动重新采集连接检查失败时,任务状态和已有数据不改变。 - [ ] 设备检查不在 Qt 主线程运行。 - [ ] 错误提示包含“打开设置”和“关闭提示”,同一时间不堆叠。 - [ ] 运行期间突然断线继续由现有设备错误安全停止。 - [ ] Client 专项测试和全量回归通过。 ## 怎么验证 从 `client/` 执行: ```powershell C:/Python310/python.exe -m unittest discover -s test -p "test_android_device_service.py" -v C:/Python310/python.exe -m unittest discover -s test -p "test_task_dispatcher.py" -v C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_ui_event.py" -v C:/Python310/python.exe -m unittest discover -s test -p "test_*.py" C:/Python310/python.exe -m py_compile src/android_device_service.py src/task_dispatcher.py src/pdd_ui_event.py ``` 使用假 ADB 输出覆盖 USB、Wi-Fi、未连接、offline、unauthorized 和命令失败;离屏验证提示按钮和状态。不执行真实采购、下单或付款。 ## 风险和回退 风险:预检查通过后设备仍可能立即断开,因此不能删除运行期连接检查。ADB 预检查超时会中断本轮任务,但不会领取或改变任务状态。若出现回归,可回退本工单提交,恢复由自动化连接阶段发现断线的行为。
Author
Owner

实施进度

已完成代码实现和自动化回归,当前进入提交与归档阶段。

  • 自动获取:先补交 Outbox;执行本地任务或领取新任务前,在工作线程检查已保存 USB/Wi-Fi 设备是否处于 ADB device 状态。
  • 重新采集:用户确认后先检查设备,检查通过后才重置任务;失败时保留原状态、结果和执行历史。
  • 设备不可用:停止自动获取/重新采集,显示不堆叠的持久提示,提供“打开设置”和“关闭提示”。
  • 未改变 Admin 接口、数据库结构、pdd_data,采购仍仅演练且不开放采购重新执行。

验证:cd client && python -m unittest discover -s test -v,223 项全部通过。真机 USB/Wi-Fi 断连提示与恢复后执行仍待人工验收。

## 实施进度 已完成代码实现和自动化回归,当前进入提交与归档阶段。 - 自动获取:先补交 Outbox;执行本地任务或领取新任务前,在工作线程检查已保存 USB/Wi-Fi 设备是否处于 ADB `device` 状态。 - 重新采集:用户确认后先检查设备,检查通过后才重置任务;失败时保留原状态、结果和执行历史。 - 设备不可用:停止自动获取/重新采集,显示不堆叠的持久提示,提供“打开设置”和“关闭提示”。 - 未改变 Admin 接口、数据库结构、`pdd_data`,采购仍仅演练且不开放采购重新执行。 验证:`cd client && python -m unittest discover -s test -v`,223 项全部通过。真机 USB/Wi-Fi 断连提示与恢复后执行仍待人工验收。
Author
Owner

已完成,等待验收

实现与归档已提交:

  • e7fb06d fix: 任务执行前检查 Android 设备连接 (#84)
  • de8c618 docs: 归档任务 #84
  • 归档:docs/task/84-任务执行前检查Android设备连接.md

自动化结果:Client 全量 223 项测试通过。

尚需真机验收:

  1. 保存 USB 设备后拔线,点击“获取任务”或“重新执行”,应停止且不领取/不重置任务。
  2. 提示应只有一条,并可点击“打开设置”或“关闭提示”。
  3. Wi-Fi 设备断开时结果相同;重新连接并保持 adb devices 为 device 后可继续执行。

未执行真实采购、下单或付款。工单保持开启,待用户验收后再关闭并同步 #1、#2。

## 已完成,等待验收 实现与归档已提交: - `e7fb06d` `fix: 任务执行前检查 Android 设备连接 (#84)` - `de8c618` `docs: 归档任务 #84` - 归档:`docs/task/84-任务执行前检查Android设备连接.md` 自动化结果:Client 全量 223 项测试通过。 尚需真机验收: 1. 保存 USB 设备后拔线,点击“获取任务”或“重新执行”,应停止且不领取/不重置任务。 2. 提示应只有一条,并可点击“打开设置”或“关闭提示”。 3. Wi-Fi 设备断开时结果相同;重新连接并保持 `adb devices` 为 `device` 后可继续执行。 未执行真实采购、下单或付款。工单保持开启,待用户验收后再关闭并同步 #1、#2。
Author
Owner

验收反馈与方案修正

用户澄清:要优化的是采集、采购及重新采集失败后的错误提示。现有提示主要依赖右上角小 ×,不容易点击;此前只重点处理设备未连接提示,范围理解不完整。

本次修正:

  • 自动采集/采购错误、重新采集错误和设备不可用错误统一使用更大的非模态 Fluent InfoBar。
  • 增大提示最小宽度和高度,保留明显的“关闭提示”按钮;设备错误继续保留“打开设置”。
  • 上述错误提示显示 5 秒后自动关闭,重复错误替换旧提示,不堆叠。
  • 底部任务状态继续保留完整错误文字,提示自动关闭不会丢失状态。
  • 不改任务执行、采购安全、Admin 接口、数据库或 pdd_data。

新增验收:错误提示不再只能点击小 ×;5 秒后自动关闭;关闭按钮使用足够大的标准按钮点击区域;采集/采购错误不会连续堆叠。

## 验收反馈与方案修正 用户澄清:要优化的是采集、采购及重新采集失败后的错误提示。现有提示主要依赖右上角小 `×`,不容易点击;此前只重点处理设备未连接提示,范围理解不完整。 本次修正: - 自动采集/采购错误、重新采集错误和设备不可用错误统一使用更大的非模态 Fluent `InfoBar`。 - 增大提示最小宽度和高度,保留明显的“关闭提示”按钮;设备错误继续保留“打开设置”。 - 上述错误提示显示 5 秒后自动关闭,重复错误替换旧提示,不堆叠。 - 底部任务状态继续保留完整错误文字,提示自动关闭不会丢失状态。 - 不改任务执行、采购安全、Admin 接口、数据库或 `pdd_data`。 新增验收:错误提示不再只能点击小 `×`;5 秒后自动关闭;关闭按钮使用足够大的标准按钮点击区域;采集/采购错误不会连续堆叠。
Author
Owner

验收修正已完成,等待再次验收

已按用户澄清修正采集、采购和重新采集错误提示:

  • 提示最小尺寸为 520 × 112,长中文错误更容易阅读。
  • “关闭提示”和“打开设置”按钮最小尺寸为 120 × 40,不再要求点击右上角小 ×。
  • 采集/采购、重新采集、设备不可用错误均在 5 秒后自动关闭。
  • 同类错误用新提示替换旧提示,不连续堆叠。
  • 底部状态区继续保留完整错误原因。

提交:

  • 74198bd fix: 放大任务错误提示并自动关闭 (#84)
  • 9e38f89 docs: 更新任务 #84 验收修正归档

验证:

  • C:/Python310/python.exe -m py_compile src/pdd_ui_event.py test/test_pdd_ui_event.py
  • C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_ui_event.py":32 项通过
  • C:/Python310/python.exe -m unittest discover -s test -v:224 项通过

未执行真实采购、下单或付款。工单继续保持开启,等待人工确认提示大小和 5 秒关闭体验。

## 验收修正已完成,等待再次验收 已按用户澄清修正采集、采购和重新采集错误提示: - 提示最小尺寸为 `520 × 112`,长中文错误更容易阅读。 - “关闭提示”和“打开设置”按钮最小尺寸为 `120 × 40`,不再要求点击右上角小 `×`。 - 采集/采购、重新采集、设备不可用错误均在 5 秒后自动关闭。 - 同类错误用新提示替换旧提示,不连续堆叠。 - 底部状态区继续保留完整错误原因。 提交: - `74198bd` `fix: 放大任务错误提示并自动关闭 (#84)` - `9e38f89` `docs: 更新任务 #84 验收修正归档` 验证: - `C:/Python310/python.exe -m py_compile src/pdd_ui_event.py test/test_pdd_ui_event.py` - `C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_ui_event.py"`:32 项通过 - `C:/Python310/python.exe -m unittest discover -s test -v`:224 项通过 未执行真实采购、下单或付款。工单继续保持开启,等待人工确认提示大小和 5 秒关闭体验。
Author
Owner

用户已于 2026-08-11 明确验收通过。

  • 本地归档状态已更新为“已完成,用户验收通过”
  • 验收记录提交:eca9289
  • 本工单按项目流程关闭
用户已于 2026-08-11 明确验收通过。 - 本地归档状态已更新为“已完成,用户验收通过” - 验收记录提交:`eca9289` - 本工单按项目流程关闭
ila closed this issue 2026-08-11 10:58:16 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#84