熟食结算支付流程对齐变更记录
问题与范围
熟食结算支付成功弹框消失后会主动退出到主页;刷卡或扫码命中后账单核对框关闭,但页面没有全屏加载状态。MQTT 离线记账模式在明确断网时仍等待五秒超时,期间没有有效反馈,超时后又与在线支付共用成功结果,无法正确表达“记账成功”。
本次只调整熟食结算及其使用的共享支付扩展,不改称重结算代码,不改变扫码使用 HTTP 或 MQTT 的现有配置规则。共享支付的旧入口保留原超时策略,避免改变定额结算等调用方。
代码改动
CookedFoodActivity.java:成功后留在熟食页;通过单笔支付会话阻止重复支付和迟到回调;显示和关闭全屏加载态;区分支付成功与记账成功;销毁时取消请求;补传人脸用户 ID。activity_cooked_food.xml:增加消费触摸事件的全屏半透明加载遮罩和居中进度条。PaymentNetworkPolicy.java:集中定义断网时继续请求、立即记账或立即失败的纯决策逻辑。PaymentSessionController.java:集中管理页面当前支付请求。PaymentManager.java:增加兼容的离线策略入口和独立记账回调;MQTT 明确断网时按订单模式立即处理;记账使用独立语音;协议与语音值使用具名常量。Constants.java:增加消费上传方式和订单模式的具名协议常量。- 新增支付网络策略和支付会话控制器共 7 个回归测试。
修复后的行为
- 在线刷卡、扫码或人脸支付时,账单核对框关闭后立即显示加载遮罩。
- 在线支付成功显示“支付成功”,弹框消失后留在熟食结算页。
- MQTT 离线记账模式明确断网时直接保存订单并显示“记账成功”,不再等待五秒。
- 支付中不能返回、清空、再次结算或修改购物车。
- 页面退出或请求已更换后,旧请求结果不会操作当前页面。
验证
- TDD 红灯确认测试在目标能力缺失时编译失败;实现后新增 7 个测试全部通过。
- 使用 Amazon Corretto 8 执行
JAVA_HOME=$(/usr/libexec/java_home -v 1.8) bash gradlew :app:testDebugUnitTest :app:assembleDebug --console=plain,结果为BUILD SUCCESSFUL。 - 全部 27 个 JVM 单元测试通过,失败和错误均为 0。
git diff --check未发现空白错误。
真机验证建议
- 在线刷卡和扫码成功后确认加载框出现、购物车清空、弹框消失后仍在熟食页。
- 在线余额不足、失败和超时后确认加载框关闭、失败弹框出现、购物车保留。
- MQTT + 离线记账模式断网刷卡和扫码,确认直接显示“记账成功”且订单进入待同步队列。
- 加载期间连续点击结算、清空和返回,确认不会生成重复订单。
- 人脸支付确认服务端收到用户 ID,并验证成功、失败和超时结果。
本次未执行 Git 暂存、提交、推送或分支切换。