减少采购流程重复前台查询并补充分段耗时 #120

Closed
opened 2026-08-10 19:29:00 +08:00 by ila · 4 comments
Owner

基本信息

  • 类型:缺陷修复 / 性能优化
  • 父级大工单:#1
  • 所属 MVP/版本:Client 真实采购安全闭环
  • 阶段:商品页与规格选择性能

要解决什么

真机任务 PUR-e2bee5f724a3b40a 显示一次 app_current() 约耗时 10.641 秒。采购服务在商品校验、选规格前后、设数量前后和最终确认阶段多次调用 read_state(),而当前 read_state() 每次都无条件执行 app_current(),造成:

  • 商品页已显示后仍等待十几秒才打开规格面板;
  • 颜色、尺码和数量操作之间出现十秒级停顿;
  • 一条任务约 75 秒,其中多次前台查询可能占约 50 秒。

采集流程已在页面轮询中使用控件树优先策略,采购状态读取尚未完整应用同类优化。

最新任务没有点击下单的直接原因是价格门禁:PDD 识别价格 470 分超过 Admin 上限 370 分。该行为正确,本工单不得修改或绕过价格门禁。

做什么 / 不做什么

做什么

  • 采购 read_state() 先读取最新无障碍控件树。
  • 控件树中有足够 PDD 包节点时直接以 PDD 包名分类,不调用 app_current()。
  • 控件树不足以确认归属时才调用 app_current() 兜底。
  • 保留最终下单点击前的独立前台应用核验,不降低高风险点击门禁。
  • 为采购状态读取、颜色选择和尺码选择记录分段耗时,便于真机复验。
  • 补充单元测试,验证可靠 PDD 控件树不查询前台、外部/模糊树会兜底、最终提交仍查询前台。
  • 更新稳定的采购性能与安全说明。

不做什么

  • 不修改采集颜色遍历算法。
  • 不修改采购颜色、尺码匹配规则。
  • 不修改 Admin 任务价格、价格解析或最高价格门禁。
  • 不减少最终下单前的规格、数量、价格、库存和唯一按钮校验。
  • 不执行真机下单或支付。
  • 不修改数据库和 Admin 接口。

已确认的实现方案

  1. 在 client/src/pdd_u2_purchase_adapter.py 增加控件树包名判断辅助函数。
  2. read_state() 调整为先 dump_hierarchy() 和解析 XML;PDD 包节点达到页面分类器同等可靠阈值时使用 PDD_PACKAGE_NAME,否则调用 app_current()。
  3. U2PddLivePurchaseAdapter.submit_order_once() 保持显式 app_current(),保证最终高风险点击前仍核验实际前台。
  4. 使用现有 TaskPerformanceTrace:
    • purchase_read_state 记录一次状态读取耗时;
    • purchase_select_color 记录指定颜色选择耗时;
    • purchase_select_size 记录指定尺码选择耗时。
  5. 在 client/test/test_pdd_u2_purchase_adapter.py 增加调用次数和耗时记录回归测试。
  6. 更新 docs/client/06-quality-security.md。

预计修改文件:

  • client/src/pdd_u2_purchase_adapter.py
  • client/test/test_pdd_u2_purchase_adapter.py
  • docs/client/06-quality-security.md
  • 完成后归档 docs/task/<工单号>-减少采购重复前台查询并补充分段耗时.md

验收标准

  • 可靠 PDD 商品页和规格面板控件树下,read_state() 不调用 app_current()。
  • 外部或归属不明确的控件树仍调用 app_current() 兜底。
  • 最终提交点击前仍调用一次 app_current()。
  • 颜色和尺码仍按原逻辑精确选择。
  • 日志可区分状态读取、颜色选择和尺码选择耗时。
  • 价格超过上限仍在不可逆标记和下单点击前停止。
  • 自动化测试通过;不执行真机下单或支付。

验证方式

从 client 目录执行:

C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_u2_purchase_adapter.py"
C:/Python310/python.exe -m unittest discover -s test -p "test_purchase_task_service.py"
C:/Python310/python.exe -m unittest discover -s test -p "test_*.py"

真机验收由用户执行:记录商品页出现到规格面板点击、颜���到尺码选择的时间,并检查 client/data/logs/task_performance.jsonl 中新增分段耗时。价格超过上限的任务仍应停止,不点击下单。

