Browse Source

航线任务创建修改 获取详情 时间check

S0025136190 1 year ago
parent
commit
cdbd249b8d

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

@@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
 import java.sql.SQLException;
+import java.util.Optional;
 import java.util.Set;
 
 import static com.dji.sample.component.AuthInterceptor.TOKEN_CLAIM;
@@ -63,7 +64,7 @@ public class WaylineJobController {
                                                                      @RequestParam(required = false) Long begin_time,
                                                                      @RequestParam(required = false) Long end_time,
                                                                      @RequestParam(required = false) String search_info,
-                                                                     @RequestParam String snList,
+                                                                     @RequestParam(required = false) String snList,
                                                                      @PathVariable(name = "workspace_id") String workspaceId) {
         PaginationData<WaylineJobDTO> data = waylineJobService.getJobsByWorkspaceId(workspaceId, page, pageSize,begin_time,end_time,search_info,snList);
         return HttpResultResponse.success(data);
@@ -103,4 +104,24 @@ public class WaylineJobController {
         flighttaskService.updateJobStatus(workspaceId, jobId, param);
         return HttpResultResponse.success();
     }
+
+    /**
+     *
+     * @param jobId
+     * @param workspaceId
+     * @return
+     */
+    @GetMapping("/{workspace_id}/jobDetail")
+    public HttpResultResponse<WaylineJobDTO> getJobDetail(@RequestParam String jobId,
+                                                                     @PathVariable(name = "workspace_id") String workspaceId) {
+        Optional<WaylineJobDTO> data = waylineJobService.getJobByJobId(workspaceId, jobId);
+        return HttpResultResponse.success(data.get());
+    }
+
+    @PostMapping("/{workspace_id}/jobs/{job_id}/renewal")
+    public HttpResultResponse renewal(@PathVariable(name = "workspace_id") String workspaceId,
+                                                         @PathVariable(name = "job_id") String jobId) {
+        flighttaskService.uploadMediaHighestPriority(workspaceId, jobId);
+        return HttpResultResponse.success();
+    }
 }

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

@@ -1,5 +1,6 @@
 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;
@@ -68,4 +69,8 @@ public class WaylineJobDTO {
     private WaylineTaskConditionDTO conditions;
 
     private String parentId;
+
+    private String breakpointContinuation;
+
+    private Integer waylinePrecisionType;
 }

+ 6 - 0
Backend/sample/src/main/java/com/dji/sample/wayline/model/entity/WaylineJobEntity.java

@@ -82,4 +82,10 @@ public class WaylineJobEntity implements Serializable {
 
     @TableField("parent_id")
     private String parentId;
+
+    @TableField("breakpoint_continuation")
+    private String breakpointContinuation;
+
+    @TableField("wayline_precision_type")
+    private Integer waylinePrecisionType;
 }

+ 47 - 0
Backend/sample/src/main/java/com/dji/sample/wayline/model/enums/WaylinePrecisionTypeEnum.java

@@ -0,0 +1,47 @@
+package com.dji.sample.wayline.model.enums;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+import java.util.Arrays;
+import java.util.Optional;
+
+/**
+ * @author huiqing.jiang
+ * @version 1.3
+ * @date 2024/9/29
+ */
+public enum WaylinePrecisionTypeEnum {
+
+    RTK(1, "高精度RTK任务"),
+
+    GNSS(0, "GPS任务");
+
+    int val;
+
+    String type;
+
+    WaylinePrecisionTypeEnum(int val, String type) {
+        this.val = val;
+        this.type = type;
+    }
+
+    @JsonValue
+    public int getVal() {
+        return val;
+    }
+
+    @JsonValue
+    public String getType() {
+        return type;
+    }
+
+    @JsonCreator(mode = JsonCreator.Mode.DELEGATING)
+    public static WaylinePrecisionTypeEnum find(Integer val) {
+        return Arrays.stream(values()).filter(waylinePrecisionTypeEnum -> waylinePrecisionTypeEnum.val == val).findAny().orElse(null);
+    }
+
+    public static Optional<WaylinePrecisionTypeEnum> find(String type) {
+        return Arrays.stream(values()).filter(waylinePrecisionTypeEnum -> waylinePrecisionTypeEnum.type.equals(type)).findAny();
+    }
+}

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

@@ -45,7 +45,13 @@ public class CreateJobParam {
 
     private Integer minStorageCapacity;
 
+    private Long taskTime;
+
     private List<Long> taskDays;
 
-    private List<List<Long>> taskPeriods;
+    private List<Long> taskPeriods;
+
+    private String breakpointContinuation;
+
+    private Integer waylinePrecisionType;
 }

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

@@ -75,4 +75,6 @@ public interface IFlightTaskService {
     void updateJobStatus(String workspaceId, String jobId, UpdateJobParam param);
 
     void retryPrepareJob(ConditionalWaylineJobKey jobKey, WaylineJobDTO waylineJob);
+
+    void reStart(String workspaceId, String jobId);
 }

+ 2 - 0
Backend/sample/src/main/java/com/dji/sample/wayline/service/IWaylineJobService.java

@@ -74,4 +74,6 @@ public interface IWaylineJobService {
      * @return
      */
     WaylineJobStatusEnum getWaylineState(String dockSn);
+
+    boolean checkWaylineJobTime(CreateJobParam param, String workspaceId,Long beginTime, Long endTime);
 }

+ 36 - 8
Backend/sample/src/main/java/com/dji/sample/wayline/service/impl/FlightTaskServiceImpl.java

@@ -196,7 +196,7 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
         }
         long now = System.currentTimeMillis() / 1000;
         param.setTaskDays(List.of(now));
