From 9c57b5eab87a1151d35ee0dd33cadf89b14ae3d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=81=E5=86=AC?= <274403850@qq.com> Date: Fri, 14 Mar 2025 10:34:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8E=A7=E5=88=B6=E4=B8=89?= =?UTF-8?q?=E9=80=9A=E9=98=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/debugimpl/ThreeWayValveCloseAll.java | 88 ++++++++++++++++++++++ .../debugimpl/ThreeWayValveOpenNuzzlePipeline.java | 88 ++++++++++++++++++++++ .../ThreeWayValveOpenSyringePipeline.java | 87 +++++++++++++++++++++ 3 files changed, 263 insertions(+) create mode 100644 src/main/java/com/qyft/ms/app/handler/debugimpl/ThreeWayValveCloseAll.java create mode 100644 src/main/java/com/qyft/ms/app/handler/debugimpl/ThreeWayValveOpenNuzzlePipeline.java create mode 100644 src/main/java/com/qyft/ms/app/handler/debugimpl/ThreeWayValveOpenSyringePipeline.java diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/ThreeWayValveCloseAll.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/ThreeWayValveCloseAll.java new file mode 100644 index 0000000..6a86217 --- /dev/null +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/ThreeWayValveCloseAll.java @@ -0,0 +1,88 @@ +package com.qyft.ms.app.handler.debugimpl; + +import cn.hutool.json.JSONObject; +import com.qyft.ms.app.common.annotation.CommandMapping; +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.handler.CommandHandler; +import com.qyft.ms.app.model.bo.CMDToDevice; +import com.qyft.ms.app.model.form.CMDFormV2; +import com.qyft.ms.device.client.TcpClient; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.MediaType; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; + +import java.util.Map; + +/** + * z轴回原点 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@Async("asyncExecutor") +@CommandMapping("three_way_valve_close_all")//业务指令注解 +public class ThreeWayValveCloseAll implements CommandHandler { + private final TcpClient deviceClient; + + + @Override + public void handle(CMDFormV2 cmdForm, ResponseBodyEmitter emitter) throws Exception { + String frontCmdId = cmdForm.getCmdId(); + String frontCmdName = cmdForm.getCmdName(); + + /** + * 1.向前端发送接收到指令 + */ + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON); + + + /** + * 2.生成指令,并发送指令 + */ + + CMDToDevice cmdToDevice = DeviceCommandGenerator.three_way_valve_close_all();//关闭喷嘴阀 + CommandFuture cmdToDeviceFuture = new CommandFuture(); + cmdToDeviceFuture.setCmdToDevice(cmdToDevice); + Integer nozzleValveCloseCMDToDeviceCmdId = cmdToDevice.getCmdId(); + CurrentSendCmdMapInstance.getInstance().putCommand(nozzleValveCloseCMDToDeviceCmdId, cmdToDeviceFuture); // 将指令放入map + deviceClient.sendToJSON(cmdToDevice); // 发送指令给设备 + + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.SEND, "已向设备发送了全部关闭指令", cmdToDevice), MediaType.APPLICATION_JSON); + + /** + * 3.等待 + */ + cmdToDeviceFuture.waitForContinue(); // 等待设备的反馈 + + + /** + * 4.处理结果 + */ + JSONObject laser_control_open_CMDToDeviceResult = cmdToDeviceFuture.getCallbackResult(); // 拿到设备返回结果 + CurrentSendCmdMapInstance.getInstance().removeCommand(nozzleValveCloseCMDToDeviceCmdId); // 从map中删除该指令 + + if (!cmdToDeviceFuture.isReceived()) { + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "全部关闭指令响应超时", laser_control_open_CMDToDeviceResult), MediaType.APPLICATION_JSON); + emitter.complete(); + } + if (laser_control_open_CMDToDeviceResult.getJSONObject("error") != null) { + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "全部关闭指令返回错误", laser_control_open_CMDToDeviceResult), MediaType.APPLICATION_JSON); + emitter.complete(); + } + Boolean nozzleValveCloseCMDToDeviceResultStatus = laser_control_open_CMDToDeviceResult.getBool("result"); + if (!nozzleValveCloseCMDToDeviceResultStatus) { + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "全部关闭指令执行失败", laser_control_open_CMDToDeviceResult), MediaType.APPLICATION_JSON); + emitter.complete(); + } + + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RESULT, "全部关闭指令反馈", laser_control_open_CMDToDeviceResult), MediaType.APPLICATION_JSON); + emitter.complete(); + } +} diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/ThreeWayValveOpenNuzzlePipeline.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/ThreeWayValveOpenNuzzlePipeline.java new file mode 100644 index 0000000..9c97dd5 --- /dev/null +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/ThreeWayValveOpenNuzzlePipeline.java @@ -0,0 +1,88 @@ +package com.qyft.ms.app.handler.debugimpl; + +import cn.hutool.json.JSONObject; +import com.qyft.ms.app.common.annotation.CommandMapping; +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.handler.CommandHandler; +import com.qyft.ms.app.model.bo.CMDToDevice; +import com.qyft.ms.app.model.form.CMDFormV2; +import com.qyft.ms.device.client.TcpClient; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.MediaType; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; + +import java.util.Map; + +/** + * z轴回原点 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@Async("asyncExecutor") +@CommandMapping("three_way_valve_open_nozzle_pipeline")//业务指令注解 +public class ThreeWayValveOpenNuzzlePipeline implements CommandHandler { + private final TcpClient deviceClient; + + + @Override + public void handle(CMDFormV2 cmdForm, ResponseBodyEmitter emitter) throws Exception { + String frontCmdId = cmdForm.getCmdId(); + String frontCmdName = cmdForm.getCmdName(); + + /** + * 1.向前端发送接收到指令 + */ + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON); + + + /** + * 2.生成指令,并发送指令 + */ + + CMDToDevice cmdToDevice = DeviceCommandGenerator.three_way_valve_open_nozzle_pipeline(); + CommandFuture cmdToDeviceFuture = new CommandFuture(); + cmdToDeviceFuture.setCmdToDevice(cmdToDevice); + Integer nozzleValveCloseCMDToDeviceCmdId = cmdToDevice.getCmdId(); + CurrentSendCmdMapInstance.getInstance().putCommand(nozzleValveCloseCMDToDeviceCmdId, cmdToDeviceFuture); // 将指令放入map + deviceClient.sendToJSON(cmdToDevice); // 发送指令给设备 + + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.SEND, "已向设备发送了打开喷嘴管路指令", cmdToDevice), MediaType.APPLICATION_JSON); + + /** + * 3.等待 + */ + cmdToDeviceFuture.waitForContinue(); // 等待设备的反馈 + + + /** + * 4.处理结果 + */ + JSONObject laser_control_open_CMDToDeviceResult = cmdToDeviceFuture.getCallbackResult(); // 拿到设备返回结果 + CurrentSendCmdMapInstance.getInstance().removeCommand(nozzleValveCloseCMDToDeviceCmdId); // 从map中删除该指令 + + if (!cmdToDeviceFuture.isReceived()) { + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "打开喷嘴管路指令响应超时", laser_control_open_CMDToDeviceResult), MediaType.APPLICATION_JSON); + emitter.complete(); + } + if (laser_control_open_CMDToDeviceResult.getJSONObject("error") != null) { + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "打开喷嘴管路指令返回错误", laser_control_open_CMDToDeviceResult), MediaType.APPLICATION_JSON); + emitter.complete(); + } + Boolean nozzleValveCloseCMDToDeviceResultStatus = laser_control_open_CMDToDeviceResult.getBool("result"); + if (!nozzleValveCloseCMDToDeviceResultStatus) { + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "打开喷嘴管路指令执行失败", laser_control_open_CMDToDeviceResult), MediaType.APPLICATION_JSON); + emitter.complete(); + } + + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RESULT, "打开喷嘴管路指令反馈", laser_control_open_CMDToDeviceResult), MediaType.APPLICATION_JSON); + emitter.complete(); + } +} diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/ThreeWayValveOpenSyringePipeline.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/ThreeWayValveOpenSyringePipeline.java new file mode 100644 index 0000000..4a15c8d --- /dev/null +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/ThreeWayValveOpenSyringePipeline.java @@ -0,0 +1,87 @@ +package com.qyft.ms.app.handler.debugimpl; + +import cn.hutool.json.JSONObject; +import com.qyft.ms.app.common.annotation.CommandMapping; +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.handler.CommandHandler; +import com.qyft.ms.app.model.bo.CMDToDevice; +import com.qyft.ms.app.model.form.CMDFormV2; +import com.qyft.ms.device.client.TcpClient; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.MediaType; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; + +import java.util.Map; + +/** + * z轴回原点 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@Async("asyncExecutor") +@CommandMapping("three_way_valve_open_syringe_pipeline")//业务指令注解 +public class ThreeWayValveOpenSyringePipeline implements CommandHandler { + private final TcpClient deviceClient; + + @Override + public void handle(CMDFormV2 cmdForm, ResponseBodyEmitter emitter) throws Exception { + String frontCmdId = cmdForm.getCmdId(); + String frontCmdName = cmdForm.getCmdName(); + + /** + * 1.向前端发送接收到指令 + */ + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON); + + + /** + * 2.生成指令,并发送指令 + */ + + CMDToDevice cmdToDevice = DeviceCommandGenerator.three_way_valve_open_syringe_pipeline(); + CommandFuture cmdToDeviceFuture = new CommandFuture(); + cmdToDeviceFuture.setCmdToDevice(cmdToDevice); + Integer nozzleValveCloseCMDToDeviceCmdId = cmdToDevice.getCmdId(); + CurrentSendCmdMapInstance.getInstance().putCommand(nozzleValveCloseCMDToDeviceCmdId, cmdToDeviceFuture); // 将指令放入map + deviceClient.sendToJSON(cmdToDevice); // 发送指令给设备 + + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.SEND, "已向设备发送了打开注射器管路指令", cmdToDevice), MediaType.APPLICATION_JSON); + + /** + * 3.等待 + */ + cmdToDeviceFuture.waitForContinue(); // 等待设备的反馈 + + + /** + * 4.处理结果 + */ + JSONObject laser_control_open_CMDToDeviceResult = cmdToDeviceFuture.getCallbackResult(); // 拿到设备返回结果 + CurrentSendCmdMapInstance.getInstance().removeCommand(nozzleValveCloseCMDToDeviceCmdId); // 从map中删除该指令 + + if (!cmdToDeviceFuture.isReceived()) { + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "打开注射器管路指令响应超时", laser_control_open_CMDToDeviceResult), MediaType.APPLICATION_JSON); + emitter.complete(); + } + if (laser_control_open_CMDToDeviceResult.getJSONObject("error") != null) { + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "打开注射器管路指令返回错误", laser_control_open_CMDToDeviceResult), MediaType.APPLICATION_JSON); + emitter.complete(); + } + Boolean nozzleValveCloseCMDToDeviceResultStatus = laser_control_open_CMDToDeviceResult.getBool("result"); + if (!nozzleValveCloseCMDToDeviceResultStatus) { + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "打开注射器管路指令执行失败", laser_control_open_CMDToDeviceResult), MediaType.APPLICATION_JSON); + emitter.complete(); + } + + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RESULT, "打开注射器管路指令反馈", laser_control_open_CMDToDeviceResult), MediaType.APPLICATION_JSON); + emitter.complete(); + } +}