Browse Source

航线任务创建修改 列表查询修改 断点续飞

S0025136190 1 year ago
parent
commit
03f7452c8b

+ 3 - 3
Backend/sample/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java

@@ -118,10 +118,10 @@ public class WaylineJobController {
         return HttpResultResponse.success(data.get());
         return HttpResultResponse.success(data.get());
     }
     }
 
 
-    @PostMapping("/{workspace_id}/jobs/{job_id}/renewal")
+    @PostMapping("/{workspace_id}/{job_id}/renewal")
     public HttpResultResponse renewal(@PathVariable(name = "workspace_id") String workspaceId,
     public HttpResultResponse renewal(@PathVariable(name = "workspace_id") String workspaceId,
-                                                         @PathVariable(name = "job_id") String jobId) {
-        flighttaskService.uploadMediaHighestPriority(workspaceId, jobId);
+                                                         @PathVariable(name = "job_id") String jobId) throws SQLException {
+        flighttaskService.reStart(workspaceId, jobId);
         return HttpResultResponse.success();
         return HttpResultResponse.success();
     }
     }
 }
 }

+ 12 - 0
Backend/sample/src/main/java/com/dji/sample/wayline/dao/IWaylineBreakPointMapper.java

@@ -0,0 +1,12 @@
+package com.dji.sample.wayline.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dji.sample.wayline.model.entity.WaylineBreakPointEntity;
+
+/**
+ * @author huiqing.jiang
+ * @version 0.3
+ * @date 2024/9/30
+ */
+public interface IWaylineBreakPointMapper extends BaseMapper<WaylineBreakPointEntity> {
+}

+ 3 - 1
Backend/sample/src/main/java/com/dji/sample/wayline/dao/IWaylineJobMapper.java