风险和回退

  • 风险:外部覆盖层可能造成控件树与前台包名不一致;只有达到可靠 PDD 节点阈值才省略查询,最终提交仍强制核验前台。
  • 风险:控件树读取本身也可能变慢;分段耗时可以继续定位。
  • 回退:恢复 read_state() 无条件前台查询;最终提交安全逻辑无需回退。
## 基本信息 - 类型:缺陷修复 / 性能优化 - 父级大工单:#1 - 所属 MVP/版本:Client 真实采购安全闭环 - 阶段:商品页与规格选择性能 ## 要解决什么 真机任务 `PUR-e2bee5f724a3b40a` 显示一次 `app_current()` 约耗时 10.641 秒。采购服务在商品校验、选规格前后、设数量前后和最终确认阶段多次调用 `read_state()`,而当前 `read_state()` 每次都无条件执行 `app_current()`,造成: - 商品页已显示后仍等待十几秒才打开规格面板; - 颜色、尺码和数量操作之间出现十秒级停顿; - 一条任务约 75 秒,其中多次前台查询可能占约 50 秒。 采集流程已在页面轮询中使用控件树优先策略,采购状态读取尚未完整应用同类优化。 最新任务没有点击下单的直接原因是价格门禁:PDD 识别价格 470 分超过 Admin 上限 370 分。该行为正确,本工单不得修改或绕过价格门禁。 ## 做什么 / 不做什么 ### 做什么 - 采购 `read_state()` 先读取最新无障碍控件树。 - 控件树中有足够 PDD 包节点时直接以 PDD 包名分类,不调用 `app_current()`。 - 控件树不足以确认归属时才调用 `app_current()` 兜底。 - 保留最终下单点击前的独立前台应用核验,不降低高风险点击门禁。 - 为采购状态读取、颜色选择和尺码选择记录分段耗时,便于真机复验。 - 补充单元测试,验证可靠 PDD 控件树不查询前台、外部/模糊树会兜底、最终提交仍查询前台。 - 更新稳定的采购性能与安全说明。 ### 不做什么 - 不修改采集颜色遍历算法。 - 不修改采购颜色、尺码匹配规则。 - 不修改 Admin 任务价格、价格解析或最高价格门禁。 - 不减少最终下单前的规格、数量、价格、库存和唯一按钮校验。 - 不执行真机下单或支付。 - 不修改数据库和 Admin 接口。 ## 已确认的实现方案 1. 在 `client/src/pdd_u2_purchase_adapter.py` 增加控件树包名判断辅助函数。 2. `read_state()` 调整为先 `dump_hierarchy()` 和解析 XML;PDD 包节点达到页面分类器同等可靠阈值时使用 `PDD_PACKAGE_NAME`,否则调用 `app_current()`。 3. `U2PddLivePurchaseAdapter.submit_order_once()` 保持显式 `app_current()`,保证最终高风险点击前仍核验实际前台。 4. 使用现有 `TaskPerformanceTrace`: - `purchase_read_state` 记录一次状态读取耗时; - `purchase_select_color` 记录指定颜色选择耗时; - `purchase_select_size` 记录指定尺码选择耗时。 5. 在 `client/test/test_pdd_u2_purchase_adapter.py` 增加调用次数和耗时记录回归测试。 6. 更新 `docs/client/06-quality-security.md`。 预计修改文件: - `client/src/pdd_u2_purchase_adapter.py` - `client/test/test_pdd_u2_purchase_adapter.py` - `docs/client/06-quality-security.md` - 完成后归档 `docs/task/<工单号>-减少采购重复前台查询并补充分段耗时.md` ## 验收标准 - [ ] 可靠 PDD 商品页和规格面板控件树下,`read_state()` 不调用 `app_current()`。 - [ ] 外部或归属不明确的控件树仍调用 `app_current()` 兜底。 - [ ] 最终提交点击前仍调用一次 `app_current()`。 - [ ] 颜色和尺码仍按原逻辑精确选择。 - [ ] 日志可区分状态读取、颜色选择和尺码选择耗时。 - [ ] 价格超过上限仍在不可逆标记和下单点击前停止。 - [ ] 自动化测试通过;不执行真机下单或支付。 ## 验证方式 从 `client` 目录执行: ```powershell C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_u2_purchase_adapter.py" C:/Python310/python.exe -m unittest discover -s test -p "test_purchase_task_service.py" C:/Python310/python.exe -m unittest discover -s test -p "test_*.py" ``` 真机验收由用户执行:记录商品页出现到规格面板点击、颜���到尺码选择的时间,并检查 `client/data/logs/task_performance.jsonl` 中新增分段耗时。价格超过上限的任务仍应停止,不点击下单。 ## 风险和回退 - 风险:外部覆盖层可能造成控件树与前台包名不一致;只有达到可靠 PDD 节点阈值才省略查询,最终提交仍强制核验前台。 - 风险:控件树读取本身也可能变慢;分段耗时可以继续定位。 - 回退:恢复 `read_state()` 无条件前台查询;最终提交安全逻辑无需回退。
Author
Owner

