Files
cmautobuy/docs/task/173-正式采购下单前更新地址标记.md
T
2026-08-12 09:40:50 +08:00

3.8 KiB
Raw Blame History

#173 Client:正式采购下单前更新地址采购编号标记

背景与目标

正式采购完成规格和数量选择后,需要在不可逆下单前进入 PDD 收货地址页面, 把程序生成的旧地址末尾标记替换为本次采购编号。采购编号继续使用任务现有的 remote_task_id,Admin 接口和字段不变。

本功能只用于正式采购;采集任务和演练兼容路径不修改地址。个人信息和原始 无障碍 XML 不进入代码、Git、日志、工单、测试或文档。

最终方案

  1. PddLivePurchaseAdapter 增加下单前地址更新接口,普通演练接口不包含该操作。
  2. 服务层在规格、数量和价格验证通过后,将 remote_task_id 传给 live Adapter。
  3. Adapter 使用最新控件树依次确认唯一地址入口、修改按钮、详细地址输入框、 保存按钮和返回按钮。
  4. 只替换程序格式明确的末尾标记,保留地址主体,并生成 地址主体_采购编号;地址中间合法的连字符不会被截断。
  5. 保存后回读确认新标记,再返回规格面板。服务层重新复核规格、数量、价格、 库存和唯一提交按钮,之后才允许写入不可逆标记并单击一次下单。
  6. 任一步不唯一、页面超时、输入或回读不一致时,保存明确采购失败;此时没有 不可逆标记,也不会下单。

与建单方案一致。实现时根据真实 XML 只读结构检查补充了兼容处理:返回按钮的 图标文字和 content-desc 分开匹配,避免合并文本后无法识别。

改了哪些文件

  • client/src/pdd_purchase_adapter.py:增加 live 地址更新边界。
  • client/src/pdd_u2_purchase_adapter.py:实现地址定位、后缀替换、保存回读和返回。
  • client/src/purchase_task_service.py:把地址步骤接入正式采购且保持在不可逆之前。
  • client/test/test_pdd_u2_purchase_adapter.py:增加脱敏 Fake 页面和地址流程测试。
  • client/test/test_purchase_task_service.py:验证 live 调用及失败不进入不可逆阶段。
  • client/test/test_task_dispatcher.py:更新 live 测试 Adapter 契约。
  • docs/client/01-requirements.md:补充正式采购地址步骤和隐私边界。
  • docs/client/02-architecture.md:补充 Adapter 边界与安全顺序。

实现提交:c719fd3。

验收结果

  • 只有正式采购执行地址更新,演练和采集不执行。
  • 使用现有 remote_task_id 生成末尾 _采购编号。
  • 旧程序标记可安全替换,地址主体保持不变。
  • 地址入口、修改、保存和回读失败时在不可逆阶段前停止且不下单。
  • 返回规格面板后继续原有最终复核、不可逆标记和单次提交门禁。
  • Git、日志、工单和测试不包含真实个人信息或原始 XML。
  • 精确测试、Client 全量测试和语法检查通过。

测试

从 client/ 执行:

C:/Python310/python.exe -m py_compile src/pdd_purchase_adapter.py src/pdd_u2_purchase_adapter.py src/purchase_task_service.py
C:/Python310/python.exe -m unittest discover -s test -p "test_*.py"

结果:语法检查通过;全量 432 项测试通过。

另对用户提供的四份本地 XML 做只读、脱敏结构检查,地址入口、修改按钮、详细地址 输入框、保存按钮和返回按钮均得到唯一候选。原始 XML 未暂存、未提交。

**未验证到的部分:**没有连接真机执行地址修改,没有执行真实下单或付款;PDD 保存后 页面跳转、输入长度限制和不同 App 版本的实际表现需由用户真机验收。