| | |
| | | @Autowired |
| | | private IFileService fileService; |
| | | |
| | | /** |
| | | * 插入航路作业 |
| | | * |
| | | * @param jobEntity 航路作业实体 |
| | | * @return 航路作业DTO的Optional包装对象,如果插入失败则返回Optional.empty() |
| | | */ |
| | | private Optional<WaylineJobDTO> insertWaylineJob(WaylineJobEntity jobEntity) { |
| | | int id = mapper.insert(jobEntity); |
| | | if (id <= 0) { |
| | |
| | | return Optional.ofNullable(this.entity2Dto(jobEntity)); |
| | | } |
| | | |
| | | /** |
| | | * 创建航线任务 |
| | | * |
| | | * @param param 任务参数 |
| | | * @param username 用户名 |
| | | * @param beginTime 开始时间 |
| | | * @param endTime 结束时间 |
| | | * @return Optional<WaylineJobDTO> 返回创建的航线任务对象,若创建失败则返回Optional.empty() |
| | | */ |
| | | @Override |
| | | public Optional<WaylineJobDTO> createWaylineJob(CreateJobParam param, String username, Long beginTime, Long endTime) { |
| | | if (Objects.isNull(param)) { |
| | |
| | | return insertWaylineJob(jobEntity); |
| | | } |
| | | |
| | | /** |
| | | * 根据父作业ID创建新的作业 |
| | | * |
| | | * @param parentId 父作业ID |
| | | * @return 新创建的作业的DTO对象,如果父作业不存在,则返回Optional.empty() |
| | | */ |
| | | @Override |
| | | public Optional<WaylineJobDTO> createWaylineJobByParent(String parentId) { |
| | | Optional<WaylineJobDTO> parentJobOpt = this.getJobByJobId(parentId); |
| | |
| | | return this.insertWaylineJob(jobEntity); |
| | | } |
| | | |
| | | /** |
| | | * 发布飞行任务 |
| | | * |
| | | * @param param 任务参数 |
| | | * @param loginUser 登录用户 |
| | | * @return ResponseResult 返回结果 |
| | | * @throws SQLException SQL异常 |
| | | */ |
| | | @Override |
| | | public ResponseResult publishFlightTask(CreateJobParam param, LoginUser loginUser) throws SQLException { |
| | | if (WaylineTaskTypeEnum.IMMEDIATE.getVal() == param.getTaskType()) { |
| | |
| | | return ResponseResult.success(); |
| | | } |
| | | |
| | | /** |
| | | * 执行飞行任务 |
| | | * |
| | | * @param jobId 任务ID |
| | | * @return 如果任务执行成功返回true,否则返回false |
| | | * @throws IllegalArgumentException 如果任务不存在 |
| | | * @throws RuntimeException 如果设备处于离线状态 |
| | | */ |
| | | @Override |
| | | public Boolean executeFlightTask(String jobId) { |
| | | // get job |
| | |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 取消飞行任务 |
| | | * |
| | | * @param jobIds 需要取消的任务ID集合 |
| | | * @throws IllegalArgumentException 如果任务状态不正确,抛出非法参数异常 |
| | | */ |
| | | @Override |
| | | public void cancelFlightTask(Collection<String> jobIds) { |
| | | List<WaylineJobDTO> waylineJobs = getJobsByConditions(jobIds, WaylineJobStatusEnum.PENDING); |
| | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 发布取消任务 |
| | | * |
| | | * @param dockSn 设备序列号 |
| | | * @param jobIds 任务ID列表 |
| | | * @throws RuntimeException 如果设备离线或取消任务失败,则抛出运行时异常 |
| | | */ |
| | | @Override |
| | | public void publishCancelTask(String dockSn, List<String> jobIds) { |
| | | boolean isOnline = deviceService.checkDeviceOnline(dockSn); |
| | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 根据条件查询作业列表 |
| | | * |
| | | * @param jobIds 作业ID集合 |
| | | * @param status 作业状态枚举 |
| | | * @return 满足条件的作业DTO列表 |
| | | */ |
| | | @Override |
| | | public List<WaylineJobDTO> getJobsByConditions(Collection<String> jobIds, WaylineJobStatusEnum status) { |
| | | return mapper.selectList( |
| | |
| | | .collect(Collectors.toList()); |
| | | } |
| | | |
| | | /** |
| | | * 根据任务ID获取任务详情 |
| | | * |
| | | * @param jobId 任务ID |
| | | * @return Optional<WaylineJobDTO> 包含任务详情的Optional对象,如果不存在则返回空的Optional |
| | | */ |
| | | @Override |
| | | public Optional<WaylineJobDTO> getJobByJobId(String jobId) { |
| | | WaylineJobEntity jobEntity = mapper.selectOne( |
| | |
| | | return Optional.ofNullable(entity2Dto(jobEntity)); |
| | | } |
| | | |
| | | /** |
| | | * 更新作业信息 |
| | | * |
| | | * @param dto 作业信息传输对象 |
| | | * @return 更新成功返回true,否则返回false |
| | | */ |
| | | @Override |
| | | public Boolean updateJob(WaylineJobDTO dto) { |
| | | return mapper.update(this.dto2Entity(dto), |
| | |
| | | .eq(WaylineJobEntity::getJobId, dto.getJobId())) > 0; |
| | | } |
| | | |
| | | /** |
| | | * 根据工作区ID获取工作线任务分页数据 |
| | | * |
| | | * @param page 页码,从1开始 |
| | | * @param pageSize 每页显示条数 |
| | | * @return PaginationData 包含工作线任务分页数据的对象 |
| | | */ |
| | | @Override |
| | | public PaginationData<WaylineJobDTO> getJobsByWorkspaceId(long page, long pageSize) { |
| | | Page<WaylineJobEntity> pageData = mapper.selectPage( |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 根据航班任务ID获取航班任务资源 |
| | | * |
| | | * @param receiver 接收到的消息对象 |
| | | * @param headers 消息头信息 |
| | | * |
| | | * @Override 覆盖父类方法 |
| | | * @ServiceActivator(inputChannel = ChannelName.INBOUND_REQUESTS_FLIGHT_TASK_RESOURCE_GET, outputChannel = ChannelName.OUTBOUND) |
| | | * 指定输入通道和输出通道 |
| | | * @Transactional(isolation = Isolation.READ_UNCOMMITTED) |
| | | * 设置事务隔离级别为未提交读 |
| | | */ |
| | | @Override |
| | | @ServiceActivator(inputChannel = ChannelName.INBOUND_REQUESTS_FLIGHT_TASK_RESOURCE_GET, outputChannel = ChannelName.OUTBOUND) |
| | | @Transactional(isolation = Isolation.READ_UNCOMMITTED) |
| | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 上传媒体文件的最高优先级 |
| | | * |
| | | * @param jobId 作业ID |
| | | * @throws RuntimeException 如果作业ID不合法或设置优先级失败 |
| | | */ |
| | | @Override |
| | | public void uploadMediaHighestPriority(String jobId) { |
| | | Optional<WaylineJobDTO> jobOpt = getJobByJobId(jobId); |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 将WaylineJobDTO对象转换为WaylineJobEntity对象 |
| | | * |
| | | * @param dto WaylineJobDTO对象 |
| | | * @return WaylineJobEntity对象 |
| | | */ |
| | | private WaylineJobEntity dto2Entity(WaylineJobDTO dto) { |
| | | WaylineJobEntity.WaylineJobEntityBuilder builder = WaylineJobEntity.builder(); |
| | | if (dto == null) { |
| | |
| | | .build(); |
| | | } |
| | | |
| | | /** |
| | | * 将实体对象转换为数据传输对象 |
| | | * |
| | | * @param entity WaylineJobEntity 实体对象 |
| | | * @return WaylineJobDTO 数据传输对象 |
| | | */ |
| | | private WaylineJobDTO entity2Dto(WaylineJobEntity entity) { |
| | | if (entity == null) { |
| | | return null; |