From 1c3073157f2a451181058d15e4a50e544ac2fc28 Mon Sep 17 00:00:00 2001
From: Xiajijian <1176061145@qq.com>
Date: Wed, 12 Nov 2025 09:14:38 +0800
Subject: [PATCH] 1.去掉权限注解。 2.数据库存储航线实体数据。 3.增加判断行点是否在禁飞区接口。

---
 ard-route/src/main/resources/mapper/ArdRouteInformationMapper.xml                       |    4 +
 ard-route/src/main/java/com/ard/route/util/InitializationUtils.java                     |    8 +-
 ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteInformationController.java |   17 +++--
 ard-route/pom.xml                                                                       |    4 +
 ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInformation.java             |    3 +
 ard-route/src/main/java/com/ard/route/service/impl/UavRouteServiceImpl.java             |    4 +
 ard-route/src/main/java/com/ard/route/util/ToolUtils.java                               |   18 ++++++
 ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteFolderController.java      |    6 --
 ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInformationServiceImpl.java  |   53 ++++++++++++++++-
 ard-route/src/main/java/com/ard/route/domain/vo/KmzResultVo.java                        |    5 +
 ard-route/src/main/java/com/ard/route/service/IArdRouteInformationService.java          |    9 +++
 11 files changed, 111 insertions(+), 20 deletions(-)

diff --git a/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteFolderController.java b/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteFolderController.java
index f26117c..f696a17 100644
--- a/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteFolderController.java
+++ b/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteFolderController.java
@@ -43,7 +43,6 @@
      * 查询分组列表
      */
     @ApiOperation("查询分组列表")
