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/wayline/controller/WaylineFileController.java | 55 +++--
src/main/java/com/dji/sample/patches/config/pojo/PatchesConfigPojo.java | 1
src/main/java/com/dji/sample/media/model/MediaFileNailEntity.java | 64 +++++++
src/main/java/com/dji/sample/speak/dao/SpeakVoiceMapper.java | 10 +
src/main/java/com/dji/sample/media/dao/INailMapper.java | 9 +
src/main/java/com/dji/sample/speak/service/serviceImpl/SpeakVoiceServiceImpl.java | 91 ++++++++-
src/main/java/com/dji/sample/territory/utils/ImgZipUtil.java | 55 +++--
src/main/java/com/dji/sample/component/oss/service/IOssService.java | 6
src/main/java/com/dji/sample/speak/service/SpeakVoiceService.java | 13 +
src/main/java/com/dji/sample/speak/model/dto/SpeakStopDto.java | 12 +
src/main/java/com/dji/sample/speak/model/dto/PsdkModelDto.java | 2
src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java | 110 ++++++++---
src/main/java/com/dji/sample/component/oss/service/impl/AliyunOssServiceImpl.java | 5
src/main/java/com/dji/sample/media/service/impl/MediaServiceImpl.java | 3
src/main/java/com/dji/sample/component/oss/service/impl/AmazonS3ServiceImpl.java | 6
src/main/java/com/dji/sample/wayline/service/impl/WaylineFileServiceImpl.java | 12
src/main/java/com/dji/sample/component/oss/service/impl/OssServiceContext.java | 5
src/main/java/com/dji/sample/speak/model/entity/SpeakVoiceEntity.java | 28 +++
src/main/java/com/dji/sample/component/oss/service/impl/MinIOServiceImpl.java | 6
src/main/java/com/dji/sample/patches/utils/TimerUtil.java | 2
src/main/java/com/dji/sample/speak/controller/SpeakVoiceController.java | 22 ++
src/main/java/com/dji/sample/territory/utils/WaterMarkUtil.java | 4
src/main/java/com/dji/sample/speak/model/dto/SpeakRestartDto.java | 12 +
src/main/java/com/dji/sample/wayline/service/IWaylineFileService.java | 2
24 files changed, 417 insertions(+), 118 deletions(-)
diff --git a/src/main/java/com/dji/sample/component/oss/service/IOssService.java b/src/main/java/com/dji/sample/component/oss/service/IOssService.java
index 5d8e415..9dfe2ba 100644
--- a/src/main/java/com/dji/sample/component/oss/service/IOssService.java
+++ b/src/main/java/com/dji/sample/component/oss/service/IOssService.java
@@ -16,12 +16,14 @@
/**
* Get temporary credentials.
+ *
* @return
*/
CredentialsDTO getCredentials();
/**
* Get the address of the object based on the bucket name and the object name.
+ *
* @param bucket bucket name
* @param objectKey object name
* @return download link
@@ -30,6 +32,7 @@
/**
* Deletes the object in the storage bucket.
+ *
* @param bucket
* @param objectKey
* @return
@@ -38,13 +41,14 @@
/**
* Get the contents of an object.
+ *
* @param bucket
* @param objectKey
* @return
*/
InputStream getObject(String bucket, String objectKey);
- void putObject(String bucket, String objectKey, InputStream input);
+ String putObject(String bucket, String objectKey, InputStream input);
void createClient();
}
diff --git a/src/main/java/com/dji/sample/component/oss/service/impl/AliyunOssServiceImpl.java b/src/main/java/com/dji/sample/component/oss/service/impl/AliyunOssServiceImpl.java
index bfd64de..38de5a1 100644
--- a/src/main/java/com/dji/sample/component/oss/service/impl/AliyunOssServiceImpl.java
+++ b/src/main/java/com/dji/sample/component/oss/service/impl/AliyunOssServiceImpl.java
@@ -90,12 +90,13 @@
}
@Override
- public void putObject(String bucket, String objectKey, InputStream input) {
+ public String putObject(String bucket, String objectKey, InputStream input) {
if (ossClient.doesObjectExist(bucket, objectKey)) {
- throw new RuntimeException("文件已存在");
+ return "该文件名已存在,请更改文件名后再上传";
}
PutObjectResult objectResult = ossClient.putObject(new PutObjectRequest(bucket, objectKey, input, new ObjectMetadata()));
log.info("Upload File: {}", objectResult.getETag());
+ return null;
}
public void createClient() {
diff --git a/src/main/java/com/dji/sample/component/oss/service/impl/AmazonS3ServiceImpl.java b/src/main/java/com/dji/sample/component/oss/service/impl/AmazonS3ServiceImpl.java
index 1e4c4b8..823b4e8 100644
--- a/src/main/java/com/dji/sample/component/oss/service/impl/AmazonS3ServiceImpl.java
+++ b/src/main/java/com/dji/sample/component/oss/service/impl/AmazonS3ServiceImpl.java
@@ -11,6 +11,7 @@
import com.amazonaws.services.securitytoken.model.AssumeRoleRequest;
import com.amazonaws.services.securitytoken.model.AssumeRoleResult;
import com.amazonaws.services.securitytoken.model.Credentials;
+import com.dji.sample.common.model.ResponseResult;
import com.dji.sample.component.AuthInterceptor;
import com.dji.sample.component.oss.model.OssConfiguration;
import com.dji.sample.component.oss.model.enums.OssTypeEnum;
@@ -79,12 +80,13 @@
}
@Override
- public void putObject(String bucket, String objectKey, InputStream input) {
+ public String putObject(String bucket, String objectKey, InputStream input) {
if (client.doesObjectExist(bucket, objectKey)) {
- throw new RuntimeException("文件名已存在");
+ return "文件名重复";
}
PutObjectResult objectResult = client.putObject(new PutObjectRequest(bucket, objectKey, input, new ObjectMetadata()));
log.info("Upload File: {}", objectResult.toString());
+ return null;
}
public void createClient() {
diff --git a/src/main/java/com/dji/sample/component/oss/service/impl/MinIOServiceImpl.java b/src/main/java/com/dji/sample/component/oss/service/impl/MinIOServiceImpl.java
index 21024c8..d54368e 100644
--- a/src/main/java/com/dji/sample/component/oss/service/impl/MinIOServiceImpl.java
+++ b/src/main/java/com/dji/sample/component/oss/service/impl/MinIOServiceImpl.java
@@ -1,5 +1,6 @@
package com.dji.sample.component.oss.service.impl;
+import com.dji.sample.common.model.ResponseResult;
import com.dji.sample.component.oss.model.OssConfiguration;
import com.dji.sample.component.oss.model.enums.OssTypeEnum;
import com.dji.sample.component.oss.service.IOssService;
@@ -91,10 +92,10 @@
}
@Override
- public void putObject(String bucket, String objectKey, InputStream input) {
+ public String putObject(String bucket, String objectKey, InputStream input) {
try {
client.statObject(StatObjectArgs.builder().bucket(bucket).object(objectKey).build());
- throw new RuntimeException("文件名已存在");
+ return "航线名重复";
} catch (MinioException | InvalidKeyException | IOException | NoSuchAlgorithmException e) {
log.info("文件不存在,开始上传。");
try {
@@ -106,6 +107,7 @@
ex.printStackTrace();
}
}
+ return null;
}
public void createClient() {
diff --git a/src/main/java/com/dji/sample/component/oss/service/impl/OssServiceContext.java b/src/main/java/com/dji/sample/component/oss/service/impl/OssServiceContext.java
index 28333ca..d913471 100644
--- a/src/main/java/com/dji/sample/component/oss/service/impl/OssServiceContext.java
+++ b/src/main/java/com/dji/sample/component/oss/service/impl/OssServiceContext.java
@@ -1,5 +1,6 @@
package com.dji.sample.component.oss.service.impl;
+import com.dji.sample.common.model.ResponseResult;
import com.dji.sample.component.oss.model.OssConfiguration;
import com.dji.sample.component.oss.model.enums.OssTypeEnum;
import com.dji.sample.component.oss.service.IOssService;
@@ -58,8 +59,8 @@
return this.ossService.getObject(bucket, objectKey);
}
- public void putObject(String bucket, String objectKey, InputStream stream) {
- this.ossService.putObject(bucket, objectKey, stream);
+ public String putObject(String bucket, String objectKey, InputStream stream) {
+ return this.ossService.putObject(bucket, objectKey, stream);
}
void createClient() {
diff --git a/src/main/java/com/dji/sample/media/dao/INailMapper.java b/src/main/java/com/dji/sample/media/dao/INailMapper.java
new file mode 100644
index 0000000..2d48eb5
--- /dev/null
+++ b/src/main/java/com/dji/sample/media/dao/INailMapper.java
@@ -0,0 +1,9 @@
+package com.dji.sample.media.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dji.sample.media.model.MediaFileNailEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface INailMapper extends BaseMapper<MediaFileNailEntity> {
+}
diff --git a/src/main/java/com/dji/sample/media/model/MediaFileNailEntity.java b/src/main/java/com/dji/sample/media/model/MediaFileNailEntity.java
new file mode 100644
index 0000000..983059b
--- /dev/null
+++ b/src/main/java/com/dji/sample/media/model/MediaFileNailEntity.java
@@ -0,0 +1,64 @@
+package com.dji.sample.media.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@TableName(value = "media_file_nail", autoResultMap = true)
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class MediaFileNailEntity {
+ @TableId(type = IdType.AUTO)
+ private Integer id;
+
+ @TableField("file_id")
+ private String fileId;
+
+ @TableField("file_name")
+ private String fileName;
+
+ @TableField("file_path")
+ private String filePath;
+
+ @TableField("workspace_id")
+ private String workspaceId;
+
+ @TableField("fingerprint")
+ private String fingerprint;
+
+ @TableField("tinny_fingerprint")
+ private String tinnyFingerprint;
+
+ @TableField("object_key")
+ private String objectKey;
+
+ @TableField("sub_file_type")
+ private Integer subFileType;
+
+ @TableField("is_original")
+ private Boolean isOriginal;
+
+ @TableField("payload")
+ private String payload;
+
+ @TableField("job_id")
+ private String jobId;
+
+ @TableField(value = "create_time", fill = FieldFill.INSERT)
+ private Long createTime;
+
+ @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+ private Long updateTime;
+
+ @TableField("collect_status")
+ private Boolean collectStatus;
+
+ @TableField("user_id")
+ private String userId;
+
+}
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()
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 07846f4..cf44939 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
@@ -226,12 +226,13 @@
// set path
String objectKey = callback.getFile().getObjectKey();
callback.getFile().setPath(objectKey.substring(objectKey.indexOf("/") + 1, objectKey.lastIndexOf("/")));
+ int count =fileService.saveFile(job.getWorkspaceId(), callback.getFile());
try {
fileService.saveMarkFile(job.getWorkspaceId(), callback.getFile());
} catch (Exception e) {
throw new RuntimeException(e);
}
- return fileService.saveFile(job.getWorkspaceId(), callback.getFile()) > 0;
+ return count > 0;
}
/**
diff --git a/src/main/java/com/dji/sample/patches/config/pojo/PatchesConfigPojo.java b/src/main/java/com/dji/sample/patches/config/pojo/PatchesConfigPojo.java
index be6f4de..e54b51f 100644
--- a/src/main/java/com/dji/sample/patches/config/pojo/PatchesConfigPojo.java
+++ b/src/main/java/com/dji/sample/patches/config/pojo/PatchesConfigPojo.java
@@ -23,7 +23,6 @@
private String destKMZFile;
@Value("${patches.url.path.kmz.sourceDir}")
private String sourceDir;
-
@Value("${patches.xml.temple.template}")
private String template;
@Value("${patches.xml.temple.waylines}")
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 7ed512d..afa660b 100644
--- a/src/main/java/com/dji/sample/patches/utils/TimerUtil.java
+++ b/src/main/java/com/dji/sample/patches/utils/TimerUtil.java
@@ -152,7 +152,7 @@
List<Long> lists1 = new ArrayList<>();
lists1.add(time);
String times = convertTimestampToFormattedString(time);
- sendPostWithParameters("别墅巡查一段", "c1b9c70e-2e58-4147-b43e-aa4f639726bb", times, lists1, listOfLists);
+ sendPostWithParameters("别墅巡查一段", "2a44748a-1500-406f-80cf-ad92186fe8d2", times, lists1, listOfLists);
}
@Scheduled(cron = "0 50 0 * * ?")
diff --git a/src/main/java/com/dji/sample/speak/controller/SpeakVoiceController.java b/src/main/java/com/dji/sample/speak/controller/SpeakVoiceController.java
index 5b00357..69e88b8 100644
--- a/src/main/java/com/dji/sample/speak/controller/SpeakVoiceController.java
+++ b/src/main/java/com/dji/sample/speak/controller/SpeakVoiceController.java
@@ -2,6 +2,7 @@
import com.dji.sample.common.model.ResponseResult;
import com.dji.sample.component.mqtt.service.IMessageSenderService;
+import com.dji.sample.patches.config.pojo.PatchesConfigPojo;
import com.dji.sample.patches.utils.MultipartFileTOFileUtil;
import com.dji.sample.speak.model.dto.PsdkModelDto;
import com.dji.sample.speak.model.dto.SpeakVoiceStartDto;
@@ -13,21 +14,25 @@
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
+import javax.sound.sampled.UnsupportedAudioFileException;
import java.io.File;
+import java.io.IOException;
@RestController
@RequestMapping("${url.speak.prefix}${url.speak.version}")
public class SpeakVoiceController {
@Autowired
private SpeakVoiceService voiceServicel;
-
+ @Autowired
+ private PatchesConfigPojo patchesConfigPojo;
@PostMapping("/startVoice")
public ResponseResult takeVoice(@RequestParam String sn,
@RequestParam int psdk_index,
@RequestParam String name,
- @RequestParam MultipartFile file) {
- File file1=MultipartFileTOFileUtil.multipartFile2File(file,"src/main/resources/tmp/20240614");
- return ResponseResult.success(voiceServicel.takeVoice(sn, psdk_index,name,file1));
+ @RequestParam Integer volumn,
+ @RequestParam MultipartFile file) throws UnsupportedAudioFileException, IOException {
+ File file1=MultipartFileTOFileUtil.multipartFile2File(file,patchesConfigPojo.getUnzip());
+ return ResponseResult.success(voiceServicel.takeVoice(sn, psdk_index,name,file1,volumn));
}
@PostMapping("/stopVoice")
@@ -49,4 +54,13 @@
public ResponseResult restartVoice(@RequestParam int psdkIndex, @RequestParam String sn) {
return ResponseResult.success(voiceServicel.restartVoice(sn, psdkIndex));
}
+ @PostMapping("/putVoice")
+ public ResponseResult putVoice (int id){
+ return ResponseResult.success(voiceServicel.awayRiver(id));
+ }
+ @GetMapping("/selectVoice")
+ public ResponseResult getVoices(@RequestParam Integer page,@RequestParam Integer page_size ){
+ return ResponseResult.success(voiceServicel.getVoices(page,page_size));
+ }
+
}
diff --git a/src/main/java/com/dji/sample/speak/dao/SpeakVoiceMapper.java b/src/main/java/com/dji/sample/speak/dao/SpeakVoiceMapper.java
new file mode 100644
index 0000000..ee14982
--- /dev/null
+++ b/src/main/java/com/dji/sample/speak/dao/SpeakVoiceMapper.java
@@ -0,0 +1,10 @@
+package com.dji.sample.speak.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dji.sample.speak.model.entity.SpeakVoiceEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SpeakVoiceMapper extends BaseMapper<SpeakVoiceEntity> {
+
+}
diff --git a/src/main/java/com/dji/sample/speak/model/dto/PsdkModelDto.java b/src/main/java/com/dji/sample/speak/model/dto/PsdkModelDto.java
index 6f71886..4194a87 100644
--- a/src/main/java/com/dji/sample/speak/model/dto/PsdkModelDto.java
+++ b/src/main/java/com/dji/sample/speak/model/dto/PsdkModelDto.java
@@ -10,5 +10,5 @@
@AllArgsConstructor
public class PsdkModelDto {
private Integer psdk_index;
- private PsdkModelEnum play_mode;
+ private Integer play_mode;
}
diff --git a/src/main/java/com/dji/sample/speak/model/dto/SpeakRestartDto.java b/src/main/java/com/dji/sample/speak/model/dto/SpeakRestartDto.java
new file mode 100644
index 0000000..06e6de9
--- /dev/null
+++ b/src/main/java/com/dji/sample/speak/model/dto/SpeakRestartDto.java
@@ -0,0 +1,12 @@
+package com.dji.sample.speak.model.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class SpeakRestartDto {
+ private Integer psdk_index;
+}
diff --git a/src/main/java/com/dji/sample/speak/model/dto/SpeakStopDto.java b/src/main/java/com/dji/sample/speak/model/dto/SpeakStopDto.java
new file mode 100644
index 0000000..b8e98be
--- /dev/null
+++ b/src/main/java/com/dji/sample/speak/model/dto/SpeakStopDto.java
@@ -0,0 +1,12 @@
+package com.dji.sample.speak.model.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class SpeakStopDto {
+ private Integer psdk_index;
+}
diff --git a/src/main/java/com/dji/sample/speak/model/entity/SpeakVoiceEntity.java b/src/main/java/com/dji/sample/speak/model/entity/SpeakVoiceEntity.java
new file mode 100644
index 0000000..79672e6
--- /dev/null
+++ b/src/main/java/com/dji/sample/speak/model/entity/SpeakVoiceEntity.java
@@ -0,0 +1,28 @@
+package com.dji.sample.speak.model.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@TableName("speak_voice")
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class SpeakVoiceEntity {
+ @TableId(type = IdType.AUTO)
+ private int id;
+ @TableField("name")
+ private String name;
+ @TableField("url")
+ private String url;
+ @TableField("md5")
+ private String md5;
+ @TableField("second")
+ private double second;
+}
diff --git a/src/main/java/com/dji/sample/speak/service/SpeakVoiceService.java b/src/main/java/com/dji/sample/speak/service/SpeakVoiceService.java
index bc935b5..9d96eda 100644
--- a/src/main/java/com/dji/sample/speak/service/SpeakVoiceService.java
+++ b/src/main/java/com/dji/sample/speak/service/SpeakVoiceService.java
@@ -1,15 +1,22 @@
package com.dji.sample.speak.service;
+import com.dji.sample.common.model.PaginationData;
+import com.dji.sample.common.model.ResponseResult;
import com.dji.sample.speak.model.dto.PsdkModelDto;
import com.dji.sample.speak.model.dto.SpeakVoiceStartDto;
import com.dji.sample.speak.model.dto.SpeakVolumeDto;
+import com.dji.sample.speak.model.entity.SpeakVoiceEntity;
import com.dji.sample.speak.model.enums.FormatEnum;
import com.dji.sample.speak.model.param.SpeakVoiceStartParam;
+import org.springframework.stereotype.Service;
+import javax.sound.sampled.UnsupportedAudioFileException;
import java.io.File;
+import java.io.IOException;
+import java.util.List;
public interface SpeakVoiceService {
- int takeVoice(String sn , Integer psdk_index, String name, File file);
+ int takeVoice(String sn , Integer psdk_index, String name, File file,Integer volumn) throws UnsupportedAudioFileException, IOException;
int restartVoice(String sn ,Integer psdk_index);
@@ -18,4 +25,8 @@
int setVoiceMode(String sn,PsdkModelDto dto);
int setVoiceVolume(SpeakVolumeDto dto,String sn);
+
+ int awayRiver (int id);
+
+ PaginationData<SpeakVoiceEntity> getVoices(Integer pages,Integer page_size);
}
diff --git a/src/main/java/com/dji/sample/speak/service/serviceImpl/SpeakVoiceServiceImpl.java b/src/main/java/com/dji/sample/speak/service/serviceImpl/SpeakVoiceServiceImpl.java
index 052bc93..e642faa 100644
--- a/src/main/java/com/dji/sample/speak/service/serviceImpl/SpeakVoiceServiceImpl.java
+++ b/src/main/java/com/dji/sample/speak/service/serviceImpl/SpeakVoiceServiceImpl.java
@@ -1,25 +1,32 @@
package com.dji.sample.speak.service.serviceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dji.sample.common.model.Pagination;
+import com.dji.sample.common.model.PaginationData;
import com.dji.sample.component.mqtt.service.IMessageSenderService;
import com.dji.sample.media.model.MinioPojo;
import com.dji.sample.media.service.impl.FileServiceImpl;
-import com.dji.sample.speak.model.dto.PsdkModelDto;
-import com.dji.sample.speak.model.dto.SpeakVoiceFileDto;
-import com.dji.sample.speak.model.dto.SpeakVoiceStartDto;
-import com.dji.sample.speak.model.dto.SpeakVolumeDto;
+import com.dji.sample.speak.dao.SpeakVoiceMapper;
+import com.dji.sample.speak.model.dto.*;
+import com.dji.sample.speak.model.entity.SpeakVoiceEntity;
import com.dji.sample.speak.model.enums.FormatEnum;
-import com.dji.sample.speak.model.enums.PsdkModelEnum;
import com.dji.sample.speak.model.enums.VoiceEnums;
-import com.dji.sample.speak.model.param.SpeakVoiceStartParam;
import com.dji.sample.speak.service.SpeakVoiceService;
import com.dji.sample.speak.util.MD5Util;
-import lombok.extern.log4j.Log4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import javax.sound.sampled.AudioFormat;
+import javax.sound.sampled.AudioInputStream;
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.UnsupportedAudioFileException;
import java.io.File;
+import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
+import java.util.List;
+import java.util.stream.Collectors;
@Service
@@ -28,39 +35,86 @@
private IMessageSenderService messageSenderService;
@Autowired
private MinioPojo pojo;
+ @Autowired
+ private SpeakVoiceMapper voiceMapper;
@Override
- public int takeVoice( String sn , Integer psdk_index, String name, File file) {
+ public int takeVoice(String sn, Integer psdk_index, String name, File file,Integer volumn) throws UnsupportedAudioFileException, IOException {
+ SpeakVoiceEntity voiceEntity = new SpeakVoiceEntity();
SpeakVoiceStartDto dto = new SpeakVoiceStartDto();
SpeakVoiceFileDto fileDto = new SpeakVoiceFileDto();
+ SpeakVolumeDto volumeDto=new SpeakVolumeDto();
+ volumeDto.setPsdk_index(psdk_index);
+ volumeDto.setPlay_volume(volumn);
String url = upMinio(file, name);
fileDto.setUrl(url);
- fileDto.setMd5(MD5Util.getMD5Checksum(file));
+ String md5 = MD5Util.getMD5Checksum(file);
+ fileDto.setMd5(md5);
fileDto.setFormat(FormatEnum.PCM);
fileDto.setName(name);
dto.setPsdk_index(psdk_index);
dto.setFile(fileDto);
+ double time = getAudioDuration(file);
+ voiceEntity.setMd5(md5);
+ voiceEntity.setSecond(time);
+ voiceEntity.setUrl(url);
+ voiceEntity.setName(name);
+ voiceMapper.insert(voiceEntity);
+ messageSenderService.publishServicesTopic(sn, VoiceEnums.SPEAKER_PLAY_VOLUME_SET.getMethod(), volumeDto);
return messageSenderService.publishServicesTopic(sn, VoiceEnums.SPEAKER_AUDIO_PLAY_START.getMethod(), dto).getResult();
}
@Override
public int restartVoice(String sn, Integer psdk_index) {
- return messageSenderService.publishServicesTopic(sn, VoiceEnums.SPEAKER_REPLAY.getMethod(), psdk_index).getResult();
+ SpeakRestartDto dto=new SpeakRestartDto();
+ dto.setPsdk_index(psdk_index);
+ return messageSenderService.publishServicesTopic(sn, VoiceEnums.SPEAKER_REPLAY.getMethod(), dto).getResult();
}
@Override
public int stopVoice(String sn, Integer psdk_index) {
- return messageSenderService.publishServicesTopic(sn,VoiceEnums.SPEAKER_PLAY_STOP.getMethod(), psdk_index).getResult();
+ SpeakStopDto dto=new SpeakStopDto();
+ dto.setPsdk_index(psdk_index);
+ return messageSenderService.publishServicesTopic(sn, VoiceEnums.SPEAKER_PLAY_STOP.getMethod(), dto).getResult();
}
@Override
- public int setVoiceMode(String sn,PsdkModelDto dto) {
- return messageSenderService.publishServicesTopic(sn,VoiceEnums.SPEAKER_PLAY_MODE_SET.getMethod(), dto).getResult();
+ public int setVoiceMode(String sn, PsdkModelDto dto) {
+ return messageSenderService.publishServicesTopic(sn, VoiceEnums.SPEAKER_PLAY_MODE_SET.getMethod(), dto).getResult();
}
@Override
public int setVoiceVolume(SpeakVolumeDto dto, String sn) {
- return messageSenderService.publishServicesTopic(sn,VoiceEnums.SPEAKER_PLAY_VOLUME_SET.getMethod(), dto).getResult();
+ return messageSenderService.publishServicesTopic(sn, VoiceEnums.SPEAKER_PLAY_VOLUME_SET.getMethod(), dto).getResult();
+ }
+
+ @Override
+ public int awayRiver(int id) {
+ SpeakVoiceEntity voiceEntity=voiceMapper.selectById(id);
+ SpeakVoiceStartDto dto = new SpeakVoiceStartDto();
+ SpeakVoiceFileDto fileDto = new SpeakVoiceFileDto();
+ fileDto.setUrl(voiceEntity.getUrl());
+ fileDto.setMd5(voiceEntity.getMd5());
+ fileDto.setFormat(FormatEnum.PCM);
+ fileDto.setName(voiceEntity.getName());
+ dto.setPsdk_index(2);
+ dto.setFile(fileDto);
+ return messageSenderService.publishServicesTopic("4TADKCM0010016", VoiceEnums.SPEAKER_AUDIO_PLAY_START.getMethod(), dto).getResult();
+ }
+
+ @Override
+ public PaginationData<SpeakVoiceEntity> getVoices(Integer pages,Integer page_size) {
+ // Paging Query
+ Page<SpeakVoiceEntity> page = voiceMapper.selectPage(
+ new Page<>(pages,page_size),
+ new LambdaQueryWrapper<SpeakVoiceEntity>()
+ );
+ // Wrap the results of a paging query into a custom paging object.
+ List<SpeakVoiceEntity> records = page.getRecords()
+ .stream()
+ .collect(Collectors.toList());
+
+ return new PaginationData<>(records, new Pagination(page));
}
public String upMinio(File file, String fileName) {
@@ -78,4 +132,13 @@
// 格式化时间,生成当前时间
return currentTime.format(DateTimeFormatter.ofPattern("MMddHHmm"));
}
+
+ public static double getAudioDuration(File file) throws UnsupportedAudioFileException, IOException {
+ AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
+ AudioFormat format = audioInputStream.getFormat();
+ long audioFileLength = file.length();
+ int frameSize = format.getFrameSize();
+ float frameRate = format.getFrameRate();
+ return Math.round(audioFileLength / (frameSize * frameRate));
+ }
}
diff --git a/src/main/java/com/dji/sample/territory/utils/ImgZipUtil.java b/src/main/java/com/dji/sample/territory/utils/ImgZipUtil.java
index 39a842b..365d195 100644
--- a/src/main/java/com/dji/sample/territory/utils/ImgZipUtil.java
+++ b/src/main/java/com/dji/sample/territory/utils/ImgZipUtil.java
@@ -5,6 +5,7 @@
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import javax.imageio.stream.MemoryCacheImageOutputStream;
+import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.nio.file.Files;
@@ -14,29 +15,43 @@
/**
* 图片压缩
*
- * @param originalImageFile
- * @param compressionQuality 图片压缩质量 0-1
* @return
* @throws IOException
*/
- public static File compressImageAndGetFile(File originalImageFile, float compressionQuality) throws IOException {
- BufferedImage originalImage = ImageIO.read(originalImageFile);
- try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
- ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next();
- try (ImageOutputStream ios = new MemoryCacheImageOutputStream(baos)) {
- writer.setOutput(ios);
- ImageWriteParam param = writer.getDefaultWriteParam();
- param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
- param.setCompressionQuality(compressionQuality);
- writer.write(null, new javax.imageio.IIOImage(originalImage, null, null), param);
- } finally {
- writer.dispose();
- }
- InputStream in = new ByteArrayInputStream(baos.toByteArray());
- File tempFile = File.createTempFile("compressed-", ".jpg");
- tempFile.deleteOnExit();
- Files.copy(in, tempFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
- return tempFile;
+ public static File compressImage(File inputFile, int targetSizeKB) throws IOException {
+ BufferedImage image = ImageIO.read(inputFile);
+
+ // 计算目标图片的尺寸
+ long targetSizeBytes = targetSizeKB * 1024;
+ long originalSizeBytes = getImageSize(image);
+ double compressionRatio = (double) targetSizeBytes / originalSizeBytes;
+ int targetWidth = (int) (image.getWidth() * Math.sqrt(compressionRatio));
+ int targetHeight = (int) (image.getHeight() * Math.sqrt(compressionRatio));
+
+ // 使用ImageIO进行压缩
+ BufferedImage compressedImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);
+ Graphics2D graphics = compressedImage.createGraphics();
+ graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+ graphics.drawImage(image, 0, 0, targetWidth, targetHeight, null);
+ graphics.dispose();
+
+ // 将压缩后的图片写入输出文件
+ File outputFile = new File(inputFile.getParent(), "compressed_" + inputFile.getName());
+ ImageIO.write(compressedImage, "jpeg", outputFile);
+ return outputFile;
+ }
+
+ public static long getImageSize(BufferedImage image) {
+ File tempFile;
+ try {
+ tempFile = File.createTempFile("temp", ".tmp");
+ ImageIO.write(image, "jpg", tempFile);
+ long size = tempFile.length();
+ tempFile.delete();
+ return size;
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ return 0;
}
}
}
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 3d3222e..6a2854d 100644
--- a/src/main/java/com/dji/sample/territory/utils/WaterMarkUtil.java
+++ b/src/main/java/com/dji/sample/territory/utils/WaterMarkUtil.java
@@ -10,9 +10,6 @@
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
-
-import static com.dji.sample.territory.utils.ImgZipUtil.compressImageAndGetFile;
-
@Component
public class WaterMarkUtil {
@@ -65,6 +62,7 @@
g2d.setComposite(alphaComposite);
String extraInfo = String.format("Lon:%.7f Lat:%.7f\n%s %s", lng, lat, angel, sd);
File fontFile = new File("/usr/share/fonts/MiSans-Normal.ttf"); // 替换为你的字体文件路径
+// File fontFile = new File("src/main/resources/MiSans-Normal.ttf"); // 替换为你的字体文件路径
Font customFont = Font.createFont(Font.TRUETYPE_FONT, fontFile).deriveFont(36.00F);
// 注册字体
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
diff --git a/src/main/java/com/dji/sample/wayline/controller/WaylineFileController.java b/src/main/java/com/dji/sample/wayline/controller/WaylineFileController.java
index bb55f48..6fde79d 100644
--- a/src/main/java/com/dji/sample/wayline/controller/WaylineFileController.java
+++ b/src/main/java/com/dji/sample/wayline/controller/WaylineFileController.java
@@ -41,8 +41,9 @@
/**
* 根据查询条件查询航路线文件的基本数据。
* pilot中的查询条件字段是固定的。
- * @param orderBy 排序的字段。在sql语句的末尾拼接。
- * @param favorited 路径线文件是否为收藏夹。
+ *
+ * @param orderBy 排序的字段。在sql语句的末尾拼接。
+ * @param favorited 路径线文件是否为收藏夹。
* @param page
* @param pageSize
* @param templateType
@@ -52,10 +53,10 @@
@GetMapping("/{workspace_id}/waylines")
@SysLogAnnotation(operModul = "航线库", operType = "查询", operDesc = "根据查询条件查询航路线文件的基本数据")
public ResponseResult<PaginationData<WaylineFileDTO>> getWaylinesPagination(@RequestParam(name = "order_by") String orderBy,
- @RequestParam(required = false) boolean favorited, @RequestParam Integer page,
- @RequestParam(name = "page_size", defaultValue = "10") Integer pageSize,
- @RequestParam(name = "template_type", required = false) Integer[] templateType,
- @PathVariable(name = "workspace_id") String workspaceId) {
+ @RequestParam(required = false) boolean favorited, @RequestParam Integer page,
+ @RequestParam(name = "page_size", defaultValue = "10") Integer pageSize,
+ @RequestParam(name = "template_type", required = false) Integer[] templateType,
+ @PathVariable(name = "workspace_id") String workspaceId) {
WaylineQueryParam param = WaylineQueryParam.builder()
.favorited(favorited)
.page(page)
@@ -70,6 +71,7 @@
/**
* 根据wayline文件id查询文件的下载地址;
* 和重定向到此地址直接下载。
+ *
* @param workspaceId
* @param waylineId
* @param response
@@ -77,7 +79,7 @@
@GetMapping("/{workspace_id}/waylines/{wayline_id}/url")
@SysLogAnnotation(operModul = "航线库", operType = "查询", operDesc = "根据wayline文件id查询文件的下载地址1")
public void getFileUrl(@PathVariable(name = "workspace_id") String workspaceId,
- @PathVariable(name = "wayline_id") String waylineId, HttpServletResponse response) {
+ @PathVariable(name = "wayline_id") String waylineId, HttpServletResponse response) {
try {
URL url = waylineFileService.getObjectUrl(workspaceId, waylineId);
@@ -91,7 +93,7 @@
@GetMapping("/{workspace_id}/waylines/{wayline_id}/urlData")
@SysLogAnnotation(operModul = "航线库", operType = "查询", operDesc = "根据wayline文件id查询文件的下载地址2")
public ResponseResult getFileUrlData(@PathVariable(name = "workspace_id") String workspaceId,
- @PathVariable(name = "wayline_id") String waylineId, HttpServletResponse response) {
+ @PathVariable(name = "wayline_id") String waylineId, HttpServletResponse response) {
URL url = null;
try {
@@ -105,6 +107,7 @@
/**
* 当航路线文件被飞行员上传到存储服务器时,
* 通过该接口报告文件的基本信息。
+ *
* @param request
* @param workspaceId
* @param uploadFile
@@ -116,7 +119,7 @@
@PathVariable(name = "workspace_id") String workspaceId,
@RequestBody WaylineFileUploadDTO uploadFile) {
- CustomClaim customClaim = (CustomClaim)request.getAttribute(TOKEN_CLAIM);
+ CustomClaim customClaim = (CustomClaim) request.getAttribute(TOKEN_CLAIM);
WaylineFileDTO metadata = uploadFile.getMetadata();
metadata.setUsername(customClaim.getUsername());
@@ -130,14 +133,15 @@
/**
* 根据路径线文件id收藏路径线文件。
+ *
* @param workspaceId
- * @param ids wayline file id
+ * @param ids wayline file id
* @return
*/
@PostMapping("/{workspace_id}/favorites")
@SysLogAnnotation(operModul = "航线库", operType = "修改", operDesc = "根据路径线文件id收藏路径线文件")
public ResponseResult markFavorite(@PathVariable(name = "workspace_id") String workspaceId,
- @RequestParam(name = "id") List<String> ids) {
+ @RequestParam(name = "id") List<String> ids) {
boolean isMark = waylineFileService.markFavorite(workspaceId, ids, true);
return isMark ? ResponseResult.success() : ResponseResult.error();
@@ -145,14 +149,15 @@
/**
* 根据航路线文件id删除此航路线文件的收藏夹。
+ *
* @param workspaceId
- * @param ids wayline file id
+ * @param ids wayline file id
* @return
*/
@DeleteMapping("/{workspace_id}/favorites")
@SysLogAnnotation(operModul = "航线库", operType = "删除", operDesc = "根据航路线文件id删除此航路线文件的收藏夹")
public ResponseResult unmarkFavorite(@PathVariable(name = "workspace_id") String workspaceId,
- @RequestParam(name = "id") List<String> ids) {
+ @RequestParam(name = "id") List<String> ids) {
boolean isMark = waylineFileService.markFavorite(workspaceId, ids, false);
return isMark ? ResponseResult.success() : ResponseResult.error();
@@ -161,6 +166,7 @@
/**
* 根据航路线名称检查名称是否已经存在,必须保证航路线名称的唯一性。
* 此接口将在上传航路线时被调用,并且必须可用。
+ *
* @param workspaceId
* @param names
* @return
@@ -176,6 +182,7 @@
/**
* 根据航路线id删除工作区中的航路线文件。
+ *
* @param workspaceId
* @param waylineId
* @return
@@ -190,6 +197,7 @@
/**
* 上传kmz航线文件
+ *
* @param file
* @return
*/
@@ -203,27 +211,30 @@
if (Objects.isNull(file)) {
return ResponseResult.error("未上传文件");
}
- CustomClaim customClaim = (CustomClaim)request.getAttribute(TOKEN_CLAIM);
+ CustomClaim customClaim = (CustomClaim) request.getAttribute(TOKEN_CLAIM);
String creator = customClaim.getUsername();
- waylineFileService.importKmzFile(file, workspaceId, creator,patchesId,spotInFreckle);
- return ResponseResult.success();
+ String back = waylineFileService.importKmzFile(file, workspaceId, creator, patchesId, spotInFreckle);
+ if (back != null) {
+ return ResponseResult.error(back);
+ }
+ return ResponseResult.success(back);
}
@GetMapping("/{workspace_id}/waylines_list")
@SysLogAnnotation(operModul = "航线库", operType = "查询", operDesc = "查询当前工作区航线库列表")
- public ResponseResult<List<WaylineListDTO>> waylineList(@PathVariable(name = "workspace_id") String workspaceId,String droneName) {
- return ResponseResult.success(waylineFileService.waylineList(workspaceId,droneName)) ;
+ public ResponseResult<List<WaylineListDTO>> waylineList(@PathVariable(name = "workspace_id") String workspaceId, String droneName) {
+ return ResponseResult.success(waylineFileService.waylineList(workspaceId, droneName));
}
@PutMapping("/{workspace_id}/wayline_update")
- public ResponseResult upWayline(@RequestParam String waylineId,@RequestParam String name){
- WaylineFileEntity entity=WaylineFileEntity
+ public ResponseResult upWayline(@RequestParam String waylineId, @RequestParam String name) {
+ WaylineFileEntity entity = WaylineFileEntity
.builder()
.waylineId(waylineId)
.name(name)
.build();
- if(waylineFileService.updateWayline(entity)==0){
+ if (waylineFileService.updateWayline(entity) == 0) {
return ResponseResult.error("更新失败");
- }else return ResponseResult.success();
+ } else return ResponseResult.success();
}
}
diff --git a/src/main/java/com/dji/sample/wayline/service/IWaylineFileService.java b/src/main/java/com/dji/sample/wayline/service/IWaylineFileService.java
index 109a707..c95ed95 100644
--- a/src/main/java/com/dji/sample/wayline/service/IWaylineFileService.java
+++ b/src/main/java/com/dji/sample/wayline/service/IWaylineFileService.java
@@ -83,7 +83,7 @@
* @param creator
* @return
*/
- void importKmzFile(MultipartFile file, String workspaceId, String creator,String patchesId,String spotInFreckle);
+ String importKmzFile(MultipartFile file, String workspaceId, String creator,String patchesId,String spotInFreckle);
/**
* 创建航线,返回航线对象
diff --git a/src/main/java/com/dji/sample/wayline/service/impl/WaylineFileServiceImpl.java b/src/main/java/com/dji/sample/wayline/service/impl/WaylineFileServiceImpl.java
index 85ab595..52da471 100644
--- a/src/main/java/com/dji/sample/wayline/service/impl/WaylineFileServiceImpl.java
+++ b/src/main/java/com/dji/sample/wayline/service/impl/WaylineFileServiceImpl.java
@@ -192,22 +192,25 @@
}
@Override
- public void importKmzFile(MultipartFile file, String workspaceId, String creator, String patchesId,String spotInFreckle) {
+ public String importKmzFile(MultipartFile file, String workspaceId, String creator, String patchesId, String spotInFreckle) {
Optional<WaylineFileDTO> waylineFileOpt = validKmzFile(file);
if (waylineFileOpt.isEmpty()) {
throw new RuntimeException("文件格式错误");
}
-
+ String back = null;
try {
WaylineFileDTO waylineFile = waylineFileOpt.get();
waylineFile.setWaylineId(workspaceId);
waylineFile.setUsername(creator);
waylineFile.setSpotInFreckle(spotInFreckle);
- ossService.putObject(OssConfiguration.bucket, waylineFile.getObjectKey(), file.getInputStream());
- this.saveWaylineFiles(workspaceId, waylineFile, patchesId);
+ back = ossService.putObject(OssConfiguration.bucket, waylineFile.getObjectKey(), file.getInputStream());
+ if (back==null) {
+ this.saveWaylineFiles(workspaceId, waylineFile, patchesId);
+ }
} catch (IOException e) {
e.printStackTrace();
}
+ return back;
}
@Override
@@ -222,7 +225,6 @@
waylineFile = waylineFileOpt.get();
waylineFile.setWaylineId(workspaceId);
waylineFile.setUsername(creator);
-
ossService.putObject(OssConfiguration.bucket, waylineFile.getObjectKey(), file.getInputStream());
this.saveWaylineFile(workspaceId, waylineFile);
--
Gitblit v1.9.3