diff --git a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/constants/CleanNotificationConstants.java b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/constants/CleanNotificationConstants.java index 551f84e..8d77f89 100644 --- a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/constants/CleanNotificationConstants.java +++ b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/constants/CleanNotificationConstants.java @@ -170,7 +170,7 @@ public class CleanNotificationConstants { */ public static final String TASK_RESUMED = "任务已恢复,请继续完成%s的清洁"; - // ==================== 按���查询播报 ==================== + // ==================== 按键查询播报 ==================== /** * 按键查询播报(有工单时) @@ -361,11 +361,9 @@ public class CleanNotificationConstants { * @return 播报内容 */ public static String buildQuery(String areaName, int pendingCount) { - // 处理区域名称 - String name = (areaName != null && !areaName.isEmpty()) ? areaName : DEFAULT_AREA_NAME; - - // 有当前工单 - if (name != null && !name.isEmpty()) { + // 有当前工单(areaName 非空表示存在进行中的工单) + if (areaName != null && !areaName.isEmpty()) { + String name = areaName; if (pendingCount > 0) { // 当前工单 + 待办数量 return String.format(VoiceTemplate.QUERY_AREA_AND_PENDING, name, pendingCount); diff --git a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/listener/CleanOrderEventListener.java b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/listener/CleanOrderEventListener.java index 8d40650..89f55f3 100644 --- a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/listener/CleanOrderEventListener.java +++ b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/listener/CleanOrderEventListener.java @@ -437,24 +437,32 @@ public class CleanOrderEventListener { Long deviceId = event.getAssigneeId(); if (deviceId != null) { - // 发送完成通知(语音播报) - asyncSendOrderCompletedNotification(event.getOrderId(), deviceId); - // 自动推送下一个任务(异步) - asyncDispatchNext(deviceId, event.getOrderId()); + // 异步执行:先发送完成通知,等待5秒后再派发下一个任务 + asyncCompleteAndDispatchNext(event.getOrderId(), deviceId); } } /** - * 异步推送下一个任务 + * 异步执行工单完成后的通知和派单 + *
+ * 保证顺序:先播报"工单已完成",间隔5秒后再派发下一个任务(触发"新工单来啦") + * 避免两条语音播报顺序混乱或被覆盖 */ @Async("ops-task-executor") - public void asyncDispatchNext(Long deviceId, Long completedOrderId) { - cleanOrderService.autoDispatchNextOrder(completedOrderId, deviceId); - } - - @Async("ops-task-executor") - public void asyncSendOrderCompletedNotification(Long orderId, Long deviceId) { + public void asyncCompleteAndDispatchNext(Long orderId, Long deviceId) { + // 1. 先发送完成通知 sendOrderCompletedNotification(orderId, deviceId); + + // 2. 等待5秒,确保完成语音播报完毕后再触发下一个任务的通知 + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + log.warn("[CleanOrderEventListener] 等待被中断: orderId={}", orderId); + } + + // 3. 自动推送下一个任务 + cleanOrderService.autoDispatchNextOrder(orderId, deviceId); } // ==================== 通知方法 ====================