From 3430a3dd889ba51d06cbdb77014aa63d0a070e48 Mon Sep 17 00:00:00 2001
From: rain <167982779@qq.com>
Date: Fri, 16 Aug 2024 16:38:08 +0800
Subject: [PATCH] 优化国土对接接口
---
src/main/java/com/dji/sample/droneairport/utils/SM4Util.java | 34 --
src/main/java/com/dji/sample/droneairport/controller/RegistController.java | 21 +
src/main/java/com/dji/sample/territory/service/ITbFJService.java | 2
src/main/java/com/dji/sample/manage/controller/DeviceController.java | 9
src/main/java/com/dji/sample/droneairport/model/Entity/DbUploadEntity.java | 40 +++
src/main/java/com/dji/sample/droneairport/service/RegistService.java | 15 +
src/main/java/com/dji/sample/patches/service/impl/ShpToDataSourceServiceImpl.java | 2
src/main/java/com/dji/sample/territory/service/impl/TbFjServiceImpl.java | 33 --
src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java | 18 +
src/main/java/com/dji/sample/droneairport/service/impl/RegistServiceImpl.java | 264 ++++++++++++++-------
src/main/java/com/dji/sample/droneairport/dao/DbUploadMapper.java | 9
src/main/java/com/dji/sample/media/service/IFileService.java | 2
src/main/java/com/dji/sample/common/model/ResponseResult.java | 7
src/main/java/com/dji/sample/droneairport/model/dto/DbUploadDto.java | 38 +++
src/main/java/com/dji/sample/media/util/ImgUtil.java | 13 +
src/main/java/com/dji/sample/patches/utils/TimerUtil.java | 136 +++++++---
src/main/java/com/dji/sample/droneairport/model/dto/AuthorDto.java | 15 +
src/main/java/com/dji/sample/territory/utils/WaterMarkUtil.java | 12
18 files changed, 474 insertions(+), 196 deletions(-)
diff --git a/src/main/java/com/dji/sample/common/model/ResponseResult.java b/src/main/java/com/dji/sample/common/model/ResponseResult.java
index a9b443b..dca4c19 100644
--- a/src/main/java/com/dji/sample/common/model/ResponseResult.java
+++ b/src/main/java/com/dji/sample/common/model/ResponseResult.java
@@ -56,6 +56,13 @@
.traceid(traceid)
.build();
}
+ public static<T> ResponseResult success(int code, String message,T data) {
+ return ResponseResult.builder()
+ .code(code)
+ .data(data)
+ .message(message)
+ .build();
+ }
public static ResponseResult success(int code, String message,String traceid) {
return ResponseResult.builder()
.code(code)
diff --git a/src/main/java/com/dji/sample/droneairport/controller/RegistController.java b/src/main/java/com/dji/sample/droneairport/controller/RegistController.java
index f969124..f4dbad9 100644
--- a/src/main/java/com/dji/sample/droneairport/controller/RegistController.java
+++ b/src/main/java/com/dji/sample/droneairport/controller/RegistController.java
@@ -29,12 +29,12 @@
// public ResponseResult resgitePort(@RequestBody RegistDto param) {
// return ResponseResult.success(registService.registPort(param));
// }
- @PostMapping("/authorization")
- public ResponseResult checkDeviceOnline(@RequestBody String body, HttpServletRequest request) throws Exception {
- String headerValue = request.getHeader("x-lc-secret");
- return registService.authorization(body, headerValue);
-
- }
+// @PostMapping("/authorization")
+// public ResponseResult checkDeviceOnline(@RequestBody String body, HttpServletRequest request) throws Exception {
+// String headerValue = request.getHeader("x-lc-secret");
+// return registService.authorization(body, headerValue);
+//
+// }
@PostMapping("/addDevice/{workspace_id}")
public ResponseResult registeDrone(@PathVariable(name = "workspace_id") String workspaceId) {
@@ -70,11 +70,14 @@
}
@PostMapping("/queryTaskStatus")
public ResponseResult queryTaskStatus(HttpServletRequest request, @RequestParam String taskid) throws Exception {
- return ResponseResult.success(registService.queryTaskStatus(taskid));
+ return registService.queryTaskStatus(taskid);
}
@GetMapping("/getResult/{taskId}")
public ResponseResult getResult(@PathVariable(name = "taskId") String taskId) {
- return ResponseResult.success(registService.findDbFilesByTaskId(taskId));
+ return ResponseResult.success(200, "无人机成果获取成功!",registService.findDbFilesByTaskId(taskId));
}
-
+ @PostMapping("/test")
+ public ResponseResult test(@RequestBody String param) {
+ return ResponseResult.success(param);
+ }
}
diff --git a/src/main/java/com/dji/sample/droneairport/dao/DbUploadMapper.java b/src/main/java/com/dji/sample/droneairport/dao/DbUploadMapper.java
new file mode 100644
index 0000000..964e953
--- /dev/null
+++ b/src/main/java/com/dji/sample/droneairport/dao/DbUploadMapper.java
@@ -0,0 +1,9 @@
+package com.dji.sample.droneairport.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dji.sample.droneairport.model.Entity.DbUploadEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface DbUploadMapper extends BaseMapper<DbUploadEntity> {
+}
diff --git a/src/main/java/com/dji/sample/droneairport/model/Entity/DbUploadEntity.java b/src/main/java/com/dji/sample/droneairport/model/Entity/DbUploadEntity.java
new file mode 100644
index 0000000..580d267
--- /dev/null
+++ b/src/main/java/com/dji/sample/droneairport/model/Entity/DbUploadEntity.java
@@ -0,0 +1,40 @@
+package com.dji.sample.droneairport.model.Entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName(value = "db_info")
+public class DbUploadEntity {
+
+ @TableField("task_id")
+ private String taskId;
+ @TableField("code")
+ private String regioncode;
+ @TableField("size")
+ private long size;
+ @TableField("count")
+ private int count;
+ @TableField("attachment")
+ private int attachmentCount;
+ @TableField("extension")
+ private String extension;
+ @TableField("hash")
+ private String hash;
+ @TableField(value = "timestamp", fill = FieldFill.INSERT)
+ private Long timestamp;
+ @TableField("url")
+ private String url;
+ @TableField("decrypt")
+ private String decrypt;
+ @TableField("data_sign")
+ private String dataSign;
+}
diff --git a/src/main/java/com/dji/sample/droneairport/model/dto/AuthorDto.java b/src/main/java/com/dji/sample/droneairport/model/dto/AuthorDto.java
new file mode 100644
index 0000000..eac365e
--- /dev/null
+++ b/src/main/java/com/dji/sample/droneairport/model/dto/AuthorDto.java
@@ -0,0 +1,15 @@
+package com.dji.sample.droneairport.model.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class AuthorDto {
+ private String sn;
+ private int status;
+}
diff --git a/src/main/java/com/dji/sample/droneairport/model/dto/DbUploadDto.java b/src/main/java/com/dji/sample/droneairport/model/dto/DbUploadDto.java
new file mode 100644
index 0000000..88293d3
--- /dev/null
+++ b/src/main/java/com/dji/sample/droneairport/model/dto/DbUploadDto.java
@@ -0,0 +1,38 @@
+package com.dji.sample.droneairport.model.dto;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DbUploadDto {
+
+ private String taskId;
+
+ private String regioncode;
+
+ private long size;
+
+ private int count;
+
+ private int attachmentCount;
+
+ private String extension;
+
+ private String hash;
+
+ private Long timestamp;
+
+ private String url;
+
+ private String key;
+
+ private String sign;
+}
diff --git a/src/main/java/com/dji/sample/droneairport/service/RegistService.java b/src/main/java/com/dji/sample/droneairport/service/RegistService.java
index bffd8e0..d25e319 100644
--- a/src/main/java/com/dji/sample/droneairport/service/RegistService.java
+++ b/src/main/java/com/dji/sample/droneairport/service/RegistService.java
@@ -39,8 +39,10 @@
* @return 返回授权结果,包括成功与否、错误信息等
* @throws Exception 如果授权过程中出现错误,可能会抛出异常
*/
- ResponseResult authorization(String base64, String Secret) throws Exception;
+// ResponseResult authorization(String base64, String Secret) throws Exception;
+ void noAuthorization(String sn);
+ void Authorization(String sn);
/**
* 添加任务接口
* 该方法将基础64编码的配置信息、密钥和用户名作为参数,实现任务的添加
@@ -76,10 +78,17 @@
* 查询任务状态
* 此方法用于根据设备ID查询设备任务的状态
*
- * @param deviceId 设备ID,用于标识特定的设备
+ * @param taskid 设备ID,用于标识特定的设备
* @return 返回一个ResponseResult对象,包含查询到的任务状态信息
*/
ResponseResult queryTaskStatus(String taskid);
- List<String> findDbFilesByTaskId(String taskId);
+ /**
+ * 获取无人机拍摄的成果DB包下载地址
+ *
+ * @param taskId 无人机的设备ID,用于唯一标识一台无人机
+ * @return 返回一个包含无人机状态信息的ResponseResult对象
+ * @throws Exception 如果在获取无人机状态过程中发生错误,将抛出异常
+ */
+ String findDbFilesByTaskId(String taskId);
}
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 feb0af2..74d0d85 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
@@ -10,7 +10,9 @@
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.dji.sample.common.model.ResponseResult;
import com.dji.sample.component.redis.RedisOpsUtils;
+import com.dji.sample.droneairport.dao.DbUploadMapper;
import com.dji.sample.droneairport.dao.DeviceExpanSionMapper;
+import com.dji.sample.droneairport.model.Entity.DbUploadEntity;
import com.dji.sample.droneairport.model.Entity.DeviceExpanSionEntity;
import com.dji.sample.droneairport.model.dto.*;
import com.dji.sample.droneairport.model.param.ReturnTaskParam;
@@ -47,11 +49,15 @@
import java.io.File;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
import java.util.*;
import java.util.stream.Collectors;
import static com.dji.sample.droneairport.utils.TaskAllocator.assignTasks;
import static com.dji.sample.patches.utils.TimerUtil.getCurrentTimestampPlus8Hours;
+import static com.dji.sample.patches.utils.TimerUtil.getNextDayEightAMTimestamp;
@Service
public class RegistServiceImpl implements RegistService {
@@ -73,13 +79,13 @@
private IWaylineJobMapper waylineJobMapper;
@Autowired
private IWaylineFileMapper fileMapper;
+ @Autowired
+ private DbUploadMapper dbUploadMapper;
public String registPort(DeviceExpanSionEntity airport) {
try {
RegistDto registDto = airportEntityToDto(airport);
- // 构建请求体
String jsonBody = buildRequestBody(registDto);
- // 设置请求头
String base64 = SM4Util.encrypt("jsimjrby3wqb7dbq", jsonBody);
// 设置请求头
HttpHeaders headers = new HttpHeaders();
@@ -87,13 +93,13 @@
headers.setAccept(List.of(MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN, MediaType.ALL));
headers.set("Accept-Language", "zh-CN,zh;q=0.9");
headers.setConnection("keep-alive");
- headers.set("x-lc-token", AuthUtil.getToken());
- headers.set("x-lc-secret", Utils.hexToBase64(Utils.encrypt("jsimjrby3wqb7dbq", "044D6061FC08A19D3F32CEAA8CF6679B40500008FD741FC26DE7E50AEBF3A9115D47274437730EADEDAEF0CCC4853C5F0B35B30C6AEA83A5F6FBCA4ABEAC9E3B98")));
+ headers.set("x-auth-token", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ3b3Jrc3BhY2VfaWQiOiJlM2RlYTBmNS0zN2YyLTRkNzktYWU1OC00OTBhZjMyMjgwNjkiLCJzdWIiOiJDbG91ZEFwaVNhbXBsZSIsInVzZXJfdHlwZSI6IjEiLCJuYmYiOjE3MjA2NTg3NDMsImxvZyI6IkxvZ2dlcltjb20uZGppLnNhbXBsZS5jb21tb24ubW9kZWwuQ3VzdG9tQ2xhaW1dIiwiaXNzIjoiREpJIiwiaWQiOiI5Y2MwMGY3Zi0yODMwLTRmM2UtYjdmNC1lN2E1ZjIzYjNjNGYiLCJleHAiOjE4MDcwNTg3NDMsImlhdCI6MTcyMDY1ODc0MywidXNlcm5hbWUiOiJhZG1pbkRQIn0.CrRFYUTK357HleqrrfL7nLdwFJw5Bcv3ms33n_Or8eM");
+ headers.set("x-lc-token", "");
// 构建请求实体
HttpEntity<String> requestEntity = new HttpEntity<>(base64, headers);
// 发送请求
ResponseEntity<String> response = restTemplate.exchange(
- "https://xcx.geoway.com.cn:8033/v1/droneAirport/RegistService",
+ "http://localhost:6789/droneAirport/test",
HttpMethod.POST,
requestEntity,
String.class);
@@ -105,11 +111,19 @@
}
}
- private String buildRequestBody(RegistDto dto) {
+// private String buildRequestBody(RegistDto dto) {
+// try {
+// return objectMapper.writeValueAsString(dto);
+// } catch (JsonProcessingException e) {
+// throw new RuntimeException("数据有误", e);
+// }
+// }
+
+ public <T> String buildRequestBody(T obj) {
try {
- return objectMapper.writeValueAsString(dto);
+ return objectMapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
- throw new RuntimeException("数据有误", e);
+ throw new RuntimeException("对象转换为JSON字符串时发生错误", e);
}
}
@@ -126,24 +140,25 @@
// 构建请求体
String jsonBody = buildRequestBody(dto);
String base64 = SM4Util.encrypt("jsimjrby3wqb7dbq", jsonBody);
- String secret = enSM2("jsimjrby3wqb7dbq", "044D6061FC08A19D3F32CEAA8CF6679B40500008FD741FC26DE7E50AEBF3A9115D47274437730EADEDAEF0CCC4853C5F0B35B30C6AEA83A5F6FBCA4ABEAC9E3B98");
// 设置请求头
+
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(List.of(MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN, MediaType.ALL));
headers.set("Accept-Language", "zh-CN,zh;q=0.9");
headers.setConnection("keep-alive");
- headers.set("x-lc-token", AuthUtil.getToken());
- headers.set("x-lc-secret", secret);
-
+ headers.set("x-auth-token", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ3b3Jrc3BhY2VfaWQiOiJlM2RlYTBmNS0zN2YyLTRkNzktYWU1OC00OTBhZjMyMjgwNjkiLCJzdWIiOiJDbG91ZEFwaVNhbXBsZSIsInVzZXJfdHlwZSI6IjEiLCJuYmYiOjE3MjA2NTg3NDMsImxvZyI6IkxvZ2dlcltjb20uZGppLnNhbXBsZS5jb21tb24ubW9kZWwuQ3VzdG9tQ2xhaW1dIiwiaXNzIjoiREpJIiwiaWQiOiI5Y2MwMGY3Zi0yODMwLTRmM2UtYjdmNC1lN2E1ZjIzYjNjNGYiLCJleHAiOjE4MDcwNTg3NDMsImlhdCI6MTcyMDY1ODc0MywidXNlcm5hbWUiOiJhZG1pbkRQIn0.CrRFYUTK357HleqrrfL7nLdwFJw5Bcv3ms33n_Or8eM");
+ headers.set("x-lc-token", "");
// 构建请求实体
HttpEntity<String> requestEntity = new HttpEntity<>(base64, headers);
-
// 发送请求
- RestTemplate restTemplate = new RestTemplate();
- String response = restTemplate.postForObject("https://xcx.geoway.com.cn:8033/v1/droneAirport/addDevice", requestEntity, String.class);
+ ResponseEntity<String> response = restTemplate.exchange(
+ "http://localhost:6789/droneAirport/test",
+ HttpMethod.POST,
+ requestEntity,
+ String.class);
registPort(airport);
- return response;
+ return response.getBody();
} catch (Exception e) {
// 异常处理
@@ -159,17 +174,66 @@
return SM4Screct;
}
+ // @Override
+// public ResponseResult authorization(String base64, String Secret) throws Exception {
+// String sm4Secrect = deSM2(Secret, "23E57DA1E4AB865CCBC325B668762207DEF74345B782237808AE0BABDF26734D");
+// String decryptedJson = SM4Util.decrypt(sm4Secrect, base64);
+// JSONObject jsonObject = new JSONObject(decryptedJson);
+// String deviceId = jsonObject.getStr("deviceid");
+// boolean online = redisService.checkDeviceOnline(deviceId);
+// if (online) {
+// return ResponseResult.success(200, "无人机机场授权成功!", "", "");
+// }
+// return ResponseResult.error(500, "无人机机场授权失败!");
+// }
@Override
- public ResponseResult authorization(String base64, String Secret) throws Exception {
- String sm4Secrect = deSM2(Secret, "23E57DA1E4AB865CCBC325B668762207DEF74345B782237808AE0BABDF26734D");
- String decryptedJson = SM4Util.decrypt(sm4Secrect, base64);
- JSONObject jsonObject = new JSONObject(decryptedJson);
- String deviceId = jsonObject.getStr("deviceid");
- boolean online = redisService.checkDeviceOnline(deviceId);
- if (online) {
- return ResponseResult.success(200, "无人机机场授权成功!", "", "");
- }
- return ResponseResult.error(500, "无人机机场授权失败!");
+ public void noAuthorization(String sn) {
+ AuthorDto dto = new AuthorDto();
+ dto.setSn(sn);
+ dto.setStatus(0);
+ String jsonBody = buildRequestBody(dto);
+ String base64 = SM4Util.encrypt("jsimjrby3wqb7dbq", jsonBody);
+ // 设置请求头
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ headers.setAccept(List.of(MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN, MediaType.ALL));
+ headers.set("Accept-Language", "zh-CN,zh;q=0.9");
+ headers.setConnection("keep-alive");
+ headers.set("x-auth-token", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ3b3Jrc3BhY2VfaWQiOiJlM2RlYTBmNS0zN2YyLTRkNzktYWU1OC00OTBhZjMyMjgwNjkiLCJzdWIiOiJDbG91ZEFwaVNhbXBsZSIsInVzZXJfdHlwZSI6IjEiLCJuYmYiOjE3MjA2NTg3NDMsImxvZyI6IkxvZ2dlcltjb20uZGppLnNhbXBsZS5jb21tb24ubW9kZWwuQ3VzdG9tQ2xhaW1dIiwiaXNzIjoiREpJIiwiaWQiOiI5Y2MwMGY3Zi0yODMwLTRmM2UtYjdmNC1lN2E1ZjIzYjNjNGYiLCJleHAiOjE4MDcwNTg3NDMsImlhdCI6MTcyMDY1ODc0MywidXNlcm5hbWUiOiJhZG1pbkRQIn0.CrRFYUTK357HleqrrfL7nLdwFJw5Bcv3ms33n_Or8eM");
+ headers.set("x-lc-token", "");
+ // 构建请求实体
+ HttpEntity<String> requestEntity = new HttpEntity<>(base64, headers);
+ // 发送请求
+ ResponseEntity<String> response = restTemplate.exchange(
+ "http://localhost:6789/droneAirport/test",
+ HttpMethod.POST,
+ requestEntity,
+ String.class);
+ }
+
+ @Override
+ public void Authorization(String sn) {
+ AuthorDto dto = new AuthorDto();
+ dto.setSn(sn);
+ dto.setStatus(1);
+ String jsonBody = buildRequestBody(dto);
+ String base64 = SM4Util.encrypt("jsimjrby3wqb7dbq", jsonBody);
+ // 设置请求头
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ headers.setAccept(List.of(MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN, MediaType.ALL));
+ headers.set("Accept-Language", "zh-CN,zh;q=0.9");
+ headers.setConnection("keep-alive");
+ headers.set("x-auth-token", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ3b3Jrc3BhY2VfaWQiOiJlM2RlYTBmNS0zN2YyLTRkNzktYWU1OC00OTBhZjMyMjgwNjkiLCJzdWIiOiJDbG91ZEFwaVNhbXBsZSIsInVzZXJfdHlwZSI6IjEiLCJuYmYiOjE3MjA2NTg3NDMsImxvZyI6IkxvZ2dlcltjb20uZGppLnNhbXBsZS5jb21tb24ubW9kZWwuQ3VzdG9tQ2xhaW1dIiwiaXNzIjoiREpJIiwiaWQiOiI5Y2MwMGY3Zi0yODMwLTRmM2UtYjdmNC1lN2E1ZjIzYjNjNGYiLCJleHAiOjE4MDcwNTg3NDMsImlhdCI6MTcyMDY1ODc0MywidXNlcm5hbWUiOiJhZG1pbkRQIn0.CrRFYUTK357HleqrrfL7nLdwFJw5Bcv3ms33n_Or8eM");
+ headers.set("x-lc-token", "");
+ // 构建请求实体
+ HttpEntity<String> requestEntity = new HttpEntity<>(base64, headers);
+ // 发送请求
+ ResponseEntity<String> response = restTemplate.exchange(
+ "http://localhost:6789/droneAirport/test",
+ HttpMethod.POST,
+ requestEntity,
+ String.class);
}
@Override
@@ -197,7 +261,7 @@
for (TaskListDto taskListDto : tasklist) {
LotInfo lotInfo = convertToLotInfo(taskListDto);
lotInfo.setTaskId(taskId);
- lotInfo.setType(0);
+ lotInfo.setType(1);
lotInfo.setTaskName(addTaskDto.getBizidname());
lotInfo.setUserName(username);
lotInfos.add(lotInfo);
@@ -220,7 +284,7 @@
String waylineName = TimerUtil.getTimeName();
MultipartFile multipartFile = timerUtil.getFile(waylineName, lotInfosForAirport, airport.getLat(), airport.getLon());
WaylineFileEntity waylineFile = timerUtil.backWayline(multipartFile, waylineName, airport.getWorkspaceId(), username);
- Long time = getCurrentTimestampPlus8Hours(14);
+ Long time = getNextDayEightAMTimestamp(countDistinctTaskIdsForToday(airport.getWorkspaceId()));
List<List<Long>> listOfLists = new ArrayList<>();
List<Long> sublist = new ArrayList<>();
sublist.add(time);
@@ -228,7 +292,7 @@
List<Long> lists1 = new ArrayList<>();
lists1.add(time);
String times = TimerUtil.convertTimestampToFormattedString(time);
- param.setJobId(taskId);
+ param.setJobId(SM4Util.encrypt("jsimjrby3wqb7dbq", taskId));
timerUtil.sendPostWithParameters(waylineName, waylineFile.getWaylineId(), times, lists1, listOfLists, taskId + "~" + airport.getWorkspaceId(), airport.getDockSn());
timerUtil.updatePatchesStatu(lotInfosForAirport);
}
@@ -267,7 +331,7 @@
for (TaskListDto taskListDto : tasklist) {
LotInfo lotInfo = convertToLotInfo(taskListDto);
lotInfo.setTaskId(taskId);
- lotInfo.setType(0);
+ lotInfo.setType(1);
lotInfo.setTaskName(Bizidname);
lotInfo.setUserName(username);
lotInfos.add(lotInfo);
@@ -292,7 +356,7 @@
WaylineFileEntity waylineFile = timerUtil.backWayline(multipartFile, waylineName, airport.getWorkspaceId(), username);
// 将为规划的图斑状态更新为已规划
- Long time = getCurrentTimestampPlus8Hours(14);
+ Long time = getNextDayEightAMTimestamp(countDistinctTaskIdsForToday(airport.getWorkspaceId()));
List<List<Long>> listOfLists = new ArrayList<>();
List<Long> sublist = new ArrayList<>();
sublist.add(time);
@@ -333,28 +397,28 @@
@Override
public ResponseResult queryTaskStatus(String taskid) {
- WaylineJobEntity jobEntity = waylineJobMapper.selectOne(new LambdaQueryWrapper<WaylineJobEntity>().eq(WaylineJobEntity::getJobId, taskid));
- if (jobEntity == null) {
+ List<WaylineJobEntity> jobEntity = waylineJobMapper.selectList(new LambdaQueryWrapper<WaylineJobEntity>().like(WaylineJobEntity::getJobId, taskid));
+
+ if (jobEntity == null || jobEntity.isEmpty()) {
return ResponseResult.error(201, "查询无人机机场任务状态失败!");
}
- int code = jobEntity.getStatus();
- //1: 待执行; 2: 执行中; 3: 完成; 4: 取消; 5: 失败
- if (code == 1) {
- return ResponseResult.success(200, "查询无人机机场任务状态成功!", "", "");
- } else if (code == 2) {
- return ResponseResult.success(202, "查询无人机机场任务状态成功!", "", "");
- } else if (code == 3) {
- return ResponseResult.success(203, "查询无人机机场任务状态成功!", "", "");
- } else if (code == 4) {
- return ResponseResult.success(204, "查询无人机机场任务状态成功!", "", "");
- } else if (code == 5) {
- return ResponseResult.success(205, "查询无人机机场任务状态成功!", "", "");
+ // 检查是否所有 status 都等于 4
+ boolean allStatusAreFour = jobEntity.stream()
+ .allMatch(job -> job.getStatus() == 4);
+
+ // 检查是否所有 status 都等于 3
+ boolean allStatusAreThree = jobEntity.stream()
+ .allMatch(job -> job.getStatus() == 3);
+
+ if (allStatusAreFour) {
+ return ResponseResult.error(204, "查询无人机机场任务状态成功!");
+ } else if (allStatusAreThree) {
+ return ResponseResult.error(200, "查询无人机机场任务状态成功!");
+ } else {
+ return ResponseResult.error(202, "查询无人机机场任务状态成功!");
}
- return null;
}
-
- private static final String BASE_DIR = "src/main/resources/tmp";
/**
* 根据任务 ID 查找对应的 DB 文件路径
@@ -362,49 +426,65 @@
* @param taskId 任务 ID
* @return 匹配的 DB 文件路径列表
*/
- public List<String> findDbFilesByTaskId(String taskId) {
- List<String> dbFilePaths = new ArrayList<>();
- File baseDir = new File(BASE_DIR);
-
- // 检查基础目录是否存在
- if (!baseDir.exists() || !baseDir.isDirectory()) {
- throw new IllegalStateException("Base directory does not exist or is not a directory.");
+ public String findDbFilesByTaskId(String taskId) {
+ DbUploadEntity entity = dbUploadMapper.selectOne(new LambdaQueryWrapper<DbUploadEntity>()
+ .eq(DbUploadEntity::getTaskId, taskId));
+ if (entity!=null){
+ DbUploadDto dto=DbEntityToDto(entity);
+ return SM4Util.encrypt("jsimjrby3wqb7dbq",buildRequestBody(dto));
}
+ return null;
- // 遍历基础目录下的所有文件夹
- File[] subDirs = baseDir.listFiles(File::isDirectory);
- if (subDirs != null) {
- for (File subDir : subDirs) {
- // 如果文件夹名称包含任务 ID,则查找该文件夹中的 DB 文件
- if (subDir.getName().contains(taskId)) {
- File[] files = subDir.listFiles((dir, name) -> name.endsWith(".db"));
- if (files != null) {
- for (File file : files) {
- dbFilePaths.add(file.getAbsolutePath());
- }
- }
- }
- }
- }
-
- return dbFilePaths;
+// File baseDir = new File(BASE_DIR);
+//
+// // 检查基础目录是否存在并且是目录
+// if (!baseDir.exists() || !baseDir.isDirectory()) {
+// throw new IllegalStateException("Base directory does not exist or is not a directory.");
+// }
+//
+// // 构建文件路径
+// File targetDir = new File(baseDir, taskId);
+// File dbFile = new File(targetDir, ".db");
+//
+// // 如果文件存在,则返回文件路径
+// if (dbFile.exists()) {
+// return dbFile.getAbsolutePath();
+// }
+//
+// return null; // 或者抛出异常,视需求而定
}
+
public void delPatchesByTaskId(String taskId) {
patchesMapper.delete(new LambdaUpdateWrapper<LotInfo>().eq(LotInfo::getTaskId, taskId));
}
+ public DbUploadDto DbEntityToDto(DbUploadEntity entity) {
+ DbUploadDto dto = new DbUploadDto();
+ dto.setAttachmentCount(entity.getAttachmentCount());
+ dto.setCount(entity.getCount());
+ dto.setSign(entity.getDataSign());
+ dto.setExtension(entity.getExtension());
+ dto.setHash(entity.getHash());
+ dto.setRegioncode(entity.getRegioncode());
+ dto.setTaskId(entity.getTaskId());
+ dto.setKey(entity.getDecrypt());
+ dto.setTimestamp(entity.getTimestamp());
+ dto.setSize(entity.getSize());
+ dto.setUrl(entity.getUrl());
+ return dto;
+ }
public void delTaskInfo(String taskId) {
taskInfoMapper.delete(new LambdaUpdateWrapper<TaskInfo>().eq(TaskInfo::getTaskId, taskId));
}
- private String buildRequestBody(AddDeviceDto dto) {
- try {
- return objectMapper.writeValueAsString(dto);
- } catch (JsonProcessingException e) {
- throw new RuntimeException("数据有误", e);
- }
- }
+// private String buildRequestBody(AddDeviceDto dto) {
+// try {
+// return objectMapper.writeValueAsString(dto);
+// } catch (JsonProcessingException e) {
+// throw new RuntimeException("数据有误", e);
+// }
+// }
public String getWorkspaceId(String devicesn) {
DeviceEntity entity = deviceMapper.selectOne(new LambdaQueryWrapper<DeviceEntity>()
@@ -481,7 +561,7 @@
String sn = deviceMapper.selectOne(new LambdaQueryWrapper<DeviceEntity>().eq(DeviceEntity::getChildSn, deviceId)).getDeviceSn();
Optional<OsdDockReceiver> dockOsdOpt = redisService.getDeviceOsd(sn, OsdDockReceiver.class);
boolean results = dockOsdOpt.isPresent();
- if (!results){
+ if (!results) {
DroneStateDto.DroneStateDtoBuilder builder = DroneStateDto.builder();
builder.gimbalYaw(0.0)
.gimbalPitch(0.0)
@@ -498,11 +578,10 @@
OsdDockReceiver osdDockReceiver = objectMapper.convertValue(dockOsdOpt.get(), OsdDockReceiver.class);
int mode;
int sne = osdDockReceiver.getModeCode().getVal();
- if (sne==0){
- mode=1;
- }
- else {
- mode=2;
+ if (sne == 0) {
+ mode = 0;
+ } else {
+ mode = 2;
}
DroneStateDto.DroneStateDtoBuilder builder = DroneStateDto.builder();
builder.gimbalYaw(0.0)
@@ -669,4 +748,19 @@
// 调用 update 方法进行更新操作
waylineJobMapper.update(null, updateWrapper);
}
+ public int countDistinctTaskIdsForToday(String workspaceId) {
+ // 获取当天的开始和结束时间戳
+ long startOfDay = LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli();
+ long startOfNextDay = LocalDate.now().plusDays(1).atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli();
+
+ // 查询数据库,计算不同 taskId 的数量
+ return patchesMapper.selectCount(new LambdaQueryWrapper<LotInfo>()
+ .eq(LotInfo::getWorkspaceId, workspaceId)
+ .ge(LotInfo::getCreateTime, startOfDay)
+ .lt(LotInfo::getCreateTime, startOfNextDay)
+ .select(LotInfo::getTaskId)
+ .groupBy(LotInfo::getTaskId)
+ );
+ }
+
}
diff --git a/src/main/java/com/dji/sample/droneairport/utils/SM4Util.java b/src/main/java/com/dji/sample/droneairport/utils/SM4Util.java
index 314bd76..394e466 100644
--- a/src/main/java/com/dji/sample/droneairport/utils/SM4Util.java
+++ b/src/main/java/com/dji/sample/droneairport/utils/SM4Util.java
@@ -108,15 +108,16 @@
}
public static void main(String[] args) {
+// System.out.println(generateSM4Key());
byte[] key = "jsimjrby3wqb7dbq".getBytes(StandardCharsets.UTF_8); // 16字节密钥
// 原始明文
String plaintext = "{\n" +
" \"deviceid\": [\n" +
" \"1581F6QAD241800B6V95\",\n" +
- " \"1581F5BMD22CK0014H2U\"\n" +
+ " \"1581F6QAD241500BDZ3J\"\n" +
" ],\n" +
- " \"bizidname\": \"南昌市西湖区图斑下发\",\n" +
+ " \"bizidname\": \"2023年度全国国土变更调查举证模块\",\n" +
" \"tasklist\": [\n" +
" {\n" +
" \"bsm\": \"2028107171717717107171017\",\n" +
@@ -125,7 +126,7 @@
" \"dklx\": \"ndbg2024\",\n" +
" \"dkmc\": \"小桥头\",\n" +
" \"dkmj\": 20.5,\n" +
- " \"dkfw\": \"MULTIPOLYGON(((115.86528871951153 28.625287925196325,115.86561708513025 28.625787612007546,115.86815834948467 28.624602640426623,115.86773004650362 28.62425999804172,115.86528871951153 28.625287925196325)))\",\n" +
+ " \"dkfw\": \"MULTIPOLYGON(((115.85261028414699 28.628065910491646,115.85234952636368 28.627469892700983,115.85043542990357 28.628240439727712,115.85050295853954 28.62842805760428,115.85071376127738 28.628739229859185,115.85080329411801 28.628869938164858,115.85261028414699 28.628065910491646)))\",\n" +
" \"bz\": null\n" +
" },\n" +
" {\n" +
@@ -135,7 +136,7 @@
" \"dklx\": \"n4\",\n" +
" \"dkmc\": \"小桥\",\n" +
" \"dkmj\": 20.5,\n" +
- " \"dkfw\": \"MULTIPOLYGON(((115.86262525992014 28.634623244731678,115.86214341906647 28.63383445340825,115.86164016306374 28.63418423417594,115.86204348170406 28.63485524217979,115.86262525992014 28.634623244731678)))\",\n" +
+ " \"dkfw\": \"MULTIPOLYGON(((115.86528871951153 28.625287925196325,115.86561708513025 28.625787612007546,115.86815834948467 28.624602640426623,115.86773004650362 28.62425999804172,115.86528871951153 28.625287925196325)))\",\n" +
" \"bz\": null\n" +
" },\n" +
" {\n" +
@@ -145,7 +146,7 @@
" \"dklx\": \"ndbg2774\",\n" +
" \"dkmc\": \"桥头\",\n" +
" \"dkmj\": 20.574,\n" +
- " \"dkfw\": \"MULTIPOLYGON(((115.86528871951153 28.625287925196325,115.86561708513025 28.625787612007546,115.86815834948467 28.624602640426623,115.86773004650362 28.62425999804172,115.86528871951153 28.625287925196325)))\",\n" +
+ " \"dkfw\": \"POLYGON((116.0216 25.8926,116.0217 25.8921,116.0205 25.8919,116.0204 25.8928,116.0214 25.8931,116.0216 25.8926))\",\n" +
" \"bz\": null\n" +
" },\n" +
" {\n" +
@@ -155,28 +156,7 @@
" \"dklx\": \"ndbg2774\",\n" +
" \"dkmc\": \"大桥头\",\n" +
" \"dkmj\": 20.54,\n" +
- " \"dkfw\": \"MULTIPOLYGON(((115.84891670917342 28.62884019080562,115.84861068074487 28.628310237250474,115.84801105657137 28.628543424429186,115.84836943314201 28.629060290948733,115.84891670917342 28.62884019080562)))\",\n" +
- " \"bz\": null\n" +
- " },\n" +
- " {\n" +
- " \"bsm\": \"177177\",\n" +
- " \"xzqdm\": \"3\",\n" +
- " \"dkbh\": \"n1\",\n" +
- " \"dklx\": \"ndbg2774\",\n" +
- " \"dkmc\": \"大桥头\",\n" +
- " \"dkmj\": 20.54,\n" +
- " \"dkfw\": \"MULTIPOLYGON(((115.85261028414699 28.628065910491646,115.85234952636368 28.627469892700983,115.85043542990357 28.628240439727712,115.85050295853954 28.62842805760428,115.85071376127738 28.628739229859185,115.85080329411801 28.628869938164858,115.85261028414699 28.628065910491646)))\",\n" +
- " \"bz\": null\n" +
- " }\n" +
- ",\n" +
- " {\n" +
- " \"bsm\": \"177177\",\n" +
- " \"xzqdm\": \"3\",\n" +
- " \"dkbh\": \"n1\",\n" +
- " \"dklx\": \"ndbg2774\",\n" +
- " \"dkmc\": \"大桥头\",\n" +
- " \"dkmj\": 20.54,\n" +
- " \"dkfw\": \"MULTIPOLYGON(((115.85063001998248 28.61939504315339,115.85047227189142 28.619025124342414,115.8490255596 28.6190394011085,115.8491588094162 28.61949625762165,115.84966325514971 28.61989600707048,115.84993419451101 28.620007388652688,115.85063001998248 28.61939504315339)))\",\n" +
+ " \"dkfw\": \"POLYGON((116.0126 25.8866,116.0127 25.8849,116.0125 25.885,116.0125 25.8866,116.0126 25.8866))\",\n" +
" \"bz\": null\n" +
" }\n" +
" ]\n" +
diff --git a/src/main/java/com/dji/sample/manage/controller/DeviceController.java b/src/main/java/com/dji/sample/manage/controller/DeviceController.java
index 3c608b3..2fa7308 100644
--- a/src/main/java/com/dji/sample/manage/controller/DeviceController.java
+++ b/src/main/java/com/dji/sample/manage/controller/DeviceController.java
@@ -6,6 +6,7 @@
import com.dji.sample.component.mqtt.model.ChannelName;
import com.dji.sample.component.mqtt.model.CommonTopicReceiver;
import com.dji.sample.component.mqtt.model.CommonTopicResponse;
+import com.dji.sample.droneairport.service.RegistService;
import com.dji.sample.manage.model.dto.DeviceDTO;
import com.dji.sample.manage.model.dto.DeviceFirmwareUpgradeDTO;
import com.dji.sample.manage.model.enums.DeviceSetPropertyEnum;
@@ -32,6 +33,8 @@
@Autowired
private IDeviceService deviceService;
+ @Autowired
+ private RegistService registService;
/**
* Handles the message that the drone goes online.
@@ -49,6 +52,9 @@
.timestamp(System.currentTimeMillis())
.method(receiver.getMethod())
.build());
+ }
+ if (receiver.getData().getSn().length()==14){
+ registService.Authorization(receiver.getData().getSn());
}
}
@@ -71,6 +77,9 @@
.build());
}
+ if (receiver.getData().getSn().length()==14){
+ registService.noAuthorization(receiver.getData().getSn());
+ }
}
/**
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 6d29baa..94ff38b 100644
--- a/src/main/java/com/dji/sample/media/service/IFileService.java
+++ b/src/main/java/com/dji/sample/media/service/IFileService.java
@@ -9,6 +9,7 @@
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
+import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.List;
@@ -61,6 +62,7 @@
*/
List<MediaFileDTO> getAllFilesByWorkspaceId(String workspaceId);
+ void saveMarkFile(String workspaceId, MediaFileEntity file, File file1);
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 40ea318..950203a 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
@@ -110,7 +110,22 @@
.eq(MediaFileEntity::getFileId, fileId));
return Optional.ofNullable(fileEntity);
}
-
+ public void saveMarkFile(String workspaceId, MediaFileEntity file,File file1) {
+ try {
+ MediaFileMarkEntity mediaFileMarkEntity= new MediaFileMarkEntity();
+ mediaFileMarkEntity.setWorkspaceId(workspaceId);
+ mediaFileMarkEntity.setIsadd(0);
+ mediaFileMarkEntity.setIsOriginal(false);
+ mediaFileMarkEntity.setFileId(UUID.randomUUID().toString());
+ mediaFileMarkEntity.setObjectKey("/mark" + file.getFilePath()+ "/" + file.getFileName());
+ mediaFileMarkEntity.setFileName("mark" + file.getFileName());
+ mediaFileMarkEntity.setFilePath("mark" + file.getFilePath());
+ uploadFile(pojo.getEndpoint(), pojo.getAccessKey(), pojo.getSecretKey(), pojo.getBucket(), mediaFileMarkEntity.getObjectKey(), file1, "image/jpeg");
+ markMapper.insert(mediaFileMarkEntity);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
@Override
public Boolean checkExist(String workspaceId, String fingerprint) {
return this.getMediaByFingerprint(workspaceId, fingerprint).isPresent();
@@ -121,6 +136,7 @@
MediaFileEntity fileEntity = this.fileUploadConvertToEntity(file);
fileEntity.setWorkspaceId(workspaceId);
fileEntity.setFileId(UUID.randomUUID().toString());
+ //避免对视频处理引发报错
if (file.getObjectKey().endsWith("jpeg")){
fileEntity.setIsadd(0);
String url = pojo.getEndpoint() + "/" + pojo.getBucket() + file.getObjectKey();
diff --git a/src/main/java/com/dji/sample/media/util/ImgUtil.java b/src/main/java/com/dji/sample/media/util/ImgUtil.java
index b3d803f..f7b9a6f 100644
--- a/src/main/java/com/dji/sample/media/util/ImgUtil.java
+++ b/src/main/java/com/dji/sample/media/util/ImgUtil.java
@@ -91,7 +91,16 @@
return null;
}
}
+ /**
+ * 获取图片的XMP信息
+ *
+ * @param file 图片文件
+ * @return 包含图片XMP信息的JSONObject对象
+ * @throws ImageProcessingException 图像处理异常
+ * @throws IOException 输入输出异常
+ */
public static Object getInfo(File file) throws ImageProcessingException, IOException {
+ // 从文件中提取XMP信息
String str =getXmp(file);
// 解析 JSON 字符串为 JSON 对象
JSONObject jsonObject = JSON.parseObject(str);
@@ -101,15 +110,19 @@
String flightYawDegree = jsonObject.getString("drone-dji:FlightYawDegree");
String flightPitchDegree = jsonObject.getString("drone-dji:FlightPitchDegree");
String gimbalPitchDegree = jsonObject.getString("drone-dji:GimbalPitchDegree");
+ // 读取图片的XMP信息中的焦距
String mm=readPicExifInfo(file).get("Focal Length 35");
// 构造新的 JSON 对象
JSONObject newJsonObject = new JSONObject();
+ // 将获取到的信息添加到新的 JSON 对象中
newJsonObject.put("GimbalYawDegree", gimbalYawDegree);
newJsonObject.put("FlightYawDegree", flightYawDegree);
newJsonObject.put("FlightPitchDegree", flightPitchDegree);
newJsonObject.put("GimbalPitchDegree", gimbalPitchDegree);
newJsonObject.put("FocalLength", mm);
+ // 返回包含图片XMP信息的JSON对象
return newJsonObject;
}
+
}
diff --git a/src/main/java/com/dji/sample/patches/service/impl/ShpToDataSourceServiceImpl.java b/src/main/java/com/dji/sample/patches/service/impl/ShpToDataSourceServiceImpl.java
index ad39577..2c5d384 100644
--- a/src/main/java/com/dji/sample/patches/service/impl/ShpToDataSourceServiceImpl.java
+++ b/src/main/java/com/dji/sample/patches/service/impl/ShpToDataSourceServiceImpl.java
@@ -82,7 +82,7 @@
LotInfo lotInfo = new LotInfo();
lotInfo.setWorkspaceId(workspaceId);
lotInfo.setTaskId(id);
- lotInfo.setType(1);
+ lotInfo.setType(2);
lotInfo.setTaskName(name);
lotInfo = dbConvertToEntity(list.get(i), workspaceId, id, name);
shpToDataSourceMapper.insert(lotInfo);
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 662eac6..b8c1fe2 100644
--- a/src/main/java/com/dji/sample/patches/utils/TimerUtil.java
+++ b/src/main/java/com/dji/sample/patches/utils/TimerUtil.java
@@ -2,6 +2,8 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.dji.sample.common.model.CustomClaim;
+import com.dji.sample.droneairport.dao.DbUploadMapper;
+import com.dji.sample.droneairport.model.Entity.DbUploadEntity;
import com.dji.sample.manage.dao.IDeviceMapper;
import com.dji.sample.manage.model.entity.DeviceEntity;
import com.dji.sample.media.dao.IFileMapper;
@@ -55,6 +57,7 @@
import static com.dji.sample.patches.utils.MultipartFileTOFileUtil.convert;
import static com.dji.sample.patches.utils.ZipUtil.zipFolder;
+import static com.dji.sample.territory.utils.SM3.sm3;
import static com.dji.sample.wayline.model.enums.WaylineTaskTypeEnum.TIMED;
import static com.dji.sample.wayline.model.enums.WaylineTemplateTypeEnum.WAYPOINT;
@@ -82,6 +85,8 @@
private IWaylineJobBreakPointService jobBreakPointService;
@Autowired
private IDeviceMapper deviceMapper;
+ @Autowired
+ private DbUploadMapper dbUploadMapper;
/**
* 定时器,将没有规划的图斑生成航线,并将航线飞完后的成果数据进行保存推送
*
@@ -252,6 +257,9 @@
String taskId = "";
String dkbh = null;
List<List<LotInfo>> lists = convertToLists(getNoPush(workspaceId));
+ if (lists.isEmpty()){
+ return;
+ }
for (List<LotInfo> lotInfo : lists) {
for (LotInfo lotInfo1 : lotInfo) {
List<MediaFileEntity> media = getPatchesService.listPohto(lotInfo1.getDkbh(), workspaceId);
@@ -276,29 +284,55 @@
}
}
@Scheduled(cron = "0 3 17 * * ?")
- public void GtdbOperation() throws Exception {
- String taskId = "";
- String dkbh = null;
- List<List<LotInfo>> lists = convertToLists(getNoPush());
- for (List<LotInfo> lotInfo : lists) {
- for (LotInfo lotInfo1 : lotInfo) {
- List<MediaFileEntity> media = getPatchesService.listPohto(lotInfo1.getDkbh());
- //清空FJ表
- tbFJService.deleteData();
- for (MediaFileEntity mediaFile : media) {
- //获取媒体文件名里的dkbh和taskId
- dkbh = getDkbh(mediaFile.getFileName());
- //获取该媒体文件的图斑信息
- LotInfo lotInfo2 = getPatchesService.getLotinfo(dkbh);
- taskId = lotInfo2.getTaskId();
- tbFJService.insertOneData(mediaFile, lotInfo2);
- getPatchesService.patchesPushed(taskId, dkbh);
- }
- }
- //存储db到服务器
- dbSaveGt(territoryConfigPojo.getResult(), territoryConfigPojo.getResultGtsave(), taskId);
+ public void GtdbOperation() throws Exception {
+ String taskId = "";
+ String dkbh = null;
+ String code="";
+ int count = 0;
+ Set<String> dkbhSet = new HashSet<>(); // 用于存储不同的dkbh
+ List<List<LotInfo>> lists = convertToLists(getNoPush());
+ if (lists.isEmpty()){
+ return;
}
+ tbFJService.deleteData();
+ for (List<LotInfo> lotInfo : lists) {
+ for (LotInfo lotInfo1 : lotInfo) {
+ List<MediaFileEntity> media = getPatchesService.listPohto(lotInfo1.getDkbh());
+ // 清空FJ表
+ for (MediaFileEntity mediaFile : media) {
+ // 获取媒体文件名里的dkbh和taskId
+ dkbh = getDkbh(mediaFile.getFileName());
+ dkbhSet.add(dkbh); // 添加dkbh到set中
+ // 获取该媒体文件的图斑信息
+ LotInfo lotInfo2 = getPatchesService.getLotinfo(dkbh);
+ taskId = lotInfo2.getTaskId();
+ code=lotInfo2.getXzqdm();
+ count++;
+ // 插入数据到数据库
+ tbFJService.insertOneData(mediaFile, lotInfo2);
+ getPatchesService.patchesPushed(taskId, dkbh);
+ }
+ }
+
+ // 存储db到服务器
+ String dbName = dbSaveGt(territoryConfigPojo.getResult(), territoryConfigPojo.getResultGtsave(), taskId);
+ DbUploadEntity entity = new DbUploadEntity();
+ File file = new File(territoryConfigPojo.getResult());
+ byte[] bytesArray = Files.readAllBytes(file.toPath());
+ long currentTimeMillis = System.currentTimeMillis();
+ entity.setTimestamp(currentTimeMillis);
+ entity.setSize(getFileSize(file)) ;
+ entity.setHash(sm3(bytesArray));
+ entity.setCount(dkbhSet.size());// 统计dkbh的数量
+ entity.setUrl(territoryConfigPojo.getResultGtsave()+"/"+dbName);
+ entity.setRegioncode(code);
+ entity.setExtension(".db");
+ entity.setAttachmentCount(count);
+ entity.setTaskId(taskId);
+ dbUploadMapper.insert(entity);
}
+}
+
/**
* 创建航线
@@ -378,7 +412,7 @@
public List<List<LotInfo>> getNoPush(String workspaceId) {
List<LotInfo> list = patchesMapper.selectList(new LambdaQueryWrapper<LotInfo>()
.eq(LotInfo::getIsPush, 0)
- .eq(LotInfo::getType, 1)
+ .eq(LotInfo::getType, 2)
.eq(LotInfo::getInvestigate, 1)
.eq(LotInfo::getWorkspaceId, workspaceId));
return groupTasks(list);
@@ -386,7 +420,7 @@
public List<List<LotInfo>> getNoPush() {
List<LotInfo> list = patchesMapper.selectList(new LambdaQueryWrapper<LotInfo>()
.eq(LotInfo::getIsPush, 0)
- .eq(LotInfo::getType, 0)
+ .eq(LotInfo::getType, 1)
.eq(LotInfo::getInvestigate, 1));
return groupTasks(list);
}
@@ -691,30 +725,17 @@
throw new RuntimeException("Db文件复制失败", e); // 捕获并抛出原始异常
}
}
- public void dbSaveGt(String path, String folder, String taskId) {
- String sourceFilePath = path; // 源文件路径
- String targetFolderPath = fileFold(folder,taskId).getPath(); // 目标文件夹路径
-
+ public String dbSaveGt(String path, String folder, String taskId) {
try {
- // 创建目标文件夹
- File targetFolder = new File(targetFolderPath);
- if (!targetFolder.exists()) {
- targetFolder.mkdirs();
- }
-
- // 获取当前时间
- LocalDateTime currentTime = LocalDateTime.now();
-
- // 格式化时间,生成文件名
- String timeName = currentTime.format(DateTimeFormatter.ofPattern("HHmmss"));
- String fileName = timeName + "_" + taskId + ".db";
+ String fileName = taskId + ".db";
// 构建目标文件路径
- String targetFilePath = targetFolderPath + File.separator + fileName;
+ String targetFilePath = folder + File.separator + fileName;
- // 复制文件到目标文件夹
- Path sourcePath = Paths.get(sourceFilePath);
+ // 复制文件到目标位置
+ Path sourcePath = Paths.get(path);
Path targetPath = Paths.get(targetFilePath);
Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
+ return fileName;
} catch (IOException e) {
throw new RuntimeException("Db文件复制失败", e); // 捕获并抛出原始异常
}
@@ -775,6 +796,21 @@
// 将毫秒级时间戳转换为秒级时间戳
return timestamp / 1000;
}
+ public static long getNextDayEightAMTimestamp(int hour) {
+ // 获取当前时间
+ LocalDateTime now = LocalDateTime.now();
+
+ // 获取第二天的日期并设置时间为08:00
+ LocalDateTime nextDayEightAM = now.plusDays(1).withHour(8).withMinute(0).withSecond(0).withNano(0);
+
+ // 根据传入的hour参数增加小时
+ LocalDateTime adjustedTime = nextDayEightAM.plusHours(hour);
+
+ // 转换为时间戳(秒级)
+ ZonedDateTime zonedDateTime = adjustedTime.atZone(ZoneId.systemDefault());
+ return zonedDateTime.toEpochSecond();
+ }
+
public static Long addOneHourToTimestamp(Long timestampInSeconds, long hours, long min) {
// 将输入的秒级时间戳转换为Instant对象
@@ -821,4 +857,20 @@
// 格式化时间,生成当前时间
return currentTime.format(DateTimeFormatter.ofPattern("MMddHHmmssSSS"));
}
+ public static long getFileSize(File file) {
+ if (file == null || !file.exists() || !file.isFile()) {
+ return -1L; // 文件不存在或不是普通文件
+ }
+ return file.length();
+ }
+
+ public static void main(String[] args) {
+ File file = new File("DB/result_db.db");
+ long size = getFileSize(file);
+ System.out.println("文件大小: " + size + " 字节");
+ }
+ public static void getFileInfo(File file){
+ long size=getFileSize(file);
+
+ }
}
diff --git a/src/main/java/com/dji/sample/territory/service/ITbFJService.java b/src/main/java/com/dji/sample/territory/service/ITbFJService.java
index 41bfa4e..b2696c4 100644
--- a/src/main/java/com/dji/sample/territory/service/ITbFJService.java
+++ b/src/main/java/com/dji/sample/territory/service/ITbFJService.java
@@ -27,5 +27,5 @@
* @param lotInfo
* @throws Exception
*/
- void insertOneData(MediaFileEntity mediaFile, LotInfo lotInfo) throws Exception;
+ int insertOneData(MediaFileEntity mediaFile, LotInfo lotInfo) throws Exception;
}
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 4ccc300..e4c774b 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
@@ -5,6 +5,7 @@
import com.baomidou.dynamic.datasource.annotation.DS;
import com.dji.sample.media.dao.IMarkMapper;
import com.dji.sample.media.model.*;
+import com.dji.sample.media.service.IFileService;
import com.dji.sample.media.util.ImgUtil;
import com.dji.sample.patches.config.pojo.PatchesConfigPojo;
import com.dji.sample.patches.model.entity.LotInfo;
@@ -48,7 +49,9 @@
@Autowired
private MinioPojo pojo;
@Autowired
- private IMarkMapper markMapper;
+ private IFileService fileService;
+ @Autowired
+ private WaterMarkUtil waterMarkUtil;
/**
* 按照地块编号所对应的信息和音视频文件存入sqlite数据库
*
@@ -72,11 +75,10 @@
return count;
}
- public void insertOneData(MediaFileEntity mediaFile, LotInfo lotInfo) throws Exception {
+ public int insertOneData(MediaFileEntity mediaFile, LotInfo lotInfo) throws Exception {
TbFjEntity tbFj = dbConvertToEntity(mediaFile, lotInfo);
- if (tbFj.getFjysgd() == 3000) {
tbFjMapper.insert(tbFj);
- }
+ return 0;
}
@Override
@@ -141,11 +143,11 @@
//对应图片和视频文件进行不同处理
boolean endsWith = key.endsWith(".mp4");
if (!endsWith) {
- file1 = WaterMarkUtil.addWatermark(file, sj, lat, lng, gimbalYawDegree);
+ file1 = waterMarkUtil.addWatermark(file, sj, lat, lng, gimbalYawDegree,lotInfo.getType());
byte[] bytesArray = Files.readAllBytes(file1.toPath());
fjhxz= sm3(bytesArray);
FJ = fileToByteArray(file1);
- saveMarkFile(lotInfo.getWorkspaceId(),mediaFile,file1);
+// fileService.saveMarkFile(lotInfo.getWorkspaceId(),mediaFile,file1);
} else {
file1 = VideoZipUtil.compressVideo(file, 800000, 128000, 1280, 720);
FJ = fileToByteArray(file1);
@@ -188,7 +190,7 @@
}
/**
- * 将音视频文件转换成字节流
+ * 文件下载
*
* @param fileUrl
* @return
@@ -235,23 +237,6 @@
fis.close();
return data;
}
- public void saveMarkFile(String workspaceId, MediaFileEntity file,File file1) {
- try {
- MediaFileMarkEntity mediaFileMarkEntity= new MediaFileMarkEntity();
- mediaFileMarkEntity.setWorkspaceId(workspaceId);
- mediaFileMarkEntity.setIsadd(0);
- mediaFileMarkEntity.setIsOriginal(false);
- mediaFileMarkEntity.setFileId(UUID.randomUUID().toString());
- mediaFileMarkEntity.setObjectKey("/mark" + file.getFilePath()+ "/" + file.getFileName());
- mediaFileMarkEntity.setFileName("mark" + file.getFileName());
- mediaFileMarkEntity.setFilePath("mark" + file.getFilePath());
- uploadFile(pojo.getEndpoint(), pojo.getAccessKey(), pojo.getSecretKey(), pojo.getBucket(), mediaFileMarkEntity.getObjectKey(), file1, "image/jpeg");
- markMapper.insert(mediaFileMarkEntity);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
public static String convertTimestampToDateTime(long timestamp) {
// 将时间戳转换为 Instant 对象
Instant instant = Instant.ofEpochMilli(timestamp);
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 6a2854d..d658674 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 com.dji.sample.media.service.IFileService;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.imageio.ImageIO;
@@ -12,7 +14,8 @@
import java.util.Date;
@Component
public class WaterMarkUtil {
-
+ @Autowired
+ private IFileService fileService;
/**
* 将图片加上水印并压缩
*
@@ -23,7 +26,7 @@
* @return 添加水印并压缩后的图片文件。
* @throws IOException 如果读取或保存图片失败。
*/
- public static File addWatermark(File file, Long pssj, Double lat, Double lng, Double angles) throws IOException, FontFormatException {
+ public 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 时间戳(以秒为单位)
@@ -36,12 +39,15 @@
} catch (IOException e) {
throw new IllegalArgumentException("读取图片失败" + e.getMessage());
}
-
+// fileService.saveMarkFile(lotInfo.getWorkspaceId(),mediaFile,file1);
// 创建 Graphics2D 对象以在图像上绘制水印
Graphics2D g2d = originalImage.createGraphics();
// 设置水印文字 "江西调查云"
String watermarkText = "江西调查云";
+ if (type == 1){
+ watermarkText = "国土调查云";
+ }
float alpha = 0.8f; // 设置透明度为 0.7
AlphaComposite alphaComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);
g2d.setComposite(alphaComposite);
--
Gitblit v1.9.3