From 74d0031c16c468fa82208dbcdde4fa3766a58eeb Mon Sep 17 00:00:00 2001
From: rain <167982779@qq.com>
Date: Thu, 09 May 2024 16:30:55 +0800
Subject: [PATCH] 完成成果数据入库(DB)方式,修改DB文件上传接口。
---
src/main/java/com/dji/sample/patches/utils/TimerUtil.java | 226 +++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 190 insertions(+), 36 deletions(-)
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 582cb18..22cf892 100644
--- a/src/main/java/com/dji/sample/patches/utils/TimerUtil.java
+++ b/src/main/java/com/dji/sample/patches/utils/TimerUtil.java
@@ -1,30 +1,48 @@
package com.dji.sample.patches.utils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dji.sample.common.model.CustomClaim;
+import com.dji.sample.media.dao.IFileMapper;
+import com.dji.sample.media.model.MediaFileEntity;
import com.dji.sample.patches.config.pojo.PatchesConfigPojo;
import com.dji.sample.patches.dao.ShpToDataSourceMapper;
import com.dji.sample.patches.model.entity.LotInfo;
+import com.dji.sample.patches.service.GetPatchesService;
import com.dji.sample.patches.xml.mode.XMLTemplateModel;
import com.dji.sample.patches.xml.utils.CreateWaylineFileUtils;
-import com.dji.sample.wayline.model.dto.WaylineFileDTO;
+import com.dji.sample.territory.pojo.TerritoryConfigPojo;
+import com.dji.sample.territory.service.ITbFJService;
import com.dji.sample.wayline.model.entity.WaylineFileEntity;
-import com.dji.sample.wayline.model.enums.WaylineTaskTypeEnum;
import com.dji.sample.wayline.model.param.CreateJobParam;
-import com.dji.sample.wayline.service.IWayLineTaskService;
import com.dji.sample.wayline.service.IWaylineFileService;
import com.dji.sample.wayline.service.IWaylineJobService;
-import org.locationtech.jts.geom.Coordinate;
+
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ByteArrayResource;
+import org.springframework.http.*;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
-import java.io.File;
-import java.io.IOException;
+
+import java.time.LocalDateTime;
+
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.sql.SQLException;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
-import java.util.UUID;
+import java.util.Map;
+import java.util.stream.Collectors;
import static com.dji.sample.patches.utils.MultipartFileTOFileUtil.convert;
import static com.dji.sample.patches.utils.ZipUtil.zipFolder;
@@ -40,44 +58,65 @@
@Autowired
public IWaylineFileService waylineFileService;
@Autowired
+ private IFileMapper fileMapper;
+ @Autowired
+ private ITbFJService tbFJService;
+ @Autowired
+ private GetPatchesService getPatchesService;
+ @Autowired
private IWaylineJobService waylineJobService;
@Autowired
- private IWayLineTaskService wayLineTaskService;
+ private TerritoryConfigPojo territoryConfigPojo;
/**
* 定时
+ *
* @throws IOException
* @throws SQLException
*/
- @Scheduled(cron = "0 25 14 * * ?")
- public void myTask() throws IOException, SQLException {
+ @Scheduled(cron = "45 1 16 * * ?")
+ public void myTask() throws Exception {
+ String workspaceId = "4a574db8-4ad3-48f7-9f16-3edbcd8056e1";
//获取未规划的图斑集合
- List<LotInfo> list = getNoPlan();
- long timestamp = System.currentTimeMillis();
- String waylineName = "云飞行调查" + timestamp;
- String workspaceId ="4a574db8-4ad3-48f7-9f16-3edbcd8056e1";
- //根据获取的图斑集合获得kmz航线文件
- MultipartFile multipartFile = getFile(waylineName, list);
- //上传航线文件
- String waylineId=backWayline(multipartFile, waylineName, workspaceId, backclaim().getUsername());
- //将为规划的图斑状态更新为已规划
- updateStatu(list);
- //调用publshFlightTask方法创建定时任务
- waylineJobService.publishFlightTask(JobParam(waylineId), backclaim());
+// List<List<LotInfo>> lists = getNoPlan();
+// List<List<LotInfo>> convertedLists = convertToLists(lists);
+// for (List<LotInfo> list : convertedLists) {
+// long timestamp = System.currentTimeMillis();
+// String waylineName = "云飞行调查" + timestamp;
+// //根据获取的图斑集合获得kmz航线文件
+// MultipartFile multipartFile = getFile(waylineName, list);
+// //上传航线文件
+// String waylineId = backWayline(multipartFile, waylineName, workspaceId, backclaim().getUsername());
+// //将为规划的图斑状态更新为已规划
+// updatePatchesStatu(list);
+// //调用publshFlightTask方法创建定时任务
+// waylineJobService.publishFlightTask(JobParam(waylineId), backclaim());
+// }
+ List<List<MediaFileEntity>> list = getNoadd();
+ List<List<MediaFileEntity>> media = convertToLists(list);
+ for (int i = 0; i < media.size(); i++) {
+ tbFJService.deleteData();
+ String dkbh = getDkbh(media.get(i).get(i).getFileName());
+ String taskId = getTaskId(media.get(i).get(i).getFileName());
+ LotInfo lotInfo = getPatchesService.getLotinfo(dkbh, workspaceId);
+ tbFJService.insertData(media.get(i), lotInfo);
+ updateMediaStatu(media.get(i));
+ sendPostWithFileAndParameter(territoryConfigPojo.getResult(), taskId);
+ }
}
public MultipartFile getFile(String waylineName, List<LotInfo> list) throws IOException {
- List<PointPO> coordinates = GeoToolsUtil.getRoutePointOrder(list, 28.218512, 115.856725497);
+ List<PointPO> coordinates = GeoToolsUtil.getRoutePointOrder(list, 28.62703, 115.867719);
XMLTemplateModel xmlModel = XMLTemplateModel.init(coordinates, list);
CreateWaylineFileUtils.createWaylineFile(xmlModel, patchesConfigPojo.getTemplate(), patchesConfigPojo.getTargetTemplate(), patchesConfigPojo.getWaylines(), patchesConfigPojo.getTargetWaylines());
- String destKMZFile = patchesConfigPojo.getDestKMZFile() + waylineName + ".kmz";
+ // 压缩文件夹中的内容
+ String destKMZFile = patchesConfigPojo.getDestKMZFile() + waylineName + ".kmz"; // 输出的KMZ文件路径
zipFolder(patchesConfigPojo.getSourceDir(), destKMZFile);
- MultipartFile multipartFile = convert(new File(destKMZFile));
- return multipartFile;
+ return convert(new File(destKMZFile));
}
- public String backWayline(MultipartFile multipartFile, String waylineName, String workspaceId,String username) {
- waylineFileService.importKmzFileBack(multipartFile, workspaceId,username);
+ public String backWayline(MultipartFile multipartFile, String waylineName, String workspaceId, String username) {
+ waylineFileService.importKmzFile(multipartFile, workspaceId, username);
WaylineFileEntity entity = waylineFileService.selectByName(waylineName);
try {
waylineFileService.getObjectUrl(workspaceId, entity.getWaylineId());
@@ -87,23 +126,54 @@
return entity.getWaylineId();
}
- public List<LotInfo> getNoPlan() {
- return shpToDataSourceMapper.selectList(new LambdaQueryWrapper<LotInfo>().eq(LotInfo::getIsplan, 0));
+ /**
+ * 获取未规划的图斑集合
+ *
+ * @return
+ */
+ public List<List<LotInfo>> getNoPlan() {
+ List<LotInfo> list = shpToDataSourceMapper.selectList(new LambdaQueryWrapper<LotInfo>().eq(LotInfo::getIsPlan, 0));
+ List<List<LotInfo>> combinedTasks = list.stream()
+ .collect(Collectors.groupingBy(LotInfo::getTaskId))
+ .values().stream()
+ .map(ArrayList::new)
+ .collect(Collectors.toList());
+ return combinedTasks;
}
- public void updateStatu(List<LotInfo> list) {
+ /**
+ * 更新图斑执行状态
+ *
+ * @param list
+ */
+ public void updatePatchesStatu(List<LotInfo> list) {
for (LotInfo lotInfo : list) {
- lotInfo.setIsplan(1);
+ lotInfo.setIsPlan(1);
shpToDataSourceMapper.updateById(lotInfo);
}
}
+
+ public void updateMediaStatu(List<MediaFileEntity> list) {
+ for (MediaFileEntity mediaFile : list) {
+ mediaFile.setIsadd(1);
+ fileMapper.updateById(mediaFile);
+ }
+ }
+
+ public List<List<MediaFileEntity>> getNoadd() {
+ List<MediaFileEntity> list = fileMapper.selectList(new LambdaQueryWrapper<MediaFileEntity>()
+ .eq(MediaFileEntity::getIsadd, 0).like(MediaFileEntity::getFileName, "~"));
+ List<List<MediaFileEntity>> groupedFilenames = groupTasks(list);
+ return groupedFilenames;
+ }
+
public CreateJobParam JobParam(String waylineId) {
List<List<Long>> listOfLists = new ArrayList<>();
List<Long> sublist = new ArrayList<>();
- sublist.add(1714944600L); // 添加整数值
+ sublist.add(177271980L); // 添加整数值
listOfLists.add(sublist);
List<Long> list = new ArrayList<>();
- list.add(1714944600L);
+ list.add(177271980L);
CreateJobParam param = new CreateJobParam();
param.setName("云飞行调查");
param.setTaskType(TIMED);
@@ -111,7 +181,6 @@
param.setRepFreType(3);
param.setRepFreVal(1);
param.setRepRuleType(1);
- param.setExecuteStartTimeArr(listOfLists);
param.setRthAltitude(80);
param.setWaylineType(WAYPOINT);
param.setTaskPeriods(listOfLists);
@@ -120,12 +189,97 @@
param.setDockSn("4TADKCMB010016");
return param;
}
+
public CustomClaim backclaim() {
- CustomClaim claim=new CustomClaim();
+ CustomClaim claim = new CustomClaim();
claim.setId("1");
claim.setUsername("adminPC");
claim.setWorkspaceId("4a574db8-4ad3-48f7-9f16-3edbcd8056e1");
claim.setUserType(1);
return claim;
}
+
+ public static <T> List<List<T>> convertToLists(List<List<T>> listOfLists) {
+ List<List<T>> convertedLists = new ArrayList<>();
+ for (List<T> list : listOfLists) {
+ convertedLists.add(new ArrayList<>(list));
+ }
+ return convertedLists;
+ }
+
+
+ // 对任务ID进行分组
+ public static List<List<MediaFileEntity>> groupTasks(List<MediaFileEntity> mediaFiles) {
+ Map<String, List<MediaFileEntity>> groupedTasks = new HashMap<>();
+ for (MediaFileEntity mediaFile : mediaFiles) {
+ String taskId = getTaskId(mediaFile.getFileName());
+ if (!groupedTasks.containsKey(taskId)) {
+ groupedTasks.put(taskId, new ArrayList<>());
+ }
+ groupedTasks.get(taskId).add(mediaFile);
+ }
+ return new ArrayList<>(groupedTasks.values());
+ }
+
+ // 从filename字段中提取任务ID(假设任务ID在文件名中以"~"开头、"."结尾)
+ public static String getTaskId(String filename) {
+ // 这里只是一个示例,你需要根据实际情况编写提取task_id的逻辑
+ int startIndex = filename.indexOf("~") + 1;
+ int endIndex = filename.indexOf(".");
+ return filename.substring(startIndex, endIndex);
+ }
+
+ public static String getDkbh(String filename) {
+ // 这里只是一个示例,你需要根据实际情况编写提取task_id的逻辑
+ int startIndex = filename.indexOf("点") + 1;
+ int endIndex = filename.indexOf("~");
+ return filename.substring(startIndex, endIndex);
+ }
+
+ public static void sendPostWithFileAndParameter(String filePath, String taskId) throws IOException {
+ // 创建 RestTemplate 实例
+ RestTemplate restTemplate = new RestTemplate();
+
+ // 读取文件内容为字节数组
+ byte[] fileContent = readFileToBytes(filePath);
+
+ // 构建请求体
+ MultiValueMap<String, Object> body = buildRequestBody(taskId, fileContent, filePath);
+
+ // 设置请求头
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.MULTIPART_FORM_DATA);
+
+
+ // 构建请求实体
+ HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
+
+ // 发送请求
+ ResponseEntity<String> response = restTemplate.exchange(
+ "http://localhost:6789/territory/tbdkjbxx/upload",
+ HttpMethod.POST,
+ requestEntity,
+ String.class);
+
+ // 输出响应结果
+ System.out.println("Response: " + response.getBody());
+ }
+
+ private static MultiValueMap<String, Object> buildRequestBody(String taskId, byte[] fileContent, String filePath) {
+ MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
+ body.add("taskId", taskId);
+ body.add("file", new ByteArrayResource(fileContent) {
+ @Override
+ public String getFilename() {
+ return Paths.get(filePath).getFileName().toString();
+ }
+ });
+ return body;
+ }
+
+ private static byte[] readFileToBytes(String filePath) throws IOException {
+ Path path = Paths.get(filePath);
+ return Files.readAllBytes(path);
+ }
+
}
--
Gitblit v1.9.3