消费模块语音提示与读卡器状态布局设计

文档信息

字段内容
所属项目ZhctTrayBindingMachine
设计范围消费模块就餐人员语音提示、读卡器异常提示位置
版本v1.0
状态已确认,待生成实施计划
日期2026-08-29
主要受众就餐人员

1. 背景与结论

消费流程当前主要依赖页面文案提示,仅有“请放卡片进行支付”语音。就餐人员在看向餐盘、卡片或读卡区时,可能错过支付状态变化;但如果播报首次读卡成功、写卡成功等技术阶段,又会造成提示密集、术语难懂,并可能让用户误以为交易已经完成。

最终采用“用户动作 + 业务结果”语音策略:只在就餐人员需要执行动作、获知最终结果或规避重复扣款风险时播报。首次读卡成功、写卡成功等内部阶段不单独播报;任何已经尝试扣款但无法确认最终结果的异常,都不能简单播报“支付失败”。

读卡器异常文字只做水平镜像:从屏幕右侧移到左侧对应位置,上下位置、字号、颜色、外边距数值和显示条件均保持不变。

2. 目标与范围

2.1 目标

2.2 范围内

2.3 范围外

3. 方案对比与选型

方案说明优点问题结论
全阶段播报首次读卡、写卡及各处理阶段均播报技术过程完整频繁、术语化,容易把阶段成功误认为支付成功不采用
用户动作 + 业务结果只播报需要动作、最终结果和安全风险清晰、节制,适合就餐人员需要准确分类交易结果采用
仅最终结果只播报支付成功或异常最安静用户可能过早拿卡,不适合需持续放卡的读卡器不采用

4. 语音提示清单

4.1 必须播报

业务场景播报文案播放时机规则
正金额订单等待卡片请将卡片放在读卡区。订单有效并进入等待卡片状态每个订单会话一次;使用“放卡”而非“刷卡”,避免用户立即移走卡片
正金额订单开始处理正在支付,请勿移动卡片。首次检测到本次卡片并进入支付处理每次交易尝试一次
没有待支付订单没有待支付订单,请取走餐盘。服务端明确返回餐盘无待支付订单每次餐盘查询结果一次
支付确定成功支付成功,请取走卡片和餐盘。扣款结果及消费后读卡校验均满足成功条件只允许在确定成功后播报
首次读卡失败且未尝试扣款读卡失败,请取走卡片后重新操作。首次读卡未完成,并能确定尚未进入扣款每次交易尝试一次
已尝试扣款但结果不确定支付结果待确认,请勿重复刷卡,请联系工作人员。已调用扣款/写卡,但后读卡、卡片一致性或结果确认不完整安全最高优先级;禁止改成“支付失败”
读卡器暂不可用读卡器暂不可用,请联系工作人员。业务正等待就餐人员放卡时,读卡器进入不可用状态每次连续异常期间一次;空闲初始化和重连轮询不重复播报
零金额订单等待核验请将卡片放在读卡区进行核验。零金额订单进入读卡核验状态每个订单会话一次;不得包含“支付”或“扣款”
零金额订单核验成功核验完成,请取走卡片和餐盘。零金额订单完成有效读卡并上报每个订单会话一次
零金额订单读卡失败读卡失败,请取走卡片后重新操作。零金额核验首次读卡失败每次核验尝试一次

4.2 条件播报

业务场景播报文案启用条件
余额不足余额不足,请更换卡片或选择其他支付方式。只有底层交易结果能够明确区分“未发生扣款的余额不足”时才启用;无法明确分类时不得使用
需要先移走遗留卡片请先取走读卡区卡片,再放入本次支付卡片。当前流程确有“等待移走旧卡”独立状态,并能与本次放卡区分时启用

4.3 不单独播报

技术阶段处理方式原因
首次读卡成功页面继续展示处理状态,不播报用户无需执行新动作,且交易尚未完成
写卡/扣款成功等待最终校验后播报支付成功阶段成功不等于整笔交易完成
写卡/扣款失败根据是否尝试扣款及能否确认结果,映射为未扣款失败或结果待确认“写卡失败”是技术术语,也可能掩盖已经扣款的风险
后台上报失败对就餐人员仍按确定的扣款结果播报,后台自行补传上报失败不能否定已经确认的支付结果
读卡器正常连接保持静默页面正常状态已足够,无需增加噪声

5. 交易结果语义

消费语音不能只使用“成功/失败”二分类,必须使用以下业务结果:

结果类型判定边界就餐人员语音
确定成功扣款已成功,消费后读取结果与本次卡片和金额一致支付成功,请取走卡片和餐盘。
确定未扣款首次读卡失败或在扣款调用前终止读卡失败,请取走卡片后重新操作。
结果不确定已尝试扣款,但写卡结果、消费后读卡或卡片一致性无法完整确认支付结果待确认,请勿重复刷卡,请联系工作人员。
支付成功但上报待补传本地扣款和校验确定成功,仅服务端上报失败支付成功,请取走卡片和餐盘。

“结果不确定”优先于一般失败提示。此状态必须同时在页面展示“请勿重复支付”类警示,并禁止自动重新发起同一笔扣款。

