From b0dd7ca693fcd13e539316cfc8c63150182a0315 Mon Sep 17 00:00:00 2001
From: aix <vip_xiaobin810@163.com>
Date: Tue, 20 Aug 2024 15:18:12 +0800
Subject: [PATCH] 红外设置

---
 src/main/java/com/dji/sample/control/controller/DockController.java |  181 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 179 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/dji/sample/control/controller/DockController.java b/src/main/java/com/dji/sample/control/controller/DockController.java
index 7836e5f..6f1ecf8 100644
--- a/src/main/java/com/dji/sample/control/controller/DockController.java
+++ b/src/main/java/com/dji/sample/control/controller/DockController.java
@@ -1,11 +1,33 @@
 package com.dji.sample.control.controller;
 
 import com.dji.sample.common.model.ResponseResult;
-import com.dji.sample.control.model.param.RemoteDebugParam;
+import com.dji.sample.component.redis.RedisConst;
+import com.dji.sample.component.redis.RedisOpsUtils;
+import com.dji.sample.control.model.enums.CameraModeEnum;
+import com.dji.sample.control.model.enums.DroneAuthorityEnum;
+import com.dji.sample.control.model.enums.PayloadCommandsEnum;
+import com.dji.sample.control.model.param.*;
 import com.dji.sample.control.service.IControlService;