-    //@PreAuthorize("@ss.hasPermi('route:folder:list')")
     @GetMapping("/list")
     public TableDataInfo list(ArdRouteFolder ardRouteFolder) {
         //startPage();
@@ -55,7 +54,6 @@
      * 导出分组列表
      */
     @ApiOperation("导出分组列表")
-    //@PreAuthorize("@ss.hasPermi('route:folder:export')")
     @Log(title = "分组", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, ArdRouteFolder ardRouteFolder) {
@@ -68,7 +66,6 @@
      * 获取分组详细信息
      */
     @ApiOperation("获取分组详细信息")
-    //@PreAuthorize("@ss.hasPermi('route:folder:query')")
     @GetMapping(value = "/{id}")
     public AjaxResult getInfo(@PathVariable("id") String id) {
         return success(ardRouteFolderService.selectArdRouteFolderById(id));
@@ -78,7 +75,6 @@
      * 新增分组
      */
     @ApiOperation("新增分组")
-    //@PreAuthorize("@ss.hasPermi('route:folder:add')")
     @Log(title = "分组", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody ArdRouteFolder ardRouteFolder) {
@@ -90,7 +86,6 @@
      * 修改分组
      */
     @ApiOperation("修改分组")
-    //@PreAuthorize("@ss.hasPermi('route:folder:edit')")
     @Log(title = "分组", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody ArdRouteFolder ardRouteFolder) {
@@ -102,7 +97,6 @@
      * 删除分组
      */
     @ApiOperation("删除分组")
-    //@PreAuthorize("@ss.hasPermi('route:folder:remove')")
     @Log(title = "分组", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{ids}")
     public AjaxResult remove(@PathVariable String[] ids) {
diff --git a/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteInformationController.java b/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteInformationController.java
index 91ac216..06f0da7 100644
--- a/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteInformationController.java
+++ b/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteInformationController.java
@@ -39,7 +39,6 @@
      * 查询航线(kmz)列表
      */
     @ApiOperation("查询航线(kmz)列表")
-    //@PreAuthorize("@ss.hasPermi('route:information:list')")
     @GetMapping("/list")
     public TableDataInfo list(ArdRouteInformation ardRouteInformation) {
         startPage();
@@ -51,7 +50,6 @@
      * 导出航线(kmz)列表
      */
     @ApiOperation("导出航线(kmz)列表")
-    //@PreAuthorize("@ss.hasPermi('route:information:export')")
     @Log(title = "航线(kmz)", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, ArdRouteInformation ardRouteInformation) {
@@ -64,7 +62,6 @@
      * 获取航线(kmz)详细信息
      */
     @ApiOperation("获取航线(kmz)详细信息")
-    //@PreAuthorize("@ss.hasPermi('route:information:query')")
     @GetMapping(value = "/{id}")
     public AjaxResult getInfo(@PathVariable("id") String id) {
         return success(ardRouteInformationService.selectArdRouteInformationById(id));
@@ -74,7 +71,6 @@
      * 新增航线(kmz)
      */
     @ApiOperation("新增航线(kmz)")
-    //@PreAuthorize("@ss.hasPermi('route:information:add')")
     @Log(title = "航线(kmz)", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody ArdRouteInformation ardRouteInformation) {
@@ -86,7 +82,6 @@
      * 修改航线(kmz)
      */
     @ApiOperation("修改航线(kmz)")
-    //@PreAuthorize("@ss.hasPermi('route:information:edit')")
     @Log(title = "航线(kmz)", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody ArdRouteInformation ardRouteInformation) {
@@ -98,7 +93,6 @@
      * 删除航线(kmz)
      */
     @ApiOperation("删除航线(kmz)")
-    //@PreAuthorize("@ss.hasPermi('route:information:remove')")
     @Log(title = "航线(kmz)", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{ids}")
     public AjaxResult remove(@PathVariable String[] ids) {
@@ -109,7 +103,6 @@
      * 导入航线(kmz)文件
      */
     @ApiOperation("导入航线(kmz)文件")
-    //@PreAuthorize("@ss.hasPermi('route:information:upload')")
     @PostMapping("/upload")
     public AjaxResult upload(@RequestPart("file") MultipartFile file) {
         MinioUploadResult minioUploadResult = ardRouteInformationService.uploadArdRouteInformation(file);
@@ -127,4 +120,14 @@
         return toAjax(ardRouteInformationService.updateRouteInformationFolderId(id,folderId));
     }
 
+    /**
+     * 判断行点是否在禁飞区
+     */
+    @ApiOperation("判断行点是否在禁飞区")
+    @GetMapping("/noFly/{longitude}/{latitude}")
+    public Boolean noFly(@PathVariable("longitude") Double longitude,
+                               @PathVariable("latitude") Double latitude) {
+        return ardRouteInformationService.selectRouteInformationNoFly(longitude,latitude);
+    }
+
 }
diff --git a/ard-route/pom.xml b/ard-route/pom.xml
index 18a8f24..34a8b9a 100644
--- a/ard-route/pom.xml
+++ b/ard-route/pom.xml
@@ -51,6 +51,10 @@
             <groupId>com.ard</groupId>
             <artifactId>ard-oss</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.ard</groupId>
+            <artifactId>ard-system</artifactId>
+        </dependency>
 
     </dependencies>
 
diff --git a/ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInformation.java b/ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInformation.java
index e2b4578..24cd6eb 100644
--- a/ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInformation.java
+++ b/ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInformation.java
@@ -56,4 +56,7 @@
      */
     private UavRouteReq uavRouteReq;
 
+    /** 航线数据 */
+    private byte[] routeData;
+
 }
diff --git a/ard-route/src/main/java/com/ard/route/domain/vo/KmzResultVo.java b/ard-route/src/main/java/com/ard/route/domain/vo/KmzResultVo.java
index f36b173..0e5622e 100644
--- a/ard-route/src/main/java/com/ard/route/domain/vo/KmzResultVo.java
+++ b/ard-route/src/main/java/com/ard/route/domain/vo/KmzResultVo.java
@@ -5,14 +5,19 @@
 @Data
 public class KmzResultVo {
 
+    /** 新文件名称 */
     private String fileNameNew;
 
+    /** Minio文件路径 */
     private String minioUpPath;
 
+    /** 文件路径 */
     private String upPath;
 
+    /** 文件大小 */
     private Double upFileSize;
 
+    /** 返回数据 */
     private String data;
 
 }
diff --git a/ard-route/src/main/java/com/ard/route/service/IArdRouteInformationService.java b/ard-route/src/main/java/com/ard/route/service/IArdRouteInformationService.java
index a08cde3..4de644c 100644
--- a/ard-route/src/main/java/com/ard/route/service/IArdRouteInformationService.java
+++ b/ard-route/src/main/java/com/ard/route/service/IArdRouteInformationService.java
@@ -87,4 +87,13 @@
      */
     public int updateRouteInformationFolderId(String id,String folderId);
 
+    /**
+     * 判断行点是否在禁飞区
+     *
+     * @param longitude 经度
+     * @param latitude 纬度
+     * @return 结果
+     */
+    public Boolean selectRouteInformationNoFly(Double longitude, Double latitude);
+
 }
diff --git a/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInformationServiceImpl.java b/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInformationServiceImpl.java
index c199ee5..7118c21 100644
--- a/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInformationServiceImpl.java
+++ b/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInformationServiceImpl.java
@@ -1,11 +1,19 @@
 package com.ard.route.service.impl;
 
+import java.io.IOException;
 import java.util.List;
+
+import com.ard.common.exception.ControlException;
 import com.ard.common.utils.DateUtils;
 import com.ard.common.utils.file.FileUtils;
 import com.ard.common.utils.uuid.IdUtils;
+import com.ard.data.noflyzone.domain.ArdNoFlyZone;
+import com.ard.data.noflyzone.domain.Vertex;
+import com.ard.data.noflyzone.service.IArdNoFlyZoneService;
+import com.ard.data.noflyzone.utils.NoFlyZoneUtils;
 import com.ard.oss.model.MinioUploadResult;
 import com.ard.oss.service.impl.OssServiceContext;
+import com.ard.route.domain.UavRouteReq;
 import com.ard.route.domain.route.ArdRouteInformation;
 import com.ard.route.domain.vo.KmzResultVo;
 import com.ard.route.service.UavRouteService;
@@ -17,8 +25,7 @@
 
 import javax.annotation.Resource;
 
-import static com.ard.route.util.ToolUtils.extractFilePath;
-import static com.ard.route.util.ToolUtils.getFileNameWithoutExtension;
+import static com.ard.route.util.ToolUtils.*;
 
 /**
  * 航线(kmz)Service业务层处理
@@ -38,6 +45,9 @@
     @Autowired
     private UavRouteService routeService;
 
+    @Resource
+    private IArdNoFlyZoneService ardNoFlyZoneService;
+
     /**
      * 查询航线(kmz)
      * 
@@ -46,7 +56,13 @@
      */
     @Override
     public ArdRouteInformation selectArdRouteInformationById(String id) {
-        return ardRouteInformationMapper.selectArdRouteInformationById(id);
+        ArdRouteInformation ardRouteInformation = ardRouteInformationMapper.selectArdRouteInformationById(id);
+        try {
+            ardRouteInformation.setUavRouteReq((UavRouteReq) deserialize(ardRouteInformation.getRouteData()));
+        } catch (IOException | ClassNotFoundException e) {
+            throw new RuntimeException(e);
+        }
+        return ardRouteInformation;
     }
 
     /**
@@ -73,6 +89,14 @@
         if (ardRouteInformation.getFolderId() == null){
             ardRouteInformation.setFolderId("0");
         }
+        // 航线数据
+        byte[] routeData;
+        try {
+            routeData = serialize(ardRouteInformation.getUavRouteReq());
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        ardRouteInformation.setRouteData(routeData);
         KmzResultVo kmzResult = routeService.buildKmz(ardRouteInformation.getUavRouteReq(), ardRouteInformation.getFileName());
         ardRouteInformationMapper.insertArdRouteInformation(assembly(ardRouteInformation,kmzResult));
         return kmzResult.getUpPath();
@@ -188,6 +212,29 @@
     }
 
     /**
+     * 判断行点是否在禁飞区
+     *
+     * @param longitude 经度
+     * @param latitude 纬度
+     * @return 结果
+     */
+    @Override
+    public Boolean selectRouteInformationNoFly(Double longitude, Double latitude) {
+        if (longitude == null || latitude == null) {
+            throw new ControlException("方法参数中未找到有效经纬度字段,无法判断禁飞区!");
+        }
+        List<ArdNoFlyZone> ardNoFlyZones = ardNoFlyZoneService.selectArdNoFlyZoneList(new ArdNoFlyZone());
+        if (!ardNoFlyZones.isEmpty()) {
+            Vertex vertex = new Vertex(longitude, latitude);
+            boolean inNoFlyZones = NoFlyZoneUtils.isInNoFlyZones(vertex, ardNoFlyZones);
+            if (inNoFlyZones) {
+                throw new ControlException("目标点在禁飞区内,无法执行操作!");
+            }
+        }
+        return true;
+    }
+
+    /**
      * 数据新增航线信息
      */
     private void insertRouteInformation(ArdRouteInformation ardRouteInformation){
diff --git a/ard-route/src/main/java/com/ard/route/service/impl/UavRouteServiceImpl.java b/ard-route/src/main/java/com/ard/route/service/impl/UavRouteServiceImpl.java
index 5192cc9..8ed3af7 100644
--- a/ard-route/src/main/java/com/ard/route/service/impl/UavRouteServiceImpl.java
+++ b/ard-route/src/main/java/com/ard/route/service/impl/UavRouteServiceImpl.java
@@ -205,8 +205,10 @@
                  ZipOutputStream zipOutputStream = new ZipOutputStream(baos)) {
                 zipOutputStream.setLevel(0);
 
-                // 创建KMZ文件内容
+                // 创建 wpmz 目录中的 template.kml 文件条目
                 buildZipFile("wpmz/template.kml", zipOutputStream, kml);
+
+                // 创建 wpmz 目录中的 waylines.wpml 文件条目
                 buildZipFile("wpmz/waylines.wpml", zipOutputStream, wpml);
 
                 zipOutputStream.finish();
diff --git a/ard-route/src/main/java/com/ard/route/util/InitializationUtils.java b/ard-route/src/main/java/com/ard/route/util/InitializationUtils.java
index 090cc8f..621110a 100644
--- a/ard-route/src/main/java/com/ard/route/util/InitializationUtils.java
+++ b/ard-route/src/main/java/com/ard/route/util/InitializationUtils.java
@@ -17,9 +17,11 @@
     public UavRouteReq initialization(UavRouteReq uavRouteReq){
         uavRouteReq.setTemplateType("waypoint");
         // 起始点默认航线第一个点
-        uavRouteReq.setTakeOffRefPoint(
-                uavRouteReq.getRoutePointList().get(0).getLatitude() + "," +
-                        uavRouteReq.getRoutePointList().get(0).getLongitude() + "," + "0");
+        if (uavRouteReq.getTakeOffRefPoint().isEmpty()){
+            uavRouteReq.setTakeOffRefPoint(
+                    uavRouteReq.getRoutePointList().get(0).getLatitude() + "," +
+                            uavRouteReq.getRoutePointList().get(0).getLongitude() + "," + "0");
+        }
         //uavRouteReq.setDroneType(89);
         uavRouteReq.setSubDroneType(0);
         uavRouteReq.setPayloadType(43);
diff --git a/ard-route/src/main/java/com/ard/route/util/ToolUtils.java b/ard-route/src/main/java/com/ard/route/util/ToolUtils.java
index 0e221c5..5c11f9b 100644
--- a/ard-route/src/main/java/com/ard/route/util/ToolUtils.java
+++ b/ard-route/src/main/java/com/ard/route/util/ToolUtils.java
@@ -1,5 +1,6 @@
 package com.ard.route.util;
 
+import java.io.*;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 
@@ -85,4 +86,21 @@
         return "";
     }
 
+    // 对象序列化为字节数组
+    public static byte[] serialize(Object obj) throws IOException {
+        try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
+             ObjectOutputStream oos = new ObjectOutputStream(baos)) {
+            oos.writeObject(obj);
+            return baos.toByteArray();
+        }
+    }
+
+    // 字节数组反序列化为对象
+    public static Object deserialize(byte[] data) throws IOException, ClassNotFoundException {
+        try (ByteArrayInputStream bais = new ByteArrayInputStream(data);
+             ObjectInputStream ois = new ObjectInputStream(bais)) {
+            return ois.readObject();
+        }
+    }
+
 }
diff --git a/ard-route/src/main/resources/mapper/ArdRouteInformationMapper.xml b/ard-route/src/main/resources/mapper/ArdRouteInformationMapper.xml
index 3ef6655..6eca74e 100644
--- a/ard-route/src/main/resources/mapper/ArdRouteInformationMapper.xml
+++ b/ard-route/src/main/resources/mapper/ArdRouteInformationMapper.xml
@@ -15,6 +15,7 @@
         <result property="routeType"    column="route_type"    />
         <result property="aircraft"    column="aircraft"    />
         <result property="aircraftModel"    column="aircraft_model"    />
+        <result property="routeData"    column="route_data"    />
         <result property="createBy"    column="create_by"    />
         <result property="createTime"    column="create_time"    />
         <result property="updateBy"    column="update_by"    />
@@ -32,6 +33,7 @@
                route_type,
                aircraft,
                aircraft_model,
+               route_data,
                create_by,
                create_time,
                update_by,
@@ -69,6 +71,7 @@
             <if test="routeType != null">route_type,</if>
             <if test="aircraft != null">aircraft,</if>
             <if test="aircraftModel != null">aircraft_model,</if>
+            <if test="routeData != null">route_data,</if>
             <if test="createBy != null">create_by,</if>
             <if test="createTime != null">create_time,</if>
             <if test="updateBy != null">update_by,</if>
@@ -85,6 +88,7 @@
             <if test="routeType != null">#{routeType},</if>
             <if test="aircraft != null">#{aircraft},</if>
             <if test="aircraftModel != null">#{aircraftModel},</if>
+            <if test="routeData != null">#{routeData},</if>
             <if test="createBy != null">#{createBy},</if>
             <if test="createTime != null">#{createTime},</if>
             <if test="updateBy != null">#{updateBy},</if>

--
Gitblit v1.9.3