@@ -17,7 +17,7 @@ public interface IWaylineJobMapper extends BaseMapper<WaylineJobEntity> {
     @Select("<script>" +
     @Select("<script>" +
             " select wj.id" +
             " select wj.id" +
             "   ,wj.job_id jobId " +
             "   ,wj.job_id jobId " +
-            "   ,wj.name jobId " +
+            "   ,wj.name  " +
             "   ,wj.file_id fileId " +
             "   ,wj.file_id fileId " +
             "   ,wj.dock_sn dockSn " +
             "   ,wj.dock_sn dockSn " +
             "   ,wj.workspace_id workspaceId " +
             "   ,wj.workspace_id workspaceId " +
@@ -36,6 +36,8 @@ public interface IWaylineJobMapper extends BaseMapper<WaylineJobEntity> {
             "   ,wj.begin_time beginTime " +
             "   ,wj.begin_time beginTime " +
             "   ,wj.completed_time completedTime " +
             "   ,wj.completed_time completedTime " +
             "   ,wj.parent_id parentId " +
             "   ,wj.parent_id parentId " +
+            "   ,wj.breakpoint_continuation breakpointContinuation " +
+            "   ,wj.wayline_precision_type waylinePrecisionType " +
             " from wayline_job wj" +
             " from wayline_job wj" +
             " left join wayline_file wf on wj.file_id = wf.wayline_id " +
             " left join wayline_file wf on wj.file_id = wf.wayline_id " +
             " where wj.workspace_id = #{workspaceId} " +
             " where wj.workspace_id = #{workspaceId} " +

+ 4 - 5
Backend/sample/src/main/java/com/dji/sample/wayline/model/dto/WaylineJobDTO.java

@@ -1,9 +1,6 @@
 package com.dji.sample.wayline.model.dto;
 package com.dji.sample.wayline.model.dto;
 
 
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.dji.sdk.cloudapi.wayline.OutOfControlActionEnum;
-import com.dji.sdk.cloudapi.wayline.TaskTypeEnum;
-import com.dji.sdk.cloudapi.wayline.WaylineTypeEnum;
+import com.dji.sdk.cloudapi.wayline.*;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Builder;
 import lombok.Data;
 import lombok.Data;
@@ -70,7 +67,9 @@ public class WaylineJobDTO {
 
 
     private String parentId;
     private String parentId;
 
 
-    private String breakpointContinuation;
+    private Boolean breakpointContinuation;
 
 
     private Integer waylinePrecisionType;
     private Integer waylinePrecisionType;
+
+    private FlighttaskBreakPoint breakPoint;
 }
 }

+ 63 - 0
Backend/sample/src/main/java/com/dji/sample/wayline/model/entity/WaylineBreakPointEntity.java

@@ -0,0 +1,63 @@
+package com.dji.sample.wayline.model.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author huiqing.jiang
+ * @version 0.3
+ * @date 2024/9/30
+ */
+@Data
+@TableName("wayline_break_point")
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class WaylineBreakPointEntity implements Serializable {
+
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("break_index")
+    private Integer breakIndex;
+
+    @TableField("state")
+    private Integer state;
+
+    @TableField("progress")
+    private Float progress;
+
+    @TableField("wayline_id")
+    private Integer waylineId;
+
+    @TableField("flight_id")
+    private String flightId;
+
+    @TableField("break_reason")
+    private String breakReason;
+
+    @TableField("longitude")
+    private BigDecimal longitude;
+
+    @TableField("latitude")
+    private BigDecimal latitude;
+
+    @TableField("height")
+    private BigDecimal height;
+
+    @TableField("attitude_head")
+    private BigDecimal attitudeHead;
+
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    private Long createTime;
+
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+
+}

+ 0 - 1
Backend/sample/src/main/java/com/dji/sample/wayline/model/param/CreateJobParam.java

@@ -37,7 +37,6 @@ public class CreateJobParam {
     @NotNull
     @NotNull
     private Integer rthAltitude;
     private Integer rthAltitude;
 
 
-    @NotNull
     private OutOfControlActionEnum outOfControlAction;
     private OutOfControlActionEnum outOfControlAction;
 
 
     @Range(min = 50, max = 90)
     @Range(min = 50, max = 90)

+ 1 - 1
Backend/sample/src/main/java/com/dji/sample/wayline/service/IFlightTaskService.java

@@ -76,5 +76,5 @@ public interface IFlightTaskService {
 
 
     void retryPrepareJob(ConditionalWaylineJobKey jobKey, WaylineJobDTO waylineJob);
     void retryPrepareJob(ConditionalWaylineJobKey jobKey, WaylineJobDTO waylineJob);
 
 
-    void reStart(String workspaceId, String jobId);
+    void reStart(String workspaceId, String jobId) throws SQLException;
 }
 }

+ 17 - 0
Backend/sample/src/main/java/com/dji/sample/wayline/service/IWaylineBreakPointService.java

@@ -0,0 +1,17 @@
+package com.dji.sample.wayline.service;
+
+
+import com.dji.sample.wayline.model.entity.WaylineBreakPointEntity;
+
+/**
+ * @author huiqing.jiang
+ * @version 1.1
+ * @date 2024/9/30
+ */
+public interface IWaylineBreakPointService {
+
+    void insert(WaylineBreakPointEntity entity);
+
+    WaylineBreakPointEntity selByJobId(String jobId);
+
+}

+ 54 - 9
Backend/sample/src/main/java/com/dji/sample/wayline/service/impl/FlightTaskServiceImpl.java

@@ -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.ConditionalWaylineJobKey;
 import com.dji.sample.wayline.model.dto.WaylineJobDTO;
 import com.dji.sample.wayline.model.dto.WaylineJobDTO;
 import com.dji.sample.wayline.model.dto.WaylineTaskConditionDTO;
 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.WaylineErrorCodeEnum;
 import com.dji.sample.wayline.model.enums.WaylineJobStatusEnum;
 import com.dji.sample.wayline.model.enums.WaylineJobStatusEnum;
 import com.dji.sample.wayline.model.param.CreateJobParam;
 import com.dji.sample.wayline.model.param.CreateJobParam;
 import com.dji.sample.wayline.model.param.UpdateJobParam;
 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.device.ExitWaylineWhenRcLostEnum;
 import com.dji.sdk.cloudapi.media.UploadFlighttaskMediaPrioritize;
 import com.dji.sdk.cloudapi.media.UploadFlighttaskMediaPrioritize;
 import com.dji.sdk.cloudapi.media.api.AbstractMediaService;
 import com.dji.sdk.cloudapi.media.api.AbstractMediaService;
@@ -87,6 +85,9 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
     @Qualifier("mediaServiceImpl")
     @Qualifier("mediaServiceImpl")
     private AbstractMediaService abstractMediaService;
     private AbstractMediaService abstractMediaService;
 
 
+    @Autowired
+    private IWaylineBreakPointService waylineBreakPointService;
+
     @Scheduled(initialDelay = 10, fixedRate = 5, timeUnit = TimeUnit.SECONDS)
     @Scheduled(initialDelay = 10, fixedRate = 5, timeUnit = TimeUnit.SECONDS)
     public void checkScheduledJob() {
     public void checkScheduledJob() {
         Object jobIdValue = RedisOpsUtils.zGetMin(RedisConst.WAYLINE_JOB_TIMED_EXECUTE);
         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()) {
         if (TaskTypeEnum.TIMED == param.getTaskType() && null != param.getTaskTime()) {
             boolean flg =  waylineJobService.checkWaylineJobTime(param, customClaim.getWorkspaceId(), param.getTaskTime(),param.getTaskTime());
             boolean flg =  waylineJobService.checkWaylineJobTime(param, customClaim.getWorkspaceId(), param.getTaskTime(),param.getTaskTime());
-            if(flg) {
+            if(!flg) {
                 throw new RuntimeException("该时间段不可用");
                 throw new RuntimeException("该时间段不可用");
             }
             }
             Optional<WaylineJobDTO> waylineJobOpt = waylineJobService.createWaylineJob(param, customClaim.getWorkspaceId(), customClaim.getUsername(), param.getTaskTime(), param.getTaskTime());
             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;
                     continue;
                 }
                 }
                 boolean flg =  waylineJobService.checkWaylineJobTime(param, customClaim.getWorkspaceId(), beginTime,endTime);
                 boolean flg =  waylineJobService.checkWaylineJobTime(param, customClaim.getWorkspaceId(), beginTime,endTime);
-                if(flg) {
+                if(!flg) {
                     throw new RuntimeException("该时间段不可用");
                     throw new RuntimeException("该时间段不可用");
                 }
                 }
                 Optional<WaylineJobDTO> waylineJobOpt = waylineJobService.createWaylineJob(param, customClaim.getWorkspaceId(), customClaim.getUsername(), beginTime, endTime);
                 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.setReadyConditions(waylineJob.getConditions().getReadyConditions());
             flightTask.setExecutableConditions(waylineJob.getConditions().getExecutableConditions());
             flightTask.setExecutableConditions(waylineJob.getConditions().getExecutableConditions());
         }
         }
+        if(null != waylineJob.getBreakPoint()) {
+            flightTask.setBreakPoint(waylineJob.getBreakPoint());
+        }
 
 
         TopicServicesResponse<ServicesReplyData> serviceReply = abstractWaylineService.flighttaskPrepare(
         TopicServicesResponse<ServicesReplyData> serviceReply = abstractWaylineService.flighttaskPrepare(
                 SDKManager.getDeviceSDK(waylineJob.getDockSn()), flightTask);
                 SDKManager.getDeviceSDK(waylineJob.getDockSn()), flightTask);
@@ -408,7 +412,7 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
         // Check if the task status is correct.
         // Check if the task status is correct.
         boolean isErr = !jobIds.removeAll(waylineJobIds) || !jobIds.isEmpty() ;
         boolean isErr = !jobIds.removeAll(waylineJobIds) || !jobIds.isEmpty() ;
         if (isErr) {
         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.
         // Group job id by dock sn.
@@ -537,8 +541,38 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
     }
     }
 
 
     @Override
     @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<>();
         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);
