Browse Source

测试路径

main
maochaoying 2 years ago
parent
commit
aa88ed7c95
  1. 25
      src/main/java/com/iflytop/nuclear/config/WebSocketConfig.java
  2. 2
      src/main/java/com/iflytop/nuclear/controller/CheckController.java
  3. 2
      src/main/java/com/iflytop/nuclear/controller/TaskController.java
  4. 24
      src/main/java/com/iflytop/nuclear/controller/TestController.java
  5. 3
      src/main/java/com/iflytop/nuclear/handler/MessageHandler.java
  6. 2
      src/main/java/com/iflytop/nuclear/service/CheckService.java
  7. 47
      src/main/java/com/iflytop/nuclear/service/impl/CheckServiceImpl.java
  8. 5
      src/main/java/com/iflytop/nuclear/websocket/SocketClient.java
  9. 20
      src/main/java/com/iflytop/nuclear/websocket/WebSocketServer.java

25
src/main/java/com/iflytop/nuclear/config/WebSocketConfig.java

@ -1,17 +1,26 @@
package com.iflytop.nuclear.config; package com.iflytop.nuclear.config;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.iflytop.nuclear.handler.MessageHandler;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.java_websocket.client.WebSocketClient; import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft_6455; import org.java_websocket.drafts.Draft_6455;
import org.java_websocket.handshake.ServerHandshake; import org.java_websocket.handshake.ServerHandshake;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.net.URI; import java.net.URI;
import java.nio.channels.NotYetConnectedException;
@Component @Component
@Slf4j @Slf4j
public class WebSocketConfig { public class WebSocketConfig {
@Autowired
MessageHandler messageHandler;
@Bean @Bean
public WebSocketClient webSocketClient() { public WebSocketClient webSocketClient() {
try { try {
@ -25,6 +34,21 @@ public class WebSocketConfig {
public void onMessage(String message) { public void onMessage(String message) {
log.info("[websocket] 收到消息={}", message); log.info("[websocket] 收到消息={}", message);
// 在这里重写对消息的处理分发 // 在这里重写对消息的处理分发
if (!StringUtils.isEmpty(message)) {
try {
JSONObject jsonObject = JSON.parseObject(message);
String command = jsonObject.getString("command");
// 根据command类型分发给不同的handler和detection
if (!command.isEmpty()) {
messageHandler.dispatcher(command, jsonObject);
}
} catch (Exception e) {
JSONObject msg = new JSONObject();
msg.put("message", "传输数据必须为包含command字段的JSON格式");
this.send(msg.toString());
e.printStackTrace();
}
}
} }
@Override @Override
@ -36,6 +60,7 @@ public class WebSocketConfig {
public void onError(Exception ex) { public void onError(Exception ex) {
log.info("[websocket] 连接错误={}", ex.getMessage()); log.info("[websocket] 连接错误={}", ex.getMessage());
} }
}; };
webSocketClient.connect(); webSocketClient.connect();
return webSocketClient; return webSocketClient;

2
src/main/java/com/iflytop/nuclear/controller/CheckController.java

@ -39,7 +39,7 @@ public class CheckController {
} }
@GetMapping("/stop/{id}") @GetMapping("/stop/{id}")
public ResponseData breakOffAutoProcess(@PathVariable(name = "id") int taskId) {
public ResponseData breakOffAutoProcess(@PathVariable(name = "id") int taskId) throws IOException {
checkService.breakOffByTaskId(taskId); checkService.breakOffByTaskId(taskId);
return ResponseData.success(); return ResponseData.success();
} }

2
src/main/java/com/iflytop/nuclear/controller/TaskController.java

@ -87,7 +87,7 @@ public class TaskController {
nuclearCoreConfigQueryWrapper.eq("task_id", id); nuclearCoreConfigQueryWrapper.eq("task_id", id);
boolean remove = nuclearCoreConfigService.remove(nuclearCoreConfigQueryWrapper); boolean remove = nuclearCoreConfigService.remove(nuclearCoreConfigQueryWrapper);
// 将当前任务状态修改为0 // 将当前任务状态修改为0
checkServiceImpl.updateCoordAndStatus(id, null, 0, false, false);
checkServiceImpl.updateCoordAndStatus(id, null, 0, false, false, null);
JSONObject jo = new JSONObject(); JSONObject jo = new JSONObject();
jo.put("result", remove); jo.put("result", remove);
return ResponseData.success(jo); return ResponseData.success(jo);

24
src/main/java/com/iflytop/nuclear/controller/TestController.java

@ -1,24 +0,0 @@
package com.iflytop.nuclear.controller;
/**
* @author cool
* @date 2023/7/6 15:31
*/
import com.iflytop.nuclear.websocket.SocketClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/websocket")
public class TestController {
@Autowired
private SocketClient webScoketClient;
@GetMapping("/sendMessage")
public void sendMessage(){
webScoketClient.groupSending("123");
}
}

3
src/main/java/com/iflytop/nuclear/handler/MessageHandler.java

@ -30,9 +30,8 @@ public class MessageHandler {
* dispatcher分发器 * dispatcher分发器
* @param command 硬件端传来的commad字段 * @param command 硬件端传来的commad字段
* @param data 整体包数据 * @param data 整体包数据
* @param session websocket 连接会话
*/ */
public void dispatcher(String command, JSONObject data, Session session) throws IOException {
public void dispatcher(String command, JSONObject data) throws IOException {
switch (command){ switch (command){
case "detection_completed": case "detection_completed":
// 需要把当前的检测结果进行保存 // 需要把当前的检测结果进行保存

2
src/main/java/com/iflytop/nuclear/service/CheckService.java

@ -16,5 +16,5 @@ public interface CheckService {
CheckResult autoCheck(int order, String startIndex, int taskId) throws IOException; CheckResult autoCheck(int order, String startIndex, int taskId) throws IOException;
void breakOffByTaskId(int taskId);
void breakOffByTaskId(int taskId) throws IOException;
} }

47
src/main/java/com/iflytop/nuclear/service/impl/CheckServiceImpl.java

@ -1,7 +1,6 @@
package com.iflytop.nuclear.service.impl; package com.iflytop.nuclear.service.impl;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.iflytop.nuclear.entity.CheckInfo; import com.iflytop.nuclear.entity.CheckInfo;
@ -10,6 +9,7 @@ import com.iflytop.nuclear.entity.DetectionMessage;
import com.iflytop.nuclear.model.Task; import com.iflytop.nuclear.model.Task;
import com.iflytop.nuclear.service.CheckService; import com.iflytop.nuclear.service.CheckService;
import com.iflytop.nuclear.service.TaskService; import com.iflytop.nuclear.service.TaskService;
import com.iflytop.nuclear.websocket.SocketClient;
import com.iflytop.nuclear.websocket.WebSocketServer; import com.iflytop.nuclear.websocket.WebSocketServer;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -28,13 +28,13 @@ public class CheckServiceImpl implements CheckService {
TaskService taskService; TaskService taskService;
@Autowired @Autowired
WebSocketServer webSocketServer; WebSocketServer webSocketServer;
@Autowired
SocketClient socketClient;
private static boolean messageReceived = false; private static boolean messageReceived = false;
private static boolean breakOff = false; private static boolean breakOff = false;
private static int currentTaskId = 0;
// !!! 记录规则路径上的路过但是不检测的坐标 进行排除即可 // !!! 记录规则路径上的路过但是不检测的坐标 进行排除即可
public void changeMessageReceived(boolean flag) { public void changeMessageReceived(boolean flag) {
@ -56,7 +56,7 @@ public class CheckServiceImpl implements CheckService {
return checkInfo; return checkInfo;
} }
public boolean updateCoordAndStatus(int taskId, String currentCoord, int status, boolean updateStartTime, boolean updateEndTime) throws IOException {
public boolean updateCoordAndStatus(int taskId, String currentCoord, int status, boolean updateStartTime, boolean updateEndTime, Integer order) throws IOException {
UpdateWrapper<Task> taskUpdateWrapper = new UpdateWrapper<>(); UpdateWrapper<Task> taskUpdateWrapper = new UpdateWrapper<>();
taskUpdateWrapper.eq("id",taskId); taskUpdateWrapper.eq("id",taskId);
Task task = new Task(); Task task = new Task();
@ -73,6 +73,9 @@ public class CheckServiceImpl implements CheckService {
task.setEndTime(new Date()); task.setEndTime(new Date());
} }
task.setStatus(status); task.setStatus(status);
if (order != null){
task.setCheckOrder(order);
}
boolean update = taskService.update(task, taskUpdateWrapper); boolean update = taskService.update(task, taskUpdateWrapper);
this.sendMessageToPage(); this.sendMessageToPage();
return update; return update;
@ -83,12 +86,12 @@ public class CheckServiceImpl implements CheckService {
} }
public void sendMessageToDevice(String nextCoord, int taskId) throws IOException { 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());
DetectionMessage startMessage = DetectionMessage.builder()
.messageId(IdUtil.randomUUID())
.coord(nextCoord)
.taskId(taskId)
.build();
socketClient.sendMessage(startMessage.toString());
} }
public void sendMessageToPage() throws IOException { public void sendMessageToPage() throws IOException {
@ -98,7 +101,7 @@ public class CheckServiceImpl implements CheckService {
public String initCheck(String initNextCoord,int order, int taskId) throws IOException { public String initCheck(String initNextCoord,int order, int taskId) throws IOException {
// 指定初始化index为1-6 // 指定初始化index为1-6
String nextCoord = initNextCoord; String nextCoord = initNextCoord;
this.updateCoordAndStatus(taskId, nextCoord, 1, true, false);
this.updateCoordAndStatus(taskId, nextCoord, 1, true, false, order);
// 开始检测 // 开始检测
this.sendMessageToDevice(nextCoord, taskId); this.sendMessageToDevice(nextCoord, taskId);
// 如果中间终止 则退出返回 与messagehandler 处理逻辑相同 外部控制while的终止 // 如果中间终止 则退出返回 与messagehandler 处理逻辑相同 外部控制while的终止
@ -110,7 +113,7 @@ public class CheckServiceImpl implements CheckService {
while (true) { while (true) {
if (this.breakOff) { if (this.breakOff) {
breakFirst = true; breakFirst = true;
this.updateCoordAndStatus(taskId, nextCoord, 2, false, false);
this.updateCoordAndStatus(taskId, nextCoord, 2, false, false, order);
break; break;
} }
if (this.isMessageReceived()) { if (this.isMessageReceived()) {
@ -123,10 +126,10 @@ public class CheckServiceImpl implements CheckService {
} }
// 检测完毕后获取下一个坐标 // 检测完毕后获取下一个坐标
nextCoord = this.getNextCoord(nextCoord, order); nextCoord = this.getNextCoord(nextCoord, order);
this.updateCoordAndStatus(taskId, nextCoord, 1, false, false);
this.updateCoordAndStatus(taskId, nextCoord, 1, false, false, order);
this.sendMessageToDevice(nextCoord, taskId); this.sendMessageToDevice(nextCoord, taskId);
if ("finish".equals(nextCoord)) { if ("finish".equals(nextCoord)) {
this.updateCoordAndStatus(taskId, nextCoord, 3, false, true);
this.updateCoordAndStatus(taskId, nextCoord, 3, false, true, order);
} }
} }
return nextCoord; return nextCoord;
@ -146,7 +149,7 @@ public class CheckServiceImpl implements CheckService {
while (true) { while (true) {
if (this.breakOff) { if (this.breakOff) {
breakFirst = true; breakFirst = true;
this.updateCoordAndStatus(taskId, nextCoord, 2, false, false);
this.updateCoordAndStatus(taskId, nextCoord, 2, false, false, order);
break; break;
} }
if (this.isMessageReceived()) { if (this.isMessageReceived()) {
@ -159,10 +162,10 @@ public class CheckServiceImpl implements CheckService {
} }
// 检测完毕后获取下一个坐标 // 检测完毕后获取下一个坐标
nextCoord = this.getNextCoord(nextCoord, order); nextCoord = this.getNextCoord(nextCoord, order);
this.updateCoordAndStatus(taskId, nextCoord, 1, false, false);
this.updateCoordAndStatus(taskId, nextCoord, 1, false, false, order);
this.sendMessageToDevice(nextCoord, taskId); this.sendMessageToDevice(nextCoord, taskId);
if ("finish".equals(nextCoord)) { if ("finish".equals(nextCoord)) {
this.updateCoordAndStatus(taskId, nextCoord, 3, false, true);
this.updateCoordAndStatus(taskId, nextCoord, 3, false, true, order);
} }
} }
return nextCoord; return nextCoord;
@ -180,8 +183,7 @@ public class CheckServiceImpl implements CheckService {
return checkResult; return checkResult;
} }
this.changeBreakOff(false); this.changeBreakOff(false);
this.updateCoordAndStatus(taskId, null, 1, false, false);
currentTaskId = taskId;
this.updateCoordAndStatus(taskId, null, 1, false, false, order);
String nextCoord = ""; String nextCoord = "";
if (order == 0) { if (order == 0) {
if (startIndex == null || "".equals(startIndex)) { if (startIndex == null || "".equals(startIndex)) {
@ -202,10 +204,9 @@ public class CheckServiceImpl implements CheckService {
} }
@Override @Override
public void breakOffByTaskId(int taskId) {
if (taskId == currentTaskId) {
this.changeBreakOff(true);
}
public void breakOffByTaskId(int taskId) throws IOException {
this.updateCoordAndStatus(taskId, null, 2,false, false, null);
this.changeBreakOff(true);
} }
/** /**

5
src/main/java/com/iflytop/nuclear/websocket/SocketClient.java

@ -9,7 +9,8 @@ public class SocketClient {
@Autowired @Autowired
private WebSocketClient webSocketClient; private WebSocketClient webSocketClient;
public void groupSending(String message) {
webSocketClient.send(message+"---6666");
public void sendMessage(String message) {
webSocketClient.send(message);
} }
} }

20
src/main/java/com/iflytop/nuclear/websocket/WebSocketServer.java

@ -30,9 +30,6 @@ import java.util.concurrent.atomic.AtomicInteger;
@Slf4j @Slf4j
public class WebSocketServer { public class WebSocketServer {
@Autowired
MessageHandler messageHandler;
/** /**
* 仅允许某个userid进行连接, 指定该机器的macid * 仅允许某个userid进行连接, 指定该机器的macid
*/ */
@ -103,22 +100,7 @@ public class WebSocketServer {
*/ */
@OnMessage @OnMessage
public void onMessage(String message, Session session) throws IOException { public void onMessage(String message, Session session) throws IOException {
log.info("用户消息:" + userId + ",报文:" + message);
if (!StringUtils.isEmpty(message)) {
try {
// JSONObject jsonObject = JSON.parseObject(message);
// String command = jsonObject.getString("command");
// 根据command类型分发给不同的handler和detection
// if (!command.isEmpty()) {
// messageHandler.dispatcher(command, jsonObject, session);
// }
} catch (Exception e) {
JSONObject msg = new JSONObject();
msg.put("message", "传输数据必须为包含command字段的JSON格式");
session.getBasicRemote().sendText(msg.toString());
e.printStackTrace();
}
}
// 不对用户消息做处理仅仅用来推送消息给客户端
} }
/** /**

Loading…
Cancel
Save