diff --git a/src/main/java/com/qyft/ms/app/controller/TestController.java b/src/main/java/com/qyft/ms/app/controller/TestController.java index 434d70b..eada1fd 100644 --- a/src/main/java/com/qyft/ms/app/controller/TestController.java +++ b/src/main/java/com/qyft/ms/app/controller/TestController.java @@ -4,6 +4,7 @@ import cn.hutool.json.JSONObject; import com.qyft.ms.app.device.status.DeviceStatus; import com.qyft.ms.app.model.bo.Point3D; import com.qyft.ms.app.model.vo.SelfTestVO; +import com.qyft.ms.app.service.VirtualDeviceService; import com.qyft.ms.system.common.device.command.CommandFuture; import com.qyft.ms.system.common.device.command.DeviceCommandGenerator; import com.qyft.ms.system.common.result.Result; @@ -32,6 +33,7 @@ import java.util.concurrent.TimeUnit; public class TestController { private final DeviceStatus deviceStatus; private final DeviceCommandService deviceCommandService; + private final VirtualDeviceService virtualDeviceService; @Operation(summary = "启动虚拟模式") @PostMapping("/virtual") @@ -63,6 +65,14 @@ public class TestController { return Result.success(point3D); } + @Operation(summary = "设置模拟环境湿度") + @PostMapping("/set-humidity") + public Result setHumidity(double humidity) { + virtualDeviceService.setHumidity(humidity); + return Result.success(); + } + + protected void commandWait(CommandFuture... futures) throws Exception { CompletableFuture[] responseFutures = Arrays.stream(futures) .map(CommandFuture::getResponseFuture) 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 index c98f585..421b839 100644 --- a/src/main/java/com/qyft/ms/app/device/spray/SensorCollector.java +++ b/src/main/java/com/qyft/ms/app/device/spray/SensorCollector.java @@ -2,6 +2,7 @@ package com.qyft.ms.app.device.spray; import cn.hutool.json.JSONObject; import com.qyft.ms.app.common.constant.WebSocketMessageType; +import com.qyft.ms.app.device.status.DeviceStatus; 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; @@ -23,6 +24,7 @@ import java.util.concurrent.*; public class SensorCollector { private final WebSocketService webSocketService; private final DeviceCommandService deviceCommandService; + private final DeviceStatus deviceStatus; @PostConstruct public void init() { @@ -42,6 +44,9 @@ public class SensorCollector { Double deviceHumidity = humidityGetCmdFutureResult.getJSONObject("data").getDouble("humidity"); Double slideTemperature = getSlidePlatHeatFutureResult.getJSONObject("data").getDouble("temperature"); Double nozzleTemperature = getNozzleHeatCmdFutureResult.getJSONObject("data").getDouble("temperature"); + deviceStatus.setDeviceHumidity(deviceHumidity); + deviceStatus.setSlideTemperature(slideTemperature); + deviceStatus.setNozzleTemperature(nozzleTemperature); Map map = new HashMap<>(); map.put("humidity", deviceHumidity); map.put("slideTemperature", slideTemperature); diff --git a/src/main/java/com/qyft/ms/app/device/status/DeviceStatus.java b/src/main/java/com/qyft/ms/app/device/status/DeviceStatus.java index 8222b47..d8707ff 100644 --- a/src/main/java/com/qyft/ms/app/device/status/DeviceStatus.java +++ b/src/main/java/com/qyft/ms/app/device/status/DeviceStatus.java @@ -1,7 +1,6 @@ package com.qyft.ms.app.device.status; import cn.hutool.json.JSONObject; -import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import org.springframework.stereotype.Component; @@ -67,6 +66,21 @@ public class DeviceStatus { */ private boolean slidePlatHeating = false; + /** + * 当前湿度 + */ + private volatile Double deviceHumidity = 0.0; + + /** + * 当前载玻台湿度 + */ + private volatile Double slideTemperature = 0.0; + + /** + * 当前喷嘴湿度 + */ + private volatile Double nozzleTemperature = 0.0; + public JSONObject toJSON() { JSONObject json = new JSONObject(); json.putOnce("spraying", spraying); @@ -80,6 +94,9 @@ public class DeviceStatus { json.putOnce("virtual", virtual); json.putOnce("nozzleHeating", nozzleHeating); json.putOnce("slidePlatHeating", slidePlatHeating); + json.putOnce("deviceHumidity", deviceHumidity); + json.putOnce("slideTemperature", slideTemperature); + json.putOnce("nozzleTemperature", nozzleTemperature); return json; } diff --git a/src/main/java/com/qyft/ms/app/front/cmd/business/DehumidifierStart.java b/src/main/java/com/qyft/ms/app/front/cmd/business/DehumidifierStart.java index a0b9bbe..3a4a2b4 100644 --- a/src/main/java/com/qyft/ms/app/front/cmd/business/DehumidifierStart.java +++ b/src/main/java/com/qyft/ms/app/front/cmd/business/DehumidifierStart.java @@ -63,6 +63,18 @@ public class DehumidifierStart extends BaseCommandHandler { commandWait(dehumidifierValveOpenCmdFuture); deviceStatus.setDehumidifierRunning(true); + + while (deviceStatus.isDehumidifierRunning()) { + if(deviceStatus.getDeviceHumidity() < humidity) { + DeviceCommand dehumidifierStopCommand = DeviceCommandGenerator.dehumidifierValveClose(); // 生成关闭除湿阀指令 + CommandFuture dehumidifierStopCommandFuture = deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), dehumidifierStopCommand); + commandWait(dehumidifierStopCommandFuture); + deviceStatus.setDehumidifierRunning(false); + break; + }else{ + Thread.sleep(1000); + } + } }); } } diff --git a/src/main/java/com/qyft/ms/app/front/cmd/business/DehumidifierStop.java b/src/main/java/com/qyft/ms/app/front/cmd/business/DehumidifierStop.java index 8a2ff93..3882196 100644 --- a/src/main/java/com/qyft/ms/app/front/cmd/business/DehumidifierStop.java +++ b/src/main/java/com/qyft/ms/app/front/cmd/business/DehumidifierStop.java @@ -29,9 +29,9 @@ public class DehumidifierStop extends BaseCommandHandler { @Override public CompletableFuture handle(FrontCmdControlForm form) { return runAsync(() -> { - DeviceCommand dehumidifierStopCommand = DeviceCommandGenerator.dehumidifierValveClose(); // 生成关闭除湿阀指令 - CommandFuture dehumidifierStopCommandFuture = deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), dehumidifierStopCommand); - commandWait(dehumidifierStopCommandFuture); +// DeviceCommand dehumidifierStopCommand = DeviceCommandGenerator.dehumidifierValveClose(); // 生成关闭除湿阀指令 +// CommandFuture dehumidifierStopCommandFuture = deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), dehumidifierStopCommand); +// commandWait(dehumidifierStopCommandFuture); deviceStatus.setDehumidifierRunning(false); }); diff --git a/src/main/java/com/qyft/ms/app/service/VirtualDeviceService.java b/src/main/java/com/qyft/ms/app/service/VirtualDeviceService.java index 8fca416..6165297 100644 --- a/src/main/java/com/qyft/ms/app/service/VirtualDeviceService.java +++ b/src/main/java/com/qyft/ms/app/service/VirtualDeviceService.java @@ -4,6 +4,7 @@ import cn.hutool.json.JSONObject; import com.qyft.ms.system.model.bo.DeviceCommand; import com.qyft.ms.system.service.device.DeviceCommandService; import lombok.RequiredArgsConstructor; +import lombok.Setter; import org.springframework.stereotype.Service; /** @@ -13,6 +14,12 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor public class VirtualDeviceService { private final DeviceCommandService deviceCommandService; + @Setter + private volatile double humidity = 26; + @Setter + private volatile double slideTemperature = 27; + @Setter + private volatile double nozzleTemperature = 28; public void completeCommandResponse(DeviceCommand cmdToDevice) { @@ -33,7 +40,7 @@ public class VirtualDeviceService { if (device.contains("humidity")) { if (action.contains("get")) {//获取温度 JSONObject data = new JSONObject(); - data.putOnce("humidity", 26); + data.putOnce("humidity", humidity); jsonObject.putOnce("data", data); } }else if (device.contains("device")) { @@ -47,13 +54,13 @@ public class VirtualDeviceService { }else if (device.contains("slide_temperature")) { if (action.contains("get")) {//获取设备整体状态 JSONObject data = new JSONObject(); - data.putOnce("temperature", 50); + data.putOnce("temperature", slideTemperature); jsonObject.putOnce("data", data); } }else if (device.contains("nozzle_temperature")) { if (action.contains("get")) {//获取设备整体状态 JSONObject data = new JSONObject(); - data.putOnce("temperature", 60); + data.putOnce("temperature", nozzleTemperature); jsonObject.putOnce("data", data); } }else if (device.contains("xyz")) {