Files
cmautobuy/docs/task/11-保存当前设备并登记-client.md
T
2026-08-06 18:00:34 +08:00

63 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 11 保存当前设备并登记 Client
- 类型:Client 功能
- 父级大工单:#1
- 所属 MVP:#2
- 依赖:#6、#8、#10、#12
- 状态:验收通过
- 日期:2026-08-06
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/11
## 目标
设置页保存当前 Windows Client 信息时,先把稳定设备号和设备名写入本地 SQLite,再在后台调用 Admin 的幂等登记接口。远端失败不能回滚本地数据,也不能阻塞界面或领取任务。
## 最终实现
- 使用 `admin.client_id` 和 `admin.client_name` 保存当前 Client 信息。
- 仅在数据库没有有效设备号时生成一次,以后保存保持设备号不变。
- 设备名允许为空,最多 50 个字符;两个设置项在同一事务内保存。
- 调用 `PUT /api/v1/client/registration` 登记 Client;可选的已勾选 Android 设备会随请求提交。
- HTTP 使用 Python 标准库实现,没有增加第三方依赖;请求不读取系统代理,避免本机或局域网 Admin 被代理软件拦截。
- 保存和 HTTP 登记在 `QThread` Worker 中执行。保存期间禁用按钮,页面分别显示本地保存和 Admin 登记结果。
- 页面或应用关闭后断开界面信号并忽略迟到结果,避免访问已销毁控件。
- `MockAdminGateway` 支持幂等登记和失败模拟,方便后续功能开发与测试。
## 主要文件
- `client/src/current_client_service.py`
- `client/src/http_admin_gateway.py`
- `client/src/admin_gateway.py`
- `client/src/mock_admin_gateway.py`
- `client/src/settings_repository.py`
- `client/src/settings_ui.py`
- `client/src/settings_ui_event.py`
- `client/test/test_current_client_service.py`
- `client/test/test_http_admin_gateway.py`
- `client/test/test_settings_ui_event.py`
## 验证结果
- Python 语法检查:通过。
- `git diff --check`:通过。
- Client 全量单元测试:48 项通过。
- 使用离屏 Qt 验证保存成功、Admin 失败、重试、慢请求不阻塞和关闭后迟到结果:通过。
- 使用临时 Admin 进程和隔离 SQLite 做真实端到端登记:通过;同一 Client 重复登记后记录数仍为 1。
测试环境会提示 PyQt5 字体目录缺失和 sip API 过时警告,但不影响测试结果;这两项是现有运行环境问题,不属于本工单。
## 人工验收
2026-08-06,用户确认 #11 验收通过。验收覆盖以下操作:
1. 启动实际 Admin 和 Client。
2. 进入“参数设置”,填写设备名并点击“保存当前设备”。
3. 确认页面显示“本地已保存,已登记到 Admin”。
4. 重启 Client,确认设备号和设备名能够恢复。
5. 再次保存,确认设备号不变,Admin 中没有新增重复 Client。
6. 停止 Admin 后再次保存,确认本地信息仍保存,页面明确提示 Admin 登记失败。
## 提交
- `fab5778` `feat: 保存并登记当前 Client (#11)`