放盘后调用 POST /api/oneCardTerminal/acquireByPlate 获取订单;订单有效时只启用支付按钮,不自动消费。用户点击支付后播放本地“请刷卡”语音,并串行执行消费前读卡、补贴优先扣款、主钱包补足、消费后复读。订单与三个阶段的信息持续显示在页面上。
SoundPoolPlayer。JSON 请求包含 plate_code 和 equipment_code;统一响应 data 中读取 order_no 和分单位 amount。设备编号缺失、订单号为空或金额不大于零时不进入扣费。
订单加载完成后先进入等待支付;支付按钮显式授权后才把订单交给读卡器,重复点击和移盘后的点击均无效。
首次读卡失败不发送扣款;扣款一旦开始,整单不自动重试。部分成功或结果不确定进入阻断状态,等待人工核对。
新增 please_swipe_card.mp3,参考现有资源约 1.1 至 1.3 秒的节奏,输出 16kHz、32kbps、单声道 MP3。用户点击支付且读卡器接受订单后播放一次,并遵守语音开关。
覆盖请求解析、订单去重、严格事务顺序、三种钱包组合、失败后复读和防重复消费;再执行 JDK 8 完整测试与 Debug 构建。真实 USB 扣费、双钱包余额、新接口数据和语音响度均待样机验证。
可沉淀经验:真实扣费必须串行记录前读卡、逐钱包扣款和后读卡,并禁止不确定结果自动重试。
拒绝的反模式:并发操作第二个 USB 实例、扣款超时后自动整单重试、把部分成功显示成完全失败。
本地语音、补贴优先、必要时两笔扣款及整体实现边界均已由用户确认;代码和本地验证已按实施计划完成。