diff --git a/docs/task/42-允许颜色缺价并继续采集尺码.md b/docs/task/42-允许颜色缺价并继续采集尺码.md new file mode 100644 index 0000000..fb898d0 --- /dev/null +++ b/docs/task/42-允许颜色缺价并继续采集尺码.md @@ -0,0 +1,64 @@ +# 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` 允许颜色缺价后继续采集