Client:完整遍历尺码与套餐第二规格 #167

Closed
opened 2026-08-11 17:13:52 +08:00 by ila · 2 comments
Owner

基本信息

  • 类型:缺陷
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 / Client 可运行任务闭环
  • 阶段:PDD 规格兼容
  • 关联工单:#166
  • 状态:待验收

要解决什么

商品 757123298435 已能正确把“款式”映射为 color、把“套餐”映射为 size,但十几个套餐只采到当前控件树可见的 3 个。当前第二规格采集只选择面积最大的滚动区域并纵向滑动;如果套餐使用横向列表、嵌套滚动容器或该区域不是套餐容器,控件树不变化两次后就提前停止。只要采到一个值,任务仍会被当作成功提交。

做什么 / 不做什么

  • 做:只增强第二规格(尺码/套餐)的完整遍历。
  • 做:以第二规格标题和选项为锚点定位最近滚动容器,不再只依赖面积最大的全局滚动区域。
  • 做:兼容纵向、横向和多行第二规格列表;每次滑动后重新读取控件树并按页面顺序去重。
  • 做:停止条件只比较第二规格视口;确认方向到达边界后才结束。
  • 做:标题包含数量时校验采集数量,不足则明确报规格不完整。
  • 做:保留普通衣服“颜色 + 尺码”、颜色蛇形采价、默认尺码取消和缺价颜色规则。
  • 不做:不修改颜色遍历和逐颜色采价逻辑。
  • 不做:不点击第二规格,不采集款式与套餐的组合价格。
  • 不做:不修改数据库、Admin 接口或 pdd_data schema。
  • 不做:不执行真实采购、下单或付款。

已确认的实现方案

  1. 从当前 SpecSnapshot 找到 size,结合 XML 节点、标题坐标和父子关系定位第二规格区域。
  2. 优先使用包含第二规格选项的最近 scrollable=true 祖先;没有独立容器时,以标题下方到下一标题/面板底部作为安全区域。
  3. 根据容器和选项坐标判断主要滚动方向;方向不明确时采用受限的横向、纵向探测,每次都用第二规格签名验证是否出现新值。
  4. 分别把目标方向移动到起点,再向末端遍历;多行横向列表按自然顺序合并,不点击选项。
  5. 连续两次视口签名不变才认定该方向到边;标题带“(N)/(N)”数量时最终必须至少采到 N 个唯一值。
  6. 无法确认完整性时返回 PDD_DATA_SPEC_INCOMPLETE,不得把部分数据作为成功结果。
  7. 增加脱敏 XML/Fake Device 测试:衣服纵向尺码、口罩横向套餐、多行套餐、数量校验、错误滚动容器和现有颜色价格回归。

预计修改:

  • client/src/pdd_collect_service.py
  • client/test/test_pdd_collect_service.py
  • docs/task/<工单号>-完整遍历第二规格.md

验收标准

  • 十几个横向套餐可以完整采集,不再只保存当前可见 3 个。
  • 纵向套餐和普通衣服纵向尺码保持完整。
  • 多行第二规格按页面自然顺序去重。
  • 第二规格采集过程中不点击任何尺码或套餐。
  • 标题含数量时,少采必须明确失败而不是提交成功。
  • 颜色蛇形顺序、颜色价格、缺价颜色和默认尺码取消行为不变。
  • 不修改数据库、Admin 接口、价格粒度和采购安全规则。
  • 精确测试、Client 全量测试和 py_compile 通过;不执行真机下单或付款。

验证方式

从 client/ 运行采集服务精确测试、完整 test_*.py 和修改文件 py_compile。使用 Fake Device 与脱敏 XML,不执行真实下单;商品 757123298435 由用户真机验收。

风险和回退

  • 错选滚动区域可能滑动背景商品页,因此必须用第二规格标题、选项及祖先关系约束坐标。
  • 横纵向探测必须有次数上限和签名停止条件,避免无限滑动。
  • 套餐可能影响价格,但本工单保持既有“只按主规格采价”规则。
  • 回退本工单代码提交即可,不涉及数据库迁移。
