2025-12-03 zwy 跟踪任务id获取任务详情接口调整;定时任务时,增加status状态pending:待执行,并发给前端
3 files modified
59 ■■■■■ changed files
ard-admin/src/main/java/com/ard/web/controller/sample/wayline/WaylineJobController.java 6 ●●●●● patch | view | raw | blame | history
ard-sample/src/main/java/com/ard/sample/wayline/service/impl/FlightTaskServiceImpl.java 39 ●●●●● patch | view | raw | blame | history
ard-sample/src/main/java/com/ard/sample/wayline/service/impl/WaylineJobServiceImpl.java 14 ●●●●● patch | view | raw | blame | history
ard-admin/src/main/java/com/ard/web/controller/sample/wayline/WaylineJobController.java
@@ -43,15 +43,15 @@
    }
    @ApiOperation("获取航线任务")
    @PostMapping("/flight-id")
    @GetMapping("/flight-id")
    public ResponseResult<WaylineJobDTO> getJob(@RequestParam(name = "job_id") String jobId) {
        try {
            if(jobId == null){
                return ResponseResult.error("任务ID不能为空");
                return ResponseResult.error(98,"任务ID不能为空");
            }
            Optional<WaylineJobDTO> waylineJobDTO = waylineJobService.getJobByJobId(jobId);
            if(waylineJobDTO.isEmpty()) {
                return ResponseResult.error("任务不存在");
                return ResponseResult.error(99,"任务不存在");
            }
            return ResponseResult.success(waylineJobDTO.get());
        } catch (Exception e) {
ard-sample/src/main/java/com/ard/sample/wayline/service/impl/FlightTaskServiceImpl.java
@@ -1,5 +1,6 @@
package com.ard.sample.wayline.service.impl;
import com.ard.common.utils.uuid.IdUtils;
import com.ard.sample.common.error.CommonErrorEnum;
import com.ard.sample.common.model.ResponseResult;
import com.ard.sample.component.mqtt.model.*;
@@ -16,6 +17,7 @@
import com.ard.sample.manage.model.enums.UserTypeEnum;
import com.ard.sample.media.model.MediaFileCountDTO;
import com.ard.sample.wayline.model.dto.WaylineJobDTO;
import com.ard.sample.wayline.model.dto.WaylineTaskProgressExt;
import com.ard.sample.wayline.model.dto.WaylineTaskProgressReceiver;
import com.ard.sample.wayline.model.enums.WaylineJobStatusEnum;
import com.ard.sample.wayline.service.IFlightTaskService;
@@ -32,7 +34,10 @@
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
/**
@@ -69,13 +74,13 @@
        String dockSn  = receivedTopic.substring((TopicConst.THING_MODEL_PRE + TopicConst.PRODUCT).length(),
                receivedTopic.indexOf(TopicConst.EVENTS_SUF));
        EventsReceiver<WaylineTaskProgressReceiver> eventsReceiver = mapper.convertValue(receiver.getData(),
                new TypeReference<EventsReceiver<WaylineTaskProgressReceiver>>(){});
                new TypeReference<EventsReceiver<WaylineTaskProgressReceiver>>() {
                });
        eventsReceiver.setBid(receiver.getBid());
        eventsReceiver.setSn(receiver.getGateway());
        eventsReceiver.setGateway(receiver.getGateway());
        eventsReceiver.setType(MessageType.STATUS.getType()+"-flighttask_progress");
        eventsReceiver.setMethod(EventsMethodEnum.FLIGHT_TASK_PROGRESS.getMethod());
        WaylineTaskProgressReceiver output = eventsReceiver.getOutput();
@@ -141,8 +146,7 @@
        String json="";
        try {
            json = mapper.writeValueAsString(eventsReceiver);
        }
        catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
        }
        _dockWebSocketHandler.sendMessageToSubscribers(dockSn, MessageType.STATUS.getType(),json);
@@ -168,6 +172,31 @@
        // format: {workspace_id}:{dock_sn}:{job_id}
        String[] jobArr = String.valueOf(jobIdValue).split(RedisConst.DELIMITER);
        double time = RedisOpsUtils.zScore(RedisConst.WAYLINE_JOB_TIMED_EXECUTE, jobIdValue);
        // 取到待执行的定时任务ID,获取任务信息websocket发给前端
        // region 取定时任务信息websocket发给前端
        // pending status状态待执行
        EventsReceiver<WaylineTaskProgressReceiver> eventsReceiver = new EventsReceiver<>();
        WaylineTaskProgressReceiver waylineTaskProgressReceiver = new WaylineTaskProgressReceiver();
        WaylineTaskProgressExt waylineTaskProgressExt = new WaylineTaskProgressExt();
        waylineTaskProgressExt.setFlightId(jobArr[1]);
        waylineTaskProgressReceiver.setStatus("pending");
        waylineTaskProgressReceiver.setExt(waylineTaskProgressExt);
        eventsReceiver.setOutput(waylineTaskProgressReceiver);
        eventsReceiver.setResult(ResponseResult.CODE_SUCCESS);
        eventsReceiver.setBid(IdUtils.simpleUUID());
        eventsReceiver.setSn(jobArr[0]);
        eventsReceiver.setGateway(jobArr[0]);
        eventsReceiver.setType(MessageType.STATUS.getType() + "-flighttask_progress");
        eventsReceiver.setMethod(EventsMethodEnum.FLIGHT_TASK_PROGRESS.getMethod());
        String json = "";
        try {
            json = mapper.writeValueAsString(eventsReceiver);
        } catch (Exception e) {
            e.printStackTrace();
        }
        _dockWebSocketHandler.sendMessageToSubscribers(jobArr[0], MessageType.STATUS.getType(), json);
        log.info("定时任务自定义状态为待执行,json: {}", json);
        // endregion
        long now = System.currentTimeMillis();
        int offset = 30_000;
@@ -175,7 +204,7 @@
        if (time < now - offset) {
            RedisOpsUtils.zRemove(RedisConst.WAYLINE_JOB_TIMED_EXECUTE, jobIdValue);
            waylineJobService.updateJob(WaylineJobDTO.builder()
                    .jobId(jobArr[2])
                    .jobId(jobArr[1])
                    .status(WaylineJobStatusEnum.FAILED.getVal())
                    .executeTime(LocalDateTime.now())
                    .completedTime(LocalDateTime.now())
ard-sample/src/main/java/com/ard/sample/wayline/service/impl/WaylineJobServiceImpl.java
@@ -630,7 +630,7 @@
                    .status(WaylineJobStatusEnum.CANCEL.getVal())
                    .completedTime(LocalDateTime.now())
                    .build());
            RedisOpsUtils.zRemove(RedisConst.WAYLINE_JOB_TIMED_EXECUTE, RedisConst.DELIMITER + dockSn + RedisConst.DELIMITER + jobId);
            RedisOpsUtils.zRemove(RedisConst.WAYLINE_JOB_TIMED_EXECUTE, dockSn + RedisConst.DELIMITER + jobId);
            // 原流程是修改表中数据的status状态值,现在的精力是直接删除
            this.deleteTask(jobId);
        }
@@ -772,6 +772,18 @@
                .orderByDesc(WaylineJobEntity::getId));
    }
    /**
     * 获取所有待定状态的定时任务,未执行即将要执行的。
     * */
    public List<WaylineJobEntity> selectScheduledTaskList(){
        // "1":"定时任务"
        return mapper.selectList(new LambdaQueryWrapper<WaylineJobEntity>()
                .eq(WaylineJobEntity::getTaskType, 1)
                .eq(WaylineJobEntity::getStatus, WaylineJobStatusEnum.PENDING.getVal())
                .gt(WaylineJobEntity::getBeginTime, System.currentTimeMillis())
                .orderByDesc(WaylineJobEntity::getBeginTime));
    }
    /**
     * 根据航班任务ID获取航班任务资源