Browse Source

机库媒体上传问题修改:1.多次创建文件夹问题 2.全景图判断问题

S0025136190 1 year ago
parent
commit
5683c96645

+ 4 - 2
Backend/sample/src/main/java/com/dji/sample/common/util/PicExifUtil.java

@@ -42,6 +42,7 @@ public class PicExifUtil {
     public static final String MP4 = ".MP4";
     public static final String JPG = ".JPG";
     public static final String WIDE_CAMERA = "WideCamera";
+    public static final String PANORAMA_TRUE = "True";
 
     public static MediaExifDTO getPicExif(String objectKey) {
         long sTime = System.currentTimeMillis();
@@ -82,7 +83,8 @@ public class PicExifUtil {
                 XmpDirectory xmpDirectory = metadata.getFirstDirectoryOfType(XmpDirectory.class);
                 if(xmpDirectory != null) {
                     String imageSource = xmpDirectory.getXmpProperties().get("drone-dji:ImageSource");
-                    if(WIDE_CAMERA.equals(imageSource)) {
+                    String panorama = xmpDirectory.getXmpProperties().get("GPano:UsePanoramaViewer");
+                    if(WIDE_CAMERA.equals(imageSource) && PANORAMA_TRUE.equals(panorama)) {
                         builder.subFileType(MediaSubFileTypeEnum.PANORAMA.getType());
                     } else {
                         builder.subFileType(MediaSubFileTypeEnum.NORMAL.getType());
@@ -136,7 +138,7 @@ public class PicExifUtil {
     }
 
 //    public static void main(String[] args) throws FileNotFoundException {
-//        String filePath = "C:\\Users\\86139\\Desktop\\DJI_20241011173646_0001_V.jpeg";
+//        String filePath = "C:\\Users\\86139\\Desktop\\DJI_20241024142543_0008_V.jpeg";
 //        File file = new File(filePath);
 //        getPicExif(new FileInputStream(file),false);
 //    }

+ 2 - 0
Backend/sample/src/main/java/com/dji/sample/component/redis/RedisConst.java

@@ -79,4 +79,6 @@ public final class RedisConst {
     public static final Integer WHITELIST_ALIVE_SECOND = 3600;
     //相机模式
     public static final String CAMERA_MODE_PREFIX = "camera_mode" + DELIMITER;
+    //机库飞行任务媒体文件夹
+    public static final String DOCK_MEDIA_DIR_PREFIX = "dock_media_dir" + DELIMITER;
 }

+ 5 - 0
Backend/sample/src/main/java/com/dji/sample/media/service/IMediaRedisService.java

@@ -30,4 +30,9 @@ public interface IMediaRedisService {
 
     boolean delCameraMode(String gatewaySn);
 
+    void setMediaFilePath(String gatewaySn, String filePath);
+
+    String getMediaFilePath(String gatewaySn);
+
+    boolean delMediaFilePath(String gatewaySn);
 }

+ 15 - 0
Backend/sample/src/main/java/com/dji/sample/media/service/impl/MediaRedisServiceImpl.java

@@ -67,4 +67,19 @@ public class MediaRedisServiceImpl implements IMediaRedisService {
     public boolean delCameraMode(String gatewaySn) {
         return RedisOpsUtils.del(RedisConst.CAMERA_MODE_PREFIX + gatewaySn);
     }
+
+    @Override
+    public void setMediaFilePath(String gatewaySn, String filePath) {
+        RedisOpsUtils.set(RedisConst.DOCK_MEDIA_DIR_PREFIX + gatewaySn, filePath);
+    }
+
+    @Override
+    public String getMediaFilePath(String gatewaySn) {
+        return (String) RedisOpsUtils.get(RedisConst.DOCK_MEDIA_DIR_PREFIX + gatewaySn);
+    }
+
+    @Override
+    public boolean delMediaFilePath(String gatewaySn) {
+        return RedisOpsUtils.del(RedisConst.DOCK_MEDIA_DIR_PREFIX + gatewaySn);
+    }
 }

+ 13 - 7
Backend/sample/src/main/java/com/dji/sample/media/service/impl/MediaServiceImpl.java

@@ -163,13 +163,19 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
         file.getExt().setSn(device.getChildDeviceSn());
 
         String jobId = callback.getFile().getExt().getFlightId();
-        log.info("================parseMediaFile======jobId:" + jobId);
-        Optional<WaylineJobDTO> jobOpt = waylineJobService.getJobByJobId(device.getWorkspaceId(),jobId);
-        if(jobOpt.isPresent()) {
-            file.setPath(jobOpt.get().getJobName() + " " + DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMAT));
-        } else {
-            file.setPath(device.getDeviceName() + " " + DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMAT));
+        log.info("================parseMediaFile======jobId:" + jobId + "===========DeviceSn:" + device.getDeviceSn());
+
+        String filePath = mediaRedisService.getMediaFilePath(device.getDeviceSn());
+        if(!StringUtils.hasText(filePath)) {
+            Optional<WaylineJobDTO> jobOpt = waylineJobService.getJobByJobId(device.getWorkspaceId(), jobId);
+            if (jobOpt.isPresent()) {
+                filePath = jobOpt.get().getJobName() + " " + DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMAT);
+            } else {
+                filePath = device.getDeviceName() + " " + DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMAT);
+            }
+            mediaRedisService.setMediaFilePath(device.getDeviceSn(),filePath);
         }
+        file.setPath(filePath);
         CameraModeEnum cameraModeEnum = mediaRedisService.getCameraMode(device.getDeviceSn());
         log.info("================parseMediaFile======cameraModeEnum:" + cameraModeEnum);
         if(CameraModeEnum.PANORAMA == cameraModeEnum) {
@@ -205,7 +211,7 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
             if (Objects.nonNull(fileCount) && jobId.equals(fileCount.getJobId())) {
                 mediaRedisService.delMediaHighestPriority(request.getGateway());
             }
-
+            mediaRedisService.delMediaFilePath(request.getGateway());
             mediaRedisService.delCameraMode(request.getGateway());
         } else {
             mediaRedisService.setMediaCount(request.getGateway(), jobId, mediaFileCount);

+ 2 - 0
Backend/sample/src/main/java/com/dji/sample/wayline/service/impl/FlightTaskServiceImpl.java

@@ -294,6 +294,8 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
             return HttpResultResponse.error("Failed to prepare job.");
         }
 
+        //任务开始,清理任务媒体文件夹
+        mediaRedisService.delMediaFilePath(waylineJob.getDockSn());
         // Issue an immediate task execution command.
         if (TaskTypeEnum.IMMEDIATE == waylineJob.getTaskType()) {
             if (!executeFlightTask(waylineJob.getWorkspaceId(), waylineJob.getJobId())) {