## 基本信息 - 类型:缺陷 - 父级大工单:#1 - 所属 MVP / 版本:#2 / Client 可运行任务闭环 - 阶段:PDD 规格兼容 - 关联工单:#166 - 状态:待验收 ## 要解决什么 商品 `757123298435` 已能正确把“款式”映射为 `color`、把“套餐”映射为 `size`,但十几个套餐只采到当前控件树可见的 3 个。当前第二规格采集只选择面积最大的滚动区域并纵向滑动;如果套餐使用横向列表、嵌套滚动容器或该区域不是套餐容器,控件树不变化两次后就提前停止。只要采到一个值,任务仍会被当作成功提交。 ## 做什么 / 不做什么 - 做:只增强第二规格(尺码/套餐)的完整遍历。 - 做:以第二规格标题和选项为锚点定位最近滚动容器,不再只依赖面积最大的全局滚动区域。 - 做:兼容纵向、横向和多行第二规格列表;每次滑动后重新读取控件树并按页面顺序去重。 - 做:停止条件只比较第二规格视口;确认方向到达边界后才结束。 - 做:标题包含数量时校验采集数量,不足则明确报规格不完整。 - 做:保留普通衣服“颜色 + 尺码”、颜色蛇形采价、默认尺码取消和缺价颜色规则。 - 不做:不修改颜色遍历和逐颜色采价逻辑。 - 不做:不点击第二规格,不采集款式与套餐的组合价格。 - 不做:不修改数据库、Admin 接口或 `pdd_data` schema。 - 不做:不执行真实采购、下单或付款。 ## 已确认的实现方案 1. 从当前 `SpecSnapshot` 找到 `size`,结合 XML 节点、标题坐标和父子关系定位第二规格区域。 2. 优先使用包含第二规格选项的最近 `scrollable=true` 祖先;没有独立容器时,以标题下方到下一标题/面板底部作为安全区域。 3. 根据容器和选项坐标判断主要滚动方向;方向不明确时采用受限的横向、纵向探测,每次都用第二规格签名验证是否出现新值。 4. 分别把目标方向移动到起点,再向末端遍历;多行横向列表按自然顺序合并,不点击选项。 5. 连续两次视口签名不变才认定该方向到边;标题带“(N)/(N)”数量时最终必须至少采到 N 个唯一值。 6. 无法确认完整性时返回 `PDD_DATA_SPEC_INCOMPLETE`,不得把部分数据作为成功结果。 7. 增加脱敏 XML/Fake Device 测试:衣服纵向尺码、口罩横向套餐、多行套餐、数量校验、错误滚动容器和现有颜色价格回归。 预计修改: - client/src/pdd_collect_service.py - client/test/test_pdd_collect_service.py - docs/task/<工单号>-完整遍历第二规格.md ## 验收标准 - [ ] 十几个横向套餐可以完整采集,不再只保存当前可见 3 个。 - [x] 纵向套餐和普通衣服纵向尺码保持完整。 - [x] 多行第二规格按页面自然顺序去重。 - [x] 第二规格采集过程中不点击任何尺码或套餐。 - [x] 标题含数量时,少采必须明确失败而不是提交成功。 - [x] 颜色蛇形顺序、颜色价格、缺价颜色和默认尺码取消行为不变。 - [x] 不修改数据库、Admin 接口、价格粒度和采购安全规则。 - [x] 精确测试、Client 全量测试和 py_compile 通过;不执行真机下单或付款。 ## 验证方式 从 `client/` 运行采集服务精确测试、完整 `test_*.py` 和修改文件 `py_compile`。使用 Fake Device 与脱敏 XML,不执行真实下单;商品 `757123298435` 由用户真机验收。 ## 风险和回退 - 错选滚动区域可能滑动背景商品页,因此必须用第二规格标题、选项及祖先关系约束坐标。 - 横纵向探测必须有次数上限和签名停止条件,避免无限滑动。 - 套餐可能影响价格,但本工单保持既有“只按主规格采价”规则。 - 回退本工单代码提交即可,不涉及数据库迁移。
Author
Owner

实施完成,等待真机验收

  • 实现提交:18678e1(完整遍历尺码与套餐第二规格)
  • 归档提交:6984e06
  • 本地归档:docs/task/167-完整遍历尺码与套餐第二规格.md

实现结果:

  • 第二规格定位到最近的滚动容器,支持独立横向套餐列表;
  • 横向列表先回到左端,再向右逐页收集、去重,不点击套餐或尺码;
  • 标题带选项数量时校验完整性,局部结果不再作为成功数据提交;
  • 保留原颜色遍历、逐颜色采价及普通衣服尺码流程。

验证:

  • test_pdd_collect_service.py:60 项通过;
  • Client 完整测试:422 项通过;
  • py_compile 通过。

未验证:尚未在真机重新采集商品 757123298435。工单保持打开,状态为“待验收”。

## 实施完成,等待真机验收 - 实现提交:`18678e1`(完整遍历尺码与套餐第二规格) - 归档提交:`6984e06` - 本地归档:`docs/task/167-完整遍历尺码与套餐第二规格.md` 实现结果: - 第二规格定位到最近的滚动容器,支持独立横向套餐列表; - 横向列表先回到左端,再向右逐页收集、去重,不点击套餐或尺码; - 标题带选项数量时校验完整性,局部结果不再作为成功数据提交; - 保留原颜色遍历、逐颜色采价及普通衣服尺码流程。 验证: - `test_pdd_collect_service.py`:60 项通过; - Client 完整测试:422 项通过; - `py_compile` 通过。 未验证:尚未在真机重新采集商品 `757123298435`。工单保持打开,状态为“待验收”。
Author
Owner

用户于 2026-08-13 明确验收通过。本地归档状态已更新,批量验收记录提交:ad44f83。现关闭工单。

用户于 2026-08-13 明确验收通过。本地归档状态已更新,批量验收记录提交:`ad44f83`。现关闭工单。
ila closed this issue 2026-08-13 15:58:24 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#167