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 src/main/java/com/dji/sample/wayline/model/dto/BreakPointJobDTO.java
New file @@ -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; } 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; } src/main/java/com/dji/sample/wayline/model/dto/WaylineTaskCreateDTO.java
@@ -35,4 +35,7 @@ private WaylineTaskReadyConditionDTO readyConditions; private WaylineTaskExecutableConditionDTO executableConditions; private BreakPointJobDTO breakPoint; } src/main/java/com/dji/sample/wayline/model/param/BreakPointJobParam.java
New file @@ -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;//是否断点续飞 } 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); } 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 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; 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()) { @@ -502,6 +517,25 @@ } @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 public Boolean updateJob(WaylineJobDTO dto) { try {