From b35dd737c03ee80d45753939ade49a59f556197f Mon Sep 17 00:00:00 2001
From: rain <167982779@qq.com>
Date: Wed, 22 May 2024 16:45:41 +0800
Subject: [PATCH] 航线问题修复,水印格式修改,图斑图片加水印

---
 src/main/java/com/dji/sample/patches/utils/FormatConversionUtil.java     |    7 --
 src/main/java/com/dji/sample/territory/service/impl/TbFjServiceImpl.java |    4 
 src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java     |   78 ++++++++++++++++++++++---
 src/main/java/com/dji/sample/media/service/IMediaService.java            |    4 +
 src/main/java/com/dji/sample/media/service/impl/MediaServiceImpl.java    |    5 +
 src/main/java/com/dji/sample/media/controller/FileController.java        |   12 ++++
 src/main/java/com/dji/sample/media/controller/MediaController.java       |    6 +
 src/main/java/com/dji/sample/media/service/IFileService.java             |    4 +
 src/main/java/com/dji/sample/patches/utils/TimerUtil.java                |    6 -
 src/main/java/com/dji/sample/territory/utils/WaterMarkUtil.java          |    9 +-
 src/main/java/com/dji/sample/patches/controller/PatchesController.java   |    4 
 11 files changed, 105 insertions(+), 34 deletions(-)

diff --git a/src/main/java/com/dji/sample/media/controller/FileController.java b/src/main/java/com/dji/sample/media/controller/FileController.java
index 8ece8d7..f750d05 100644
--- a/src/main/java/com/dji/sample/media/controller/FileController.java
+++ b/src/main/java/com/dji/sample/media/controller/FileController.java
@@ -84,4 +84,16 @@
             e.printStackTrace();
         }
     }
+//    @PostMapping("/{workspace_id}/files/download")
+//    public ResponseResult<String> waterMarkFile(){
+//        //获取media实体信息
+//
+//        //对mediaUrl进行下载
+//
+//        //对图片进行水印
+//
+//        //将带有水印的图片存入本地
+//
+//        //将链接返回
+//    }
 }
diff --git a/src/main/java/com/dji/sample/media/controller/MediaController.java b/src/main/java/com/dji/sample/media/controller/MediaController.java
index 3acd920..104cb1c 100644
--- a/src/main/java/com/dji/sample/media/controller/MediaController.java
+++ b/src/main/java/com/dji/sample/media/controller/MediaController.java
@@ -13,6 +13,8 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.awt.*;
+import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -53,10 +55,10 @@
      * @return
      */
     @PostMapping("/{workspace_id}/upload-callback")
