3.7 KiB
3.7 KiB
256 Client:采购尺码不匹配时完整采集真机候选
- 类型:需求
- 父级大工单:#96
- 所属 MVP / 版本:#253
- 状态:已完成
- 日期:2026-08-17
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/256
背景与目标
采购任务已经选中正确颜色,但目标尺码不在页面时,后续规格解析需要一份完整、 可复核的当前颜色尺码候选。候选采集必须只读,并且不能把页面不完整、点击失败或 候选不稳定误判成需要远端解析。
最终方案
采购 Adapter 复用 PddCollectService 已有的第二规格遍历,不另写一套滚动算法。
采购候选模式要求确认遍历起点和终点;滚动中规格状态改变、页面丢失或达到上限时,
返回普通采购失败。
只有颜色已经可靠选中、尺码失败原因为 target_not_visible,并且完整列表中也不存在
目标原文或唯一繁简等价文字时,才生成 PddPurchaseSpecResolutionRequired。内存快照
保留规格名称、全部原文、可用状态和页面顺序;可购买项按顺序编号为 c1、c2,并按
spec-resolution-v1 契约计算 SHA-256。不可购买项不进入待解析候选。候选重复、超过
100 条,或规格维度、文字长度和控制字符不符合契约时,按普通采购失败停止。
本工单不请求 Admin、不点击解析结果,也不把候选或控件树写入 SQLite、日志或文档。
改了哪些
client/src/pdd_collect_service.py:开放严格、只读的第二规格候选遍历入口。client/src/pdd_purchase_adapter.py:增加观察项、候选快照和待解析异常对象。client/src/pdd_u2_purchase_adapter.py:接入候选采集门禁,并区分待解析与普通失败。client/test/test_pdd_collect_service.py:验证公开入口复用原第二规格遍历。client/test/test_pdd_u2_purchase_adapter.py:验证触发门禁、可用状态、编号、哈希和失败分流。docs/client/01-requirements.md:补充采购尺码候选采集需求。docs/client/02-architecture.md:记录复用边界、快照结构和职责分工。
验收结果
| 验收标准 | 结果 |
|---|---|
| 复用现有第二规格遍历,不复制滚动算法 | 通过 |
| 保留规格名称、原文、可用状态、页面顺序和稳定候选编号 | 通过 |
快照哈希符合 spec-resolution-v1 契约 |
通过 |
| 仅在颜色已选且目标确实不在完整列表时返回待解析结果 | 通过 |
| 扫描不完整、目标仍存在和未选颜色均按普通采购失败处理 | 通过 |
| 不调用 Admin、不点击解析结果、不持久化 XML 或候选 | 通过 |
测试
- 执行的命令:
$env:PYTHONPATH='client'; C:/Python310/python.exe -m pytest client/test/test_pdd_u2_purchase_adapter.py client/test/test_pdd_collect_service.py -q - 结果:128 passed。
- 执行的命令:
$env:PYTHONPATH='client'; C:/Python310/python.exe -m pytest client/test -q - 结果:480 passed,2 failed;失败是工作区版本号已为
0.1.2,两个旧测试仍固定期望0.1.0,与本工单无关。 - 执行的命令:
C:/Python310/python.exe -m py_compile client/src/pdd_purchase_adapter.py client/src/pdd_collect_service.py client/src/pdd_u2_purchase_adapter.py - 结果:通过。
- 执行的命令:在
client/设置QT_QPA_PLATFORM=offscreen后创建MainWindow。 - 结果:输出
OK;有本机 PyQt5 字体目录警告,不影响窗口创建。 - 没验证到的部分:未连接真机执行一次实际长尺码列表遍历;本工单使用模拟控件树和设备行为验证。
相关提交
58dc902feat: 完整采集采购尺码候选 (#256)9118541fix: 校验采购尺码候选边界 (#256)