rain
2024-08-05 94174d2cc22afed6f41c270d970903484bfc5708
src/main/java/com/dji/sample/wayline/service/impl/FlightTaskServiceImpl.java
@@ -14,10 +14,13 @@
import com.dji.sample.media.model.MediaFileCountDTO;
import com.dji.sample.wayline.model.dto.WaylineJobDTO;
import com.dji.sample.wayline.model.dto.WaylineJobKey;
import com.dji.sample.wayline.model.dto.WaylineTaskProgressExtBreakPoint;
import com.dji.sample.wayline.model.dto.WaylineTaskProgressReceiver;
import com.dji.sample.wayline.model.entity.WaylineJobBreakPointEntity;
import com.dji.sample.wayline.model.enums.WaylineJobStatusEnum;
import com.dji.sample.wayline.model.enums.WaylineTaskTypeEnum;
import com.dji.sample.wayline.service.IFlightTaskService;
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;
@@ -63,24 +66,60 @@
    @Autowired
    private IWaylineRedisService waylineRedisService;
    @Autowired
    private IWaylineJobBreakPointService waylineJobBreakPointService;
    /**
     * Handle the progress messages of the flight tasks reported by the dock.
     * 处理机场上报的飞行任务进度信息
     * @param receiver
     * @param headers
     */
    @ServiceActivator(inputChannel = ChannelName.INBOUND_EVENTS_FLIGHT_TASK_PROGRESS, outputChannel = ChannelName.OUTBOUND_EVENTS)
    public CommonTopicReceiver handleProgress(CommonTopicReceiver receiver, MessageHeaders headers) {
        EventsReceiver<WaylineTaskProgressReceiver> eventsReceiver = mapper.convertValue(receiver.getData(),
        log.info("上报航线任务进度: {}", receiver.toString());
                        EventsReceiver<WaylineTaskProgressReceiver> eventsReceiver = mapper.convertValue(receiver.getData(),
                new TypeReference<EventsReceiver<WaylineTaskProgressReceiver>>(){});
        eventsReceiver.setBid(receiver.getBid());
        eventsReceiver.setSn(receiver.getGateway());
        //用户记录飞行任务id
        RedisOpsUtils.set(RedisConst.FLIGHT_LOG + "job_id",receiver.getBid());
        WaylineTaskProgressReceiver output = eventsReceiver.getOutput();
        log.info("Task progress: {}", output.getProgress().toString());
        log.info("任务进度: {}", output.getProgress().toString());
        if (null != output.getExt().getBreakPoint()) {
            WaylineTaskProgressExtBreakPoint breakPoint = output.getExt().getBreakPoint();
            log.info("任务进度 ===> 断点信息:{}", breakPoint.toString());
            // 保存断点信息
            try {
                Boolean isAddBp = waylineJobBreakPointService.addWaylineJobBreakPoint(WaylineJobBreakPointEntity.builder()
                        .jobId(receiver.getBid())
                        .bpIndex(breakPoint.getIndex())
                        .state(breakPoint.getState())
                        .progress(breakPoint.getProgress())
                        .waylineId(breakPoint.getWaylineId())
                        .breakReason(breakPoint.getBreakReason())
                        .latitude(breakPoint.getLatitude())
                        .longitude(breakPoint.getLongitude())
                        .height(breakPoint.getHeight())
                        .attitudeHead(breakPoint.getAttitudeHead())
                        .build());
                if (isAddBp) {
                    log.info("任务进度 ===> 断点信息 ===> 保存成功:{}", breakPoint.toString());
                } else {
                    log.info("任务进度 ===> 断点信息 ===> 保存失败:{}", breakPoint.toString());
                }
            }catch (Exception e) {
                log.info("任务进度 ===> 断点信息 ===> 保存失败:{},\n {}", breakPoint.toString(),e.getMessage());
            }
        }
        if (eventsReceiver.getResult() != ResponseResult.CODE_SUCCESS) {
            log.error("Task progress ===> Error code: " + eventsReceiver.getResult());
            log.error("任务进度 ===> 错误编码: " + eventsReceiver.getResult());
        }
        EventsResultStatusEnum statusEnum = EventsResultStatusEnum.find(output.getStatus());
@@ -110,7 +149,7 @@
                .mediaCount(mediaCount)
                .build();
        // record the update of the media count.
        //记录媒体计数的更新
        if (Objects.nonNull(job.getMediaCount()) && job.getMediaCount() != 0) {
            RedisOpsUtils.hashSet(RedisConst.MEDIA_FILE_PREFIX + receiver.getGateway(), job.getJobId(),
                    MediaFileCountDTO.builder().jobId(receiver.getBid()).mediaCount(job.getMediaCount()).uploadedCount(0).build());