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进行下载 // // //对图片进行水印 // // //将带有水印的图片存入本地 // // //将链接返回 // } } 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()); } /** 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 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 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(); } } } 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) { 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存储发送出现异常"); 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; } 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()); } 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); 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();