From f98b25a34d04c2acb9bf93e6cbd4e72fa2d81ba0 Mon Sep 17 00:00:00 2001
From: xieb <vip_xiaobin810@163.com>
Date: Sat, 13 Apr 2024 11:40:29 +0800
Subject: [PATCH] 航线规划修改

---
 src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java |   32 +++++++++++++++++++++++---------
 1 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java b/src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java
index c186883..56955a2 100644
--- a/src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java
+++ b/src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java
@@ -33,6 +33,7 @@
 import org.springframework.integration.annotation.ServiceActivator;
 import org.springframework.messaging.MessageHeaders;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
 import java.util.*;
 
@@ -100,6 +101,16 @@
             RedisOpsUtils.setWithExpire(serviceIdentifier + RedisConst.DELIMITER + bid, sn,
                     RedisConst.DEVICE_ALIVE_SECOND * RedisConst.DEVICE_ALIVE_SECOND);
         }
+
+        //当执行返航指令时,删除图斑redis
+        if (serviceIdentifier == "return_home"){
+            if (RedisOpsUtils.checkExist("tuban:" + sn)){
+                RedisOpsUtils.del("tuban:" + sn);
+            }
+        }
+
+
+
         return ResponseResult.success();
     }
 
@@ -205,27 +216,32 @@
                                 eventsReceiver.getStatus().getMessage() : eventsReceiver.getResult().getErrorMsg())
                         .result(eventsReceiver.getResult().getErrorCode())
                         .build());
-
+        //当飞向目标点成功后
         if (eventsReceiver.getStatus().equals(FlyToStatusEnum.WAYLINE_OK)) {
             JSONObject jsonObject = (JSONObject) RedisOpsUtils.get("tuban:" + dockSn);
             if (jsonObject != null) {
                 List<PointPOJO> targetList = (List<PointPOJO>) jsonObject.get("targetList");
                 int curIndex = (Integer) jsonObject.get("curIndex");
                 String payloadIndex = jsonObject.getString("payloadIndex");
-                flyToNextPoint(targetList, curIndex, dockSn, payloadIndex);
+                flyToNextPoint(targetList, curIndex+1, dockSn, payloadIndex);
             }
         }
         return receiver;
     }
 
-    private ResponseResult flyToNextPoint(List<PointPOJO> targetList, int curIndex, String sn, String payloadIndex) throws Exception {
-        curIndex = curIndex + 1;
+    @Override
+    public ResponseResult flyToNextPoint(List<PointPOJO> targetList, int curIndex, String sn, String payloadIndex) throws Exception {
         //当无人机状态为人工时再发布下一个命令
         while (true) {
             Optional<DeviceDTO> dockOpt = deviceRedisService.getDeviceOnline(sn);
             DeviceModeCodeEnum deviceMode = deviceService.getDeviceMode(dockOpt.get().getChildDeviceSn());
 
             if (DeviceModeCodeEnum.MANUAL == deviceMode) {
+
+                //执行拍照
+                ResponseResult responseResult = takePhoto(sn, payloadIndex);
+
+                //发布飞行指令
                 if (curIndex == targetList.size()) {
                     //当前是最后一个点,返航
                     ResponseResult returnHome = controlDockDebug(sn, "return_home", null);
@@ -245,9 +261,6 @@
                     pointDTO.setLatitude(targetList.get(curIndex).getLat());
                     pointDTOS.add(pointDTO);
                     flyToPointParam.setPoints(pointDTOS);
-
-                    //执行拍照
-                    ResponseResult responseResult = takePhoto(sn, payloadIndex);
 
                     //发布下一个飞行指令
                     ResponseResult flyToRes = flyToPoint(sn, flyToPointParam);
@@ -324,8 +337,9 @@
     @Override
     public ResponseResult takeoffToPoint(String sn, TakeoffToPointParam param) {
         checkTakeoffCondition(sn);
-
-        param.setFlightId(UUID.randomUUID().toString());
+        if (!StringUtils.hasText(param.getFlightId())){
+            param.setFlightId(UUID.randomUUID().toString());
+        }
         ServiceReply reply = messageSenderService.publishServicesTopic(sn, DroneControlMethodEnum.TAKE_OFF_TO_POINT.getMethod(), param, param.getFlightId());
         return ResponseResult.CODE_SUCCESS != reply.getResult() ?
                 ResponseResult.error("无人机起飞失败 " + reply.getResult())

--
Gitblit v1.9.3