Browse Source

fix:修复中断线程时同时中断了ws链接的问题

tags/1.0
白凤吉 4 months ago
parent
commit
4aa82c3c9e
  1. 8
      src/main/java/com/qyft/ms/app/device/spray/SprayTaskExecutor.java
  2. 8
      src/main/java/com/qyft/ms/app/device/status/SprayTask.java
  3. 6
      src/main/java/com/qyft/ms/app/front/cmd/business/DeviceSelfTest.java
  4. 9
      src/main/java/com/qyft/ms/app/front/cmd/business/MatrixSprayStart.java
  5. 9
      src/main/java/com/qyft/ms/app/front/cmd/business/MatrixSprayStop.java

8
src/main/java/com/qyft/ms/app/device/spray/SprayTaskExecutor.java

@ -68,6 +68,9 @@ public class SprayTaskExecutor {
webSocketService.pushDebugMsg(FrontResponseGenerator.generateJson(sprayTask.getCmdId(), sprayTask.getCmdCode(), CommandStatus.ERROR, "设备正在喷涂,请先停止喷涂")); webSocketService.pushDebugMsg(FrontResponseGenerator.generateJson(sprayTask.getCmdId(), sprayTask.getCmdCode(), CommandStatus.ERROR, "设备正在喷涂,请先停止喷涂"));
return; return;
} }
sprayTask.setSpraying(true);
deviceStatus.setSpraying(true);
taskThread = new Thread(() -> { taskThread = new Thread(() -> {
try { try {
webSocketService.pushCMDResponseMsg(FrontResponseGenerator.generateJson(sprayTask.getCmdId(), sprayTask.getCmdCode(), CommandStatus.START, "喷涂任务开始执行")); webSocketService.pushCMDResponseMsg(FrontResponseGenerator.generateJson(sprayTask.getCmdId(), sprayTask.getCmdCode(), CommandStatus.START, "喷涂任务开始执行"));
@ -140,7 +143,7 @@ public class SprayTaskExecutor {
sprayTaskSprayed.setNumber(sprayNum); sprayTaskSprayed.setNumber(sprayNum);
sprayTaskSprayed.setIndex(sprayTaskStep.getIndex()); sprayTaskSprayed.setIndex(sprayTaskStep.getIndex());
sprayTaskSprayed.setSprayedPoints(new Point2D(nextPoint.getX(), nextPoint.getY())); sprayTaskSprayed.setSprayedPoints(new Point2D(nextPoint.getX(), nextPoint.getY()));
sprayTask.getSprayTaskSprayedList().add(sprayTaskSprayed);
sprayTask.addSprayTaskSprayed(sprayTaskSprayed);
} }
} }
sprayTask.setSuspendable(false);//不可暂停 sprayTask.setSuspendable(false);//不可暂停
@ -179,9 +182,8 @@ public class SprayTaskExecutor {
deviceStatus.setPaused(false); deviceStatus.setPaused(false);
deviceStatus.setSuspendable(false); deviceStatus.setSuspendable(false);
} catch (InterruptedException e) { } catch (InterruptedException e) {
deviceStatus.setSuspendable(false);
sprayTask.setPaused(true);
webSocketService.pushDebugMsg(FrontResponseGenerator.generateJson(sprayTask.getCmdId(), sprayTask.getCmdCode(), CommandStatus.SEND, "喷涂任务线程停止")); webSocketService.pushDebugMsg(FrontResponseGenerator.generateJson(sprayTask.getCmdId(), sprayTask.getCmdCode(), CommandStatus.SEND, "喷涂任务线程停止"));
Thread.currentThread().interrupt();
} catch (Exception e) { } catch (Exception e) {
log.info("喷涂任务失败", e); log.info("喷涂任务失败", e);
webSocketService.pushCMDResponseMsg(FrontResponseGenerator.generateJson(sprayTask.getCmdId(), sprayTask.getCmdCode(), CommandStatus.FAIL, "喷涂任务执行失败")); webSocketService.pushCMDResponseMsg(FrontResponseGenerator.generateJson(sprayTask.getCmdId(), sprayTask.getCmdCode(), CommandStatus.FAIL, "喷涂任务执行失败"));

8
src/main/java/com/qyft/ms/app/device/status/SprayTask.java

@ -110,6 +110,14 @@ public class SprayTask {
sprayParams.setPositionList(positionList); sprayParams.setPositionList(positionList);
} }
public synchronized void addSprayTaskSprayed(SprayTaskSprayed task) {
if (sprayTaskSprayedList.size() >= 200) {
// 删除最旧的元素
sprayTaskSprayedList.remove(0);
}
sprayTaskSprayedList.add(task);
}
public void clear() { public void clear() {
cmdId = null; cmdId = null;
cmdCode = null; cmdCode = null;

6
src/main/java/com/qyft/ms/app/front/cmd/business/DeviceSelfTest.java

@ -40,13 +40,13 @@ public class DeviceSelfTest extends BaseCommandHandler {
CommandFuture motorZOriginCommandFuture = deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), motorZOriginCommand); CommandFuture motorZOriginCommandFuture = deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), motorZOriginCommand);
commandWait(motorXOriginCommandFuture, motorYOriginCommandFuture, motorZOriginCommandFuture); commandWait(motorXOriginCommandFuture, motorYOriginCommandFuture, motorZOriginCommandFuture);
try { try {
if (motorXOriginCommandFuture.getResponseResult().getBool("status")) {
if (motorXOriginCommandFuture.getResponseResult().getBool("success")) {
selfTestService.getSelfTestStatus().setXAxisAtOrigin(true); selfTestService.getSelfTestStatus().setXAxisAtOrigin(true);
} }
if (motorYOriginCommandFuture.getResponseResult().getBool("status")) {
if (motorYOriginCommandFuture.getResponseResult().getBool("success")) {
selfTestService.getSelfTestStatus().setYAxisAtOrigin(true); selfTestService.getSelfTestStatus().setYAxisAtOrigin(true);
} }
if (motorZOriginCommandFuture.getResponseResult().getBool("status")) {
if (motorZOriginCommandFuture.getResponseResult().getBool("success")) {
selfTestService.getSelfTestStatus().setZAxisAtOrigin(true); selfTestService.getSelfTestStatus().setZAxisAtOrigin(true);
} }
deviceStatus.setSelfTestCompleted(true); deviceStatus.setSelfTestCompleted(true);

9
src/main/java/com/qyft/ms/app/front/cmd/business/MatrixSprayStart.java

@ -117,12 +117,10 @@ public class MatrixSprayStart extends BaseCommandHandler {
if (sprayTask.isSpraying()) {//判断设备是否正在喷涂 if (sprayTask.isSpraying()) {//判断设备是否正在喷涂
webSocketService.pushDebugMsg(FrontResponseGenerator.generateJson(form.getCmdId(), form.getCmdCode(), CommandStatus.ERROR, "设备正在喷涂,请先停止喷涂")); webSocketService.pushDebugMsg(FrontResponseGenerator.generateJson(form.getCmdId(), form.getCmdCode(), CommandStatus.ERROR, "设备正在喷涂,请先停止喷涂"));
throw new RuntimeException("设备正在喷涂,请先停止喷涂"); throw new RuntimeException("设备正在喷涂,请先停止喷涂");
} else {
sprayTask.setSpraying(true);
deviceStatus.setSpraying(true);
sprayTask.setCmdId(form.getCmdId());
sprayTask.setCmdCode(form.getCmdCode());
} }
sprayTask.setCmdId(form.getCmdId());
sprayTask.setCmdCode(form.getCmdCode());
// 1. 参数校验 // 1. 参数校验
String matrixPathType = form.getStringParam("matrixPathType"); String matrixPathType = form.getStringParam("matrixPathType");
Double motorZHeight = form.getDoubleParam("motorZHeight"); Double motorZHeight = form.getDoubleParam("motorZHeight");
@ -334,7 +332,6 @@ public class MatrixSprayStart extends BaseCommandHandler {
CommandFuture nozzleValveOpenCommandFuture = deviceCommandService.sendCommand(sprayTask.getCmdId(), sprayTask.getCmdCode(), nozzleValveOpenCommand); CommandFuture nozzleValveOpenCommandFuture = deviceCommandService.sendCommand(sprayTask.getCmdId(), sprayTask.getCmdCode(), nozzleValveOpenCommand);
commandWait(nozzleValveOpenCommandFuture); commandWait(nozzleValveOpenCommandFuture);
// 10. 启动喷涂线程开始喷涂 // 10. 启动喷涂线程开始喷涂
sprayTaskExecutor.startTask(); sprayTaskExecutor.startTask();
webSocketService.pushDebugMsg(FrontResponseGenerator.generateJson(form.getCmdId(), form.getCmdCode(), CommandStatus.SEND, "已开启喷涂线程")); webSocketService.pushDebugMsg(FrontResponseGenerator.generateJson(form.getCmdId(), form.getCmdCode(), CommandStatus.SEND, "已开启喷涂线程"));

9
src/main/java/com/qyft/ms/app/front/cmd/business/MatrixSprayStop.java

@ -32,6 +32,10 @@ public class MatrixSprayStop extends BaseCommandHandler {
@Override @Override
public CompletableFuture<Void> handle(FrontCmdControlForm form) { public CompletableFuture<Void> handle(FrontCmdControlForm form) {
SprayTask.getInstance().clear();
deviceStatus.setSpraying(false);
deviceStatus.setPaused(false);
deviceStatus.setSuspendable(false);
return runAsync(() -> { return runAsync(() -> {
sprayTaskExecutor.stopTask();//终止喷涂任务线程 sprayTaskExecutor.stopTask();//终止喷涂任务线程
@ -59,11 +63,6 @@ public class MatrixSprayStop extends BaseCommandHandler {
CommandFuture motorYOriginCommandFuture = deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), motorYOriginCommand); CommandFuture motorYOriginCommandFuture = deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), motorYOriginCommand);
CommandFuture motorZOriginCommandFuture = deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), motorZOriginCommand); CommandFuture motorZOriginCommandFuture = deviceCommandService.sendCommand(form.getCmdId(), form.getCmdCode(), motorZOriginCommand);
commandWait(motorXOriginCommandFuture, motorYOriginCommandFuture, motorZOriginCommandFuture); commandWait(motorXOriginCommandFuture, motorYOriginCommandFuture, motorZOriginCommandFuture);
SprayTask.getInstance().clear();
deviceStatus.setSpraying(false);
deviceStatus.setPaused(false);
deviceStatus.setSuspendable(false);
}); });
} }
} }
Loading…
Cancel
Save