From e945a560b26437d610754cea5abfd992cd63fd7b Mon Sep 17 00:00:00 2001
From: rain <167982779@qq.com>
Date: Wed, 21 Aug 2024 13:39:14 +0800
Subject: [PATCH] 媒体文件处理,国土对接证书替换
---
src/main/java/com/dji/sample/territory/service/impl/TbFjServiceImpl.java | 2
src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java | 19 ++++++---
src/main/java/com/dji/sample/droneairport/utils/SM2/Test.java | 4 +-
src/main/java/com/dji/sample/droneairport/service/impl/RegistServiceImpl.java | 24 +++++++----
src/main/java/com/dji/sample/media/service/IFileService.java | 2
src/main/resources/application-dev.yml | 20 +++++-----
src/main/java/com/dji/sample/territory/utils/WaterMarkUtil.java | 2
7 files changed, 42 insertions(+), 31 deletions(-)
diff --git a/src/main/java/com/dji/sample/droneairport/service/impl/RegistServiceImpl.java b/src/main/java/com/dji/sample/droneairport/service/impl/RegistServiceImpl.java
index 91959c0..6b69cde 100644
--- a/src/main/java/com/dji/sample/droneairport/service/impl/RegistServiceImpl.java
+++ b/src/main/java/com/dji/sample/droneairport/service/impl/RegistServiceImpl.java
@@ -88,7 +88,7 @@
String secret = SM4Util.generateSM4Key();
String jsonBody = buildRequestBody(registDto);
String base64 = SM4Util.encrypt(secret, jsonBody);
- String keys=Utils.encrypt(secret,"04225AACF606D800EA3C2C31FCF8FB161B15F7A8D0460DEB91013D4F228C455E76A2ED8D71BC6525B5DC5CC015C155479D8839950344AEE438A3A6305C90F8269F");
+ String keys=Utils.encrypt(secret,"04CF7CAE31B5130D1D5D1AC1DC2778D94533868A8D57FC02BBD97B688E07145DAAA96462DC83D9F348261F738D51C049770C43BA53B584917C9E30C6221B737CDD");
String enSM2=Utils.hexToBase64(keys);
// 设置请求头
HttpHeaders headers = new HttpHeaders();
@@ -115,12 +115,14 @@
// 使用 Hutool 的 JSONUtil 解析 JSON 字符串
JSONObject jsonObject = JSONUtil.parseObj(response.getBody());
+
// 提取 data 字段的值
String dataValue = jsonObject.getStr("data");
+
return SM4Util.decrypt(data,dataValue);
} catch (Exception e) {
// 异常处理
- throw new IllegalArgumentException("无人机机场注册失败: " + e.getMessage());
+ return(e.getMessage());
}
}
@@ -149,14 +151,14 @@
DeviceExpanSionEntity drone = expanSionMapper.selectOne(new LambdaQueryWrapper<DeviceExpanSionEntity>()
.eq(DeviceExpanSionEntity::getWorkspaceId, workspaceId)
.eq(DeviceExpanSionEntity::getType, 1));
+ registPort(airport);
AddDeviceDto dto = deviceEntityToDto(drone);
String secret = SM4Util.generateSM4Key();
// 构建请求体
String jsonBody = buildRequestBody(dto);
String base64 = SM4Util.encrypt(secret, jsonBody);
- String keys=Utils.encrypt(secret,"04225AACF606D800EA3C2C31FCF8FB161B15F7A8D0460DEB91013D4F228C455E76A2ED8D71BC6525B5DC5CC015C155479D8839950344AEE438A3A6305C90F8269F");
+ String keys=Utils.encrypt(secret,"04CF7CAE31B5130D1D5D1AC1DC2778D94533868A8D57FC02BBD97B688E07145DAAA96462DC83D9F348261F738D51C049770C43BA53B584917C9E30C6221B737CDD");
String enSM2=Utils.hexToBase64(keys);
-// registPort(airport);
// 设置请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
@@ -176,9 +178,7 @@
String.class);
HttpHeaders responseHeaders = response.getHeaders();
String responseSecret = responseHeaders.getFirst("x-lc-secret");
-
String data=deSM2(responseSecret, "00D631FD5615416EAB63D33A9E66E801F95DE840567504210080006081DE877AE3");
-
// 使用 Hutool 的 JSONUtil 解析 JSON 字符串
JSONObject jsonObject = JSONUtil.parseObj(response.getBody());
// 提取 data 字段的值
@@ -186,14 +186,14 @@
return SM4Util.decrypt(data,dataValue);
} catch (Exception e) {
// 异常处理
- return ("无人机机场设备注册失败: " + e.getMessage());
+ return (e.getMessage());
}
}
@Override
public Map<String, String> getDroneState(String deviceId) throws Exception {
String key = SM4Util.generateSM4Key();
- String secret = Utils.encrypt(key, "04225AACF606D800EA3C2C31FCF8FB161B15F7A8D0460DEB91013D4F228C455E76A2ED8D71BC6525B5DC5CC015C155479D8839950344AEE438A3A6305C90F8269F");
+ String secret = Utils.encrypt(key, "04CF7CAE31B5130D1D5D1AC1DC2778D94533868A8D57FC02BBD97B688E07145DAAA96462DC83D9F348261F738D51C049770C43BA53B584917C9E30C6221B737CDD");
DroneStateDto data = getAirportFromCache(deviceId);
String json = JSON.toJSONString(data);
String SM4Screct = SM4Util.encrypt(key, json);
@@ -268,15 +268,20 @@
@Override
public Map<String, String> AddTask(String base64, String Secret, String username) throws Exception {
ReturnTaskParam param = new ReturnTaskParam();
+ //获取SM4密钥
String secret = SM4Util.generateSM4Key();
+ //对SM4密钥进行SM2加密
String retse = Utils.encrypt(secret, "04225AACF606D800EA3C2C31FCF8FB161B15F7A8D0460DEB91013D4F228C455E76A2ED8D71BC6525B5DC5CC015C155479D8839950344AEE438A3A6305C90F8269F");
String taskId = UUID.randomUUID().toString();
String traceid = UUID.randomUUID().toString();
+ //通过SM2私钥解密请求头里的secret获取SM4密钥
String sm4Secrect = deSM2(Secret, "00D631FD5615416EAB63D33A9E66E801F95DE840567504210080006081DE877AE3");
+ //使用从请求头里获取的SM4密钥解析请求参数
String decryptedJson = SM4Util.decrypt(sm4Secrect, base64);
JSONObject jsonObject = new JSONObject(decryptedJson);
AddTaskDto addTaskDto = jsonToDto(jsonObject);
TaskInfo taskInfo = new TaskInfo();
+ //获取设备Id
List<String> listx = convertStringToList(addTaskDto.getDeviceid());
taskInfo.setId(traceid);
taskInfo.setTaskId(taskId);
@@ -292,6 +297,7 @@
for (TaskListDto taskListDto : tasklist) {
LotInfo lotInfo = convertToLotInfo(taskListDto);
lotInfo.setTaskId(taskId);
+ //
lotInfo.setType(1);
lotInfo.setTaskName(addTaskDto.getBizidname());
lotInfo.setUserName(username);
@@ -472,7 +478,7 @@
String secret = SM4Util.generateSM4Key();
String traceId = UUID.randomUUID().toString();
Map<String,String> info =new HashMap<>();
- String retse = Utils.encrypt(secret, "04225AACF606D800EA3C2C31FCF8FB161B15F7A8D0460DEB91013D4F228C455E76A2ED8D71BC6525B5DC5CC015C155479D8839950344AEE438A3A6305C90F8269F");
+ String retse = Utils.encrypt(secret, "04CF7CAE31B5130D1D5D1AC1DC2778D94533868A8D57FC02BBD97B688E07145DAAA96462DC83D9F348261F738D51C049770C43BA53B584917C9E30C6221B737CDD");
if (entity != null) {
DbUploadDto dto = DbEntityToDto(entity);
String data=buildRequestBody(dto);
diff --git a/src/main/java/com/dji/sample/droneairport/utils/SM2/Test.java b/src/main/java/com/dji/sample/droneairport/utils/SM2/Test.java
index 7290718..cf5b4c7 100644
--- a/src/main/java/com/dji/sample/droneairport/utils/SM2/Test.java
+++ b/src/main/java/com/dji/sample/droneairport/utils/SM2/Test.java
@@ -9,10 +9,10 @@
System.out.println("秘钥对:" + createKeyPair);
String privateKey = createKeyPair.get(KeyConstant.PRIVATE_KEY);
String publicKey = createKeyPair.get(KeyConstant.PUBLIC_KEY);
- String text = "2bc304ccba171672";
+ String text = "5e7e49d94182bf4f";
String encrypt = Utils.encrypt(text, "04225AACF606D800EA3C2C31FCF8FB161B15F7A8D0460DEB91013D4F228C455E76A2ED8D71BC6525B5DC5CC015C155479D8839950344AEE438A3A6305C90F8269F",ModeTypeEnum.BASE_MODE.getType());
System.out.println("加密后密文:" + Utils.hexToBase64(encrypt));
- String decrypt = Utils.decrypt(text, "00D631FD5615416EAB63D33A9E66E801F95DE840567504210080006081DE877AE3",ModeTypeEnum.BASE_MODE.getType());
+ String decrypt = Utils.decrypt(encrypt, "00D631FD5615416EAB63D33A9E66E801F95DE840567504210080006081DE877AE3",ModeTypeEnum.BASE_MODE.getType());
// System.out.println("解密后明文:" + decrypt);
}
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 3012b38..6d59f9f 100644
--- a/src/main/java/com/dji/sample/media/service/IFileService.java
+++ b/src/main/java/com/dji/sample/media/service/IFileService.java
@@ -62,7 +62,7 @@
*/
List<MediaFileDTO> getAllFilesByWorkspaceId(String workspaceId);
- void saveMarkFile(String workspaceId, FileUploadDTO files, File file1);
+ void saveMarkFile(String workspaceId, FileUploadDTO files, File file1,String dkbh);
PaginationData<MediaFileEntity> mediaQuery(Integer page, Integer pageSize, Long updateStart, Long updateEnd, Long photoStart, Long photoEnd, String jobName,String worksapceId,String isVedio,String jobId);
PaginationData<MediaFileNailEntity> mediaNailQuery(Integer page, Integer pageSize, Long updateStart, Long updateEnd, Long photoStart, Long photoEnd, String jobName, String workspaceId, String type);
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 b269878..6cf4a3d 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
@@ -120,7 +120,7 @@
return Optional.ofNullable(fileEntity);
}
- public void saveMarkFile(String workspaceId, FileUploadDTO files, File file1) {
+ public void saveMarkFile(String workspaceId, FileUploadDTO files, File file1,String dkbh) {
try {
MediaFileMarkEntity file=fileUploadConvertToMarkEntity(files);
MediaFileMarkEntity mediaFileMarkEntity = new MediaFileMarkEntity();
@@ -131,7 +131,11 @@
mediaFileMarkEntity.setObjectKey("/mark" + file.getFilePath() + "/" + file.getFileName());
mediaFileMarkEntity.setFileName("mark" + file.getFileName());
mediaFileMarkEntity.setFilePath("mark" + file.getFilePath());
-// uploadFile("http://139.196.74.78:9000", "sxkj", "sxkj2024", "cloud-bucket", mediaFileMarkEntity.getObjectKey(), nailFile, "image/jpeg");
+ long timestamp = convertToTimestamp(files.getMetadata().getCreatedTime());
+ int type=getLotInfo(dkbh);
+ File markFile = new File(WaterMarkUtil.addWatermark(file1, timestamp, files.getMetadata().getShootPosition().getLat(),
+ files.getMetadata().getShootPosition().getLng(), files.getMetadata().getGimbalYawDegree(),type).toURI());
+ uploadFile("http://139.196.74.78:9000", "sxkj", "sxkj2024", "cloud-bucket", mediaFileMarkEntity.getObjectKey(), markFile, "image/jpeg");
markMapper.insert(mediaFileMarkEntity);
} catch (Exception e) {
e.printStackTrace();
@@ -159,13 +163,10 @@
updateStatue(file.getName());
saveFiles(workspaceId, file, downloadedFile);
if (isPlane==1){
- saveMarkFile(workspaceId, file, downloadedFile);
+ fileEntity.setDkbh(getDkbh(fileEntity.getFileName()));
+ saveMarkFile(workspaceId, file, downloadedFile, fileEntity.getDkbh());
}
}
- if (fileEntity.getFileName().endsWith("~")) {
- fileEntity.setDkbh(getDkbh(fileEntity.getFileName()));
- }
- waylineJobService.getName(fileEntity.getJobId());
return mapper.insert(fileEntity);
}
@@ -698,6 +699,10 @@
.eq(MediaFileEntity::getJobId, jobId));
}
+ public int getLotInfo(String dkbh){
+ LotInfo lotInfo=patchesMapper.selectOne(new LambdaQueryWrapper<LotInfo>().eq(LotInfo::getDkbh, dkbh));
+ return lotInfo.getType();
+ }
public int checkWaylineType(String jobId) {
WaylineJobEntity jobEntity = jobMapper.selectOne(new LambdaQueryWrapper<WaylineJobEntity>().eq(WaylineJobEntity::getJobId, jobId));
WaylineFileEntity fileEntity=fileMapper.selectOne(new LambdaQueryWrapper<WaylineFileEntity>().eq(WaylineFileEntity::getWaylineId, jobEntity.getFileId()));
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 e4c774b..ea0fff8 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
@@ -143,7 +143,7 @@
//对应图片和视频文件进行不同处理
boolean endsWith = key.endsWith(".mp4");
if (!endsWith) {
- file1 = waterMarkUtil.addWatermark(file, sj, lat, lng, gimbalYawDegree,lotInfo.getType());
+ file1 = WaterMarkUtil.addWatermark(file, sj, lat, lng, gimbalYawDegree,lotInfo.getType());
byte[] bytesArray = Files.readAllBytes(file1.toPath());
fjhxz= sm3(bytesArray);
FJ = fileToByteArray(file1);
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 d658674..a0e8be7 100644
--- a/src/main/java/com/dji/sample/territory/utils/WaterMarkUtil.java
+++ b/src/main/java/com/dji/sample/territory/utils/WaterMarkUtil.java
@@ -26,7 +26,7 @@
* @return 添加水印并压缩后的图片文件。
* @throws IOException 如果读取或保存图片失败。
*/
- public File addWatermark(File file, Long pssj, Double lat, Double lng, Double angles, int type) throws IOException, FontFormatException {
+ public static File addWatermark(File file, Long pssj, Double lat, Double lng, Double angles, int type) throws IOException, FontFormatException {
double anglses = convertAngle(angles);
String angel = angle(anglses);
Long timestamp = pssj; // 例如:Unix 时间戳(以秒为单位)
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index c413807..5ac1b7c 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -12,7 +12,7 @@
# url: jdbc:mysql://182.108.40.114:3308/drone_zt_test?useSSL=false&allowPublicKeyRetrieval=true
# username: root
# password: yshb@123
- url: jdbc:mysql://139.196.74.78:3306/drone_o_test?useSSL=false&allowPublicKeyRetrieval=true
+ url: jdbc:mysql://139.196.74.78:3306/drone_test?useSSL=false&allowPublicKeyRetrieval=true
username: root
password: jxpskj_2018
sqlite-resource:
@@ -62,10 +62,10 @@
# BASIC parameters are required.
BASIC:
protocol: MQTT # @see com.dji.sample.component.mqtt.model.MqttProtocolEnum
- host: 182.108.40.114
- port: 31883
- username: root
- password: root
+ host: 139.196.74.78
+ port: 1883
+ username: manage
+ password: 123456
# host: 127.0.0.1
# port: 1883
# username: guest
@@ -75,12 +75,12 @@
path:
# 最初连接到mqtt时需要订阅的主题 多个订阅用 "," .
# inbound-topic: sys/product/+/status,thing/product/+/requests,thing/product/+/osd
- inbound-topic: sys/product/+/+,thing/product/+/+
+ inbound-topic: sys/product/+/status,thing/product/+/requests,thing/product/+/osd
DRC:
- protocol: ws # @see com.dji.sample.component.mqtt.model.MqttProtocolEnum
- host: 182.108.40.114
- port: 35675
- path: /ws
+ protocol: WS # @see com.dji.sample.component.mqtt.model.MqttProtocolEnum
+ host: 139.196.74.78
+ port: 8083
+ path: /mqtt
oss:
enable: true
--
Gitblit v1.9.3