From ca9309de586a02437adc163a392f303ac35c7366 Mon Sep 17 00:00:00 2001 From: maochaoying <925670706@qq.com> Date: Wed, 5 Jul 2023 17:42:05 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iflytop/nuclear/controller/TaskController.java | 3 +- .../nuclear/service/impl/CheckServiceImpl.java | 226 ++++++++------------- .../iflytop/nuclear/websocket/WebSocketServer.java | 6 +- 3 files changed, 93 insertions(+), 142 deletions(-) diff --git a/src/main/java/com/iflytop/nuclear/controller/TaskController.java b/src/main/java/com/iflytop/nuclear/controller/TaskController.java index 3965249..ef33712 100644 --- a/src/main/java/com/iflytop/nuclear/controller/TaskController.java +++ b/src/main/java/com/iflytop/nuclear/controller/TaskController.java @@ -19,6 +19,7 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; @@ -81,7 +82,7 @@ public class TaskController { } @PostMapping("/delete/excel/{id}") - public ResponseData deleteTaskExcel(@PathVariable(name = "id") int id) { + public ResponseData deleteTaskExcel(@PathVariable(name = "id") int id) throws IOException { QueryWrapper nuclearCoreConfigQueryWrapper = new QueryWrapper<>(); nuclearCoreConfigQueryWrapper.eq("task_id", id); boolean remove = nuclearCoreConfigService.remove(nuclearCoreConfigQueryWrapper); diff --git a/src/main/java/com/iflytop/nuclear/service/impl/CheckServiceImpl.java b/src/main/java/com/iflytop/nuclear/service/impl/CheckServiceImpl.java index 9485397..51a58cf 100644 --- a/src/main/java/com/iflytop/nuclear/service/impl/CheckServiceImpl.java +++ b/src/main/java/com/iflytop/nuclear/service/impl/CheckServiceImpl.java @@ -55,7 +55,7 @@ public class CheckServiceImpl implements CheckService { return checkInfo; } - public boolean updateCoordAndStatus(int taskId, String currentCoord, int status) { + public boolean updateCoordAndStatus(int taskId, String currentCoord, int status) throws IOException { UpdateWrapper taskUpdateWrapper = new UpdateWrapper<>(); taskUpdateWrapper.eq("id",taskId); Task task = new Task(); @@ -64,6 +64,7 @@ public class CheckServiceImpl implements CheckService { } task.setStatus(status); boolean update = taskService.update(task, taskUpdateWrapper); + this.sendMessageToPage(); return update; } @@ -71,13 +72,88 @@ public class CheckServiceImpl implements CheckService { return messageReceived; } - public void sendMessageToClient(String nextCoord, int taskId) throws IOException { - DetectionMessage startMessage = DetectionMessage.builder() - .messageId(IdUtil.randomUUID()) - .coord(nextCoord) - .taskId(taskId) - .build(); - webSocketServer.sendMessage(startMessage.toString()); + public void sendMessageToDevice(String nextCoord, int taskId) throws IOException { + // DetectionMessage startMessage = DetectionMessage.builder() + // .messageId(IdUtil.randomUUID()) + // .coord(nextCoord) + // .taskId(taskId) + // .build(); + // webSocketServer.sendMessage(startMessage.toString()); + } + + public void sendMessageToPage() throws IOException { + webSocketServer.sendMessage("update"); + } + + public void initCheck(String initNextCoord,int order, int taskId) throws IOException { + // 指定初始化index为1-6 + String nextCoord = initNextCoord; + this.updateCoordAndStatus(taskId, nextCoord, 1); + // 开始检测 + this.sendMessageToDevice(nextCoord, taskId); + // 如果中间终止 则退出返回 与messagehandler 处理逻辑相同 外部控制while的终止 + // 下一次进入后则进入其他流程 + while (!"finish".equals(nextCoord)) { + // 需要一个中断的接口, 中途暂停本次流程 + // 用messagehandler处理检测完毕的消息 从而启动以下流程 + boolean breakFirst = false; + while (true) { + if (this.breakOff) { + breakFirst = true; + this.updateCoordAndStatus(taskId, nextCoord, 2); + break; + } + if (this.isMessageReceived()) { + messageReceived = false; + break; // 跳出循环 + } + } + if (breakFirst) { + break; + } + // 检测完毕后获取下一个坐标 + nextCoord = this.getNextCoord(nextCoord, order); + this.updateCoordAndStatus(taskId, nextCoord, 1); + this.sendMessageToDevice(nextCoord, taskId); + if ("finish".equals(nextCoord)) { + this.updateCoordAndStatus(taskId, nextCoord, 3); + } + } + } + + public void continueCheck(int taskId, int order) throws IOException { + // 被中断过,需要从中断的currentCoord坐标继续 + // 首先需要读取数据库,获得当前taskId的信息 + Task task = taskService.getById(taskId); + String nextCoord = task.getCurrentCoord(); + this.sendMessageToDevice(nextCoord, taskId); + // 得到的currentCoord已经检测过,直接进入下一流程 + while (!"finish".equals(nextCoord)) { + // 需要一个中断的接口, 中途暂停本次流程 + // 用messagehandler处理检测完毕的消息 从而启动以下流程 + boolean breakFirst = false; + while (true) { + if (this.breakOff) { + breakFirst = true; + this.updateCoordAndStatus(taskId, nextCoord, 2); + break; + } + if (this.isMessageReceived()) { + messageReceived = false; + break; // 跳出循环 + } + } + if (breakFirst){ + break; + } + // 检测完毕后获取下一个坐标 + nextCoord = this.getNextCoord(nextCoord, order); + this.updateCoordAndStatus(taskId, nextCoord, 1); + this.sendMessageToDevice(nextCoord, taskId); + if ("finish".equals(nextCoord)) { + this.updateCoordAndStatus(taskId, nextCoord, 3); + } + } } @Override @@ -87,141 +163,15 @@ public class CheckServiceImpl implements CheckService { currentTaskId = taskId; if (order == 0) { if (startIndex == null || "".equals(startIndex)) { - // 指定初始化index为1-6 - String nextCoord = "1-6"; - this.updateCoordAndStatus(taskId, nextCoord, 1); - // 开始检测 - this.sendMessageToClient(nextCoord, taskId); - // 如果中间终止 则退出返回 与messagehandler 处理逻辑相同 外部控制while的终止 - // 下一次进入后则进入其他流程 - while (!"finish".equals(nextCoord)) { - // 需要一个中断的接口, 中途暂停本次流程 - // 用messagehandler处理检测完毕的消息 从而启动以下流程 - boolean breakFirst = false; - while (true) { - if (this.breakOff) { - breakFirst = true; - this.updateCoordAndStatus(taskId, nextCoord, 2); - break; - } - if (this.isMessageReceived()) { - messageReceived = false; - break; // 跳出循环 - } - } - if (breakFirst) { - break; - } - // 检测完毕后获取下一个坐标 - nextCoord = this.getNextCoord(nextCoord, 0); - this.updateCoordAndStatus(taskId, nextCoord, 1); - this.sendMessageToClient(nextCoord, taskId); - if ("finish".equals(nextCoord)) { - this.updateCoordAndStatus(taskId, nextCoord, 3); - } - } + this.initCheck("1-6", order, taskId); }else { - // 被中断过,需要从中断的currentCoord坐标继续 - // 首先需要读取数据库,获得当前taskId的信息 - Task task = taskService.getById(taskId); - String nextCoord = task.getCurrentCoord(); - this.sendMessageToClient(nextCoord, taskId); - // 得到的currentCoord已经检测过,直接进入下一流程 - while (!"finish".equals(nextCoord)) { - // 需要一个中断的接口, 中途暂停本次流程 - // 用messagehandler处理检测完毕的消息 从而启动以下流程 - boolean breakFirst = false; - while (true) { - if (this.breakOff) { - breakFirst = true; - this.updateCoordAndStatus(taskId, nextCoord, 2); - break; - } - if (this.isMessageReceived()) { - messageReceived = false; - break; // 跳出循环 - } - } - if (breakFirst){ - break; - } - // 检测完毕后获取下一个坐标 - nextCoord = this.getNextCoord(nextCoord, 0); - this.updateCoordAndStatus(taskId, nextCoord, 1); - this.sendMessageToClient(nextCoord, taskId); - if ("finish".equals(nextCoord)) { - this.updateCoordAndStatus(taskId, nextCoord, 3); - } - } + this.continueCheck(taskId, order); } }else if (order == 1) { if (startIndex == null || "".equals(startIndex)) { - // 指定初始化index为6-1 - String nextCoord = "6-1"; - this.updateCoordAndStatus(taskId, nextCoord, 1); - // 开始检测 - this.sendMessageToClient(nextCoord, taskId); - // 如果中间终止 则退出返回 与messagehandler 处理逻辑相同 外部控制while的终止 - // 下一次进入后则进入其他流程 - while (!"finish".equals(nextCoord)) { - // 需要一个中断的接口, 中途暂停本次流程 - // 用messagehandler处理检测完毕的消息 从而启动以下流程 - boolean breakFirst = false; - while (true) { - if (this.breakOff) { - breakFirst = true; - this.updateCoordAndStatus(taskId, nextCoord, 2); - break; - } - if (this.isMessageReceived()) { - messageReceived = false; - break; // 跳出循环 - } - } - if (breakFirst) { - break; - } - // 检测完毕后获取下一个坐标 - nextCoord = this.getNextCoord(nextCoord, 1); - this.updateCoordAndStatus(taskId, nextCoord, 1); - this.sendMessageToClient(nextCoord, taskId); - if ("finish".equals(nextCoord)) { - this.updateCoordAndStatus(taskId, nextCoord, 3); - } - } + this.initCheck("6-1", order, taskId); }else { - // 被中断过,需要从中断的currentCoord坐标继续 - // 首先需要读取数据库,获得当前taskId的信息 - Task task = taskService.getById(taskId); - String nextCoord = task.getCurrentCoord(); - this.sendMessageToClient(nextCoord, taskId); - // 得到的currentCoord已经检测过,直接进入下一流程 - while (!"finish".equals(nextCoord)) { - // 需要一个中断的接口, 中途暂停本次流程 - // 用messagehandler处理检测完毕的消息 从而启动以下流程 - boolean breakFirst = false; - while (true) { - if (this.breakOff) { - breakFirst = true; - this.updateCoordAndStatus(taskId, nextCoord, 2); - break; - } - if (this.isMessageReceived()) { - messageReceived = false; - break; // 跳出循环 - } - } - if (breakFirst){ - break; - } - // 检测完毕后获取下一个坐标 - nextCoord = this.getNextCoord(nextCoord, 1); - this.updateCoordAndStatus(taskId, nextCoord, 1); - this.sendMessageToClient(nextCoord, taskId); - if ("finish".equals(nextCoord)) { - this.updateCoordAndStatus(taskId, nextCoord, 3); - } - } + this.continueCheck(taskId, order); } } return null; diff --git a/src/main/java/com/iflytop/nuclear/websocket/WebSocketServer.java b/src/main/java/com/iflytop/nuclear/websocket/WebSocketServer.java index 1885ffb..c79be53 100644 --- a/src/main/java/com/iflytop/nuclear/websocket/WebSocketServer.java +++ b/src/main/java/com/iflytop/nuclear/websocket/WebSocketServer.java @@ -109,9 +109,9 @@ public class WebSocketServer { JSONObject jsonObject = JSON.parseObject(message); String command = jsonObject.getString("command"); // 根据command类型,分发给不同的handler和detection - if (!command.isEmpty()) { - messageHandler.dispatcher(command, jsonObject, session); - } + // if (!command.isEmpty()) { + // messageHandler.dispatcher(command, jsonObject, session); + // } } catch (Exception e) { JSONObject msg = new JSONObject(); msg.put("message", "传输数据必须为包含command字段的JSON格式");