| | |
| | | package com.ard.sample.wayline.service.impl; |
| | | |
| | | import com.ard.oss.service.impl.OssServiceContext; |
| | | import com.ard.route.domain.route.ArdRouteInfo; |
| | | import com.ard.route.service.IArdRouteInfoService; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | |
| | | import com.ard.sample.wayline.model.enums.WaylineMethodEnum; |
| | | import com.ard.sample.wayline.model.enums.WaylineTaskTypeEnum; |
| | | import com.ard.sample.wayline.model.param.CreateJobParam; |
| | | import com.ard.sample.wayline.service.IWaylineFileService; |
| | | import com.ard.sample.wayline.service.IWaylineJobService; |
| | | import com.fasterxml.jackson.core.type.TypeReference; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.codec.digest.DigestUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.integration.annotation.ServiceActivator; |
| | | import org.springframework.integration.mqtt.support.MqttHeaders; |
| | |
| | | import org.springframework.transaction.annotation.Isolation; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.net.URL; |
| | | import java.sql.SQLException; |
| | | import java.time.Instant; |
| | |
| | | import java.time.ZoneId; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static com.ard.route.util.ToolUtils.kmzPath; |
| | | import static com.ard.route.util.ToolUtils.subStringMinioUrlName; |
| | | |
| | | /** |
| | | * @author sean |
| | |
| | | @Autowired |
| | | private IWaylineJobMapper mapper; |
| | | |
| | | // @Autowired |
| | | // private IWaylineFileService waylineFileService; |
| | | |
| | | @Autowired |
| | | private IWaylineFileService waylineFileService; |
| | | private IArdRouteInfoService _ardRouteInfoService; |
| | | |
| | | @Resource |
| | | private OssServiceContext _ossService; |
| | | |
| | | @Autowired |
| | | private IDeviceService deviceService; |
| | |
| | | } |
| | | |
| | | // get wayline file |
| | | Optional<WaylineFileDTO> waylineFile = waylineFileService.getWaylineByWaylineId(waylineJob.getFileId()); |
| | | if (waylineFile.isEmpty()) { |
| | | // Optional<WaylineFileDTO> waylineFile = waylineFileService.getWaylineByWaylineId(waylineJob.getFileId()); |
| | | // if (waylineFile.isEmpty()) { |
| | | // return ResponseResult.error("机场任务航线不存在!"); |
| | | // } |
| | | // 换航线表 |
| | | ArdRouteInfo ardRouteOpt = _ardRouteInfoService.selectArdRouteInfoById(waylineJob.getFileId()); |
| | | if (ardRouteOpt == null) { |
| | | return ResponseResult.error("机场任务航线不存在!"); |
| | | } |
| | | |
| | | // get file url |
| | | URL url = waylineFileService.getObjectUrl(waylineFile.get().getWaylineId()); |
| | | // URL url = waylineFileService.getObjectUrl(waylineFile.get().getWaylineId()); |
| | | URL url= null; |
| | | String minioUrl = subStringMinioUrlName(ardRouteOpt.getUpPath()); |
| | | String md5 = ""; |
| | | try (InputStream inputStream = _ossService.getObject(kmzPath,minioUrl)) |
| | | { |
| | | md5 = DigestUtils.md5Hex(inputStream); |
| | | url = new URL(ardRouteOpt.getUpPath()); |
| | | } |
| | | catch (Exception e) { |
| | | return ResponseResult.error("机场任务航线文件地址错误!" + e.getMessage()); |
| | | } |
| | | |
| | | WaylineTaskCreateDTO flightTask = WaylineTaskCreateDTO.builder() |
| | | .flightId(waylineJob.getJobId()) |
| | |
| | | .outOfControlAction(waylineJob.getOutOfControlAction()) |
| | | .file(WaylineTaskFileDTO.builder() |
| | | .url(url.toString()) |
| | | .fingerprint(waylineFile.get().getSign()) |
| | | // .fingerprint(waylineFile.get().getSign()) |
| | | .fingerprint(md5) |
| | | .build()) |
| | | .simulateMission(WaylineSimulateMissionDTO.builder() |
| | | .isEnable(param.getSimulateMission().getIsEnable()) |
| | | .latitude(param.getSimulateMission().getLatitude()) |
| | | .longitude(param.getSimulateMission().getLongitude()) |
| | | .build()) |
| | | .build(); |
| | | |
| | |
| | | return ResponseResult.error("Prepare task ====> Error code: " + serviceReply.getResult()); |
| | | } |
| | | |
| | | // 飞行命令先注释掉 |
| | | // Issue an immediate task execution command. |
| | | if (WaylineTaskTypeEnum.IMMEDIATE.getVal() == waylineJob.getTaskType()) { |
| | | if (!executeFlightTask(waylineJob.getJobId())) { |
| | | return ResponseResult.error("Failed to execute job."); |
| | | } |
| | | } |
| | | |
| | | if (WaylineTaskTypeEnum.TIMED.getVal() == waylineJob.getTaskType()) { |
| | | boolean isAdd = RedisOpsUtils.zAdd(RedisConst.WAYLINE_JOB_TIMED_EXECUTE, |
| | | waylineJob.getDockSn() + RedisConst.DELIMITER + waylineJob.getJobId(), |
| | | waylineJob.getBeginTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); |
| | | if (!isAdd) { |
| | | return ResponseResult.error("Failed to create scheduled job."); |
| | | } |
| | | } |
| | | // if (WaylineTaskTypeEnum.IMMEDIATE.getVal() == waylineJob.getTaskType()) { |
| | | // if (!executeFlightTask(waylineJob.getJobId())) { |
| | | // return ResponseResult.error("Failed to execute job."); |
| | | // } |
| | | // } |
| | | // |
| | | // if (WaylineTaskTypeEnum.TIMED.getVal() == waylineJob.getTaskType()) { |
| | | // boolean isAdd = RedisOpsUtils.zAdd(RedisConst.WAYLINE_JOB_TIMED_EXECUTE, |
| | | // waylineJob.getDockSn() + RedisConst.DELIMITER + waylineJob.getJobId(), |
| | | // waylineJob.getBeginTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); |
| | | // if (!isAdd) { |
| | | // return ResponseResult.error("Failed to create scheduled job."); |
| | | // } |
| | | // } |
| | | |
| | | return ResponseResult.success(); |
| | | } |
| | |
| | | WaylineJobDTO waylineJob = waylineJobOpt.get(); |
| | | |
| | | // get wayline file |
| | | Optional<WaylineFileDTO> waylineFile = waylineFileService.getWaylineByWaylineId(waylineJob.getFileId()); |
| | | if (waylineFile.isEmpty()) { |
| | | // Optional<WaylineFileDTO> waylineFile = waylineFileService.getWaylineByWaylineId(waylineJob.getFileId()); |
| | | // if (waylineFile.isEmpty()) { |
| | | // builder.data(RequestsReply.error(CommonErrorEnum.ILLEGAL_ARGUMENT)); |
| | | // messageSender.publish(topic, builder.build()); |
| | | // return; |
| | | // } |
| | | // 修改航线文件名称,从ard_route_info航线表中取; |
| | | // 换航线表 |
| | | ArdRouteInfo ardRouteOpt = _ardRouteInfoService.selectArdRouteInfoById(waylineJob.getFileId()); |
| | | if (ardRouteOpt == null) { |
| | | builder.data(RequestsReply.error(CommonErrorEnum.ILLEGAL_ARGUMENT)); |
| | | messageSender.publish(topic, builder.build()); |
| | | return; |
| | |
| | | |
| | | // get file url |
| | | URL url = null; |
| | | try { |
| | | url = waylineFileService.getObjectUrl(waylineFile.get().getWaylineId()); |
| | | String minioUrl = subStringMinioUrlName(ardRouteOpt.getUpPath()); |
| | | String md5 = ""; |
| | | try (InputStream inputStream = _ossService.getObject(kmzPath,minioUrl)) |
| | | { |
| | | md5 = DigestUtils.md5Hex(inputStream); |
| | | url = new URL(ardRouteOpt.getUpPath()); |
| | | // } |
| | | // try { |
| | | // url = waylineFileService.getObjectUrl(waylineFile.get().getWaylineId()); |
| | | // url = new URL(ardRouteOpt.getUpPath()); |
| | | builder.data(RequestsReply.success(WaylineTaskCreateDTO.builder() |
| | | .file(WaylineTaskFileDTO.builder() |
| | | .url(url.toString()) |
| | | .fingerprint(waylineFile.get().getSign()) |
| | | // .fingerprint(waylineFile.get().getSign()) |
| | | .fingerprint(md5) |
| | | .build()) |
| | | .build())); |
| | | |
| | | } catch (SQLException | NullPointerException e) { |
| | | } catch (NullPointerException | IOException e) { |
| | | e.printStackTrace(); |
| | | builder.data(RequestsReply.error(CommonErrorEnum.ILLEGAL_ARGUMENT)); |
| | | messageSender.publish(topic, builder.build()); |
| | |
| | | if (entity == null) { |
| | | return null; |
| | | } |
| | | |
| | | // 修改航线文件名称,从ard_route_info航线表中取; |
| | | WaylineJobDTO.WaylineJobDTOBuilder builder = WaylineJobDTO.builder() |
| | | .jobId(entity.getJobId()) |
| | | .jobName(entity.getName()) |
| | | .fileId(entity.getFileId()) |
| | | .fileName(waylineFileService.getWaylineByWaylineId(entity.getFileId()) |
| | | .orElse(WaylineFileDTO.builder().build()).getName()) |
| | | // .fileName(waylineFileService.getWaylineByWaylineId(entity.getFileId()) |
| | | // .orElse(WaylineFileDTO.builder().build()).getName()) |
| | | .fileName(_ardRouteInfoService.selectArdRouteInfoById(entity.getFileId()) |
| | | .getName()) |
| | | .dockSn(entity.getDockSn()) |
| | | .dockName(deviceService.getDeviceBySn(entity.getDockSn()) |
| | | .orElse(DeviceDTO.builder().build()).getNickname()) |