-        param.setTaskPeriods(List.of(List.of(now)));
+        param.setTaskPeriods(List.of(now));
     }
 
 
@@ -227,18 +227,39 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
     public HttpResultResponse publishFlightTask(CreateJobParam param, CustomClaim customClaim) throws SQLException {
         fillImmediateTime(param);
 
-        for (Long taskDay : param.getTaskDays()) {
-            LocalDate date = LocalDate.ofInstant(Instant.ofEpochSecond(taskDay), ZoneId.systemDefault());
-            for (List<Long> taskPeriod : param.getTaskPeriods()) {
+        if (TaskTypeEnum.TIMED == param.getTaskType() && null != param.getTaskTime()) {
+            boolean flg =  waylineJobService.checkWaylineJobTime(param, customClaim.getWorkspaceId(), param.getTaskTime(),param.getTaskTime());
+            if(flg) {
+                throw new RuntimeException("该时间段不可用");
+            }
+            Optional<WaylineJobDTO> waylineJobOpt = waylineJobService.createWaylineJob(param, customClaim.getWorkspaceId(), customClaim.getUsername(), param.getTaskTime(), param.getTaskTime());
+            if (waylineJobOpt.isEmpty()) {
+                throw new SQLException("Failed to create wayline job.");
+            }
+            WaylineJobDTO waylineJob = waylineJobOpt.get();
+            // If it is a conditional task type, add conditions to the job parameters.
+            addConditions(waylineJob, param, param.getTaskTime(), param.getTaskTime());
+
+            HttpResultResponse response = this.publishOneFlightTask(waylineJob);
+            if (HttpResultResponse.CODE_SUCCESS != response.getCode()) {
+                return response;
+            }
+        } else {
+            for (Long taskDay : param.getTaskDays()) {
+                LocalDate date = LocalDate.ofInstant(Instant.ofEpochSecond(taskDay), ZoneId.systemDefault());
+                List<Long> taskPeriod = param.getTaskPeriods();
                 long beginTime = LocalDateTime.of(date, LocalTime.ofInstant(Instant.ofEpochSecond(taskPeriod.get(0)), ZoneId.systemDefault()))
-                        .atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
+                            .atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
                 long endTime = taskPeriod.size() > 1 ?
-                        LocalDateTime.of(date, LocalTime.ofInstant(Instant.ofEpochSecond(taskPeriod.get(1)), ZoneId.systemDefault()))
-                                .atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() : beginTime;
+                            LocalDateTime.of(date, LocalTime.ofInstant(Instant.ofEpochSecond(taskPeriod.get(1)), ZoneId.systemDefault()))
+                                    .atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() : beginTime;
                 if (TaskTypeEnum.IMMEDIATE != param.getTaskType() && endTime < System.currentTimeMillis()) {
                     continue;
                 }
-
+                boolean flg =  waylineJobService.checkWaylineJobTime(param, customClaim.getWorkspaceId(), beginTime,endTime);
+                if(flg) {
+                    throw new RuntimeException("该时间段不可用");
+                }
                 Optional<WaylineJobDTO> waylineJobOpt = waylineJobService.createWaylineJob(param, customClaim.getWorkspaceId(), customClaim.getUsername(), beginTime, endTime);
                 if (waylineJobOpt.isEmpty()) {
                     throw new SQLException("Failed to create wayline job.");
@@ -251,8 +272,10 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
                 if (HttpResultResponse.CODE_SUCCESS != response.getCode()) {
                     return response;
                 }
+
             }
         }
+
         return HttpResultResponse.success();
     }
 
@@ -513,6 +536,11 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
         waylineRedisService.setConditionalWaylineJob(waylineJob);
     }
 
+    @Override
+    public void reStart(String workspaceId, String jobId) {
+        //to do
+    }
+
 
     @Override
     public TopicEventsResponse<MqttReply> flighttaskReady(TopicEventsRequest<FlighttaskReady> response, MessageHeaders headers) {

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

@@ -101,6 +101,8 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
                 .outOfControlAction(param.getOutOfControlAction().getAction())
                 .rthAltitude(param.getRthAltitude())
                 .mediaCount(0)
+                .breakpointContinuation(param.getBreakpointContinuation())
+                .waylinePrecisionType(param.getWaylinePrecisionType())
                 .build();
 
         return insertWaylineJob(jobEntity);
@@ -224,6 +226,20 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
         return WaylineJobStatusEnum.UNKNOWN;
     }
 
+    @Override
+    public boolean checkWaylineJobTime(CreateJobParam param, String workspaceId, Long beginTime, Long endTime) {
+        LambdaQueryWrapper<WaylineJobEntity> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(WaylineJobEntity::getWorkspaceId,workspaceId)
+                .eq(WaylineJobEntity::getDockSn,param.getDockSn())
+                .le(WaylineJobEntity::getBeginTime,beginTime)
+                .ge(WaylineJobEntity::getEndTime,endTime);
+        List<WaylineJobEntity> list =  mapper.selectList(wrapper);
+        if(CollectionUtils.isEmpty(list)) {
+            return true;
+        }
+        return false;
+    }
+
     private WaylineJobDTO entity2Dto(WaylineJobEntity entity) {
         if (entity == null) {
             return null;
@@ -255,6 +271,8 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
                 .waylineType(WaylineTypeEnum.find(entity.getWaylineType()))
                 .rthAltitude(entity.getRthAltitude())
                 .outOfControlAction(OutOfControlActionEnum.find(entity.getOutOfControlAction()))
+                .breakpointContinuation(entity.getBreakpointContinuation())
+                .waylinePrecisionType(entity.getWaylinePrecisionType())
                 .mediaCount(entity.getMediaCount());
 
         if (Objects.nonNull(entity.getEndTime())) {