江苏金斯瑞 · 客户问题证据包

消费订单导出实付金额异常

结论不是“列表筛选错”,而是待支付订餐单提前写入 pay_price,取消后该字段仍保留;列表顶部按状态排除了取消单,列表行与导出却没有。

待研发修复 生产未修改 A 级:视频 + 生产只读聚合 + Git
全部订单4,922
有效实收订单4,915
正确实收金额¥105,706.90
导出多计¥152.80

评审结论

筛选范围正确;列表行级与导出的“实付金额”语义错误,列表顶部实收统计正确。
1 · 待支付下单pay_price 已写入应付价
2 · 取消/超时只更新订单状态,不清理应付价
3 · 页面顶部只统计 30/50/60,因此正确
4 · 列表行/导出无状态判断,取消单被误计

数据如何对上

状态笔数订单金额pay_price实际扣款
已取消、待支付、订餐7152.80152.800.00
已付款4,915105,726.90105,706.90105,706.90
合计4,922105,879.70105,859.70105,706.90
导出错误实付 = 有效实收 105706.90 + 取消单应付价 152.80
             = 105859.70

现金 703.16 + 补贴 105003.74 = 105706.90。账户扣款分摊与页面实收一致,证明 152.80 并未真实扣款。

直接责任提交

提交作者作用
5718ec399lanhaijun首次增加消费订单导出合计,对全部行累计实付,无状态门禁。
f323a5dc2lanhaijun流式 XLSX 重写后继续保留该累计逻辑。
7cde77d207sunqianqian抽取 pay_price - refund_amount helper,仍未判断状态。
bc02932658guodongwei页面顶部改为有效支付状态统计,导出没有同步。

上游订餐下单/取消提交的作者记录为占位身份 Example User <example@example.com>,不能据此归责到真实个人。

拟实施方案

P0 · 最小正确性修复

  1. 新增状态感知的 received_amount 领域函数。
  2. 列表行、页面统计、导出行、导出合计共用同一状态集合。
  3. 待付款、已取消、已退款显示实收 0。
  4. 不清理历史 pay_price,不动支付/扣款链路。

P1 · 防止再次漂移

  1. 列表与导出共享筛选查询构造器。
  2. 补待付款、取消、付款、退款中、部分退款、全退款状态矩阵。
  3. 用真实函数/夹具测试,不用源码字符串断言代替业务测试。
  4. 测试同条件业务行数、订单金额和实收金额恒等式。

人工评审清单

  • 确认有效实收状态为 30/50/60。
  • 确认退款中是否立即扣减待审核退款金额。
  • 确认不修改历史 pay_price 数据。
  • 确认是否需要向业务重发历史导出。
  • 确认上线后用本次相同条件回验 105706.90 / 4915。

评审状态:待 Jack / 产品负责人 / 财务或运营口径负责人确认。