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