状态:进行中。保持价格门禁和最终提交前台核验不变,先实现普通状态读取的控件树优先策略,再补颜色/尺码分段耗时与回归测试。

状态:进行中。保持价格门禁和最终提交前台核验不变,先实现普通状态读取的控件树优先策略,再补颜色/尺码分段耗时与回归测试。
Author
Owner

实现完成,状态:待验收。

实现提交:59de08b

完成内容:

  • 采购普通 read_state() 改为先读取控件树;至少 3 个 PDD 包节点时直接确认 PDD,不再重复调用慢速 app_current()。
  • 控件树归属不足时仍调用 app_current() 兜底。
  • 最终 submit_order_once() 保留独立前台查询,提交安全门禁未削弱。
  • 新增性能阶段:purchase_read_state、purchase_select_color、purchase_select_size。
  • 颜色、尺码匹配算法和价格上限门禁未修改。
  • 测试确认可靠树跳过查询、模糊树执行兜底、最终提交仍查询前台。

验证:

  • 采购 Adapter 专项:22 项通过。
  • PurchaseTaskService:11 项通过,包含价格超限停止。
  • Client 全量:346 项通过。
  • py_compile、git diff --check 通过。

未执行真机下单或支付。下一次真机任务可通过性能日志直接比较三个新增阶段耗时。

实现完成,状态:待验收。 实现提交:`59de08b` 完成内容: - 采购普通 `read_state()` 改为先读取控件树;至少 3 个 PDD 包节点时直接确认 PDD,不再重复调用慢速 `app_current()`。 - 控件树归属不足时仍调用 `app_current()` 兜底。 - 最终 `submit_order_once()` 保留独立前台查询,提交安全门禁未削弱。 - 新增性能阶段:`purchase_read_state`、`purchase_select_color`、`purchase_select_size`。 - 颜色、尺码匹配算法和价格上限门禁未修改。 - 测试确认可靠树跳过查询、模糊树执行兜底、最终提交仍查询前台。 验证: - 采购 Adapter 专项:22 项通过。 - PurchaseTaskService:11 项通过,包含价格超限停止。 - Client 全量:346 项通过。 - `py_compile`、`git diff --check` 通过。 未执行真机下单或支付。下一次真机任务可通过性能日志直接比较三个新增阶段耗时。
Author
Owner

本地归档已提交:

  • 文档:docs/task/120-减少采购重复前台查询并补充分段耗时.md
  • 归档提交:352d861

工单保持打开,等待用户真机耗时和价格门禁验收;通过后再关闭并更新父工单 #1。

本地归档已提交: - 文档:`docs/task/120-减少采购重复前台查询并补充分段耗时.md` - 归档提交:`352d861` 工单保持打开,等待用户真机耗时和价格门禁验收;通过后再关闭并更新父工单 #1。
Author
Owner

用户已于 2026-08-11 明确验收通过。

  • 本地归档状态已更新为“已完成,用户验收通过”
  • 验收记录提交:eca9289
  • 本工单按项目流程关闭
用户已于 2026-08-11 明确验收通过。 - 本地归档状态已更新为“已完成,用户验收通过” - 验收记录提交:`eca9289` - 本工单按项目流程关闭
ila closed this issue 2026-08-11 10:58:34 +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#120