熟食结算支付流程对齐称重结算设计
背景
熟食结算当前在支付成功后退出页面,且刷卡或扫码命中后缺少全屏加载态。无网络记账模式下仍等待 MQTT 超时,导致对账弹框消失后出现数秒无反馈。用户已确认以称重结算的正常交互为基准修正熟食结算。
方案比较
- 复制称重结算的全部支付代码:行为最接近,但会形成第二套重复代码,后续修复容易分叉。
- 直接修改共享
PaymentManager:复用程度高,但会改变定额结算等现有调用方,回归范围过大。
- 保留共享
PaymentManager,为熟食调用增加明确的离线结果和请求生命周期控制:改动集中,且不改变其他调用方现有行为。
采用方案 3。
设计
- 熟食支付成功弹框自动消失后留在熟食结算页,不调用
finish()。
- 刷卡或扫码命中后关闭账单核对弹框,并立即显示全屏加载遮罩;收到成功、失败或离线记账结果后关闭遮罩。
- MQTT 模式且当前无网络时,不发送请求、不等待五秒超时,立即保存离线订单并返回“记账成功”。
- 支付结果区分在线支付成功与离线记账成功,分别使用“支付成功”和“记账成功”标题及对应语音。
- 支付进行期间禁止清空、再次结算、切换商品、调零和返回,避免重复请求或订单内容变化。
- 熟食页面只跟踪自己的当前支付请求;页面销毁时取消该请求,迟到回调不得再操作页面。
- 扫码继续遵循现有上传方式配置,本次不改变扫码必须 HTTP 还是允许 MQTT 的业务规则。
验收
- 在线刷卡、扫码成功后显示支付成功,弹框消失后仍停留在熟食结算页,购物车已清空。
- 在线失败或超时后关闭加载遮罩并显示失败结果,购物车保留。
- MQTT + 离线记账模式下,断网刷卡或扫码后立即显示记账成功,不出现数秒空白等待。
- 支付等待期间重复点击结算、清空、返回等操作不会产生第二笔请求或改变订单。
- 退出页面时当前熟食支付请求被取消,不再弹出迟到结果。
验证范围
- 编译
app Debug 变体。
- 增加并运行支付结果分类、离线决策和支付交互状态的单元测试。
- 不提交、不暂存 Git 变更,由用户设备实测最终支付链路。