-    public ResponseResult<String> uploadCallback(@PathVariable(name = "workspace_id") String workspaceId, @RequestBody FileUploadDTO file) {
+    public ResponseResult<String> uploadCallback(@PathVariable(name = "workspace_id") String workspaceId, @RequestBody FileUploadDTO file) throws IOException, FontFormatException {
         mediaService.saveMediaFile(workspaceId, file);
+        mediaService.saveMediaMarkFile(workspaceId, file);
         return ResponseResult.success(file.getObjectKey());
-
     }
 
     /**
diff --git a/src/main/java/com/dji/sample/media/service/IFileService.java b/src/main/java/com/dji/sample/media/service/IFileService.java
index 6bdb865..c315720 100644
--- a/src/main/java/com/dji/sample/media/service/IFileService.java
+++ b/src/main/java/com/dji/sample/media/service/IFileService.java
@@ -6,6 +6,8 @@
 import com.dji.sample.media.model.MediaFileEntity;
 import com.dji.sample.media.model.MediaFileQueryParam;
 
+import java.awt.*;
+import java.io.IOException;
 import java.net.URL;
 import java.util.List;
 
@@ -31,7 +33,7 @@
      * @return
      */
     Integer saveFile(String workspaceId, FileUploadDTO file);
-
+    Integer saveMarkFile(String workspaceId, FileUploadDTO file) throws IOException, FontFormatException;
     /**
      * Query information about all files in this workspace based on the workspace id.
      * @param workspaceId
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 f5b01fc..c34c491 100644
--- a/src/main/java/com/dji/sample/media/service/IMediaService.java
+++ b/src/main/java/com/dji/sample/media/service/IMediaService.java
@@ -7,6 +7,8 @@
 import com.dji.sample.wayline.model.dto.WaylineJobDTO;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import java.awt.*;
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -32,6 +34,8 @@
      */
     Integer saveMediaFile(String workspaceId, FileUploadDTO file);
 
+    Integer saveMediaMarkFile(String workspaceId, FileUploadDTO file) throws IOException, FontFormatException;
+
     /**
      * Query tiny fingerprints about all files in this workspace based on the workspace id.
      * @param workspaceId
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 f423170..24b347e 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
@@ -1,9 +1,11 @@
 package com.dji.sample.media.service.impl;
 
-import com.alibaba.fastjson.JSONObject;
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.model.PutObjectRequest;
+import com.aliyun.oss.model.PutObjectResult;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dji.sample.common.model.Pagination;
@@ -14,17 +16,18 @@
 import com.dji.sample.manage.model.enums.DeviceDomainEnum;
 import com.dji.sample.manage.service.IDeviceDictionaryService;
 import com.dji.sample.media.dao.IFileMapper;
-import com.dji.sample.media.model.FileUploadDTO;
-import com.dji.sample.media.model.MediaFileDTO;
-import com.dji.sample.media.model.MediaFileEntity;
-import com.dji.sample.media.model.MediaFileQueryParam;
+import com.dji.sample.media.dao.IMarkMapper;
+import com.dji.sample.media.model.*;
 import com.dji.sample.media.service.IFileService;
-import com.dji.sample.patches.model.entity.LotInfo;
-import com.dji.sample.wayline.model.entity.WaylineJobEntity;
+import com.dji.sample.territory.service.impl.TbFjServiceImpl;
+import com.dji.sample.territory.utils.WaterMarkUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.awt.*;
+import java.io.File;
+import java.io.IOException;
 import java.net.URL;
 import java.time.Instant;
 import java.time.LocalDateTime;
@@ -46,7 +49,8 @@
 
     @Autowired
     private IFileMapper mapper;
-
+    @Autowired
+    private IMarkMapper markMapper;
     @Autowired
     private IDeviceDictionaryService deviceDictionaryService;
 
@@ -79,7 +83,21 @@
         fileEntity.setFileId(UUID.randomUUID().toString());
         return mapper.insert(fileEntity);
     }
-
+        public Integer saveMarkFile(String workspaceId, FileUploadDTO file) throws IOException, FontFormatException {
+            MediaFileMarkEntity mediaFileMarkEntity =this.fileUploadConvertToMarkEntity(file);
+            String url =  "http://dev.jxpskj.com:9000/cloud-bucket" + file.getObjectKey();
+            File file1=TbFjServiceImpl.downloadFile(url);
+            File file2= new File(WaterMarkUtil.addWatermark(file1, Long.valueOf(file.getMetadata().getCreatedTime().toString()),file.getMetadata().getPhotoedPosition().getLat(),
+                    file.getMetadata().getPhotoedPosition().getLng(),file.getMetadata().getGimbalYawDegree()).toURI());
+            mediaFileMarkEntity.setObjectKey(file.getPath());
+            mediaFileMarkEntity.setWorkspaceId(workspaceId);
+            mediaFileMarkEntity.setFileId(UUID.randomUUID().toString());
+            mediaFileMarkEntity.setObjectKey("/mark"+file.getPath()+"/"+file.getName());
+            mediaFileMarkEntity.setFileName("mark"+file.getName());
+            mediaFileMarkEntity.setFilePath("mark"+file.getPath());
+            uploadFile(String.valueOf(file2), mediaFileMarkEntity.getObjectKey());
+            return markMapper.insert(mediaFileMarkEntity);
+        }
     @Override
     public List<MediaFileDTO> getAllFilesByWorkspaceId(String workspaceId) {
         return mapper.selectList(new LambdaQueryWrapper<MediaFileEntity>()
@@ -182,6 +200,33 @@
         }
         return builder.build();
     }
+    private MediaFileMarkEntity fileUploadConvertToMarkEntity(FileUploadDTO file) {
+        MediaFileMarkEntity.MediaFileMarkEntityBuilder builder = MediaFileMarkEntity.builder();
+
+        if (file != null) {
+            builder.fileName(file.getName())
+                    .filePath(file.getPath())
+                    .isadd(0)
+                    .fingerprint(file.getFingerprint())
+                    .objectKey(file.getObjectKey())
+                    .subFileType(file.getSubFileType())
+                    .isOriginal(file.getExt().getIsOriginal())
+                    .jobId(file.getExt().getFlightId())
+                    .drone(file.getExt().getSn()).metadata(file.getMetadata())
+                    .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.
@@ -210,5 +255,16 @@
 
         return builder.build();
     }
-
+    public void uploadFile(String filePath, String key) {
+        OSS ossClient = new OSSClientBuilder().build(OssConfiguration.endpoint, OssConfiguration.accessKey, OssConfiguration.secretKey);
+        try {
+            File file = new File(filePath);
+            PutObjectRequest putObjectRequest = new PutObjectRequest(OssConfiguration.bucket, key, file);
+            PutObjectResult putObjectResult = ossClient.putObject(putObjectRequest);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            ossClient.shutdown();
+        }
+    }
 }
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 87a9bc2..1ac5b12 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
@@ -33,6 +33,8 @@
 import org.springframework.stereotype.Service;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import java.awt.*;
+import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -85,6 +87,9 @@
     public Integer saveMediaFile(String workspaceId, FileUploadDTO file) {
         return fileService.saveFile(workspaceId, file);
     }
+    public Integer saveMediaMarkFile(String workspaceId, FileUploadDTO file) throws IOException, FontFormatException {
+        return fileService.saveMarkFile(workspaceId, file);
+    }
 
     @Override
     public List<String> getAllTinyFingerprintsByWorkspaceId(String workspaceId) {
diff --git a/src/main/java/com/dji/sample/patches/controller/PatchesController.java b/src/main/java/com/dji/sample/patches/controller/PatchesController.java
index 5d4a6e4..a1c287c 100644
--- a/src/main/java/com/dji/sample/patches/controller/PatchesController.java
+++ b/src/main/java/com/dji/sample/patches/controller/PatchesController.java
@@ -77,8 +77,8 @@
     @GetMapping("/useMyTask")
     public ResponseResult useMyTask() throws Exception {
         try {
-//        timerUtil.myTask();
-            timerUtil.myTask2();
+            timerUtil.myTask();
+//            timerUtil.myTask2();
             return ResponseResult.success();
         }catch (Exception e){
             throw new RuntimeException("db存储发送出现异常");
diff --git a/src/main/java/com/dji/sample/patches/utils/FormatConversionUtil.java b/src/main/java/com/dji/sample/patches/utils/FormatConversionUtil.java
index f220536..288d711 100644
--- a/src/main/java/com/dji/sample/patches/utils/FormatConversionUtil.java
+++ b/src/main/java/com/dji/sample/patches/utils/FormatConversionUtil.java
@@ -46,8 +46,6 @@
     //获取Polygon的中心点,X轴和Y轴
     public static String getCentros(List<LotInfo> list) {
         List<Coordinate> centros = new ArrayList<>();
-        List<List<Coordinate>> extremePoints = new ArrayList<>();
-        Map<Coordinate, List<Coordinate>> points = new HashMap<>();
         list.forEach(patche -> {
             String wkt = patche.getDkfw();
             // 解析WKT字符串为多边形
@@ -63,11 +61,6 @@
             Coordinate coordinateCentro = getCentro(polygon);
             centros.add(coordinateCentro);
             str = coordinateCentro.toString();
-            // 开始封装图斑4个航线
-            List<Coordinate> coordinatePointList = getExtremePoints(polygon);
-            extremePoints.add(coordinatePointList);
-            points.put(coordinateCentro, coordinatePointList);
-
         });
         return str;
     }
diff --git a/src/main/java/com/dji/sample/patches/utils/TimerUtil.java b/src/main/java/com/dji/sample/patches/utils/TimerUtil.java
index 8aba2a2..10a4dcb 100644
--- a/src/main/java/com/dji/sample/patches/utils/TimerUtil.java
+++ b/src/main/java/com/dji/sample/patches/utils/TimerUtil.java
@@ -162,7 +162,7 @@
      * @throws IOException
      */
     public MultipartFile getFile(String waylineName, List<LotInfo> list) throws IOException {
-        List<PointPO> coordinates = GeoToolsUtil.getRoutePointOrder(list, 28.62703, 115.867719);
+        List<PointPO> coordinates = GeoToolsUtil.getRoutePointOrder(list, 28.62452712442823, 	115.85666327144976);
         XMLTemplateModel xmlModel = XMLTemplateModel.init(coordinates, list);
         CreateWaylineFileUtils.createWaylineFile(xmlModel, patchesConfigPojo.getTemplate(), patchesConfigPojo.getTargetTemplate(), patchesConfigPojo.getWaylines(), patchesConfigPojo.getTargetWaylines());
         // 压缩文件夹中的内容
@@ -335,10 +335,6 @@
                     HttpMethod.POST,
                     requestEntity,
                     String.class);
-            System.out.println(response);
-            System.out.println(response);
-            System.out.println(response);
-            System.out.println(response);
         } catch (Exception e) {
             throw new IllegalArgumentException("db推送失败" + e.getMessage());
         }