+import com.dji.sample.log.aspect.SysLogAnnotation;
+import com.dji.sample.manage.model.dto.CapacityCameraDTO;
+import com.dji.sample.manage.model.dto.DeviceDTO;
+import com.dji.sample.manage.model.enums.DeviceModeCodeEnum;
+import com.dji.sample.manage.model.param.DeviceQueryParam;
+import com.dji.sample.manage.model.receiver.OsdCameraReceiver;
+import com.dji.sample.manage.model.receiver.OsdDockReceiver;
+import com.dji.sample.manage.model.receiver.OsdSubDeviceReceiver;
+import com.dji.sample.manage.service.ICapacityCameraService;
+import com.dji.sample.manage.service.IDeviceService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Objects;
+import java.util.UUID;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
 
 /**
  * @author sean
@@ -20,10 +42,165 @@
     @Autowired
     private IControlService controlService;
 
+    @Autowired
+    private ICapacityCameraService capacityCameraService;
+
+    @Autowired
+    private IDeviceService deviceService;
+
     @PostMapping("/{sn}/jobs/{service_identifier}")
+    @SysLogAnnotation(operModul = "机场控制", operType = "控制指令", operDesc = "控制指令")
     public ResponseResult createControlJob(@PathVariable String sn,
                                            @PathVariable("service_identifier") String serviceIdentifier,
                                            @RequestBody(required = false) RemoteDebugParam param) {
-        return controlService.controlDock(sn, serviceIdentifier, param);
+        return controlService.controlDockDebug(sn, serviceIdentifier, param);
     }
+
+    @PostMapping("/{sn}/jobs/fly-to-point")
+    @SysLogAnnotation(operModul = "机场控制", operType = "控制指令", operDesc = "起飞")
+    public ResponseResult flyToPoint(@PathVariable String sn, @Valid @RequestBody FlyToPointParam param) {
+        return controlService.flyToPoint(sn, param);
+    }
+
+    @DeleteMapping("/{sn}/jobs/fly-to-point")
+    @SysLogAnnotation(operModul = "机场控制", operType = "控制指令", operDesc = "停止起飞")
+    public ResponseResult flyToPointStop(@PathVariable String sn) {
+        return controlService.flyToPointStop(sn);
+    }
+
+    @PostMapping("/{sn}/jobs/takeoff-to-point")
+    @SysLogAnnotation(operModul = "机场控制", operType = "控制指令", operDesc = "一键起飞")
+    public ResponseResult takeoffToPoint(@PathVariable String sn, @Valid @RequestBody TakeoffToPointParam param) {
+        return controlService.takeoffToPoint(sn, param);
+    }
+
+    @PostMapping("/{sn}/authority/flight")
+    public ResponseResult seizeFlightAuthority(@PathVariable String sn) {
+        return controlService.seizeAuthority(sn, DroneAuthorityEnum.FLIGHT, null);
+    }
+
+    @PostMapping("/{sn}/authority/payload")
+    @SysLogAnnotation(operModul = "机场控制", operType = "控制指令", operDesc = "负载控制")
+    public ResponseResult seizePayloadAuthority(@PathVariable String sn, @Valid @RequestBody DronePayloadParam param) {
+        return controlService.seizeAuthority(sn, DroneAuthorityEnum.PAYLOAD, param);
+    }
+
+    @PostMapping("/{sn}/payload/commands")
+    @SysLogAnnotation(operModul = "机场控制", operType = "控制指令", operDesc = "相机模式开关")
+    public ResponseResult payloadCommands(@PathVariable String sn, @Valid @RequestBody PayloadCommandsParam param) throws Exception {
+        param.setSn(sn);
+        return controlService.payloadCommands(param);
+    }
+
+    @GetMapping("/{sn}/payload/photoAndVideoCmd/{type}")
+    @SysLogAnnotation(operModul = "云台拍照录像控制", operType = "控制指令", operDesc = "云台拍照录像控制")
+    public ResponseResult photoAndVideoCmd(@PathVariable String sn, @PathVariable String type) throws Exception {
+
+        String bid = UUID.randomUUID().toString();
+
+        List<DeviceDTO> list = deviceService.getDevicesByParams(DeviceQueryParam.builder().deviceSn(sn).build());
+
+        if (list.isEmpty()) {
+            return ResponseResult.error("机场离线!");
+        }
+
+        DeviceDTO deviceDTO = list.get(0);
+
+        //无人机设备相机信息
+        String key = RedisConst.OSD_PREFIX + deviceDTO.getChildDeviceSn();
+        OsdSubDeviceReceiver redisData = (OsdSubDeviceReceiver) RedisOpsUtils.get(key);
+        log.info("无人机设备相机信息osd:{}",redisData);
+
+        if (null == redisData) {
+            return ResponseResult.error("无人机设备离线!");
+        }
+
+        //无人机osd信息
+        List<OsdCameraReceiver> osdCameraReceiverList = redisData.getCameras();
+        OsdCameraReceiver cameraDTO = osdCameraReceiverList.get(0);
+
+        //获取负载控制
+        ResponseResult result = getPayload(sn,cameraDTO);
+        log.info("获取负载:{}",result);
+        if (result.getCode() != 0) {
+            return result;
+        }
+
+        PayloadCommandsParam param = new PayloadCommandsParam();
+        param.setSn(sn);
+        DronePayloadParam data = new DronePayloadParam();
+        data.setPayloadIndex(cameraDTO.getPayloadIndex());
+
+        //拍照
+        switch (type) {
+            case "photo":
+                if (!Objects.equals(cameraDTO.getCameraMode().getMode(), CameraModeEnum.PHOTO.getMode())) {
+                    //切换模式
+                    ResponseResult swResult = switchingMode(sn, CameraModeEnum.PHOTO, cameraDTO);
+                    log.info("摄像头切换状态:{}", swResult);
+                }
+                param.setCmd(PayloadCommandsEnum.CAMERA_PHOTO_TAKE);
+                param.setData(data);
+                break;
+            case "video_start": {//开始录像
+                if (!Objects.equals(cameraDTO.getCameraMode().getMode(), CameraModeEnum.VIDEO.getMode())) {
+                    //切换模式
+                    ResponseResult swResult = switchingMode(sn, CameraModeEnum.VIDEO, cameraDTO);
+                    log.info("摄像头切换状态:{}", swResult);
+                }
+                param.setCmd(PayloadCommandsEnum.CAMERA_RECORDING_START);
+                param.setData(data);
+                break;
+            }
+            case "video_stop": {//结束录像
+                if (!Objects.equals(cameraDTO.getCameraMode().getMode(), CameraModeEnum.VIDEO.getMode())) {
+                    //切换模式
+                    ResponseResult swResult = switchingMode(sn, CameraModeEnum.VIDEO, cameraDTO);
+                    log.info("摄像头切换状态:{}", swResult);
+                }
+                param.setCmd(PayloadCommandsEnum.CAMERA_RECORDING_STOP);
+                param.setData(data);
+                break;
+            }
+            default:
+                return ResponseResult.error(-1, "未知类型!");
+        }
+
+
+        Thread.sleep(2000); // 延迟2000毫秒(2秒)
+
+        return controlService.payloadCommands(param,bid);
+    }
+
+    /**
+     * 获取负载权限
+     * @param sn 无人机设备号
+     * @return
+     */
+    private ResponseResult getPayload(String sn,OsdCameraReceiver cameraDTO) {
+        DronePayloadParam param = new DronePayloadParam();
+        param.setPayloadIndex(cameraDTO.getPayloadIndex());
+        return controlService.seizeAuthority(sn, DroneAuthorityEnum.PAYLOAD, param);//获取无人机负载权限
+    }
+
+    /**
+     * 负载模式切换
+     * @param sn 无人机设备号
+     * @param mode 模式  相机或者录像模式
+     * @param cameraDTO 相机数据
+     * @return
+     * @throws Exception
+     */
+    private ResponseResult switchingMode(String sn, CameraModeEnum mode, OsdCameraReceiver cameraDTO) throws Exception {
+        PayloadCommandsParam param = new PayloadCommandsParam();
+        param.setSn(sn);
+        param.setCmd(PayloadCommandsEnum.CAMERA_MODE_SWitCH);
+        DronePayloadParam data = new DronePayloadParam();
+        data.setPayloadIndex(cameraDTO.getPayloadIndex());
+        data.setCameraMode(mode);
+        param.setData(data);
+        return controlService.payloadCommands(param);
+    }
+
+
 }

--
Gitblit v1.9.3