简化待付款订单核单为编号和时间唯一匹配 #126

Closed
opened 2026-08-10 20:08:04 +08:00 by ila · 4 comments
Owner

基本信息

  • 类型:需求
  • 父级大工单:#1
  • 所属 MVP / 版本:MVP 后续真实采购核单
  • 阶段:不可逆下单后的只读订单核对

要解决什么

PDD 待付款订单详情能够稳定读取订单编号和下单时间,但不提供 goods_id,数量和实付款文字格式也可能变化。当前核单要求订单页面再次提供商品编号、规格、数量和金额,导致已经找到唯一正确订单仍转人工处理。

用户明确业务需求:订单页面只需要获取订单编号和下单时间。商品、规格、数量和金额已经在不可逆动作前写入 final_confirmation,不需要从订单页面重复确认。

做什么 / 不做什么

  • 做:订单候选只使用订单编号、下单时间和待付款状态进行只读匹配。
  • 做:以本地 order_submitted_at 为中心使用前后 5 分钟时间窗口;窗口内只能有一个匹配候选。
  • 做:Admin 结果中的商品、规格、数量和金额继续来自任务数据及下单前���认快照。
  • 做:多个时间候选、缺少订单号、缺少时间、非待付款状态继续转人工处理。
  • 不做:不从任务参数伪造订单编号或下单时间。
  • 不做:不点击支付、取消订单,不重新下单,不自动重置旧的人工核对任务。
  • 不做:不修改数据库结构和 Admin 接口字段。

怎么做

  • 修改 client/src/pdd_purchase_reconcile_adapter.py:核单查询增加本地 order_submitted_at。
  • 修改 client/src/purchase_reconcile_service.py:候选匹配只校验订单编号、订单时间、待付款状态和唯一性;时间窗口改为 order_submitted_at ± 5 分钟;结果中的确认规格、数量和金额取下单前快照。
  • 更新核单服务和恢复测试,覆盖唯一候选、多个候选、缺失字段、超时窗口、非待付款状态及结果来源。
  • PDD XML 解析器继续读取现有字段,但商品编号、规格、数量和金额不再作为订单核单通过条件。

验收标准

  • 唯一候选具有订单编号、有效下单时间和待付款状态,且时间位于提交时间前后 5 分钟时核单成功。
  • 订单页面缺少 goods_id、规格、数量或金额时不影响上述唯一候选通过。
  • 多个时间范围内候选、缺少订单编号/时间、超出时间范围或非待付款状态仍转人工处理。
  • 上报结果的商品、规格、数量和金额来自任务及下单前确认快照,订单编号和下单时间来自订单页面。
  • 不产生支付、取消订单或重新下单操作。
  • Client 自动化测试通过。

怎么验证

从 client/ 目录执行:

C:/Python310/python.exe -m unittest discover -s test -p test_purchase_recovery.py -v
C:/Python310/python.exe -m unittest discover -s test -p test_pdd_u2_purchase_reconcile_adapter.py -v
C:/Python310/python.exe -m unittest discover -s test -v

真机验证:只使用新产生且已进入不可逆阶段的待付款订单验证读取;不支付、不取消、不重新下单。旧人工核对任务不自动重试。

风险和回退

风险:同一账号在 10 分钟窗口内出现多个订单时可能混淆。防护方式是窗口内只允许一个符合订单号、时间和待付款状态的候选;多个候选一律人工处理。回退本工单提交后恢复原严格字段匹配,不修改历史任务状态。

