From 6969e0dcf7f9b679e589bd9f1c8e84c57ed75bda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=87=A4=E5=90=89?= Date: Thu, 20 Mar 2025 21:50:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=96=B7=E6=B6=82=E8=BF=87=E7=A8=8B?= =?UTF-8?q?=E4=B8=AD=E6=8E=A8=E9=80=81=E7=82=B9=E4=BD=8D=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E9=87=87=E9=9B=86=E6=94=B9=E4=B8=BA=E5=9B=BA=E5=AE=9A=E7=82=B9?= =?UTF-8?q?=E4=BD=8D=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ms/app/device/spray/SprayTaskExecutor.java | 55 +++++++++++++++++----- .../app/device/spray/SprayTaskPointCollector.java | 38 +++++++-------- .../app/front/cmd/business/MatrixSprayStart.java | 1 + .../java/com/qyft/ms/app/model/bo/Point2D.java | 2 + .../model/bo/SprayTaskPointCollectorPushBO.java | 14 ++++-- .../ms/system/core/server/WebSocketServer.java | 2 +- 6 files changed, 76 insertions(+), 36 deletions(-) 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 e962fcf..8209510 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 @@ -1,20 +1,23 @@ package com.qyft.ms.app.device.spray; -import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qyft.ms.app.common.constant.WebSocketMessageType; import com.qyft.ms.app.device.status.DeviceStatus; 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.app.model.bo.SprayTaskSprayed; import com.qyft.ms.app.model.bo.SprayTaskStep; +import com.qyft.ms.app.model.entity.Position; import com.qyft.ms.app.model.entity.SysSettings; +import com.qyft.ms.app.service.PositionService; import com.qyft.ms.app.service.SysSettingsService; import com.qyft.ms.system.common.device.command.CommandFuture; import com.qyft.ms.system.common.device.command.DeviceCommandGenerator; import com.qyft.ms.system.model.bo.DeviceCommand; import com.qyft.ms.system.service.WebSocketService; import com.qyft.ms.system.service.device.DeviceCommandService; +import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -33,8 +36,25 @@ public class SprayTaskExecutor { private final SprayTaskPointCollector sprayTaskPointCollector; private final SysSettingsService sysSettingsService; private final DeviceStatus deviceStatus; + private final PositionService positionService; private Thread taskThread; + private Double[][] slideArr; + + @PostConstruct + private void init() { + Position slidePosition1 = positionService.getOne(new LambdaQueryWrapper().eq(Position::getPointCode, "slide_position1")); + Position slidePosition2 = positionService.getOne(new LambdaQueryWrapper().eq(Position::getPointCode, "slide_position2")); + Position slidePosition3 = positionService.getOne(new LambdaQueryWrapper().eq(Position::getPointCode, "slide_position3")); + Position slidePosition4 = positionService.getOne(new LambdaQueryWrapper().eq(Position::getPointCode, "slide_position4")); + slideArr = new Double[][]{ + {slidePosition1.getX(), slidePosition1.getY()}, + {slidePosition2.getX(), slidePosition2.getY()}, + {slidePosition3.getX(), slidePosition3.getY()}, + {slidePosition4.getX(), slidePosition4.getY()} + }; + } + /** * 启动任务线程,如果线程已存在且正在运行则不重复启动 @@ -89,29 +109,40 @@ public class SprayTaskExecutor { List sprayStepList = new ArrayList<>(); sprayTask.setSuspendable(true);//可以暂停,单次喷涂范围内可以进行暂停 deviceStatus.setSuspendable(true); - for (List sprayStepCommands : sprayTaskStep.getSpraySteps()) {//单次喷涂 - if (reCurrentStep < currentStep) { + for (int i = 0; i < sprayTaskStep.getSpraySteps().size(); i++) {//单次喷涂 + if (currentStep < reCurrentStep) { break; } + List sprayStepCommands = sprayTaskStep.getSpraySteps().get(i); List commandFutureList = new ArrayList<>(); for (DeviceCommand sprayStep : sprayStepCommands) { CommandFuture commandFuture = deviceCommandService.sendCommand(sprayTask.getCmdId(), sprayTask.getCmdCode(), sprayStep); commandFutureList.add(commandFuture); } + CommandFuture[] commandFutureArray = commandFutureList.toArray(new CommandFuture[0]); - sprayTaskPointCollector.startCollecting(sprayTaskStep.getIndex()); //开启点位推送 +// sprayTaskPointCollector.startCollecting(sprayTaskStep.getIndex()); //开启点位推送 + + Point2D currentPoint = null; + try { + List currentSprayStepCommands = sprayTaskStep.getSpraySteps().get(i - 1); + double currentXPoint = (Double) currentSprayStepCommands.get(0).getParam().get("position") - slideArr[sprayTaskStep.getIndex()][0]; + double currentYPoint = 75.5 - (Double) currentSprayStepCommands.get(1).getParam().get("position"); + currentPoint = new Point2D(currentXPoint, currentYPoint); + } catch (Exception ignored) { + } + + double nextXPoint = (Double) sprayStepCommands.get(0).getParam().get("position") - slideArr[sprayTaskStep.getIndex()][0]; + double nextYPoint = 75.5 - (Double) sprayStepCommands.get(1).getParam().get("position"); + Point2D nextPoint = new Point2D(nextXPoint, nextYPoint); + SprayTaskPointCollectorPushBO sprayTaskPointCollectorPushBO = new SprayTaskPointCollectorPushBO(sprayTaskStep.getIndex(), currentPoint, nextPoint); + webSocketService.pushMsg(WebSocketMessageType.SPRAY_POINT, sprayTaskPointCollectorPushBO); commandWait(commandFutureArray); - sprayTaskPointCollector.stopCollecting();//关闭点位推送 +// sprayTaskPointCollector.stopCollecting();//关闭点位推送 currentStep++; sprayTask.setCurrentStep(currentStep);//将当前的喷涂进度缓存 //将当前点位缓存 - DeviceCommand motorXyzPositionGetCommand = DeviceCommandGenerator.motorXyzPositionGet(); //生成电机XYZ相对原点坐标指令 - CommandFuture motorXyzPositionGetCommandFuture = deviceCommandService.sendCommand(sprayTask.getCmdId(), sprayTask.getCmdCode(), motorXyzPositionGetCommand); - commandWait(motorXyzPositionGetCommandFuture); - JSONObject motorXyzPositionGetCommandResult = motorXyzPositionGetCommandFuture.getResponseResult(); - Double xAxisPosition = motorXyzPositionGetCommandResult.getDouble("xAxisPosition"); - Double yAxisPosition = motorXyzPositionGetCommandResult.getDouble("yAxisPosition"); - sprayStepList.add(new Point2D(xAxisPosition, yAxisPosition)); + sprayStepList.add(new Point2D(nextXPoint, nextYPoint)); } sprayTask.setSuspendable(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 c94901b..6828d8b 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 @@ -40,7 +40,7 @@ public class SprayTaskPointCollector { private Double[][] slideArr; - @PostConstruct +// @PostConstruct private void init() { Position slidePosition1 = positionService.getOne(new LambdaQueryWrapper().eq(Position::getPointCode, "slide_position1")); Position slidePosition2 = positionService.getOne(new LambdaQueryWrapper().eq(Position::getPointCode, "slide_position2")); @@ -75,23 +75,23 @@ public class SprayTaskPointCollector { } private void collectPoints() { - try { - if (SprayTask.getInstance().isPaused()) { - stopCollecting(); - } - DeviceCommand motorXyzPositionGetCommand = DeviceCommandGenerator.motorXyzPositionGet(); //生成电机XYZ相对原点坐标指令 - CommandFuture motorXyzPositionGetCommandFuture = deviceCommandService.sendCommandNoFront(motorXyzPositionGetCommand); - JSONObject motorXyzPositionGetCommandResult = motorXyzPositionGetCommandFuture.getResponseResult(); - Double xAxisPosition = motorXyzPositionGetCommandResult.getDouble("xAxisPosition"); - Double yAxisPosition = motorXyzPositionGetCommandResult.getDouble("yAxisPosition"); - xAxisPosition = xAxisPosition - slideArr[currentSprayIndex][0]; - yAxisPosition = 75.5 - 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); - } +// try { +// if (SprayTask.getInstance().isPaused()) { +// stopCollecting(); +// } +// DeviceCommand motorXyzPositionGetCommand = DeviceCommandGenerator.motorXyzPositionGet(); //生成电机XYZ相对原点坐标指令 +// CommandFuture motorXyzPositionGetCommandFuture = deviceCommandService.sendCommandNoFront(motorXyzPositionGetCommand); +// JSONObject motorXyzPositionGetCommandResult = motorXyzPositionGetCommandFuture.getResponseResult(); +// Double xAxisPosition = motorXyzPositionGetCommandResult.getDouble("xAxisPosition"); +// Double yAxisPosition = motorXyzPositionGetCommandResult.getDouble("yAxisPosition"); +// xAxisPosition = xAxisPosition - slideArr[currentSprayIndex][0]; +// yAxisPosition = 75.5 - 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); +// } } } 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 aad7eff..31a8e14 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 @@ -274,6 +274,7 @@ public class MatrixSprayStart extends BaseCommandHandler { } } +// log.info(JSONUtil.toJsonStr(sprayTask.getSprayTaskStepList())); // 10. 启动喷涂线程,开始喷涂 sprayTaskExecutor.startTask(); webSocketService.pushDebugMsg(FrontResponseGenerator.generateJson(form.getCmdId(), form.getCmdCode(), CommandStatus.SEND, "已开启喷涂线程")); diff --git a/src/main/java/com/qyft/ms/app/model/bo/Point2D.java b/src/main/java/com/qyft/ms/app/model/bo/Point2D.java index 702ad64..a055a6b 100644 --- a/src/main/java/com/qyft/ms/app/model/bo/Point2D.java +++ b/src/main/java/com/qyft/ms/app/model/bo/Point2D.java @@ -8,5 +8,7 @@ public class Point2D { private double y; public Point2D(double x, double y) { + this.x = x; + this.y = y; } } diff --git a/src/main/java/com/qyft/ms/app/model/bo/SprayTaskPointCollectorPushBO.java b/src/main/java/com/qyft/ms/app/model/bo/SprayTaskPointCollectorPushBO.java index 3e4f07a..3ec31e3 100644 --- a/src/main/java/com/qyft/ms/app/model/bo/SprayTaskPointCollectorPushBO.java +++ b/src/main/java/com/qyft/ms/app/model/bo/SprayTaskPointCollectorPushBO.java @@ -1,5 +1,6 @@ package com.qyft.ms.app.model.bo; +import com.fasterxml.jackson.annotation.JsonInclude; import lombok.Data; @Data @@ -9,12 +10,17 @@ public class SprayTaskPointCollectorPushBO { */ Integer index; /** - * 点位坐标 + * 当前点位坐标 */ - Point2D point; + Point2D currentPoint; + /** + * 下一个点位坐标 + */ + Point2D nextPoint; - public SprayTaskPointCollectorPushBO(Integer index, Point2D point) { + public SprayTaskPointCollectorPushBO(Integer index, Point2D currentPoint, Point2D nextPoint) { this.index = index; - this.point = point; + this.currentPoint = currentPoint; + this.nextPoint = nextPoint; } } diff --git a/src/main/java/com/qyft/ms/system/core/server/WebSocketServer.java b/src/main/java/com/qyft/ms/system/core/server/WebSocketServer.java index e7d5707..9273643 100644 --- a/src/main/java/com/qyft/ms/system/core/server/WebSocketServer.java +++ b/src/main/java/com/qyft/ms/system/core/server/WebSocketServer.java @@ -23,11 +23,11 @@ public class WebSocketServer { */ public static void sendMessageToClients(String message) { synchronized (sendLock) { + log.info("发送消息给客户端:{}", message); for (Session session : sessions) { if (session.isOpen()) { try { session.getBasicRemote().sendText(message); - log.info("发送消息给客户端(sessionId={}):{}", session.getId(), message); } catch (Exception e) { log.error("发送消息失败,sessionId={}", session.getId(), e); }