diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 37202e8..9e2bc4a 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -70,6 +70,10 @@
casic-job-quartz
${extension.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 37202e8..9e2bc4a 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -70,6 +70,10 @@
casic-job-quartz
${extension.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
new file mode 100644
index 0000000..85cb3d8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
@@ -0,0 +1,93 @@
+package com.casic.missiles.common;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/websocket/{userId}")
+//此注解相当于设置访问URL
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value = "userId") String userId) {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ System.out.println("【websocket消息】收到客户端消息:" + message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for (WebSocket webSocket : webSockets) {
+// System.out.println("【websocket消息】广播消息:"+message);
+ try {
+ synchronized (webSocket.session) {
+ webSocket.session.getBasicRemote().sendText(message);
+// webSocket.session.getAsyncRemote().sendText(message);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ /**
+ * 发送列表消息
+ *
+ * @param userIds 用户集合
+ * @param message 消息体
+ */
+ public void sendListMessage(List userIds, String message) {
+ System.out.println("【websocket消息】列表消息:" + message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ System.out.println("【websocket消息】单点消息:" + message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 37202e8..9e2bc4a 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -70,6 +70,10 @@
casic-job-quartz
${extension.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
new file mode 100644
index 0000000..85cb3d8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
@@ -0,0 +1,93 @@
+package com.casic.missiles.common;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/websocket/{userId}")
+//此注解相当于设置访问URL
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value = "userId") String userId) {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ System.out.println("【websocket消息】收到客户端消息:" + message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for (WebSocket webSocket : webSockets) {
+// System.out.println("【websocket消息】广播消息:"+message);
+ try {
+ synchronized (webSocket.session) {
+ webSocket.session.getBasicRemote().sendText(message);
+// webSocket.session.getAsyncRemote().sendText(message);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ /**
+ * 发送列表消息
+ *
+ * @param userIds 用户集合
+ * @param message 消息体
+ */
+ public void sendListMessage(List userIds, String message) {
+ System.out.println("【websocket消息】列表消息:" + message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ System.out.println("【websocket消息】单点消息:" + message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
index 77ed723..c88d4e1 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
@@ -54,15 +54,6 @@
return ResponseDataDTO.success(super.packForBT(page));
}
- /**
- * 机器人速度设置
- */
- @ApiOperation(value = "机器人设置", hidden = true)
- @PostMapping(value = "/setConfig")
- public ResponseDataDTO setConfig(@RequestBody RobotInfo robotInfo) {
- robotInfoService.updateSpeed(robotInfo);
- return ResponseDataDTO.success();
- }
/**
* 新增机器人信息管理
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 37202e8..9e2bc4a 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -70,6 +70,10 @@
casic-job-quartz
${extension.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
new file mode 100644
index 0000000..85cb3d8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
@@ -0,0 +1,93 @@
+package com.casic.missiles.common;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/websocket/{userId}")
+//此注解相当于设置访问URL
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value = "userId") String userId) {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ System.out.println("【websocket消息】收到客户端消息:" + message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for (WebSocket webSocket : webSockets) {
+// System.out.println("【websocket消息】广播消息:"+message);
+ try {
+ synchronized (webSocket.session) {
+ webSocket.session.getBasicRemote().sendText(message);
+// webSocket.session.getAsyncRemote().sendText(message);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ /**
+ * 发送列表消息
+ *
+ * @param userIds 用户集合
+ * @param message 消息体
+ */
+ public void sendListMessage(List userIds, String message) {
+ System.out.println("【websocket消息】列表消息:" + message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ System.out.println("【websocket消息】单点消息:" + message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
index 77ed723..c88d4e1 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
@@ -54,15 +54,6 @@
return ResponseDataDTO.success(super.packForBT(page));
}
- /**
- * 机器人速度设置
- */
- @ApiOperation(value = "机器人设置", hidden = true)
- @PostMapping(value = "/setConfig")
- public ResponseDataDTO setConfig(@RequestBody RobotInfo robotInfo) {
- robotInfoService.updateSpeed(robotInfo);
- return ResponseDataDTO.success();
- }
/**
* 新增机器人信息管理
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
index 6e959bf..5ddb98f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
@@ -4,6 +4,7 @@
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
+import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO;
import com.casic.missiles.modular.robot.model.RobotInfo;
import com.casic.missiles.modular.robot.model.RouteInfo;
import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums;
@@ -87,6 +88,16 @@
}
/**
+ * 机器人速度设置
+ */
+ @ApiOperation(value = "机器人设置")
+ @PostMapping(value = "/setConfig")
+ public ResponseDataDTO setConfig(@RequestBody RobotInfoSetDTO robotInfo) {
+ robotInfoService.updateSpeed(robotInfo);
+ return ResponseDataDTO.success();
+ }
+
+ /**
* 机器人循迹路线读取
*
* @param request 循迹路线读取
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 37202e8..9e2bc4a 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -70,6 +70,10 @@
casic-job-quartz
${extension.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
new file mode 100644
index 0000000..85cb3d8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
@@ -0,0 +1,93 @@
+package com.casic.missiles.common;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/websocket/{userId}")
+//此注解相当于设置访问URL
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value = "userId") String userId) {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ System.out.println("【websocket消息】收到客户端消息:" + message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for (WebSocket webSocket : webSockets) {
+// System.out.println("【websocket消息】广播消息:"+message);
+ try {
+ synchronized (webSocket.session) {
+ webSocket.session.getBasicRemote().sendText(message);
+// webSocket.session.getAsyncRemote().sendText(message);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ /**
+ * 发送列表消息
+ *
+ * @param userIds 用户集合
+ * @param message 消息体
+ */
+ public void sendListMessage(List userIds, String message) {
+ System.out.println("【websocket消息】列表消息:" + message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ System.out.println("【websocket消息】单点消息:" + message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
index 77ed723..c88d4e1 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
@@ -54,15 +54,6 @@
return ResponseDataDTO.success(super.packForBT(page));
}
- /**
- * 机器人速度设置
- */
- @ApiOperation(value = "机器人设置", hidden = true)
- @PostMapping(value = "/setConfig")
- public ResponseDataDTO setConfig(@RequestBody RobotInfo robotInfo) {
- robotInfoService.updateSpeed(robotInfo);
- return ResponseDataDTO.success();
- }
/**
* 新增机器人信息管理
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
index 6e959bf..5ddb98f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
@@ -4,6 +4,7 @@
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
+import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO;
import com.casic.missiles.modular.robot.model.RobotInfo;
import com.casic.missiles.modular.robot.model.RouteInfo;
import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums;
@@ -87,6 +88,16 @@
}
/**
+ * 机器人速度设置
+ */
+ @ApiOperation(value = "机器人设置")
+ @PostMapping(value = "/setConfig")
+ public ResponseDataDTO setConfig(@RequestBody RobotInfoSetDTO robotInfo) {
+ robotInfoService.updateSpeed(robotInfo);
+ return ResponseDataDTO.success();
+ }
+
+ /**
* 机器人循迹路线读取
*
* @param request 循迹路线读取
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
index ab6659c..27b6aca 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
@@ -4,25 +4,24 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
-import org.springframework.web.bind.annotation.*;
+import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
+import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
+import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import com.casic.missiles.core.page.PageInfoBT;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
-import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
-import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
-import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
-
/**
* 机器人轨迹信息Controller
*
* @author lwh
* @date 2023-10-30
*/
-@Api(tags = "机器人轨迹信息")
+@Api(tags = "机器人历史轨迹")
@RestController
@RequestMapping("/robot/trajectoryInfo")
public class RobotTrajectoryInfoController extends BaseController {
@@ -36,7 +35,7 @@
/**
* 机器人轨迹信息列表
*/
- @ApiOperation("列表查询")
+ @ApiOperation(value = "列表查询")
@GetMapping(value = "/list")
public ResponseDataDTO> list(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
QueryWrapper query = robotTrajectoryInfoVO.genQuery();
@@ -46,7 +45,7 @@
/**
* 机器人轨迹信息分页列表
*/
- @ApiOperation("分页查询")
+ @ApiOperation(value = "分页查询", hidden = true)
@GetMapping(value = "/listPage")
public ResponseDataDTO> listPage(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
Page page = PageFactory.defaultPage();
@@ -58,37 +57,37 @@
/**
* 新增机器人轨迹信息
*/
- @ApiOperation("新增接口")
+ @ApiOperation(value = "新增接口", hidden = true)
@PostMapping(value = "/add")
- public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.save(robotTrajectoryInfo);
+ public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
+ robotTrajectoryInfoService.save(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 修改机器人轨迹信息
*/
- @ApiOperation("修改接口")
+ @ApiOperation(value = "修改接口", hidden = true)
@PostMapping(value = "/update")
public ResponseDataDTO update(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
+ robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 删除机器人轨迹信息
*/
- @ApiOperation("删除接口")
+ @ApiOperation(value = "删除接口", hidden = true)
@GetMapping(value = "/delete")
public ResponseDataDTO delete(String id) {
- robotTrajectoryInfoService.removeById(id);
+ robotTrajectoryInfoService.removeById(id);
return ResponseDataDTO.success();
}
/**
* 机器人轨迹信息详情
*/
- @ApiOperation("详情查询")
+ @ApiOperation(value = "详情查询", hidden = true)
@GetMapping(value = "/detail")
public ResponseDataDTO detail(String id) {
return ResponseDataDTO.success(robotTrajectoryInfoService.getById(id));
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 37202e8..9e2bc4a 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -70,6 +70,10 @@
casic-job-quartz
${extension.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
new file mode 100644
index 0000000..85cb3d8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
@@ -0,0 +1,93 @@
+package com.casic.missiles.common;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/websocket/{userId}")
+//此注解相当于设置访问URL
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value = "userId") String userId) {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ System.out.println("【websocket消息】收到客户端消息:" + message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for (WebSocket webSocket : webSockets) {
+// System.out.println("【websocket消息】广播消息:"+message);
+ try {
+ synchronized (webSocket.session) {
+ webSocket.session.getBasicRemote().sendText(message);
+// webSocket.session.getAsyncRemote().sendText(message);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ /**
+ * 发送列表消息
+ *
+ * @param userIds 用户集合
+ * @param message 消息体
+ */
+ public void sendListMessage(List userIds, String message) {
+ System.out.println("【websocket消息】列表消息:" + message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ System.out.println("【websocket消息】单点消息:" + message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
index 77ed723..c88d4e1 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
@@ -54,15 +54,6 @@
return ResponseDataDTO.success(super.packForBT(page));
}
- /**
- * 机器人速度设置
- */
- @ApiOperation(value = "机器人设置", hidden = true)
- @PostMapping(value = "/setConfig")
- public ResponseDataDTO setConfig(@RequestBody RobotInfo robotInfo) {
- robotInfoService.updateSpeed(robotInfo);
- return ResponseDataDTO.success();
- }
/**
* 新增机器人信息管理
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
index 6e959bf..5ddb98f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
@@ -4,6 +4,7 @@
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
+import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO;
import com.casic.missiles.modular.robot.model.RobotInfo;
import com.casic.missiles.modular.robot.model.RouteInfo;
import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums;
@@ -87,6 +88,16 @@
}
/**
+ * 机器人速度设置
+ */
+ @ApiOperation(value = "机器人设置")
+ @PostMapping(value = "/setConfig")
+ public ResponseDataDTO setConfig(@RequestBody RobotInfoSetDTO robotInfo) {
+ robotInfoService.updateSpeed(robotInfo);
+ return ResponseDataDTO.success();
+ }
+
+ /**
* 机器人循迹路线读取
*
* @param request 循迹路线读取
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
index ab6659c..27b6aca 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
@@ -4,25 +4,24 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
-import org.springframework.web.bind.annotation.*;
+import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
+import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
+import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import com.casic.missiles.core.page.PageInfoBT;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
-import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
-import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
-import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
-
/**
* 机器人轨迹信息Controller
*
* @author lwh
* @date 2023-10-30
*/
-@Api(tags = "机器人轨迹信息")
+@Api(tags = "机器人历史轨迹")
@RestController
@RequestMapping("/robot/trajectoryInfo")
public class RobotTrajectoryInfoController extends BaseController {
@@ -36,7 +35,7 @@
/**
* 机器人轨迹信息列表
*/
- @ApiOperation("列表查询")
+ @ApiOperation(value = "列表查询")
@GetMapping(value = "/list")
public ResponseDataDTO> list(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
QueryWrapper query = robotTrajectoryInfoVO.genQuery();
@@ -46,7 +45,7 @@
/**
* 机器人轨迹信息分页列表
*/
- @ApiOperation("分页查询")
+ @ApiOperation(value = "分页查询", hidden = true)
@GetMapping(value = "/listPage")
public ResponseDataDTO> listPage(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
Page page = PageFactory.defaultPage();
@@ -58,37 +57,37 @@
/**
* 新增机器人轨迹信息
*/
- @ApiOperation("新增接口")
+ @ApiOperation(value = "新增接口", hidden = true)
@PostMapping(value = "/add")
- public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.save(robotTrajectoryInfo);
+ public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
+ robotTrajectoryInfoService.save(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 修改机器人轨迹信息
*/
- @ApiOperation("修改接口")
+ @ApiOperation(value = "修改接口", hidden = true)
@PostMapping(value = "/update")
public ResponseDataDTO update(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
+ robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 删除机器人轨迹信息
*/
- @ApiOperation("删除接口")
+ @ApiOperation(value = "删除接口", hidden = true)
@GetMapping(value = "/delete")
public ResponseDataDTO delete(String id) {
- robotTrajectoryInfoService.removeById(id);
+ robotTrajectoryInfoService.removeById(id);
return ResponseDataDTO.success();
}
/**
* 机器人轨迹信息详情
*/
- @ApiOperation("详情查询")
+ @ApiOperation(value = "详情查询", hidden = true)
@GetMapping(value = "/detail")
public ResponseDataDTO detail(String id) {
return ResponseDataDTO.success(robotTrajectoryInfoService.getById(id));
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
new file mode 100644
index 0000000..ab22e20
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
@@ -0,0 +1,26 @@
+package com.casic.missiles.modular.robot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class RobotInfoSetDTO {
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "机器人ID", dataType = "Long")
+ private Long id;
+ /**
+ * 设置线速度
+ */
+ @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal")
+ private BigDecimal confV;
+
+ /**
+ * 设置角速度
+ */
+ @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal")
+ private BigDecimal confW;
+}
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 37202e8..9e2bc4a 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -70,6 +70,10 @@
casic-job-quartz
${extension.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
new file mode 100644
index 0000000..85cb3d8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
@@ -0,0 +1,93 @@
+package com.casic.missiles.common;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/websocket/{userId}")
+//此注解相当于设置访问URL
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value = "userId") String userId) {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ System.out.println("【websocket消息】收到客户端消息:" + message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for (WebSocket webSocket : webSockets) {
+// System.out.println("【websocket消息】广播消息:"+message);
+ try {
+ synchronized (webSocket.session) {
+ webSocket.session.getBasicRemote().sendText(message);
+// webSocket.session.getAsyncRemote().sendText(message);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ /**
+ * 发送列表消息
+ *
+ * @param userIds 用户集合
+ * @param message 消息体
+ */
+ public void sendListMessage(List userIds, String message) {
+ System.out.println("【websocket消息】列表消息:" + message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ System.out.println("【websocket消息】单点消息:" + message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
index 77ed723..c88d4e1 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
@@ -54,15 +54,6 @@
return ResponseDataDTO.success(super.packForBT(page));
}
- /**
- * 机器人速度设置
- */
- @ApiOperation(value = "机器人设置", hidden = true)
- @PostMapping(value = "/setConfig")
- public ResponseDataDTO setConfig(@RequestBody RobotInfo robotInfo) {
- robotInfoService.updateSpeed(robotInfo);
- return ResponseDataDTO.success();
- }
/**
* 新增机器人信息管理
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
index 6e959bf..5ddb98f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
@@ -4,6 +4,7 @@
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
+import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO;
import com.casic.missiles.modular.robot.model.RobotInfo;
import com.casic.missiles.modular.robot.model.RouteInfo;
import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums;
@@ -87,6 +88,16 @@
}
/**
+ * 机器人速度设置
+ */
+ @ApiOperation(value = "机器人设置")
+ @PostMapping(value = "/setConfig")
+ public ResponseDataDTO setConfig(@RequestBody RobotInfoSetDTO robotInfo) {
+ robotInfoService.updateSpeed(robotInfo);
+ return ResponseDataDTO.success();
+ }
+
+ /**
* 机器人循迹路线读取
*
* @param request 循迹路线读取
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
index ab6659c..27b6aca 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
@@ -4,25 +4,24 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
-import org.springframework.web.bind.annotation.*;
+import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
+import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
+import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import com.casic.missiles.core.page.PageInfoBT;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
-import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
-import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
-import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
-
/**
* 机器人轨迹信息Controller
*
* @author lwh
* @date 2023-10-30
*/
-@Api(tags = "机器人轨迹信息")
+@Api(tags = "机器人历史轨迹")
@RestController
@RequestMapping("/robot/trajectoryInfo")
public class RobotTrajectoryInfoController extends BaseController {
@@ -36,7 +35,7 @@
/**
* 机器人轨迹信息列表
*/
- @ApiOperation("列表查询")
+ @ApiOperation(value = "列表查询")
@GetMapping(value = "/list")
public ResponseDataDTO> list(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
QueryWrapper query = robotTrajectoryInfoVO.genQuery();
@@ -46,7 +45,7 @@
/**
* 机器人轨迹信息分页列表
*/
- @ApiOperation("分页查询")
+ @ApiOperation(value = "分页查询", hidden = true)
@GetMapping(value = "/listPage")
public ResponseDataDTO> listPage(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
Page page = PageFactory.defaultPage();
@@ -58,37 +57,37 @@
/**
* 新增机器人轨迹信息
*/
- @ApiOperation("新增接口")
+ @ApiOperation(value = "新增接口", hidden = true)
@PostMapping(value = "/add")
- public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.save(robotTrajectoryInfo);
+ public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
+ robotTrajectoryInfoService.save(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 修改机器人轨迹信息
*/
- @ApiOperation("修改接口")
+ @ApiOperation(value = "修改接口", hidden = true)
@PostMapping(value = "/update")
public ResponseDataDTO update(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
+ robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 删除机器人轨迹信息
*/
- @ApiOperation("删除接口")
+ @ApiOperation(value = "删除接口", hidden = true)
@GetMapping(value = "/delete")
public ResponseDataDTO delete(String id) {
- robotTrajectoryInfoService.removeById(id);
+ robotTrajectoryInfoService.removeById(id);
return ResponseDataDTO.success();
}
/**
* 机器人轨迹信息详情
*/
- @ApiOperation("详情查询")
+ @ApiOperation(value = "详情查询", hidden = true)
@GetMapping(value = "/detail")
public ResponseDataDTO detail(String id) {
return ResponseDataDTO.success(robotTrajectoryInfoService.getById(id));
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
new file mode 100644
index 0000000..ab22e20
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
@@ -0,0 +1,26 @@
+package com.casic.missiles.modular.robot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class RobotInfoSetDTO {
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "机器人ID", dataType = "Long")
+ private Long id;
+ /**
+ * 设置线速度
+ */
+ @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal")
+ private BigDecimal confV;
+
+ /**
+ * 设置角速度
+ */
+ @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal")
+ private BigDecimal confW;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
index 2d8d705..191dd22 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
@@ -244,6 +244,14 @@
@ApiModelProperty(value = "当前任务信息ID", dataType = "Long")
@TableField("curr_task_id")
private Long currTaskId;
+
+ @ApiModelProperty(value = "电量", dataType = "Integer")
+ @TableField("electricity_quantity")
+ private Integer electricityQuantity;
+
+ @ApiModelProperty(value = "电压", dataType = "Integer")
+ private BigDecimal voltage;
+
@Override
public String toString() {
return "RobotStatusInfo{"
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 37202e8..9e2bc4a 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -70,6 +70,10 @@
casic-job-quartz
${extension.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
new file mode 100644
index 0000000..85cb3d8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
@@ -0,0 +1,93 @@
+package com.casic.missiles.common;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/websocket/{userId}")
+//此注解相当于设置访问URL
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value = "userId") String userId) {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ System.out.println("【websocket消息】收到客户端消息:" + message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for (WebSocket webSocket : webSockets) {
+// System.out.println("【websocket消息】广播消息:"+message);
+ try {
+ synchronized (webSocket.session) {
+ webSocket.session.getBasicRemote().sendText(message);
+// webSocket.session.getAsyncRemote().sendText(message);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ /**
+ * 发送列表消息
+ *
+ * @param userIds 用户集合
+ * @param message 消息体
+ */
+ public void sendListMessage(List userIds, String message) {
+ System.out.println("【websocket消息】列表消息:" + message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ System.out.println("【websocket消息】单点消息:" + message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
index 77ed723..c88d4e1 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
@@ -54,15 +54,6 @@
return ResponseDataDTO.success(super.packForBT(page));
}
- /**
- * 机器人速度设置
- */
- @ApiOperation(value = "机器人设置", hidden = true)
- @PostMapping(value = "/setConfig")
- public ResponseDataDTO setConfig(@RequestBody RobotInfo robotInfo) {
- robotInfoService.updateSpeed(robotInfo);
- return ResponseDataDTO.success();
- }
/**
* 新增机器人信息管理
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
index 6e959bf..5ddb98f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
@@ -4,6 +4,7 @@
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
+import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO;
import com.casic.missiles.modular.robot.model.RobotInfo;
import com.casic.missiles.modular.robot.model.RouteInfo;
import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums;
@@ -87,6 +88,16 @@
}
/**
+ * 机器人速度设置
+ */
+ @ApiOperation(value = "机器人设置")
+ @PostMapping(value = "/setConfig")
+ public ResponseDataDTO setConfig(@RequestBody RobotInfoSetDTO robotInfo) {
+ robotInfoService.updateSpeed(robotInfo);
+ return ResponseDataDTO.success();
+ }
+
+ /**
* 机器人循迹路线读取
*
* @param request 循迹路线读取
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
index ab6659c..27b6aca 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
@@ -4,25 +4,24 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
-import org.springframework.web.bind.annotation.*;
+import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
+import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
+import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import com.casic.missiles.core.page.PageInfoBT;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
-import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
-import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
-import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
-
/**
* 机器人轨迹信息Controller
*
* @author lwh
* @date 2023-10-30
*/
-@Api(tags = "机器人轨迹信息")
+@Api(tags = "机器人历史轨迹")
@RestController
@RequestMapping("/robot/trajectoryInfo")
public class RobotTrajectoryInfoController extends BaseController {
@@ -36,7 +35,7 @@
/**
* 机器人轨迹信息列表
*/
- @ApiOperation("列表查询")
+ @ApiOperation(value = "列表查询")
@GetMapping(value = "/list")
public ResponseDataDTO> list(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
QueryWrapper query = robotTrajectoryInfoVO.genQuery();
@@ -46,7 +45,7 @@
/**
* 机器人轨迹信息分页列表
*/
- @ApiOperation("分页查询")
+ @ApiOperation(value = "分页查询", hidden = true)
@GetMapping(value = "/listPage")
public ResponseDataDTO> listPage(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
Page page = PageFactory.defaultPage();
@@ -58,37 +57,37 @@
/**
* 新增机器人轨迹信息
*/
- @ApiOperation("新增接口")
+ @ApiOperation(value = "新增接口", hidden = true)
@PostMapping(value = "/add")
- public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.save(robotTrajectoryInfo);
+ public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
+ robotTrajectoryInfoService.save(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 修改机器人轨迹信息
*/
- @ApiOperation("修改接口")
+ @ApiOperation(value = "修改接口", hidden = true)
@PostMapping(value = "/update")
public ResponseDataDTO update(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
+ robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 删除机器人轨迹信息
*/
- @ApiOperation("删除接口")
+ @ApiOperation(value = "删除接口", hidden = true)
@GetMapping(value = "/delete")
public ResponseDataDTO delete(String id) {
- robotTrajectoryInfoService.removeById(id);
+ robotTrajectoryInfoService.removeById(id);
return ResponseDataDTO.success();
}
/**
* 机器人轨迹信息详情
*/
- @ApiOperation("详情查询")
+ @ApiOperation(value = "详情查询", hidden = true)
@GetMapping(value = "/detail")
public ResponseDataDTO detail(String id) {
return ResponseDataDTO.success(robotTrajectoryInfoService.getById(id));
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
new file mode 100644
index 0000000..ab22e20
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
@@ -0,0 +1,26 @@
+package com.casic.missiles.modular.robot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class RobotInfoSetDTO {
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "机器人ID", dataType = "Long")
+ private Long id;
+ /**
+ * 设置线速度
+ */
+ @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal")
+ private BigDecimal confV;
+
+ /**
+ * 设置角速度
+ */
+ @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal")
+ private BigDecimal confW;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
index 2d8d705..191dd22 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
@@ -244,6 +244,14 @@
@ApiModelProperty(value = "当前任务信息ID", dataType = "Long")
@TableField("curr_task_id")
private Long currTaskId;
+
+ @ApiModelProperty(value = "电量", dataType = "Integer")
+ @TableField("electricity_quantity")
+ private Integer electricityQuantity;
+
+ @ApiModelProperty(value = "电压", dataType = "Integer")
+ private BigDecimal voltage;
+
@Override
public String toString() {
return "RobotStatusInfo{"
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
new file mode 100644
index 0000000..211f0e1
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.robot.opt.handler.msg;
+
+import com.casic.missiles.modular.robot.opt.handler.IBaseMsgHandler;
+import com.casic.missiles.modular.robot.service.IRobotStatusInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 机器人控制响应handler
+ */
+@Slf4j
+@Component("/app_cmd_vel_response")
+public class AppCmdVelMsgHandler implements IBaseMsgHandler {
+ private final IRobotStatusInfoService statusInfoService;
+ private static Map index = new ConcurrentHashMap<>();
+
+ static {
+ index.put("index", 0);
+ }
+
+ public AppCmdVelMsgHandler(IRobotStatusInfoService statusInfoService) {
+ this.statusInfoService = statusInfoService;
+ }
+
+ @Override
+ public void process(String robotId, String topic, MqttMessage message) {
+ statusInfoService.saveSpeed(robotId, message);
+ }
+}
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 37202e8..9e2bc4a 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -70,6 +70,10 @@
casic-job-quartz
${extension.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
new file mode 100644
index 0000000..85cb3d8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
@@ -0,0 +1,93 @@
+package com.casic.missiles.common;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/websocket/{userId}")
+//此注解相当于设置访问URL
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value = "userId") String userId) {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ System.out.println("【websocket消息】收到客户端消息:" + message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for (WebSocket webSocket : webSockets) {
+// System.out.println("【websocket消息】广播消息:"+message);
+ try {
+ synchronized (webSocket.session) {
+ webSocket.session.getBasicRemote().sendText(message);
+// webSocket.session.getAsyncRemote().sendText(message);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ /**
+ * 发送列表消息
+ *
+ * @param userIds 用户集合
+ * @param message 消息体
+ */
+ public void sendListMessage(List userIds, String message) {
+ System.out.println("【websocket消息】列表消息:" + message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ System.out.println("【websocket消息】单点消息:" + message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
index 77ed723..c88d4e1 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
@@ -54,15 +54,6 @@
return ResponseDataDTO.success(super.packForBT(page));
}
- /**
- * 机器人速度设置
- */
- @ApiOperation(value = "机器人设置", hidden = true)
- @PostMapping(value = "/setConfig")
- public ResponseDataDTO setConfig(@RequestBody RobotInfo robotInfo) {
- robotInfoService.updateSpeed(robotInfo);
- return ResponseDataDTO.success();
- }
/**
* 新增机器人信息管理
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
index 6e959bf..5ddb98f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
@@ -4,6 +4,7 @@
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
+import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO;
import com.casic.missiles.modular.robot.model.RobotInfo;
import com.casic.missiles.modular.robot.model.RouteInfo;
import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums;
@@ -87,6 +88,16 @@
}
/**
+ * 机器人速度设置
+ */
+ @ApiOperation(value = "机器人设置")
+ @PostMapping(value = "/setConfig")
+ public ResponseDataDTO setConfig(@RequestBody RobotInfoSetDTO robotInfo) {
+ robotInfoService.updateSpeed(robotInfo);
+ return ResponseDataDTO.success();
+ }
+
+ /**
* 机器人循迹路线读取
*
* @param request 循迹路线读取
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
index ab6659c..27b6aca 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
@@ -4,25 +4,24 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
-import org.springframework.web.bind.annotation.*;
+import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
+import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
+import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import com.casic.missiles.core.page.PageInfoBT;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
-import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
-import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
-import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
-
/**
* 机器人轨迹信息Controller
*
* @author lwh
* @date 2023-10-30
*/
-@Api(tags = "机器人轨迹信息")
+@Api(tags = "机器人历史轨迹")
@RestController
@RequestMapping("/robot/trajectoryInfo")
public class RobotTrajectoryInfoController extends BaseController {
@@ -36,7 +35,7 @@
/**
* 机器人轨迹信息列表
*/
- @ApiOperation("列表查询")
+ @ApiOperation(value = "列表查询")
@GetMapping(value = "/list")
public ResponseDataDTO> list(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
QueryWrapper query = robotTrajectoryInfoVO.genQuery();
@@ -46,7 +45,7 @@
/**
* 机器人轨迹信息分页列表
*/
- @ApiOperation("分页查询")
+ @ApiOperation(value = "分页查询", hidden = true)
@GetMapping(value = "/listPage")
public ResponseDataDTO> listPage(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
Page page = PageFactory.defaultPage();
@@ -58,37 +57,37 @@
/**
* 新增机器人轨迹信息
*/
- @ApiOperation("新增接口")
+ @ApiOperation(value = "新增接口", hidden = true)
@PostMapping(value = "/add")
- public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.save(robotTrajectoryInfo);
+ public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
+ robotTrajectoryInfoService.save(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 修改机器人轨迹信息
*/
- @ApiOperation("修改接口")
+ @ApiOperation(value = "修改接口", hidden = true)
@PostMapping(value = "/update")
public ResponseDataDTO update(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
+ robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 删除机器人轨迹信息
*/
- @ApiOperation("删除接口")
+ @ApiOperation(value = "删除接口", hidden = true)
@GetMapping(value = "/delete")
public ResponseDataDTO delete(String id) {
- robotTrajectoryInfoService.removeById(id);
+ robotTrajectoryInfoService.removeById(id);
return ResponseDataDTO.success();
}
/**
* 机器人轨迹信息详情
*/
- @ApiOperation("详情查询")
+ @ApiOperation(value = "详情查询", hidden = true)
@GetMapping(value = "/detail")
public ResponseDataDTO detail(String id) {
return ResponseDataDTO.success(robotTrajectoryInfoService.getById(id));
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
new file mode 100644
index 0000000..ab22e20
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
@@ -0,0 +1,26 @@
+package com.casic.missiles.modular.robot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class RobotInfoSetDTO {
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "机器人ID", dataType = "Long")
+ private Long id;
+ /**
+ * 设置线速度
+ */
+ @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal")
+ private BigDecimal confV;
+
+ /**
+ * 设置角速度
+ */
+ @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal")
+ private BigDecimal confW;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
index 2d8d705..191dd22 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
@@ -244,6 +244,14 @@
@ApiModelProperty(value = "当前任务信息ID", dataType = "Long")
@TableField("curr_task_id")
private Long currTaskId;
+
+ @ApiModelProperty(value = "电量", dataType = "Integer")
+ @TableField("electricity_quantity")
+ private Integer electricityQuantity;
+
+ @ApiModelProperty(value = "电压", dataType = "Integer")
+ private BigDecimal voltage;
+
@Override
public String toString() {
return "RobotStatusInfo{"
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
new file mode 100644
index 0000000..211f0e1
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.robot.opt.handler.msg;
+
+import com.casic.missiles.modular.robot.opt.handler.IBaseMsgHandler;
+import com.casic.missiles.modular.robot.service.IRobotStatusInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 机器人控制响应handler
+ */
+@Slf4j
+@Component("/app_cmd_vel_response")
+public class AppCmdVelMsgHandler implements IBaseMsgHandler {
+ private final IRobotStatusInfoService statusInfoService;
+ private static Map index = new ConcurrentHashMap<>();
+
+ static {
+ index.put("index", 0);
+ }
+
+ public AppCmdVelMsgHandler(IRobotStatusInfoService statusInfoService) {
+ this.statusInfoService = statusInfoService;
+ }
+
+ @Override
+ public void process(String robotId, String topic, MqttMessage message) {
+ statusInfoService.saveSpeed(robotId, message);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
index 5f77817..accef13 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
@@ -1,6 +1,7 @@
package com.casic.missiles.modular.robot.opt.impl;
import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
import com.casic.missiles.core.util.SpringContextHolder;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
@@ -83,6 +84,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
MessageRequestDTO messageDTO = new MessageRequestDTO();
messageDTO.setMsg(request);
+ System.out.println(JSON.toJSONString(messageDTO));
ResponseDataDTO list = robotRouteOptService.robotCmd(info, InstructCodeEnums.START_TRACK, messageDTO);
//增加循迹任务记录
@@ -91,6 +93,12 @@
return list;
}
+ /**
+ * 机器人实时控制接口
+ *
+ * @param request 请求体
+ * @return
+ */
@Override
public ResponseDataDTO appCmdVel(AppCmdVelRequest request) {
MessageRequestDTO messageDTO = new MessageRequestDTO();
@@ -98,6 +106,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
messageDTO.setMsg(request);
ResponseDataDTO responseDataDTO = robotRouteOptService.robotCmd(info, InstructCodeEnums.APP_CMD_VEL, messageDTO);
+
return responseDataDTO;
}
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 37202e8..9e2bc4a 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -70,6 +70,10 @@
casic-job-quartz
${extension.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
new file mode 100644
index 0000000..85cb3d8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
@@ -0,0 +1,93 @@
+package com.casic.missiles.common;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/websocket/{userId}")
+//此注解相当于设置访问URL
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value = "userId") String userId) {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ System.out.println("【websocket消息】收到客户端消息:" + message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for (WebSocket webSocket : webSockets) {
+// System.out.println("【websocket消息】广播消息:"+message);
+ try {
+ synchronized (webSocket.session) {
+ webSocket.session.getBasicRemote().sendText(message);
+// webSocket.session.getAsyncRemote().sendText(message);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ /**
+ * 发送列表消息
+ *
+ * @param userIds 用户集合
+ * @param message 消息体
+ */
+ public void sendListMessage(List userIds, String message) {
+ System.out.println("【websocket消息】列表消息:" + message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ System.out.println("【websocket消息】单点消息:" + message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
index 77ed723..c88d4e1 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
@@ -54,15 +54,6 @@
return ResponseDataDTO.success(super.packForBT(page));
}
- /**
- * 机器人速度设置
- */
- @ApiOperation(value = "机器人设置", hidden = true)
- @PostMapping(value = "/setConfig")
- public ResponseDataDTO setConfig(@RequestBody RobotInfo robotInfo) {
- robotInfoService.updateSpeed(robotInfo);
- return ResponseDataDTO.success();
- }
/**
* 新增机器人信息管理
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
index 6e959bf..5ddb98f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
@@ -4,6 +4,7 @@
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
+import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO;
import com.casic.missiles.modular.robot.model.RobotInfo;
import com.casic.missiles.modular.robot.model.RouteInfo;
import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums;
@@ -87,6 +88,16 @@
}
/**
+ * 机器人速度设置
+ */
+ @ApiOperation(value = "机器人设置")
+ @PostMapping(value = "/setConfig")
+ public ResponseDataDTO setConfig(@RequestBody RobotInfoSetDTO robotInfo) {
+ robotInfoService.updateSpeed(robotInfo);
+ return ResponseDataDTO.success();
+ }
+
+ /**
* 机器人循迹路线读取
*
* @param request 循迹路线读取
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
index ab6659c..27b6aca 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
@@ -4,25 +4,24 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
-import org.springframework.web.bind.annotation.*;
+import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
+import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
+import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import com.casic.missiles.core.page.PageInfoBT;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
-import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
-import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
-import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
-
/**
* 机器人轨迹信息Controller
*
* @author lwh
* @date 2023-10-30
*/
-@Api(tags = "机器人轨迹信息")
+@Api(tags = "机器人历史轨迹")
@RestController
@RequestMapping("/robot/trajectoryInfo")
public class RobotTrajectoryInfoController extends BaseController {
@@ -36,7 +35,7 @@
/**
* 机器人轨迹信息列表
*/
- @ApiOperation("列表查询")
+ @ApiOperation(value = "列表查询")
@GetMapping(value = "/list")
public ResponseDataDTO> list(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
QueryWrapper query = robotTrajectoryInfoVO.genQuery();
@@ -46,7 +45,7 @@
/**
* 机器人轨迹信息分页列表
*/
- @ApiOperation("分页查询")
+ @ApiOperation(value = "分页查询", hidden = true)
@GetMapping(value = "/listPage")
public ResponseDataDTO> listPage(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
Page page = PageFactory.defaultPage();
@@ -58,37 +57,37 @@
/**
* 新增机器人轨迹信息
*/
- @ApiOperation("新增接口")
+ @ApiOperation(value = "新增接口", hidden = true)
@PostMapping(value = "/add")
- public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.save(robotTrajectoryInfo);
+ public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
+ robotTrajectoryInfoService.save(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 修改机器人轨迹信息
*/
- @ApiOperation("修改接口")
+ @ApiOperation(value = "修改接口", hidden = true)
@PostMapping(value = "/update")
public ResponseDataDTO update(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
+ robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 删除机器人轨迹信息
*/
- @ApiOperation("删除接口")
+ @ApiOperation(value = "删除接口", hidden = true)
@GetMapping(value = "/delete")
public ResponseDataDTO delete(String id) {
- robotTrajectoryInfoService.removeById(id);
+ robotTrajectoryInfoService.removeById(id);
return ResponseDataDTO.success();
}
/**
* 机器人轨迹信息详情
*/
- @ApiOperation("详情查询")
+ @ApiOperation(value = "详情查询", hidden = true)
@GetMapping(value = "/detail")
public ResponseDataDTO detail(String id) {
return ResponseDataDTO.success(robotTrajectoryInfoService.getById(id));
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
new file mode 100644
index 0000000..ab22e20
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
@@ -0,0 +1,26 @@
+package com.casic.missiles.modular.robot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class RobotInfoSetDTO {
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "机器人ID", dataType = "Long")
+ private Long id;
+ /**
+ * 设置线速度
+ */
+ @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal")
+ private BigDecimal confV;
+
+ /**
+ * 设置角速度
+ */
+ @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal")
+ private BigDecimal confW;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
index 2d8d705..191dd22 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
@@ -244,6 +244,14 @@
@ApiModelProperty(value = "当前任务信息ID", dataType = "Long")
@TableField("curr_task_id")
private Long currTaskId;
+
+ @ApiModelProperty(value = "电量", dataType = "Integer")
+ @TableField("electricity_quantity")
+ private Integer electricityQuantity;
+
+ @ApiModelProperty(value = "电压", dataType = "Integer")
+ private BigDecimal voltage;
+
@Override
public String toString() {
return "RobotStatusInfo{"
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
new file mode 100644
index 0000000..211f0e1
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.robot.opt.handler.msg;
+
+import com.casic.missiles.modular.robot.opt.handler.IBaseMsgHandler;
+import com.casic.missiles.modular.robot.service.IRobotStatusInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 机器人控制响应handler
+ */
+@Slf4j
+@Component("/app_cmd_vel_response")
+public class AppCmdVelMsgHandler implements IBaseMsgHandler {
+ private final IRobotStatusInfoService statusInfoService;
+ private static Map index = new ConcurrentHashMap<>();
+
+ static {
+ index.put("index", 0);
+ }
+
+ public AppCmdVelMsgHandler(IRobotStatusInfoService statusInfoService) {
+ this.statusInfoService = statusInfoService;
+ }
+
+ @Override
+ public void process(String robotId, String topic, MqttMessage message) {
+ statusInfoService.saveSpeed(robotId, message);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
index 5f77817..accef13 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
@@ -1,6 +1,7 @@
package com.casic.missiles.modular.robot.opt.impl;
import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
import com.casic.missiles.core.util.SpringContextHolder;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
@@ -83,6 +84,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
MessageRequestDTO messageDTO = new MessageRequestDTO();
messageDTO.setMsg(request);
+ System.out.println(JSON.toJSONString(messageDTO));
ResponseDataDTO list = robotRouteOptService.robotCmd(info, InstructCodeEnums.START_TRACK, messageDTO);
//增加循迹任务记录
@@ -91,6 +93,12 @@
return list;
}
+ /**
+ * 机器人实时控制接口
+ *
+ * @param request 请求体
+ * @return
+ */
@Override
public ResponseDataDTO appCmdVel(AppCmdVelRequest request) {
MessageRequestDTO messageDTO = new MessageRequestDTO();
@@ -98,6 +106,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
messageDTO.setMsg(request);
ResponseDataDTO responseDataDTO = robotRouteOptService.robotCmd(info, InstructCodeEnums.APP_CMD_VEL, messageDTO);
+
return responseDataDTO;
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
index 8f66f8d..4f71f0f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
@@ -56,7 +56,7 @@
messageDTO.setMsg(request);
RobotMsgResponseDTO> result = MsgUtils.senMsg(mqttClient, InstructCodeEnums.TRACK_LIST, messageDTO);
- if (result != null&&result.getMsg()!=null) {
+ if (result != null && result.getMsg() != null) {
//机器人路线更新至表中
return ResponseDataDTO.success(routeInfoService.saveListByRouteTargetIds(robotInfo, result.getMsg().getResult()));
}
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 37202e8..9e2bc4a 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -70,6 +70,10 @@
casic-job-quartz
${extension.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
new file mode 100644
index 0000000..85cb3d8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
@@ -0,0 +1,93 @@
+package com.casic.missiles.common;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/websocket/{userId}")
+//此注解相当于设置访问URL
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value = "userId") String userId) {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ System.out.println("【websocket消息】收到客户端消息:" + message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for (WebSocket webSocket : webSockets) {
+// System.out.println("【websocket消息】广播消息:"+message);
+ try {
+ synchronized (webSocket.session) {
+ webSocket.session.getBasicRemote().sendText(message);
+// webSocket.session.getAsyncRemote().sendText(message);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ /**
+ * 发送列表消息
+ *
+ * @param userIds 用户集合
+ * @param message 消息体
+ */
+ public void sendListMessage(List userIds, String message) {
+ System.out.println("【websocket消息】列表消息:" + message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ System.out.println("【websocket消息】单点消息:" + message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
index 77ed723..c88d4e1 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
@@ -54,15 +54,6 @@
return ResponseDataDTO.success(super.packForBT(page));
}
- /**
- * 机器人速度设置
- */
- @ApiOperation(value = "机器人设置", hidden = true)
- @PostMapping(value = "/setConfig")
- public ResponseDataDTO setConfig(@RequestBody RobotInfo robotInfo) {
- robotInfoService.updateSpeed(robotInfo);
- return ResponseDataDTO.success();
- }
/**
* 新增机器人信息管理
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
index 6e959bf..5ddb98f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
@@ -4,6 +4,7 @@
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
+import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO;
import com.casic.missiles.modular.robot.model.RobotInfo;
import com.casic.missiles.modular.robot.model.RouteInfo;
import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums;
@@ -87,6 +88,16 @@
}
/**
+ * 机器人速度设置
+ */
+ @ApiOperation(value = "机器人设置")
+ @PostMapping(value = "/setConfig")
+ public ResponseDataDTO setConfig(@RequestBody RobotInfoSetDTO robotInfo) {
+ robotInfoService.updateSpeed(robotInfo);
+ return ResponseDataDTO.success();
+ }
+
+ /**
* 机器人循迹路线读取
*
* @param request 循迹路线读取
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
index ab6659c..27b6aca 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
@@ -4,25 +4,24 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
-import org.springframework.web.bind.annotation.*;
+import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
+import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
+import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import com.casic.missiles.core.page.PageInfoBT;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
-import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
-import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
-import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
-
/**
* 机器人轨迹信息Controller
*
* @author lwh
* @date 2023-10-30
*/
-@Api(tags = "机器人轨迹信息")
+@Api(tags = "机器人历史轨迹")
@RestController
@RequestMapping("/robot/trajectoryInfo")
public class RobotTrajectoryInfoController extends BaseController {
@@ -36,7 +35,7 @@
/**
* 机器人轨迹信息列表
*/
- @ApiOperation("列表查询")
+ @ApiOperation(value = "列表查询")
@GetMapping(value = "/list")
public ResponseDataDTO> list(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
QueryWrapper query = robotTrajectoryInfoVO.genQuery();
@@ -46,7 +45,7 @@
/**
* 机器人轨迹信息分页列表
*/
- @ApiOperation("分页查询")
+ @ApiOperation(value = "分页查询", hidden = true)
@GetMapping(value = "/listPage")
public ResponseDataDTO> listPage(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
Page page = PageFactory.defaultPage();
@@ -58,37 +57,37 @@
/**
* 新增机器人轨迹信息
*/
- @ApiOperation("新增接口")
+ @ApiOperation(value = "新增接口", hidden = true)
@PostMapping(value = "/add")
- public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.save(robotTrajectoryInfo);
+ public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
+ robotTrajectoryInfoService.save(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 修改机器人轨迹信息
*/
- @ApiOperation("修改接口")
+ @ApiOperation(value = "修改接口", hidden = true)
@PostMapping(value = "/update")
public ResponseDataDTO update(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
+ robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 删除机器人轨迹信息
*/
- @ApiOperation("删除接口")
+ @ApiOperation(value = "删除接口", hidden = true)
@GetMapping(value = "/delete")
public ResponseDataDTO delete(String id) {
- robotTrajectoryInfoService.removeById(id);
+ robotTrajectoryInfoService.removeById(id);
return ResponseDataDTO.success();
}
/**
* 机器人轨迹信息详情
*/
- @ApiOperation("详情查询")
+ @ApiOperation(value = "详情查询", hidden = true)
@GetMapping(value = "/detail")
public ResponseDataDTO detail(String id) {
return ResponseDataDTO.success(robotTrajectoryInfoService.getById(id));
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
new file mode 100644
index 0000000..ab22e20
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
@@ -0,0 +1,26 @@
+package com.casic.missiles.modular.robot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class RobotInfoSetDTO {
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "机器人ID", dataType = "Long")
+ private Long id;
+ /**
+ * 设置线速度
+ */
+ @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal")
+ private BigDecimal confV;
+
+ /**
+ * 设置角速度
+ */
+ @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal")
+ private BigDecimal confW;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
index 2d8d705..191dd22 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
@@ -244,6 +244,14 @@
@ApiModelProperty(value = "当前任务信息ID", dataType = "Long")
@TableField("curr_task_id")
private Long currTaskId;
+
+ @ApiModelProperty(value = "电量", dataType = "Integer")
+ @TableField("electricity_quantity")
+ private Integer electricityQuantity;
+
+ @ApiModelProperty(value = "电压", dataType = "Integer")
+ private BigDecimal voltage;
+
@Override
public String toString() {
return "RobotStatusInfo{"
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
new file mode 100644
index 0000000..211f0e1
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.robot.opt.handler.msg;
+
+import com.casic.missiles.modular.robot.opt.handler.IBaseMsgHandler;
+import com.casic.missiles.modular.robot.service.IRobotStatusInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 机器人控制响应handler
+ */
+@Slf4j
+@Component("/app_cmd_vel_response")
+public class AppCmdVelMsgHandler implements IBaseMsgHandler {
+ private final IRobotStatusInfoService statusInfoService;
+ private static Map index = new ConcurrentHashMap<>();
+
+ static {
+ index.put("index", 0);
+ }
+
+ public AppCmdVelMsgHandler(IRobotStatusInfoService statusInfoService) {
+ this.statusInfoService = statusInfoService;
+ }
+
+ @Override
+ public void process(String robotId, String topic, MqttMessage message) {
+ statusInfoService.saveSpeed(robotId, message);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
index 5f77817..accef13 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
@@ -1,6 +1,7 @@
package com.casic.missiles.modular.robot.opt.impl;
import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
import com.casic.missiles.core.util.SpringContextHolder;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
@@ -83,6 +84,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
MessageRequestDTO messageDTO = new MessageRequestDTO();
messageDTO.setMsg(request);
+ System.out.println(JSON.toJSONString(messageDTO));
ResponseDataDTO list = robotRouteOptService.robotCmd(info, InstructCodeEnums.START_TRACK, messageDTO);
//增加循迹任务记录
@@ -91,6 +93,12 @@
return list;
}
+ /**
+ * 机器人实时控制接口
+ *
+ * @param request 请求体
+ * @return
+ */
@Override
public ResponseDataDTO appCmdVel(AppCmdVelRequest request) {
MessageRequestDTO messageDTO = new MessageRequestDTO();
@@ -98,6 +106,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
messageDTO.setMsg(request);
ResponseDataDTO responseDataDTO = robotRouteOptService.robotCmd(info, InstructCodeEnums.APP_CMD_VEL, messageDTO);
+
return responseDataDTO;
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
index 8f66f8d..4f71f0f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
@@ -56,7 +56,7 @@
messageDTO.setMsg(request);
RobotMsgResponseDTO> result = MsgUtils.senMsg(mqttClient, InstructCodeEnums.TRACK_LIST, messageDTO);
- if (result != null&&result.getMsg()!=null) {
+ if (result != null && result.getMsg() != null) {
//机器人路线更新至表中
return ResponseDataDTO.success(routeInfoService.saveListByRouteTargetIds(robotInfo, result.getMsg().getResult()));
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java
deleted file mode 100644
index cb2a843..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.casic.missiles.modular.robot.opt.instruct.base;
-
-import lombok.Data;
-
-/**
- * 机器人消息响应
- */
-@Data
-public class RobotMsgResponseDTO {
- /**
- * 是否异常
- */
- private Boolean isSuccess;
- private RobotMsgDTO msg;
-}
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 37202e8..9e2bc4a 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -70,6 +70,10 @@
casic-job-quartz
${extension.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
new file mode 100644
index 0000000..85cb3d8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
@@ -0,0 +1,93 @@
+package com.casic.missiles.common;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/websocket/{userId}")
+//此注解相当于设置访问URL
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value = "userId") String userId) {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ System.out.println("【websocket消息】收到客户端消息:" + message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for (WebSocket webSocket : webSockets) {
+// System.out.println("【websocket消息】广播消息:"+message);
+ try {
+ synchronized (webSocket.session) {
+ webSocket.session.getBasicRemote().sendText(message);
+// webSocket.session.getAsyncRemote().sendText(message);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ /**
+ * 发送列表消息
+ *
+ * @param userIds 用户集合
+ * @param message 消息体
+ */
+ public void sendListMessage(List userIds, String message) {
+ System.out.println("【websocket消息】列表消息:" + message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ System.out.println("【websocket消息】单点消息:" + message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
index 77ed723..c88d4e1 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
@@ -54,15 +54,6 @@
return ResponseDataDTO.success(super.packForBT(page));
}
- /**
- * 机器人速度设置
- */
- @ApiOperation(value = "机器人设置", hidden = true)
- @PostMapping(value = "/setConfig")
- public ResponseDataDTO setConfig(@RequestBody RobotInfo robotInfo) {
- robotInfoService.updateSpeed(robotInfo);
- return ResponseDataDTO.success();
- }
/**
* 新增机器人信息管理
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
index 6e959bf..5ddb98f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
@@ -4,6 +4,7 @@
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
+import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO;
import com.casic.missiles.modular.robot.model.RobotInfo;
import com.casic.missiles.modular.robot.model.RouteInfo;
import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums;
@@ -87,6 +88,16 @@
}
/**
+ * 机器人速度设置
+ */
+ @ApiOperation(value = "机器人设置")
+ @PostMapping(value = "/setConfig")
+ public ResponseDataDTO setConfig(@RequestBody RobotInfoSetDTO robotInfo) {
+ robotInfoService.updateSpeed(robotInfo);
+ return ResponseDataDTO.success();
+ }
+
+ /**
* 机器人循迹路线读取
*
* @param request 循迹路线读取
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
index ab6659c..27b6aca 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
@@ -4,25 +4,24 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
-import org.springframework.web.bind.annotation.*;
+import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
+import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
+import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import com.casic.missiles.core.page.PageInfoBT;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
-import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
-import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
-import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
-
/**
* 机器人轨迹信息Controller
*
* @author lwh
* @date 2023-10-30
*/
-@Api(tags = "机器人轨迹信息")
+@Api(tags = "机器人历史轨迹")
@RestController
@RequestMapping("/robot/trajectoryInfo")
public class RobotTrajectoryInfoController extends BaseController {
@@ -36,7 +35,7 @@
/**
* 机器人轨迹信息列表
*/
- @ApiOperation("列表查询")
+ @ApiOperation(value = "列表查询")
@GetMapping(value = "/list")
public ResponseDataDTO> list(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
QueryWrapper query = robotTrajectoryInfoVO.genQuery();
@@ -46,7 +45,7 @@
/**
* 机器人轨迹信息分页列表
*/
- @ApiOperation("分页查询")
+ @ApiOperation(value = "分页查询", hidden = true)
@GetMapping(value = "/listPage")
public ResponseDataDTO> listPage(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
Page page = PageFactory.defaultPage();
@@ -58,37 +57,37 @@
/**
* 新增机器人轨迹信息
*/
- @ApiOperation("新增接口")
+ @ApiOperation(value = "新增接口", hidden = true)
@PostMapping(value = "/add")
- public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.save(robotTrajectoryInfo);
+ public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
+ robotTrajectoryInfoService.save(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 修改机器人轨迹信息
*/
- @ApiOperation("修改接口")
+ @ApiOperation(value = "修改接口", hidden = true)
@PostMapping(value = "/update")
public ResponseDataDTO update(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
+ robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 删除机器人轨迹信息
*/
- @ApiOperation("删除接口")
+ @ApiOperation(value = "删除接口", hidden = true)
@GetMapping(value = "/delete")
public ResponseDataDTO delete(String id) {
- robotTrajectoryInfoService.removeById(id);
+ robotTrajectoryInfoService.removeById(id);
return ResponseDataDTO.success();
}
/**
* 机器人轨迹信息详情
*/
- @ApiOperation("详情查询")
+ @ApiOperation(value = "详情查询", hidden = true)
@GetMapping(value = "/detail")
public ResponseDataDTO detail(String id) {
return ResponseDataDTO.success(robotTrajectoryInfoService.getById(id));
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
new file mode 100644
index 0000000..ab22e20
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
@@ -0,0 +1,26 @@
+package com.casic.missiles.modular.robot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class RobotInfoSetDTO {
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "机器人ID", dataType = "Long")
+ private Long id;
+ /**
+ * 设置线速度
+ */
+ @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal")
+ private BigDecimal confV;
+
+ /**
+ * 设置角速度
+ */
+ @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal")
+ private BigDecimal confW;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
index 2d8d705..191dd22 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
@@ -244,6 +244,14 @@
@ApiModelProperty(value = "当前任务信息ID", dataType = "Long")
@TableField("curr_task_id")
private Long currTaskId;
+
+ @ApiModelProperty(value = "电量", dataType = "Integer")
+ @TableField("electricity_quantity")
+ private Integer electricityQuantity;
+
+ @ApiModelProperty(value = "电压", dataType = "Integer")
+ private BigDecimal voltage;
+
@Override
public String toString() {
return "RobotStatusInfo{"
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
new file mode 100644
index 0000000..211f0e1
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.robot.opt.handler.msg;
+
+import com.casic.missiles.modular.robot.opt.handler.IBaseMsgHandler;
+import com.casic.missiles.modular.robot.service.IRobotStatusInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 机器人控制响应handler
+ */
+@Slf4j
+@Component("/app_cmd_vel_response")
+public class AppCmdVelMsgHandler implements IBaseMsgHandler {
+ private final IRobotStatusInfoService statusInfoService;
+ private static Map index = new ConcurrentHashMap<>();
+
+ static {
+ index.put("index", 0);
+ }
+
+ public AppCmdVelMsgHandler(IRobotStatusInfoService statusInfoService) {
+ this.statusInfoService = statusInfoService;
+ }
+
+ @Override
+ public void process(String robotId, String topic, MqttMessage message) {
+ statusInfoService.saveSpeed(robotId, message);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
index 5f77817..accef13 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
@@ -1,6 +1,7 @@
package com.casic.missiles.modular.robot.opt.impl;
import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
import com.casic.missiles.core.util.SpringContextHolder;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
@@ -83,6 +84,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
MessageRequestDTO messageDTO = new MessageRequestDTO();
messageDTO.setMsg(request);
+ System.out.println(JSON.toJSONString(messageDTO));
ResponseDataDTO list = robotRouteOptService.robotCmd(info, InstructCodeEnums.START_TRACK, messageDTO);
//增加循迹任务记录
@@ -91,6 +93,12 @@
return list;
}
+ /**
+ * 机器人实时控制接口
+ *
+ * @param request 请求体
+ * @return
+ */
@Override
public ResponseDataDTO appCmdVel(AppCmdVelRequest request) {
MessageRequestDTO messageDTO = new MessageRequestDTO();
@@ -98,6 +106,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
messageDTO.setMsg(request);
ResponseDataDTO responseDataDTO = robotRouteOptService.robotCmd(info, InstructCodeEnums.APP_CMD_VEL, messageDTO);
+
return responseDataDTO;
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
index 8f66f8d..4f71f0f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
@@ -56,7 +56,7 @@
messageDTO.setMsg(request);
RobotMsgResponseDTO> result = MsgUtils.senMsg(mqttClient, InstructCodeEnums.TRACK_LIST, messageDTO);
- if (result != null&&result.getMsg()!=null) {
+ if (result != null && result.getMsg() != null) {
//机器人路线更新至表中
return ResponseDataDTO.success(routeInfoService.saveListByRouteTargetIds(robotInfo, result.getMsg().getResult()));
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java
deleted file mode 100644
index cb2a843..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.casic.missiles.modular.robot.opt.instruct.base;
-
-import lombok.Data;
-
-/**
- * 机器人消息响应
- */
-@Data
-public class RobotMsgResponseDTO {
- /**
- * 是否异常
- */
- private Boolean isSuccess;
- private RobotMsgDTO msg;
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotResponseDTO.java
deleted file mode 100644
index 57551f0..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotResponseDTO.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.casic.missiles.modular.robot.opt.instruct.base;
-
-import lombok.Data;
-
-/**
- * 机器人消息响应
- */
-@Data
-public class RobotResponseDTO {
- private T msg;
-}
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 37202e8..9e2bc4a 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -70,6 +70,10 @@
casic-job-quartz
${extension.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
new file mode 100644
index 0000000..85cb3d8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
@@ -0,0 +1,93 @@
+package com.casic.missiles.common;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/websocket/{userId}")
+//此注解相当于设置访问URL
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value = "userId") String userId) {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ System.out.println("【websocket消息】收到客户端消息:" + message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for (WebSocket webSocket : webSockets) {
+// System.out.println("【websocket消息】广播消息:"+message);
+ try {
+ synchronized (webSocket.session) {
+ webSocket.session.getBasicRemote().sendText(message);
+// webSocket.session.getAsyncRemote().sendText(message);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ /**
+ * 发送列表消息
+ *
+ * @param userIds 用户集合
+ * @param message 消息体
+ */
+ public void sendListMessage(List userIds, String message) {
+ System.out.println("【websocket消息】列表消息:" + message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ System.out.println("【websocket消息】单点消息:" + message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
index 77ed723..c88d4e1 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
@@ -54,15 +54,6 @@
return ResponseDataDTO.success(super.packForBT(page));
}
- /**
- * 机器人速度设置
- */
- @ApiOperation(value = "机器人设置", hidden = true)
- @PostMapping(value = "/setConfig")
- public ResponseDataDTO setConfig(@RequestBody RobotInfo robotInfo) {
- robotInfoService.updateSpeed(robotInfo);
- return ResponseDataDTO.success();
- }
/**
* 新增机器人信息管理
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
index 6e959bf..5ddb98f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
@@ -4,6 +4,7 @@
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
+import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO;
import com.casic.missiles.modular.robot.model.RobotInfo;
import com.casic.missiles.modular.robot.model.RouteInfo;
import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums;
@@ -87,6 +88,16 @@
}
/**
+ * 机器人速度设置
+ */
+ @ApiOperation(value = "机器人设置")
+ @PostMapping(value = "/setConfig")
+ public ResponseDataDTO setConfig(@RequestBody RobotInfoSetDTO robotInfo) {
+ robotInfoService.updateSpeed(robotInfo);
+ return ResponseDataDTO.success();
+ }
+
+ /**
* 机器人循迹路线读取
*
* @param request 循迹路线读取
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
index ab6659c..27b6aca 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
@@ -4,25 +4,24 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
-import org.springframework.web.bind.annotation.*;
+import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
+import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
+import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import com.casic.missiles.core.page.PageInfoBT;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
-import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
-import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
-import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
-
/**
* 机器人轨迹信息Controller
*
* @author lwh
* @date 2023-10-30
*/
-@Api(tags = "机器人轨迹信息")
+@Api(tags = "机器人历史轨迹")
@RestController
@RequestMapping("/robot/trajectoryInfo")
public class RobotTrajectoryInfoController extends BaseController {
@@ -36,7 +35,7 @@
/**
* 机器人轨迹信息列表
*/
- @ApiOperation("列表查询")
+ @ApiOperation(value = "列表查询")
@GetMapping(value = "/list")
public ResponseDataDTO> list(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
QueryWrapper query = robotTrajectoryInfoVO.genQuery();
@@ -46,7 +45,7 @@
/**
* 机器人轨迹信息分页列表
*/
- @ApiOperation("分页查询")
+ @ApiOperation(value = "分页查询", hidden = true)
@GetMapping(value = "/listPage")
public ResponseDataDTO> listPage(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
Page page = PageFactory.defaultPage();
@@ -58,37 +57,37 @@
/**
* 新增机器人轨迹信息
*/
- @ApiOperation("新增接口")
+ @ApiOperation(value = "新增接口", hidden = true)
@PostMapping(value = "/add")
- public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.save(robotTrajectoryInfo);
+ public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
+ robotTrajectoryInfoService.save(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 修改机器人轨迹信息
*/
- @ApiOperation("修改接口")
+ @ApiOperation(value = "修改接口", hidden = true)
@PostMapping(value = "/update")
public ResponseDataDTO update(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
+ robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 删除机器人轨迹信息
*/
- @ApiOperation("删除接口")
+ @ApiOperation(value = "删除接口", hidden = true)
@GetMapping(value = "/delete")
public ResponseDataDTO delete(String id) {
- robotTrajectoryInfoService.removeById(id);
+ robotTrajectoryInfoService.removeById(id);
return ResponseDataDTO.success();
}
/**
* 机器人轨迹信息详情
*/
- @ApiOperation("详情查询")
+ @ApiOperation(value = "详情查询", hidden = true)
@GetMapping(value = "/detail")
public ResponseDataDTO detail(String id) {
return ResponseDataDTO.success(robotTrajectoryInfoService.getById(id));
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
new file mode 100644
index 0000000..ab22e20
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
@@ -0,0 +1,26 @@
+package com.casic.missiles.modular.robot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class RobotInfoSetDTO {
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "机器人ID", dataType = "Long")
+ private Long id;
+ /**
+ * 设置线速度
+ */
+ @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal")
+ private BigDecimal confV;
+
+ /**
+ * 设置角速度
+ */
+ @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal")
+ private BigDecimal confW;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
index 2d8d705..191dd22 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
@@ -244,6 +244,14 @@
@ApiModelProperty(value = "当前任务信息ID", dataType = "Long")
@TableField("curr_task_id")
private Long currTaskId;
+
+ @ApiModelProperty(value = "电量", dataType = "Integer")
+ @TableField("electricity_quantity")
+ private Integer electricityQuantity;
+
+ @ApiModelProperty(value = "电压", dataType = "Integer")
+ private BigDecimal voltage;
+
@Override
public String toString() {
return "RobotStatusInfo{"
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
new file mode 100644
index 0000000..211f0e1
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.robot.opt.handler.msg;
+
+import com.casic.missiles.modular.robot.opt.handler.IBaseMsgHandler;
+import com.casic.missiles.modular.robot.service.IRobotStatusInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 机器人控制响应handler
+ */
+@Slf4j
+@Component("/app_cmd_vel_response")
+public class AppCmdVelMsgHandler implements IBaseMsgHandler {
+ private final IRobotStatusInfoService statusInfoService;
+ private static Map index = new ConcurrentHashMap<>();
+
+ static {
+ index.put("index", 0);
+ }
+
+ public AppCmdVelMsgHandler(IRobotStatusInfoService statusInfoService) {
+ this.statusInfoService = statusInfoService;
+ }
+
+ @Override
+ public void process(String robotId, String topic, MqttMessage message) {
+ statusInfoService.saveSpeed(robotId, message);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
index 5f77817..accef13 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
@@ -1,6 +1,7 @@
package com.casic.missiles.modular.robot.opt.impl;
import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
import com.casic.missiles.core.util.SpringContextHolder;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
@@ -83,6 +84,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
MessageRequestDTO messageDTO = new MessageRequestDTO();
messageDTO.setMsg(request);
+ System.out.println(JSON.toJSONString(messageDTO));
ResponseDataDTO list = robotRouteOptService.robotCmd(info, InstructCodeEnums.START_TRACK, messageDTO);
//增加循迹任务记录
@@ -91,6 +93,12 @@
return list;
}
+ /**
+ * 机器人实时控制接口
+ *
+ * @param request 请求体
+ * @return
+ */
@Override
public ResponseDataDTO appCmdVel(AppCmdVelRequest request) {
MessageRequestDTO messageDTO = new MessageRequestDTO();
@@ -98,6 +106,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
messageDTO.setMsg(request);
ResponseDataDTO responseDataDTO = robotRouteOptService.robotCmd(info, InstructCodeEnums.APP_CMD_VEL, messageDTO);
+
return responseDataDTO;
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
index 8f66f8d..4f71f0f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
@@ -56,7 +56,7 @@
messageDTO.setMsg(request);
RobotMsgResponseDTO> result = MsgUtils.senMsg(mqttClient, InstructCodeEnums.TRACK_LIST, messageDTO);
- if (result != null&&result.getMsg()!=null) {
+ if (result != null && result.getMsg() != null) {
//机器人路线更新至表中
return ResponseDataDTO.success(routeInfoService.saveListByRouteTargetIds(robotInfo, result.getMsg().getResult()));
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java
deleted file mode 100644
index cb2a843..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.casic.missiles.modular.robot.opt.instruct.base;
-
-import lombok.Data;
-
-/**
- * 机器人消息响应
- */
-@Data
-public class RobotMsgResponseDTO {
- /**
- * 是否异常
- */
- private Boolean isSuccess;
- private RobotMsgDTO msg;
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotResponseDTO.java
deleted file mode 100644
index 57551f0..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotResponseDTO.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.casic.missiles.modular.robot.opt.instruct.base;
-
-import lombok.Data;
-
-/**
- * 机器人消息响应
- */
-@Data
-public class RobotResponseDTO {
- private T msg;
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotMsgResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotMsgResponseDTO.java
new file mode 100644
index 0000000..b1b6a1c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotMsgResponseDTO.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.modular.robot.opt.instruct.base.dto;
+
+import com.casic.missiles.modular.robot.opt.instruct.base.RobotBaseMsg;
+import lombok.Data;
+
+/**
+ * 机器人响应消息体
+ */
+@Data
+public class RobotMsgResponseDTO implements RobotBaseMsg {
+ /**
+ * 是否异常
+ */
+ private Boolean isSuccess;
+ private RobotMsgDTO msg;
+}
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 37202e8..9e2bc4a 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -70,6 +70,10 @@
casic-job-quartz
${extension.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
new file mode 100644
index 0000000..85cb3d8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
@@ -0,0 +1,93 @@
+package com.casic.missiles.common;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/websocket/{userId}")
+//此注解相当于设置访问URL
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value = "userId") String userId) {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ System.out.println("【websocket消息】收到客户端消息:" + message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for (WebSocket webSocket : webSockets) {
+// System.out.println("【websocket消息】广播消息:"+message);
+ try {
+ synchronized (webSocket.session) {
+ webSocket.session.getBasicRemote().sendText(message);
+// webSocket.session.getAsyncRemote().sendText(message);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ /**
+ * 发送列表消息
+ *
+ * @param userIds 用户集合
+ * @param message 消息体
+ */
+ public void sendListMessage(List userIds, String message) {
+ System.out.println("【websocket消息】列表消息:" + message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ System.out.println("【websocket消息】单点消息:" + message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
index 77ed723..c88d4e1 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
@@ -54,15 +54,6 @@
return ResponseDataDTO.success(super.packForBT(page));
}
- /**
- * 机器人速度设置
- */
- @ApiOperation(value = "机器人设置", hidden = true)
- @PostMapping(value = "/setConfig")
- public ResponseDataDTO setConfig(@RequestBody RobotInfo robotInfo) {
- robotInfoService.updateSpeed(robotInfo);
- return ResponseDataDTO.success();
- }
/**
* 新增机器人信息管理
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
index 6e959bf..5ddb98f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
@@ -4,6 +4,7 @@
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
+import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO;
import com.casic.missiles.modular.robot.model.RobotInfo;
import com.casic.missiles.modular.robot.model.RouteInfo;
import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums;
@@ -87,6 +88,16 @@
}
/**
+ * 机器人速度设置
+ */
+ @ApiOperation(value = "机器人设置")
+ @PostMapping(value = "/setConfig")
+ public ResponseDataDTO setConfig(@RequestBody RobotInfoSetDTO robotInfo) {
+ robotInfoService.updateSpeed(robotInfo);
+ return ResponseDataDTO.success();
+ }
+
+ /**
* 机器人循迹路线读取
*
* @param request 循迹路线读取
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
index ab6659c..27b6aca 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
@@ -4,25 +4,24 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
-import org.springframework.web.bind.annotation.*;
+import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
+import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
+import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import com.casic.missiles.core.page.PageInfoBT;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
-import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
-import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
-import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
-
/**
* 机器人轨迹信息Controller
*
* @author lwh
* @date 2023-10-30
*/
-@Api(tags = "机器人轨迹信息")
+@Api(tags = "机器人历史轨迹")
@RestController
@RequestMapping("/robot/trajectoryInfo")
public class RobotTrajectoryInfoController extends BaseController {
@@ -36,7 +35,7 @@
/**
* 机器人轨迹信息列表
*/
- @ApiOperation("列表查询")
+ @ApiOperation(value = "列表查询")
@GetMapping(value = "/list")
public ResponseDataDTO> list(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
QueryWrapper query = robotTrajectoryInfoVO.genQuery();
@@ -46,7 +45,7 @@
/**
* 机器人轨迹信息分页列表
*/
- @ApiOperation("分页查询")
+ @ApiOperation(value = "分页查询", hidden = true)
@GetMapping(value = "/listPage")
public ResponseDataDTO> listPage(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
Page page = PageFactory.defaultPage();
@@ -58,37 +57,37 @@
/**
* 新增机器人轨迹信息
*/
- @ApiOperation("新增接口")
+ @ApiOperation(value = "新增接口", hidden = true)
@PostMapping(value = "/add")
- public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.save(robotTrajectoryInfo);
+ public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
+ robotTrajectoryInfoService.save(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 修改机器人轨迹信息
*/
- @ApiOperation("修改接口")
+ @ApiOperation(value = "修改接口", hidden = true)
@PostMapping(value = "/update")
public ResponseDataDTO update(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
+ robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 删除机器人轨迹信息
*/
- @ApiOperation("删除接口")
+ @ApiOperation(value = "删除接口", hidden = true)
@GetMapping(value = "/delete")
public ResponseDataDTO delete(String id) {
- robotTrajectoryInfoService.removeById(id);
+ robotTrajectoryInfoService.removeById(id);
return ResponseDataDTO.success();
}
/**
* 机器人轨迹信息详情
*/
- @ApiOperation("详情查询")
+ @ApiOperation(value = "详情查询", hidden = true)
@GetMapping(value = "/detail")
public ResponseDataDTO detail(String id) {
return ResponseDataDTO.success(robotTrajectoryInfoService.getById(id));
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
new file mode 100644
index 0000000..ab22e20
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
@@ -0,0 +1,26 @@
+package com.casic.missiles.modular.robot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class RobotInfoSetDTO {
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "机器人ID", dataType = "Long")
+ private Long id;
+ /**
+ * 设置线速度
+ */
+ @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal")
+ private BigDecimal confV;
+
+ /**
+ * 设置角速度
+ */
+ @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal")
+ private BigDecimal confW;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
index 2d8d705..191dd22 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
@@ -244,6 +244,14 @@
@ApiModelProperty(value = "当前任务信息ID", dataType = "Long")
@TableField("curr_task_id")
private Long currTaskId;
+
+ @ApiModelProperty(value = "电量", dataType = "Integer")
+ @TableField("electricity_quantity")
+ private Integer electricityQuantity;
+
+ @ApiModelProperty(value = "电压", dataType = "Integer")
+ private BigDecimal voltage;
+
@Override
public String toString() {
return "RobotStatusInfo{"
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
new file mode 100644
index 0000000..211f0e1
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.robot.opt.handler.msg;
+
+import com.casic.missiles.modular.robot.opt.handler.IBaseMsgHandler;
+import com.casic.missiles.modular.robot.service.IRobotStatusInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 机器人控制响应handler
+ */
+@Slf4j
+@Component("/app_cmd_vel_response")
+public class AppCmdVelMsgHandler implements IBaseMsgHandler {
+ private final IRobotStatusInfoService statusInfoService;
+ private static Map index = new ConcurrentHashMap<>();
+
+ static {
+ index.put("index", 0);
+ }
+
+ public AppCmdVelMsgHandler(IRobotStatusInfoService statusInfoService) {
+ this.statusInfoService = statusInfoService;
+ }
+
+ @Override
+ public void process(String robotId, String topic, MqttMessage message) {
+ statusInfoService.saveSpeed(robotId, message);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
index 5f77817..accef13 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
@@ -1,6 +1,7 @@
package com.casic.missiles.modular.robot.opt.impl;
import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
import com.casic.missiles.core.util.SpringContextHolder;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
@@ -83,6 +84,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
MessageRequestDTO messageDTO = new MessageRequestDTO();
messageDTO.setMsg(request);
+ System.out.println(JSON.toJSONString(messageDTO));
ResponseDataDTO list = robotRouteOptService.robotCmd(info, InstructCodeEnums.START_TRACK, messageDTO);
//增加循迹任务记录
@@ -91,6 +93,12 @@
return list;
}
+ /**
+ * 机器人实时控制接口
+ *
+ * @param request 请求体
+ * @return
+ */
@Override
public ResponseDataDTO appCmdVel(AppCmdVelRequest request) {
MessageRequestDTO messageDTO = new MessageRequestDTO();
@@ -98,6 +106,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
messageDTO.setMsg(request);
ResponseDataDTO responseDataDTO = robotRouteOptService.robotCmd(info, InstructCodeEnums.APP_CMD_VEL, messageDTO);
+
return responseDataDTO;
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
index 8f66f8d..4f71f0f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
@@ -56,7 +56,7 @@
messageDTO.setMsg(request);
RobotMsgResponseDTO> result = MsgUtils.senMsg(mqttClient, InstructCodeEnums.TRACK_LIST, messageDTO);
- if (result != null&&result.getMsg()!=null) {
+ if (result != null && result.getMsg() != null) {
//机器人路线更新至表中
return ResponseDataDTO.success(routeInfoService.saveListByRouteTargetIds(robotInfo, result.getMsg().getResult()));
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java
deleted file mode 100644
index cb2a843..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.casic.missiles.modular.robot.opt.instruct.base;
-
-import lombok.Data;
-
-/**
- * 机器人消息响应
- */
-@Data
-public class RobotMsgResponseDTO {
- /**
- * 是否异常
- */
- private Boolean isSuccess;
- private RobotMsgDTO msg;
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotResponseDTO.java
deleted file mode 100644
index 57551f0..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotResponseDTO.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.casic.missiles.modular.robot.opt.instruct.base;
-
-import lombok.Data;
-
-/**
- * 机器人消息响应
- */
-@Data
-public class RobotResponseDTO {
- private T msg;
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotMsgResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotMsgResponseDTO.java
new file mode 100644
index 0000000..b1b6a1c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotMsgResponseDTO.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.modular.robot.opt.instruct.base.dto;
+
+import com.casic.missiles.modular.robot.opt.instruct.base.RobotBaseMsg;
+import lombok.Data;
+
+/**
+ * 机器人响应消息体
+ */
+@Data
+public class RobotMsgResponseDTO implements RobotBaseMsg {
+ /**
+ * 是否异常
+ */
+ private Boolean isSuccess;
+ private RobotMsgDTO msg;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotResponseDTO.java
new file mode 100644
index 0000000..f395c4f
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotResponseDTO.java
@@ -0,0 +1,12 @@
+package com.casic.missiles.modular.robot.opt.instruct.base.dto;
+
+import com.casic.missiles.modular.robot.opt.instruct.base.RobotBaseMsg;
+import lombok.Data;
+
+/**
+ * 机器人消息响应
+ */
+@Data
+public class RobotResponseDTO implements RobotBaseMsg {
+ private T msg;
+}
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 37202e8..9e2bc4a 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -70,6 +70,10 @@
casic-job-quartz
${extension.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
new file mode 100644
index 0000000..85cb3d8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
@@ -0,0 +1,93 @@
+package com.casic.missiles.common;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/websocket/{userId}")
+//此注解相当于设置访问URL
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value = "userId") String userId) {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ System.out.println("【websocket消息】收到客户端消息:" + message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for (WebSocket webSocket : webSockets) {
+// System.out.println("【websocket消息】广播消息:"+message);
+ try {
+ synchronized (webSocket.session) {
+ webSocket.session.getBasicRemote().sendText(message);
+// webSocket.session.getAsyncRemote().sendText(message);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ /**
+ * 发送列表消息
+ *
+ * @param userIds 用户集合
+ * @param message 消息体
+ */
+ public void sendListMessage(List userIds, String message) {
+ System.out.println("【websocket消息】列表消息:" + message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ System.out.println("【websocket消息】单点消息:" + message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
index 77ed723..c88d4e1 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
@@ -54,15 +54,6 @@
return ResponseDataDTO.success(super.packForBT(page));
}
- /**
- * 机器人速度设置
- */
- @ApiOperation(value = "机器人设置", hidden = true)
- @PostMapping(value = "/setConfig")
- public ResponseDataDTO setConfig(@RequestBody RobotInfo robotInfo) {
- robotInfoService.updateSpeed(robotInfo);
- return ResponseDataDTO.success();
- }
/**
* 新增机器人信息管理
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
index 6e959bf..5ddb98f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
@@ -4,6 +4,7 @@
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
+import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO;
import com.casic.missiles.modular.robot.model.RobotInfo;
import com.casic.missiles.modular.robot.model.RouteInfo;
import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums;
@@ -87,6 +88,16 @@
}
/**
+ * 机器人速度设置
+ */
+ @ApiOperation(value = "机器人设置")
+ @PostMapping(value = "/setConfig")
+ public ResponseDataDTO setConfig(@RequestBody RobotInfoSetDTO robotInfo) {
+ robotInfoService.updateSpeed(robotInfo);
+ return ResponseDataDTO.success();
+ }
+
+ /**
* 机器人循迹路线读取
*
* @param request 循迹路线读取
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
index ab6659c..27b6aca 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
@@ -4,25 +4,24 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
-import org.springframework.web.bind.annotation.*;
+import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
+import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
+import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import com.casic.missiles.core.page.PageInfoBT;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
-import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
-import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
-import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
-
/**
* 机器人轨迹信息Controller
*
* @author lwh
* @date 2023-10-30
*/
-@Api(tags = "机器人轨迹信息")
+@Api(tags = "机器人历史轨迹")
@RestController
@RequestMapping("/robot/trajectoryInfo")
public class RobotTrajectoryInfoController extends BaseController {
@@ -36,7 +35,7 @@
/**
* 机器人轨迹信息列表
*/
- @ApiOperation("列表查询")
+ @ApiOperation(value = "列表查询")
@GetMapping(value = "/list")
public ResponseDataDTO> list(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
QueryWrapper query = robotTrajectoryInfoVO.genQuery();
@@ -46,7 +45,7 @@
/**
* 机器人轨迹信息分页列表
*/
- @ApiOperation("分页查询")
+ @ApiOperation(value = "分页查询", hidden = true)
@GetMapping(value = "/listPage")
public ResponseDataDTO> listPage(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
Page page = PageFactory.defaultPage();
@@ -58,37 +57,37 @@
/**
* 新增机器人轨迹信息
*/
- @ApiOperation("新增接口")
+ @ApiOperation(value = "新增接口", hidden = true)
@PostMapping(value = "/add")
- public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.save(robotTrajectoryInfo);
+ public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
+ robotTrajectoryInfoService.save(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 修改机器人轨迹信息
*/
- @ApiOperation("修改接口")
+ @ApiOperation(value = "修改接口", hidden = true)
@PostMapping(value = "/update")
public ResponseDataDTO update(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
+ robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 删除机器人轨迹信息
*/
- @ApiOperation("删除接口")
+ @ApiOperation(value = "删除接口", hidden = true)
@GetMapping(value = "/delete")
public ResponseDataDTO delete(String id) {
- robotTrajectoryInfoService.removeById(id);
+ robotTrajectoryInfoService.removeById(id);
return ResponseDataDTO.success();
}
/**
* 机器人轨迹信息详情
*/
- @ApiOperation("详情查询")
+ @ApiOperation(value = "详情查询", hidden = true)
@GetMapping(value = "/detail")
public ResponseDataDTO detail(String id) {
return ResponseDataDTO.success(robotTrajectoryInfoService.getById(id));
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
new file mode 100644
index 0000000..ab22e20
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
@@ -0,0 +1,26 @@
+package com.casic.missiles.modular.robot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class RobotInfoSetDTO {
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "机器人ID", dataType = "Long")
+ private Long id;
+ /**
+ * 设置线速度
+ */
+ @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal")
+ private BigDecimal confV;
+
+ /**
+ * 设置角速度
+ */
+ @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal")
+ private BigDecimal confW;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
index 2d8d705..191dd22 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
@@ -244,6 +244,14 @@
@ApiModelProperty(value = "当前任务信息ID", dataType = "Long")
@TableField("curr_task_id")
private Long currTaskId;
+
+ @ApiModelProperty(value = "电量", dataType = "Integer")
+ @TableField("electricity_quantity")
+ private Integer electricityQuantity;
+
+ @ApiModelProperty(value = "电压", dataType = "Integer")
+ private BigDecimal voltage;
+
@Override
public String toString() {
return "RobotStatusInfo{"
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
new file mode 100644
index 0000000..211f0e1
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.robot.opt.handler.msg;
+
+import com.casic.missiles.modular.robot.opt.handler.IBaseMsgHandler;
+import com.casic.missiles.modular.robot.service.IRobotStatusInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 机器人控制响应handler
+ */
+@Slf4j
+@Component("/app_cmd_vel_response")
+public class AppCmdVelMsgHandler implements IBaseMsgHandler {
+ private final IRobotStatusInfoService statusInfoService;
+ private static Map index = new ConcurrentHashMap<>();
+
+ static {
+ index.put("index", 0);
+ }
+
+ public AppCmdVelMsgHandler(IRobotStatusInfoService statusInfoService) {
+ this.statusInfoService = statusInfoService;
+ }
+
+ @Override
+ public void process(String robotId, String topic, MqttMessage message) {
+ statusInfoService.saveSpeed(robotId, message);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
index 5f77817..accef13 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
@@ -1,6 +1,7 @@
package com.casic.missiles.modular.robot.opt.impl;
import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
import com.casic.missiles.core.util.SpringContextHolder;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
@@ -83,6 +84,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
MessageRequestDTO messageDTO = new MessageRequestDTO();
messageDTO.setMsg(request);
+ System.out.println(JSON.toJSONString(messageDTO));
ResponseDataDTO list = robotRouteOptService.robotCmd(info, InstructCodeEnums.START_TRACK, messageDTO);
//增加循迹任务记录
@@ -91,6 +93,12 @@
return list;
}
+ /**
+ * 机器人实时控制接口
+ *
+ * @param request 请求体
+ * @return
+ */
@Override
public ResponseDataDTO appCmdVel(AppCmdVelRequest request) {
MessageRequestDTO messageDTO = new MessageRequestDTO();
@@ -98,6 +106,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
messageDTO.setMsg(request);
ResponseDataDTO responseDataDTO = robotRouteOptService.robotCmd(info, InstructCodeEnums.APP_CMD_VEL, messageDTO);
+
return responseDataDTO;
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
index 8f66f8d..4f71f0f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
@@ -56,7 +56,7 @@
messageDTO.setMsg(request);
RobotMsgResponseDTO> result = MsgUtils.senMsg(mqttClient, InstructCodeEnums.TRACK_LIST, messageDTO);
- if (result != null&&result.getMsg()!=null) {
+ if (result != null && result.getMsg() != null) {
//机器人路线更新至表中
return ResponseDataDTO.success(routeInfoService.saveListByRouteTargetIds(robotInfo, result.getMsg().getResult()));
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java
deleted file mode 100644
index cb2a843..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.casic.missiles.modular.robot.opt.instruct.base;
-
-import lombok.Data;
-
-/**
- * 机器人消息响应
- */
-@Data
-public class RobotMsgResponseDTO {
- /**
- * 是否异常
- */
- private Boolean isSuccess;
- private RobotMsgDTO msg;
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotResponseDTO.java
deleted file mode 100644
index 57551f0..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotResponseDTO.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.casic.missiles.modular.robot.opt.instruct.base;
-
-import lombok.Data;
-
-/**
- * 机器人消息响应
- */
-@Data
-public class RobotResponseDTO {
- private T msg;
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotMsgResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotMsgResponseDTO.java
new file mode 100644
index 0000000..b1b6a1c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotMsgResponseDTO.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.modular.robot.opt.instruct.base.dto;
+
+import com.casic.missiles.modular.robot.opt.instruct.base.RobotBaseMsg;
+import lombok.Data;
+
+/**
+ * 机器人响应消息体
+ */
+@Data
+public class RobotMsgResponseDTO implements RobotBaseMsg {
+ /**
+ * 是否异常
+ */
+ private Boolean isSuccess;
+ private RobotMsgDTO msg;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotResponseDTO.java
new file mode 100644
index 0000000..f395c4f
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotResponseDTO.java
@@ -0,0 +1,12 @@
+package com.casic.missiles.modular.robot.opt.instruct.base.dto;
+
+import com.casic.missiles.modular.robot.opt.instruct.base.RobotBaseMsg;
+import lombok.Data;
+
+/**
+ * 机器人消息响应
+ */
+@Data
+public class RobotResponseDTO implements RobotBaseMsg {
+ private T msg;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java
new file mode 100644
index 0000000..d749c12
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java
@@ -0,0 +1,11 @@
+package com.casic.missiles.modular.robot.opt.instruct.dto;
+
+import lombok.Data;
+
+/**
+ * 速度响应DTO
+ */
+@Data
+public class SpeedResponseDTO {
+ private SpeedDTO speed;
+}
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 37202e8..9e2bc4a 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -70,6 +70,10 @@
casic-job-quartz
${extension.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
new file mode 100644
index 0000000..85cb3d8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
@@ -0,0 +1,93 @@
+package com.casic.missiles.common;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/websocket/{userId}")
+//此注解相当于设置访问URL
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value = "userId") String userId) {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ System.out.println("【websocket消息】收到客户端消息:" + message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for (WebSocket webSocket : webSockets) {
+// System.out.println("【websocket消息】广播消息:"+message);
+ try {
+ synchronized (webSocket.session) {
+ webSocket.session.getBasicRemote().sendText(message);
+// webSocket.session.getAsyncRemote().sendText(message);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ /**
+ * 发送列表消息
+ *
+ * @param userIds 用户集合
+ * @param message 消息体
+ */
+ public void sendListMessage(List userIds, String message) {
+ System.out.println("【websocket消息】列表消息:" + message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ System.out.println("【websocket消息】单点消息:" + message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
index 77ed723..c88d4e1 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
@@ -54,15 +54,6 @@
return ResponseDataDTO.success(super.packForBT(page));
}
- /**
- * 机器人速度设置
- */
- @ApiOperation(value = "机器人设置", hidden = true)
- @PostMapping(value = "/setConfig")
- public ResponseDataDTO setConfig(@RequestBody RobotInfo robotInfo) {
- robotInfoService.updateSpeed(robotInfo);
- return ResponseDataDTO.success();
- }
/**
* 新增机器人信息管理
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
index 6e959bf..5ddb98f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
@@ -4,6 +4,7 @@
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
+import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO;
import com.casic.missiles.modular.robot.model.RobotInfo;
import com.casic.missiles.modular.robot.model.RouteInfo;
import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums;
@@ -87,6 +88,16 @@
}
/**
+ * 机器人速度设置
+ */
+ @ApiOperation(value = "机器人设置")
+ @PostMapping(value = "/setConfig")
+ public ResponseDataDTO setConfig(@RequestBody RobotInfoSetDTO robotInfo) {
+ robotInfoService.updateSpeed(robotInfo);
+ return ResponseDataDTO.success();
+ }
+
+ /**
* 机器人循迹路线读取
*
* @param request 循迹路线读取
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
index ab6659c..27b6aca 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
@@ -4,25 +4,24 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
-import org.springframework.web.bind.annotation.*;
+import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
+import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
+import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import com.casic.missiles.core.page.PageInfoBT;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
-import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
-import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
-import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
-
/**
* 机器人轨迹信息Controller
*
* @author lwh
* @date 2023-10-30
*/
-@Api(tags = "机器人轨迹信息")
+@Api(tags = "机器人历史轨迹")
@RestController
@RequestMapping("/robot/trajectoryInfo")
public class RobotTrajectoryInfoController extends BaseController {
@@ -36,7 +35,7 @@
/**
* 机器人轨迹信息列表
*/
- @ApiOperation("列表查询")
+ @ApiOperation(value = "列表查询")
@GetMapping(value = "/list")
public ResponseDataDTO> list(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
QueryWrapper query = robotTrajectoryInfoVO.genQuery();
@@ -46,7 +45,7 @@
/**
* 机器人轨迹信息分页列表
*/
- @ApiOperation("分页查询")
+ @ApiOperation(value = "分页查询", hidden = true)
@GetMapping(value = "/listPage")
public ResponseDataDTO> listPage(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
Page page = PageFactory.defaultPage();
@@ -58,37 +57,37 @@
/**
* 新增机器人轨迹信息
*/
- @ApiOperation("新增接口")
+ @ApiOperation(value = "新增接口", hidden = true)
@PostMapping(value = "/add")
- public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.save(robotTrajectoryInfo);
+ public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
+ robotTrajectoryInfoService.save(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 修改机器人轨迹信息
*/
- @ApiOperation("修改接口")
+ @ApiOperation(value = "修改接口", hidden = true)
@PostMapping(value = "/update")
public ResponseDataDTO update(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
+ robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 删除机器人轨迹信息
*/
- @ApiOperation("删除接口")
+ @ApiOperation(value = "删除接口", hidden = true)
@GetMapping(value = "/delete")
public ResponseDataDTO delete(String id) {
- robotTrajectoryInfoService.removeById(id);
+ robotTrajectoryInfoService.removeById(id);
return ResponseDataDTO.success();
}
/**
* 机器人轨迹信息详情
*/
- @ApiOperation("详情查询")
+ @ApiOperation(value = "详情查询", hidden = true)
@GetMapping(value = "/detail")
public ResponseDataDTO detail(String id) {
return ResponseDataDTO.success(robotTrajectoryInfoService.getById(id));
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
new file mode 100644
index 0000000..ab22e20
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
@@ -0,0 +1,26 @@
+package com.casic.missiles.modular.robot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class RobotInfoSetDTO {
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "机器人ID", dataType = "Long")
+ private Long id;
+ /**
+ * 设置线速度
+ */
+ @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal")
+ private BigDecimal confV;
+
+ /**
+ * 设置角速度
+ */
+ @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal")
+ private BigDecimal confW;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
index 2d8d705..191dd22 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
@@ -244,6 +244,14 @@
@ApiModelProperty(value = "当前任务信息ID", dataType = "Long")
@TableField("curr_task_id")
private Long currTaskId;
+
+ @ApiModelProperty(value = "电量", dataType = "Integer")
+ @TableField("electricity_quantity")
+ private Integer electricityQuantity;
+
+ @ApiModelProperty(value = "电压", dataType = "Integer")
+ private BigDecimal voltage;
+
@Override
public String toString() {
return "RobotStatusInfo{"
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
new file mode 100644
index 0000000..211f0e1
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.robot.opt.handler.msg;
+
+import com.casic.missiles.modular.robot.opt.handler.IBaseMsgHandler;
+import com.casic.missiles.modular.robot.service.IRobotStatusInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 机器人控制响应handler
+ */
+@Slf4j
+@Component("/app_cmd_vel_response")
+public class AppCmdVelMsgHandler implements IBaseMsgHandler {
+ private final IRobotStatusInfoService statusInfoService;
+ private static Map index = new ConcurrentHashMap<>();
+
+ static {
+ index.put("index", 0);
+ }
+
+ public AppCmdVelMsgHandler(IRobotStatusInfoService statusInfoService) {
+ this.statusInfoService = statusInfoService;
+ }
+
+ @Override
+ public void process(String robotId, String topic, MqttMessage message) {
+ statusInfoService.saveSpeed(robotId, message);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
index 5f77817..accef13 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
@@ -1,6 +1,7 @@
package com.casic.missiles.modular.robot.opt.impl;
import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
import com.casic.missiles.core.util.SpringContextHolder;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
@@ -83,6 +84,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
MessageRequestDTO messageDTO = new MessageRequestDTO();
messageDTO.setMsg(request);
+ System.out.println(JSON.toJSONString(messageDTO));
ResponseDataDTO list = robotRouteOptService.robotCmd(info, InstructCodeEnums.START_TRACK, messageDTO);
//增加循迹任务记录
@@ -91,6 +93,12 @@
return list;
}
+ /**
+ * 机器人实时控制接口
+ *
+ * @param request 请求体
+ * @return
+ */
@Override
public ResponseDataDTO appCmdVel(AppCmdVelRequest request) {
MessageRequestDTO messageDTO = new MessageRequestDTO();
@@ -98,6 +106,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
messageDTO.setMsg(request);
ResponseDataDTO responseDataDTO = robotRouteOptService.robotCmd(info, InstructCodeEnums.APP_CMD_VEL, messageDTO);
+
return responseDataDTO;
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
index 8f66f8d..4f71f0f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
@@ -56,7 +56,7 @@
messageDTO.setMsg(request);
RobotMsgResponseDTO> result = MsgUtils.senMsg(mqttClient, InstructCodeEnums.TRACK_LIST, messageDTO);
- if (result != null&&result.getMsg()!=null) {
+ if (result != null && result.getMsg() != null) {
//机器人路线更新至表中
return ResponseDataDTO.success(routeInfoService.saveListByRouteTargetIds(robotInfo, result.getMsg().getResult()));
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java
deleted file mode 100644
index cb2a843..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.casic.missiles.modular.robot.opt.instruct.base;
-
-import lombok.Data;
-
-/**
- * 机器人消息响应
- */
-@Data
-public class RobotMsgResponseDTO {
- /**
- * 是否异常
- */
- private Boolean isSuccess;
- private RobotMsgDTO msg;
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotResponseDTO.java
deleted file mode 100644
index 57551f0..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotResponseDTO.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.casic.missiles.modular.robot.opt.instruct.base;
-
-import lombok.Data;
-
-/**
- * 机器人消息响应
- */
-@Data
-public class RobotResponseDTO {
- private T msg;
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotMsgResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotMsgResponseDTO.java
new file mode 100644
index 0000000..b1b6a1c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotMsgResponseDTO.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.modular.robot.opt.instruct.base.dto;
+
+import com.casic.missiles.modular.robot.opt.instruct.base.RobotBaseMsg;
+import lombok.Data;
+
+/**
+ * 机器人响应消息体
+ */
+@Data
+public class RobotMsgResponseDTO implements RobotBaseMsg {
+ /**
+ * 是否异常
+ */
+ private Boolean isSuccess;
+ private RobotMsgDTO msg;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotResponseDTO.java
new file mode 100644
index 0000000..f395c4f
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotResponseDTO.java
@@ -0,0 +1,12 @@
+package com.casic.missiles.modular.robot.opt.instruct.base.dto;
+
+import com.casic.missiles.modular.robot.opt.instruct.base.RobotBaseMsg;
+import lombok.Data;
+
+/**
+ * 机器人消息响应
+ */
+@Data
+public class RobotResponseDTO implements RobotBaseMsg {
+ private T msg;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java
new file mode 100644
index 0000000..d749c12
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java
@@ -0,0 +1,11 @@
+package com.casic.missiles.modular.robot.opt.instruct.dto;
+
+import lombok.Data;
+
+/**
+ * 速度响应DTO
+ */
+@Data
+public class SpeedResponseDTO {
+ private SpeedDTO speed;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotInfoService.java
index e3bb91c..2f8eba5 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotInfoService.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotInfoService.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO;
import com.casic.missiles.modular.robot.model.RobotInfo;
import java.util.List;
@@ -27,5 +28,5 @@
*
* @param robotInfo 机器信息
*/
- void updateSpeed(RobotInfo robotInfo);
+ void updateSpeed(RobotInfoSetDTO robotInfo);
}
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 37202e8..9e2bc4a 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -70,6 +70,10 @@
casic-job-quartz
${extension.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
new file mode 100644
index 0000000..85cb3d8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
@@ -0,0 +1,93 @@
+package com.casic.missiles.common;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/websocket/{userId}")
+//此注解相当于设置访问URL
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value = "userId") String userId) {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ System.out.println("【websocket消息】收到客户端消息:" + message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for (WebSocket webSocket : webSockets) {
+// System.out.println("【websocket消息】广播消息:"+message);
+ try {
+ synchronized (webSocket.session) {
+ webSocket.session.getBasicRemote().sendText(message);
+// webSocket.session.getAsyncRemote().sendText(message);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ /**
+ * 发送列表消息
+ *
+ * @param userIds 用户集合
+ * @param message 消息体
+ */
+ public void sendListMessage(List userIds, String message) {
+ System.out.println("【websocket消息】列表消息:" + message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ System.out.println("【websocket消息】单点消息:" + message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
index 77ed723..c88d4e1 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
@@ -54,15 +54,6 @@
return ResponseDataDTO.success(super.packForBT(page));
}
- /**
- * 机器人速度设置
- */
- @ApiOperation(value = "机器人设置", hidden = true)
- @PostMapping(value = "/setConfig")
- public ResponseDataDTO setConfig(@RequestBody RobotInfo robotInfo) {
- robotInfoService.updateSpeed(robotInfo);
- return ResponseDataDTO.success();
- }
/**
* 新增机器人信息管理
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
index 6e959bf..5ddb98f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
@@ -4,6 +4,7 @@
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
+import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO;
import com.casic.missiles.modular.robot.model.RobotInfo;
import com.casic.missiles.modular.robot.model.RouteInfo;
import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums;
@@ -87,6 +88,16 @@
}
/**
+ * 机器人速度设置
+ */
+ @ApiOperation(value = "机器人设置")
+ @PostMapping(value = "/setConfig")
+ public ResponseDataDTO setConfig(@RequestBody RobotInfoSetDTO robotInfo) {
+ robotInfoService.updateSpeed(robotInfo);
+ return ResponseDataDTO.success();
+ }
+
+ /**
* 机器人循迹路线读取
*
* @param request 循迹路线读取
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
index ab6659c..27b6aca 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
@@ -4,25 +4,24 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
-import org.springframework.web.bind.annotation.*;
+import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
+import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
+import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import com.casic.missiles.core.page.PageInfoBT;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
-import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
-import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
-import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
-
/**
* 机器人轨迹信息Controller
*
* @author lwh
* @date 2023-10-30
*/
-@Api(tags = "机器人轨迹信息")
+@Api(tags = "机器人历史轨迹")
@RestController
@RequestMapping("/robot/trajectoryInfo")
public class RobotTrajectoryInfoController extends BaseController {
@@ -36,7 +35,7 @@
/**
* 机器人轨迹信息列表
*/
- @ApiOperation("列表查询")
+ @ApiOperation(value = "列表查询")
@GetMapping(value = "/list")
public ResponseDataDTO> list(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
QueryWrapper query = robotTrajectoryInfoVO.genQuery();
@@ -46,7 +45,7 @@
/**
* 机器人轨迹信息分页列表
*/
- @ApiOperation("分页查询")
+ @ApiOperation(value = "分页查询", hidden = true)
@GetMapping(value = "/listPage")
public ResponseDataDTO> listPage(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
Page page = PageFactory.defaultPage();
@@ -58,37 +57,37 @@
/**
* 新增机器人轨迹信息
*/
- @ApiOperation("新增接口")
+ @ApiOperation(value = "新增接口", hidden = true)
@PostMapping(value = "/add")
- public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.save(robotTrajectoryInfo);
+ public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
+ robotTrajectoryInfoService.save(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 修改机器人轨迹信息
*/
- @ApiOperation("修改接口")
+ @ApiOperation(value = "修改接口", hidden = true)
@PostMapping(value = "/update")
public ResponseDataDTO update(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
+ robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 删除机器人轨迹信息
*/
- @ApiOperation("删除接口")
+ @ApiOperation(value = "删除接口", hidden = true)
@GetMapping(value = "/delete")
public ResponseDataDTO delete(String id) {
- robotTrajectoryInfoService.removeById(id);
+ robotTrajectoryInfoService.removeById(id);
return ResponseDataDTO.success();
}
/**
* 机器人轨迹信息详情
*/
- @ApiOperation("详情查询")
+ @ApiOperation(value = "详情查询", hidden = true)
@GetMapping(value = "/detail")
public ResponseDataDTO detail(String id) {
return ResponseDataDTO.success(robotTrajectoryInfoService.getById(id));
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
new file mode 100644
index 0000000..ab22e20
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
@@ -0,0 +1,26 @@
+package com.casic.missiles.modular.robot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class RobotInfoSetDTO {
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "机器人ID", dataType = "Long")
+ private Long id;
+ /**
+ * 设置线速度
+ */
+ @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal")
+ private BigDecimal confV;
+
+ /**
+ * 设置角速度
+ */
+ @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal")
+ private BigDecimal confW;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
index 2d8d705..191dd22 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
@@ -244,6 +244,14 @@
@ApiModelProperty(value = "当前任务信息ID", dataType = "Long")
@TableField("curr_task_id")
private Long currTaskId;
+
+ @ApiModelProperty(value = "电量", dataType = "Integer")
+ @TableField("electricity_quantity")
+ private Integer electricityQuantity;
+
+ @ApiModelProperty(value = "电压", dataType = "Integer")
+ private BigDecimal voltage;
+
@Override
public String toString() {
return "RobotStatusInfo{"
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
new file mode 100644
index 0000000..211f0e1
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.robot.opt.handler.msg;
+
+import com.casic.missiles.modular.robot.opt.handler.IBaseMsgHandler;
+import com.casic.missiles.modular.robot.service.IRobotStatusInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 机器人控制响应handler
+ */
+@Slf4j
+@Component("/app_cmd_vel_response")
+public class AppCmdVelMsgHandler implements IBaseMsgHandler {
+ private final IRobotStatusInfoService statusInfoService;
+ private static Map index = new ConcurrentHashMap<>();
+
+ static {
+ index.put("index", 0);
+ }
+
+ public AppCmdVelMsgHandler(IRobotStatusInfoService statusInfoService) {
+ this.statusInfoService = statusInfoService;
+ }
+
+ @Override
+ public void process(String robotId, String topic, MqttMessage message) {
+ statusInfoService.saveSpeed(robotId, message);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
index 5f77817..accef13 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
@@ -1,6 +1,7 @@
package com.casic.missiles.modular.robot.opt.impl;
import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
import com.casic.missiles.core.util.SpringContextHolder;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
@@ -83,6 +84,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
MessageRequestDTO messageDTO = new MessageRequestDTO();
messageDTO.setMsg(request);
+ System.out.println(JSON.toJSONString(messageDTO));
ResponseDataDTO list = robotRouteOptService.robotCmd(info, InstructCodeEnums.START_TRACK, messageDTO);
//增加循迹任务记录
@@ -91,6 +93,12 @@
return list;
}
+ /**
+ * 机器人实时控制接口
+ *
+ * @param request 请求体
+ * @return
+ */
@Override
public ResponseDataDTO appCmdVel(AppCmdVelRequest request) {
MessageRequestDTO messageDTO = new MessageRequestDTO();
@@ -98,6 +106,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
messageDTO.setMsg(request);
ResponseDataDTO responseDataDTO = robotRouteOptService.robotCmd(info, InstructCodeEnums.APP_CMD_VEL, messageDTO);
+
return responseDataDTO;
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
index 8f66f8d..4f71f0f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotRouteOptServiceImpl.java
@@ -56,7 +56,7 @@
messageDTO.setMsg(request);
RobotMsgResponseDTO> result = MsgUtils.senMsg(mqttClient, InstructCodeEnums.TRACK_LIST, messageDTO);
- if (result != null&&result.getMsg()!=null) {
+ if (result != null && result.getMsg() != null) {
//机器人路线更新至表中
return ResponseDataDTO.success(routeInfoService.saveListByRouteTargetIds(robotInfo, result.getMsg().getResult()));
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java
deleted file mode 100644
index cb2a843..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotMsgResponseDTO.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.casic.missiles.modular.robot.opt.instruct.base;
-
-import lombok.Data;
-
-/**
- * 机器人消息响应
- */
-@Data
-public class RobotMsgResponseDTO {
- /**
- * 是否异常
- */
- private Boolean isSuccess;
- private RobotMsgDTO msg;
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotResponseDTO.java
deleted file mode 100644
index 57551f0..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/RobotResponseDTO.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.casic.missiles.modular.robot.opt.instruct.base;
-
-import lombok.Data;
-
-/**
- * 机器人消息响应
- */
-@Data
-public class RobotResponseDTO {
- private T msg;
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotMsgResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotMsgResponseDTO.java
new file mode 100644
index 0000000..b1b6a1c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotMsgResponseDTO.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.modular.robot.opt.instruct.base.dto;
+
+import com.casic.missiles.modular.robot.opt.instruct.base.RobotBaseMsg;
+import lombok.Data;
+
+/**
+ * 机器人响应消息体
+ */
+@Data
+public class RobotMsgResponseDTO implements RobotBaseMsg {
+ /**
+ * 是否异常
+ */
+ private Boolean isSuccess;
+ private RobotMsgDTO msg;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotResponseDTO.java
new file mode 100644
index 0000000..f395c4f
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/base/dto/RobotResponseDTO.java
@@ -0,0 +1,12 @@
+package com.casic.missiles.modular.robot.opt.instruct.base.dto;
+
+import com.casic.missiles.modular.robot.opt.instruct.base.RobotBaseMsg;
+import lombok.Data;
+
+/**
+ * 机器人消息响应
+ */
+@Data
+public class RobotResponseDTO implements RobotBaseMsg {
+ private T msg;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java
new file mode 100644
index 0000000..d749c12
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/instruct/dto/SpeedResponseDTO.java
@@ -0,0 +1,11 @@
+package com.casic.missiles.modular.robot.opt.instruct.dto;
+
+import lombok.Data;
+
+/**
+ * 速度响应DTO
+ */
+@Data
+public class SpeedResponseDTO {
+ private SpeedDTO speed;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotInfoService.java
index e3bb91c..2f8eba5 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotInfoService.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotInfoService.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO;
import com.casic.missiles.modular.robot.model.RobotInfo;
import java.util.List;
@@ -27,5 +28,5 @@
*
* @param robotInfo 机器信息
*/
- void updateSpeed(RobotInfo robotInfo);
+ void updateSpeed(RobotInfoSetDTO robotInfo);
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java
index 4cfeccf..1f725a5 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/service/IRobotStatusInfoService.java
@@ -69,8 +69,15 @@
* @param currRouteId 当前路线信息
* @param currTaskId 当前任务信息
*/
- void updateCurrTask(String robotId,Long currRouteId, Long currTaskId);
+ void updateCurrTask(String robotId, Long currRouteId, Long currTaskId);
RobotStatusInfo getStatusByRobotId(String robotId);
+ /**
+ * 机器人速度读取
+ *
+ * @param robotId 机器ID
+ * @param message 速度响应
+ */
+ void saveSpeed(String robotId, MqttMessage message);
}
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
index d1cff15..89b2341 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/controller/PtzNetController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -34,7 +35,7 @@
private final IDeviceOperationService operationService;
private final IDeviceInfoSupportService infoSupportService;
- public PtzNetController(IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
+ public PtzNetController(@Lazy IHCNetService ihcNetService, IDeviceOperationService operationService, IDeviceInfoSupportService infoSupportService) {
this.ihcNetService = ihcNetService;
this.operationService = operationService;
this.infoSupportService = infoSupportService;
diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
index dd20c76..0ce9e22 100644
--- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
+++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java
@@ -19,6 +19,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,7 +28,7 @@
private static final Logger logger = LoggerFactory.getLogger(HCNetServiceImpl.class);
-
+ @Lazy
private static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
private HCNetSDK.FSerialDataCallBack fSerialDataCallBack = new SerialDataCallBack();
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 37202e8..9e2bc4a 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -70,6 +70,10 @@
casic-job-quartz
${extension.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
new file mode 100644
index 0000000..85cb3d8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/common/WebSocket.java
@@ -0,0 +1,93 @@
+package com.casic.missiles.common;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/websocket/{userId}")
+//此注解相当于设置访问URL
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value = "userId") String userId) {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ System.out.println(userId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ System.out.println("【websocket消息】收到客户端消息:" + message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for (WebSocket webSocket : webSockets) {
+// System.out.println("【websocket消息】广播消息:"+message);
+ try {
+ synchronized (webSocket.session) {
+ webSocket.session.getBasicRemote().sendText(message);
+// webSocket.session.getAsyncRemote().sendText(message);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ /**
+ * 发送列表消息
+ *
+ * @param userIds 用户集合
+ * @param message 消息体
+ */
+ public void sendListMessage(List userIds, String message) {
+ System.out.println("【websocket消息】列表消息:" + message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ System.out.println("【websocket消息】单点消息:" + message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
index 77ed723..c88d4e1 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotInfoController.java
@@ -54,15 +54,6 @@
return ResponseDataDTO.success(super.packForBT(page));
}
- /**
- * 机器人速度设置
- */
- @ApiOperation(value = "机器人设置", hidden = true)
- @PostMapping(value = "/setConfig")
- public ResponseDataDTO setConfig(@RequestBody RobotInfo robotInfo) {
- robotInfoService.updateSpeed(robotInfo);
- return ResponseDataDTO.success();
- }
/**
* 新增机器人信息管理
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
index 6e959bf..5ddb98f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotOptController.java
@@ -4,6 +4,7 @@
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
+import com.casic.missiles.modular.robot.dto.RobotInfoSetDTO;
import com.casic.missiles.modular.robot.model.RobotInfo;
import com.casic.missiles.modular.robot.model.RouteInfo;
import com.casic.missiles.modular.robot.opt.enums.InstructCodeEnums;
@@ -87,6 +88,16 @@
}
/**
+ * 机器人速度设置
+ */
+ @ApiOperation(value = "机器人设置")
+ @PostMapping(value = "/setConfig")
+ public ResponseDataDTO setConfig(@RequestBody RobotInfoSetDTO robotInfo) {
+ robotInfoService.updateSpeed(robotInfo);
+ return ResponseDataDTO.success();
+ }
+
+ /**
* 机器人循迹路线读取
*
* @param request 循迹路线读取
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
index ab6659c..27b6aca 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/controller/RobotTrajectoryInfoController.java
@@ -4,25 +4,24 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
-import org.springframework.web.bind.annotation.*;
+import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
+import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
+import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import com.casic.missiles.core.page.PageInfoBT;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
-import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService;
-import com.casic.missiles.modular.robot.model.RobotTrajectoryInfo;
-import com.casic.missiles.modular.robot.vo.RobotTrajectoryInfoVO;
-
/**
* 机器人轨迹信息Controller
*
* @author lwh
* @date 2023-10-30
*/
-@Api(tags = "机器人轨迹信息")
+@Api(tags = "机器人历史轨迹")
@RestController
@RequestMapping("/robot/trajectoryInfo")
public class RobotTrajectoryInfoController extends BaseController {
@@ -36,7 +35,7 @@
/**
* 机器人轨迹信息列表
*/
- @ApiOperation("列表查询")
+ @ApiOperation(value = "列表查询")
@GetMapping(value = "/list")
public ResponseDataDTO> list(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
QueryWrapper query = robotTrajectoryInfoVO.genQuery();
@@ -46,7 +45,7 @@
/**
* 机器人轨迹信息分页列表
*/
- @ApiOperation("分页查询")
+ @ApiOperation(value = "分页查询", hidden = true)
@GetMapping(value = "/listPage")
public ResponseDataDTO> listPage(RobotTrajectoryInfoVO robotTrajectoryInfoVO) {
Page page = PageFactory.defaultPage();
@@ -58,37 +57,37 @@
/**
* 新增机器人轨迹信息
*/
- @ApiOperation("新增接口")
+ @ApiOperation(value = "新增接口", hidden = true)
@PostMapping(value = "/add")
- public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.save(robotTrajectoryInfo);
+ public ResponseDataDTO add(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
+ robotTrajectoryInfoService.save(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 修改机器人轨迹信息
*/
- @ApiOperation("修改接口")
+ @ApiOperation(value = "修改接口", hidden = true)
@PostMapping(value = "/update")
public ResponseDataDTO update(@RequestBody RobotTrajectoryInfo robotTrajectoryInfo) {
- robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
+ robotTrajectoryInfoService.updateById(robotTrajectoryInfo);
return ResponseDataDTO.success();
}
/**
* 删除机器人轨迹信息
*/
- @ApiOperation("删除接口")
+ @ApiOperation(value = "删除接口", hidden = true)
@GetMapping(value = "/delete")
public ResponseDataDTO delete(String id) {
- robotTrajectoryInfoService.removeById(id);
+ robotTrajectoryInfoService.removeById(id);
return ResponseDataDTO.success();
}
/**
* 机器人轨迹信息详情
*/
- @ApiOperation("详情查询")
+ @ApiOperation(value = "详情查询", hidden = true)
@GetMapping(value = "/detail")
public ResponseDataDTO detail(String id) {
return ResponseDataDTO.success(robotTrajectoryInfoService.getById(id));
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
new file mode 100644
index 0000000..ab22e20
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/dto/RobotInfoSetDTO.java
@@ -0,0 +1,26 @@
+package com.casic.missiles.modular.robot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class RobotInfoSetDTO {
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "机器人ID", dataType = "Long")
+ private Long id;
+ /**
+ * 设置线速度
+ */
+ @ApiModelProperty(value = "设置线速度", dataType = "BigDecimal")
+ private BigDecimal confV;
+
+ /**
+ * 设置角速度
+ */
+ @ApiModelProperty(value = "设置角速度", dataType = "BigDecimal")
+ private BigDecimal confW;
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
index 2d8d705..191dd22 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/model/RobotStatusInfo.java
@@ -244,6 +244,14 @@
@ApiModelProperty(value = "当前任务信息ID", dataType = "Long")
@TableField("curr_task_id")
private Long currTaskId;
+
+ @ApiModelProperty(value = "电量", dataType = "Integer")
+ @TableField("electricity_quantity")
+ private Integer electricityQuantity;
+
+ @ApiModelProperty(value = "电压", dataType = "Integer")
+ private BigDecimal voltage;
+
@Override
public String toString() {
return "RobotStatusInfo{"
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
new file mode 100644
index 0000000..211f0e1
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/handler/msg/AppCmdVelMsgHandler.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.robot.opt.handler.msg;
+
+import com.casic.missiles.modular.robot.opt.handler.IBaseMsgHandler;
+import com.casic.missiles.modular.robot.service.IRobotStatusInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 机器人控制响应handler
+ */
+@Slf4j
+@Component("/app_cmd_vel_response")
+public class AppCmdVelMsgHandler implements IBaseMsgHandler {
+ private final IRobotStatusInfoService statusInfoService;
+ private static Map index = new ConcurrentHashMap<>();
+
+ static {
+ index.put("index", 0);
+ }
+
+ public AppCmdVelMsgHandler(IRobotStatusInfoService statusInfoService) {
+ this.statusInfoService = statusInfoService;
+ }
+
+ @Override
+ public void process(String robotId, String topic, MqttMessage message) {
+ statusInfoService.saveSpeed(robotId, message);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
index 5f77817..accef13 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/robot/opt/impl/RobotOptServiceImpl.java
@@ -1,6 +1,7 @@
package com.casic.missiles.modular.robot.opt.impl;
import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
import com.casic.missiles.core.util.SpringContextHolder;
import com.casic.missiles.model.response.dto.ResponseDataDTO;
import com.casic.missiles.modular.robot.IBaseRobotService;
@@ -83,6 +84,7 @@
RobotInfo info = robotInfoService.getById(request.getRobotId());
MessageRequestDTO