消费模块语音提示与读卡器状态镜像变更记录

变更信息

字段 内容
项目 ZhctTrayBindingMachine
日期 2026-08-29
状态 代码与本地资源已完成,待目标设备真机听感验收
影响范围 消费页语音、交易失败语义、读卡器异常文字布局

1. 变更结果

2. 代码结构

文件 责任
ConsumptionVoicePolicy.java 业务事件到语音提示及优先级的纯 Java 映射
ConsumptionVoicePlaybackGate.java 会话去重、低优先级跳过和高优先级抢占
ConsumptionVoiceOutcomeClassifier.java 将交易失败分类为读卡失败、余额不足或支付结果待确认
ConsumptionVoiceController.java 语音开关、本地资源映射、MediaPlayer 播放和释放
ConsumptionActivity.java 在订单、交易和读卡器状态变化时发出业务语音事件
activity_consumption.xml 读卡器异常文字左侧镜像布局

Activity 不直接引用新语音资源 ID,也不根据写卡回调自行判断应播报的最终结果。

3. 语音资源

新文件均放入现有目录 app/src/main/res/raw/

文件 播报内容
consumption_place_card_payment.wav 请将卡片放在读卡区
consumption_payment_processing.wav 正在支付,请勿移动卡片
consumption_no_pending_order.wav 没有待支付订单,请取走餐盘
consumption_payment_success.wav 支付成功,请取走卡片和餐盘
consumption_card_read_failed.wav 读卡失败,请取走卡片后重新操作
consumption_payment_unknown.wav 支付结果待确认,请勿重复刷卡,请联系工作人员
consumption_reader_unavailable.wav 读卡器暂不可用,请联系工作人员
consumption_place_card_verify.wav 请将卡片放在读卡区进行核验
consumption_verify_success.wav 核验完成,请取走卡片和餐盘
consumption_balance_insufficient.wav 余额不足,请更换卡片或选择其他支付方式

3.1 声线与参数

3.2 同源复现证据

使用相同声线、语速和转换参数重新合成参考句“请放卡片进行支付”,其 PCM SHA-256 与现有 please_place_card.wav 完全一致:

016128497cb7cf4c75abef470d5b5427e417f3dc8a816a81b4cdb599ebc93ec6

因此本次新文件的声线、语调风格和原始音量处理链路与当前消费语音一致;交付语速按真机试听反馈统一调整为原文件的 1.2 倍。

3.3 本次语速调整验证

4. 播放与安全规则

5. 交易失败分类

条件 页面/交易分类 语音
首次读卡失败,尚未尝试扣款 确定未扣款 读卡失败,请取走卡片后重新操作
余额不足,且批次没有任何已完成扣款 确定未扣款 余额不足,请更换卡片或选择其他支付方式
已尝试扣款,无法完整确认结果 结果待确认,禁止自动重试 支付结果待确认,请勿重复刷卡,请联系工作人员
已完成部分扣款,后续钱包余额不足 结果待确认 不得误播余额不足并引导再次支付
本地扣款及复读校验成功、仅上报失败 支付成功,后台补传 支付成功,请取走卡片和餐盘

余额不足只在“没有任何已完成扣款”时归类为确定失败;部分扣款后出现同名错误仍保持结果待确认。

6. 读卡器提示布局

consumption_reader_status 调整为:

android:layout_alignParentStart="true"
android:layout_marginStart="@dimen/common_title_bar_horizontal_margin"

移除了对应 End 属性。仍位于标题状态视图下方,继续使用原顶部外边距、字号、颜色和 gone 初始状态;业务代码仍只有 Tone.ERROR 时显示。

7. 自动化验证

新增测试

执行结果

构建继续使用项目兼容的 Amazon Corretto JDK 8。日志中保留旧 Android 构建链对 core-lambda-stubs.jar 主版本的既有警告,不影响构建成功。

8. 真机待验

9. Git 边界

本次只执行只读 Git 状态、差异和空白检查;未暂存、提交、推送或执行其他 Git 写操作。