From ab55c60112c72fcfe7836a91a278f316cddd7c00 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Thu, 20 Feb 2025 16:58:07 +0800
Subject: [PATCH] 添加无人机控制权申请、处理、释放

---
 ard-work/src/main/java/com/ard/tianyu/service/impl/UavControlManager.java |   26 +++++++++++++++-----------
 1 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/ard-work/src/main/java/com/ard/tianyu/service/impl/UavControlManager.java b/ard-work/src/main/java/com/ard/tianyu/service/impl/UavControlManager.java
index 31d6be5..908a009 100644
--- a/ard-work/src/main/java/com/ard/tianyu/service/impl/UavControlManager.java
+++ b/ard-work/src/main/java/com/ard/tianyu/service/impl/UavControlManager.java
@@ -3,7 +3,7 @@
 import com.alibaba.fastjson2.JSON;
 import com.ard.common.exception.NoPermissionException;
 import com.ard.common.utils.SecurityUtils;
-import com.ard.tianyu.websocket.domain.ControlRequestMessage;
+import com.ard.tianyu.websocket.domain.ControlMessage;
 import com.ard.tianyu.websocket.domain.WsMessage;
 import com.ard.tianyu.websocket.utils.WebSocketUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -22,14 +22,14 @@
     public static final ConcurrentHashMap<String, Long> controlRequestMap = new ConcurrentHashMap<>();
 
     // 发送通知(通过 WebSocket推送)
-    public void notifyMessage(String boxSn, String action, Long controller, Long requester) {
-        ControlRequestMessage controlRequestMessage = ControlRequestMessage.builder()
+    public void notifyMessage(String boxSn, String action, Long source, Long target) {
+        ControlMessage controlMessage = ControlMessage.builder()
                 .boxSn(boxSn)
-                .requester(requester)
+                .userId(source)
                 .action(action)
                 .build();
-        WsMessage<ControlRequestMessage> wsMessage = new WsMessage<>("controlRequest", controlRequestMessage);
-        WebSocketUtil.sendMessage(controller.toString(), JSON.toJSONString(wsMessage));
+        WsMessage<ControlMessage> wsMessage = new WsMessage<>("controlRequest", controlMessage);
+        WebSocketUtil.sendMessage(target.toString(), JSON.toJSONString(wsMessage));
     }
 
     // 申请控制
@@ -42,11 +42,13 @@
         }
         // 如果无人机已经有控制者,则发送申请给当前控制者
         Long controller = droneControlMap.get(boxSn);
-        if(!controller.equals(requester)) {
+        if (!controller.equals(requester)) {
             // 则将控制请求加入请求队列
             controlRequestMap.put(boxSn, requester);
             // 通知当前控制者,有新的控制请求
-            notifyMessage(boxSn, "request", controller, requester);
+            notifyMessage(boxSn, "request", requester, controller);
+        } else {
+            throw new NoPermissionException("当前已经获取控制权,无需重复申请");
         }
         return false; // 等待当前控制者的同意
     }
@@ -60,15 +62,17 @@
             if (approve) {
                 // 同意控制,将控制权赋予请求者
                 droneControlMap.put(boxSn, requester);
-                notifyMessage(boxSn, "approve", requester, controller);
+                notifyMessage(boxSn, "approve", controller, requester);
             } else {
-                notifyMessage(boxSn, "reject", requester, controller);
+                notifyMessage(boxSn, "reject", controller, requester);
             }
             // 无论同意还是拒绝,都移除控制请求
             controlRequestMap.remove(boxSn);
             return true;
         }
-        return false;
+        else {
+            throw new NoPermissionException("无申请不需要处理控制权");
+        }
     }
 
     // 释放控制

--
Gitblit v1.9.3