From 6032346307078e0f01cfb4c7098e7965f49230db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=87=A4=E5=90=89?= Date: Wed, 19 Mar 2025 19:58:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E8=B0=83=E6=95=B4=E4=BC=A0=E6=84=9F?= =?UTF-8?q?=E5=99=A8ws=E6=8E=A8=E9=80=81=E6=95=B0=E6=8D=AE=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/common/constant/WebSocketMessageType.java | 4 +- .../ms/app/device/spray/HumidityCollector.java | 57 ---------------------- .../qyft/ms/app/device/spray/SensorCollector.java | 57 ++++++++++++++++++++++ 3 files changed, 59 insertions(+), 59 deletions(-) delete mode 100644 src/main/java/com/qyft/ms/app/device/spray/HumidityCollector.java create mode 100644 src/main/java/com/qyft/ms/app/device/spray/SensorCollector.java diff --git a/src/main/java/com/qyft/ms/app/common/constant/WebSocketMessageType.java b/src/main/java/com/qyft/ms/app/common/constant/WebSocketMessageType.java index 399f84d..6346289 100644 --- a/src/main/java/com/qyft/ms/app/common/constant/WebSocketMessageType.java +++ b/src/main/java/com/qyft/ms/app/common/constant/WebSocketMessageType.java @@ -15,9 +15,9 @@ public class WebSocketMessageType { public static final String SPRAY_POINT = "spray_point"; /** - * 湿度 + * 传感器 */ - public static final String HUMIDITY = "humidity"; + public static final String SENSOR = "sensor"; /** * 系统急停按钮被按下 diff --git a/src/main/java/com/qyft/ms/app/device/spray/HumidityCollector.java b/src/main/java/com/qyft/ms/app/device/spray/HumidityCollector.java deleted file mode 100644 index 6192544..0000000 --- a/src/main/java/com/qyft/ms/app/device/spray/HumidityCollector.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.qyft.ms.app.device.spray; - -import cn.hutool.json.JSONObject; -import com.qyft.ms.app.common.constant.WebSocketMessageType; -import com.qyft.ms.system.common.device.command.CommandFuture; -import com.qyft.ms.system.common.device.command.DeviceCommandGenerator; -import com.qyft.ms.system.model.bo.DeviceCommand; -import com.qyft.ms.system.service.WebSocketService; -import com.qyft.ms.system.service.device.DeviceCommandService; -import jakarta.annotation.PostConstruct; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.*; - -@Slf4j -@Component -@RequiredArgsConstructor -public class HumidityCollector { - private final WebSocketService webSocketService; - private final DeviceCommandService deviceCommandService; - - @PostConstruct - public void init() { - ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); - executorService.scheduleAtFixedRate(() -> { - try { - DeviceCommand humidityGetCmd = DeviceCommandGenerator.humidityGet(); // 生成获取湿度指令 - CommandFuture humidityGetCmdFuture = deviceCommandService.sendCommandNoFront(humidityGetCmd); - commandWait(humidityGetCmdFuture); - JSONObject humidityGetCmdFutureResult = humidityGetCmdFuture.getResponseResult(); - Double deviceHumidity = humidityGetCmdFutureResult.getDouble("humidity"); - Map map = new HashMap<>(); - map.put("humidity", deviceHumidity); - webSocketService.pushMsg(WebSocketMessageType.HUMIDITY, map); - } catch (Exception e) { - if (!executorService.isShutdown()) { - executorService.shutdown(); // 关闭 ScheduledExecutorService - } - log.error("定时推送设备状态异常", e); - } - }, 10, 1000, TimeUnit.MILLISECONDS); - } - - private void commandWait(CommandFuture... futures) throws ExecutionException, InterruptedException { - CompletableFuture[] responseFutures = Arrays.stream(futures) - .map(CommandFuture::getResponseFuture) - .toArray(CompletableFuture[]::new); - CompletableFuture.allOf(responseFutures) - .orTimeout(120, TimeUnit.SECONDS) - .get(); - } -} diff --git a/src/main/java/com/qyft/ms/app/device/spray/SensorCollector.java b/src/main/java/com/qyft/ms/app/device/spray/SensorCollector.java new file mode 100644 index 0000000..f9477e6 --- /dev/null +++ b/src/main/java/com/qyft/ms/app/device/spray/SensorCollector.java @@ -0,0 +1,57 @@ +package com.qyft.ms.app.device.spray; + +import cn.hutool.json.JSONObject; +import com.qyft.ms.app.common.constant.WebSocketMessageType; +import com.qyft.ms.system.common.device.command.CommandFuture; +import com.qyft.ms.system.common.device.command.DeviceCommandGenerator; +import com.qyft.ms.system.model.bo.DeviceCommand; +import com.qyft.ms.system.service.WebSocketService; +import com.qyft.ms.system.service.device.DeviceCommandService; +import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.*; + +@Slf4j +@Component +@RequiredArgsConstructor +public class SensorCollector { + private final WebSocketService webSocketService; + private final DeviceCommandService deviceCommandService; + + @PostConstruct + public void init() { + ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); + executorService.scheduleAtFixedRate(() -> { + try { + DeviceCommand humidityGetCmd = DeviceCommandGenerator.humidityGet(); // 生成获取湿度指令 + CommandFuture humidityGetCmdFuture = deviceCommandService.sendCommandNoFront(humidityGetCmd); + commandWait(humidityGetCmdFuture); + JSONObject humidityGetCmdFutureResult = humidityGetCmdFuture.getResponseResult(); + Double deviceHumidity = humidityGetCmdFutureResult.getDouble("humidity"); + Map map = new HashMap<>(); + map.put("humidity", deviceHumidity); + webSocketService.pushMsg(WebSocketMessageType.SENSOR, map); + } catch (Exception e) { + if (!executorService.isShutdown()) { + executorService.shutdown(); // 关闭 ScheduledExecutorService + } + log.error("定时推送传感器状态错误", e); + } + }, 10, 1000, TimeUnit.MILLISECONDS); + } + + private void commandWait(CommandFuture... futures) throws ExecutionException, InterruptedException { + CompletableFuture[] responseFutures = Arrays.stream(futures) + .map(CommandFuture::getResponseFuture) + .toArray(CompletableFuture[]::new); + CompletableFuture.allOf(responseFutures) + .orTimeout(120, TimeUnit.SECONDS) + .get(); + } +}