# 42 允许颜色缺价并继续采集尺码 - 类型:缺陷修复 - 父级大工单:#1 - 所属 MVP / 版本:#2 / MVP - 状态:已完成,用户验收通过 - 日期:2026-08-08 - Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/42 ## 背景与目标 颜色遍历结束后,只要存在颜色没有采到稳定价格,Client 就会提前抛出 `PDD_DATA_PRICE_MISSING`,因此尚未执行尺码采集,完整任务也无法入库和提交。 部分颜色售罄、无法选中或偶尔采不到价格属于正常情况,本任务让缺价保留为空, 并继续完成尺码采集和结果提交。 ## 最终方案 - 保留现有颜色遍历、点击和价格采样逻辑,每个颜色不增加价格重试。 - 颜色未采到价格时,`price_cent`、`raw_price` 和 `list_price_cent` 为 `null`, `price_observed_at` 为空对象。 - 所有颜色遍历完成后,无论部分还是全部缺价,都继续调用原有尺码滚动采集。 - 规格组合非空时继续生成 `pdd_data`,由原流程先写 SQLite 和 Outbox,再提交 Admin;所有价格为空时,任务列表摘要价格也自然为空。 - `available` 只由颜色和尺码控件状态决定,不再和是否采到价格绑定。 - 没有采到规格维度或无法生成任何规格组合时,仍按规格数据不完整处理。 ## 改了哪些 - `client/src/pdd_collect_service.py`:移除颜色缺价的两个阻断判断,保留空价格并 继续采集尺码;规格可用状态改为只取页面控件状态。 - `client/test/test_pdd_collect_service.py`:增加全部颜色点击未生效、价格全部为空时 仍能采集尺码并生成规格组合的测试。 - `docs/client/01-requirements.md`:记录颜色缺价不重试、不阻断的业务规则。 - `docs/client/03-data-model.md`:记录缺价字段和 `available` 的数据语义。 - `docs/client/04-admin-api-contract.md`:明确 Admin 必须接受非空规格中的空价格。 ## 验收结果 | 验收标准 | 结果 | |---|---| | 部分或全部颜色缺价时仍执行尺码采集 | 通过 | | 缺价字段保存为 `null`,采价证据为空对象 | 通过 | | 缺价不改变页面采集到的 `available` | 通过 | | 非空规格可以继续生成入库和提交数据 | 通过 | | 空规格仍按数据不完整处理 | 通过 | | 未改变颜色遍历和尺码滚动算法 | 通过 | | Client 完整回归通过 | 通过 | ## 测试 - `cd client; C:/Python310/python.exe -m unittest discover -s test -p test_pdd_collect_service.py` :26 项通过。 - `cd client; C:/Python310/python.exe -m unittest discover -s test -p "test_*.py"` :167 项通过。 - `C:/Python310/python.exe -m py_compile client/src/pdd_collect_service.py client/test/test_pdd_collect_service.py` :通过。 - `git diff --check`:通过;输出中仅有工作区原有文件的换行符提示。 - 未连接真机复测商品 `579590149861`;需验收时确认遍历颜色后会滚动到尺码, 且 Admin 接收含空价格的非空规格结果。 ## 相关提交 - `5aaf0a9` 允许颜色缺价后继续采集