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