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 e1b6cad..91d4b32 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 @@ -62,6 +62,16 @@ public class DeviceStatus { */ private boolean virtual = false; + /** + * 喷头加热 + */ + private boolean nozzleHeating = false; + + /** + * 载玻台加热 + */ + private boolean slidePlatHeating = false; + public JSONObject toJSON() { JSONObject json = new JSONObject(); json.putOnce("spraying", spraying); diff --git a/src/main/java/com/qyft/ms/app/front/cmd/business/NozzleHeatStart.java b/src/main/java/com/qyft/ms/app/front/cmd/business/NozzleHeatStart.java new file mode 100644 index 0000000..99c12dc --- /dev/null +++ b/src/main/java/com/qyft/ms/app/front/cmd/business/NozzleHeatStart.java @@ -0,0 +1,47 @@ +package com.qyft.ms.app.front.cmd.business; + +import com.qyft.ms.app.device.status.DeviceStatus; +import com.qyft.ms.system.common.annotation.CommandMapping; +import com.qyft.ms.system.common.constant.CommandStatus; +import com.qyft.ms.system.common.device.command.DeviceCommandGenerator; +import com.qyft.ms.system.common.device.command.FrontResponseGenerator; +import com.qyft.ms.system.core.handler.BaseCommandHandler; +import com.qyft.ms.system.model.bo.DeviceCommand; +import com.qyft.ms.system.model.form.FrontCmdControlForm; +import com.qyft.ms.system.service.WebSocketService; +import com.qyft.ms.system.service.device.DeviceCommandService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.concurrent.CompletableFuture; + +/** + * 喷头加热 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@CommandMapping("nozzle_heat_start") +public class NozzleHeatStart extends BaseCommandHandler { + + private final DeviceCommandService deviceCommandService; + private final DeviceStatus deviceStatus; + private final WebSocketService webSocketService; + + @Override + public CompletableFuture handle(FrontCmdControlForm form) { + Double temperature = form.getDoubleParam("temperature");//设置温度 + // 参数校验:humidity 必填 + if (temperature == null) { + webSocketService.pushCMDResponseMsg(FrontResponseGenerator.generateJson(form.getCmdId(), form.getCmdCode(), CommandStatus.DEVICE_ERROR, "参数 temperature 必填")); + throw new RuntimeException("参数 temperature 必填"); + } + return runAsync(() -> { + + DeviceCommand nozzleHeatStartCmd = DeviceCommandGenerator.nozzleHeatStart(temperature); // 生成喷头加热 + deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), nozzleHeatStartCmd);//发送指令 + deviceStatus.setNozzleHeating(true);//设置喷头加热状态 + }); + } +} diff --git a/src/main/java/com/qyft/ms/app/front/cmd/business/NozzleHeatStop.java b/src/main/java/com/qyft/ms/app/front/cmd/business/NozzleHeatStop.java new file mode 100644 index 0000000..f50258e --- /dev/null +++ b/src/main/java/com/qyft/ms/app/front/cmd/business/NozzleHeatStop.java @@ -0,0 +1,38 @@ +package com.qyft.ms.app.front.cmd.business; + +import com.qyft.ms.app.device.status.DeviceStatus; +import com.qyft.ms.system.common.annotation.CommandMapping; +import com.qyft.ms.system.common.device.command.DeviceCommandGenerator; +import com.qyft.ms.system.core.handler.BaseCommandHandler; +import com.qyft.ms.system.model.bo.DeviceCommand; +import com.qyft.ms.system.model.form.FrontCmdControlForm; +import com.qyft.ms.system.service.device.DeviceCommandService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.concurrent.CompletableFuture; + +/** + * 除湿指令处理 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@CommandMapping("nozzle_heat_stop") +public class NozzleHeatStop extends BaseCommandHandler { + + private final DeviceCommandService deviceCommandService; + private final DeviceStatus deviceStatus; + + @Override + public CompletableFuture handle(FrontCmdControlForm form) { + return runAsync(() -> { + + DeviceCommand nozzleHeatStopCmd = DeviceCommandGenerator.nozzleHeatStop(); // 生成喷头加热关闭 + deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), nozzleHeatStopCmd);//发送指令 + deviceStatus.setNozzleHeating(false);//设置喷头加热状态 + + }); + } +} diff --git a/src/main/java/com/qyft/ms/app/front/cmd/business/SlidePlatHeatStart.java b/src/main/java/com/qyft/ms/app/front/cmd/business/SlidePlatHeatStart.java new file mode 100644 index 0000000..a545a2a --- /dev/null +++ b/src/main/java/com/qyft/ms/app/front/cmd/business/SlidePlatHeatStart.java @@ -0,0 +1,46 @@ +package com.qyft.ms.app.front.cmd.business; + +import com.qyft.ms.app.device.status.DeviceStatus; +import com.qyft.ms.system.common.annotation.CommandMapping; +import com.qyft.ms.system.common.constant.CommandStatus; +import com.qyft.ms.system.common.device.command.DeviceCommandGenerator; +import com.qyft.ms.system.common.device.command.FrontResponseGenerator; +import com.qyft.ms.system.core.handler.BaseCommandHandler; +import com.qyft.ms.system.model.bo.DeviceCommand; +import com.qyft.ms.system.model.form.FrontCmdControlForm; +import com.qyft.ms.system.service.WebSocketService; +import com.qyft.ms.system.service.device.DeviceCommandService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.concurrent.CompletableFuture; + +/** + * 喷头加热 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@CommandMapping("slide_plat_heat_start") +public class SlidePlatHeatStart extends BaseCommandHandler { + + private final DeviceCommandService deviceCommandService; + private final DeviceStatus deviceStatus; + private final WebSocketService webSocketService; + + @Override + public CompletableFuture handle(FrontCmdControlForm form) { + Double temperature = form.getDoubleParam("temperature");//温度 + if (temperature == null) { + webSocketService.pushCMDResponseMsg(FrontResponseGenerator.generateJson(form.getCmdId(), form.getCmdCode(), CommandStatus.DEVICE_ERROR, "参数 temperature 必填")); + throw new RuntimeException("参数 temperature 必填"); + } + return runAsync(() -> { + + DeviceCommand nozzleHeatStartCmd = DeviceCommandGenerator.slidePlatHeatStart(temperature); // 生成载玻台加热指令 + deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), nozzleHeatStartCmd);//发送指令 + deviceStatus.setSlidePlatHeating(true);//设置载玻台加热状态 + }); + } +} diff --git a/src/main/java/com/qyft/ms/app/front/cmd/business/SlidePlatHeatStop.java b/src/main/java/com/qyft/ms/app/front/cmd/business/SlidePlatHeatStop.java new file mode 100644 index 0000000..6dd7329 --- /dev/null +++ b/src/main/java/com/qyft/ms/app/front/cmd/business/SlidePlatHeatStop.java @@ -0,0 +1,38 @@ +package com.qyft.ms.app.front.cmd.business; + +import com.qyft.ms.app.device.status.DeviceStatus; +import com.qyft.ms.system.common.annotation.CommandMapping; +import com.qyft.ms.system.common.device.command.DeviceCommandGenerator; +import com.qyft.ms.system.core.handler.BaseCommandHandler; +import com.qyft.ms.system.model.bo.DeviceCommand; +import com.qyft.ms.system.model.form.FrontCmdControlForm; +import com.qyft.ms.system.service.device.DeviceCommandService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.concurrent.CompletableFuture; + +/** + * 除湿指令处理 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@CommandMapping("slide_plat_heat_stop") +public class SlidePlatHeatStop extends BaseCommandHandler { + + private final DeviceCommandService deviceCommandService; + private final DeviceStatus deviceStatus; + + @Override + public CompletableFuture handle(FrontCmdControlForm form) { + return runAsync(() -> { + + DeviceCommand nozzleHeatStopCmd = DeviceCommandGenerator.slidePlatHeatStop(); // 生成载板加热关闭指令 + deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), nozzleHeatStopCmd);//发送指令 + deviceStatus.setSlidePlatHeating(false);//设置载玻台加热状态 + + }); + } +} diff --git a/src/main/java/com/qyft/ms/app/front/cmd/debug/NozzleHeatClose.java b/src/main/java/com/qyft/ms/app/front/cmd/debug/NozzleHeatClose.java new file mode 100644 index 0000000..9413927 --- /dev/null +++ b/src/main/java/com/qyft/ms/app/front/cmd/debug/NozzleHeatClose.java @@ -0,0 +1,38 @@ +package com.qyft.ms.app.front.cmd.debug; + +import com.qyft.ms.app.device.status.DeviceStatus; +import com.qyft.ms.system.common.annotation.CommandMapping; +import com.qyft.ms.system.common.device.command.DeviceCommandGenerator; +import com.qyft.ms.system.core.handler.BaseCommandHandler; +import com.qyft.ms.system.model.bo.DeviceCommand; +import com.qyft.ms.system.model.form.FrontCmdControlForm; +import com.qyft.ms.system.service.device.DeviceCommandService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.concurrent.CompletableFuture; + +/** + * 除湿指令处理 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@CommandMapping("nozzle_heat_close") +public class NozzleHeatClose extends BaseCommandHandler { + + private final DeviceCommandService deviceCommandService; + private final DeviceStatus deviceStatus; + + @Override + public CompletableFuture handle(FrontCmdControlForm form) { + return runAsync(() -> { + + DeviceCommand nozzleHeatStopCmd = DeviceCommandGenerator.nozzleHeatStop(); // 生成喷头加热关闭 + deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), nozzleHeatStopCmd);//发送指令 + deviceStatus.setNozzleHeating(false);//设置喷头加热状态 + + }); + } +} diff --git a/src/main/java/com/qyft/ms/app/front/cmd/debug/NozzleHeatGet.java b/src/main/java/com/qyft/ms/app/front/cmd/debug/NozzleHeatGet.java new file mode 100644 index 0000000..723649c --- /dev/null +++ b/src/main/java/com/qyft/ms/app/front/cmd/debug/NozzleHeatGet.java @@ -0,0 +1,46 @@ +package com.qyft.ms.app.front.cmd.debug; + +import cn.hutool.json.JSONObject; +import com.qyft.ms.app.device.status.DeviceStatus; +import com.qyft.ms.system.common.annotation.CommandMapping; +import com.qyft.ms.system.common.constant.CommandStatus; +import com.qyft.ms.system.common.device.command.CommandFuture; +import com.qyft.ms.system.common.device.command.DeviceCommandGenerator; +import com.qyft.ms.system.common.device.command.FrontResponseGenerator; +import com.qyft.ms.system.core.handler.BaseCommandHandler; +import com.qyft.ms.system.model.bo.DeviceCommand; +import com.qyft.ms.system.model.form.FrontCmdControlForm; +import com.qyft.ms.system.service.WebSocketService; +import com.qyft.ms.system.service.device.DeviceCommandService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.concurrent.CompletableFuture; + +/** + * 除湿指令处理 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@CommandMapping("nozzle_heat_get") +public class NozzleHeatGet extends BaseCommandHandler { + + private final DeviceCommandService deviceCommandService; + private final WebSocketService webSocketService; + + @Override + public CompletableFuture handle(FrontCmdControlForm form) { + + return runAsync(() -> { + DeviceCommand nozzleHeatGetCmd = DeviceCommandGenerator.getNozzleHeat(); // 获取温度 + CommandFuture nozzleHeatGetFuture = deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), nozzleHeatGetCmd);//发送指令 + commandWait(nozzleHeatGetFuture); + + JSONObject result = nozzleHeatGetFuture.getResponseResult(); + Double nozzleHeat = result.getJSONObject("data").getDouble("temp"); + // webSocketService.pushCMDResponseMsg(FrontResponseGenerator.generateJson(form.getCmdId(), form.getCmdCode(), CommandStatus.DEVICE_ERROR, "设定湿度大于当前湿度,无需除湿")); + }); + } +} diff --git a/src/main/java/com/qyft/ms/app/front/cmd/debug/NozzleHeatOpen.java b/src/main/java/com/qyft/ms/app/front/cmd/debug/NozzleHeatOpen.java new file mode 100644 index 0000000..d26681f --- /dev/null +++ b/src/main/java/com/qyft/ms/app/front/cmd/debug/NozzleHeatOpen.java @@ -0,0 +1,47 @@ +package com.qyft.ms.app.front.cmd.debug; + +import com.qyft.ms.app.device.status.DeviceStatus; +import com.qyft.ms.system.common.annotation.CommandMapping; +import com.qyft.ms.system.common.constant.CommandStatus; +import com.qyft.ms.system.common.device.command.DeviceCommandGenerator; +import com.qyft.ms.system.common.device.command.FrontResponseGenerator; +import com.qyft.ms.system.core.handler.BaseCommandHandler; +import com.qyft.ms.system.model.bo.DeviceCommand; +import com.qyft.ms.system.model.form.FrontCmdControlForm; +import com.qyft.ms.system.service.WebSocketService; +import com.qyft.ms.system.service.device.DeviceCommandService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.concurrent.CompletableFuture; + +/** + * 喷头加热 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@CommandMapping("nozzle_heat_open") +public class NozzleHeatOpen extends BaseCommandHandler { + + private final DeviceCommandService deviceCommandService; + private final DeviceStatus deviceStatus; + private final WebSocketService webSocketService; + + @Override + public CompletableFuture handle(FrontCmdControlForm form) { + Double temperature = form.getDoubleParam("temperature");//设置温度 + // 参数校验:humidity 必填 + if (temperature == null) { + webSocketService.pushCMDResponseMsg(FrontResponseGenerator.generateJson(form.getCmdId(), form.getCmdCode(), CommandStatus.DEVICE_ERROR, "参数 temperature 必填")); + throw new RuntimeException("参数 temperature 必填"); + } + return runAsync(() -> { + + DeviceCommand nozzleHeatStartCmd = DeviceCommandGenerator.nozzleHeatStart(temperature); // 生成喷头加热 + deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), nozzleHeatStartCmd);//发送指令 + deviceStatus.setNozzleHeating(true);//设置喷头加热状态 + }); + } +} diff --git a/src/main/java/com/qyft/ms/app/front/cmd/debug/SlidePlatHeatClose.java b/src/main/java/com/qyft/ms/app/front/cmd/debug/SlidePlatHeatClose.java new file mode 100644 index 0000000..c077340 --- /dev/null +++ b/src/main/java/com/qyft/ms/app/front/cmd/debug/SlidePlatHeatClose.java @@ -0,0 +1,38 @@ +package com.qyft.ms.app.front.cmd.debug; + +import com.qyft.ms.app.device.status.DeviceStatus; +import com.qyft.ms.system.common.annotation.CommandMapping; +import com.qyft.ms.system.common.device.command.DeviceCommandGenerator; +import com.qyft.ms.system.core.handler.BaseCommandHandler; +import com.qyft.ms.system.model.bo.DeviceCommand; +import com.qyft.ms.system.model.form.FrontCmdControlForm; +import com.qyft.ms.system.service.device.DeviceCommandService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.concurrent.CompletableFuture; + +/** + * 载玻台关闭加热 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@CommandMapping("slide_plat_heat_close") +public class SlidePlatHeatClose extends BaseCommandHandler { + + private final DeviceCommandService deviceCommandService; + private final DeviceStatus deviceStatus; + + @Override + public CompletableFuture handle(FrontCmdControlForm form) { + return runAsync(() -> { + + DeviceCommand nozzleHeatStopCmd = DeviceCommandGenerator.slidePlatHeatStop(); // 生成载板加热关闭指令 + deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), nozzleHeatStopCmd);//发送指令 + deviceStatus.setSlidePlatHeating(false);//设置载玻台加热状态 + + }); + } +} diff --git a/src/main/java/com/qyft/ms/app/front/cmd/debug/SlidePlatHeatGet.java b/src/main/java/com/qyft/ms/app/front/cmd/debug/SlidePlatHeatGet.java new file mode 100644 index 0000000..8a979e9 --- /dev/null +++ b/src/main/java/com/qyft/ms/app/front/cmd/debug/SlidePlatHeatGet.java @@ -0,0 +1,40 @@ +package com.qyft.ms.app.front.cmd.debug; + +import cn.hutool.json.JSONObject; +import com.qyft.ms.system.common.annotation.CommandMapping; +import com.qyft.ms.system.common.device.command.CommandFuture; +import com.qyft.ms.system.common.device.command.DeviceCommandGenerator; +import com.qyft.ms.system.core.handler.BaseCommandHandler; +import com.qyft.ms.system.model.bo.DeviceCommand; +import com.qyft.ms.system.model.form.FrontCmdControlForm; +import com.qyft.ms.system.service.device.DeviceCommandService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.concurrent.CompletableFuture; + +/** + * 载玻台获取温度指令处理 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@CommandMapping("slide_plat_heat_get") +public class SlidePlatHeatGet extends BaseCommandHandler { + + private final DeviceCommandService deviceCommandService; + + @Override + public CompletableFuture handle(FrontCmdControlForm form) { + return runAsync(() -> { + + DeviceCommand slidePlatHeatStopCmd = DeviceCommandGenerator.getSlidePlatHeat(); // 生成指令 + CommandFuture slidePlatHeatGetFuture = deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), slidePlatHeatStopCmd);//发送指令 + + JSONObject result = slidePlatHeatGetFuture.getResponseResult(); + Double slidePlatHeat = result.getJSONObject("data").getDouble("temp"); + // webSocketService.pushCMDResponseMsg(FrontResponseGenerator.generateJson(form.getCmdId(), form.getCmdCode(), CommandStatus.DEVICE_ERROR, "设定湿度大于当前湿度,无需除湿")); + }); + } +} diff --git a/src/main/java/com/qyft/ms/app/front/cmd/debug/SlidePlatHeatOpen.java b/src/main/java/com/qyft/ms/app/front/cmd/debug/SlidePlatHeatOpen.java new file mode 100644 index 0000000..1fd426f --- /dev/null +++ b/src/main/java/com/qyft/ms/app/front/cmd/debug/SlidePlatHeatOpen.java @@ -0,0 +1,46 @@ +package com.qyft.ms.app.front.cmd.debug; + +import com.qyft.ms.app.device.status.DeviceStatus; +import com.qyft.ms.system.common.annotation.CommandMapping; +import com.qyft.ms.system.common.constant.CommandStatus; +import com.qyft.ms.system.common.device.command.DeviceCommandGenerator; +import com.qyft.ms.system.common.device.command.FrontResponseGenerator; +import com.qyft.ms.system.core.handler.BaseCommandHandler; +import com.qyft.ms.system.model.bo.DeviceCommand; +import com.qyft.ms.system.model.form.FrontCmdControlForm; +import com.qyft.ms.system.service.WebSocketService; +import com.qyft.ms.system.service.device.DeviceCommandService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.concurrent.CompletableFuture; + +/** + * 载玻台加热开始 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@CommandMapping("slide_plat_heat_open") +public class SlidePlatHeatOpen extends BaseCommandHandler { + + private final DeviceCommandService deviceCommandService; + private final DeviceStatus deviceStatus; + private final WebSocketService webSocketService; + + @Override + public CompletableFuture handle(FrontCmdControlForm form) { + Double temperature = form.getDoubleParam("temperature");//温度 + if (temperature == null) { + webSocketService.pushCMDResponseMsg(FrontResponseGenerator.generateJson(form.getCmdId(), form.getCmdCode(), CommandStatus.DEVICE_ERROR, "参数 temperature 必填")); + throw new RuntimeException("参数 temperature 必填"); + } + return runAsync(() -> { + + DeviceCommand nozzleHeatStartCmd = DeviceCommandGenerator.slidePlatHeatStart(temperature); // 生成载玻台加热指令 + deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), nozzleHeatStartCmd);//发送指令 + deviceStatus.setSlidePlatHeating(true);//设置载玻台加热状态 + }); + } +} diff --git a/src/main/java/com/qyft/ms/system/common/device/command/DeviceCommandGenerator.java b/src/main/java/com/qyft/ms/system/common/device/command/DeviceCommandGenerator.java index 901d0b4..b96373d 100644 --- a/src/main/java/com/qyft/ms/system/common/device/command/DeviceCommandGenerator.java +++ b/src/main/java/com/qyft/ms/system/common/device/command/DeviceCommandGenerator.java @@ -225,6 +225,46 @@ public class DeviceCommandGenerator { } /** + * 加热喷头 + */ + public static DeviceCommand nozzleHeatStart(Double temperature) { + Map params = new HashMap<>(); + params.put("temp", temperature); + return controlCmd("nozzle_temperature", "open", params, "打开喷头加热,温度:"+temperature); + } + /** + * 关闭喷头加热 + */ + public static DeviceCommand nozzleHeatStop() { + return controlCmd("nozzle_temperature", "close", null, "关闭喷头加热"); + } + /** + * 获取喷头温度 + */ + public static DeviceCommand getNozzleHeat() { + return getInfoCmd("nozzle_temperature", "获取喷头温度"); + } + /** + * 载玻台开启加热 + */ + public static DeviceCommand slidePlatHeatStart(Double temperature) { + Map params = new HashMap<>(); + params.put("temp", temperature); + return controlCmd("slide_temperature", "open", params, "载玻台开启加热,温度:"+temperature); + } + /** + * 载玻台关闭加热 + */ + public static DeviceCommand slidePlatHeatStop() { + return controlCmd("slide_temperature", "close", null, "载玻台关闭加热"); + } + /** + * 获取喷头温度 + */ + public static DeviceCommand getSlidePlatHeat() { + return getInfoCmd("slide_temperature", "获取载玻台温度"); + } + /** * 获取设备当前湿度 */ public static DeviceCommand humidityGet() {