+    }
+
 }
 }

+ 23 - 0
Backend/sample/src/main/java/com/dji/sample/wayline/service/impl/SDKWaylineService.java

@@ -10,7 +10,9 @@ import com.dji.sample.manage.service.IDeviceRedisService;
 import com.dji.sample.media.model.MediaFileCountDTO;
 import com.dji.sample.media.model.MediaFileCountDTO;
 import com.dji.sample.media.service.IMediaRedisService;
 import com.dji.sample.media.service.IMediaRedisService;
 import com.dji.sample.wayline.model.dto.WaylineJobDTO;
 import com.dji.sample.wayline.model.dto.WaylineJobDTO;
+import com.dji.sample.wayline.model.entity.WaylineBreakPointEntity;
 import com.dji.sample.wayline.model.enums.WaylineJobStatusEnum;
 import com.dji.sample.wayline.model.enums.WaylineJobStatusEnum;
+import com.dji.sample.wayline.service.IWaylineBreakPointService;
 import com.dji.sample.wayline.service.IWaylineFileService;
 import com.dji.sample.wayline.service.IWaylineFileService;
 import com.dji.sample.wayline.service.IWaylineJobService;
 import com.dji.sample.wayline.service.IWaylineJobService;
 import com.dji.sample.wayline.service.IWaylineRedisService;
 import com.dji.sample.wayline.service.IWaylineRedisService;
