3.8 KiB
3.8 KiB
#173 Client:正式采购下单前更新地址采购编号标记
- 工单号:#173
- 类型:需求
- 父级:#1 / #2
- 版本:Client 可运行任务闭环
- 状态:已完成,用户验收通过
- 日期:2026-08-12
- Gitea:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/173
背景与目标
正式采购完成规格和数量选择后,需要在不可逆下单前进入 PDD 收货地址页面,
把程序生成的旧地址末尾标记替换为本次采购编号。采购编号继续使用任务现有的
remote_task_id,Admin 接口和字段不变。
本功能只用于正式采购;采集任务和演练兼容路径不修改地址。个人信息和原始 无障碍 XML 不进入代码、Git、日志、工单、测试或文档。
最终方案
PddLivePurchaseAdapter增加下单前地址更新接口,普通演练接口不包含该操作。- 服务层在规格、数量和价格验证通过后,将
remote_task_id传给 live Adapter。 - Adapter 使用最新控件树依次确认唯一地址入口、修改按钮、详细地址输入框、 保存按钮和返回按钮。
- 只替换程序格式明确的末尾标记,保留地址主体,并生成
地址主体_采购编号;地址中间合法的连字符不会被截断。 - 保存后回读确认新标记,再返回规格面板。服务层重新复核规格、数量、价格、 库存和唯一提交按钮,之后才允许写入不可逆标记并单击一次下单。
- 任一步不唯一、页面超时、输入或回读不一致时,保存明确采购失败;此时没有 不可逆标记,也不会下单。
与建单方案一致。实现时根据真实 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 版本的实际表现需由用户真机验收。