From e567c76939c6516b4146aa6a554d95c0bcb4f078 Mon Sep 17 00:00:00 2001
From: rain <167982779@qq.com>
Date: Mon, 15 Jul 2024 16:57:50 +0800
Subject: [PATCH] 修改航线文件重命名报错,增加图片缩略图,完善喊话功能

---
 src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java |  110 +++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 75 insertions(+), 35 deletions(-)

diff --git a/src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java b/src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java
index 621b57d..81ad2af 100644
--- a/src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java
+++ b/src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java
@@ -18,6 +18,7 @@
 import com.dji.sample.manage.service.IDeviceDictionaryService;
 import com.dji.sample.media.dao.IFileMapper;
 import com.dji.sample.media.dao.IMarkMapper;
+import com.dji.sample.media.dao.INailMapper;
 import com.dji.sample.media.model.*;
 import com.dji.sample.media.service.IFileService;
 import com.dji.sample.media.util.ImgUtil;
@@ -27,6 +28,7 @@
 import com.dji.sample.patches.utils.TimerUtil;
 import com.dji.sample.territory.pojo.TerritoryConfigPojo;
 import com.dji.sample.territory.service.impl.TbFjServiceImpl;
+import com.dji.sample.territory.utils.ImgZipUtil;
 import com.dji.sample.territory.utils.WaterMarkUtil;
 import com.dji.sample.wayline.service.IWaylineFileService;
 import com.dji.sample.wayline.service.IWaylineJobService;
@@ -66,6 +68,8 @@
     private IFileMapper mapper;
     @Autowired
     private IMarkMapper markMapper;
+    @Autowired
+    private INailMapper nailMapper;
     @Autowired
     private GetPatchesMapper patchesMapper;
     @Autowired
@@ -112,7 +116,23 @@
     }
 
     public void saveMarkFile(String workspaceId, FileUploadDTO file) throws IOException, FontFormatException, ImageProcessingException {
-
+        String endpoint = pojo.getEndpoint();
+        String accessKey = pojo.getAccessKey();
+        String secretKey = pojo.getSecretKey();
+        String bucketName = pojo.getBucket();
+        String url = pojo.getEndpoint() + "/" + pojo.getBucket() + file.getObjectKey();
+        File file1 = TbFjServiceImpl.downloadFile(url);
+        File nailFile = new File(ImgZipUtil.compressImage(file1, 50).toURI());
+        MediaFileNailEntity nailEntity = this.fileUploadConvertToNailEntity(file);
+        nailEntity.setIsOriginal(false);
+        nailEntity.setWorkspaceId(workspaceId);
+        nailEntity.setFileName("nail" + file.getName());
+        nailEntity.setObjectKey("/nail" + file.getPath() + "/" + file.getName());
+        nailEntity.setFilePath("nail" + file.getPath());
+        String nailName = nailEntity.getObjectKey();
+        nailEntity.setFileId(UUID.randomUUID().toString());
+        uploadFile(endpoint, accessKey, secretKey, bucketName, nailName, nailFile, "image/jpeg");
+        nailMapper.insert(nailEntity);
         try {
             boolean contains = file.getName().contains("~");
             if (contains) {
@@ -125,44 +145,42 @@
                             .set(LotInfo::getInvestigate, 1);
                     patchesMapper.update(null, updateWrapper);
                 }
+
+                boolean endsWith = file.getObjectKey().endsWith(".mp4");
+                if (endsWith) {
+                    MediaFileMarkEntity mediaFileMarkEntity = this.fileUploadConvertToMarkEntity(file);
+                    mediaFileMarkEntity.setWorkspaceId(workspaceId);
+                    mediaFileMarkEntity.setFileId(UUID.randomUUID().toString());
+                    markMapper.insert(mediaFileMarkEntity);
+                }
+                MediaFileMarkEntity mediaFileMarkEntity = this.fileUploadConvertToMarkEntity(file);
+                long timestamp = convertToTimestamp(file.getMetadata().getCreatedTime());
+                File markFile = new File(WaterMarkUtil.addWatermark(file1, timestamp, file.getMetadata().getShootPosition().getLat(),
+                        file.getMetadata().getShootPosition().getLng(), file.getMetadata().getGimbalYawDegree()).toURI());
+                Object data = ImgUtil.getInfo(file1);
+                mediaFileMarkEntity.setDronedata(data);
+                mediaFileMarkEntity.setWorkspaceId(workspaceId);
+                mediaFileMarkEntity.setIsadd(0);
+                mediaFileMarkEntity.setIsOriginal(false);
+                mediaFileMarkEntity.setFileId(UUID.randomUUID().toString());
+                mediaFileMarkEntity.setObjectKey("/mark" + file.getPath() + "/" + file.getName());
+                mediaFileMarkEntity.setFileName("mark" + file.getName());
+                mediaFileMarkEntity.setFilePath("mark" + file.getPath());
+                String objectName = mediaFileMarkEntity.getObjectKey(); // 例如 "folder/file.txt"
+                uploadFile(endpoint, accessKey, secretKey, bucketName, objectName, markFile, "image/jpeg");
+                markMapper.insert(mediaFileMarkEntity);
             }
         } catch (Exception e) {
             e.printStackTrace();
         }
