liusuyi
2025-03-19 d267efe74181bbc89e7ecda1032f11965984769b
ard-work/src/main/java/com/ard/tianyu/service/control/UavControlService.java
@@ -1,11 +1,14 @@
package com.ard.tianyu.service.control;
import com.ard.common.exception.NoPermissionException;
import com.ard.common.exception.ControlException;
import com.ard.common.utils.SecurityUtils;
import com.ard.tianyu.websocket.domain.UavControlType;
import com.ard.tianyu.websocket.handler.UavControlManager;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
@@ -15,7 +18,7 @@
public class UavControlService {
    @Resource
    private WebSocketService webSocketService;
    private UavControlManager uavControlManager;
    /**
     * 记录当前获得飞行控制权限的用户
@@ -63,9 +66,9 @@
        }
        if (!controller.equals(requester)) {
            requestMap.put(boxSn, requester);
            webSocketService.sendControlRequest(controller, boxSn, controlType.getType(), requester);
            uavControlManager.sendControlRequest(controller, boxSn, controlType.getType(), requester);
        } else {
            throw new NoPermissionException("当前已拥有控制权");
            throw new ControlException("当前已拥有控制权");
        }
        return false;
    }
@@ -93,14 +96,14 @@
        Long requester = requestMap.get(boxSn);
        if (requester == null || requester.equals(controller)) {
            throw new NoPermissionException("无控制请求");
            throw new ControlException("无控制请求");
        }
        if (approve) {
            getControlMap(controlType).put(boxSn, requester);
            webSocketService.sendControlApproval(requester, boxSn, controlType.getType());
            uavControlManager.sendControlApproval(requester, boxSn, controlType.getType());
        } else {
            webSocketService.sendControlRejection(requester, boxSn, controlType.getType());
            uavControlManager.sendControlRejection(requester, boxSn, controlType.getType());
        }
        requestMap.remove(boxSn);
@@ -127,11 +130,11 @@
        ConcurrentHashMap<String, Long> controlMap = getControlMap(controlType);
        if (!controller.equals(controlMap.get(boxSn))) {
            throw new NoPermissionException("没有该设备的" + controlType.getType().toUpperCase() + "控制权");
            throw new ControlException("没有该设备的" + controlType.getType().toUpperCase() + "控制权");
        }
        controlMap.remove(boxSn);
        webSocketService.sendControlRelease(boxSn, controlType.getType());
        uavControlManager.sendControlRelease(boxSn, controlType.getType());
        return true;
    }
@@ -157,7 +160,14 @@
        UavControlType controlType = UavControlType.fromString(type);
        return getControlMap(controlType).get(boxSn);
    }
    public Map<String,Long> getCurrentController(String boxSn) {
        Long flyController = uavFlyControlMap.get(boxSn);
        Map<String,Long> map=new HashMap<>();
        map.put("flyController",flyController);
        Long payloadController = uavPayloadControlMap.get(boxSn);
        map.put("payloadController",payloadController);
        return map;
    }
    /**
     * 根据控制类型获取对应的控制 Map
     */