6. 播放策略

6.1 触发原则

6.2 去重范围

6.3 优先级

  1. 支付结果待确认等防重复扣款安全提示。
  2. 确定失败和余额不足等终止结果。
  3. 支付成功或核验成功。
  4. 正在支付、等待放卡等动作提示。
  5. 读卡器不可用等硬件建议。

高优先级事件到达时可以停止尚未完成的低优先级提示;同级或低级重复事件不叠加播放。一个最终结果确定后,本次交易不再播放等待或处理中提示。

7. 组件职责设计

组件责任边界
ConsumptionVoiceEvent定义与就餐人员有关的业务语音事件不包含原始读卡器错误码和 UI 文案
ConsumptionVoicePolicy将业务事件映射为语音类型、优先级和去重范围纯 Java,不直接操作播放器或 Activity
ConsumptionVoiceController执行语音开关、去重、优先级、停止和播放不判断交易是否成功
ConsumptionActivity在状态机发生语义变化时发出业务事件不直接用读卡/写卡技术阶段决定最终语音
交易结果分类器输出确定成功、确定未扣款、结果不确定、上报待补传不负责播放和页面布局

语音资源使用具名资源和枚举集中管理,禁止在 Activity 中散落资源 ID、优先级数字或提示文案。类和非显然的交易安全判断应增加责任及原因注释。

8. 本地语音资源

9. 读卡器异常提示左侧镜像

现有 consumption_reader_status 位于页面右侧。布局只做水平镜像:

属性当前调整后
水平对齐layout_alignParentEnd="true"layout_alignParentStart="true"
水平外边距layout_marginEnd="@dimen/common_title_bar_horizontal_margin"layout_marginStart="@dimen/common_title_bar_horizontal_margin"
纵向规则位于现有状态视图下方不变
顶部外边距现有 consumption_ui_reader_margin_top不变
文字、字号、颜色现状不变
显示逻辑仅错误状态显示红字,正常连接时隐藏不变

此调整不新增绝对坐标或重复尺寸,继续复用现有 dimen,以保证不同分辨率下仍是相对屏幕边缘的镜像位置。

10. 状态映射

消费状态/事件语音事件备注
有效正金额订单进入 WAITING_CARD等待支付放卡每订单会话一次
首次检测到卡片并开始首次读取/交易支付处理中每交易尝试一次
订单查询明确无待支付订单无待支付订单不进入刷卡流程
交易分类为确定成功支付成功最终提示
首次读取失败且未调用扣款读卡失败允许用户移卡后重新操作
扣款已尝试但交易无法确认支付结果待确认禁止自动重试
确定扣款成功、仅上报失败支付成功后台补传不打扰就餐人员
零金额订单进入读卡状态等待核验放卡不使用支付语义
零金额有效读取及上报完成核验完成最终提示
等待卡片期间读卡器不可用读卡器不可用连续异常一次

11. 验收标准

AC场景预期
AC-VOICE-001正金额订单进入等待卡片每个订单会话只播报一次“请将卡片放在读卡区”
AC-VOICE-002首次检测到卡片并开始支付播报一次“正在支付,请勿移动卡片”
AC-VOICE-003页面重绘、前后台切换或相同回调重复不重复播报相同语音
AC-VOICE-004无待支付订单播报“没有待支付订单,请取走餐盘”,不进入支付语音
AC-VOICE-005交易确定成功只在最终校验成功后播报支付成功
AC-VOICE-006首次读卡失败且未扣款播报读卡失败并允许重新操作
AC-VOICE-007扣款已尝试但结果不完整播报结果待确认及禁止重复刷卡,不播报支付失败
AC-VOICE-008扣款成功但服务端上报失败对就餐人员播报支付成功,后台补传
AC-VOICE-009零金额订单等待和完成语音均不包含支付、扣款含义
AC-VOICE-010语音开关关闭所有语音静默,页面和交易逻辑不变
AC-VOICE-011等待放卡期间读卡器连续异常只播报一次不可用提示;恢复后再次异常可再播一次
AC-VOICE-012高优先级安全提示到达停止低优先级提示且不发生重叠
AC-UI-001读卡器异常文字显示位于原右侧位置的左侧水平镜像位置
AC-UI-002读卡器连接正常状态文字仍隐藏,不因布局调整改变逻辑

12. 测试策略

12.1 自动化测试

12.2 构建与静态检查

12.3 真机验收

13. 风险与控制

风险影响控制
将写卡失败直接映射为支付失败已扣款用户可能再次刷卡统一经过交易结果分类器,扣款尝试后无法确认一律提示结果待确认
Activity 多处直接播放重复、重叠或语义冲突集中到语音策略和控制器
页面重绘触发语音同一状态反复播报使用订单会话和交易尝试级去重键
零金额复用支付语音就餐人员误以为发生扣款独立核验语义和音频资源
硬件断开轮询反复报警现场噪声和焦虑连续异常区间只播一次
新音频规格不一致播放失败、音量跳变与现有正常资源统一编码并真机验收

14. 设计结论