diff --git a/docs/task/265-售罄临时页仅下拉刷新一次.md b/docs/task/265-售罄临时页仅下拉刷新一次.md new file mode 100644 index 0000000..e029e1a --- /dev/null +++ b/docs/task/265-售罄临时页仅下拉刷新一次.md @@ -0,0 +1,65 @@ +# #265 Client:售罄临时页仅下拉刷新一次并重新识别商品 + +- 工单号:#265 +- 类型:缺陷修复 +- 父级大工单:#1 +- 所属 MVP:#2 +- 状态:待验收 +- 日期:2026-08-18 +- Gitea: + +## 背景与目标 + +Android 浏览器通过深链打开 PDD 商品时,PDD 偶尔先显示页面级“商品已售罄”,人工下拉刷新一次后才能恢复完整商品详情。本任务让采集和采购在确认是页面级售罄时,仅执行一次受限的下拉刷新并重新识别页面,避免立即把临时页面判为永久失效。 + +## 最终方案 + +- 页面分类器增加页面级售罄状态,并由商品打开状态机记录是否已经刷新。 +- 采集和采购共用安全下拉手势:根据最新控件树计算屏幕范围,在内容区从上向下滑动一次,不点击任何控件。 +- 刷新后恢复商品页则继续原流程;仍显示售罄则返回不可重试的 `PDD_GOODS_UNAVAILABLE`。 +- 普通 SKU、颜色或尺码选项中的“售罄”不触发整页刷新。 +- 采购刷新发生在规格选择和不可逆标记之前,不改变下单门禁。 + +## 改了哪些文件 + +- `client/src/pdd_page_classifier.py` +- `client/src/pdd_goods_refresh.py` +- `client/src/pdd_collect_service.py` +- `client/src/pdd_u2_purchase_adapter.py` +- `client/test/test_pdd_page_classifier.py` +- `client/test/test_pdd_collect_service.py` +- `client/test/test_pdd_u2_purchase_adapter.py` +- `docs/client/06-quality-security.md` + +实现提交:`e7ac5a4` + +## 验收结果 + +- [x] 明确页面级售罄时只下拉刷新一次。 +- [x] 刷新后恢复正常商品页时继续采集或采购流程。 +- [x] 刷新后仍售罄时返回 `PDD_GOODS_UNAVAILABLE`,并记录一次刷新诊断信息。 +- [x] SKU 选项中的普通“售罄”不会触发整页刷新。 +- [x] 采集和采购均不点击推荐商品或其他页面控件。 +- [x] 未修改不可逆阶段后的重新下单规则。 + +## 测试 + +在 `client/` 目录执行: + +```powershell +C:/Python310/python.exe -m py_compile src/pdd_page_classifier.py src/pdd_goods_refresh.py src/pdd_collect_service.py src/pdd_u2_purchase_adapter.py +C:/Python310/python.exe -m pytest -q test/test_pdd_page_classifier.py test/test_pdd_collect_service.py test/test_pdd_u2_purchase_adapter.py +$env:QT_QPA_PLATFORM="offscreen" +C:/Python310/python.exe -c "from src.ui_main import MainWindow; from PyQt5.QtWidgets import QApplication; app=QApplication([]); w=MainWindow(); print('OK'); app.quit()" +Remove-Item Env:QT_QPA_PLATFORM +C:/Python310/python.exe -m pytest -q test +``` + +结果: + +- 语法检查通过。 +- 定向测试 146 项全部通过。 +- 界面离屏冒烟测试打印 `OK`。 +- 完整测试 526 项通过、2 项失败;失败是工作区现有 `src/version.py` 为 `0.1.2`,两项旧测试仍期待 `0.1.0`,与本任务无关。 + +未验证到的部分:未使用真实 Android 设备复现临时售罄页和实际下拉刷新;未执行真实规格选择或下单。