|
|
@@ -1,7 +1,10 @@
|
|
|
package com.dji.sample.manage.service.impl;
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
+import com.dji.sample.manage.model.dto.OsdDroneDTO;
|
|
|
import com.dji.sample.map.model.dto.FlightTrackDTO;
|
|
|
+import com.dji.sdk.cloudapi.property.DockDroneCommanderFlightHeight;
|
|
|
+import com.dji.sdk.cloudapi.property.DockDroneRthMode;
|
|
|
import com.dji.sdk.common.CoordinateUtil;
|
|
|
import com.dji.sample.common.util.UserRequest;
|
|
|
import com.dji.sample.component.websocket.model.BizCodeEnum;
|
|
|
@@ -30,6 +33,7 @@ import com.dji.sdk.common.SDKManager;
|
|
|
import com.dji.sdk.mqtt.MqttReply;
|
|
|
import com.dji.sdk.mqtt.osd.TopicOsdRequest;
|
|
|
import com.dji.sdk.mqtt.state.TopicStateRequest;
|
|
|
+import com.dji.sdk.mqtt.state.TopicStateResponse;
|
|
|
import com.dji.sdk.mqtt.status.TopicStatusRequest;
|
|
|
import com.dji.sdk.mqtt.status.TopicStatusResponse;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
@@ -194,7 +198,10 @@ public class SDKDeviceService extends AbstractDeviceService {
|
|
|
deviceRedisService.setDeviceOnline(device);
|
|
|
deviceRedisService.setDeviceOsd(from, request.getData());
|
|
|
|
|
|
+ OsdDroneDTO data = toDroneDto(request.getData());
|
|
|
deviceService.pushOsdDataToWeb(device.getWorkspaceId(), BizCodeEnum.DEVICE_OSD, from, request.getData());
|
|
|
+ //添加航点轨迹信息
|
|
|
+ toAddFilghtPoint(from, device, data);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -242,7 +249,7 @@ public class SDKDeviceService extends AbstractDeviceService {
|
|
|
|
|
|
deviceRedisService.setDeviceOnline(device);
|
|
|
deviceRedisService.setDeviceOsd(from, request.getData());
|
|
|
- OsdRcDrone data = request.getData();
|
|
|
+ OsdDroneDTO data = toDroneDto(request.getData());
|
|
|
deviceService.pushOsdDataToPilot(device.getWorkspaceId(), from,
|
|
|
new DeviceOsdHost()
|
|
|
.setLatitude(data.getLatitude())
|
|
|
@@ -259,7 +266,7 @@ public class SDKDeviceService extends AbstractDeviceService {
|
|
|
|
|
|
}
|
|
|
|
|
|
- private void toAddFilghtPoint(String from, DeviceDTO device,OsdRcDrone data) {
|
|
|
+ private void toAddFilghtPoint(String from, DeviceDTO device, OsdDroneDTO data) {
|
|
|
|
|
|
switch (data.getModeCode()) {
|
|
|
case TAKEOFF_FINISHED:
|
|
|
@@ -328,7 +335,7 @@ public class SDKDeviceService extends AbstractDeviceService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private List<FlightTrackDTO> getRedisFlightPoint(FlightTaskDTO task,DeviceDTO device,OsdRcDrone data) {
|
|
|
+ private List<FlightTrackDTO> getRedisFlightPoint(FlightTaskDTO task,DeviceDTO device,OsdDroneDTO data) {
|
|
|
List<FlightTrackDTO> flightPoints = null;
|
|
|
Optional<List<FlightTrackDTO>> optList = deviceRedisService.getDroneFlyTrack(device.getDeviceSn());
|
|
|
if(optList.isPresent()) {
|
|
|
@@ -340,7 +347,7 @@ public class SDKDeviceService extends AbstractDeviceService {
|
|
|
return flightPoints;
|
|
|
}
|
|
|
|
|
|
- private void addRedisFlightPoint(FlightTaskDTO task, List<FlightTrackDTO> flightPoints, DeviceDTO device,OsdRcDrone data) {
|
|
|
+ private void addRedisFlightPoint(FlightTaskDTO task, List<FlightTrackDTO> flightPoints, DeviceDTO device,OsdDroneDTO data) {
|
|
|
FlightTrackDTO point = FlightTrackDTO.builder()
|
|
|
.taskId(task.getId())
|
|
|
.modeCode(data.getModeCode().getCode())
|
|
|
@@ -354,7 +361,7 @@ public class SDKDeviceService extends AbstractDeviceService {
|
|
|
deviceRedisService.setDroneFlyTrack(device.getDeviceSn(),flightPoints);
|
|
|
}
|
|
|
|
|
|
- private FlightTaskDTO addFlightPoint(FlightTaskDTO task, DeviceDTO device,OsdRcDrone data) {
|
|
|
+ private FlightTaskDTO addFlightPoint(FlightTaskDTO task, DeviceDTO device,OsdDroneDTO data) {
|
|
|
synchronized (device.getDeviceSn().intern()) {
|
|
|
Optional<FlightTrackEntity> lastPoint = deviceRedisService.getLastDroneTrack(device.getDeviceSn());
|
|
|
long curTime = System.currentTimeMillis();
|
|
|
@@ -434,7 +441,7 @@ public class SDKDeviceService extends AbstractDeviceService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private boolean isSamePoint(OsdRcDrone data,FlightTrackEntity lastPoint) {
|
|
|
+ private boolean isSamePoint(OsdDroneDTO data,FlightTrackEntity lastPoint) {
|
|
|
|
|
|
return data.getLongitude().doubleValue() == lastPoint.getLongitude()
|
|
|
&& data.getLatitude().doubleValue() == lastPoint.getLatitude()
|
|
|
@@ -474,7 +481,6 @@ public class SDKDeviceService extends AbstractDeviceService {
|
|
|
}
|
|
|
|
|
|
private FlightTaskDTO createFlightTask(DeviceDTO device) {
|
|
|
- log.info("我进来了");
|
|
|
Date curTime = new Date();
|
|
|
String taskName = getTaskName(curTime, device.getDeviceSn());
|
|
|
return flightTaskService.createFlightTask(FlightTaskEntity.builder()
|
|
|
@@ -607,6 +613,28 @@ public class SDKDeviceService extends AbstractDeviceService {
|
|
|
log.info("==========rcLiveStatusUpdate=========request:"+ request.toString() + ",headers:" + headers.toString());
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public TopicStateResponse<MqttReply> dockDroneCurrentRthMode(TopicStateRequest<DockDroneCurrentRthMode> request, MessageHeaders headers) {
|
|
|
+ log.info("==========dockDroneCurrentRthMode=========request:"+ request.toString() + ",headers:" + headers.toString());
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public TopicStateResponse<MqttReply> dockDroneCurrentCommanderFlightMode(TopicStateRequest<DockDroneCurrentCommanderFlightMode> request, MessageHeaders headers) {
|
|
|
+ log.info("==========dockDroneCurrentCommanderFlightMode=========request:"+ request.toString() + ",headers:" + headers.toString());
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public TopicStateResponse<MqttReply> dockDroneCommanderFlightHeight(TopicStateRequest<DockDroneCommanderFlightHeight> request, MessageHeaders headers) {
|
|
|
+ log.info("==========dockDroneCommanderFlightHeight=========request:"+ request.toString() + ",headers:" + headers.toString());
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public TopicStateResponse<MqttReply> dockDroneRthMode(TopicStateRequest<DockDroneRthMode> request, MessageHeaders headers) {
|
|
|
+ log.info("==========dockDroneRthMode=========request:"+ request.toString() + ",headers:" + headers.toString());
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
private void dockGoOnline(DeviceDTO gateway, DeviceDTO subDevice) {
|
|
|
if (DeviceDomainEnum.DOCK != gateway.getDomain()) {
|
|
|
return;
|
|
|
@@ -764,13 +792,38 @@ public class SDKDeviceService extends AbstractDeviceService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private boolean areEqual(double a, double b) {
|
|
|
- // 将 double 值转换为 BigDecimal
|
|
|
- BigDecimal bdA = new BigDecimal(Double.toString(a));
|
|
|
- BigDecimal bdB = new BigDecimal(Double.toString(b));
|
|
|
-
|
|
|
- // 使用 BigDecimal 的 compareTo 方法进行比较
|
|
|
- return bdA.compareTo(bdB) == 0;
|
|
|
+ private OsdDroneDTO toDroneDto(Object data) {
|
|
|
+ OsdDroneDTO dto = new OsdDroneDTO();
|
|
|
+ if (data instanceof OsdRcDrone) {
|
|
|
+ OsdRcDrone osdRcDrone = (OsdRcDrone) data;
|
|
|
+ dto.setBattery(osdRcDrone.getBattery());
|
|
|
+ dto.setModeCode(osdRcDrone.getModeCode());
|
|
|
+ dto.setFirmwareVersion(osdRcDrone.getFirmwareVersion());
|
|
|
+ dto.setGear(osdRcDrone.getGear());
|
|
|
+ dto.setAttitudeHead(osdRcDrone.getAttitudeHead());
|
|
|
+ dto.setHeight(osdRcDrone.getHeight());
|
|
|
+ dto.setLongitude(osdRcDrone.getLongitude());
|
|
|
+ dto.setLatitude(osdRcDrone.getLatitude());
|
|
|
+ dto.setElevation(osdRcDrone.getElevation());
|
|
|
+ dto.setWindSpeed(osdRcDrone.getWindSpeed());
|
|
|
+ dto.setTotalFlightTime(osdRcDrone.getTotalFlightTime());
|
|
|
+
|
|
|
+ } else if (data instanceof OsdDockDrone) {
|
|
|
+ OsdDockDrone osdDockDrone = (OsdDockDrone) data;
|
|
|
+ dto.setBattery(osdDockDrone.getBattery());
|
|
|
+ dto.setModeCode(osdDockDrone.getModeCode());
|
|
|
+ dto.setFirmwareVersion(osdDockDrone.getFirmwareVersion());
|
|
|
+ dto.setGear(osdDockDrone.getGear());
|
|
|
+ dto.setAttitudeHead(osdDockDrone.getAttitudeHead());
|
|
|
+ dto.setHeight(osdDockDrone.getHeight());
|
|
|
+ dto.setLongitude(osdDockDrone.getLongitude());
|
|
|
+ dto.setLatitude(osdDockDrone.getLatitude());
|
|
|
+ dto.setElevation(osdDockDrone.getElevation());
|
|
|
+ dto.setWindSpeed(osdDockDrone.getWindSpeed());
|
|
|
+ dto.setTotalFlightTime(osdDockDrone.getTotalFlightTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ return dto;
|
|
|
}
|
|
|
|
|
|
}
|