package com.dji.sample.wayline.service.impl;
|
|
import com.dji.sample.common.model.CustomClaim;
|
import com.dji.sample.component.oss.model.OssConfiguration;
|
import com.dji.sample.live.service.LiveService;
|
import com.dji.sample.wayline.model.dto.WaylineJobDTO;
|
import com.dji.sample.wayline.model.enums.WaylineJobStatusEnum;
|
import com.dji.sample.wayline.model.param.*;
|
import com.dji.sample.wayline.service.IWaylineFileService;
|
import com.dji.sample.wayline.service.IWaylineJobService;
|
import com.dji.sample.wayline.service.WayLineService;
|
import com.dji.sdk.cloudapi.device.ExitWaylineWhenRcLostEnum;
|
import com.dji.sdk.cloudapi.livestream.api.AbstractLivestreamService;
|
import com.dji.sdk.cloudapi.wayline.*;
|
import com.dji.sdk.common.HttpResultResponse;
|
import com.dji.sdk.common.SDKManager;
|
import com.dji.sdk.mqtt.services.ServicesReplyData;
|
import com.dji.sdk.mqtt.services.TopicServicesResponse;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.net.URL;
|
import java.sql.SQLException;
|
import java.time.LocalDateTime;
|
import java.time.ZoneId;
|
import java.util.Objects;
|
import java.util.Optional;
|
import java.util.UUID;
|
|
/**
|
* @author wmm
|
* @version 0.1
|
* @date 2024/5/8
|
*/
|
@Service
|
@Slf4j
|
public class WayLineServiceImpl implements WayLineService {
|
|
|
@Autowired
|
private SDKWaylineService waylineService;
|
|
@Autowired
|
private ObjectMapper mapper;
|
@Autowired
|
private IWaylineFileService waylineFileService;
|
|
@Autowired
|
private IWaylineJobService waylineJobService;
|
|
|
|
@Override
|
public HttpResultResponse flighttaskCreate(String sn, FlighttaskCreateParam param) {
|
|
TopicServicesResponse<ServicesReplyData> response = waylineService.flighttaskCreate(SDKManager.getDeviceSDK(sn),mapper.convertValue(param, FlighttaskCreateRequest.class));
|
|
ServicesReplyData reply = response.getData();
|
return reply.getResult().isSuccess() ?
|
HttpResultResponse.success()
|
: HttpResultResponse.error("The flight task failed to create. " + reply.getResult());
|
}
|
|
|
@Override
|
public HttpResultResponse flighttaskPrepare(String sn, FlighttaskPrepareParam param, CustomClaim customClaim) {
|
// get wayline file
|
Optional<GetWaylineListResponse> waylineFile = waylineFileService.getWaylineByWaylineId(param.getFileId());
|
if (waylineFile.isEmpty()) {
|
throw new RuntimeException("Wayline file doesn't exist.");
|
}
|
|
param.setFlightId(UUID.randomUUID().toString());
|
param.setBid(UUID.randomUUID().toString());
|
// get file url
|
URL url = waylineFileService.getObjectUrl(waylineFile.get().getObjectKey());
|
|
FlighttaskPrepareRequest flightTask = new FlighttaskPrepareRequest()
|
.setFlightId(param.getFlightId())
|
.setExecuteTime(param.getExecuteTime())
|
.setTaskType(param.getTaskType())
|
// .setWaylineType(param.getWaylineType())
|
.setRthAltitude(param.getRthAltitude())
|
.setOutOfControlAction(param.getOutOfControlAction())
|
.setExitWaylineWhenRcLost(ExitWaylineWhenRcLostEnum.EXECUTE_RC_LOST_ACTION)
|
.setFile(new FlighttaskFile()
|
.setUrl(url.toString().replace(OssConfiguration.endpoint,OssConfiguration.endpointSpare))
|
.setFingerprint(waylineFile.get().getSign()));
|
|
if (TaskTypeEnum.CONDITIONAL == param.getTaskType()) {
|
if (Objects.isNull(param.getReadyConditions())) {
|
throw new IllegalArgumentException();
|
}
|
flightTask.setReadyConditions(param.getReadyConditions());
|
flightTask.setExecutableConditions(param.getExecutableConditions());
|
}
|
|
TopicServicesResponse<ServicesReplyData> serviceReply = waylineService.flighttaskPrepare(
|
SDKManager.getDeviceSDK(sn), flightTask,param.getBid());
|
if (!serviceReply.getData().getResult().isSuccess()) {
|
log.info("Prepare task ====> Error code: {}", serviceReply.getData().getResult());
|
}
|
|
//update job info to dbs
|
Optional<WaylineJobDTO> waylineJobOpt = waylineJobService.createWaylineJob(param,sn, param.getWorkspaceId(), customClaim.getUsername(), null, null,flightTask.getFlightId());
|
if (waylineJobOpt.isEmpty()) {
|
throw new RuntimeException("Failed to create wayline job.");
|
}
|
// WaylineJobDTO waylineJob = waylineJobOpt.get();
|
|
ServicesReplyData reply = serviceReply.getData();
|
// ServicesReplyData reply = new ServicesReplyData();
|
return reply.getResult().isSuccess() ?
|
HttpResultResponse.success()
|
: HttpResultResponse.error("The flight task failed to prepare. " + reply.getResult());
|
}
|
|
|
@Override
|
public HttpResultResponse flighttaskExecute(String sn, FlighttaskExecuteParam param) {
|
FlighttaskExecuteRequest flightTask = new FlighttaskExecuteRequest()
|
.setFlightId(param.getFlightId());
|
TopicServicesResponse<ServicesReplyData> response = waylineService.flighttaskExecute(SDKManager.getDeviceSDK(sn),flightTask,param.getBid());
|
|
ServicesReplyData reply = response.getData();
|
return reply.getResult().isSuccess() ?
|
HttpResultResponse.success()
|
: HttpResultResponse.error("The flight task failed to execute. " + reply.getResult());
|
}
|
|
|
@Override
|
public HttpResultResponse flighttaskUndo(String sn, FlighttaskUndoParam param) {
|
|
TopicServicesResponse<ServicesReplyData> response = waylineService.flighttaskUndo(SDKManager.getDeviceSDK(sn),mapper.convertValue(param, FlighttaskUndoRequest.class));
|
|
ServicesReplyData reply = response.getData();
|
return reply.getResult().isSuccess() ?
|
HttpResultResponse.success()
|
: HttpResultResponse.error("The flight task failed to undo. " + reply.getResult());
|
}
|
|
|
@Override
|
public HttpResultResponse flighttaskPause(String sn) {
|
|
TopicServicesResponse<ServicesReplyData> response = waylineService.flighttaskPause(SDKManager.getDeviceSDK(sn));
|
|
ServicesReplyData reply = response.getData();
|
return reply.getResult().isSuccess() ?
|
HttpResultResponse.success()
|
: HttpResultResponse.error("The flight task failed to pause. " + reply.getResult());
|
}
|
|
|
@Override
|
public HttpResultResponse flighttaskRecovery(String sn) {
|
|
TopicServicesResponse<ServicesReplyData> response = waylineService.flighttaskRecovery(SDKManager.getDeviceSDK(sn));
|
|
ServicesReplyData reply = response.getData();
|
return reply.getResult().isSuccess() ?
|
HttpResultResponse.success()
|
: HttpResultResponse.error("The flight task failed to recovery. " + reply.getResult());
|
}
|
|
|
@Override
|
public HttpResultResponse returnHome(String sn) {
|
|
TopicServicesResponse<ServicesReplyData> response = waylineService.returnHome(SDKManager.getDeviceSDK(sn));
|
|
ServicesReplyData reply = response.getData();
|
return reply.getResult().isSuccess() ?
|
HttpResultResponse.success()
|
: HttpResultResponse.error("The home failed to return. " + reply.getResult());
|
}
|
|
|
@Override
|
public HttpResultResponse returnHomeCancel(String sn) {
|
|
TopicServicesResponse<ServicesReplyData> response = waylineService.returnHomeCancel(SDKManager.getDeviceSDK(sn));
|
|
ServicesReplyData reply = response.getData();
|
return reply.getResult().isSuccess() ?
|
HttpResultResponse.success()
|
: HttpResultResponse.error("The return home failed to cancel. " + reply.getResult());
|
}
|
}
|