|
|
@@ -13,14 +13,12 @@ import com.dji.sample.media.service.IMediaRedisService;
|
|
|
import com.dji.sample.wayline.model.dto.ConditionalWaylineJobKey;
|
|
|
import com.dji.sample.wayline.model.dto.WaylineJobDTO;
|
|
|
import com.dji.sample.wayline.model.dto.WaylineTaskConditionDTO;
|
|
|
+import com.dji.sample.wayline.model.entity.WaylineBreakPointEntity;
|
|
|
import com.dji.sample.wayline.model.enums.WaylineErrorCodeEnum;
|
|
|
import com.dji.sample.wayline.model.enums.WaylineJobStatusEnum;
|
|
|
import com.dji.sample.wayline.model.param.CreateJobParam;
|
|
|
import com.dji.sample.wayline.model.param.UpdateJobParam;
|
|
|
-import com.dji.sample.wayline.service.IFlightTaskService;
|
|
|
-import com.dji.sample.wayline.service.IWaylineFileService;
|
|
|
-import com.dji.sample.wayline.service.IWaylineJobService;
|
|
|
-import com.dji.sample.wayline.service.IWaylineRedisService;
|
|
|
+import com.dji.sample.wayline.service.*;
|
|
|
import com.dji.sdk.cloudapi.device.ExitWaylineWhenRcLostEnum;
|
|
|
import com.dji.sdk.cloudapi.media.UploadFlighttaskMediaPrioritize;
|
|
|
import com.dji.sdk.cloudapi.media.api.AbstractMediaService;
|
|
|
@@ -87,6 +85,9 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
|
|
|
@Qualifier("mediaServiceImpl")
|
|
|
private AbstractMediaService abstractMediaService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IWaylineBreakPointService waylineBreakPointService;
|
|
|
+
|
|
|
@Scheduled(initialDelay = 10, fixedRate = 5, timeUnit = TimeUnit.SECONDS)
|
|
|
public void checkScheduledJob() {
|
|
|
Object jobIdValue = RedisOpsUtils.zGetMin(RedisConst.WAYLINE_JOB_TIMED_EXECUTE);
|
|
|
@@ -229,7 +230,7 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
|
|
|
|
|
|
if (TaskTypeEnum.TIMED == param.getTaskType() && null != param.getTaskTime()) {
|
|
|
boolean flg = waylineJobService.checkWaylineJobTime(param, customClaim.getWorkspaceId(), param.getTaskTime(),param.getTaskTime());
|
|
|
- if(flg) {
|
|
|
+ if(!flg) {
|
|
|
throw new RuntimeException("该时间段不可用");
|
|
|
}
|
|
|
Optional<WaylineJobDTO> waylineJobOpt = waylineJobService.createWaylineJob(param, customClaim.getWorkspaceId(), customClaim.getUsername(), param.getTaskTime(), param.getTaskTime());
|
|
|
@@ -257,7 +258,7 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
|
|
|
continue;
|
|
|
}
|
|
|
boolean flg = waylineJobService.checkWaylineJobTime(param, customClaim.getWorkspaceId(), beginTime,endTime);
|
|
|
- if(flg) {
|
|
|
+ if(!flg) {
|
|
|
throw new RuntimeException("该时间段不可用");
|
|
|
}
|
|
|
Optional<WaylineJobDTO> waylineJobOpt = waylineJobService.createWaylineJob(param, customClaim.getWorkspaceId(), customClaim.getUsername(), beginTime, endTime);
|
|
|
@@ -340,6 +341,9 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
|
|
|
flightTask.setReadyConditions(waylineJob.getConditions().getReadyConditions());
|
|
|
flightTask.setExecutableConditions(waylineJob.getConditions().getExecutableConditions());
|
|
|
}
|
|
|
+ if(null != waylineJob.getBreakPoint()) {
|
|
|
+ flightTask.setBreakPoint(waylineJob.getBreakPoint());
|
|
|
+ }
|
|
|
|
|
|
TopicServicesResponse<ServicesReplyData> serviceReply = abstractWaylineService.flighttaskPrepare(
|
|
|
SDKManager.getDeviceSDK(waylineJob.getDockSn()), flightTask);
|
|
|
@@ -408,7 +412,7 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
|
|
|
// Check if the task status is correct.
|
|
|
boolean isErr = !jobIds.removeAll(waylineJobIds) || !jobIds.isEmpty() ;
|
|
|
if (isErr) {
|
|
|
- throw new IllegalArgumentException("These tasks have an incorrect status and cannot be canceled. " + Arrays.toString(jobIds.toArray()));
|
|
|
+ throw new IllegalArgumentException("任务的状态不正确,无法删除。 " + Arrays.toString(jobIds.toArray()));
|
|
|
}
|
|
|
|
|
|
// Group job id by dock sn.
|
|
|
@@ -537,8 +541,38 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void reStart(String workspaceId, String jobId) {
|
|
|
- //to do
|
|
|
+ public void reStart(String workspaceId, String jobId) throws SQLException {
|
|
|
+ WaylineBreakPointEntity breakPointEntity = waylineBreakPointService.selByJobId(jobId);
|
|
|
+ if( null == breakPointEntity) {
|
|
|
+ throw new RuntimeException("不存在断点信息");
|
|
|
+ }
|
|
|
+ WaylineJobDTO waylineJob = waylineJobService.getJobByJobId(workspaceId,jobId).get();
|
|
|
+ long now = System.currentTimeMillis() / 1000;
|
|
|
+ // If it is a conditional task type, add conditions to the job parameters.
|
|
|
+ waylineJob.setConditions(
|
|
|
+ WaylineTaskConditionDTO.builder()
|
|
|
+ .readyConditions(new ReadyConditions()
|
|
|
+ .setBeginTime(now)
|
|
|
+ .setEndTime(now))
|
|
|
+ .build());
|
|
|
+
|
|
|
+ FlighttaskBreakPoint breakPoint = new FlighttaskBreakPoint();
|
|
|
+ breakPoint.setIndex(breakPointEntity.getBreakIndex());
|
|
|
+ breakPoint.setProgress(breakPointEntity.getProgress());
|
|
|
+ breakPoint.setState(BreakpointStateEnum.find(breakPointEntity.getState()));
|
|
|
+ breakPoint.setWaylineId(breakPointEntity.getWaylineId());
|
|
|
+ waylineJob.setBreakPoint(breakPoint);
|
|
|
+
|
|
|
+ waylineRedisService.setConditionalWaylineJob(waylineJob);
|
|
|
+ // key: wayline_job_condition, value: {workspace_id}:{dock_sn}:{job_id}
|
|
|
+ boolean isAdd = waylineRedisService.addPrepareConditionalWaylineJob(waylineJob);
|
|
|
+ if (!isAdd) {
|
|
|
+ throw new RuntimeException("Failed to create conditional job.");
|
|
|
+ }
|
|
|
+ HttpResultResponse response = this.publishOneFlightTask(waylineJob);
|
|
|
+ if (HttpResultResponse.CODE_SUCCESS != response.getCode()) {
|
|
|
+ throw new RuntimeException(response.getMessage());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -581,4 +615,15 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
|
|
|
return new TopicEventsResponse<>();
|
|
|
}
|
|
|
|
|
|
+ public static void main(String[] args) {
|
|
|
+ // 假设 date 是一个 LocalDate 对象,taskPeriod.get(0) 是一个 Long 类型的秒数
|
|
|
+ LocalDate date = LocalDate.ofInstant(Instant.ofEpochSecond(1728748800000L), ZoneId.systemDefault());
|
|
|
+ List<Long> taskPeriod = List.of(1727694600000L); // 假设这是你的任务周期
|
|
|
+
|
|
|
+ long beginTime = LocalDateTime.of(date, LocalTime.ofInstant(Instant.ofEpochSecond(taskPeriod.get(0)), ZoneId.systemDefault()))
|
|
|
+ .atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
|
|
|
+
|
|
|
+ System.out.println("beginTime: " + beginTime);
|
|
|
+ }
|
|
|
+
|
|
|
}
|