From 5d06d78cbf238c383a229f61bf16d3c59051ee9e Mon Sep 17 00:00:00 2001
From: aix <vip_xiaobin810@163.com>
Date: Wed, 14 Aug 2024 20:40:36 +0800
Subject: [PATCH] 拍照录像接口
---
src/main/java/com/dji/sample/media/dao/IFileMapper.xml | 8 ++++
src/main/java/com/dji/sample/media/service/IMediaService.java | 6 +-
src/main/java/com/dji/sample/media/service/impl/MediaServiceImpl.java | 5 ++
src/main/java/com/dji/sample/media/model/MediaFileEntity.java | 2 +
src/main/java/com/dji/sample/component/mqtt/service/impl/MessageSenderServiceImpl.java | 34 ++++++++++++++++-
src/main/java/com/dji/sample/component/mqtt/service/IMessageSenderService.java | 4 ++
src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java | 7 +++
src/main/java/com/dji/sample/media/dao/IFileMapper.java | 7 ++-
src/main/java/com/dji/sample/component/redis/RedisConst.java | 2 +
src/main/java/com/dji/sample/droneairport/controller/MediaApiController.java | 37 ++++++++++++++++++
10 files changed, 104 insertions(+), 8 deletions(-)
diff --git a/src/main/java/com/dji/sample/component/mqtt/service/IMessageSenderService.java b/src/main/java/com/dji/sample/component/mqtt/service/IMessageSenderService.java
index 6611ade..a1aecb8 100644
--- a/src/main/java/com/dji/sample/component/mqtt/service/IMessageSenderService.java
+++ b/src/main/java/com/dji/sample/component/mqtt/service/IMessageSenderService.java
@@ -80,6 +80,10 @@
*/
<T> ServiceReply<T> publishServicesTopic(TypeReference<T> clazz, String sn, String method, Object data);
+ <T> ServiceReply<T> publishServicesTopic(TypeReference<T> clazz, String sn, String method, Object data, String bid,Long timestamp);
+
+ ServiceReply publishServicesTopic(String sn, String method, Object data, String bid,Long timestamp);
+
/**
* Used exclusively for sending messages for services, and does not set the received subtype.
* @param sn
diff --git a/src/main/java/com/dji/sample/component/mqtt/service/impl/MessageSenderServiceImpl.java b/src/main/java/com/dji/sample/component/mqtt/service/impl/MessageSenderServiceImpl.java
index 57718c6..23b265a 100644
--- a/src/main/java/com/dji/sample/component/mqtt/service/impl/MessageSenderServiceImpl.java
+++ b/src/main/java/com/dji/sample/component/mqtt/service/impl/MessageSenderServiceImpl.java
@@ -21,8 +21,8 @@
/**
* @author sean.zhou
- * @date 2021/11/16
* @version 0.1
+ * @date 2021/11/16
*/
@Service
@Slf4j
@@ -43,6 +43,7 @@
public void publish(String topic, CommonTopicResponse response) {
this.publish(topic, 1, response);
}
+
public void sendRabbitMQ(String topic, Object data) {
try {
if (sendRabbitMQ) {
@@ -139,6 +140,35 @@
}
@Override
+ public <T> ServiceReply<T> publishServicesTopic(TypeReference<T> clazz, String sn, String method, Object data, String bid, Long timestamp) {
+ String topic = TopicConst.THING_MODEL_PRE + TopicConst.PRODUCT + sn + TopicConst.SERVICES_SUF;
+ ServiceReply reply = this.publishWithReply(ServiceReply.class, topic,
+ CommonTopicResponse.builder()
+ .tid(UUID.randomUUID().toString())
+ .bid(StringUtils.hasText(bid) ? bid : UUID.randomUUID().toString())
+ .timestamp(timestamp)
+ .method(method)
+ .data(Objects.requireNonNullElse(data, ""))
+ .build());
+ if (Objects.isNull(clazz)) {
+ return reply;
+ }
+ // put together in "output"
+ if (Objects.nonNull(reply.getInfo())) {
+ reply.setOutput(mapper.convertValue(reply.getInfo(), clazz));
+ }
+ if (Objects.nonNull(reply.getOutput())) {
+ reply.setOutput(mapper.convertValue(reply.getOutput(), clazz));
+ }
+ return reply;
+ }
+
+ @Override
+ public ServiceReply publishServicesTopic(String sn, String method, Object data, String bid, Long timestamp) {
+ return this.publishServicesTopic(null, sn, method, data, bid, timestamp);
+ }
+
+ @Override
public ServiceReply publishServicesTopic(String sn, String method, Object data, String bid) {
return this.publishServicesTopic(null, sn, method, data, bid);
}
@@ -154,7 +184,7 @@
}
@Override
- public <T> ServiceReply<T> publishRequestsTopic(TypeReference<T> clazz, String sn, String method, Object data, String bid) {
+ public <T> ServiceReply<T> publishRequestsTopic(TypeReference<T> clazz, String sn, String method, Object data, String bid) {
String topic = TopicConst.THING_MODEL_PRE + TopicConst.PRODUCT + sn + TopicConst.REQUESTS_SUF;
ServiceReply reply = this.publishWithReply(ServiceReply.class, topic,
CommonTopicResponse.builder()
diff --git a/src/main/java/com/dji/sample/component/redis/RedisConst.java b/src/main/java/com/dji/sample/component/redis/RedisConst.java
index cd64f22..6c0aea2 100644
--- a/src/main/java/com/dji/sample/component/redis/RedisConst.java
+++ b/src/main/java/com/dji/sample/component/redis/RedisConst.java
@@ -49,6 +49,8 @@
public static final String OSD_PREFIX = "osd" + DELIMITER;
+ public static final String COMMANDS_PREFIX = "commands" + DELIMITER;
+
public static final String MEDIA_FILE_PREFIX = "media_file" + DELIMITER;
public static final String MEDIA_HIGHEST_PRIORITY_PREFIX = "media_highest_priority" + DELIMITER;
diff --git a/src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java b/src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java
index 8207d79..d9d039c 100644
--- a/src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java
+++ b/src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java
@@ -426,7 +426,12 @@
ResponseResult result = ResponseResult.success();
result.setTraceid(bid);
- ServiceReply serviceReply = messageSenderService.publishServicesTopic(param.getSn(), param.getCmd().getCmd(), param.getData(),bid);
+ Long timestamp = System.currentTimeMillis();
+
+ //拍照事件存redis
+ RedisOpsUtils.hashSet(RedisConst.COMMANDS_PREFIX + param.getSn() + RedisConst.DELIMITER + bid,bid,timestamp);
+
+ ServiceReply serviceReply = messageSenderService.publishServicesTopic(param.getSn(), param.getCmd().getCmd(), param.getData(),bid,timestamp);
return ResponseResult.CODE_SUCCESS != serviceReply.getResult() ?
ResponseResult.error(serviceReply.getResult(), "错误码:" + serviceReply.getResult())
: result;
diff --git a/src/main/java/com/dji/sample/droneairport/controller/MediaApiController.java b/src/main/java/com/dji/sample/droneairport/controller/MediaApiController.java
new file mode 100644
index 0000000..5413184
--- /dev/null
+++ b/src/main/java/com/dji/sample/droneairport/controller/MediaApiController.java
@@ -0,0 +1,37 @@
+package com.dji.sample.droneairport.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.dji.sample.common.model.ResponseResult;
+import com.dji.sample.component.redis.RedisConst;
+import com.dji.sample.component.redis.RedisOpsUtils;
+import com.dji.sample.media.model.MediaFileEntity;
+import com.dji.sample.media.service.IMediaService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@RequestMapping("/droneAirport/mediaApi")
+@RestController
+public class MediaApiController {
+
+ @Autowired
+ private IMediaService mediaService;
+
+ @GetMapping("{sn}/getMedia/{traceid}")
+ public ResponseResult getMedia(@PathVariable String sn, @PathVariable String traceid) {
+
+ String timestamp = (Long)RedisOpsUtils.hashGet(RedisConst.COMMANDS_PREFIX + sn + RedisConst.DELIMITER + traceid,traceid) / 1000 * 1000 + "";
+ MediaFileEntity entity = mediaService.getMediaFieByTid(timestamp);
+ String url = "https://wrj.shuixiongit.com/minio/cloud-bucket" + entity.getObjectKey();
+ Map ret = new HashMap();
+ ret.put("url", url);
+ ret.put("metadata", JSONObject.parseObject(entity.getMetadata().toString()));
+ return ResponseResult.success(ret);
+ }
+
+}
diff --git a/src/main/java/com/dji/sample/media/dao/IFileMapper.java b/src/main/java/com/dji/sample/media/dao/IFileMapper.java
index 5886478..81e4364 100644
--- a/src/main/java/com/dji/sample/media/dao/IFileMapper.java
+++ b/src/main/java/com/dji/sample/media/dao/IFileMapper.java
@@ -18,10 +18,13 @@
*/
@Mapper
public interface IFileMapper extends BaseMapper<MediaFileEntity> {
- Page<MediaFileEntity> getPage(@Param("page") Page<MediaFileEntity> mediaFileEntityPage, @Param("workspaceId") String workspaceId,@Param("query") MediaFileQueryParam mediaFileQueryParam);
+
+ Page<MediaFileEntity> getPage(@Param("page") Page<MediaFileEntity> mediaFileEntityPage, @Param("workspaceId") String workspaceId, @Param("query") MediaFileQueryParam mediaFileQueryParam);
Page<MediaJobDTO> mediaPage(@Param("page") Page<MediaJobDTO> mediaFileEntityPage, @Param("workspaceId") String workspaceId, @Param("param") SearchMediaParam param);
-
Page<MediaJobDTO> mediaDetail(Page<MediaJobDTO> mediaJobDTOPage, @Param("jobId") String jobId, @Param("fileAddress") String fileAddress);
+
+ MediaFileEntity getMediaFieByTid(@Param("timestamp") String timestamp);
+
}
diff --git a/src/main/java/com/dji/sample/media/dao/IFileMapper.xml b/src/main/java/com/dji/sample/media/dao/IFileMapper.xml
index 3d6ff33..7062db7 100644
--- a/src/main/java/com/dji/sample/media/dao/IFileMapper.xml
+++ b/src/main/java/com/dji/sample/media/dao/IFileMapper.xml
@@ -85,4 +85,12 @@
</if>
ORDER BY type = '视频' DESC
</select>
+
+ <select id="getMediaFieByTid" resultType="com.dji.sample.media.model.MediaFileEntity">
+ SELECT *
+ FROM media_file
+ WHERE CAST(JSON_EXTRACT(metadata, '$.createdTime') AS UNSIGNED) >= #{timestamp}
+ ORDER BY CAST(JSON_EXTRACT(metadata, '$.createdTime') / 1000 AS UNSIGNED) ASC
+ LIMIT 1;
+ </select>
</mapper>
diff --git a/src/main/java/com/dji/sample/media/model/MediaFileEntity.java b/src/main/java/com/dji/sample/media/model/MediaFileEntity.java
index cf11ab3..133eb12 100644
--- a/src/main/java/com/dji/sample/media/model/MediaFileEntity.java
+++ b/src/main/java/com/dji/sample/media/model/MediaFileEntity.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -74,6 +75,7 @@
private String userId;
@TableField(value = "metadata", typeHandler = FastjsonTypeHandler.class)
+ @JsonFormat
private Object metadata;
@TableField("examine")
diff --git a/src/main/java/com/dji/sample/media/service/IMediaService.java b/src/main/java/com/dji/sample/media/service/IMediaService.java
index 62214c9..07f2b5b 100644
--- a/src/main/java/com/dji/sample/media/service/IMediaService.java
+++ b/src/main/java/com/dji/sample/media/service/IMediaService.java
@@ -2,13 +2,11 @@
import com.dji.sample.common.model.PaginationData;
import com.dji.sample.media.model.FileUploadDTO;
+import com.dji.sample.media.model.MediaFileEntity;
import com.dji.sample.media.model.MediaJobDTO;
import com.dji.sample.media.model.param.SearchMediaParam;
-import com.dji.sample.wayline.model.dto.WaylineJobDTO;
import com.drew.imaging.ImageProcessingException;
-import org.springframework.web.bind.annotation.RequestParam;
-import java.awt.*;
import java.io.IOException;
import java.util.List;
@@ -58,4 +56,6 @@
PaginationData<MediaJobDTO> mediaPage(String workspaceId, SearchMediaParam param);
PaginationData<MediaJobDTO> mediaDetail(String jobId, Long page, Long pageSize);
+
+ MediaFileEntity getMediaFieByTid(String timestamp);
}
diff --git a/src/main/java/com/dji/sample/media/service/impl/MediaServiceImpl.java b/src/main/java/com/dji/sample/media/service/impl/MediaServiceImpl.java
index 648305a..2ca1a5c 100644
--- a/src/main/java/com/dji/sample/media/service/impl/MediaServiceImpl.java
+++ b/src/main/java/com/dji/sample/media/service/impl/MediaServiceImpl.java
@@ -272,4 +272,9 @@
return receiver;
}
+
+ @Override
+ public MediaFileEntity getMediaFieByTid(String timestamp) {
+ return mapper.getMediaFieByTid(timestamp);
+ }
}
--
Gitblit v1.9.3