diff --git a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/CleanOrderAuditEventHandler.java b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/CleanOrderAuditEventHandler.java index 9ba39370..5010e32e 100644 --- a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/CleanOrderAuditEventHandler.java +++ b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/CleanOrderAuditEventHandler.java @@ -200,7 +200,7 @@ public class CleanOrderAuditEventHandler implements RocketMQListener { */ private void sendTts(Long deviceId, String text) { try { - voiceBroadcastService.broadcast(deviceId, text, 80); + voiceBroadcastService.broadcast(deviceId, text); log.info("[CleanOrderAuditEventHandler] TTS 下发成功: deviceId={}, text={}", deviceId, text); } catch (Exception e) { log.error("[CleanOrderAuditEventHandler] TTS 下发异常: deviceId={}", deviceId, e); diff --git a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/CleanOrderConfirmEventHandler.java b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/CleanOrderConfirmEventHandler.java index 108747de..c064e8d4 100644 --- a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/CleanOrderConfirmEventHandler.java +++ b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/CleanOrderConfirmEventHandler.java @@ -138,7 +138,7 @@ public class CleanOrderConfirmEventHandler implements RocketMQListener { return; } try { - voiceBroadcastService.broadcast(deviceId, text, 80); + voiceBroadcastService.broadcast(deviceId, text); log.info("[CleanOrderConfirmEventHandler] TTS 下发成功: deviceId={}, text={}", deviceId, text); } catch (Exception e) { log.error("[CleanOrderConfirmEventHandler] TTS 发送失败: deviceId={}", deviceId, e); diff --git a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/voice/VoiceBroadcastService.java b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/voice/VoiceBroadcastService.java index f3c802f9..03e89f4d 100644 --- a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/voice/VoiceBroadcastService.java +++ b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/voice/VoiceBroadcastService.java @@ -16,13 +16,17 @@ import org.springframework.stereotype.Service; * 职责: * 1. 统一所有 TTS 下发入口 * 2. 提供同步/异步播报接口 - * 3. 管理播报音量参数 - * 4. 记录播报日志 + * 3. 记录播报日志 *

* 设计原则: * - 接受 deviceId 参数(而非 cleanerId) * - 简单可靠,不实现复杂的去重逻辑,由调用方控制 * - 直接调用 IoT 设备控制接口 + *

+ * JT808 TTS 播报标志 (tts_flag) 说明: + * - 0x01: 静默执行 - 设备收到后解析指令,修改参数,回复 0x0001,但不发声 + * - 0x08: TTS 语音播报(普通通知) - 播放语音,设备将文本通过喇叭朗读 + * - 0x09: TTS 语音播报(紧急通知) - 播放语音,通常带显示 * * @author lzh */ @@ -30,6 +34,32 @@ import org.springframework.stereotype.Service; @Service public class VoiceBroadcastService { + /** + * TTS 服务标识符 + */ + private static final String TTS_IDENTIFIER = "TTS"; + + /** + * TTS 播报标志:静默执行 + *

+ * 设备收到后解析指令,修改参数,回复 0x0001,但不发声 + */ + public static final int TTS_FLAG_SILENT = 0x01; + + /** + * TTS 播报标志:普通通知 + *

+ * 播放语音,设备将文本内容通过喇叭朗读出来 + */ + public static final int TTS_FLAG_NORMAL = 0x08; + + /** + * TTS 播报标志:紧急通知 + *

+ * 播放语音(通常带显示),用于重要通知 + */ + public static final int TTS_FLAG_URGENT = 0x09; + @Resource private IotDeviceControlApi iotDeviceControlApi; @@ -37,23 +67,25 @@ public class VoiceBroadcastService { private EventLogRecorder eventLogRecorder; /** - * 播报语音(同步) + * 播报语音(紧急通知,默认) + *

+ * 使用 tts_flag=0x09,适用于工单确认、到岗提醒等重要通知 * * @param deviceId 设备ID * @param text 播报文本 */ public void broadcast(Long deviceId, String text) { - broadcast(deviceId, text, null); + broadcast(deviceId, text, TTS_FLAG_URGENT); } /** - * 播报语音(带音量) + * 播报语音(指定播报类型) * * @param deviceId 设备ID * @param text 播报文本 - * @param volume 音量(0-100) + * @param ttsFlag 播报标志(0x01=静默, 0x08=普通, 0x09=紧急) */ - public void broadcast(Long deviceId, String text, Integer volume) { + public void broadcast(Long deviceId, String text, int ttsFlag) { if (deviceId == null || text == null) { return; } @@ -61,15 +93,15 @@ public class VoiceBroadcastService { try { IotDeviceServiceInvokeReqDTO reqDTO = new IotDeviceServiceInvokeReqDTO(); reqDTO.setDeviceId(deviceId); - reqDTO.setIdentifier("tts"); + reqDTO.setIdentifier(TTS_IDENTIFIER); reqDTO.setParams(MapUtil.builder() - .put("text", text) - .put("playMode", 1) // 立即播报 - .put("volume", volume != null ? volume : 50) + .put("tts_text", text) + .put("tts_flag", ttsFlag) .build()); iotDeviceControlApi.invokeService(reqDTO); - log.debug("[VoiceBroadcast] 播报成功: deviceId={}, text={}", deviceId, text); + log.debug("[VoiceBroadcast] 播报成功: deviceId={}, text={}, flag=0x{}", + deviceId, text, Integer.toHexString(ttsFlag)); // 记录日志 eventLogRecorder.info("clean", EventDomain.DEVICE, "TTS_SENT", @@ -84,6 +116,30 @@ public class VoiceBroadcastService { } } + /** + * 播报语音(普通通知) + *

+ * 使用 tts_flag=0x08,适用于一般性通知 + * + * @param deviceId 设备ID + * @param text 播报文本 + */ + public void broadcastNormal(Long deviceId, String text) { + broadcast(deviceId, text, TTS_FLAG_NORMAL); + } + + /** + * 播报语音(紧急通知) + *

+ * 使用 tts_flag=0x09,适用于工单确认、到岗提醒等重要通知 + * + * @param deviceId 设备ID + * @param text 播报文本 + */ + public void broadcastUrgent(Long deviceId, String text) { + broadcast(deviceId, text, TTS_FLAG_URGENT); + } + /** * 播报语音(异步) * @@ -94,16 +150,4 @@ public class VoiceBroadcastService { public void broadcastAsync(Long deviceId, String text) { broadcast(deviceId, text); } - - /** - * 播报语音(异步,带音量) - * - * @param deviceId 设备ID - * @param text 播报文本 - * @param volume 音量(0-100) - */ - @Async("ops-task-executor") - public void broadcastAsync(Long deviceId, String text, Integer volume) { - broadcast(deviceId, text, volume); - } }