From 80d7e72bcbc06753be190d785bd93bf91b35933e Mon Sep 17 00:00:00 2001 From: wuyuan <15505152113@163.com> Date: Wed, 14 May 2025 14:09:21 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=92=AD=E6=94=BE=E7=9B=B4?= =?UTF-8?q?=E6=92=AD=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/param/TakeoffToPointParam.java | 2 +- .../service/impl/ControlServiceImpl.java | 4 +- .../service/impl/LiveStreamServiceImpl.java | 61 +++++++++++++------ .../manage/service/impl/SDKDeviceService.java | 20 ++++-- .../media/service/impl/MediaServiceImpl.java | 11 +++- .../sample/rocketmq/RocketMqConsum.java | 10 +-- .../controller/WaylineJobController.java | 7 +++ 7 files changed, 80 insertions(+), 35 deletions(-) diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/TakeoffToPointParam.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/TakeoffToPointParam.java index bcf3fdb..ef233a2 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/TakeoffToPointParam.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/TakeoffToPointParam.java @@ -39,7 +39,7 @@ public class TakeoffToPointParam { @Range(min = 2, max = 1500) @NotNull - private Double rthAltitude; + private Integer rthAltitude; @NotNull private RcLostActionEnum rcLostAction; diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java index c75887f..7480e39 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java @@ -196,9 +196,9 @@ public class ControlServiceImpl implements IControlService { waylineJobEntity.setBeginTime(new Date()); waylineJobEntity.setStatus(WaylineJobStatusEnum.PENDING.getVal()); waylineJobEntity.setOutOfControlAction(OutOfControlActionEnum.RETURN_TO_HOME.getAction()); - waylineJobEntity.setRthAltitude(Integer.parseInt(param.getRthAltitude().toString())); + waylineJobEntity.setRthAltitude(param.getRthAltitude()); waylineJobEntity.setMediaCount(0); - waylineJobEntity.setJobType(WaylineJobTypeEnum.PEOPLE_TASK.getType()); + waylineJobEntity.setJobType(WaylineJobTypeEnum.INSTRUCT.getType()); TopicServicesResponse response = abstractControlService.takeoffToPoint( SDKManager.getDeviceSDK(sn), mapper.convertValue(param, TakeoffToPointRequest.class)); ServicesReplyData reply = response.getData(); diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/LiveStreamServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/LiveStreamServiceImpl.java index f9742e7..ada3a4f 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/LiveStreamServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/LiveStreamServiceImpl.java @@ -1,23 +1,28 @@ package org.dromara.sample.manage.service.impl; +import org.dromara.common.rocketmq.producer.MessageProducerUtil; import org.dromara.common.sdk.cloudapi.device.DeviceDomainEnum; import org.dromara.common.sdk.cloudapi.device.VideoId; import org.dromara.common.sdk.cloudapi.livestream.*; import org.dromara.common.sdk.cloudapi.livestream.api.AbstractLivestreamService; +import org.dromara.common.sdk.cloudapi.wayline.FlighttaskProgress; import org.dromara.common.sdk.common.HttpResultResponse; import org.dromara.common.sdk.common.SDKManager; import org.dromara.common.sdk.mqtt.services.ServicesReplyData; import org.dromara.common.sdk.mqtt.services.TopicServicesResponse; +import org.dromara.sample.component.mqtt.model.EventsReceiver; import org.dromara.sample.manage.model.dto.*; +import org.dromara.sample.manage.model.entity.DeviceEntity; import org.dromara.sample.manage.model.param.DeviceQueryParam; import org.dromara.sample.manage.service.*; +import org.dromara.sample.wayline.model.dto.WaylineJobDTO; +import org.dromara.sample.wayline.service.IWaylineJobService; +import org.dromara.sample.wayline.service.IWaylineRedisService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.List; -import java.util.Objects; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; /** @@ -44,6 +49,16 @@ public class LiveStreamServiceImpl implements ILiveStreamService { @Autowired private AbstractLivestreamService abstractLivestreamService; + + @Autowired + private IPlayTextService playTextService; + + @Autowired + private IWaylineRedisService waylineRedisService; + + @Autowired + private IWaylineJobService waylineJobService; + @Override public List getLiveCapacity(String workspaceId) { @@ -68,26 +83,23 @@ public class LiveStreamServiceImpl implements ILiveStreamService { @Override public HttpResultResponse liveStart(LiveTypeDTO liveParam) { // Check if this lens is available live. - HttpResultResponse responseResult = this.checkBeforeLive(liveParam.getVideoId()); if (HttpResultResponse.CODE_SUCCESS != responseResult.getCode()) { return responseResult; } - Boolean flag = deviceRedisService.checkDeviceVideo(liveParam.getVideoId().getDroneSn()); - - ILivestreamUrl url = LiveStreamProperty.get(liveParam.getUrlType()); url = setExt(liveParam.getUrlType(), url, liveParam.getVideoId()); - if (!flag) { - TopicServicesResponse> response = abstractLivestreamService.liveStartPush( - SDKManager.getDeviceSDK(responseResult.getData().getDeviceSn()), - new LiveStartPushRequest() - .setUrl(url) - .setUrlType(liveParam.getUrlType()) - .setVideoId(liveParam.getVideoId()) - .setVideoQuality(liveParam.getVideoQuality())); - - if (!response.getData().getResult().isSuccess()) { + + TopicServicesResponse> response = abstractLivestreamService.liveStartPush( + SDKManager.getDeviceSDK(responseResult.getData().getDeviceSn()), + new LiveStartPushRequest() + .setUrl(url) + .setUrlType(liveParam.getUrlType()) + .setVideoId(liveParam.getVideoId()) + .setVideoQuality(liveParam.getVideoQuality())); + + if (!response.getData().getResult().isSuccess()) { + if(response.getData().getResult().getCode() != 513003){ return HttpResultResponse.error(response.getData().getResult()); } } @@ -116,7 +128,22 @@ public class LiveStreamServiceImpl implements ILiveStreamService { default: return HttpResultResponse.error(LiveErrorCodeEnum.URL_TYPE_NOT_SUPPORTED); } + DeviceEntity deviceBySn = deviceService.getDeviceByChildSn(liveParam.getVideoId().getDroneSn()); + if(deviceBySn != null){ + + Optional> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceBySn.getDeviceSn()); + Map reqMap = new HashMap<>(); + if(runningWaylineJob.isPresent()) { + String jobId = runningWaylineJob.get().getOutput().getExt().getFlightId(); + Optional waylineJobDTO = waylineJobService.getJobByJobInternalId(jobId); + reqMap.put("jobId",waylineJobDTO.get().getJobId()); + reqMap.put("jobName",waylineJobDTO.get().getJobName()); + reqMap.put("deviceSn",deviceBySn.getDeviceSn()); + playTextService.streamType(reqMap); + } + } + // MessageProducerUtil.sendAsyncProducerMessage("videoStartConsum","videoStart",liveParam.getVideoId().getDroneSn(),liveParam.getVideoId().toString()); return HttpResultResponse.success(live); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java index a239930..ad9d679 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java @@ -181,15 +181,23 @@ public class SDKDeviceService extends AbstractDeviceService { @Override public void dockLiveStatusUpdate(TopicStateRequest request, MessageHeaders headers){ - Optional dockOnline = deviceRedisService.getDeviceOnline(request.getGateway()); + /*Optional dockOnline = deviceRedisService.getDeviceOnline(request.getGateway()); Optional deviceOnline = deviceRedisService.getDeviceOnline(dockOnline.get().getChildDeviceSn()); + Optional deviceOsd = deviceRedisService.getDeviceOsd(dockOnline.get().getDeviceSn(), OsdDock.class); + if(deviceOsd.get().getModeCode().getCode() != 4){ + return; + } + if(!RedisOpsUtils.checkExist("video"+deviceOnline.get().getDeviceSn())){ + return; + } + RedisOpsUtils.set("video"+deviceOnline.get().getDeviceSn(),60); if(deviceOnline.isEmpty()){ return; } if(request.getData().getLiveStatus().size() == 0 ){ String deviceVideoEnum = DeviceVideoEnum.find(deviceOnline.get().getDeviceName()).getDevice(); deviceRedisService.delDeviceVideo(deviceOnline.get().getDeviceSn()); - VideoId videoId = new VideoId(deviceOnline.get().getDeviceSn()+deviceVideoEnum+SLASH + VideoTypeEnum.NORMAL + DASH+DeviceTypeVideoEnum.ZERO.getVideoType()); + VideoId videoId = new VideoId(deviceOnline.get().getDeviceSn()+SLASH+deviceVideoEnum+SLASH + VideoTypeEnum.NORMAL.getType() + DASH+DeviceTypeVideoEnum.ZERO.getVideoType()); MessageProducerUtil.sendAsyncProducerMessage("videoStartConsum","videoStopStart",deviceOnline.get().getDeviceSn(),videoId.toString()); } @@ -197,10 +205,10 @@ public class SDKDeviceService extends AbstractDeviceService { item.getVideoId().getDroneSn().equals(dockOnline.get().getChildDeviceSn()) && item.getStatus() == true).collect(Collectors.toList()); if(dockLiveStatusDataList.size() == 0){ String deviceVideoEnum = DeviceVideoEnum.find(deviceOnline.get().getDeviceName()).getDevice(); - VideoId videoId = new VideoId(deviceOnline.get().getDeviceSn()+deviceVideoEnum+SLASH + VideoTypeEnum.NORMAL + DASH+DeviceTypeVideoEnum.ZERO.getVideoType()); + VideoId videoId = new VideoId(deviceOnline.get().getDeviceSn()+SLASH+deviceVideoEnum+SLASH + VideoTypeEnum.NORMAL.getType() + DASH+DeviceTypeVideoEnum.ZERO.getVideoType()); deviceRedisService.delDeviceVideo(deviceOnline.get().getDeviceSn()); MessageProducerUtil.sendAsyncProducerMessage("videoStartConsum","videoStopStart",deviceOnline.get().getDeviceSn(),videoId.toString()); - } + }*/ } @Override @@ -221,11 +229,11 @@ public class SDKDeviceService extends AbstractDeviceService { } DeviceDTO device = deviceOpt.get(); - String deviceVideoEnum = DeviceVideoEnum.find(device.getDeviceName()).getDevice(); + /*String deviceVideoEnum = DeviceVideoEnum.find(device.getDeviceName()).getDevice(); if(!deviceRedisService.checkDeviceVideo(device.getDeviceSn())){ VideoId videoId = new VideoId(device.getDeviceSn()+SLASH+deviceVideoEnum+SLASH + VideoTypeEnum.NORMAL.getType() + DASH+DeviceTypeVideoEnum.ZERO.getVideoType()); MessageProducerUtil.sendAsyncProducerMessage("videoStartConsum","videoStart",device.getDeviceSn(),videoId.toString()); - } + }*/ deviceRedisService.setDeviceOnline(device); deviceRedisService.setDeviceOsd(from, request.getData()); deviceService.pushOsdDataToWeb(device.getWorkspaceId(), BizCodeEnum.DEVICE_OSD, from, request.getData()); diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java index f6bcd97..226f137 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java @@ -3,6 +3,7 @@ package org.dromara.sample.media.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.dromara.common.core.constant.DeviceQrtzConstants; +import org.dromara.common.sdk.cloudapi.device.OsdDock; import org.dromara.common.sdk.cloudapi.media.*; import org.dromara.common.sdk.cloudapi.media.api.AbstractMediaService; import org.dromara.common.sdk.mqtt.MqttReply; @@ -113,9 +114,17 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ String jobId = callback.getFile().getExt().getFlightId(); Optional deviceOpt = deviceRedisService.getDeviceOnline(request.getGateway()); + if(deviceRedisService.getDeviceOsd(request.getGateway(), OsdDock.class).get().getModeCode().getCode() == 4){ + DeviceDTO device = deviceOpt.get(); + boolean isSave = parseMediaFile(callback, device); + if (!isSave) { + log.error("将文件保存到数据库失败,请手动检查数据。"); + return null; + } + return new TopicEventsResponse().setData(MqttReply.success()); + } MediaFileCountDTO mediaFileCount = mediaRedisService.getMediaCount(request.getGateway(), jobId); List deviceQrtzFileEntities = deviceQrtzFileMapper.selectList(new LambdaQueryWrapper().eq(DeviceQrtzFileEntity::getDeviceSn, request.getGateway()).eq(DeviceQrtzFileEntity::getStatus, DeviceQrtzConstants.QRTZ_FILE_STATUS_2).eq(DeviceQrtzFileEntity::getWaylineId, mediaFileCount.getFileId())); - // duplicate data if (deviceOpt.isEmpty() || (Objects.nonNull(mediaFileCount) && request.getBid().equals(mediaFileCount.getBid()) diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/rocketmq/RocketMqConsum.java b/dk-modules/sample/src/main/java/org/dromara/sample/rocketmq/RocketMqConsum.java index 83d45d2..640578e 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/rocketmq/RocketMqConsum.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/rocketmq/RocketMqConsum.java @@ -72,14 +72,8 @@ public class RocketMqConsum implements RocketMQListener { Optional waylineJobDTO = waylineJobService.getJobByJobInternalId(jobId); reqMap.put("jobId",waylineJobDTO.get().getJobId()); reqMap.put("jobName",waylineJobDTO.get().getJobName()); + reqMap.put("deviceSn",videoId.getDroneSn()); + playTextService.streamType(reqMap); } - liveStreamService.liveStop(videoId); - HttpResultResponse httpResultResponse = liveStreamService.liveStart(liveTypeDTO); - if (httpResultResponse.getCode() == 0 || httpResultResponse.getCode() == 513012 || httpResultResponse.getCode() == 513003){ - reqMap.put("deviceSn:",videoId.getDroneSn()); - // playTextService.streamType(reqMap); - } - deviceRedisService.setDeviceVideo(videoId.getDroneSn(),videoId); - } } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java index 0182596..20c444c 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java @@ -15,6 +15,7 @@ import org.dromara.common.sdk.common.PaginationData; import org.dromara.sample.component.mqtt.model.EventsReceiver; import org.dromara.sample.media.model.MediaFileDTO; import org.dromara.sample.wayline.model.dto.WaylineJobDTO; +import org.dromara.sample.wayline.model.enums.WaylineTaskStatusEnum; import org.dromara.sample.wayline.model.param.CreateJobParam; import org.dromara.sample.wayline.model.param.UpdateJobParam; import org.dromara.sample.wayline.service.IFlightTaskService; @@ -120,6 +121,12 @@ public class WaylineJobController { return HttpResultResponse.success(); } + public static void main(String[] args) { + WaylineTaskStatusEnum pause = WaylineTaskStatusEnum.RESUME; + System.out.println(pause.getVal()); + + } + @GetMapping("/{workspace_id}/getJobFileUrlByDeviceSn") @Operation(summary = "根据设备查询飞行任务。", description = "根据设备查询飞行任务。")