From 5597fd0de8874867550680ecf85ed3f935fce042 Mon Sep 17 00:00:00 2001
From: xieb <vip_xiaobin810@163.com>
Date: Tue, 16 Apr 2024 14:05:58 +0800
Subject: [PATCH] 断点续飞
---
src/main/java/com/dji/sample/wayline/model/dto/WaylineTaskCreateDTO.java | 3 +
src/main/java/com/dji/sample/wayline/model/dto/BreakPointJobDTO.java | 24 ++++++++
src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java | 12 ++++
src/main/java/com/dji/sample/wayline/model/param/BreakPointJobParam.java | 23 +++++++
src/main/java/com/dji/sample/wayline/service/impl/WaylineJobBreakPointServiceImpl.java | 3
src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java | 50 ++++++++++++++--
src/main/java/com/dji/sample/wayline/service/IWaylineJobService.java | 2
src/main/java/com/dji/sample/wayline/model/dto/WaylineJobDTO.java | 3 +
src/main/java/com/dji/sample/wayline/service/IWaylineJobBreakPointService.java | 3
9 files changed, 113 insertions(+), 10 deletions(-)
diff --git a/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java b/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java
index 9026fef..b0a3ac9 100644
--- a/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java
+++ b/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java
@@ -77,6 +77,18 @@
}
/**
+ * 断点任务
+ * @return
+ */
+ @PostMapping("/{workspace_id}/breakpoint-tasks")
+ @SysLogAnnotation(operModul = "计划库", operType = "断点续飞", operDesc = "创建航路任务(重复定时和连续执行)")
+ public ResponseResult breakPointJob(HttpServletRequest request, @Valid @RequestBody BreakPointJobParam param,
+ @PathVariable(name = "workspace_id") String workspaceId) throws SQLException {
+ Optional<WaylineJobDTO> waylineJobDTO = waylineJobService.getJobByJobId(workspaceId, param.getJobId(),param.isBreakPoint());
+ return waylineJobService.publishOneFlightTask(waylineJobDTO.get());
+ }
+
+ /**
* 分页查询
*
* @param page
diff --git a/src/main/java/com/dji/sample/wayline/model/dto/BreakPointJobDTO.java b/src/main/java/com/dji/sample/wayline/model/dto/BreakPointJobDTO.java
new file mode 100644
index 0000000..1b30175
--- /dev/null
+++ b/src/main/java/com/dji/sample/wayline/model/dto/BreakPointJobDTO.java
@@ -0,0 +1,24 @@
+package com.dji.sample.wayline.model.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/4/16 10:28
+ */
+@Builder
+@Data
+public class BreakPointJobDTO {
+
+ private Integer index;
+
+ private Integer state;
+
+ private Double progress;
+
+ private Integer waylineId;
+}
diff --git a/src/main/java/com/dji/sample/wayline/model/dto/WaylineJobDTO.java b/src/main/java/com/dji/sample/wayline/model/dto/WaylineJobDTO.java
index cb03a05..00590eb 100644
--- a/src/main/java/com/dji/sample/wayline/model/dto/WaylineJobDTO.java
+++ b/src/main/java/com/dji/sample/wayline/model/dto/WaylineJobDTO.java
@@ -1,5 +1,6 @@
package com.dji.sample.wayline.model.dto;
+import com.dji.sample.wayline.model.entity.WaylineJobBreakPointEntity;
import com.dji.sample.wayline.model.enums.WaylineTaskTypeEnum;
import com.dji.sample.wayline.model.enums.WaylineTemplateTypeEnum;
import lombok.AllArgsConstructor;
@@ -69,4 +70,6 @@
private String parentId;
private String hasChildren;
+
+ private WaylineJobBreakPointEntity waylineJobBreakPointEntity;
}
diff --git a/src/main/java/com/dji/sample/wayline/model/dto/WaylineTaskCreateDTO.java b/src/main/java/com/dji/sample/wayline/model/dto/WaylineTaskCreateDTO.java
index 04cde89..7f2e332 100644
--- a/src/main/java/com/dji/sample/wayline/model/dto/WaylineTaskCreateDTO.java
+++ b/src/main/java/com/dji/sample/wayline/model/dto/WaylineTaskCreateDTO.java
@@ -35,4 +35,7 @@
private WaylineTaskReadyConditionDTO readyConditions;
private WaylineTaskExecutableConditionDTO executableConditions;
+
+ private BreakPointJobDTO breakPoint;
+
}
diff --git a/src/main/java/com/dji/sample/wayline/model/param/BreakPointJobParam.java b/src/main/java/com/dji/sample/wayline/model/param/BreakPointJobParam.java
new file mode 100644
index 0000000..32dc313
--- /dev/null
+++ b/src/main/java/com/dji/sample/wayline/model/param/BreakPointJobParam.java
@@ -0,0 +1,23 @@
+package com.dji.sample.wayline.model.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/4/16 10:01
+ */
+@Data
+public class BreakPointJobParam {
+
+ @NotBlank
+ private String jobId;
+
+ @NotNull
+ private boolean breakPoint;//是否断点续飞
+
+}
diff --git a/src/main/java/com/dji/sample/wayline/service/IWaylineJobBreakPointService.java b/src/main/java/com/dji/sample/wayline/service/IWaylineJobBreakPointService.java
index b5bfc38..8f74661 100644
--- a/src/main/java/com/dji/sample/wayline/service/IWaylineJobBreakPointService.java
+++ b/src/main/java/com/dji/sample/wayline/service/IWaylineJobBreakPointService.java
@@ -1,5 +1,6 @@
package com.dji.sample.wayline.service;
+import com.baomidou.mybatisplus.extension.service.IService;
import com.dji.sample.wayline.model.entity.WaylineJobBreakPointEntity;
/**
@@ -8,7 +9,7 @@
* @USER: aix
* @DATE: 2024/3/23 11:07
*/
-public interface IWaylineJobBreakPointService {
+public interface IWaylineJobBreakPointService extends IService<WaylineJobBreakPointEntity> {
public boolean addWaylineJobBreakPoint(WaylineJobBreakPointEntity entity);
}
diff --git a/src/main/java/com/dji/sample/wayline/service/IWaylineJobService.java b/src/main/java/com/dji/sample/wayline/service/IWaylineJobService.java
index ba4833b..29fc99b 100644
--- a/src/main/java/com/dji/sample/wayline/service/IWaylineJobService.java
+++ b/src/main/java/com/dji/sample/wayline/service/IWaylineJobService.java
@@ -112,6 +112,8 @@
*/
Optional<WaylineJobDTO> getJobByJobId(String workspaceId, String jobId);
+ Optional<WaylineJobDTO> getJobByJobId(String workspaceId, String jobId,Boolean isBreakPoint);
+
/**
* Update job data.
* @param dto
diff --git a/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobBreakPointServiceImpl.java b/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobBreakPointServiceImpl.java
index e456ed2..f8b418f 100644
--- a/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobBreakPointServiceImpl.java
+++ b/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobBreakPointServiceImpl.java
@@ -1,5 +1,6 @@
package com.dji.sample.wayline.service.impl;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dji.sample.wayline.dao.IWaylineJobBreakPointMapper;
import com.dji.sample.wayline.model.entity.WaylineJobBreakPointEntity;
import com.dji.sample.wayline.service.IWaylineJobBreakPointService;
@@ -15,7 +16,7 @@
*/
@Service
@Transactional
-public class WaylineJobBreakPointServiceImpl implements IWaylineJobBreakPointService {
+public class WaylineJobBreakPointServiceImpl extends ServiceImpl<IWaylineJobBreakPointMapper,WaylineJobBreakPointEntity> implements IWaylineJobBreakPointService {
@Autowired
private IWaylineJobBreakPointMapper mapper;
diff --git a/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java b/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java
index b40ba98..4ffcbd7 100644
--- a/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java
+++ b/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
@@ -44,10 +45,12 @@
import com.dji.sample.geo.utils.GeoUtils;
import com.dji.sample.wayline.dao.IWaylineJobMapper;
import com.dji.sample.wayline.model.dto.*;
+import com.dji.sample.wayline.model.entity.WaylineJobBreakPointEntity;
import com.dji.sample.wayline.model.entity.WaylineJobEntity;
import com.dji.sample.wayline.model.enums.*;
import com.dji.sample.wayline.model.param.*;
import com.dji.sample.wayline.service.IWaylineFileService;
+import com.dji.sample.wayline.service.IWaylineJobBreakPointService;
import com.dji.sample.wayline.service.IWaylineJobService;
import com.dji.sample.wayline.service.IWaylineRedisService;
import com.fasterxml.jackson.core.type.TypeReference;
@@ -112,6 +115,9 @@
@Autowired
private IDroneFlightLogMapper flightLogMapper;
+
+ @Autowired
+ private IWaylineJobBreakPointService waylineJobBreakPointService;
private Optional<WaylineJobDTO> insertWaylineJob(WaylineJobEntity jobEntity) {
int id = mapper.insert(jobEntity);
@@ -355,8 +361,7 @@
// get file url
//获取航线文件地址
URL url = waylineFileService.getObjectUrl(waylineJob.getWorkspaceId(), waylineFile.get().getWaylineId());
- WaylineTaskCreateDTO flightTask = WaylineTaskCreateDTO.builder()
- .flightId(waylineJob.getJobId())
+ WaylineTaskCreateDTO.WaylineTaskCreateDTOBuilder flightTaskBuilder = WaylineTaskCreateDTO.builder().flightId(waylineJob.getJobId())
.executeTime(waylineJob.getBeginTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli())
.taskType(waylineJob.getTaskType())
.waylineType(waylineJob.getWaylineType())
@@ -365,8 +370,18 @@
.file(WaylineTaskFileDTO.builder()
.url(MinioUrlUtils.getUrl(url))
.fingerprint(waylineFile.get().getSign())
- .build())
- .build();
+ .build());
+ WaylineJobBreakPointEntity entity = waylineJob.getWaylineJobBreakPointEntity();
+ if (null != entity) {
+ flightTaskBuilder.breakPoint(BreakPointJobDTO.builder()
+ .index(entity.getBpIndex())
+ .state(entity.getState())
+ .progress(entity.getProgress())
+ .waylineId(entity.getWaylineId())
+ .build());
+ }
+
+ WaylineTaskCreateDTO flightTask = flightTaskBuilder.build();
//当任务类型为条件时
if (WaylineTaskTypeEnum.CONDITION == waylineJob.getTaskType()) {
@@ -499,6 +514,25 @@
.eq(WaylineJobEntity::getWorkspaceId, workspaceId)
.eq(WaylineJobEntity::getJobId, jobId));
return Optional.ofNullable(entity2Dto(jobEntity));
+ }
+
+ @Override
+ public Optional<WaylineJobDTO> getJobByJobId(String workspaceId, String jobId,Boolean isBreakPoint) {
+ WaylineJobEntity jobEntity = mapper.selectOne(
+ new LambdaQueryWrapper<WaylineJobEntity>()
+ .eq(WaylineJobEntity::getWorkspaceId, workspaceId)
+ .eq(WaylineJobEntity::getJobId, jobId));
+ WaylineJobDTO waylineJobDTO = entity2Dto(jobEntity);
+ if (isBreakPoint) {
+ QueryWrapper queryWrapper = new QueryWrapper();
+ queryWrapper.eq("job_id", jobId);
+ WaylineJobBreakPointEntity waylineJobBreakPointEntity = waylineJobBreakPointService.getOne(queryWrapper);
+ waylineJobDTO.setWaylineJobBreakPointEntity(waylineJobBreakPointEntity);
+ }
+
+ //设置当前时间为执行时间
+ waylineJobDTO.setBeginTime(LocalDateTime.now());
+ return Optional.ofNullable(waylineJobDTO);
}
@Override
@@ -916,7 +950,7 @@
@Override
public WaylineJobCountDTO patrolStatistics(String workspaceId, String queryTime,String deviceSn) {
WaylineJobCountDTO waylineJobCountDTO = new WaylineJobCountDTO();
- List<DroneFlightLogEntity> list = flightLogMapper.patrolStatistics(workspaceId,queryTime,deviceSn);
+ List<DroneFlightLogEntity> list = flightLogMapper.patrolStatistics(workspaceId,queryTime,deviceSn);
if (!CollectionUtils.isEmpty(list)) {
waylineJobCountDTO.setTotalNumber(list.size());
long totalTime = list.stream().filter(task -> task.getEndTime()!= null && task.getStartTime()!= null).mapToLong(s -> s.getEndTime() - s.getStartTime()).sum() / 1000;
@@ -928,9 +962,9 @@
for (String sn : deviceSns) {
Double totalFlightDistance = new LambdaQueryChainWrapper<>(flightLogMapper)
.eq(DroneFlightLogEntity::getDeviceSn, sn).orderByDesc(DroneFlightLogEntity::getEndTime).last("limit 1").one().getTotalFlightDistance();
- if (totalFlightDistance!= null){
- sum+=totalFlightDistance;
- }
+ if (totalFlightDistance!= null){
+ sum+=totalFlightDistance;
+ }
}
waylineJobCountDTO.setTotalDistance((int) sum);
}
--
Gitblit v1.9.3