From 21937cbb4c8754daa0124ef56d483c05882a36f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=87=A4=E5=90=89?= Date: Wed, 19 Mar 2025 18:46:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:DeviceStatus=E4=BA=A4=E7=94=B1spring?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ms/app/core/aspect/DeviceStatusAspect.java | 3 ++- .../ms/app/device/spray/SprayTaskExecutor.java | 13 +++++++------ .../app/device/spray/SprayTaskPointCollector.java | 8 +++++++- .../qyft/ms/app/device/status/DeviceStatus.java | 22 ++++++++++++++-------- .../app/front/cmd/business/DehumidifierStart.java | 3 ++- .../app/front/cmd/business/DehumidifierStop.java | 3 ++- .../app/front/cmd/business/MatrixSprayPause.java | 3 ++- .../app/front/cmd/business/MatrixSprayStart.java | 3 ++- .../ms/app/front/cmd/business/MatrixSprayStop.java | 7 ++++--- .../front/cmd/business/NozzlePipelinePreFill.java | 3 ++- .../cmd/business/NozzlePipelinePreFillStop.java | 5 +++-- .../app/front/cmd/business/NozzlePipelineWash.java | 3 ++- .../front/cmd/business/SyringePipelineWash.java | 3 ++- .../cmd/business/SyringePipelineWashStop.java | 5 +++-- .../com/qyft/ms/app/service/SelfTestService.java | 3 ++- .../ms/system/controller/FrontCmdController.java | 10 +++++++--- 16 files changed, 63 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/qyft/ms/app/core/aspect/DeviceStatusAspect.java b/src/main/java/com/qyft/ms/app/core/aspect/DeviceStatusAspect.java index 4c71178..2043175 100644 --- a/src/main/java/com/qyft/ms/app/core/aspect/DeviceStatusAspect.java +++ b/src/main/java/com/qyft/ms/app/core/aspect/DeviceStatusAspect.java @@ -15,6 +15,7 @@ import org.springframework.stereotype.Component; @RequiredArgsConstructor public class DeviceStatusAspect { private final WebSocketService webSocketService; + private final DeviceStatus deviceStatus; @Pointcut("execution(* com.qyft.ms.app.device.status.DeviceStatus.set*(..))") public void setterMethods() { @@ -22,6 +23,6 @@ public class DeviceStatusAspect { @After("setterMethods()") public void afterSetter(JoinPoint joinPoint) throws Throwable { - webSocketService.pushMsg(WebSocketMessageType.DEVICE_STATUS_CHANGE, DeviceStatus.getInstance()); + webSocketService.pushMsg(WebSocketMessageType.DEVICE_STATUS_CHANGE, deviceStatus.toJSON()); } } diff --git a/src/main/java/com/qyft/ms/app/device/spray/SprayTaskExecutor.java b/src/main/java/com/qyft/ms/app/device/spray/SprayTaskExecutor.java index 1e33b98..ca80459 100644 --- a/src/main/java/com/qyft/ms/app/device/spray/SprayTaskExecutor.java +++ b/src/main/java/com/qyft/ms/app/device/spray/SprayTaskExecutor.java @@ -30,6 +30,7 @@ public class SprayTaskExecutor { private final DeviceCommandService deviceCommandService; private final SprayTaskPointCollector sprayTaskPointCollector; private final SysSettingsService sysSettingsService; + private final DeviceStatus deviceStatus; private Thread taskThread; @@ -86,7 +87,7 @@ public class SprayTaskExecutor { List sprayStepList = new ArrayList<>(); sprayTask.setSuspendable(true);//可以暂停,单次喷涂范围内可以进行暂停 - DeviceStatus.getInstance().setSuspendable(true); + deviceStatus.setSuspendable(true); for (List deviceCommandAgg : deviceCommandList) {//单次喷涂 if (reCurrentStep < currentStep) { break; @@ -113,7 +114,7 @@ public class SprayTaskExecutor { } currentSprayIndex++; sprayTask.setSuspendable(false);//不可暂停 - DeviceStatus.getInstance().setSuspendable(false); + deviceStatus.setSuspendable(false); sprayTask.getSprayedPoints().add(sprayStepList); DeviceCommand nozzleValveCloseCommand = DeviceCommandGenerator.nozzleValveClose();//关闭喷嘴阀 @@ -135,7 +136,7 @@ public class SprayTaskExecutor { CommandFuture motorYPositionSetCommandFuture = deviceCommandService.sendCommand(motorYPositionSetCommand); CommandFuture motorZPositionSetCommandFuture = deviceCommandService.sendCommand(motorZPositionSetCommand); commandWait(motorXPositionSetCommandFuture, motorYPositionSetCommandFuture, motorZPositionSetCommandFuture); - + webSocketService.pushMsg(WebSocketMessageType.SPRAY_TASK, "喷涂任务执行完毕"); } catch (InterruptedException e) { webSocketService.pushMsg(WebSocketMessageType.SPRAY_TASK, "喷涂任务线程停止"); Thread.currentThread().interrupt(); @@ -147,9 +148,9 @@ public class SprayTaskExecutor { synchronized (this) { taskThread = null; SprayTask.getInstance().clear(); - DeviceStatus.getInstance().setSpraying(false); - DeviceStatus.getInstance().setPaused(false); - DeviceStatus.getInstance().setSuspendable(false); + deviceStatus.setSpraying(false); + deviceStatus.setPaused(false); + deviceStatus.setSuspendable(false); } } }); diff --git a/src/main/java/com/qyft/ms/app/device/spray/SprayTaskPointCollector.java b/src/main/java/com/qyft/ms/app/device/spray/SprayTaskPointCollector.java index 1af08e8..f3f876d 100644 --- a/src/main/java/com/qyft/ms/app/device/spray/SprayTaskPointCollector.java +++ b/src/main/java/com/qyft/ms/app/device/spray/SprayTaskPointCollector.java @@ -1,7 +1,9 @@ package com.qyft.ms.app.device.spray; import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.qyft.ms.app.common.constant.WebSocketMessageType; +import com.qyft.ms.app.device.status.SprayTask; import com.qyft.ms.app.model.bo.Point2D; import com.qyft.ms.app.model.bo.SprayTaskPointCollectorPushBO; import com.qyft.ms.system.common.device.command.CommandFuture; @@ -54,6 +56,9 @@ public class SprayTaskPointCollector { private void collectPoints() { try { + if(SprayTask.getInstance().isPaused()){ + stopCollecting(); + } DeviceCommand motorXyzPositionGetCommand = DeviceCommandGenerator.motorXyzPositionGet(); //生成电机XYZ相对原点坐标指令 CommandFuture motorXyzPositionGetCommandFuture = deviceCommandService.sendCommand(motorXyzPositionGetCommand); JSONObject motorXyzPositionGetCommandResult = motorXyzPositionGetCommandFuture.getResponseResult(); @@ -61,9 +66,10 @@ public class SprayTaskPointCollector { Double yAxisPosition = motorXyzPositionGetCommandResult.getDouble("yAxisPosition"); Point2D point2D = new Point2D(xAxisPosition, yAxisPosition); SprayTaskPointCollectorPushBO sprayTaskPointCollectorPushBO = new SprayTaskPointCollectorPushBO(currentSprayIndex, point2D); + log.info("喷涂点位采集,采集到点位:{}", JSONUtil.toJsonStr(sprayTaskPointCollectorPushBO)); webSocketService.pushMsg(WebSocketMessageType.SPRAY_POINT, sprayTaskPointCollectorPushBO); } catch (Exception e) { - log.error("喷涂任务点位采集错误", e); + log.error("喷涂点位采集发生错误", e); } } } diff --git a/src/main/java/com/qyft/ms/app/device/status/DeviceStatus.java b/src/main/java/com/qyft/ms/app/device/status/DeviceStatus.java index 52e3635..42b75f8 100644 --- a/src/main/java/com/qyft/ms/app/device/status/DeviceStatus.java +++ b/src/main/java/com/qyft/ms/app/device/status/DeviceStatus.java @@ -1,16 +1,16 @@ package com.qyft.ms.app.device.status; +import cn.hutool.json.JSONObject; import lombok.Data; +import org.springframework.stereotype.Component; /** * 设备运行状态 */ @Data +@Component public class DeviceStatus { - private DeviceStatus() { - } - /** * 设备是否正在进行的喷涂任务 */ @@ -51,11 +51,17 @@ public class DeviceStatus { */ private volatile boolean selfTestCompleted = false; - private static class Holder { - private static final DeviceStatus INSTANCE = new DeviceStatus(); + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.putOnce("spraying", spraying); + json.putOnce("paused", paused); + json.putOnce("suspendable", suspendable); + json.putOnce("cleaningSyringePipeline", cleaningSyringePipeline); + json.putOnce("cleaningNozzlePipeline", cleaningNozzlePipeline); + json.putOnce("prefilling", prefilling); + json.putOnce("dehumidifierRunning", dehumidifierRunning); + json.putOnce("selfTestCompleted", selfTestCompleted); + return json; } - public static DeviceStatus getInstance() { - return DeviceStatus.Holder.INSTANCE; - } } diff --git a/src/main/java/com/qyft/ms/app/front/cmd/business/DehumidifierStart.java b/src/main/java/com/qyft/ms/app/front/cmd/business/DehumidifierStart.java index d6888b0..4e4bb66 100644 --- a/src/main/java/com/qyft/ms/app/front/cmd/business/DehumidifierStart.java +++ b/src/main/java/com/qyft/ms/app/front/cmd/business/DehumidifierStart.java @@ -29,6 +29,7 @@ import java.util.concurrent.CompletableFuture; public class DehumidifierStart extends BaseCommandHandler { private final DeviceCommandService deviceCommandService; + private final DeviceStatus deviceStatus; @Override public CompletableFuture handle(FrontCmdControlForm form, ResponseBodyEmitter emitter) { @@ -60,7 +61,7 @@ public class DehumidifierStart extends BaseCommandHandler { CommandFuture dehumidifierValveOpenCmdFuture = deviceCommandService.sendCommand(dehumidifierValveOpenCmd, form, emitter); commandWait(dehumidifierValveOpenCmdFuture); - DeviceStatus.getInstance().setDehumidifierRunning(true); + deviceStatus.setDehumidifierRunning(true); }); } } diff --git a/src/main/java/com/qyft/ms/app/front/cmd/business/DehumidifierStop.java b/src/main/java/com/qyft/ms/app/front/cmd/business/DehumidifierStop.java index 3a4ae0f..b91262d 100644 --- a/src/main/java/com/qyft/ms/app/front/cmd/business/DehumidifierStop.java +++ b/src/main/java/com/qyft/ms/app/front/cmd/business/DehumidifierStop.java @@ -26,6 +26,7 @@ import java.util.concurrent.CompletableFuture; public class DehumidifierStop extends BaseCommandHandler { private final DeviceCommandService deviceCommandService; + private final DeviceStatus deviceStatus; @Override public CompletableFuture handle(FrontCmdControlForm form, ResponseBodyEmitter emitter) { @@ -34,7 +35,7 @@ public class DehumidifierStop extends BaseCommandHandler { CommandFuture dehumidifierStopCommandFuture = deviceCommandService.sendCommand(dehumidifierStopCommand, form, emitter); commandWait(dehumidifierStopCommandFuture); - DeviceStatus.getInstance().setDehumidifierRunning(false); + deviceStatus.setDehumidifierRunning(false); }); } } diff --git a/src/main/java/com/qyft/ms/app/front/cmd/business/MatrixSprayPause.java b/src/main/java/com/qyft/ms/app/front/cmd/business/MatrixSprayPause.java index 7fcbc76..9e0cb98 100644 --- a/src/main/java/com/qyft/ms/app/front/cmd/business/MatrixSprayPause.java +++ b/src/main/java/com/qyft/ms/app/front/cmd/business/MatrixSprayPause.java @@ -32,6 +32,7 @@ public class MatrixSprayPause extends BaseCommandHandler { private final DeviceCommandService deviceCommandService; private final SprayTaskExecutor sprayTaskExecutor; + private final DeviceStatus deviceStatus; @Override public CompletableFuture handle(FrontCmdControlForm form, ResponseBodyEmitter emitter) { @@ -57,7 +58,7 @@ public class MatrixSprayPause extends BaseCommandHandler { CommandFuture motorZStopCommandFuture = deviceCommandService.sendCommand(motorZStopCommand, form, emitter); commandWait(motorXStopCommandFuture, motorYStopCommandFuture, motorZStopCommandFuture); sprayTask.setPaused(true); - DeviceStatus.getInstance().setPaused(true); + deviceStatus.setPaused(true); }else{ emitter.send(FrontCommand.backstage(form.getCmdId(), form.getCmdCode(), CommandStatus.ERROR, "当前喷涂任务不可暂停"), MediaType.APPLICATION_JSON); } diff --git a/src/main/java/com/qyft/ms/app/front/cmd/business/MatrixSprayStart.java b/src/main/java/com/qyft/ms/app/front/cmd/business/MatrixSprayStart.java index 146a42b..ace317a 100644 --- a/src/main/java/com/qyft/ms/app/front/cmd/business/MatrixSprayStart.java +++ b/src/main/java/com/qyft/ms/app/front/cmd/business/MatrixSprayStart.java @@ -43,6 +43,7 @@ public class MatrixSprayStart extends BaseCommandHandler { private final SprayTaskExecutor sprayTaskExecutor; private final PositionService positionService; + private final DeviceStatus deviceStatus; private static boolean nonNullCheck(ResponseBodyEmitter emitter, String cmdId, String cmdCode, @@ -113,7 +114,7 @@ public class MatrixSprayStart extends BaseCommandHandler { return; } else { sprayTask.setSpraying(true); - DeviceStatus.getInstance().setSpraying(true); + deviceStatus.setSpraying(true); } // 1. 参数校验 diff --git a/src/main/java/com/qyft/ms/app/front/cmd/business/MatrixSprayStop.java b/src/main/java/com/qyft/ms/app/front/cmd/business/MatrixSprayStop.java index fe23fef..2aa7a0b 100644 --- a/src/main/java/com/qyft/ms/app/front/cmd/business/MatrixSprayStop.java +++ b/src/main/java/com/qyft/ms/app/front/cmd/business/MatrixSprayStop.java @@ -29,6 +29,7 @@ public class MatrixSprayStop extends BaseCommandHandler { private final DeviceCommandService deviceCommandService; private final SprayTaskExecutor sprayTaskExecutor; + private final DeviceStatus deviceStatus; @Override public CompletableFuture handle(FrontCmdControlForm form, ResponseBodyEmitter emitter) { @@ -61,9 +62,9 @@ public class MatrixSprayStop extends BaseCommandHandler { commandWait(motorXPositionSetCommandFuture, motorYPositionSetCommandFuture, motorZPositionSetCommandFuture); SprayTask.getInstance().clear(); - DeviceStatus.getInstance().setSpraying(false); - DeviceStatus.getInstance().setPaused(false); - DeviceStatus.getInstance().setSuspendable(false); + deviceStatus.setSpraying(false); + deviceStatus.setPaused(false); + deviceStatus.setSuspendable(false); }); } } diff --git a/src/main/java/com/qyft/ms/app/front/cmd/business/NozzlePipelinePreFill.java b/src/main/java/com/qyft/ms/app/front/cmd/business/NozzlePipelinePreFill.java index 5faf78c..2dbfa52 100644 --- a/src/main/java/com/qyft/ms/app/front/cmd/business/NozzlePipelinePreFill.java +++ b/src/main/java/com/qyft/ms/app/front/cmd/business/NozzlePipelinePreFill.java @@ -37,6 +37,7 @@ public class NozzlePipelinePreFill extends BaseCommandHandler { private final DeviceCommandService deviceCommandService; private final SysSettingsService sysSettingsService; private final PositionService positionService; + private final DeviceStatus deviceStatus; @Override public CompletableFuture handle(FrontCmdControlForm form, ResponseBodyEmitter emitter) { @@ -84,7 +85,7 @@ public class NozzlePipelinePreFill extends BaseCommandHandler { CommandFuture syringePumpStartCommandFuture = deviceCommandService.sendCommand(syringePumpStartCommand, form, emitter); commandWait(syringePumpStartCommandFuture); - DeviceStatus.getInstance().setPrefilling(true); + deviceStatus.setPrefilling(true); }); } diff --git a/src/main/java/com/qyft/ms/app/front/cmd/business/NozzlePipelinePreFillStop.java b/src/main/java/com/qyft/ms/app/front/cmd/business/NozzlePipelinePreFillStop.java index 942eb49..a0a1a4a 100644 --- a/src/main/java/com/qyft/ms/app/front/cmd/business/NozzlePipelinePreFillStop.java +++ b/src/main/java/com/qyft/ms/app/front/cmd/business/NozzlePipelinePreFillStop.java @@ -21,10 +21,11 @@ import java.util.concurrent.CompletableFuture; @Slf4j @Component @RequiredArgsConstructor -@CommandMapping("matrix_prefill")//业务指令注解 +@CommandMapping("matrix_prefill_stop")//业务指令注解 public class NozzlePipelinePreFillStop extends BaseCommandHandler { private final DeviceCommandService deviceCommandService; + private final DeviceStatus deviceStatus; @Override public CompletableFuture handle(FrontCmdControlForm form, ResponseBodyEmitter emitter) { @@ -40,7 +41,7 @@ public class NozzlePipelinePreFillStop extends BaseCommandHandler { CommandFuture nozzleValveCloseCommandFuture = deviceCommandService.sendCommand(nozzleValveCloseCommand, form, emitter); commandWait(syringePumpStopCommandFuture, threeWayValveCloseAllCommandFuture, nozzleValveCloseCommandFuture); - DeviceStatus.getInstance().setPrefilling(false); + deviceStatus.setPrefilling(false); }); } diff --git a/src/main/java/com/qyft/ms/app/front/cmd/business/NozzlePipelineWash.java b/src/main/java/com/qyft/ms/app/front/cmd/business/NozzlePipelineWash.java index fe6fe1c..f710ce3 100644 --- a/src/main/java/com/qyft/ms/app/front/cmd/business/NozzlePipelineWash.java +++ b/src/main/java/com/qyft/ms/app/front/cmd/business/NozzlePipelineWash.java @@ -36,6 +36,7 @@ public class NozzlePipelineWash extends BaseCommandHandler { private final DeviceCommandService deviceCommandService; private final SysSettingsService sysSettingsService; private final PositionService positionService; + private final DeviceStatus deviceStatus; @Override public CompletableFuture handle(FrontCmdControlForm form, ResponseBodyEmitter emitter) { @@ -71,7 +72,7 @@ public class NozzlePipelineWash extends BaseCommandHandler { CommandFuture threeWayValveOpenSyringePipelineCommandFuture = deviceCommandService.sendCommand(threeWayValveOpenSyringePipelineCommand, form, emitter); commandWait(threeWayValveOpenSyringePipelineCommandFuture); - DeviceStatus.getInstance().setCleaningNozzlePipeline(true); + deviceStatus.setCleaningNozzlePipeline(true); }); } diff --git a/src/main/java/com/qyft/ms/app/front/cmd/business/SyringePipelineWash.java b/src/main/java/com/qyft/ms/app/front/cmd/business/SyringePipelineWash.java index ae90521..a708631 100644 --- a/src/main/java/com/qyft/ms/app/front/cmd/business/SyringePipelineWash.java +++ b/src/main/java/com/qyft/ms/app/front/cmd/business/SyringePipelineWash.java @@ -36,6 +36,7 @@ public class SyringePipelineWash extends BaseCommandHandler { private final DeviceCommandService deviceCommandService; private final SysSettingsService sysSettingsService; private final PositionService positionService; + private final DeviceStatus deviceStatus; @Override public CompletableFuture handle(FrontCmdControlForm form, ResponseBodyEmitter emitter) { @@ -80,7 +81,7 @@ public class SyringePipelineWash extends BaseCommandHandler { CommandFuture syringePumpStartCommandFuture = deviceCommandService.sendCommand(syringePumpStartCommand, form, emitter); commandWait(syringePumpStartCommandFuture); - DeviceStatus.getInstance().setCleaningSyringePipeline(true); + deviceStatus.setCleaningSyringePipeline(true); }); } diff --git a/src/main/java/com/qyft/ms/app/front/cmd/business/SyringePipelineWashStop.java b/src/main/java/com/qyft/ms/app/front/cmd/business/SyringePipelineWashStop.java index 48b7ef0..b900a93 100644 --- a/src/main/java/com/qyft/ms/app/front/cmd/business/SyringePipelineWashStop.java +++ b/src/main/java/com/qyft/ms/app/front/cmd/business/SyringePipelineWashStop.java @@ -25,6 +25,7 @@ import java.util.concurrent.CompletableFuture; public class SyringePipelineWashStop extends BaseCommandHandler { private final DeviceCommandService deviceCommandService; + private final DeviceStatus deviceStatus; @Override public CompletableFuture handle(FrontCmdControlForm form, ResponseBodyEmitter emitter) { @@ -37,8 +38,8 @@ public class SyringePipelineWashStop extends BaseCommandHandler { CommandFuture threeWayValveCloseAllCommandFuture = deviceCommandService.sendCommand(threeWayValveCloseAllCommand, form, emitter); commandWait(syringePumpStopCommandFuture, threeWayValveCloseAllCommandFuture); - DeviceStatus.getInstance().setCleaningSyringePipeline(false); - DeviceStatus.getInstance().setCleaningNozzlePipeline(true); + deviceStatus.setCleaningSyringePipeline(false); + deviceStatus.setCleaningNozzlePipeline(true); }); } diff --git a/src/main/java/com/qyft/ms/app/service/SelfTestService.java b/src/main/java/com/qyft/ms/app/service/SelfTestService.java index 985769d..54ed786 100644 --- a/src/main/java/com/qyft/ms/app/service/SelfTestService.java +++ b/src/main/java/com/qyft/ms/app/service/SelfTestService.java @@ -10,13 +10,14 @@ import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class SelfTestService { + private final DeviceStatus deviceStatus; /** * 开始自检 */ public SelfTestVO startTest() { SelfTestVO selfTestBO = new SelfTestVO(); - DeviceStatus.getInstance().setSelfTestCompleted(true); + deviceStatus.setSelfTestCompleted(true); return selfTestBO; } } diff --git a/src/main/java/com/qyft/ms/system/controller/FrontCmdController.java b/src/main/java/com/qyft/ms/system/controller/FrontCmdController.java index 1d8b86b..202b621 100644 --- a/src/main/java/com/qyft/ms/system/controller/FrontCmdController.java +++ b/src/main/java/com/qyft/ms/system/controller/FrontCmdController.java @@ -38,22 +38,26 @@ public class FrontCmdController { CommandHandler commandHandler = registry.getHandler(code); if (commandHandler == null) { emitter.send(FrontCommand.backstage(id, code, CommandStatus.ERROR, "未找到对应的业务指令"), MediaType.APPLICATION_JSON); + log.error("未找到对应的业务指令"); emitter.complete(); return emitter; } emitter.send(FrontCommand.backstage(id, code, CommandStatus.START, "业务指令开始执行"), MediaType.APPLICATION_JSON); - + log.info("业务指令开始执行"); CompletableFuture future = commandHandler.handle(form, emitter); future.whenComplete((v, ex) -> { try { if (ex != null) { - emitter.send(FrontCommand.backstage(id, code, CommandStatus.ERROR, "业务指令处理异常", ex.getMessage()), MediaType.APPLICATION_JSON); + emitter.send(FrontCommand.backstage(id, code, CommandStatus.ERROR, "业务指令执行异常", ex.getMessage()), MediaType.APPLICATION_JSON); log.error("执行业务指令发生异常: {}", JSONUtil.toJsonStr(form), ex); } - emitter.send(FrontCommand.backstage(id, code, CommandStatus.FINISH, "业务指令处理结束"), MediaType.APPLICATION_JSON); + Thread.sleep(50); + emitter.send(FrontCommand.backstage(id, code, CommandStatus.FINISH, "业务指令执行结束"), MediaType.APPLICATION_JSON); + log.info("业务指令执行结束"); } catch (Exception e) { log.error("执行业务指令发生异常: {}", JSONUtil.toJsonStr(form), e); } finally { + log.info("业务指令 emitter complete"); emitter.complete(); } });