-        boolean endsWith = file.getObjectKey().endsWith(".mp4");
-        if (endsWith) {
-            MediaFileMarkEntity mediaFileMarkEntity = this.fileUploadConvertToMarkEntity(file);
-            mediaFileMarkEntity.setWorkspaceId(workspaceId);
-            mediaFileMarkEntity.setFileId(UUID.randomUUID().toString());
-            markMapper.insert(mediaFileMarkEntity);
-        }
-        MediaFileMarkEntity mediaFileMarkEntity = this.fileUploadConvertToMarkEntity(file);
-        String url = pojo.getEndpoint()+"/"+pojo.getBucket() + file.getObjectKey();
-        File file1 = TbFjServiceImpl.downloadFile(url);
-        long timestamp = convertToTimestamp(file.getMetadata().getCreatedTime());
-        File file2 = new File(WaterMarkUtil.addWatermark(file1, timestamp, file.getMetadata().getShootPosition().getLat(),
-                file.getMetadata().getShootPosition().getLng(), file.getMetadata().getGimbalYawDegree()).toURI());
-        Object data = ImgUtil.getInfo(file1);
-        mediaFileMarkEntity.setDronedata(data);
-        mediaFileMarkEntity.setWorkspaceId(workspaceId);
-        mediaFileMarkEntity.setIsadd(0);
-        mediaFileMarkEntity.setFileId(UUID.randomUUID().toString());
-        mediaFileMarkEntity.setObjectKey("/mark" + file.getPath() + "/" + file.getName());
-        mediaFileMarkEntity.setFileName("mark" + file.getName());
-        mediaFileMarkEntity.setFilePath("mark" + file.getPath());
-        String endpoint = pojo.getEndpoint();
-        String accessKey = pojo.getAccessKey();
-        String secretKey = pojo.getSecretKey();
-        String bucketName = pojo.getBucket();
-        String objectName = mediaFileMarkEntity.getObjectKey(); // 例如 "folder/file.txt"
-        uploadFile(endpoint, accessKey, secretKey, bucketName, objectName, file2,"image/jpeg");
-        markMapper.insert(mediaFileMarkEntity);
-    }
-
+            }
 
     @Override
     public Object mediaInfo(String filename) {
-        String name = "mark" + filename;
+        String name = filename;
+        if (!filename.contains("mark")) {
+            name = "mark" + filename;
+        }
         List<MediaFileMarkEntity> entity = markMapper.selectList(new LambdaQueryWrapper<MediaFileMarkEntity>()
                 .eq(MediaFileMarkEntity::getFileName, name));
         if (entity != null) {
@@ -244,8 +262,6 @@
         // 返回分页数据
         return new PaginationData<>(pageResults, new Pagination(resultPage));
     }
-
-
 
 
     @Override
@@ -410,6 +426,30 @@
         return builder.build();
     }
 
+    private MediaFileNailEntity fileUploadConvertToNailEntity(FileUploadDTO file) {
+        MediaFileNailEntity.MediaFileNailEntityBuilder builder = MediaFileNailEntity.builder();
+
+        if (file != null) {
+            builder.fileName(file.getName())
+                    .fingerprint(file.getFingerprint())
+                    .objectKey(file.getObjectKey())
+                    .subFileType(file.getSubFileType())
+                    .isOriginal(file.getExt().getIsOriginal())
+                    .jobId(file.getExt().getFlightId())
+                    .tinnyFingerprint(file.getExt().getTinnyFingerprint());
+
+            // domain-type-subType
+            int[] payloadModel = Arrays.stream(file.getExt().getPayloadModelKey().split("-"))
+                    .map(Integer::valueOf)
+                    .mapToInt(Integer::intValue)
+                    .toArray();
+            Optional<DeviceDictionaryDTO> payloadDict = deviceDictionaryService
+                    .getOneDictionaryInfoByTypeSubType(DeviceDomainEnum.PAYLOAD.getVal(), payloadModel[1], payloadModel[2]);
+            payloadDict.ifPresent(payload -> builder.payload(payload.getDeviceName()));
+        }
+        return builder.build();
+    }
+
 
     /**
      * Convert database entity objects into file data transfer object.
@@ -440,7 +480,7 @@
         return builder.build();
     }
 
-    public static void uploadFile(String endpoint, String accessKey, String secretKey, String bucketName, String objectName, File file,String type) {
+    public static void uploadFile(String endpoint, String accessKey, String secretKey, String bucketName, String objectName, File file, String type) {
         try {
             // 创建MinIO客户端实例
             MinioClient minioClient = MinioClient.builder()

--
Gitblit v1.9.3