Xiajijian
2025-11-13 bb8cdc0ec9e92e3b6e15692fbfff72822156f680
ard-sample/src/main/java/com/ard/sample/wayline/service/impl/WaylineJobServiceImpl.java
@@ -1,5 +1,8 @@
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;
@@ -24,11 +27,11 @@
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;
@@ -37,6 +40,10 @@
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;
@@ -44,6 +51,9 @@
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
@@ -58,8 +68,14 @@
    @Autowired
    private IWaylineJobMapper mapper;
//    @Autowired
//    private IWaylineFileService waylineFileService;
    @Autowired
    private IWaylineFileService waylineFileService;
    private IArdRouteInfoService _ardRouteInfoService;
    @Resource
    private OssServiceContext _ossService;
    @Autowired
    private IDeviceService deviceService;
@@ -170,13 +186,29 @@
        }
        // 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.getPath());
        String md5 = "";
        try (InputStream inputStream = _ossService.getObject(kmzPath,minioUrl))
        {
            md5 = DigestUtils.md5Hex(inputStream);
            url = new URL(ardRouteOpt.getPath());
        }
        catch (Exception e) {
            return ResponseResult.error("机场任务航线文件地址错误!" + e.getMessage());
        }
        WaylineTaskCreateDTO flightTask = WaylineTaskCreateDTO.builder()
                .flightId(waylineJob.getJobId())
@@ -187,7 +219,13 @@
                .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();
@@ -213,21 +251,22 @@
            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();
    }
@@ -461,8 +500,16 @@
        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;
@@ -470,16 +517,25 @@
        // get file url
        URL url = null;
        try {
            url = waylineFileService.getObjectUrl(waylineFile.get().getWaylineId());
        String minioUrl = subStringMinioUrlName(ardRouteOpt.getPath());
        String md5 = "";
        try (InputStream inputStream = _ossService.getObject(kmzPath,minioUrl))
        {
            md5 = DigestUtils.md5Hex(inputStream);
            url = new URL(ardRouteOpt.getPath());
//        }
//        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());
@@ -572,13 +628,15 @@
        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())