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(); + } +}