From 7e5d1eb543a8711e70c0d668ac50596259338a95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=81=E5=86=AC?= <274403850@qq.com> Date: Thu, 13 Mar 2025 08:55:40 +0800 Subject: [PATCH] =?UTF-8?q?2025-03-13=20=E4=BD=9F=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=EF=BC=8C=E4=B8=80=E4=B8=AA=E7=B1=BB=E5=A4=84=E7=90=86=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E5=89=8D=E5=8F=B0=E6=8C=87=E4=BB=A4=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=BA=86device=E7=B1=BB=E5=8C=85=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=BA=86=E4=B8=80=E4=B8=AA=E5=85=A8=E5=B1=80=E5=8D=95?= =?UTF-8?q?=E4=BE=8BDeviceInstance=E5=92=8C=E4=B8=80=E4=BA=9B=E8=BE=85?= =?UTF-8?q?=E5=8A=A9=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qyft/ms/app/common/command/CommandFuture.java | 7 + .../ms/app/common/command/CommandWaitControl.java | 31 +---- .../app/common/command/DeviceCommandGenerator.java | 109 ++++++++++++++++ .../ms/app/common/command/FrontCommandAck.java | 2 + .../app/common/command/FrontCommandGenerator.java | 109 ---------------- .../qyft/ms/app/common/constant/CommandStatus.java | 8 ++ .../qyft/ms/app/controller/FrontCmdController.java | 136 ++------------------ .../frontcommandhandle/DehumidifierStart.java | 143 +++++++++++++++++++++ .../frontcommandhandle/MatrixSprayChangeParam.java | 46 +++++++ .../frontcommandhandle/MatrixSprayContinue.java | 47 +++++++ .../frontcommandhandle/MatrixSprayPause.java | 47 +++++++ .../frontcommandhandle/MatrixSprayStart.java | 47 +++++++ .../frontcommandhandle/MatrixSprayStop.java | 47 +++++++ .../frontcommandhandle/NozzlePipelinePreFill.java | 49 +++++++ .../controller/frontcommandhandle/SlideTrayIn.java | 47 +++++++ .../frontcommandhandle/SlideTrayOut.java | 47 +++++++ .../frontcommandhandle/SprayPipelineWash.java | 52 ++++++++ .../frontcommandhandle/SyringePipelineWash.java | 47 +++++++ .../com/qyft/ms/device/device/DeviceInstance.java | 66 ++++++++++ .../com/qyft/ms/device/device/DeviceLifeEnum.java | 34 +++++ .../ms/device/device/MatrixSprayStatusEnum.java | 32 +++++ .../com/qyft/ms/device/device/MotorNameEnum.java | 32 +++++ .../java/com/qyft/ms/device/device/MotorX.java | 10 ++ .../java/com/qyft/ms/device/device/MotorY.java | 10 ++ .../java/com/qyft/ms/device/device/MotorZ.java | 10 ++ .../ms/device/handler/DeviceMessageHandler.java | 48 ++++--- .../com/qyft/ms/device/model/DeviceStatusEnum.java | 39 ++++++ 27 files changed, 1024 insertions(+), 278 deletions(-) create mode 100644 src/main/java/com/qyft/ms/app/common/command/DeviceCommandGenerator.java delete mode 100644 src/main/java/com/qyft/ms/app/common/command/FrontCommandGenerator.java create mode 100644 src/main/java/com/qyft/ms/app/controller/frontcommandhandle/DehumidifierStart.java create mode 100644 src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayChangeParam.java create mode 100644 src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayContinue.java create mode 100644 src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayPause.java create mode 100644 src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayStart.java create mode 100644 src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayStop.java create mode 100644 src/main/java/com/qyft/ms/app/controller/frontcommandhandle/NozzlePipelinePreFill.java create mode 100644 src/main/java/com/qyft/ms/app/controller/frontcommandhandle/SlideTrayIn.java create mode 100644 src/main/java/com/qyft/ms/app/controller/frontcommandhandle/SlideTrayOut.java create mode 100644 src/main/java/com/qyft/ms/app/controller/frontcommandhandle/SprayPipelineWash.java create mode 100644 src/main/java/com/qyft/ms/app/controller/frontcommandhandle/SyringePipelineWash.java create mode 100644 src/main/java/com/qyft/ms/device/device/DeviceInstance.java create mode 100644 src/main/java/com/qyft/ms/device/device/DeviceLifeEnum.java create mode 100644 src/main/java/com/qyft/ms/device/device/MatrixSprayStatusEnum.java create mode 100644 src/main/java/com/qyft/ms/device/device/MotorNameEnum.java create mode 100644 src/main/java/com/qyft/ms/device/device/MotorX.java create mode 100644 src/main/java/com/qyft/ms/device/device/MotorY.java create mode 100644 src/main/java/com/qyft/ms/device/device/MotorZ.java create mode 100644 src/main/java/com/qyft/ms/device/model/DeviceStatusEnum.java diff --git a/src/main/java/com/qyft/ms/app/common/command/CommandFuture.java b/src/main/java/com/qyft/ms/app/common/command/CommandFuture.java index 0cefda0..d856e4f 100644 --- a/src/main/java/com/qyft/ms/app/common/command/CommandFuture.java +++ b/src/main/java/com/qyft/ms/app/common/command/CommandFuture.java @@ -22,6 +22,11 @@ public class CommandFuture { */ private boolean isReceived = false; + /** + * 已收到 + */ + private boolean isGetResult = false; + public void waitForContinue() { commandWaitController.commandWait(); } @@ -29,4 +34,6 @@ public class CommandFuture { public void commandContinue() { commandWaitController.commandContinue(); } + + } diff --git a/src/main/java/com/qyft/ms/app/common/command/CommandWaitControl.java b/src/main/java/com/qyft/ms/app/common/command/CommandWaitControl.java index bf359be..93917c7 100644 --- a/src/main/java/com/qyft/ms/app/common/command/CommandWaitControl.java +++ b/src/main/java/com/qyft/ms/app/common/command/CommandWaitControl.java @@ -2,38 +2,17 @@ package com.qyft.ms.app.common.command; public class CommandWaitControl { - public String commandCallbackJsonStringHolder = ""; - - private boolean shouldWait = true; public synchronized void commandWait() { - while (shouldWait) { - try { - wait(); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } + try { + wait(3000); + } catch (InterruptedException e) { + throw new RuntimeException(e); } - // 重置标志,以便下次可以再次等待 - shouldWait = true; } public synchronized void commandContinue() { - shouldWait = false; notify(); } - /** - * 获取命令回调值 - * @return - */ - public String getCommandCallbackValue() { - return commandCallbackJsonStringHolder; - } - /** - * 设置命令回调值 - * @param commandCallbackJsonString - */ - public void setCommandCallbackValue(String commandCallbackJsonString) { - this.commandCallbackJsonStringHolder = commandCallbackJsonString; - } + } diff --git a/src/main/java/com/qyft/ms/app/common/command/DeviceCommandGenerator.java b/src/main/java/com/qyft/ms/app/common/command/DeviceCommandGenerator.java new file mode 100644 index 0000000..2742fab --- /dev/null +++ b/src/main/java/com/qyft/ms/app/common/command/DeviceCommandGenerator.java @@ -0,0 +1,109 @@ +package com.qyft.ms.app.common.command; + + +import com.qyft.ms.app.model.bo.CMDToDevice; + +/** + * 生成给设备发送的指令 + */ +public class DeviceCommandGenerator { + + /** + * { + * cmdName:'getInfoCmd' + * cmdId:'', + * device:'device', + * action:'get' + * } + */ + public static CMDToDevice device_status_get() { + int cmdId = CyclicNumberGenerator.getInstance().generateNumber(); + CMDToDevice cmdToDevice = new CMDToDevice(); + cmdToDevice.setCmdId(cmdId); + cmdToDevice.setCmdName("device_status_get"); + cmdToDevice.setDevice("device"); + cmdToDevice.setAction("get"); + return cmdToDevice; + } + + /** + * 获取设备当前湿度 + * { + * cmdName:'getInfoCmd' + * cmdId:'', + * device:'temperature', + * action:'get' + * } + */ + public static CMDToDevice humidity_get() { + int cmdId = CyclicNumberGenerator.getInstance().generateNumber(); + CMDToDevice cmdToDevice = new CMDToDevice(); + cmdToDevice.setCmdId(cmdId); + cmdToDevice.setCmdName("getInfoCmd"); + cmdToDevice.setDevice("humidity"); + cmdToDevice.setAction("get"); + return cmdToDevice; + } + + /** + * 开启除湿阀 + * { + * cmdName:'controlCmd' + * cmdId:'', + * device:'dehumidifier_valve', + * action:'open|close' + * } + */ + public static CMDToDevice dehumidifier_valve_control(String action) { + int cmdId = CyclicNumberGenerator.getInstance().generateNumber(); + CMDToDevice cmdToDevice = new CMDToDevice(); + cmdToDevice.setCmdId(cmdId); + cmdToDevice.setCmdName("controlCmd"); + cmdToDevice.setDevice("dehumidifier_valve"); + cmdToDevice.setAction(action); + return cmdToDevice; + } + + + public static String matrix_prefill() { + return "matrix_prefill"; + } + + public static String spray_pipeline_wash() { + return "spray_pipeline_wash"; + } + + public static String syringe_pipeline_wash() { + return "syringe_pipeline_wash"; + } + + public static String matrix_spray_start() { + return "matrix_spray_start"; + } + + public static String matrix_spray_change_param() { + return "matrix_spray_change_param"; + } + + public static String matrix_spray_stop() { + return "matrix_spray_stop"; + } + + public static String matrix_spray_pause() { + return "matrix_spray_pause"; + } + + public static String matrix_spray_continue() { + return "matrix_spray_continue"; + } + + public static String slide_tray_in() { + return "slide_tray_in"; + } + + public static String slide_tray_out() { + return "slide_tray_out"; + } + + +} diff --git a/src/main/java/com/qyft/ms/app/common/command/FrontCommandAck.java b/src/main/java/com/qyft/ms/app/common/command/FrontCommandAck.java index dc29005..cfc320c 100644 --- a/src/main/java/com/qyft/ms/app/common/command/FrontCommandAck.java +++ b/src/main/java/com/qyft/ms/app/common/command/FrontCommandAck.java @@ -8,6 +8,7 @@ public class FrontCommandAck { JSONObject jsonObject = new JSONObject(); jsonObject.set("cmdId", cmdId); jsonObject.set("cmdName", cmdName); + jsonObject.set("success", true); jsonObject.set("status", status); jsonObject.set("info", info); return jsonObject.toString(); @@ -17,6 +18,7 @@ public class FrontCommandAck { JSONObject jsonObject = new JSONObject(); jsonObject.set("cmdId", cmdId); jsonObject.set("cmdName", cmdName); + jsonObject.set("success", true); jsonObject.set("status", "receive"); return jsonObject.toString(); } diff --git a/src/main/java/com/qyft/ms/app/common/command/FrontCommandGenerator.java b/src/main/java/com/qyft/ms/app/common/command/FrontCommandGenerator.java deleted file mode 100644 index 36605fa..0000000 --- a/src/main/java/com/qyft/ms/app/common/command/FrontCommandGenerator.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.qyft.ms.app.common.command; - - -import com.qyft.ms.app.model.bo.CMDToDevice; - -/** - * 生成给设备发送的指令 - */ -public class FrontCommandGenerator { - - /** - * { - * cmdName:'getInfoCmd' - * cmdId:'', - * device:'device', - * action:'get' - * } - */ - public static CMDToDevice device_status_get() { - int cmdId = CyclicNumberGenerator.getInstance().generateNumber(); - CMDToDevice cmdToDevice = new CMDToDevice(); - cmdToDevice.setCmdId(cmdId); - cmdToDevice.setCmdName("device_status_get"); - cmdToDevice.setDevice("device"); - cmdToDevice.setAction("get"); - return cmdToDevice; - } - - /** - * 获取设备当前湿度 - * { - * cmdName:'getInfoCmd' - * cmdId:'', - * device:'temperature', - * action:'get' - * } - */ - public static CMDToDevice temperature_get() { - int cmdId = CyclicNumberGenerator.getInstance().generateNumber(); - CMDToDevice cmdToDevice = new CMDToDevice(); - cmdToDevice.setCmdId(cmdId); - cmdToDevice.setCmdName("getInfoCmd"); - cmdToDevice.setDevice("temperature"); - cmdToDevice.setAction("get"); - return cmdToDevice; - } - - /** - * 开启除湿阀 - * { - * cmdName:'controlCmd' - * cmdId:'', - * device:'dehumidifier_valve', - * action:'open|close' - * } - */ - public static CMDToDevice dehumidifier_start() { - int cmdId = CyclicNumberGenerator.getInstance().generateNumber(); - CMDToDevice cmdToDevice = new CMDToDevice(); - cmdToDevice.setCmdId(cmdId); - cmdToDevice.setCmdName("controlCmd"); - cmdToDevice.setDevice("dehumidifier_valve"); - cmdToDevice.setAction("open"); - return cmdToDevice; - } - - - public static String matrix_prefill() { - return "matrix_prefill"; - } - - public static String spray_pipeline_wash() { - return "spray_pipeline_wash"; - } - - public static String syringe_pipeline_wash() { - return "syringe_pipeline_wash"; - } - - public static String matrix_spray_start() { - return "matrix_spray_start"; - } - - public static String matrix_spray_change_param() { - return "matrix_spray_change_param"; - } - - public static String matrix_spray_stop() { - return "matrix_spray_stop"; - } - - public static String matrix_spray_pause() { - return "matrix_spray_pause"; - } - - public static String matrix_spray_continue() { - return "matrix_spray_continue"; - } - - public static String slide_tray_in() { - return "slide_tray_in"; - } - - public static String slide_tray_out() { - return "slide_tray_out"; - } - - -} diff --git a/src/main/java/com/qyft/ms/app/common/constant/CommandStatus.java b/src/main/java/com/qyft/ms/app/common/constant/CommandStatus.java index 9c6b558..9fac653 100644 --- a/src/main/java/com/qyft/ms/app/common/constant/CommandStatus.java +++ b/src/main/java/com/qyft/ms/app/common/constant/CommandStatus.java @@ -4,8 +4,16 @@ public class CommandStatus { /** * 已收到前端指令 */ + public static final String SEND = "SEND"; + /** + * 已收到前端指令 + */ public static final String RECEIVE = "receive"; /** + * 已收到结果 + */ + public static final String RESULT = "result"; + /** * 指令执行发生错误 */ public static final String ERROR = "error"; diff --git a/src/main/java/com/qyft/ms/app/controller/FrontCmdController.java b/src/main/java/com/qyft/ms/app/controller/FrontCmdController.java index 1ba6ff8..68b62e9 100644 --- a/src/main/java/com/qyft/ms/app/controller/FrontCmdController.java +++ b/src/main/java/com/qyft/ms/app/controller/FrontCmdController.java @@ -1,26 +1,16 @@ package com.qyft.ms.app.controller; -import cn.hutool.json.JSONObject; -import cn.hutool.json.JSONUtil; -import com.qyft.ms.app.common.command.CommandFuture; import com.qyft.ms.app.common.command.CurrentSendCmdMapInstance; -import com.qyft.ms.app.common.command.FrontCommandAck; -import com.qyft.ms.app.common.command.FrontCommandGenerator; -import com.qyft.ms.app.common.constant.CommandStatus; -import com.qyft.ms.app.model.bo.CMDToDevice; +import com.qyft.ms.app.controller.frontcommandhandle.DehumidifierStart; import com.qyft.ms.app.model.form.CMDFormV2; import com.qyft.ms.device.service.DeviceTcpCMDServiceV2; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; -import java.io.IOException; -import java.util.Map; - @Tag(name = "前端调用指令") @RestController @RequestMapping("/api/device/front") @@ -34,132 +24,17 @@ public class FrontCmdController { @PostMapping("/control") public ResponseBodyEmitter controlMethod(@RequestBody CMDFormV2 cmdForm) { ResponseBodyEmitter emitter = new ResponseBodyEmitter(); - String frontCmdId = cmdForm.getCmdId(); String frontCmdName = cmdForm.getCmdName(); - Map param = cmdForm.getParam(); if ("device_status_get".equals(frontCmdName)) { - new Thread(() -> { - - try { - //向前端发送接收到指令 - emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.TEXT_PLAIN); - } catch (IOException e) { - emitter.completeWithError(e); - } - - //生成发给设备的指令 - CMDToDevice cmdToDevice = FrontCommandGenerator.device_status_get(); - CommandFuture commandFuture = new CommandFuture(); - commandFuture.setCmdToDevice(cmdToDevice); - - Integer toDeviceCmdId = cmdToDevice.getCmdId(); - - //将指令放入map,等待设备返回,然后取出,在调用commandContinue - CurrentSendCmdMapInstance.getInstance().putCommand(toDeviceCmdId, commandFuture); - - //发送指令给设备 - deviceTcpCMDServiceV2.send(JSONUtil.toJsonStr(cmdToDevice)); - - commandFuture.waitForContinue(); - - if (commandFuture.isReceived()) { - try { - emitter.send(FrontCommandAck.deviceAck(frontCmdId, frontCmdName), MediaType.TEXT_PLAIN); - } catch (IOException e) { - emitter.completeWithError(e); - } - } - commandFuture.waitForContinue(); - -// JSONObject callbackResult = commandFuture.getCallbackResult(); - - - //对返回结果处理 - - - emitter.complete(); - - }).start(); + DehumidifierStart.handle(deviceTcpCMDServiceV2, emitter, cmdForm); } else if ("dehumidifier_start".equals(frontCmdName)) { /* 除湿,该方法接收Double类型参数 humidity */ - new Thread(() -> { - try { - //向前端发送接收到指令 - emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.TEXT_PLAIN); - //判断参数是否合法 - Integer humidity = (Integer) param.get("humidity"); - if (humidity == null) { - emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "参数 humidity 必填"), MediaType.TEXT_PLAIN); - emitter.complete(); - return; - } - //1:先判断当前湿度是否大于设置值 - CMDToDevice temperatureCmdToDevice = FrontCommandGenerator.temperature_get();//生成指令 获取当前湿度 - CommandFuture temperatureFuture = new CommandFuture(); - temperatureFuture.setCmdToDevice(temperatureCmdToDevice); - Integer toDeviceCmdId = temperatureCmdToDevice.getCmdId(); - CurrentSendCmdMapInstance.getInstance().putCommand(toDeviceCmdId, temperatureFuture);//将指令放入map - deviceTcpCMDServiceV2.send(temperatureCmdToDevice); //发送指令给设备 - emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "已向设备发送了指令:" + JSONUtil.toJsonStr(temperatureCmdToDevice)), MediaType.TEXT_PLAIN); - temperatureFuture.waitForContinue();//等待设备的反馈 - JSONObject deviceResult = temperatureFuture.getCallbackResult();//拿到设备返回结果 - if(temperatureFuture.isReceived()){//直接携带数据的反馈其实不需要判断isReceived,直接判断deviceResult == null - CurrentSendCmdMapInstance.getInstance().removeCommand(toDeviceCmdId);//将指令从map中删除 - //设备已经收到指令并且执行成功 - emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "设备指令反馈:" + JSONUtil.toJsonStr(deviceResult)), MediaType.TEXT_PLAIN); - } - if (deviceResult == null) { - emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "未读取到湿度传感器数值"), MediaType.TEXT_PLAIN); - emitter.complete(); - return; - } - Double temperature = deviceResult.getDouble("temperature");//拿到设备返回的湿度数值 - if (humidity < temperature) { - //2:如果小于设置值,提醒用户不用除湿 - emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "设定湿度小于当前湿度,无需除湿。"), MediaType.TEXT_PLAIN); - emitter.complete(); - return; - } - //3:如果需要除湿开始调用底层指令" - CMDToDevice cmdToDeviceHumidity = FrontCommandGenerator.dehumidifier_start();//生成指令 开启除湿阀 - CommandFuture commandFutureHumidity = new CommandFuture(); -// -// -// //生成发给设备的指令 -// CMDToDevice cmdToDevice = FrontCommandGenerator.device_status_get(); -// CommandFuture commandFuture = new CommandFuture(); -// commandFuture.setCmdToDevice(cmdToDevice); -// -// String toDeviceCmdId = cmdToDevice.getCmdId(); -// //将指令放入map,等待设备返回,然后取出,在调用commandContinue -// CurrentSendCmdMapInstance.getInstance().putCommand(toDeviceCmdId, commandFuture); -// -// //发送指令给设备 -// deviceTcpCMDServiceV2.send(JSONUtil.toJsonStr(cmdToDevice)); -// commandFuture.waitForContinue(); -// if (commandFuture.isReceived()) { -// -// emitter.send(FrontCommandAck.deviceAck(frontCmdId, frontCmdName), MediaType.TEXT_PLAIN); -// -// } -// commandFuture.waitForContinue(); -// String callbackResult = commandFuture.getCallbackResult(); - - - - //对返回结果处理 - emitter.complete(); - - } catch (IOException e) { - emitter.completeWithError(e); - } - - }).start(); + } else if ("matrix_prefill".equals(frontCmdName)) { } else if ("spray_pipeline_wash".equals(frontCmdName)) { @@ -187,4 +62,9 @@ public class FrontCmdController { } + @RequestMapping("/controlTest") + public void controlMethodTest(){ + CurrentSendCmdMapInstance.getInstance().getCommand(1).commandContinue(); + } + } diff --git a/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/DehumidifierStart.java b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/DehumidifierStart.java new file mode 100644 index 0000000..f1d662f --- /dev/null +++ b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/DehumidifierStart.java @@ -0,0 +1,143 @@ +package com.qyft.ms.app.controller.frontcommandhandle; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.qyft.ms.app.common.command.CommandFuture; +import com.qyft.ms.app.common.command.CurrentSendCmdMapInstance; +import com.qyft.ms.app.common.command.FrontCommandAck; +import com.qyft.ms.app.common.command.DeviceCommandGenerator; +import com.qyft.ms.app.common.constant.CommandStatus; +import com.qyft.ms.app.model.bo.CMDToDevice; +import com.qyft.ms.app.model.form.CMDFormV2; +import com.qyft.ms.device.service.DeviceTcpCMDServiceV2; +import org.springframework.http.MediaType; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; + +import java.io.IOException; +import java.util.Map; + +public class DehumidifierStart { + public static void handle(DeviceTcpCMDServiceV2 deviceTcpCMDServiceV2, ResponseBodyEmitter emitter, CMDFormV2 cmdForm) { + + String frontCmdId = cmdForm.getCmdId(); + String frontCmdName = cmdForm.getCmdName(); + Map param = cmdForm.getParam(); + + new Thread(() -> { + try { + + //向前端发送接收到指令 + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON); + + + /** + * 1:判断参数是否合法 + */ + Integer frontHumidity = (Integer) param.get("humidity"); + if (frontHumidity == null) { + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "参数 humidity 必填"), MediaType.APPLICATION_JSON); + emitter.complete(); + return; + } + + + /** + * 2:获取设备湿度 + */ + + CMDToDevice humidityCmdToDevice = DeviceCommandGenerator.humidity_get();//生成指令 获取当前湿度 + CommandFuture humidityGetFuture = new CommandFuture(); + humidityGetFuture.setCmdToDevice(humidityCmdToDevice); + Integer toDeviceCmdId = humidityCmdToDevice.getCmdId(); + CurrentSendCmdMapInstance.getInstance().putCommand(toDeviceCmdId, humidityGetFuture);//将指令放入map + deviceTcpCMDServiceV2.send(humidityCmdToDevice); //发送指令给设备 + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.SEND, "已向设备发送了获取湿度指令:" + JSONUtil.toJsonStr(humidityCmdToDevice)), MediaType.APPLICATION_JSON); + + + humidityGetFuture.waitForContinue();//等待设备的反馈 + + + + /** + * 3:处理返回结果或者没有响应 + */ + JSONObject deviceResult = humidityGetFuture.getCallbackResult();//拿到设备返回结果 + CurrentSendCmdMapInstance.getInstance().removeCommand(toDeviceCmdId);//将指令从map中删除 + + if (humidityGetFuture.isReceived() || humidityGetFuture.isGetResult()) { + //设备已经收到指令并且执行成功 + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RESULT, "设备指令反馈:" + JSONUtil.toJsonStr(deviceResult)), MediaType.APPLICATION_JSON); + + Double deviceHumidity = deviceResult.getDouble("humidity");//拿到设备返回的湿度数值 + if (frontHumidity > deviceHumidity) { + + //如果小于设置值,提醒用户不用除湿 + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "设定湿度大于当前湿度,无需除湿。"), MediaType.APPLICATION_JSON); + + + } + else{ + + /** + * 4:如果大于设置值,开始除湿;打开除湿阀门 + */ + + CMDToDevice dehumidifier_valve_control = DeviceCommandGenerator.dehumidifier_valve_control("open");//生成指令 开启除湿阀 + CommandFuture dehumidifier_valve_control_Future = new CommandFuture(); + humidityGetFuture.setCmdToDevice(dehumidifier_valve_control); + Integer dehumidifier_valve_control_cmdId = dehumidifier_valve_control.getCmdId(); + CurrentSendCmdMapInstance.getInstance().putCommand(dehumidifier_valve_control_cmdId, dehumidifier_valve_control_Future);//将指令放入map + deviceTcpCMDServiceV2.send(dehumidifier_valve_control); //发送指令给设备 + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.SEND, "已向设备发送了开启除湿阀指令:" + JSONUtil.toJsonStr(dehumidifier_valve_control)), MediaType.APPLICATION_JSON); + + + dehumidifier_valve_control_Future.waitForContinue();//等待设备的反馈 + + /** + * 5:处理打开除湿阀门返回结果 + */ + JSONObject dehumidifier_valve_control_result = dehumidifier_valve_control_Future.getCallbackResult();//拿到设备返回结果 + CurrentSendCmdMapInstance.getInstance().removeCommand(dehumidifier_valve_control_cmdId);//将指令从map中删除 + + if (dehumidifier_valve_control_Future.isReceived() || dehumidifier_valve_control_Future.isGetResult()) { + //设备已经收到指令并且执行成功 + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RESULT, "开启除湿阀指令指令设备反馈:" + JSONUtil.toJsonStr(dehumidifier_valve_control_result)), MediaType.APPLICATION_JSON); + + } + else{ + //设备未收到指令或者执行失败 + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "开启除湿阀指令没有响应:" + JSONUtil.toJsonStr(deviceResult)), MediaType.APPLICATION_JSON); + + } + + + + + + + } + + }else{ + //设备未收到指令或者执行失败 + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "设备没有响应:" + JSONUtil.toJsonStr(deviceResult)), MediaType.APPLICATION_JSON); + + + } + + + + + + + + + } catch (IOException e) { + emitter.completeWithError(e); + } + }).start(); + + + //对返回结果处理 + emitter.complete(); + } +} diff --git a/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayChangeParam.java b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayChangeParam.java new file mode 100644 index 0000000..9cc86ee --- /dev/null +++ b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayChangeParam.java @@ -0,0 +1,46 @@ +package com.qyft.ms.app.controller.frontcommandhandle; + +import com.qyft.ms.app.common.command.FrontCommandAck; +import com.qyft.ms.app.common.constant.CommandStatus; +import com.qyft.ms.app.model.form.CMDFormV2; +import com.qyft.ms.device.device.DeviceInstance; +import com.qyft.ms.device.service.DeviceTcpCMDServiceV2; +import org.springframework.http.MediaType; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; + +import java.io.IOException; +import java.util.Map; + +/** + * 实时修改参数 + */ +public class MatrixSprayChangeParam { + public static void handle(DeviceTcpCMDServiceV2 deviceTcpCMDServiceV2, ResponseBodyEmitter emitter, CMDFormV2 cmdForm) { + + String frontCmdId = cmdForm.getCmdId(); + String frontCmdName = cmdForm.getCmdName(); + Map param = cmdForm.getParam(); + + new Thread(() -> { + try { + + //向前端发送接收到指令 + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON); + + + + + + + + + } catch (IOException e) { + emitter.completeWithError(e); + } + }).start(); + + + //对返回结果处理 + emitter.complete(); + } +} diff --git a/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayContinue.java b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayContinue.java new file mode 100644 index 0000000..078bac8 --- /dev/null +++ b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayContinue.java @@ -0,0 +1,47 @@ +package com.qyft.ms.app.controller.frontcommandhandle; + +import com.qyft.ms.app.common.command.FrontCommandAck; +import com.qyft.ms.app.common.constant.CommandStatus; +import com.qyft.ms.app.model.form.CMDFormV2; +import com.qyft.ms.device.service.DeviceTcpCMDServiceV2; +import org.springframework.http.MediaType; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; + +import java.io.IOException; +import java.util.Map; + +/** + * 前端继续基质喷涂 + */ +public class MatrixSprayContinue { + public static void handle(DeviceTcpCMDServiceV2 deviceTcpCMDServiceV2, ResponseBodyEmitter emitter, CMDFormV2 cmdForm) { + + String frontCmdId = cmdForm.getCmdId(); + String frontCmdName = cmdForm.getCmdName(); + Map param = cmdForm.getParam(); + + new Thread(() -> { + try { + + //向前端发送接收到指令 + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON); + + + + + + + + + + + } catch (IOException e) { + emitter.completeWithError(e); + } + }).start(); + + + //对返回结果处理 + emitter.complete(); + } +} diff --git a/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayPause.java b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayPause.java new file mode 100644 index 0000000..eaafa70 --- /dev/null +++ b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayPause.java @@ -0,0 +1,47 @@ +package com.qyft.ms.app.controller.frontcommandhandle; + +import com.qyft.ms.app.common.command.FrontCommandAck; +import com.qyft.ms.app.common.constant.CommandStatus; +import com.qyft.ms.app.model.form.CMDFormV2; +import com.qyft.ms.device.service.DeviceTcpCMDServiceV2; +import org.springframework.http.MediaType; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; + +import java.io.IOException; +import java.util.Map; + +/** + * 前端暂停基质喷涂 + */ +public class MatrixSprayPause { + public static void handle(DeviceTcpCMDServiceV2 deviceTcpCMDServiceV2, ResponseBodyEmitter emitter, CMDFormV2 cmdForm) { + + String frontCmdId = cmdForm.getCmdId(); + String frontCmdName = cmdForm.getCmdName(); + Map param = cmdForm.getParam(); + + new Thread(() -> { + try { + + //向前端发送接收到指令 + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON); + + + + + + + + + + + } catch (IOException e) { + emitter.completeWithError(e); + } + }).start(); + + + //对返回结果处理 + emitter.complete(); + } +} diff --git a/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayStart.java b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayStart.java new file mode 100644 index 0000000..b6d2670 --- /dev/null +++ b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayStart.java @@ -0,0 +1,47 @@ +package com.qyft.ms.app.controller.frontcommandhandle; + +import com.qyft.ms.app.common.command.FrontCommandAck; +import com.qyft.ms.app.common.constant.CommandStatus; +import com.qyft.ms.app.model.form.CMDFormV2; +import com.qyft.ms.device.service.DeviceTcpCMDServiceV2; +import org.springframework.http.MediaType; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; + +import java.io.IOException; +import java.util.Map; + +/** + * 前端开始基质喷涂 + */ +public class MatrixSprayStart { + public static void handle(DeviceTcpCMDServiceV2 deviceTcpCMDServiceV2, ResponseBodyEmitter emitter, CMDFormV2 cmdForm) { + + String frontCmdId = cmdForm.getCmdId(); + String frontCmdName = cmdForm.getCmdName(); + Map param = cmdForm.getParam(); + + new Thread(() -> { + try { + + //向前端发送接收到指令 + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON); + + + + + + + + + + + } catch (IOException e) { + emitter.completeWithError(e); + } + }).start(); + + + //对返回结果处理 + emitter.complete(); + } +} diff --git a/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayStop.java b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayStop.java new file mode 100644 index 0000000..5670a0e --- /dev/null +++ b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/MatrixSprayStop.java @@ -0,0 +1,47 @@ +package com.qyft.ms.app.controller.frontcommandhandle; + +import com.qyft.ms.app.common.command.FrontCommandAck; +import com.qyft.ms.app.common.constant.CommandStatus; +import com.qyft.ms.app.model.form.CMDFormV2; +import com.qyft.ms.device.service.DeviceTcpCMDServiceV2; +import org.springframework.http.MediaType; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; + +import java.io.IOException; +import java.util.Map; + +/** + * 前端主动结束基质喷涂 + */ +public class MatrixSprayStop { + public static void handle(DeviceTcpCMDServiceV2 deviceTcpCMDServiceV2, ResponseBodyEmitter emitter, CMDFormV2 cmdForm) { + + String frontCmdId = cmdForm.getCmdId(); + String frontCmdName = cmdForm.getCmdName(); + Map param = cmdForm.getParam(); + + new Thread(() -> { + try { + + //向前端发送接收到指令 + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON); + + + + + + + + + + + } catch (IOException e) { + emitter.completeWithError(e); + } + }).start(); + + + //对返回结果处理 + emitter.complete(); + } +} diff --git a/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/NozzlePipelinePreFill.java b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/NozzlePipelinePreFill.java new file mode 100644 index 0000000..e2f3ea8 --- /dev/null +++ b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/NozzlePipelinePreFill.java @@ -0,0 +1,49 @@ +package com.qyft.ms.app.controller.frontcommandhandle; + +import com.qyft.ms.app.common.command.FrontCommandAck; +import com.qyft.ms.app.common.constant.CommandStatus; +import com.qyft.ms.app.model.form.CMDFormV2; +import com.qyft.ms.device.service.DeviceTcpCMDServiceV2; +import org.springframework.http.MediaType; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; + +import java.io.IOException; +import java.util.Map; + +/** + * 处理前端喷嘴管路预充指令 + */ +public class NozzlePipelinePreFill { + + public static void handle(DeviceTcpCMDServiceV2 deviceTcpCMDServiceV2, ResponseBodyEmitter emitter, CMDFormV2 cmdForm) { + + String frontCmdId = cmdForm.getCmdId(); + String frontCmdName = cmdForm.getCmdName(); + Map param = cmdForm.getParam(); + + new Thread(() -> { + try { + + //向前端发送接收到指令 + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON); + + + + + + + + + + + + } catch (IOException e) { + emitter.completeWithError(e); + } + }).start(); + + + //对返回结果处理 + emitter.complete(); + } +} diff --git a/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/SlideTrayIn.java b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/SlideTrayIn.java new file mode 100644 index 0000000..c668351 --- /dev/null +++ b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/SlideTrayIn.java @@ -0,0 +1,47 @@ +spackage com.qyft.ms.app.controller.frontcommandhandle; + +import com.qyft.ms.app.common.command.FrontCommandAck; +import com.qyft.ms.app.common.constant.CommandStatus; +import com.qyft.ms.app.model.form.CMDFormV2; +import com.qyft.ms.device.service.DeviceTcpCMDServiceV2; +import org.springframework.http.MediaType; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; + +import java.io.IOException; +import java.util.Map; + +/** + * 处理前端推入托盘 + */ +public class SlideTrayIn { + public static void handle(DeviceTcpCMDServiceV2 deviceTcpCMDServiceV2, ResponseBodyEmitter emitter, CMDFormV2 cmdForm) { + + String frontCmdId = cmdForm.getCmdId(); + String frontCmdName = cmdForm.getCmdName(); + Map param = cmdForm.getParam(); + + new Thread(() -> { + try { + + //向前端发送接收到指令 + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON); + + + + + + + + + + + } catch (IOException e) { + emitter.completeWithError(e); + } + }).start(); + + + //对返回结果处理 + emitter.complete(); + } +} diff --git a/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/SlideTrayOut.java b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/SlideTrayOut.java new file mode 100644 index 0000000..4ba7fe7 --- /dev/null +++ b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/SlideTrayOut.java @@ -0,0 +1,47 @@ +package com.qyft.ms.app.controller.frontcommandhandle; + +import com.qyft.ms.app.common.command.FrontCommandAck; +import com.qyft.ms.app.common.constant.CommandStatus; +import com.qyft.ms.app.model.form.CMDFormV2; +import com.qyft.ms.device.service.DeviceTcpCMDServiceV2; +import org.springframework.http.MediaType; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; + +import java.io.IOException; +import java.util.Map; + +/** + * 处理前端推出托盘 + */ +public class SlideTrayOut { + public static void handle(DeviceTcpCMDServiceV2 deviceTcpCMDServiceV2, ResponseBodyEmitter emitter, CMDFormV2 cmdForm) { + + String frontCmdId = cmdForm.getCmdId(); + String frontCmdName = cmdForm.getCmdName(); + Map param = cmdForm.getParam(); + + new Thread(() -> { + try { + + //向前端发送接收到指令 + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON); + + + + + + + + + + + } catch (IOException e) { + emitter.completeWithError(e); + } + }).start(); + + + //对返回结果处理 + emitter.complete(); + } +} diff --git a/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/SprayPipelineWash.java b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/SprayPipelineWash.java new file mode 100644 index 0000000..6056824 --- /dev/null +++ b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/SprayPipelineWash.java @@ -0,0 +1,52 @@ +package com.qyft.ms.app.controller.frontcommandhandle; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.qyft.ms.app.common.command.CommandFuture; +import com.qyft.ms.app.common.command.CurrentSendCmdMapInstance; +import com.qyft.ms.app.common.command.DeviceCommandGenerator; +import com.qyft.ms.app.common.command.FrontCommandAck; +import com.qyft.ms.app.common.constant.CommandStatus; +import com.qyft.ms.app.model.bo.CMDToDevice; +import com.qyft.ms.app.model.form.CMDFormV2; +import com.qyft.ms.device.service.DeviceTcpCMDServiceV2; +import org.springframework.http.MediaType; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; + +import java.io.IOException; +import java.util.Map; +/** + * 处理前端清洗喷嘴管路 + */ +public class SprayPipelineWash { + public static void handle(DeviceTcpCMDServiceV2 deviceTcpCMDServiceV2, ResponseBodyEmitter emitter, CMDFormV2 cmdForm) { + + String frontCmdId = cmdForm.getCmdId(); + String frontCmdName = cmdForm.getCmdName(); + Map param = cmdForm.getParam(); + + new Thread(() -> { + try { + + //向前端发送接收到指令 + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON); + + + + + + + + + + + } catch (IOException e) { + emitter.completeWithError(e); + } + }).start(); + + + //对返回结果处理 + emitter.complete(); + } +} diff --git a/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/SyringePipelineWash.java b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/SyringePipelineWash.java new file mode 100644 index 0000000..bf8eeaa --- /dev/null +++ b/src/main/java/com/qyft/ms/app/controller/frontcommandhandle/SyringePipelineWash.java @@ -0,0 +1,47 @@ +package com.qyft.ms.app.controller.frontcommandhandle; + +import com.qyft.ms.app.common.command.FrontCommandAck; +import com.qyft.ms.app.common.constant.CommandStatus; +import com.qyft.ms.app.model.form.CMDFormV2; +import com.qyft.ms.device.service.DeviceTcpCMDServiceV2; +import org.springframework.http.MediaType; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; + +import java.io.IOException; +import java.util.Map; + +/** + * 处理前端清洗注射器管路 + */ +public class SyringePipelineWash { + public static void handle(DeviceTcpCMDServiceV2 deviceTcpCMDServiceV2, ResponseBodyEmitter emitter, CMDFormV2 cmdForm) { + + String frontCmdId = cmdForm.getCmdId(); + String frontCmdName = cmdForm.getCmdName(); + Map param = cmdForm.getParam(); + + new Thread(() -> { + try { + + //向前端发送接收到指令 + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON); + + + + + + + + + + + } catch (IOException e) { + emitter.completeWithError(e); + } + }).start(); + + + //对返回结果处理 + emitter.complete(); + } +} diff --git a/src/main/java/com/qyft/ms/device/device/DeviceInstance.java b/src/main/java/com/qyft/ms/device/device/DeviceInstance.java new file mode 100644 index 0000000..a385594 --- /dev/null +++ b/src/main/java/com/qyft/ms/device/device/DeviceInstance.java @@ -0,0 +1,66 @@ +package com.qyft.ms.device.device; + +import com.qyft.ms.device.model.DeviceStatusEnum; +import lombok.Data; + +@Data +public class DeviceInstance { + private static DeviceInstance instance; + + private DeviceInstance() { + // private constructor to prevent instantiation + } + + public static synchronized DeviceInstance getInstance() { + if (instance == null) { + instance = new DeviceInstance(); + } + return instance; + } + + //设备名称 + private String deviceName; + //序列号 + private String deviceNumber; + //前端版本 + private String frontVersion; + //后端版本 + private String javaVersion; + //嵌入式版本 + private String linuxVersion; + //嵌入式版本 + private String microVersion; + //设备状态 + private DeviceStatusEnum deviceStatus; + + //喷涂状态 + private MatrixSprayStatusEnum matrixSprayStatusEnum; + //当前任务 + private String currentTaskCommandName; + //上一个任务 + private String previousTaskCommandName; + + private MotorX motorX; + private MotorY motorY; + private MotorZ motorZ; + + private void updateMotorPosition(MotorNameEnum motorName, Double position) { + if (motorName == MotorNameEnum.X) { + motorX.setPosition(position); + } else if (motorName == MotorNameEnum.Y) { + motorY.setPosition(position); + } else if (motorName == MotorNameEnum.Z) { + motorZ.setPosition(position); + } + + }; + private void updateMotorOrigin(MotorNameEnum motorName, Boolean isOrigin) { + if (motorName == MotorNameEnum.X) { + motorX.setIsOrigin(isOrigin); + } else if (motorName == MotorNameEnum.Y) { + motorY.setIsOrigin(isOrigin); + } else if (motorName == MotorNameEnum.Z) { + motorZ.setIsOrigin(isOrigin); + } + }; +} \ No newline at end of file diff --git a/src/main/java/com/qyft/ms/device/device/DeviceLifeEnum.java b/src/main/java/com/qyft/ms/device/device/DeviceLifeEnum.java new file mode 100644 index 0000000..f2a8644 --- /dev/null +++ b/src/main/java/com/qyft/ms/device/device/DeviceLifeEnum.java @@ -0,0 +1,34 @@ +package com.qyft.ms.device.device; + +public enum DeviceLifeEnum { + + SYNCED("sync", "已经同步信息"), + NOSYNC("nosync", "未同步信息"), + NEWSTART("newStart", "刚从从新启动"), + SLEFCHECKED("slefchecked", "已经自检"); + + private String code; + private String desc; + + DeviceLifeEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } + + public String getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public static DeviceLifeEnum getByCode(String code) { + for (DeviceLifeEnum value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } +} diff --git a/src/main/java/com/qyft/ms/device/device/MatrixSprayStatusEnum.java b/src/main/java/com/qyft/ms/device/device/MatrixSprayStatusEnum.java new file mode 100644 index 0000000..84a3bb8 --- /dev/null +++ b/src/main/java/com/qyft/ms/device/device/MatrixSprayStatusEnum.java @@ -0,0 +1,32 @@ +package com.qyft.ms.device.device; + +public enum MatrixSprayStatusEnum { + YES("yes", "是"), + NO("no", "否"); + + + private String code; + private String desc; + + MatrixSprayStatusEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } + + public String getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public static MatrixSprayStatusEnum getByCode(String code) { + for (MatrixSprayStatusEnum value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } +} diff --git a/src/main/java/com/qyft/ms/device/device/MotorNameEnum.java b/src/main/java/com/qyft/ms/device/device/MotorNameEnum.java new file mode 100644 index 0000000..a6b09a7 --- /dev/null +++ b/src/main/java/com/qyft/ms/device/device/MotorNameEnum.java @@ -0,0 +1,32 @@ +package com.qyft.ms.device.device; + +public enum MotorNameEnum { + X("x", "X轴"), + Y("y", "Y轴"), + Z("z", "Z轴"); + + private String code; + private String desc; + + MotorNameEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } + + public String getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public static MotorNameEnum getByCode(String code) { + for (MotorNameEnum value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } +} diff --git a/src/main/java/com/qyft/ms/device/device/MotorX.java b/src/main/java/com/qyft/ms/device/device/MotorX.java new file mode 100644 index 0000000..bbc4403 --- /dev/null +++ b/src/main/java/com/qyft/ms/device/device/MotorX.java @@ -0,0 +1,10 @@ +package com.qyft.ms.device.device; + +import lombok.Data; + +@Data +public class MotorX { + private Boolean isOrigin; + private Double position; + private String name = MotorNameEnum.X.getCode(); +} diff --git a/src/main/java/com/qyft/ms/device/device/MotorY.java b/src/main/java/com/qyft/ms/device/device/MotorY.java new file mode 100644 index 0000000..bd9be15 --- /dev/null +++ b/src/main/java/com/qyft/ms/device/device/MotorY.java @@ -0,0 +1,10 @@ +package com.qyft.ms.device.device; + +import lombok.Data; + +@Data +public class MotorY { + private Boolean isOrigin; + private Double position; + private String name = MotorNameEnum.Y.getCode(); +} diff --git a/src/main/java/com/qyft/ms/device/device/MotorZ.java b/src/main/java/com/qyft/ms/device/device/MotorZ.java new file mode 100644 index 0000000..5d1e887 --- /dev/null +++ b/src/main/java/com/qyft/ms/device/device/MotorZ.java @@ -0,0 +1,10 @@ +package com.qyft.ms.device.device; + +import lombok.Data; + +@Data +public class MotorZ { + private Boolean isOrigin; + private Double position; + private String name = MotorNameEnum.Z.getCode(); +} diff --git a/src/main/java/com/qyft/ms/device/handler/DeviceMessageHandler.java b/src/main/java/com/qyft/ms/device/handler/DeviceMessageHandler.java index 1503656..1b5a3a5 100644 --- a/src/main/java/com/qyft/ms/device/handler/DeviceMessageHandler.java +++ b/src/main/java/com/qyft/ms/device/handler/DeviceMessageHandler.java @@ -52,26 +52,44 @@ public class DeviceMessageHandler extends ChannelInboundHandlerAdapter { String tag = deviceResult.get("tag").toString(); if ("event".equals(tag)) { //设备上报事件 + + + + } else if ("ack".equals(tag)) { + + + //设备指令反馈 Integer cmdId = payload.getInt("cmdId"); - JSONObject error = payload.getJSONObject("error"); CommandFuture commandFuture = CurrentSendCmdMapInstance.getInstance().getCommand(cmdId); - if (error != null) { - //指令执行错误,将错误放到CallbackResult中 - commandFuture.setCallbackResult(error); - } - Object result = payload.get("result"); - if (result instanceof Boolean) { - //ack 没携带数据 - } else if (result instanceof JSONObject) { - //ack 携带了数据,将数据放到了CallbackResult中 - commandFuture.setCallbackResult((JSONObject) result); - } else { - //TODO 没有定义的类型 + + if(commandFuture!=null){ + commandFuture.setReceived(true); + commandFuture.setCallbackResult(payload); + commandFuture.commandContinue(); } - commandFuture.setReceived(true);//已收到设备反馈 - commandFuture.commandContinue(); +// +// if (error != null) { +// //指令执行错误,将错误放到CallbackResult中 +// commandFuture.setCallbackResult(error); +// } +// Object result = payload.get("result"); +// if (result instanceof Boolean) { +// //ack 没携带数据 +// } else if (result instanceof JSONObject) { +// //ack 携带了数据,将数据放到了CallbackResult中 +// commandFuture.setCallbackResult((JSONObject) result); +// } else { +// //TODO 没有定义的类型 +// } +// commandFuture.setReceived(true);//已收到设备反馈 +// commandFuture.commandContinue(); + + + + + } else if ("status".equals(tag)) { //设备上报状态 } diff --git a/src/main/java/com/qyft/ms/device/model/DeviceStatusEnum.java b/src/main/java/com/qyft/ms/device/model/DeviceStatusEnum.java new file mode 100644 index 0000000..bfdc4ec --- /dev/null +++ b/src/main/java/com/qyft/ms/device/model/DeviceStatusEnum.java @@ -0,0 +1,39 @@ +package com.qyft.ms.device.model; + +/** + * 设备状态枚举 + */ +public enum DeviceStatusEnum { + FREE("free", "闲"), + BUSY("busy", "忙"), + ONLINE("online", "在线"), + OFFLINE("offline", "离线"), + FAULT("fault", "故障"), + MAINTENANCE("maintenance", "维护"), + UNKNOWN("unknown", "未知"); + + private String code; + private String desc; + + DeviceStatusEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } + + public String getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public static DeviceStatusEnum getByCode(String code) { + for (DeviceStatusEnum value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } +}