Browse Source

无人机对接接口 url返回值修改

S0025136190 1 year ago
parent
commit
8e6141993a

+ 13 - 1
Backend/sample/src/main/java/com/dji/sample/manage/controller/UpstreamController.java

@@ -1,7 +1,6 @@
 package com.dji.sample.manage.controller;
 
 import com.dji.sample.manage.model.dto.*;
-import com.dji.sample.manage.service.IDeviceDictionaryService;
 import com.dji.sample.manage.service.IDevicePayloadService;
 import com.dji.sample.manage.service.IDeviceService;
 import com.dji.sample.manage.service.IManageDeviceLivestreamUrlService;
@@ -84,4 +83,17 @@ public class UpstreamController {
         return HttpResultResponse.success(url);
     }
 
+    /**
+     * 上游系统获取设备列表详情信息
+     * @param searchInfo
+     * @param status
+     * @return
+     */
+    @GetMapping("/devicesDetailList")
+    public HttpResultResponse<List<UpstreamDeviceDetailDTO>> getDevicesDetailList(String searchInfo,
+                                                                      Integer status) {
+        List<UpstreamDeviceDetailDTO> devices = deviceService.selUpstreamDeviceDetailList(searchInfo, status);
+        return HttpResultResponse.success(devices);
+    }
+
 }

+ 21 - 0
Backend/sample/src/main/java/com/dji/sample/manage/dao/IDeviceMapper.java

@@ -1,7 +1,12 @@
 package com.dji.sample.manage.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dji.sample.manage.model.dto.UpstreamDeviceDetailDTO;
 import com.dji.sample.manage.model.entity.DeviceEntity;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  *
@@ -11,4 +16,20 @@ import com.dji.sample.manage.model.entity.DeviceEntity;
  */
 public interface IDeviceMapper extends BaseMapper<DeviceEntity> {
 
+
+    @Select("<script> " +
+            "SELECT md.device_sn deviceSn" +
+            " ,md.workspace_id workspaceId"+
+            " ,mw.workspace_name workspaceName"+
+            " ,md.nickname "+
+            " ,md.device_name deviceName"+
+            "   from manager_device md" +
+            " left join manager_workspace mw on md.worksapce_id = mw.workspace_id " +
+            " where 1 = 1 " +
+            "<if test='workspaceName != null'> " +
+            " and worksapce_name LIKE CONCAT('%', #{workspaceName},'%')" +
+            " </if> "+
+            "</script>")
+    List<UpstreamDeviceDetailDTO> selUpstreamDeviceList(@Param("workspaceName") String workspaceName);
+
 }

+ 2 - 2
Backend/sample/src/main/java/com/dji/sample/manage/model/dto/UpstreamDeviceDTO.java

@@ -15,8 +15,8 @@ import java.time.LocalDateTime;
 import java.util.List;
 
 /**
- * @author sean.zhou
- * @date 2021/11/19
+ * @author huiqing.jang
+ * @date 2024/9/4
  * @version 0.1
  */
 @Data

+ 37 - 0
Backend/sample/src/main/java/com/dji/sample/manage/model/dto/UpstreamDeviceDetailDTO.java

@@ -0,0 +1,37 @@
+package com.dji.sample.manage.model.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author huiqing.jiang
+ * @date 2024/9/6
+ * @version 0.1
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class UpstreamDeviceDetailDTO {
+
+    private String deviceSn;
+
+    private String deviceName;
+
+    private String nickName;
+
+    private String workspaceId;
+
+    private String workspaceName;
+
+    private Integer status;
+
+    private String statusText;
+
+    private Integer flightCount;
+
+    private double flightKilometers;
+
+}

+ 3 - 4
Backend/sample/src/main/java/com/dji/sample/manage/service/IDeviceService.java

@@ -2,13 +2,10 @@ package com.dji.sample.manage.service;
 
 import com.dji.sample.common.model.CustomClaim;
 import com.dji.sample.component.websocket.model.BizCodeEnum;
-import com.dji.sample.manage.model.dto.UpstreamDeviceDTO;
+import com.dji.sample.manage.model.dto.*;
 import com.dji.sample.manage.model.param.DeviceBoundQueryParam;
 import com.dji.sdk.cloudapi.device.*;
 import com.dji.sdk.common.AMap;
-import com.dji.sample.manage.model.dto.DeviceDTO;
-import com.dji.sample.manage.model.dto.DeviceFirmwareUpgradeDTO;
-import com.dji.sample.manage.model.dto.TopologyDeviceDTO;
 import com.dji.sample.manage.model.param.DeviceQueryParam;
 import com.dji.sdk.config.version.GatewayManager;
 import com.dji.sdk.common.HttpResultResponse;
@@ -217,4 +214,6 @@ public interface IDeviceService {
     void updateHome(DeviceDTO drone, AMap homePoint);
 
     List<UpstreamDeviceDTO> selUpstreamDeviceList(String searchInfo, Integer status);
+
+    List<UpstreamDeviceDetailDTO> selUpstreamDeviceDetailList(String searchInfo, Integer status);
 }

+ 53 - 0
Backend/sample/src/main/java/com/dji/sample/manage/service/impl/DeviceServiceImpl.java

@@ -12,8 +12,12 @@ import com.dji.sample.component.websocket.service.IWebSocketMessageService;
 import com.dji.sample.control.model.enums.DroneAuthorityEnum;
 import com.dji.sample.manage.dao.IDeviceMapper;
 import com.dji.sample.manage.model.param.DeviceBoundQueryParam;
+import com.dji.sample.map.model.entity.FlightTaskEntity;
+import com.dji.sample.map.service.IFlightTrackTaskService;
 import com.dji.sample.media.model.MediaDirEntity;
 import com.dji.sample.manage.model.enums.*;
+import com.dji.sample.wayline.service.IFlightTaskService;
+import com.dji.sample.wayline.service.impl.FlightTaskServiceImpl;
 import com.dji.sdk.common.AMap;
 import com.dji.sample.manage.model.dto.*;
 import com.dji.sample.manage.model.entity.DeviceEntity;
@@ -132,6 +136,10 @@ public class DeviceServiceImpl implements IDeviceService {
     @Autowired
     private IDeviceOprLogsService deviceOprLogsService;
 
+    @Autowired
+    private IFlightTrackTaskService flightTrackTaskService;
+
+
 //    @Autowired
 //    private IUserService userService;
 
@@ -818,6 +826,49 @@ public class DeviceServiceImpl implements IDeviceService {
         return resultList;
     }
 
+    @Override
+    public List<UpstreamDeviceDetailDTO> selUpstreamDeviceDetailList(String searchInfo, Integer status) {
+        List<UpstreamDeviceDetailDTO> resultList = new ArrayList<>();
+        LambdaQueryWrapper<DeviceEntity> wrapper = new LambdaQueryWrapper<>();
+        if(searchInfo != null) {
+            wrapper.like( DeviceEntity::getNickname, searchInfo);
+        }
+        List<UpstreamDeviceDetailDTO> list = mapper.selUpstreamDeviceList(searchInfo);
+        if(list.size() > 0) {
+            for(UpstreamDeviceDetailDTO device : list) {
+                DeviceDTO deviceDTO = new DeviceDTO();
+                deviceDTO.setDeviceSn(device.getDeviceSn());
+                getDeviceStatus(deviceDTO);
+                device.setStatusText(deviceDTO.getStatusText());
+                if(status == null) {
+                    if(deviceDTO.getStatusText().equals("离线")) {
+                        device.setStatus(1);
+                    } else {
+                        device.setStatus(2);
+                    }
+                } else if(status == 1  && deviceDTO.getStatusText().equals("离线")) {
+                    device.setStatus(1);
+                } else if (status == 2  && !deviceDTO.getStatusText().equals("离线")) {
+                    device.setStatus(2);
+                }
+                List<FlightTaskEntity> flightTask = flightTrackTaskService.getFlightTrack(device.getDeviceSn(),device.getWorkspaceId());
+                device.setFlightCount(flightTask.size());
+                double kilomters = 0;
+                for(FlightTaskEntity entity : flightTask) {
+                    double kilomter = flightTrackTaskService.getFlightKilometersByTaskId(entity.getId());
+                    kilomters = kilomters + kilomter;
+                }
+                device.setFlightKilometers(kilomters);
+                //upstreamDeviceDTO.setDeviceSn(device.getDeviceSn());
+            }
+        }
+        if(status != null) {
+            resultList = resultList.stream().filter(channelData -> channelData.getStatus().equals(status))
+                    .collect(Collectors.toList());
+        }
+        return resultList;
+    }
+
     /**
      * Convert device data transfer object into database entity object.
      * @param dto
@@ -852,4 +903,6 @@ public class DeviceServiceImpl implements IDeviceService {
                 .deviceDesc(dto.getDeviceDesc())
                 .build();
     }
+
+
 }

+ 4 - 0
Backend/sample/src/main/java/com/dji/sample/map/service/IFlightTrackTaskService.java

@@ -59,4 +59,8 @@ public interface IFlightTrackTaskService {
     FlightTaskEntity dtoToEntity(FlightTaskDTO flightTask);
 
     FlightTrackDTO flightTrackEntityToDto(FlightTrackEntity flightTrackEntity);
+
+    List<FlightTaskEntity> getFlightTrack(String deviceNo,String worksapceId);
+
+    double getFlightKilometersByTaskId(Integer taskId);
 }

+ 57 - 0
Backend/sample/src/main/java/com/dji/sample/map/service/impl/FlightTrackTaskServiceImpl.java

@@ -1,6 +1,8 @@
 package com.dji.sample.map.service.impl;
 
+import cn.hutool.core.util.CoordinateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dji.sample.map.dao.IFlightTaskMapper;
 import com.dji.sample.map.dao.IFlightTrackMapper;
@@ -25,6 +27,7 @@ import org.springframework.util.StringUtils;
 import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
+import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Optional;
@@ -332,6 +335,35 @@ public class FlightTrackTaskServiceImpl implements IFlightTrackTaskService {
         return builder.build();
     }
 
+    @Override
+    public List<FlightTaskEntity> getFlightTrack(String deviceSn, String worksapceId) {
+        List<FlightTaskEntity> result = new ArrayList<>();
+        LambdaQueryWrapper<FlightTaskEntity> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(FlightTaskEntity ::getDeviceSn,deviceSn)
+                .eq(FlightTaskEntity ::getWorkspaceId,worksapceId);
+        result = mapper.selectList(wrapper);
+        return result;
+    }
+
+    @Override
+    public double getFlightKilometersByTaskId(Integer taskId) {
+        double result = 0;
+        List<FlightTrackEntity> trackResult = new ArrayList<>();
+        LambdaQueryWrapper<FlightTrackEntity> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(FlightTrackEntity::getTaskId,taskId)
+                .orderByDesc(FlightTrackEntity::getCreateTime);
+        trackResult = trackMapper.selectList(wrapper);
+        List<CoordinateUtil.Coordinate> coordinates = new ArrayList<>();
+        for (int i = 0; i < trackResult.size(); i++) {
+            FlightTrackEntity flightTrackStart = trackResult.get(i);
+            coordinates.add(new CoordinateUtil.Coordinate(flightTrackStart.getLongitude(), flightTrackStart.getLatitude()));
+        }
+        if(coordinates.size() > 0) {
+            result = calculateTotalDistance(coordinates);
+        }
+        return result;
+    }
+
     private FlightTaskDTO entityToDto(FlightTaskEntity flightTaskEntity) {
         FlightTaskDTO.FlightTaskDTOBuilder builder = FlightTaskDTO.builder();
         if (flightTaskEntity != null) {
@@ -354,4 +386,29 @@ public class FlightTrackTaskServiceImpl implements IFlightTrackTaskService {
         return builder.build();
     }
 
+    private  double calculateTotalDistance(List<CoordinateUtil.Coordinate> coordinates) {
+        double totalDistance = 0.0;
+
+        for (int i = 0; i < coordinates.size() - 1; i++) {
+            CoordinateUtil.Coordinate start = coordinates.get(i);
+            CoordinateUtil.Coordinate end = coordinates.get(i + 1);
+            double distance = calculateDistance(start, end);
+            totalDistance += distance;
+        }
+
+        return totalDistance;
+    }
+
+    private double calculateDistance(CoordinateUtil.Coordinate start, CoordinateUtil.Coordinate end) {
+        final int R = 6371; // 地球平均半径,单位为公里
+        double lat1 = Math.toRadians(start.getLat());
+        double lat2 = Math.toRadians(end.getLat());
+        double deltaLat = Math.toRadians(end.getLat() - start.getLat());
+        double deltaLon = Math.toRadians(end.getLng() - start.getLng());
+        double a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2)
+                + Math.cos(lat1) * Math.cos(lat2) * Math.sin(deltaLon / 2) * Math.sin(deltaLon / 2);
+        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
+        return R * c;
+    }
+
 }