diff --git a/src/main/java/com/dji/sample/territory/service/impl/TbFjServiceImpl.java b/src/main/java/com/dji/sample/territory/service/impl/TbFjServiceImpl.java
index 175763a..816a922 100644
--- a/src/main/java/com/dji/sample/territory/service/impl/TbFjServiceImpl.java
+++ b/src/main/java/com/dji/sample/territory/service/impl/TbFjServiceImpl.java
@@ -127,7 +127,7 @@
         //对应图片和视频文件进行不同处理
         boolean endsWith = key.endsWith(".mp4");
         if (!endsWith) {
-            file1 = WaterMarkUtil.addWatermark(file, patchesConfigPojo.getUnzip(), sj, lat, lng, gimbalYawDegree);
+            file1 = WaterMarkUtil.addWatermark(file,  sj, lat, lng, gimbalYawDegree);
             FJ = fileToByteArray(file1);
         } else {
             file1 = VideoZipUtil.compressVideo(file, 800000, 128000, 1280, 720);
@@ -179,7 +179,7 @@
      * @param fileUrl
      * @return
      */
-    public File downloadFile(String fileUrl) {
+    public static File downloadFile(String fileUrl) {
         File downloadedFile = null;
         try {
             URL url = new URL(fileUrl);
diff --git a/src/main/java/com/dji/sample/territory/utils/WaterMarkUtil.java b/src/main/java/com/dji/sample/territory/utils/WaterMarkUtil.java
index e64559a..834a1d1 100644
--- a/src/main/java/com/dji/sample/territory/utils/WaterMarkUtil.java
+++ b/src/main/java/com/dji/sample/territory/utils/WaterMarkUtil.java
@@ -1,5 +1,7 @@
 package com.dji.sample.territory.utils;
 
+import org.springframework.stereotype.Component;
+
 import javax.imageio.ImageIO;
 import java.awt.*;
 import java.awt.geom.AffineTransform;
@@ -10,20 +12,19 @@
 import java.util.Date;
 
 import static com.dji.sample.territory.utils.ImgZipUtil.compressImageAndGetFile;
-
+@Component
 public class WaterMarkUtil {
     /**
      * 将图片加上水印并压缩
      *
      * @param file
-     * @param path
      * @param pssj
      * @param lat
      * @param lng
      * @return 添加水印并压缩后的图片文件。
      * @throws IOException 如果读取或保存图片失败。
      */
-    public static File addWatermark(File file, String path, Long pssj, Double lat, Double lng, Double angles) throws IOException, FontFormatException {
+    public static File addWatermark(File file,  Long pssj, Double lat, Double lng, Double angles) throws IOException, FontFormatException {
 
         String angel=angle(angles);
         Long timestamp = pssj; // 例如:Unix 时间戳(以秒为单位)
@@ -62,7 +63,7 @@
         g2d.setComposite(alphaComposite);
         String extraInfo = String.format("Lon:%.9f Lat:%.6f\n%s 时间:%s", lng, lat,angel,sd);
 
-        File fontFile = new File("src/main/java/com/dji/sample/territory/utils/MiSans-Normal.ttf"); // 替换为你的字体文件路径
+        File fontFile = new File("/tmp/jave/MiSans-Normal.ttf"); // 替换为你的字体文件路径
         Font customFont = Font.createFont(Font.TRUETYPE_FONT, fontFile).deriveFont(36.00F);
         // 注册字体
         GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();

--
Gitblit v1.9.3