@@ -29,6 +31,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
+import java.math.BigDecimal;
 import java.net.URL;
 import java.net.URL;
 import java.sql.SQLException;
 import java.sql.SQLException;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
@@ -62,6 +65,9 @@ public class SDKWaylineService extends AbstractWaylineService {
     @Autowired
     @Autowired
     private IWaylineFileService waylineFileService;
     private IWaylineFileService waylineFileService;
 
 
+    @Autowired
+    private IWaylineBreakPointService waylineBreakPointService;
+
     @Override
     @Override
     public TopicEventsResponse<MqttReply> deviceExitHomingNotify(TopicEventsRequest<DeviceExitHomingNotify> request, MessageHeaders headers) {
     public TopicEventsResponse<MqttReply> deviceExitHomingNotify(TopicEventsRequest<DeviceExitHomingNotify> request, MessageHeaders headers) {
         return super.deviceExitHomingNotify(request, headers);
         return super.deviceExitHomingNotify(request, headers);
@@ -108,6 +114,23 @@ public class SDKWaylineService extends AbstractWaylineService {
                 job.setCode(eventsReceiver.getResult().getCode());
                 job.setCode(eventsReceiver.getResult().getCode());
                 job.setStatus(WaylineJobStatusEnum.FAILED.getVal());
                 job.setStatus(WaylineJobStatusEnum.FAILED.getVal());
             }
             }
+            //断点插表
+            if(output.getExt().getWaylineMissionState().getState() == 7) {
+                ProgressExtBreakPoint breakPoint = output.getExt().getBreakPoint();
+                WaylineBreakPointEntity breakPointEntity = WaylineBreakPointEntity.builder()
+                        .breakIndex(breakPoint.getIndex())
+                        .state(breakPoint.getState().getState())
+                        .progress(breakPoint.getProgress())
+                        .flightId(job.getJobId())
+                        .breakReason(breakPoint.getBreakReason().getMsg())
+                        .longitude(new BigDecimal(breakPoint.getLongitude()))
+                        .latitude(new BigDecimal(breakPoint.getLatitude()))
+                        .height(new BigDecimal(breakPoint.getHeight()))
+                        .attitudeHead(new BigDecimal(breakPoint.getAttitudeHead()))
+                        .waylineId(breakPoint.getWaylineId())
+                        .build();
+                waylineBreakPointService.insert(breakPointEntity);
+            }
             waylineJobService.updateJob(job);
             waylineJobService.updateJob(job);
             waylineRedisService.delRunningWaylineJob(response.getGateway());
             waylineRedisService.delRunningWaylineJob(response.getGateway());
             waylineRedisService.delPausedWaylineJob(response.getBid());
             waylineRedisService.delPausedWaylineJob(response.getBid());

+ 44 - 0
Backend/sample/src/main/java/com/dji/sample/wayline/service/impl/WaylineBreakPointServiceImpl.java

@@ -0,0 +1,44 @@
+package com.dji.sample.wayline.service.impl;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.dji.sample.wayline.dao.IWaylineBreakPointMapper;
+import com.dji.sample.wayline.model.entity.WaylineBreakPointEntity;
+import com.dji.sample.wayline.service.IWaylineBreakPointService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @author huiqing.jiang
+ * @version 1.1
+ * @date 2024/9/30
+ */
+@Service
+@Transactional
+@Slf4j
+public class WaylineBreakPointServiceImpl implements IWaylineBreakPointService {
+
+    @Autowired
+    private IWaylineBreakPointMapper mapper;
+
+    @Override
+    public void insert(WaylineBreakPointEntity entity) {
+        mapper.insert(entity);
+    }
+
+    @Override
+    public WaylineBreakPointEntity selByJobId(String jobId) {
+        LambdaQueryWrapper<WaylineBreakPointEntity> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(WaylineBreakPointEntity::getFlightId,jobId)
+                .orderByDesc(WaylineBreakPointEntity::getCreateTime);
+        List<WaylineBreakPointEntity> list = mapper.selectList(wrapper);
+        return list.get(0);
+    }
+
+
+
+}

+ 3 - 3
Backend/sample/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java

@@ -98,7 +98,7 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
                 .status(WaylineJobStatusEnum.PENDING.getVal())
                 .status(WaylineJobStatusEnum.PENDING.getVal())
                 .taskType(param.getTaskType().getType())
                 .taskType(param.getTaskType().getType())
                 .waylineType(param.getWaylineType().getValue())
                 .waylineType(param.getWaylineType().getValue())
-                .outOfControlAction(param.getOutOfControlAction().getAction())
+                //.outOfControlAction(param.getOutOfControlAction().getAction())
                 .rthAltitude(param.getRthAltitude())
                 .rthAltitude(param.getRthAltitude())
                 .mediaCount(0)
                 .mediaCount(0)
                 .breakpointContinuation(param.getBreakpointContinuation())
                 .breakpointContinuation(param.getBreakpointContinuation())
@@ -270,8 +270,8 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
                 .taskType(TaskTypeEnum.find(entity.getTaskType()))
                 .taskType(TaskTypeEnum.find(entity.getTaskType()))
                 .waylineType(WaylineTypeEnum.find(entity.getWaylineType()))
                 .waylineType(WaylineTypeEnum.find(entity.getWaylineType()))
                 .rthAltitude(entity.getRthAltitude())
                 .rthAltitude(entity.getRthAltitude())
-                .outOfControlAction(OutOfControlActionEnum.find(entity.getOutOfControlAction()))
-                .breakpointContinuation(entity.getBreakpointContinuation())
+                //.outOfControlAction(OutOfControlActionEnum.find(entity.getOutOfControlAction()))
+                .breakpointContinuation(Objects.nonNull(entity.getBreakpointContinuation()) ? Boolean.parseBoolean(entity.getBreakpointContinuation()):null)
                 .waylinePrecisionType(entity.getWaylinePrecisionType())
                 .waylinePrecisionType(entity.getWaylinePrecisionType())
                 .mediaCount(entity.getMediaCount());
                 .mediaCount(entity.getMediaCount());