## 基本信息 - 类型:需求 - 父级大工单:#1 - 所属 MVP / 版本:MVP 后续真实采购核单 - 阶段:不可逆下单后的只读订单核对 ## 要解决什么 PDD 待付款订单详情能够稳定读取订单编号和下单时间,但不提供 `goods_id`,数量和实付款文字格式也可能变化。当前核单要求订单页面再次提供商品编号、规格、数量和金额,导致已经找到唯一正确订单仍转人工处理。 用户明确业务需求:订单页面只需要获取订单编号和下单时间。商品、规格、数量和金额已经在不可逆动作前写入 `final_confirmation`,不需要从订单页面重复确认。 ## 做什么 / 不做什么 - 做:订单候选只使用订单编号、下单时间和待付款状态进行只读匹配。 - 做:以本地 `order_submitted_at` 为中心使用前后 5 分钟时间窗口;窗口内只能有一个匹配候选。 - 做:Admin 结果中的商品、规格、数量和金额继续来自任务数据及下单前���认快照。 - 做:多个时间候选、缺少订单号、缺少时间、非待付款状态继续转人工处理。 - 不做:不从任务参数伪造订单编号或下单时间。 - 不做:不点击支付、取消订单,不重新下单,不自动重置旧的人工核对任务。 - 不做:不修改数据库结构和 Admin 接口字段。 ## 怎么做 - 修改 `client/src/pdd_purchase_reconcile_adapter.py`:核单查询增加本地 `order_submitted_at`。 - 修改 `client/src/purchase_reconcile_service.py`:候选匹配只校验订单编号、订单时间、待付款状态和唯一性;时间窗口改为 `order_submitted_at ± 5 分钟`;结果中的确认规格、数量和金额取下单前快照。 - 更新核单服务和恢复测试,覆盖唯一候选、多个候选、缺失字段、超时窗口、非待付款状态及结果来源。 - PDD XML 解析器继续读取现有字段,但商品编号、规格、数量和金额不再作为订单核单通过条件。 ## 验收标准 - [x] 唯一候选具有订单编号、有效下单时间和待付款状态,且时间位于提交时间前后 5 分钟时核单成功。 - [x] 订单页面缺少 `goods_id`、规格、数量或金额时不影响上述唯一候选通过。 - [x] 多个时间范围内候选、缺少订单编号/时间、超出时间范围或非待付款状态仍转人工处理。 - [x] 上报结果的商品、规格、数量和金额来自任务及下单前确认快照,订单编号和下单时间来自订单页面。 - [x] 不产生支付、取消订单或重新下单操作。 - [x] Client 自动化测试通过。 ## 怎么验证 从 `client/` 目录执行: ```powershell C:/Python310/python.exe -m unittest discover -s test -p test_purchase_recovery.py -v C:/Python310/python.exe -m unittest discover -s test -p test_pdd_u2_purchase_reconcile_adapter.py -v C:/Python310/python.exe -m unittest discover -s test -v ``` 真机验证:只使用新产生且已进入不可逆阶段的待付款订单验证读取;不支付、不取消、不重新下单。旧人工核对任务不自动重试。 ## 风险和回退 风险:同一账号在 10 分钟窗口内出现多个订单时可能混淆。防护方式是窗口内只允许一个符合订单号、时间和待付款状态的候选;多个候选一律人工处理。回退本工单提交后恢复原严格字段匹配,不修改历史任务状态。
Author
Owner

状态:进行中,代码、基线文档和自动化验证已完成。

实现:

  • 核单候选只校验非空订单编号、有效下单时间、待付款状态和唯一性;
  • 时间窗口改为 order_submitted_at ± 5 分钟,异常提交缺少该值时使用不可逆时间作保守基准;
  • 商品编号来自任务,确认规格、数量和金额来自 final_confirmation;
  • 多候选、缺少编号/时间、超出窗口和非待付款仍转人工;
  • 同步 Client 需求、架构、数据模型、Admin 契约和质量安全基线。

测试:定向核单 19 项及 Client 完整 355 项通过。已有人工核对任务未重置,真机当前页面未再次读到订单候选,因此未写入任何结果。

状态:进行中,代码、基线文档和自动化验证已完成。 实现: - 核单候选只校验非空订单编号、有效下单时间、待付款状态和唯一性; - 时间窗口改为 `order_submitted_at ± 5 分钟`,异常提交缺少该值时使用不可逆时间作保守基准; - 商品编号来自任务,确认规格、数量和金额来自 `final_confirmation`; - 多候选、缺少编号/时间、超出窗口和非待付款仍转人工; - 同步 Client 需求、架构、数据模型、Admin 契约和质量安全基线。 测试:定向核单 19 项及 Client 完整 355 项通过。已有人工核对任务未重置,真机当前页面未再次读到订单候选,因此未写入任何结果。
Author
Owner

状态:待用户验收。

提交:

  • 399aa0e:订单页只按编号、下单时间、待付款状态和唯一性核单;使用 order_submitted_at ± 5 分钟;商品及确认数据来自任务和 final_confirmation;同步 5 份 Client 基线文档。
  • 2f910e6:归档 docs/task/126-简化待付款订单核单条件.md。

验证:采购恢复 8 项、PDD 核单 12 项、Client 完整 355 项全部通过;语法和差异检查通过。

未验证:没有新建真实订单完成端到端上报。已有人工任务未重置,当前手机页面只读扫描未再次显示订单编号,因此没有写入结果或改变任务状态。

状态:待用户验收。 提交: - `399aa0e`:订单页只按编号、下单时间、待付款状态和唯一性核单;使用 `order_submitted_at ± 5 分钟`;商品及确认数据来自任务和 `final_confirmation`;同步 5 份 Client 基线文档。 - `2f910e6`:归档 `docs/task/126-简化待付款订单核单条件.md`。 验证:采购恢复 8 项、PDD 核单 12 项、Client 完整 355 项全部通过;语法和差异检查通过。 未验证:没有新建真实订单完成端到端上报。已有人工任务未重置,当前手机页面只读扫描未再次显示订单编号,因此没有写入结果或改变任务状态。
Author
Owner

补充归档修正:74f99f3 将定向测试总数更正为 20 项(采购恢复 8 项 + PDD 核单 12 项),不涉及代码行为。

补充归档修正:74f99f3 将定向测试总数更正为 20 项(采购恢复 8 项 + PDD 核单 12 项),不涉及代码行为。
Author
Owner

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

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