From d281f3072e1e894dd3108d53a2c778bf982c851d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=87=A4=E5=90=89?= Date: Fri, 14 Mar 2025 14:39:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ms/app/common/command/CommandWaitControl.java | 2 +- .../qyft/ms/app/controller/FrontCmdController.java | 18 ++ .../ms/app/controller/FrontCmdDebugController.java | 18 ++ .../handler/debugimpl/DehumidifierValveClose.java | 2 +- .../handler/debugimpl/DehumidifierValveOpen.java | 2 +- .../ms/app/handler/debugimpl/HighVoltageClose.java | 2 +- .../ms/app/handler/debugimpl/HighVoltageOpen.java | 2 +- .../app/handler/debugimpl/LaserControlClose.java | 2 +- .../ms/app/handler/debugimpl/LaserControlOpen.java | 2 +- .../app/handler/debugimpl/LightingPanelClose.java | 2 +- .../app/handler/debugimpl/LightingPanelOpen.java | 2 +- .../qyft/ms/app/handler/debugimpl/MotorXMove.java | 2 +- .../ms/app/handler/debugimpl/MotorXOrigin.java | 2 +- .../qyft/ms/app/handler/debugimpl/MotorXStop.java | 2 +- .../app/handler/debugimpl/MotorXYZPositionGet.java | 2 +- .../qyft/ms/app/handler/debugimpl/MotorYMove.java | 2 +- .../ms/app/handler/debugimpl/MotorYOrigin.java | 2 +- .../qyft/ms/app/handler/debugimpl/MotorYStop.java | 2 +- .../qyft/ms/app/handler/debugimpl/MotorZMove.java | 2 +- .../ms/app/handler/debugimpl/MotorZOrigin.java | 2 +- .../qyft/ms/app/handler/debugimpl/MotorZStop.java | 2 +- .../ms/app/handler/debugimpl/NozzleValveClose.java | 2 +- .../ms/app/handler/debugimpl/NozzleValveOpen.java | 2 +- .../ms/app/handler/debugimpl/SyringePumpStart.java | 2 +- .../handler/debugimpl/ThreeWayValveCloseAll.java | 2 +- .../debugimpl/ThreeWayValveOpenNuzzlePipeline.java | 2 +- .../ThreeWayValveOpenSyringePipeline.java | 2 +- .../ms/app/handler/debugimpl/WashValveClose.java | 2 +- .../ms/app/handler/debugimpl/WashValveOpen.java | 2 +- .../ms/app/handler/impl/DehumidifierStart.java | 2 +- .../qyft/ms/app/handler/impl/DehumidifierStop.java | 2 +- .../app/handler/impl/MatrixSprayChangeParam.java | 2 +- .../ms/app/handler/impl/MatrixSprayContinue.java | 2 +- .../qyft/ms/app/handler/impl/MatrixSprayPause.java | 2 +- .../qyft/ms/app/handler/impl/MatrixSprayStart.java | 10 +- .../qyft/ms/app/handler/impl/MatrixSprayStop.java | 14 +- .../com/qyft/ms/app/handler/impl/MotorXToHome.java | 2 +- .../com/qyft/ms/app/handler/impl/MotorYToHome.java | 2 +- .../com/qyft/ms/app/handler/impl/MotorZToHome.java | 2 +- .../ms/app/handler/impl/NozzlePipelinePreFill.java | 6 +- .../handler/impl/NozzlePipelinePreFillStop.java | 4 +- .../ms/app/handler/impl/NozzlePipelineWash.java | 4 +- .../com/qyft/ms/app/handler/impl/SlideTrayIn.java | 2 +- .../com/qyft/ms/app/handler/impl/SlideTrayOut.java | 2 +- .../ms/app/handler/impl/SyringePipelineWash.java | 10 +- .../app/handler/impl/SyringePipelineWashStop.java | 2 +- .../qyft/ms/app/handler/impl/TestDemoHandler.java | 2 +- .../com/qyft/ms/app/service/DeviceInitService.java | 164 ++++++++++ .../java/com/qyft/ms/device/client/TcpClient.java | 199 ------------ .../com/qyft/ms/device/core/client/TcpClient.java | 340 +++++++++++++++++++++ .../device/core/handler/DeviceMessageHandler.java | 100 ++++++ .../com/qyft/ms/device/device/DeviceInstance.java | 13 +- .../ms/device/handler/DeviceMessageHandler.java | 102 ------- .../ms/device/service/DeviceTcpCMDService.java | 2 +- .../ms/device/service/DeviceTcpCMDServiceV2.java | 2 +- src/main/resources/application.yml | 2 +- 56 files changed, 713 insertions(+), 373 deletions(-) create mode 100644 src/main/java/com/qyft/ms/app/service/DeviceInitService.java delete mode 100644 src/main/java/com/qyft/ms/device/client/TcpClient.java create mode 100644 src/main/java/com/qyft/ms/device/core/client/TcpClient.java create mode 100644 src/main/java/com/qyft/ms/device/core/handler/DeviceMessageHandler.java delete mode 100644 src/main/java/com/qyft/ms/device/handler/DeviceMessageHandler.java 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 97d44c3..eca768f 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 @@ -10,7 +10,7 @@ public class CommandWaitControl { } } public synchronized void commandWait() { - commandWait(3000); + commandWait(5000); } public synchronized void commandContinue() { notify(); 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 2a7463b..a76160d 100644 --- a/src/main/java/com/qyft/ms/app/controller/FrontCmdController.java +++ b/src/main/java/com/qyft/ms/app/controller/FrontCmdController.java @@ -2,20 +2,27 @@ package com.qyft.ms.app.controller; import cn.hutool.json.JSONUtil; import com.qyft.ms.app.common.command.CurrentSendCmdMapInstance; +import com.qyft.ms.app.common.command.FrontCommandAck; +import com.qyft.ms.app.common.constant.CommandStatus; import com.qyft.ms.app.core.registry.CommandHandlerRegistry; import com.qyft.ms.app.handler.CommandHandler; import com.qyft.ms.app.model.form.CMDFormV2; +import com.qyft.ms.device.device.DeviceInstance; +import com.qyft.ms.device.model.DeviceStatusEnum; 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.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; +import java.io.IOException; + @Tag(name = "前端调用指令") @RestController @RequestMapping("/api/device/front") @@ -29,6 +36,17 @@ public class FrontCmdController { @PostMapping("/control") public ResponseBodyEmitter controlMethod(@RequestBody CMDFormV2 cmdForm) { ResponseBodyEmitter emitter = new ResponseBodyEmitter(3600000L); + if (DeviceInstance.getInstance().getDeviceStatus() == DeviceStatusEnum.UNKNOWN) { + //设备未归零 + try { + String frontCmdId = cmdForm.getCmdId(); + String frontCmdName = cmdForm.getCmdName(); + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "后台已收到指令,但设备未归零完毕不执行."), MediaType.APPLICATION_JSON); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + String frontCmdName = cmdForm.getCmdName(); // 获取前端传入的命令字符串 CommandHandler handler = registry.getHandler(frontCmdName); diff --git a/src/main/java/com/qyft/ms/app/controller/FrontCmdDebugController.java b/src/main/java/com/qyft/ms/app/controller/FrontCmdDebugController.java index 2a10185..cd168c6 100644 --- a/src/main/java/com/qyft/ms/app/controller/FrontCmdDebugController.java +++ b/src/main/java/com/qyft/ms/app/controller/FrontCmdDebugController.java @@ -2,20 +2,27 @@ package com.qyft.ms.app.controller; import cn.hutool.json.JSONUtil; import com.qyft.ms.app.common.command.CurrentSendCmdMapInstance; +import com.qyft.ms.app.common.command.FrontCommandAck; +import com.qyft.ms.app.common.constant.CommandStatus; import com.qyft.ms.app.core.registry.CommandHandlerRegistry; import com.qyft.ms.app.handler.CommandHandler; import com.qyft.ms.app.model.form.CMDFormV2; +import com.qyft.ms.device.device.DeviceInstance; +import com.qyft.ms.device.model.DeviceStatusEnum; 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.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; +import java.io.IOException; + @Tag(name = "前端调用指令") @RestController @RequestMapping("/api/device/debug/front") @@ -29,6 +36,17 @@ public class FrontCmdDebugController { @PostMapping("/control") public ResponseBodyEmitter controlMethod(@RequestBody CMDFormV2 cmdForm) { ResponseBodyEmitter emitter = new ResponseBodyEmitter(); + if (DeviceInstance.getInstance().getDeviceStatus() == DeviceStatusEnum.UNKNOWN) { + //设备未归零 + try { + String frontCmdId = cmdForm.getCmdId(); + String frontCmdName = cmdForm.getCmdName(); + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "后台已收到指令,但设备未归零完毕不执行."), MediaType.APPLICATION_JSON); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + String frontCmdName = cmdForm.getCmdName(); // 获取前端传入的命令字符串 CommandHandler handler = registry.getHandler(frontCmdName); diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/DehumidifierValveClose.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/DehumidifierValveClose.java index d4d787f..b37937e 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/DehumidifierValveClose.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/DehumidifierValveClose.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/DehumidifierValveOpen.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/DehumidifierValveOpen.java index 0c8815e..0e74af5 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/DehumidifierValveOpen.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/DehumidifierValveOpen.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/HighVoltageClose.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/HighVoltageClose.java index 9e3d7df..13090db 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/HighVoltageClose.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/HighVoltageClose.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/HighVoltageOpen.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/HighVoltageOpen.java index 65a34f6..acfcc3f 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/HighVoltageOpen.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/HighVoltageOpen.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/LaserControlClose.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/LaserControlClose.java index c2e073f..feb5f4a 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/LaserControlClose.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/LaserControlClose.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/LaserControlOpen.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/LaserControlOpen.java index f9372ad..7368429 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/LaserControlOpen.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/LaserControlOpen.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/LightingPanelClose.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/LightingPanelClose.java index 7931bd7..09da5c9 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/LightingPanelClose.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/LightingPanelClose.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/LightingPanelOpen.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/LightingPanelOpen.java index 0ba3f95..684eb83 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/LightingPanelOpen.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/LightingPanelOpen.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorXMove.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorXMove.java index d8d6f2d..d284be7 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorXMove.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorXMove.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorXOrigin.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorXOrigin.java index 0516248..8787e5d 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorXOrigin.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorXOrigin.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorXStop.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorXStop.java index ec823a5..4b290c3 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorXStop.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorXStop.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorXYZPositionGet.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorXYZPositionGet.java index 6353fb1..c35de28 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorXYZPositionGet.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorXYZPositionGet.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorYMove.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorYMove.java index 22ff0b1..c9618c9 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorYMove.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorYMove.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorYOrigin.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorYOrigin.java index 09e210c..23704aa 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorYOrigin.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorYOrigin.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorYStop.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorYStop.java index d863e4b..4221f82 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorYStop.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorYStop.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorZMove.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorZMove.java index ea2200d..f4bb104 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorZMove.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorZMove.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorZOrigin.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorZOrigin.java index f7374b4..90220fa 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorZOrigin.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorZOrigin.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorZStop.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorZStop.java index 1ab586c..e37f60d 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorZStop.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/MotorZStop.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/NozzleValveClose.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/NozzleValveClose.java index dd495de..fbf72f3 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/NozzleValveClose.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/NozzleValveClose.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/NozzleValveOpen.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/NozzleValveOpen.java index 72568f4..3904e0e 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/NozzleValveOpen.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/NozzleValveOpen.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/SyringePumpStart.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/SyringePumpStart.java index 32309b8..571b080 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/SyringePumpStart.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/SyringePumpStart.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; 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 index 4c7a161..ee03968 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/ThreeWayValveCloseAll.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/ThreeWayValveCloseAll.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; 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 index baa721d..0f1370f 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/ThreeWayValveOpenNuzzlePipeline.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/ThreeWayValveOpenNuzzlePipeline.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; 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 index ce7154e..5a87095 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/ThreeWayValveOpenSyringePipeline.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/ThreeWayValveOpenSyringePipeline.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/WashValveClose.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/WashValveClose.java index 3a44edb..2e7cfbd 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/WashValveClose.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/WashValveClose.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/debugimpl/WashValveOpen.java b/src/main/java/com/qyft/ms/app/handler/debugimpl/WashValveOpen.java index 843f478..e5b7b33 100644 --- a/src/main/java/com/qyft/ms/app/handler/debugimpl/WashValveOpen.java +++ b/src/main/java/com/qyft/ms/app/handler/debugimpl/WashValveOpen.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/impl/DehumidifierStart.java b/src/main/java/com/qyft/ms/app/handler/impl/DehumidifierStart.java index 2b6572b..15f3aea 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/DehumidifierStart.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/DehumidifierStart.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import org.springframework.http.MediaType; import org.springframework.scheduling.annotation.Async; diff --git a/src/main/java/com/qyft/ms/app/handler/impl/DehumidifierStop.java b/src/main/java/com/qyft/ms/app/handler/impl/DehumidifierStop.java index 647d9f7..ea55a81 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/DehumidifierStop.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/DehumidifierStop.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import org.springframework.http.MediaType; import org.springframework.scheduling.annotation.Async; diff --git a/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayChangeParam.java b/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayChangeParam.java index ba24379..1a69036 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayChangeParam.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayChangeParam.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayContinue.java b/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayContinue.java index 94a1039..83557e1 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayContinue.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayContinue.java @@ -11,7 +11,7 @@ import com.qyft.ms.app.handler.CommandHandler; import com.qyft.ms.app.handler.MatrixSprayState; import com.qyft.ms.app.model.bo.CMDToDevice; import com.qyft.ms.app.model.form.CMDFormV2; -import com.qyft.ms.device.client.TcpClient; +import com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayPause.java b/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayPause.java index 31a1212..2ff611f 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayPause.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayPause.java @@ -11,7 +11,7 @@ import com.qyft.ms.app.handler.CommandHandler; import com.qyft.ms.app.handler.MatrixSprayState; import com.qyft.ms.app.model.bo.CMDToDevice; import com.qyft.ms.app.model.form.CMDFormV2; -import com.qyft.ms.device.client.TcpClient; +import com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayStart.java b/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayStart.java index 02e4acb..3dab179 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayStart.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayStart.java @@ -12,8 +12,8 @@ import com.qyft.ms.app.handler.CommandHandler; import com.qyft.ms.app.handler.MatrixSprayState; import com.qyft.ms.app.model.bo.CMDToDevice; import com.qyft.ms.app.model.form.CMDFormV2; -import com.qyft.ms.device.client.TcpClient; -import com.qyft.ms.device.handler.DeviceMessageHandler; +import com.qyft.ms.device.core.client.TcpClient; +import com.qyft.ms.device.core.handler.DeviceMessageHandler; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; @@ -707,7 +707,7 @@ public class MatrixSprayStart implements CommandHandler { } private boolean originZ(ResponseBodyEmitter emitter, String frontCmdId, String frontCmdName) throws IOException { - CMDToDevice motorZOriginCMDToDevice = DeviceCommandGenerator.motor_z_origin(); // 生成 z轴回原点指令 + CMDToDevice motorZOriginCMDToDevice = DeviceCommandGenerator.motor_z_position_set(0.0); // 生成 z轴回原点指令 CommandFuture motorZOriginCMDToDeviceFuture = new CommandFuture(); motorZOriginCMDToDeviceFuture.setCmdToDevice(motorZOriginCMDToDevice); Integer motorZOriginCmdId = motorZOriginCMDToDevice.getCmdId(); @@ -747,7 +747,7 @@ public class MatrixSprayStart implements CommandHandler { } private boolean originX(ResponseBodyEmitter emitter, String frontCmdId, String frontCmdName) throws IOException { - CMDToDevice motorXOriginCMDToDevice = DeviceCommandGenerator.motor_x_origin(); //x轴回原点指令 + CMDToDevice motorXOriginCMDToDevice = DeviceCommandGenerator.motor_x_position_set(0.0); //x轴回原点指令 CommandFuture motorXOriginCMDToDeviceFuture = new CommandFuture(); motorXOriginCMDToDeviceFuture.setCmdToDevice(motorXOriginCMDToDevice); Integer motorXOriginCmdId = motorXOriginCMDToDevice.getCmdId(); @@ -784,7 +784,7 @@ public class MatrixSprayStart implements CommandHandler { } private boolean originY(ResponseBodyEmitter emitter, String frontCmdId, String frontCmdName) throws IOException { - CMDToDevice motorYOriginCMDToDevice = DeviceCommandGenerator.motor_y_origin(); //y轴回原点指令 + CMDToDevice motorYOriginCMDToDevice = DeviceCommandGenerator.motor_y_position_set(0.0); //y轴回原点指令 CommandFuture motorYOriginCMDToDeviceFuture = new CommandFuture(); motorYOriginCMDToDeviceFuture.setCmdToDevice(motorYOriginCMDToDevice); Integer motorYOriginCmdId = motorYOriginCMDToDevice.getCmdId(); diff --git a/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayStop.java b/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayStop.java index c14ee63..2ec784f 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayStop.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayStop.java @@ -11,8 +11,8 @@ import com.qyft.ms.app.handler.CommandHandler; import com.qyft.ms.app.handler.MatrixSprayState; import com.qyft.ms.app.model.bo.CMDToDevice; import com.qyft.ms.app.model.form.CMDFormV2; -import com.qyft.ms.device.client.TcpClient; -import com.qyft.ms.device.handler.DeviceMessageHandler; +import com.qyft.ms.device.core.client.TcpClient; +import com.qyft.ms.device.core.handler.DeviceMessageHandler; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; @@ -223,7 +223,7 @@ public class MatrixSprayStop implements CommandHandler { deviceMessageHandler.setLatch(latch); // z轴回原点 if (originZ(emitter, frontCmdId, frontCmdName)) return; - boolean finished = latch.await(5, TimeUnit.SECONDS); + boolean finished = latch.await(10, TimeUnit.SECONDS); if (!finished) { throw new TimeoutException("等待指令执行完成超时"); } @@ -234,7 +234,7 @@ public class MatrixSprayStop implements CommandHandler { // y轴回原点 if (originY(emitter, frontCmdId, frontCmdName)) return; - finished = latch.await(5, TimeUnit.SECONDS); + finished = latch.await(10, TimeUnit.SECONDS); if (!finished) { throw new TimeoutException("等待指令执行完成超时"); } @@ -250,7 +250,7 @@ public class MatrixSprayStop implements CommandHandler { private boolean originZ(ResponseBodyEmitter emitter, String frontCmdId, String frontCmdName) throws IOException { - CMDToDevice motorZOriginCMDToDevice = DeviceCommandGenerator.motor_z_origin(); // 生成 z轴回原点指令 + CMDToDevice motorZOriginCMDToDevice = DeviceCommandGenerator.motor_z_position_set(0.0); // 生成 z轴回原点指令 CommandFuture motorZOriginCMDToDeviceFuture = new CommandFuture(); motorZOriginCMDToDeviceFuture.setCmdToDevice(motorZOriginCMDToDevice); Integer motorZOriginCmdId = motorZOriginCMDToDevice.getCmdId(); @@ -290,7 +290,7 @@ public class MatrixSprayStop implements CommandHandler { } private boolean originX(ResponseBodyEmitter emitter, String frontCmdId, String frontCmdName) throws IOException { - CMDToDevice motorXOriginCMDToDevice = DeviceCommandGenerator.motor_x_origin(); //x轴回原点指令 + CMDToDevice motorXOriginCMDToDevice = DeviceCommandGenerator.motor_x_position_set(0.0); //x轴回原点指令 CommandFuture motorXOriginCMDToDeviceFuture = new CommandFuture(); motorXOriginCMDToDeviceFuture.setCmdToDevice(motorXOriginCMDToDevice); Integer motorXOriginCmdId = motorXOriginCMDToDevice.getCmdId(); @@ -327,7 +327,7 @@ public class MatrixSprayStop implements CommandHandler { } private boolean originY(ResponseBodyEmitter emitter, String frontCmdId, String frontCmdName) throws IOException { - CMDToDevice motorYOriginCMDToDevice = DeviceCommandGenerator.motor_y_origin(); //y轴回原点指令 + CMDToDevice motorYOriginCMDToDevice = DeviceCommandGenerator.motor_y_position_set(0.0); //y轴回原点指令 CommandFuture motorYOriginCMDToDeviceFuture = new CommandFuture(); motorYOriginCMDToDeviceFuture.setCmdToDevice(motorYOriginCMDToDevice); Integer motorYOriginCmdId = motorYOriginCMDToDevice.getCmdId(); diff --git a/src/main/java/com/qyft/ms/app/handler/impl/MotorXToHome.java b/src/main/java/com/qyft/ms/app/handler/impl/MotorXToHome.java index 6de41ce..995e957 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/MotorXToHome.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/MotorXToHome.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/impl/MotorYToHome.java b/src/main/java/com/qyft/ms/app/handler/impl/MotorYToHome.java index c47b708..203b1ce 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/MotorYToHome.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/MotorYToHome.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/impl/MotorZToHome.java b/src/main/java/com/qyft/ms/app/handler/impl/MotorZToHome.java index 39f6959..f866022 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/MotorZToHome.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/MotorZToHome.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/handler/impl/NozzlePipelinePreFill.java b/src/main/java/com/qyft/ms/app/handler/impl/NozzlePipelinePreFill.java index 4ce53c8..08bb7d1 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/NozzlePipelinePreFill.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/NozzlePipelinePreFill.java @@ -10,8 +10,8 @@ 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 com.qyft.ms.device.handler.DeviceMessageHandler; +import com.qyft.ms.device.core.client.TcpClient; +import com.qyft.ms.device.core.handler.DeviceMessageHandler; import lombok.RequiredArgsConstructor; import org.springframework.http.MediaType; import org.springframework.scheduling.annotation.Async; @@ -240,7 +240,7 @@ public class NozzlePipelinePreFill implements CommandHandler { } emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RESULT, "移动z轴到指定位指令反馈", motorZPositionSetDownCmdToDeviceResult), MediaType.APPLICATION_JSON); - finished = latch.await(5, TimeUnit.SECONDS); + finished = latch.await(10, TimeUnit.SECONDS); if (!finished) { throw new TimeoutException("等待指令执行完成超时"); } diff --git a/src/main/java/com/qyft/ms/app/handler/impl/NozzlePipelinePreFillStop.java b/src/main/java/com/qyft/ms/app/handler/impl/NozzlePipelinePreFillStop.java index 3792382..2f479a0 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/NozzlePipelinePreFillStop.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/NozzlePipelinePreFillStop.java @@ -10,15 +10,13 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; 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; - /** * 喷嘴管路_停止基质预充 */ diff --git a/src/main/java/com/qyft/ms/app/handler/impl/NozzlePipelineWash.java b/src/main/java/com/qyft/ms/app/handler/impl/NozzlePipelineWash.java index 53ca893..5fc7c55 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/NozzlePipelineWash.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/NozzlePipelineWash.java @@ -10,15 +10,13 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; 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; - /** * 喷嘴管路_清洗喷嘴管路 */ diff --git a/src/main/java/com/qyft/ms/app/handler/impl/SlideTrayIn.java b/src/main/java/com/qyft/ms/app/handler/impl/SlideTrayIn.java index 52fcca5..84bbc9a 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/SlideTrayIn.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/SlideTrayIn.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import org.springframework.http.MediaType; import org.springframework.scheduling.annotation.Async; diff --git a/src/main/java/com/qyft/ms/app/handler/impl/SlideTrayOut.java b/src/main/java/com/qyft/ms/app/handler/impl/SlideTrayOut.java index f9fb510..7becbe3 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/SlideTrayOut.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/SlideTrayOut.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import org.springframework.http.MediaType; import org.springframework.scheduling.annotation.Async; diff --git a/src/main/java/com/qyft/ms/app/handler/impl/SyringePipelineWash.java b/src/main/java/com/qyft/ms/app/handler/impl/SyringePipelineWash.java index a9195e8..dc647ec 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/SyringePipelineWash.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/SyringePipelineWash.java @@ -10,8 +10,8 @@ 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 com.qyft.ms.device.handler.DeviceMessageHandler; +import com.qyft.ms.device.core.client.TcpClient; +import com.qyft.ms.device.core.handler.DeviceMessageHandler; import lombok.RequiredArgsConstructor; import org.springframework.http.MediaType; import org.springframework.scheduling.annotation.Async; @@ -129,7 +129,7 @@ public class SyringePipelineWash implements CommandHandler { } emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RESULT, "移动z轴到指定位指令反馈", motorZPositionSetCmdToDeviceResult), MediaType.APPLICATION_JSON); - boolean finished = latch.await(5, TimeUnit.SECONDS); + boolean finished = latch.await(10, TimeUnit.SECONDS); if (!finished) { throw new TimeoutException("等待指令执行完成超时"); } @@ -201,7 +201,7 @@ public class SyringePipelineWash implements CommandHandler { } emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RESULT, "移动y轴到指定位置指令反馈", motorYPositionSetCMDToDeviceResult), MediaType.APPLICATION_JSON); - boolean finished = latch.await(5, TimeUnit.SECONDS); + boolean finished = latch.await(10, TimeUnit.SECONDS); if (!finished) { throw new TimeoutException("等待指令执行完成超时"); } @@ -241,7 +241,7 @@ public class SyringePipelineWash implements CommandHandler { } emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RESULT, "移动z轴到指定位指令反馈", motorZPositionSetDownCmdToDeviceResult), MediaType.APPLICATION_JSON); - finished = latch.await(5, TimeUnit.SECONDS); + finished = latch.await(10, TimeUnit.SECONDS); if (!finished) { throw new TimeoutException("等待指令执行完成超时"); } diff --git a/src/main/java/com/qyft/ms/app/handler/impl/SyringePipelineWashStop.java b/src/main/java/com/qyft/ms/app/handler/impl/SyringePipelineWashStop.java index 0775ebf..a77139c 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/SyringePipelineWashStop.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/SyringePipelineWashStop.java @@ -10,7 +10,7 @@ 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 com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import org.springframework.http.MediaType; import org.springframework.scheduling.annotation.Async; diff --git a/src/main/java/com/qyft/ms/app/handler/impl/TestDemoHandler.java b/src/main/java/com/qyft/ms/app/handler/impl/TestDemoHandler.java index 5e6fce4..d8ac6ba 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/TestDemoHandler.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/TestDemoHandler.java @@ -5,7 +5,7 @@ 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.form.CMDFormV2; -import com.qyft.ms.device.client.TcpClient; +import com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; diff --git a/src/main/java/com/qyft/ms/app/service/DeviceInitService.java b/src/main/java/com/qyft/ms/app/service/DeviceInitService.java new file mode 100644 index 0000000..3aafc60 --- /dev/null +++ b/src/main/java/com/qyft/ms/app/service/DeviceInitService.java @@ -0,0 +1,164 @@ +//package com.qyft.ms.app.service; +// +//import cn.hutool.json.JSONObject; +//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.model.bo.CMDToDevice; +//import com.qyft.ms.device.core.client.TcpClient; +//import com.qyft.ms.device.device.DeviceInstance; +//import com.qyft.ms.device.core.handler.DeviceMessageHandler; +//import com.qyft.ms.device.model.DeviceStatusEnum; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Service; +// +//import java.util.concurrent.CountDownLatch; +//import java.util.concurrent.TimeUnit; +// +///** +// * 设备初始化服务 +// */ +//@Slf4j +//@RequiredArgsConstructor +//@Service +//public class DeviceInitService { +// /** +// * 设备通信client +// */ +// private final TcpClient deviceClient; +// +// private final DeviceMessageHandler deviceMessageHandler; +// +// public void init() { +// log.info("开始初始化设备"); +// try { +// CountDownLatch latch = new CountDownLatch(1); +// deviceMessageHandler.setLatch(latch); +// originZ(); +// boolean finished = latch.await(10, TimeUnit.SECONDS); +// if (!finished) { +// log.info("(初始化)等待指令执行完成超时"); +// return; +// } +// latch = new CountDownLatch(2); +// deviceMessageHandler.setLatch(latch); +// originX(); +// originZ(); +// finished = latch.await(10, TimeUnit.SECONDS); +// if (!finished) { +// log.info("(初始化)等待指令执行完成超时"); +// return; +// } +// } catch (Exception e) { +// log.error("设备初始化异常", e); +// } finally { +// DeviceInstance.getInstance().setDeviceStatus(DeviceStatusEnum.FREE); +// } +// log.info("初始化设备完成"); +// } +// +// private void originZ() { +// CMDToDevice motorZOriginCMDToDevice = DeviceCommandGenerator.motor_z_origin(); // 生成 z轴回原点指令 +// CommandFuture motorZOriginCMDToDeviceFuture = new CommandFuture(); +// motorZOriginCMDToDeviceFuture.setCmdToDevice(motorZOriginCMDToDevice); +// Integer motorZOriginCmdId = motorZOriginCMDToDevice.getCmdId(); +// CurrentSendCmdMapInstance.getInstance().putCommand(motorZOriginCmdId, motorZOriginCMDToDeviceFuture); // 将指令放入map +// +// deviceClient.sendToJSON(motorZOriginCMDToDevice); // 发送指令给设备 +// log.info("(初始化)已向设备发送了z轴回原点指令:{}", motorZOriginCMDToDevice); +// +// motorZOriginCMDToDeviceFuture.waitForContinue(); // 等待设备反馈 +// JSONObject motorZOriginResult = motorZOriginCMDToDeviceFuture.getCallbackResult(); // 获取设备返回结果 +// CurrentSendCmdMapInstance.getInstance().removeCommand(motorZOriginCmdId); // 从map中删除该指令 +// +// if (!motorZOriginCMDToDeviceFuture.isReceived()) { +// log.info("(初始化)z轴回原点指令响应超时:{}", motorZOriginResult); +// throw new RuntimeException(); +// } +// +// if (motorZOriginResult.getJSONObject("error") != null) { +// log.info("(初始化)z轴回原点指令返回错误:{}", motorZOriginResult); +// throw new RuntimeException(); +// } +// +// Object motorZOriginStatus = motorZOriginResult.getObj("result"); +// if (motorZOriginStatus instanceof Boolean) { +// if (!(Boolean) motorZOriginStatus) { +// log.info("(初始化)z轴回原点指令执行失败:{}", motorZOriginResult); +// throw new RuntimeException(); +// } +// } +// log.info("(初始化)z轴已回到原点:{}", motorZOriginResult); +// } +// +// private void originX() { +// CMDToDevice motorXOriginCMDToDevice = DeviceCommandGenerator.motor_x_origin(); // 生成 x轴回原点指令 +// CommandFuture motorXOriginCMDToDeviceFuture = new CommandFuture(); +// motorXOriginCMDToDeviceFuture.setCmdToDevice(motorXOriginCMDToDevice); +// Integer motorXOriginCmdId = motorXOriginCMDToDevice.getCmdId(); +// CurrentSendCmdMapInstance.getInstance().putCommand(motorXOriginCmdId, motorXOriginCMDToDeviceFuture); // 将指令放入map +// +// deviceClient.sendToJSON(motorXOriginCMDToDevice); // 发送指令给设备 +// log.info("(初始化)已向设备发送了x轴回原点指令:{}", motorXOriginCMDToDevice); +// +// motorXOriginCMDToDeviceFuture.waitForContinue(); // 等待设备反馈 +// JSONObject motorXOriginResult = motorXOriginCMDToDeviceFuture.getCallbackResult(); // 获取设备返回结果 +// CurrentSendCmdMapInstance.getInstance().removeCommand(motorXOriginCmdId); // 从map中删除该指令 +// +// if (!motorXOriginCMDToDeviceFuture.isReceived()) { +// log.info("(初始化)x轴回原点指令响应超时:{}", motorXOriginResult); +// throw new RuntimeException(); +// } +// +// if (motorXOriginResult.getJSONObject("error") != null) { +// log.info("(初始化)x轴回原点指令返回错误:{}", motorXOriginResult); +// throw new RuntimeException(); +// } +// +// Object motorXOriginStatus = motorXOriginResult.getObj("result"); +// if (motorXOriginStatus instanceof Boolean) { +// if (!(Boolean) motorXOriginStatus) { +// log.info("(初始化)x轴回原点指令执行失败:{}", motorXOriginResult); +// throw new RuntimeException(); +// } +// } +// log.info("(初始化)x轴已回到原点:{}", motorXOriginResult); +// } +// +// private void originY() { +// CMDToDevice motorYOriginCMDToDevice = DeviceCommandGenerator.motor_y_origin(); // 生成 y轴回原点指令 +// CommandFuture motorYOriginCMDToDeviceFuture = new CommandFuture(); +// motorYOriginCMDToDeviceFuture.setCmdToDevice(motorYOriginCMDToDevice); +// Integer motorYOriginCmdId = motorYOriginCMDToDevice.getCmdId(); +// CurrentSendCmdMapInstance.getInstance().putCommand(motorYOriginCmdId, motorYOriginCMDToDeviceFuture); // 将指令放入map +// +// deviceClient.sendToJSON(motorYOriginCMDToDevice); // 发送指令给设备 +// log.info("(初始化)已向设备发送了y轴回原点指令:{}", motorYOriginCMDToDevice); +// +// motorYOriginCMDToDeviceFuture.waitForContinue(); // 等待设备反馈 +// JSONObject motorYOriginResult = motorYOriginCMDToDeviceFuture.getCallbackResult(); // 获取设备返回结果 +// CurrentSendCmdMapInstance.getInstance().removeCommand(motorYOriginCmdId); // 从map中删除该指令 +// +// if (!motorYOriginCMDToDeviceFuture.isReceived()) { +// log.info("(初始化)y轴回原点指令响应超时:{}", motorYOriginResult); +// throw new RuntimeException(); +// } +// +// if (motorYOriginResult.getJSONObject("error") != null) { +// log.info("(初始化)y轴回原点指令返回错误:{}", motorYOriginResult); +// throw new RuntimeException(); +// } +// +// Object motorYOriginStatus = motorYOriginResult.getObj("result"); +// if (motorYOriginStatus instanceof Boolean) { +// if (!(Boolean) motorYOriginStatus) { +// log.info("(初始化)y轴回原点指令执行失败:{}", motorYOriginResult); +// throw new RuntimeException(); +// } +// } +// log.info("(初始化)y轴已回到原点:{}", motorYOriginResult); +// } +// +// +//} diff --git a/src/main/java/com/qyft/ms/device/client/TcpClient.java b/src/main/java/com/qyft/ms/device/client/TcpClient.java deleted file mode 100644 index 677ce32..0000000 --- a/src/main/java/com/qyft/ms/device/client/TcpClient.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.qyft.ms.device.client; - -import cn.hutool.json.JSONUtil; -import com.qyft.ms.device.common.jsonrpc.JsonRpcRequest; -import com.qyft.ms.device.config.TcpConfig; -import com.qyft.ms.device.handler.DeviceMessageHandler; -import com.qyft.ms.device.model.bo.DeviceFeedback; -import io.netty.bootstrap.Bootstrap; -import io.netty.buffer.Unpooled; -import io.netty.channel.*; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.nio.NioSocketChannel; -import io.netty.handler.codec.json.JsonObjectDecoder; -import io.netty.util.CharsetUtil; -import jakarta.annotation.PostConstruct; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -import java.net.InetSocketAddress; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.TimeUnit; - -@Slf4j -@Component -@RequiredArgsConstructor -public class TcpClient { - - private final TcpConfig tcpConfig; - - private final DeviceMessageHandler deviceMessageHandler; - - private final EventLoopGroup group = new NioEventLoopGroup(); - private Channel channel; - private Bootstrap bootstrap; - - // 初始化方法,在Spring容器启动后调用 - @PostConstruct - public void init() { - if (tcpConfig.isEnable()) { - connect(); - } - } - - // 连接到TCP服务器的方法 - public void connect() { - try { - // 如果Bootstrap对象为空,则初始化它 - if (bootstrap == null) { - bootstrap = new Bootstrap(); - bootstrap.group(group) - .channel(NioSocketChannel.class) - .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, tcpConfig.getTimeout()) - .handler(new ChannelInitializer<>() { - @Override - protected void initChannel(Channel ch) { - // 添加JSON对象解码器到ChannelPipeline - ch.pipeline().addLast(new JsonObjectDecoder()); - // 添加设备消息处理器到ChannelPipeline - ch.pipeline().addLast(deviceMessageHandler); - // 添加TCP连接处理器到ChannelPipeline - ch.pipeline().addLast(new TcpConnectionHandler()); - } - }); - } - - // 记录尝试连接到TCP服务器的日志 - log.info("尝试连接到TCP服务 {}:{}", tcpConfig.getHost(), tcpConfig.getPort()); - ChannelFuture future = bootstrap.connect(new InetSocketAddress(tcpConfig.getHost(), tcpConfig.getPort())); - - // 添加连接监听器 - future.addListener((ChannelFutureListener) f -> { - if (f.isSuccess()) { - // 连接成功,记录日志并设置channel - channel = f.channel(); - log.info("已链接到TCP服务"); - } else { - // 连接失败,记录日志并安排重试 - log.error("无法连接到TCP服务. {}ms后重试...", tcpConfig.getReconnect()); - f.channel().eventLoop().schedule(this::connect, tcpConfig.getReconnect(), TimeUnit.MILLISECONDS); - } - }); - - } catch (Exception e) { - // 捕获并记录连接过程中发生的异常 - log.error("尝试连接到TCP服务发生意外错误: {}", e.getMessage(), e); - } - } - - // 定时检查TCP连接的方法 - @Scheduled(fixedRateString = "${tcp.reconnect}") - public void checkConnection() { - if (channel == null || !channel.isActive()) { - // 如果连接丢失,记录日志并尝试重新连接 - log.error("TCP服务链接丢失"); - connect(); - } - } - - /** - * 将obj转换成json后发送 - */ - public boolean sendToJSON(Object request) { - String msg = JSONUtil.toJsonStr(request); - return this.send(msg); - } - - // 发送字符串请求到TCP服务器的方法 - public boolean send(String request) { - if (channel != null && channel.isActive()) { - log.info("发送TCP指令:{}", request); - // 如果连接有效,发送请求并返回true - channel.writeAndFlush(Unpooled.copiedBuffer(request, CharsetUtil.UTF_8)); - return true; - } else { - // 如果连接无效,记录日志并返回false - log.error("TCP服务未连接,无法发送请求: {}", request); - return false; - } - } - - // 发送JSON-RPC命令到TCP服务器的方法,仅包含方法名 - public DeviceFeedback sendCommand(String method) { - JsonRpcRequest request = new JsonRpcRequest(); - request.setMethod(method); - return this.sendCommand(request); - } - - // 发送JSON-RPC命令到TCP服务器的方法,包含方法名和参数 - public DeviceFeedback sendCommand(String method, Map params) { - JsonRpcRequest request = new JsonRpcRequest(); - request.setMethod(method); - request.setParams(params); - return this.sendCommand(request); - } - - // 发送JSON-RPC命令到TCP服务器的方法,包含完整的JsonRpcRequest对象 - public DeviceFeedback sendCommand(JsonRpcRequest request) { - if (request.getId() == null) { - // 如果请求ID为空,则生成一个新的UUID作为ID - request.setId(UUID.randomUUID().toString()); - } - CompletableFuture future = new CompletableFuture<>(); - deviceMessageHandler.responseMap.put(request.getId(), future); - try { - if (request.getParams() == null) { - // 如果请求参数为空,则初始化一个空的HashMap - request.setParams(new HashMap<>()); - } - // 将请求对象转换为JSON字符串 - String requestJsonStr = JSONUtil.toJsonStr(request); - log.info("发送TCP指令(同步) {}", requestJsonStr); - // 发送请求到服务器,并等待响应 - if (this.send(requestJsonStr)) { - return future.get(tcpConfig.getFeedbackTimeout(), TimeUnit.MILLISECONDS); // 等待 FEEDBACK 响应 - } else { - return null; - } - } catch (Exception e) { - // 捕获并记录发送过程中发生的异常 - log.error("发送TCP指令错误(同步) {}", JSONUtil.toJsonStr(request), e); - } finally { - // 确保请求完成后从responseMap中移除对应的Future - deviceMessageHandler.responseMap.remove(request.getId()); - } - return null; - } - - // 内部类,处理TCP连接事件 - private class TcpConnectionHandler extends ChannelInboundHandlerAdapter { - - // 处理连接断开事件 - @Override - public void channelInactive(ChannelHandlerContext ctx) throws Exception { - // 记录连接断开的日志 - log.error("TCP连接丢失,准备重新连接..."); - if (channel != null) { - // 关闭当前channel - channel.close(); - } - // 尝试重新连接 - connect(); - super.channelInactive(ctx); - } - - // 处理异常事件 - @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { - // 记录异常日志 - log.error("TCP连接发生异常: {}", cause.getMessage(), cause); - // 关闭当前channel - ctx.close(); - } - } -} diff --git a/src/main/java/com/qyft/ms/device/core/client/TcpClient.java b/src/main/java/com/qyft/ms/device/core/client/TcpClient.java new file mode 100644 index 0000000..1863bb0 --- /dev/null +++ b/src/main/java/com/qyft/ms/device/core/client/TcpClient.java @@ -0,0 +1,340 @@ +package com.qyft.ms.device.core.client; + +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.model.bo.CMDToDevice; +import com.qyft.ms.device.common.jsonrpc.JsonRpcRequest; +import com.qyft.ms.device.config.TcpConfig; +import com.qyft.ms.device.core.handler.DeviceMessageHandler; +import com.qyft.ms.device.device.DeviceInstance; +import com.qyft.ms.device.model.DeviceStatusEnum; +import com.qyft.ms.device.model.bo.DeviceFeedback; +import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.Unpooled; +import io.netty.channel.*; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.handler.codec.json.JsonObjectDecoder; +import io.netty.util.CharsetUtil; +import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.net.InetSocketAddress; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +@Slf4j +@Component +@RequiredArgsConstructor +public class TcpClient { + + private final TcpConfig tcpConfig; + private final DeviceMessageHandler deviceMessageHandler; + + private final EventLoopGroup group = new NioEventLoopGroup(); + private Channel channel; + private Bootstrap bootstrap; + + // 初始化方法,在Spring容器启动后调用 + @PostConstruct + public void init() { + if (tcpConfig.isEnable()) { + connect(); + } + } + + // 连接到TCP服务器的方法 + public void connect() { + try { + // 如果Bootstrap对象为空,则初始化它 + if (bootstrap == null) { + bootstrap = new Bootstrap(); + bootstrap.group(group) + .channel(NioSocketChannel.class) + .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, tcpConfig.getTimeout()) + .handler(new ChannelInitializer<>() { + @Override + protected void initChannel(Channel ch) { + // 添加JSON对象解码器到ChannelPipeline + ch.pipeline().addLast(new JsonObjectDecoder()); + // 添加设备消息处理器到ChannelPipeline + ch.pipeline().addLast(deviceMessageHandler); + // 添加TCP连接处理器到ChannelPipeline + ch.pipeline().addLast(new TcpConnectionHandler()); + } + }); + } + + // 记录尝试连接到TCP服务器的日志 + log.info("尝试连接到TCP服务 {}:{}", tcpConfig.getHost(), tcpConfig.getPort()); + ChannelFuture future = bootstrap.connect(new InetSocketAddress(tcpConfig.getHost(), tcpConfig.getPort())); + + // 添加连接监听器 + future.addListener((ChannelFutureListener) f -> { + if (f.isSuccess()) { + // 连接成功,记录日志并设置channel + channel = f.channel(); + log.info("已链接到TCP服务"); + new Thread(this::initDevice).start(); + } else { + // 连接失败,记录日志并安排重试 + log.error("无法连接到TCP服务. {}ms后重试...", tcpConfig.getReconnect()); + f.channel().eventLoop().schedule(this::connect, tcpConfig.getReconnect(), TimeUnit.MILLISECONDS); + } + }); + + } catch (Exception e) { + // 捕获并记录连接过程中发生的异常 + log.error("尝试连接到TCP服务发生意外错误: {}", e.getMessage(), e); + } + } + + // 定时检查TCP连接的方法 + @Scheduled(fixedRateString = "${tcp.reconnect}") + public void checkConnection() { + if (channel == null || !channel.isActive()) { + // 如果连接丢失,记录日志并尝试重新连接 + log.error("TCP服务链接丢失"); + connect(); + } + } + + /** + * 将obj转换成json后发送 + */ + public boolean sendToJSON(Object request) { + String msg = JSONUtil.toJsonStr(request); + return this.send(msg); + } + + // 发送字符串请求到TCP服务器的方法 + public boolean send(String request) { + if (channel != null && channel.isActive()) { + log.info("发送TCP指令:{}", request); + // 如果连接有效,发送请求并返回true + channel.writeAndFlush(Unpooled.copiedBuffer(request, CharsetUtil.UTF_8)); + return true; + } else { + // 如果连接无效,记录日志并返回false + log.error("TCP服务未连接,无法发送请求: {}", request); + return false; + } + } + + // 发送JSON-RPC命令到TCP服务器的方法,仅包含方法名 + public DeviceFeedback sendCommand(String method) { + JsonRpcRequest request = new JsonRpcRequest(); + request.setMethod(method); + return this.sendCommand(request); + } + + // 发送JSON-RPC命令到TCP服务器的方法,包含方法名和参数 + public DeviceFeedback sendCommand(String method, Map params) { + JsonRpcRequest request = new JsonRpcRequest(); + request.setMethod(method); + request.setParams(params); + return this.sendCommand(request); + } + + // 发送JSON-RPC命令到TCP服务器的方法,包含完整的JsonRpcRequest对象 + public DeviceFeedback sendCommand(JsonRpcRequest request) { + if (request.getId() == null) { + // 如果请求ID为空,则生成一个新的UUID作为ID + request.setId(UUID.randomUUID().toString()); + } + CompletableFuture future = new CompletableFuture<>(); + deviceMessageHandler.responseMap.put(request.getId(), future); + try { + if (request.getParams() == null) { + // 如果请求参数为空,则初始化一个空的HashMap + request.setParams(new HashMap<>()); + } + // 将请求对象转换为JSON字符串 + String requestJsonStr = JSONUtil.toJsonStr(request); + log.info("发送TCP指令(同步) {}", requestJsonStr); + // 发送请求到服务器,并等待响应 + if (this.send(requestJsonStr)) { + return future.get(tcpConfig.getFeedbackTimeout(), TimeUnit.MILLISECONDS); // 等待 FEEDBACK 响应 + } else { + return null; + } + } catch (Exception e) { + // 捕获并记录发送过程中发生的异常 + log.error("发送TCP指令错误(同步) {}", JSONUtil.toJsonStr(request), e); + } finally { + // 确保请求完成后从responseMap中移除对应的Future + deviceMessageHandler.responseMap.remove(request.getId()); + } + return null; + } + + // 内部类,处理TCP连接事件 + private class TcpConnectionHandler extends ChannelInboundHandlerAdapter { + + // 处理连接断开事件 + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + // 记录连接断开的日志 + log.error("TCP连接丢失,准备重新连接..."); + if (channel != null) { + // 关闭当前channel + channel.close(); + } + // 尝试重新连接 + connect(); + super.channelInactive(ctx); + } + + // 处理异常事件 + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { + // 记录异常日志 + log.error("TCP连接发生异常: {}", cause.getMessage(), cause); + // 关闭当前channel + ctx.close(); + } + } + + + public void initDevice() { + log.info("开始初始化设备"); + try { + CountDownLatch latch = new CountDownLatch(1); + deviceMessageHandler.setLatch(latch); + originZ(); + boolean finished = latch.await(10, TimeUnit.SECONDS); + if (!finished) { + log.info("(初始化)等待指令执行完成超时"); + return; + } + latch = new CountDownLatch(2); + deviceMessageHandler.setLatch(latch); + originX(); + originZ(); + finished = latch.await(10, TimeUnit.SECONDS); + if (!finished) { + log.info("(初始化)等待指令执行完成超时"); + return; + } + } catch (Exception e) { + log.error("设备初始化异常", e); + } finally { + DeviceInstance.getInstance().setDeviceStatus(DeviceStatusEnum.FREE); + } + log.info("初始化设备完成"); + } + + private void originZ() { + CMDToDevice motorZOriginCMDToDevice = DeviceCommandGenerator.motor_z_origin(); // 生成 z轴回原点指令 + CommandFuture motorZOriginCMDToDeviceFuture = new CommandFuture(); + motorZOriginCMDToDeviceFuture.setCmdToDevice(motorZOriginCMDToDevice); + Integer motorZOriginCmdId = motorZOriginCMDToDevice.getCmdId(); + CurrentSendCmdMapInstance.getInstance().putCommand(motorZOriginCmdId, motorZOriginCMDToDeviceFuture); // 将指令放入map + + sendToJSON(motorZOriginCMDToDevice); // 发送指令给设备 + log.info("(初始化)已向设备发送了z轴回原点指令:{}", motorZOriginCMDToDevice); + + motorZOriginCMDToDeviceFuture.waitForContinue(); // 等待设备反馈 + JSONObject motorZOriginResult = motorZOriginCMDToDeviceFuture.getCallbackResult(); // 获取设备返回结果 + CurrentSendCmdMapInstance.getInstance().removeCommand(motorZOriginCmdId); // 从map中删除该指令 + + if (!motorZOriginCMDToDeviceFuture.isReceived()) { + log.info("(初始化)z轴回原点指令响应超时:{}", motorZOriginResult); + throw new RuntimeException(); + } + + if (motorZOriginResult.getJSONObject("error") != null) { + log.info("(初始化)z轴回原点指令返回错误:{}", motorZOriginResult); + throw new RuntimeException(); + } + + Object motorZOriginStatus = motorZOriginResult.getObj("result"); + if (motorZOriginStatus instanceof Boolean) { + if (!(Boolean) motorZOriginStatus) { + log.info("(初始化)z轴回原点指令执行失败:{}", motorZOriginResult); + throw new RuntimeException(); + } + } + log.info("(初始化)z轴已回到原点:{}", motorZOriginResult); + } + + private void originX() { + CMDToDevice motorXOriginCMDToDevice = DeviceCommandGenerator.motor_x_origin(); // 生成 x轴回原点指令 + CommandFuture motorXOriginCMDToDeviceFuture = new CommandFuture(); + motorXOriginCMDToDeviceFuture.setCmdToDevice(motorXOriginCMDToDevice); + Integer motorXOriginCmdId = motorXOriginCMDToDevice.getCmdId(); + CurrentSendCmdMapInstance.getInstance().putCommand(motorXOriginCmdId, motorXOriginCMDToDeviceFuture); // 将指令放入map + + sendToJSON(motorXOriginCMDToDevice); // 发送指令给设备 + log.info("(初始化)已向设备发送了x轴回原点指令:{}", motorXOriginCMDToDevice); + + motorXOriginCMDToDeviceFuture.waitForContinue(); // 等待设备反馈 + JSONObject motorXOriginResult = motorXOriginCMDToDeviceFuture.getCallbackResult(); // 获取设备返回结果 + CurrentSendCmdMapInstance.getInstance().removeCommand(motorXOriginCmdId); // 从map中删除该指令 + + if (!motorXOriginCMDToDeviceFuture.isReceived()) { + log.info("(初始化)x轴回原点指令响应超时:{}", motorXOriginResult); + throw new RuntimeException(); + } + + if (motorXOriginResult.getJSONObject("error") != null) { + log.info("(初始化)x轴回原点指令返回错误:{}", motorXOriginResult); + throw new RuntimeException(); + } + + Object motorXOriginStatus = motorXOriginResult.getObj("result"); + if (motorXOriginStatus instanceof Boolean) { + if (!(Boolean) motorXOriginStatus) { + log.info("(初始化)x轴回原点指令执行失败:{}", motorXOriginResult); + throw new RuntimeException(); + } + } + log.info("(初始化)x轴已回到原点:{}", motorXOriginResult); + } + + private void originY() { + CMDToDevice motorYOriginCMDToDevice = DeviceCommandGenerator.motor_y_origin(); // 生成 y轴回原点指令 + CommandFuture motorYOriginCMDToDeviceFuture = new CommandFuture(); + motorYOriginCMDToDeviceFuture.setCmdToDevice(motorYOriginCMDToDevice); + Integer motorYOriginCmdId = motorYOriginCMDToDevice.getCmdId(); + CurrentSendCmdMapInstance.getInstance().putCommand(motorYOriginCmdId, motorYOriginCMDToDeviceFuture); // 将指令放入map + + sendToJSON(motorYOriginCMDToDevice); // 发送指令给设备 + log.info("(初始化)已向设备发送了y轴回原点指令:{}", motorYOriginCMDToDevice); + + motorYOriginCMDToDeviceFuture.waitForContinue(); // 等待设备反馈 + JSONObject motorYOriginResult = motorYOriginCMDToDeviceFuture.getCallbackResult(); // 获取设备返回结果 + CurrentSendCmdMapInstance.getInstance().removeCommand(motorYOriginCmdId); // 从map中删除该指令 + + if (!motorYOriginCMDToDeviceFuture.isReceived()) { + log.info("(初始化)y轴回原点指令响应超时:{}", motorYOriginResult); + throw new RuntimeException(); + } + + if (motorYOriginResult.getJSONObject("error") != null) { + log.info("(初始化)y轴回原点指令返回错误:{}", motorYOriginResult); + throw new RuntimeException(); + } + + Object motorYOriginStatus = motorYOriginResult.getObj("result"); + if (motorYOriginStatus instanceof Boolean) { + if (!(Boolean) motorYOriginStatus) { + log.info("(初始化)y轴回原点指令执行失败:{}", motorYOriginResult); + throw new RuntimeException(); + } + } + log.info("(初始化)y轴已回到原点:{}", motorYOriginResult); + } + + +} diff --git a/src/main/java/com/qyft/ms/device/core/handler/DeviceMessageHandler.java b/src/main/java/com/qyft/ms/device/core/handler/DeviceMessageHandler.java new file mode 100644 index 0000000..d5465c6 --- /dev/null +++ b/src/main/java/com/qyft/ms/device/core/handler/DeviceMessageHandler.java @@ -0,0 +1,100 @@ +package com.qyft.ms.device.core.handler; + +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.service.WebSocketService; +import com.qyft.ms.device.device.DeviceInstance; +import com.qyft.ms.device.model.bo.DeviceFeedback; +import com.qyft.ms.device.service.DeviceStatusService; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.util.CharsetUtil; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CountDownLatch; + +@Slf4j +@Component +@ChannelHandler.Sharable +@RequiredArgsConstructor +public class DeviceMessageHandler extends ChannelInboundHandlerAdapter { + public final Map> responseMap = new ConcurrentHashMap<>(); + private final DeviceStatusService deviceStatusService; + private final WebSocketService webSocketService; + private static final long DUPLICATE_CHECK_INTERVAL = 300;//ms + @Setter + private volatile CountDownLatch latch; + + + + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) { + ByteBuf buf = (ByteBuf) msg; + String serverMsg = buf.toString(CharsetUtil.UTF_8); + log.info("serverMsg:{}", serverMsg); + try { + JSONObject deviceResult = JSONUtil.parseObj(serverMsg); + JSONObject payload = deviceResult.getJSONObject("payload"); + String tag = deviceResult.get("tag").toString(); + Integer cmdId = payload.getInt("cmdId"); + + + if ("event".equals(tag)) { //设备上报事件 + String eventType = payload.getJSONObject("result").getStr("event_type"); + if (latch != null) { + switch (eventType) { + case "motor_x_home_finished": + case "motor_y_home_finished": + case "motor_z_home_finished": + case "motor_x_move_finished": + case "motor_y_move_finished": + case "motor_z_move_finished": + latch.countDown(); + break; + default: + // 如果有其他的事件类型,可以在这里处理 + break; + } + } + } else if ("ack".equals(tag)) {//设备指令反馈 + Map receivedCommands = DeviceInstance.getInstance().getReceivedCommands(); + long currentTime = System.currentTimeMillis(); + if (receivedCommands.containsKey(payload.getInt("cmdId"))) { + long lastReceivedTime = receivedCommands.get(payload.getInt("cmdId")); + if (currentTime - lastReceivedTime < DUPLICATE_CHECK_INTERVAL) { + return; + } + } + + receivedCommands.put(cmdId, currentTime); + + + + CommandFuture commandFuture = CurrentSendCmdMapInstance.getInstance().getCommand(cmdId); + if (commandFuture != null) { + commandFuture.setReceived(true); + commandFuture.setCallbackResult(payload); + commandFuture.commandContinue(); + } + } else if ("status".equals(tag)) { //设备上报状态 + } + } catch (Exception e) { + log.error("TCP服务消息处理错误: {}, error: {}", serverMsg, e.getMessage(), e); + } finally { + buf.release(); + } + } + + + +} \ No newline at end of file diff --git a/src/main/java/com/qyft/ms/device/device/DeviceInstance.java b/src/main/java/com/qyft/ms/device/device/DeviceInstance.java index 1f0735b..98bb9c8 100644 --- a/src/main/java/com/qyft/ms/device/device/DeviceInstance.java +++ b/src/main/java/com/qyft/ms/device/device/DeviceInstance.java @@ -33,7 +33,7 @@ public class DeviceInstance { //嵌入式版本 private String microVersion; //设备状态 - private DeviceStatusEnum deviceStatus; + private DeviceStatusEnum deviceStatus = DeviceStatusEnum.UNKNOWN; //喷涂状态 private MatrixSprayStatusEnum matrixSprayStatusEnum; @@ -46,7 +46,7 @@ public class DeviceInstance { private MotorZ motorZ; - private ConcurrentHashMap receivedCommands = new ConcurrentHashMap<>(); + private ConcurrentHashMap receivedCommands = new ConcurrentHashMap<>(); private void updateMotorPosition(MotorNameEnum motorName, Double position) { @@ -58,7 +58,10 @@ public class DeviceInstance { motorZ.setPosition(position); } - }; + } + + ; + private void updateMotorOrigin(MotorNameEnum motorName, Boolean isOrigin) { if (motorName == MotorNameEnum.X) { motorX.setIsOrigin(isOrigin); @@ -67,5 +70,7 @@ public class DeviceInstance { } else if (motorName == MotorNameEnum.Z) { motorZ.setIsOrigin(isOrigin); } - }; + } + + ; } \ No newline at end of file diff --git a/src/main/java/com/qyft/ms/device/handler/DeviceMessageHandler.java b/src/main/java/com/qyft/ms/device/handler/DeviceMessageHandler.java deleted file mode 100644 index 0de8d6e..0000000 --- a/src/main/java/com/qyft/ms/device/handler/DeviceMessageHandler.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.qyft.ms.device.handler; - -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.service.WebSocketService; -import com.qyft.ms.device.device.DeviceInstance; -import com.qyft.ms.device.model.bo.DeviceFeedback; -import com.qyft.ms.device.service.DeviceStatusService; -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandler; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; -import io.netty.util.CharsetUtil; -import jakarta.annotation.PostConstruct; -import lombok.RequiredArgsConstructor; -import lombok.Setter; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Iterator; -import java.util.Map; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CountDownLatch; - -@Slf4j -@Component -@ChannelHandler.Sharable -@RequiredArgsConstructor -public class DeviceMessageHandler extends ChannelInboundHandlerAdapter { - public final Map> responseMap = new ConcurrentHashMap<>(); - private final DeviceStatusService deviceStatusService; - private final WebSocketService webSocketService; - private static final long DUPLICATE_CHECK_INTERVAL = 300;//ms - @Setter - private volatile CountDownLatch latch; - - - - @Override - public void channelRead(ChannelHandlerContext ctx, Object msg) { - ByteBuf buf = (ByteBuf) msg; - String serverMsg = buf.toString(CharsetUtil.UTF_8); - log.info("serverMsg:{}", serverMsg); - try { - JSONObject deviceResult = JSONUtil.parseObj(serverMsg); - JSONObject payload = deviceResult.getJSONObject("payload"); - String tag = deviceResult.get("tag").toString(); - Integer cmdId = payload.getInt("cmdId"); - - - if ("event".equals(tag)) { //设备上报事件 - String eventType = payload.getJSONObject("result").getStr("event_type"); - if (latch != null) { - switch (eventType) { - case "motor_x_home_finished": - case "motor_y_home_finished": - case "motor_z_home_finished": - case "motor_x_move_finished": - case "motor_y_move_finished": - case "motor_z_move_finished": - latch.countDown(); - break; - default: - // 如果有其他的事件类型,可以在这里处理 - break; - } - } - } else if ("ack".equals(tag)) {//设备指令反馈 - Map receivedCommands = DeviceInstance.getInstance().getReceivedCommands(); - long currentTime = System.currentTimeMillis(); - if (receivedCommands.containsKey(payload.getInt("cmdId"))) { - long lastReceivedTime = receivedCommands.get(payload.getInt("cmdId")); - if (currentTime - lastReceivedTime < DUPLICATE_CHECK_INTERVAL) { - return; - } - } - - receivedCommands.put(cmdId, currentTime); - - - - CommandFuture commandFuture = CurrentSendCmdMapInstance.getInstance().getCommand(cmdId); - if (commandFuture != null) { - commandFuture.setReceived(true); - commandFuture.setCallbackResult(payload); - commandFuture.commandContinue(); - } - } else if ("status".equals(tag)) { //设备上报状态 - } - } catch (Exception e) { - log.error("TCP服务消息处理错误: {}, error: {}", serverMsg, e.getMessage(), e); - } finally { - buf.release(); - } - } - - - -} \ No newline at end of file diff --git a/src/main/java/com/qyft/ms/device/service/DeviceTcpCMDService.java b/src/main/java/com/qyft/ms/device/service/DeviceTcpCMDService.java index ef7c1a7..d15c7fc 100644 --- a/src/main/java/com/qyft/ms/device/service/DeviceTcpCMDService.java +++ b/src/main/java/com/qyft/ms/device/service/DeviceTcpCMDService.java @@ -1,7 +1,7 @@ package com.qyft.ms.device.service; import cn.hutool.json.JSONUtil; -import com.qyft.ms.device.client.TcpClient; +import com.qyft.ms.device.core.client.TcpClient; import com.qyft.ms.device.common.constant.DeviceCommands; import com.qyft.ms.device.common.jsonrpc.JsonRpcRequest; import com.qyft.ms.device.model.bo.DeviceFeedback; diff --git a/src/main/java/com/qyft/ms/device/service/DeviceTcpCMDServiceV2.java b/src/main/java/com/qyft/ms/device/service/DeviceTcpCMDServiceV2.java index 23ffcf8..1e878a9 100644 --- a/src/main/java/com/qyft/ms/device/service/DeviceTcpCMDServiceV2.java +++ b/src/main/java/com/qyft/ms/device/service/DeviceTcpCMDServiceV2.java @@ -1,7 +1,7 @@ package com.qyft.ms.device.service; import cn.hutool.json.JSONUtil; -import com.qyft.ms.device.client.TcpClient; +import com.qyft.ms.device.core.client.TcpClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 37cef6e..d93fc8d 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -16,7 +16,7 @@ spring: mybatis-plus: configuration: # 开启 SQL 日志输出(可选) - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl +# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 如果需要加载 XML 文件(自定义 SQL),可配置 mapper-locations: mapper-locations: classpath*:mapper/*.xml