From de026326a9df6f4a2192e99cf0e53e7e7b6d445d Mon Sep 17 00:00:00 2001
From: Xiajijian <1176061145@qq.com>
Date: Fri, 24 Oct 2025 17:29:33 +0800
Subject: [PATCH] 1.整理文件管理文件路径。 2.新增航线信息接口业务。 3.优化KMZ文件接口业务逻辑。 4.pom文件修改。 5.增加业务工具类。 6.增加部分业务注解。 7.增加修改无人机状态方法。
---
ard-route/src/main/java/com/ard/route/service/UavRouteService.java | 4
ard-work/src/main/java/com/ard/work/mapper/ArdDroneInfoMapper.java | 10
ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteInformationController.java | 111 +++++++
ard-admin/src/main/java/com/ard/web/controller/route/UavRouteController.java | 23
ard-route/src/main/java/com/ard/route/service/IArdRouteFolderService.java | 2
ard-work/src/main/java/com/ard/work/component/netty/TyTcpClientManager.java | 19 +
ard-route/src/main/java/com/ard/route/service/IArdRouteFileService.java | 2
ard-work/src/main/resources/mapper/ArdDroneInfoMapper.xml | 8
ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteFileController.java | 4
ard-route/src/main/java/com/ard/route/util/RouteFileUtils.java | 21 -
ard-route/src/main/java/com/ard/route/domain/UavRouteReq.java | 20 +
ard-route/src/main/java/com/ard/route/domain/route/ArdRouteFile.java | 2
ard-route/src/main/java/com/ard/route/mapper/ArdRouteFolderMapper.java | 2
ard-route/src/main/resources/mapper/ArdRouteFileMapper.xml | 32 +
ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInformation.java | 37 ++
ard-work/src/main/java/com/ard/work/service/IArdDroneInfoService.java | 5
ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteFolderController.java | 4
ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInformationServiceImpl.java | 93 ++++++
ard-route/src/main/java/com/ard/route/service/impl/ArdRouteFolderServiceImpl.java | 11
ard-route/src/main/resources/mapper/ArdRouteInformationMapper.xml | 98 ++++++
ard-route/src/main/java/com/ard/route/domain/route/ArdRouteFolder.java | 6
ard-route/src/main/java/com/ard/route/util/ToolUtils.java | 43 ++
ard-route/src/main/java/com/ard/route/service/impl/ArdRouteFileServiceImpl.java | 4
ard-route/src/main/java/com/ard/route/mapper/ArdRouteInformationMapper.java | 63 ++++
ard-route/src/main/java/com/ard/route/service/IArdRouteInformationService.java | 63 ++++
ard-work/src/main/java/com/ard/work/mapper/ArdServerInfoMapper.java | 1
ard-route/src/main/java/com/ard/route/mapper/ArdRouteFileMapper.java | 7
ard-route/pom.xml | 9
ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java | 10
ard-route/src/main/java/com/ard/route/service/impl/UavRouteServiceImpl.java | 127 ++++++++
ard-route/src/main/resources/mapper/ArdRouteFolderMapper.xml | 34 +
ard-admin/src/main/resources/application-prod.yml | 10
32 files changed, 802 insertions(+), 83 deletions(-)
diff --git a/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteFileController.java b/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteFileController.java
index 3fa81b3..b7d018d 100644
--- a/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteFileController.java
+++ b/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteFileController.java
@@ -21,7 +21,7 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import com.ard.route.domain.ArdRouteFile;
+import com.ard.route.domain.route.ArdRouteFile;
import com.ard.route.service.IArdRouteFileService;
/**
@@ -32,7 +32,7 @@
*/
@Api(tags = "文件")
@RestController
-@RequestMapping("/file")
+@RequestMapping("/route/file")
public class ArdRouteFileController extends BaseController {
@Autowired
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 f60b012..85b1bd4 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
@@ -22,7 +22,7 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import com.ard.route.domain.ArdRouteFolder;
+import com.ard.route.domain.route.ArdRouteFolder;
import com.ard.route.service.IArdRouteFolderService;
/**
@@ -33,7 +33,7 @@
*/
@Api(tags = "文件夹")
@RestController
-@RequestMapping("/folder")
+@RequestMapping("/route/folder")
public class ArdRouteFolderController extends BaseController {
@Autowired
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
new file mode 100644
index 0000000..fc0f9a8
--- /dev/null
+++ b/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteInformationController.java
@@ -0,0 +1,111 @@
+package com.ard.web.controller.route;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ard.common.utils.poi.ExcelUtil;
+import com.ard.route.domain.route.ArdRouteInformation;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ard.common.annotation.Log;
+import com.ard.common.core.controller.BaseController;
+import com.ard.common.core.domain.AjaxResult;
+import com.ard.common.enums.BusinessType;
+import com.ard.route.service.IArdRouteInformationService;
+import com.ard.common.core.page.TableDataInfo;
+
+/**
+ * 航线(kmz)Controller
+ *
+ * @author xia
+ * @date 2025-10-23
+ */
+@Api(tags = "航线信息接口")
+@RestController
+@RequestMapping("/route/information")
+public class ArdRouteInformationController extends BaseController {
+
+ @Autowired
+ private IArdRouteInformationService ardRouteInformationService;
+
+ /**
+ * 查询航线(kmz)列表
+ */
+ @ApiOperation("查询航线(kmz)列表")
+ @PreAuthorize("@ss.hasPermi('route:information:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(ArdRouteInformation ardRouteInformation) {
+ startPage();
+ List<ArdRouteInformation> list = ardRouteInformationService.selectArdRouteInformationList(ardRouteInformation);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出航线(kmz)列表
+ */
+ @ApiOperation("导出航线(kmz)列表")
+ @PreAuthorize("@ss.hasPermi('route:information:export')")
+ @Log(title = "航线(kmz)", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, ArdRouteInformation ardRouteInformation) {
+ List<ArdRouteInformation> list = ardRouteInformationService.selectArdRouteInformationList(ardRouteInformation);
+ ExcelUtil<ArdRouteInformation> util = new ExcelUtil<ArdRouteInformation>(ArdRouteInformation.class);
+ util.exportExcel(response, list, "航线(kmz)数据");
+ }
+
+ /**
+ * 获取航线(kmz)详细信息
+ */
+ @ApiOperation("获取航线(kmz)详细信息")
+ @PreAuthorize("@ss.hasPermi('route:information:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") String id) {
+ return success(ardRouteInformationService.selectArdRouteInformationById(id));
+ }
+
+ /**
+ * 新增航线(kmz)
+ */
+ @ApiOperation("新增航线(kmz)")
+ @PreAuthorize("@ss.hasPermi('route:information:add')")
+ @Log(title = "航线(kmz)", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody ArdRouteInformation ardRouteInformation) {
+ ardRouteInformation.setCreateBy(getUsername());
+ return toAjax(ardRouteInformationService.insertArdRouteInformation(ardRouteInformation));
+ }
+
+ /**
+ * 修改航线(kmz)
+ */
+ @ApiOperation("修改航线(kmz)")
+ @PreAuthorize("@ss.hasPermi('route:information:edit')")
+ @Log(title = "航线(kmz)", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody ArdRouteInformation ardRouteInformation) {
+ ardRouteInformation.setUpdateBy(getUsername());
+ return toAjax(ardRouteInformationService.updateArdRouteInformation(ardRouteInformation));
+ }
+
+ /**
+ * 删除航线(kmz)
+ */
+ @ApiOperation("删除航线(kmz)")
+ @PreAuthorize("@ss.hasPermi('route:information:remove')")
+ @Log(title = "航线(kmz)", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable String[] ids) {
+ return toAjax(ardRouteInformationService.deleteArdRouteInformationByIds(ids));
+ }
+
+}
diff --git a/ard-admin/src/main/java/com/ard/web/controller/route/UavRouteController.java b/ard-admin/src/main/java/com/ard/web/controller/route/UavRouteController.java
index 10d0cb0..150ada9 100644
--- a/ard-admin/src/main/java/com/ard/web/controller/route/UavRouteController.java
+++ b/ard-admin/src/main/java/com/ard/web/controller/route/UavRouteController.java
@@ -1,18 +1,19 @@
package com.ard.web.controller.route;
+import com.ard.common.core.domain.AjaxResult;
import com.ard.route.domain.UavRouteReq;
import com.ard.route.service.UavRouteService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
+import static com.ard.common.core.domain.AjaxResult.success;
+
@Api(tags = "KMZ文件接口")
-@RequestMapping("/kmz")
+@RequestMapping("/route/kmz")
@RestController
public class UavRouteController {
@@ -23,18 +24,20 @@
* 编辑kmz文件
*/
@ApiOperation("编辑kmz文件")
+ @PreAuthorize("@ss.hasPermi('route:kmz:updateKmz')")
@PostMapping("/updateKmz")
- public void updateKmz(@RequestBody UavRouteReq uavRouteReq) {
- routeService.updateKmz(uavRouteReq);
+ public AjaxResult updateKmz(@RequestBody UavRouteReq uavRouteReq) {
+ return success(routeService.updateKmz(uavRouteReq));
}
/**
* 生成kmz文件
*/
@ApiOperation("生成kmz文件")
- @PostMapping("/buildKmz")
- public void buildKmz(@RequestBody UavRouteReq uavRouteReq){
- routeService.buildKmz(uavRouteReq);
+ @PreAuthorize("@ss.hasPermi('route:kmz:buildKmz')")
+ @PostMapping("/buildKmz/{fileName}")
+ public AjaxResult buildKmz(@RequestBody UavRouteReq uavRouteReq,@PathVariable("fileName") String fileName){
+ return success(routeService.buildKmz(uavRouteReq,fileName));
}
}
diff --git a/ard-admin/src/main/resources/application-prod.yml b/ard-admin/src/main/resources/application-prod.yml
index ef2d25d..e726c5a 100644
--- a/ard-admin/src/main/resources/application-prod.yml
+++ b/ard-admin/src/main/resources/application-prod.yml
@@ -79,3 +79,13 @@
expire: 3600
region: us-east-1
object-dir-prefix: wayline
+
+# 是否是本地测试环境 true / false
+isLocal: false
+
+# 本地KMZ上传的路径
+kmz:
+ path: KmzFile/kmz/
+
+MinioKmz:
+ path: kmz
\ No newline at end of file
diff --git a/ard-route/pom.xml b/ard-route/pom.xml
index 7d7e802..18a8f24 100644
--- a/ard-route/pom.xml
+++ b/ard-route/pom.xml
@@ -42,6 +42,15 @@
<artifactId>swagger-annotations</artifactId>
<version>1.6.2</version>
</dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ <version>5.3.33</version>
+ </dependency>
+ <dependency>
+ <groupId>com.ard</groupId>
+ <artifactId>ard-oss</artifactId>
+ </dependency>
</dependencies>
diff --git a/ard-route/src/main/java/com/ard/route/domain/UavRouteReq.java b/ard-route/src/main/java/com/ard/route/domain/UavRouteReq.java
index e886147..a9fe9e4 100644
--- a/ard-route/src/main/java/com/ard/route/domain/UavRouteReq.java
+++ b/ard-route/src/main/java/com/ard/route/domain/UavRouteReq.java
@@ -14,6 +14,10 @@
/**
* 航线类型
+ * waypoint:航点飞行
+ * mapping2d:建图航拍
+ * mapping3d:倾斜摄影
+ * mappingStrip:航带飞行
*/
private String templateType;
@@ -39,16 +43,29 @@
/**
* 负载图片存储类型
+ * wide:存储广角镜头照片
+ * zoom:存储变焦镜头照片
+ * ir:存储红外镜头照片
+ * narrow_band: 存储窄带镜头拍摄照片
+ * visable:可见光照片
+ * * 注:存储多个镜头照片,格式
*/
private String imageFormat;
/**
* 航线结束动作
+ * goHome:飞行器完成航线任务后,退出航线模式并返航。noAction:飞行器完成航线任务后,退出航线模式。
+ * autoLand:飞行器完成航线任务后,退出航线模式并原地降落。
+ * gotoFirstWaypoint:飞行器完成航线任务后,立即飞向航线起始点,到达后退出航线模式。
+ * * 注:以上动作执行过程,若飞行器退出了航线模式且进入失控状态,则会优先执行失控动作。
*/
private String finishAction;
/**
* 失控动作
+ * goBack:返航。飞行器从失控位置飞向起飞点
+ * landing:降落。飞行器从失控位置原地降落
+ * hover:悬停。飞行器从失控位置悬停
*/
private String exitOnRcLostAction;
@@ -59,6 +76,7 @@
/**
* 全局航线飞行速度
+ * 1 - 15
*/
private Double autoFlightSpeed;
@@ -74,6 +92,8 @@
/**
* 云台俯仰角控制模式
+ * manual:手动控制。飞行器从一个航点飞向下一个航点的过程中,支持用户手动控制云台的俯仰角度。若无用户控制,则保持飞离航点时的云台俯仰角度。
+ * usePointSetting:依照每个航点设置。飞行器从一个航点飞向下一个航点的过程中,云台俯仰角均匀过渡至下一个航点的俯仰角。
*/
private String gimbalPitchMode;
diff --git a/ard-route/src/main/java/com/ard/route/domain/ArdRouteFile.java b/ard-route/src/main/java/com/ard/route/domain/route/ArdRouteFile.java
similarity index 95%
rename from ard-route/src/main/java/com/ard/route/domain/ArdRouteFile.java
rename to ard-route/src/main/java/com/ard/route/domain/route/ArdRouteFile.java
index 7c86914..5b8b989 100644
--- a/ard-route/src/main/java/com/ard/route/domain/ArdRouteFile.java
+++ b/ard-route/src/main/java/com/ard/route/domain/route/ArdRouteFile.java
@@ -1,4 +1,4 @@
-package com.ard.route.domain;
+package com.ard.route.domain.route;
import java.util.Date;
import java.util.List;
diff --git a/ard-route/src/main/java/com/ard/route/domain/ArdRouteFolder.java b/ard-route/src/main/java/com/ard/route/domain/route/ArdRouteFolder.java
similarity index 80%
rename from ard-route/src/main/java/com/ard/route/domain/ArdRouteFolder.java
rename to ard-route/src/main/java/com/ard/route/domain/route/ArdRouteFolder.java
index f3757d7..79c65f9 100644
--- a/ard-route/src/main/java/com/ard/route/domain/ArdRouteFolder.java
+++ b/ard-route/src/main/java/com/ard/route/domain/route/ArdRouteFolder.java
@@ -1,4 +1,4 @@
-package com.ard.route.domain;
+package com.ard.route.domain.route;
import java.util.List;
@@ -24,6 +24,10 @@
@Excel(name = "文件夹名称")
private String fileName;
+ /** 序列号 */
+ @Excel(name = "序列号")
+ private Integer serialNumber;
+
private List<ArdRouteFile> ardRouteFileLs;
}
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
new file mode 100644
index 0000000..2473649
--- /dev/null
+++ b/ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInformation.java
@@ -0,0 +1,37 @@
+package com.ard.route.domain.route;
+
+import com.ard.common.annotation.Excel;
+import com.ard.common.core.domain.BaseEntity;
+import lombok.Data;
+
+/**
+ * 航线(kmz)对象 ard_route_information
+ *
+ * @author xia
+ * @date 2025-10-23
+ */
+@Data
+public class ArdRouteInformation extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /** ID */
+ private String id;
+
+ /** 文件名称 */
+ @Excel(name = "文件名称")
+ private String fileName;
+
+ /** 新文件名称 */
+ @Excel(name = "新文件名称")
+ private String fileNameNew;
+
+ /** 文件路径 */
+ @Excel(name = "文件路径")
+ private String upPath;
+
+ /** 文件大小 */
+ @Excel(name = "文件大小")
+ private Double upFileSize;
+
+}
diff --git a/ard-route/src/main/java/com/ard/route/mapper/ArdRouteFileMapper.java b/ard-route/src/main/java/com/ard/route/mapper/ArdRouteFileMapper.java
index bc965b2..45321db 100644
--- a/ard-route/src/main/java/com/ard/route/mapper/ArdRouteFileMapper.java
+++ b/ard-route/src/main/java/com/ard/route/mapper/ArdRouteFileMapper.java
@@ -1,7 +1,7 @@
package com.ard.route.mapper;
import java.util.List;
-import com.ard.route.domain.ArdRouteFile;
+import com.ard.route.domain.route.ArdRouteFile;
/**
* 文件Mapper接口
@@ -62,8 +62,9 @@
/**
* 根据所属文件夹ID,删除文件
*
- * @param folderId 所属文件夹ID
+ * @param folderIds 所属文件夹ID
* @return 结果
*/
- public int deleteArdRouteFileByFolderId(String folderId);
+ public int deleteRouteFileByFolderIds(String[] folderIds);
+
}
diff --git a/ard-route/src/main/java/com/ard/route/mapper/ArdRouteFolderMapper.java b/ard-route/src/main/java/com/ard/route/mapper/ArdRouteFolderMapper.java
index c4df0f7..95caa00 100644
--- a/ard-route/src/main/java/com/ard/route/mapper/ArdRouteFolderMapper.java
+++ b/ard-route/src/main/java/com/ard/route/mapper/ArdRouteFolderMapper.java
@@ -1,7 +1,7 @@
package com.ard.route.mapper;
import java.util.List;
-import com.ard.route.domain.ArdRouteFolder;
+import com.ard.route.domain.route.ArdRouteFolder;
/**
* 文件夹Mapper接口
diff --git a/ard-route/src/main/java/com/ard/route/mapper/ArdRouteInformationMapper.java b/ard-route/src/main/java/com/ard/route/mapper/ArdRouteInformationMapper.java
new file mode 100644
index 0000000..ebe8d97
--- /dev/null
+++ b/ard-route/src/main/java/com/ard/route/mapper/ArdRouteInformationMapper.java
@@ -0,0 +1,63 @@
+package com.ard.route.mapper;
+
+import com.ard.route.domain.route.ArdRouteInformation;
+
+import java.util.List;
+
+/**
+ * 航线(kmz)Mapper接口
+ *
+ * @author xia
+ * @date 2025-10-23
+ */
+public interface ArdRouteInformationMapper {
+
+ /**
+ * 查询航线(kmz)
+ *
+ * @param id 航线(kmz)主键
+ * @return 航线(kmz)
+ */
+ public ArdRouteInformation selectArdRouteInformationById(String id);
+
+ /**
+ * 查询航线(kmz)列表
+ *
+ * @param ardRouteInformation 航线(kmz)
+ * @return 航线(kmz)集合
+ */
+ public List<ArdRouteInformation> selectArdRouteInformationList(ArdRouteInformation ardRouteInformation);
+
+ /**
+ * 新增航线(kmz)
+ *
+ * @param ardRouteInformation 航线(kmz)
+ * @return 结果
+ */
+ public int insertArdRouteInformation(ArdRouteInformation ardRouteInformation);
+
+ /**
+ * 修改航线(kmz)
+ *
+ * @param ardRouteInformation 航线(kmz)
+ * @return 结果
+ */
+ public int updateArdRouteInformation(ArdRouteInformation ardRouteInformation);
+
+ /**
+ * 删除航线(kmz)
+ *
+ * @param id 航线(kmz)主键
+ * @return 结果
+ */
+ public int deleteArdRouteInformationById(String id);
+
+ /**
+ * 批量删除航线(kmz)
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteArdRouteInformationByIds(String[] ids);
+
+}
diff --git a/ard-route/src/main/java/com/ard/route/service/IArdRouteFileService.java b/ard-route/src/main/java/com/ard/route/service/IArdRouteFileService.java
index ce3185b..405f720 100644
--- a/ard-route/src/main/java/com/ard/route/service/IArdRouteFileService.java
+++ b/ard-route/src/main/java/com/ard/route/service/IArdRouteFileService.java
@@ -1,7 +1,7 @@
package com.ard.route.service;
import java.util.List;
-import com.ard.route.domain.ArdRouteFile;
+import com.ard.route.domain.route.ArdRouteFile;
/**
* 文件Service接口
diff --git a/ard-route/src/main/java/com/ard/route/service/IArdRouteFolderService.java b/ard-route/src/main/java/com/ard/route/service/IArdRouteFolderService.java
index 652673b..126d96b 100644
--- a/ard-route/src/main/java/com/ard/route/service/IArdRouteFolderService.java
+++ b/ard-route/src/main/java/com/ard/route/service/IArdRouteFolderService.java
@@ -3,7 +3,7 @@
import java.util.List;
import java.util.Map;
-import com.ard.route.domain.ArdRouteFolder;
+import com.ard.route.domain.route.ArdRouteFolder;
/**
* 文件夹Service接口
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
new file mode 100644
index 0000000..41cd1f5
--- /dev/null
+++ b/ard-route/src/main/java/com/ard/route/service/IArdRouteInformationService.java
@@ -0,0 +1,63 @@
+package com.ard.route.service;
+
+import com.ard.route.domain.route.ArdRouteInformation;
+
+import java.util.List;
+
+/**
+ * 航线(kmz)Service接口
+ *
+ * @author xia
+ * @date 2025-10-23
+ */
+public interface IArdRouteInformationService {
+
+ /**
+ * 查询航线(kmz)
+ *
+ * @param id 航线(kmz)主键
+ * @return 航线(kmz)
+ */
+ public ArdRouteInformation selectArdRouteInformationById(String id);
+
+ /**
+ * 查询航线(kmz)列表
+ *
+ * @param ardRouteInformation 航线(kmz)
+ * @return 航线(kmz)集合
+ */
+ public List<ArdRouteInformation> selectArdRouteInformationList(ArdRouteInformation ardRouteInformation);
+
+ /**
+ * 新增航线(kmz)
+ *
+ * @param ardRouteInformation 航线(kmz)
+ * @return 结果
+ */
+ public int insertArdRouteInformation(ArdRouteInformation ardRouteInformation);
+
+ /**
+ * 修改航线(kmz)
+ *
+ * @param ardRouteInformation 航线(kmz)
+ * @return 结果
+ */
+ public int updateArdRouteInformation(ArdRouteInformation ardRouteInformation);
+
+ /**
+ * 批量删除航线(kmz)
+ *
+ * @param ids 需要删除的航线(kmz)主键集合
+ * @return 结果
+ */
+ public int deleteArdRouteInformationByIds(String[] ids);
+
+ /**
+ * 删除航线(kmz)信息
+ *
+ * @param id 航线(kmz)主键
+ * @return 结果
+ */
+ public int deleteArdRouteInformationById(String id);
+
+}
diff --git a/ard-route/src/main/java/com/ard/route/service/UavRouteService.java b/ard-route/src/main/java/com/ard/route/service/UavRouteService.java
index 6aef571..d2d50d3 100644
--- a/ard-route/src/main/java/com/ard/route/service/UavRouteService.java
+++ b/ard-route/src/main/java/com/ard/route/service/UavRouteService.java
@@ -7,11 +7,11 @@
/**
* 编辑kmz文件
*/
- void updateKmz(UavRouteReq uavRouteReq);
+ public String updateKmz(UavRouteReq uavRouteReq);
/**
* 生成kmz文件(带航点)
*/
- void buildKmz(UavRouteReq uavRouteReq);
+ public String buildKmz(UavRouteReq uavRouteReq, String fileName);
}
diff --git a/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteFileServiceImpl.java b/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteFileServiceImpl.java
index 175ba15..568796a 100644
--- a/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteFileServiceImpl.java
+++ b/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteFileServiceImpl.java
@@ -1,16 +1,14 @@
package com.ard.route.service.impl;
import java.util.List;
-import java.util.UUID;
import com.ard.common.annotation.DataScope;
import com.ard.common.utils.DateUtils;
-import com.ard.common.utils.SecurityUtils;
import com.ard.common.utils.uuid.IdUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ard.route.mapper.ArdRouteFileMapper;
-import com.ard.route.domain.ArdRouteFile;
+import com.ard.route.domain.route.ArdRouteFile;
import com.ard.route.service.IArdRouteFileService;
/**
diff --git a/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteFolderServiceImpl.java b/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteFolderServiceImpl.java
index 2b0a1b3..fcd9df0 100644
--- a/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteFolderServiceImpl.java
+++ b/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteFolderServiceImpl.java
@@ -6,14 +6,13 @@
import com.ard.common.annotation.DataScope;
import com.ard.common.utils.DateUtils;
-import com.ard.common.utils.SecurityUtils;
import com.ard.common.utils.uuid.IdUtils;
-import com.ard.route.domain.ArdRouteFile;
+import com.ard.route.domain.route.ArdRouteFile;
import com.ard.route.mapper.ArdRouteFileMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ard.route.mapper.ArdRouteFolderMapper;
-import com.ard.route.domain.ArdRouteFolder;
+import com.ard.route.domain.route.ArdRouteFolder;
import com.ard.route.service.IArdRouteFolderService;
import org.springframework.transaction.annotation.Transactional;
@@ -105,12 +104,8 @@
@Transactional(rollbackFor = Exception.class)
public Map<String, Integer> deleteArdRouteFolderByIds(String[] ids) {
Map<String, Integer> result = new HashMap<>();
- int fileAdd = 0;
// 删除文件夹的同时也删除文件夹下的所有文件
- for (String folderId : ids) {
- ardRouteFileMapper.deleteArdRouteFileByFolderId(folderId);
- fileAdd ++;
- }
+ int fileAdd = ardRouteFileMapper.deleteRouteFileByFolderIds(ids);
result.put("file", fileAdd);
int folderCount = ardRouteFolderMapper.deleteArdRouteFolderByIds(ids);
result.put("folder", folderCount);
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
new file mode 100644
index 0000000..a05968e
--- /dev/null
+++ b/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInformationServiceImpl.java
@@ -0,0 +1,93 @@
+package com.ard.route.service.impl;
+
+import java.util.List;
+import com.ard.common.utils.DateUtils;
+import com.ard.common.utils.uuid.IdUtils;
+import com.ard.route.domain.route.ArdRouteInformation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ard.route.mapper.ArdRouteInformationMapper;
+import com.ard.route.service.IArdRouteInformationService;
+
+/**
+ * 航线(kmz)Service业务层处理
+ *
+ * @author xia
+ * @date 2025-10-23
+ */
+@Service
+public class ArdRouteInformationServiceImpl implements IArdRouteInformationService {
+
+ @Autowired
+ private ArdRouteInformationMapper ardRouteInformationMapper;
+
+ /**
+ * 查询航线(kmz)
+ *
+ * @param id 航线(kmz)主键
+ * @return 航线(kmz)
+ */
+ @Override
+ public ArdRouteInformation selectArdRouteInformationById(String id) {
+ return ardRouteInformationMapper.selectArdRouteInformationById(id);
+ }
+
+ /**
+ * 查询航线(kmz)列表
+ *
+ * @param ardRouteInformation 航线(kmz)
+ * @return 航线(kmz)
+ */
+ @Override
+ public List<ArdRouteInformation> selectArdRouteInformationList(ArdRouteInformation ardRouteInformation) {
+ return ardRouteInformationMapper.selectArdRouteInformationList(ardRouteInformation);
+ }
+
+ /**
+ * 新增航线(kmz)
+ *
+ * @param ardRouteInformation 航线(kmz)
+ * @return 结果
+ */
+ @Override
+ public int insertArdRouteInformation(ArdRouteInformation ardRouteInformation) {
+ ardRouteInformation.setId(IdUtils.simpleUUID());
+ ardRouteInformation.setCreateTime(DateUtils.getNowDate());
+ return ardRouteInformationMapper.insertArdRouteInformation(ardRouteInformation);
+ }
+
+ /**
+ * 修改航线(kmz)
+ *
+ * @param ardRouteInformation 航线(kmz)
+ * @return 结果
+ */
+ @Override
+ public int updateArdRouteInformation(ArdRouteInformation ardRouteInformation) {
+ ardRouteInformation.setUpdateTime(DateUtils.getNowDate());
+ return ardRouteInformationMapper.updateArdRouteInformation(ardRouteInformation);
+ }
+
+ /**
+ * 批量删除航线(kmz)
+ *
+ * @param ids 需要删除的航线(kmz)主键
+ * @return 结果
+ */
+ @Override
+ public int deleteArdRouteInformationByIds(String[] ids) {
+ return ardRouteInformationMapper.deleteArdRouteInformationByIds(ids);
+ }
+
+ /**
+ * 删除航线(kmz)信息
+ *
+ * @param id 航线(kmz)主键
+ * @return 结果
+ */
+ @Override
+ public int deleteArdRouteInformationById(String id) {
+ return ardRouteInformationMapper.deleteArdRouteInformationById(id);
+ }
+
+}
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 33b596b..a8aeee0 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
@@ -3,26 +3,43 @@
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.io.FileUtil;
+import com.ard.common.utils.SecurityUtils;
+import com.ard.oss.service.impl.OssServiceContext;
import com.ard.route.constant.FileTypeConstants;
import com.ard.route.domain.RoutePointReq;
import com.ard.route.domain.UavRouteReq;
import com.ard.route.domain.WaypointHeadingReq;
import com.ard.route.domain.WaypointTurnReq;
import com.ard.route.domain.kml.*;
+import com.ard.route.domain.route.ArdRouteInformation;
import com.ard.route.enums.kml.ExitOnRCLostEnums;
+import com.ard.route.service.IArdRouteInformationService;
import com.ard.route.util.RouteFileUtils;
import com.ard.route.service.UavRouteService;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.ArchiveInputStream;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+import javax.annotation.Resource;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.File;
+import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
+import java.util.zip.ZipOutputStream;
+
+import static com.ard.route.util.RouteFileUtils.*;
+import static com.ard.route.util.ToolUtils.getFileNameWithoutExtension;
/**
* Author:songjian
@@ -31,8 +48,28 @@
@Service
public class UavRouteServiceImpl implements UavRouteService {
+ @Value("${isLocal}")
+ private Boolean isLocal;
+
+ @Value("${kmz.path}")
+ private String localFilePath;
+
+ @Value("${MinioKmz.path}")
+ private String kmzPath;
+
+ @Resource
+ private OssServiceContext ossService;
+
+ @Resource
+ private IArdRouteInformationService ardRouteInformationService;
+
+ /**
+ * XML 头部
+ */
+ private static final String XML_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+
@Override
- public void updateKmz(UavRouteReq uavRouteReq) {
+ public String updateKmz(UavRouteReq uavRouteReq) {
// TODO 替换本地文件路径!!!
File file = FileUtil.file("/Users/songjian/Project/IdeaProjects/dj-uav/file/kmz/航线kmz文件.kmz");
try (ArchiveInputStream archiveInputStream = new ZipArchiveInputStream(FileUtil.getInputStream(file))) {
@@ -51,9 +88,10 @@
this.handleRouteUpdate(wpmlInfo, uavRouteReq, FileTypeConstants.WPML, kmlParams);
}
}
- RouteFileUtils.buildKmz("更新航线kmz文件", kmlInfo, wpmlInfo);
+ return RouteFileUtils.buildKmz("更新航线kmz文件", kmlInfo, wpmlInfo, kmzPath);
} catch (Exception e) {
e.printStackTrace();
+ return "更新航线kmz文件失败";
}
}
@@ -99,10 +137,91 @@
}
@Override
- public void buildKmz(UavRouteReq uavRouteReq) {
+ public String buildKmz(UavRouteReq uavRouteReq, String fileName) {
KmlParams kmlParams = new KmlParams();
BeanUtils.copyProperties(uavRouteReq, kmlParams);
kmlParams.setRoutePointList(BeanUtil.copyToList(uavRouteReq.getRoutePointList(), RoutePointInfo.class));
- RouteFileUtils.buildKmz("航线kmz文件AAAAAA", kmlParams);
+ return buildKmz(fileName, kmlParams);
+ }
+
+ /**
+ * 生成航线 KMZ 文件
+ *
+ * @param fileName 文件名
+ * @param kmlParams 参数对象
+ * @return 本地文件路径
+ */
+ public String buildKmz(String fileName, KmlParams kmlParams) {
+ KmlInfo kmlInfo = buildKml(kmlParams);
+ KmlInfo wpmlInfo = buildWpml(kmlParams);
+ return buildKmz(fileName, kmlInfo, wpmlInfo);
+ }
+
+ /**
+ * 生成航线 KMZ 文件
+ *
+ * @param fileName 文件名
+ * @param kmlInfo kml 文件信息
+ * @param wpmlInfo wpml 文件信息
+ * @return 本地文件路径
+ */
+ public String buildKmz(String fileName, KmlInfo kmlInfo, KmlInfo wpmlInfo) {
+ XStream xStream = new XStream(new DomDriver());
+ xStream.processAnnotations(KmlInfo.class);
+ xStream.addImplicitCollection(KmlActionGroup.class, "action");
+
+ String kml = XML_HEADER + xStream.toXML(kmlInfo);
+ String wpml = XML_HEADER + xStream.toXML(wpmlInfo);
+
+ // 判断本地生成kmz文件
+ if (isLocal) {
+ try (FileOutputStream fileOutputStream = new FileOutputStream(localFilePath + fileName + ".kmz");
+ ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream)) {
+ zipOutputStream.setLevel(0); // 0 表示不压缩,存储方式
+
+ // 创建KMZ文件内容
+ buildZipFile("wpmz/template.kml", zipOutputStream, kml);
+ buildZipFile("wpmz/waylines.wpml", zipOutputStream, wpml);
+
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return localFilePath + fileName + ".kmz";
+ }else {
+ try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ZipOutputStream zipOutputStream = new ZipOutputStream(baos)) {
+ zipOutputStream.setLevel(0);
+
+ // 创建KMZ文件内容
+ buildZipFile("wpmz/template.kml", zipOutputStream, kml);
+ buildZipFile("wpmz/waylines.wpml", zipOutputStream, wpml);
+
+ zipOutputStream.finish();
+ zipOutputStream.flush();
+
+ // 获取文件大小
+ Double fileSize = (double) baos.size(); // 字节数
+
+ // 创建MultipartFile对象
+ MultipartFile multipartFile = new MockMultipartFile(
+ fileName + ".kmz",
+ fileName + ".kmz",
+ "application/vnd.google-earth.kmz",
+ new ByteArrayInputStream(baos.toByteArray())
+ );
+ String kmzFilePath = ossService.upload(kmzPath,multipartFile);
+ // KMZ信息管理
+ ArdRouteInformation ardRouteInformation = new ArdRouteInformation();
+ ardRouteInformation.setFileName(fileName);
+ ardRouteInformation.setFileNameNew(getFileNameWithoutExtension(kmzFilePath));
+ ardRouteInformation.setUpPath(kmzFilePath);
+ ardRouteInformation.setUpFileSize(fileSize);
+ ardRouteInformation.setCreateBy(SecurityUtils.getUsername());
+ ardRouteInformationService.insertArdRouteInformation(ardRouteInformation);
+ return kmzFilePath;
+ } catch (Exception e) {
+ throw new RuntimeException("KMZ文件生成或上传失败", e);
+ }
+ }
}
}
diff --git a/ard-route/src/main/java/com/ard/route/util/RouteFileUtils.java b/ard-route/src/main/java/com/ard/route/util/RouteFileUtils.java
index cff95f2..647c430 100644
--- a/ard-route/src/main/java/com/ard/route/util/RouteFileUtils.java
+++ b/ard-route/src/main/java/com/ard/route/util/RouteFileUtils.java
@@ -57,25 +57,12 @@
/**
* 生成航线 KMZ 文件
*
- * @param fileName 文件名
- * @param kmlParams 参数对象
- * @return 本地文件路径
- */
- public static String buildKmz(String fileName, KmlParams kmlParams) {
- KmlInfo kmlInfo = buildKml(kmlParams);
- KmlInfo wpmlInfo = buildWpml(kmlParams);
- return buildKmz(fileName, kmlInfo, wpmlInfo);
- }
-
- /**
- * 生成航线 KMZ 文件
- *
* @param fileName 文件名
* @param kmlInfo kml 文件信息
* @param wpmlInfo wpml 文件信息
* @return 本地文件路径
*/
- public static String buildKmz(String fileName, KmlInfo kmlInfo, KmlInfo wpmlInfo) {
+ public static String buildKmz(String fileName, KmlInfo kmlInfo, KmlInfo wpmlInfo, String kmzFilePath) {
XStream xStream = new XStream(new DomDriver());
xStream.processAnnotations(KmlInfo.class);
xStream.addImplicitCollection(KmlActionGroup.class, "action");
@@ -83,7 +70,7 @@
String kml = XML_HEADER + xStream.toXML(kmlInfo);
String wpml = XML_HEADER + xStream.toXML(wpmlInfo);
- try (FileOutputStream fileOutputStream = new FileOutputStream(LOCAL_KMZ_FILE_PATH + fileName + ".kmz");
+ try (FileOutputStream fileOutputStream = new FileOutputStream(kmzFilePath + fileName + ".kmz");
ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream)) {
zipOutputStream.setLevel(0); // 0 表示不压缩,存储方式
@@ -96,10 +83,10 @@
} catch (Exception e) {
throw new RuntimeException(e);
}
- return LOCAL_KMZ_FILE_PATH + fileName + ".kmz";
+ return kmzFilePath + fileName + ".kmz";
}
- private static void buildZipFile(String name, ZipOutputStream zipOutputStream, String content) throws IOException {
+ public static void buildZipFile(String name, ZipOutputStream zipOutputStream, String content) throws IOException {
ZipEntry kmlEntry = new ZipEntry(name);
zipOutputStream.putNextEntry(kmlEntry);
// 将内容写入 ZIP 条目
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
new file mode 100644
index 0000000..3721f3f
--- /dev/null
+++ b/ard-route/src/main/java/com/ard/route/util/ToolUtils.java
@@ -0,0 +1,43 @@
+package com.ard.route.util;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * 工具类
+ */
+public class ToolUtils {
+
+ /**
+ * 生成KMZ文件名称规则
+ */
+ public static String buildKmzFileName() {
+ // 获取当前日期时间
+ LocalDateTime now = LocalDateTime.now();
+ return "测试KMZ文件" + "_" + now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss"));
+ }
+
+ /**
+ * 根据路径截取文件名
+ */
+ public static String getFileNameWithoutExtension(String filePath) {
+ if (filePath == null || filePath.trim().isEmpty()) {
+ return "";
+ }
+
+ // 规范化路径,处理正斜杠和反斜杠
+ String normalizedPath = filePath.replace('\\', '/');
+
+ // 获取文件名(含扩展名)
+ String fileNameWithExt = normalizedPath.substring(normalizedPath.lastIndexOf('/') + 1);
+
+ // 去除扩展名
+ int lastDotIndex = fileNameWithExt.lastIndexOf('.');
+ if (lastDotIndex > 0) {
+ return fileNameWithExt.substring(0, lastDotIndex);
+ }
+
+ return fileNameWithExt;
+ }
+
+}
diff --git a/ard-route/src/main/resources/mapper/ArdRouteFileMapper.xml b/ard-route/src/main/resources/mapper/ArdRouteFileMapper.xml
index 1a64382..4da07b8 100644
--- a/ard-route/src/main/resources/mapper/ArdRouteFileMapper.xml
+++ b/ard-route/src/main/resources/mapper/ArdRouteFileMapper.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ard.route.mapper.ArdRouteFileMapper">
-
+
<resultMap type="ArdRouteFile" id="ArdRouteFileResult">
<result property="id" column="id" />
<result property="name" column="name" />
@@ -33,15 +33,19 @@
<select id="selectArdRouteFileList" parameterType="ArdRouteFile" resultMap="ArdRouteFileResult">
<include refid="selectArdRouteFileVo"/>
- <where>
+ <where>
<if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if>
<if test="folderId != null and folderId != ''"> and folder_id = #{folderId}</if>
<if test="fileType != null and fileType != ''"> and file_type = #{fileType}</if>
<if test="fileSize != null "> and file_size = #{fileSize}</if>
<if test="filePath != null and filePath != ''"> and file_path = #{filePath}</if>
+ <if test="createBy != null and createBy != ''"> and create_by = #{createBy}</if>
+ <if test="createTime != null "> and create_time = #{createTime}</if>
+ <if test="updateBy != null and updateBy != ''"> and update_by = #{updateBy}</if>
+ <if test="updateTime != null "> and update_time = #{updateTime}</if>
</where>
</select>
-
+
<select id="selectArdRouteFileById" parameterType="String" resultMap="ArdRouteFileResult">
<include refid="selectArdRouteFileVo"/>
where id = #{id}
@@ -60,7 +64,7 @@
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
- </trim>
+ </trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
<if test="name != null">#{name},</if>
@@ -72,7 +76,7 @@
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
- </trim>
+ </trim>
</insert>
<update id="updateArdRouteFile" parameterType="ArdRouteFile">
@@ -95,14 +99,18 @@
delete from ard_route_file where id = #{id}
</delete>
- <delete id="deleteArdRouteFileByFolderId" parameterType="String">
- delete from ard_route_file where folder_id = #{folderId}
- </delete>
-
<delete id="deleteArdRouteFileByIds" parameterType="String">
- delete from ard_route_file where id in
+ delete from ard_route_file where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
+
+ <delete id="deleteRouteFileByFolderIds" parameterType="String">
+ delete from ard_route_file where folder_id in
+ <foreach item="folderId" collection="array" open="(" separator="," close=")">
+ #{folderId}
+ </foreach>
+ </delete>
+
</mapper>
\ No newline at end of file
diff --git a/ard-route/src/main/resources/mapper/ArdRouteFolderMapper.xml b/ard-route/src/main/resources/mapper/ArdRouteFolderMapper.xml
index 29385ce..f3b8ac0 100644
--- a/ard-route/src/main/resources/mapper/ArdRouteFolderMapper.xml
+++ b/ard-route/src/main/resources/mapper/ArdRouteFolderMapper.xml
@@ -1,25 +1,34 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ard.route.mapper.ArdRouteFolderMapper">
-
+
<resultMap type="ArdRouteFolder" id="ArdRouteFolderResult">
<result property="id" column="id" />
<result property="fileName" column="file_name" />
+ <result property="serialNumber" column="serial_number" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
+ <!-- 关联 ArdRouteFile 对象 -->
+ <association property="ardRouteFile"
+ javaType="com.ard.route.domain.route.ArdRouteFile"
+ column="folder_id"
+ autoMapping="true"
+ select="selectArdRouteFile">
+ </association>
</resultMap>
- <select id="selectArdRouteFile" resultType="com.ard.route.domain.ArdRouteFile">
+ <select id="selectArdRouteFile" resultType="com.ard.route.domain.route.ArdRouteFile">
select * from ard_route_file where id = #{folderId}
</select>
<sql id="selectArdRouteFolderVo">
select id,
file_name,
+ serial_number,
create_by,
create_time,
update_by,
@@ -29,11 +38,15 @@
<select id="selectArdRouteFolderList" parameterType="ArdRouteFolder" resultMap="ArdRouteFolderResult">
<include refid="selectArdRouteFolderVo"/>
- <where>
+ <where>
<if test="fileName != null and fileName != ''"> and file_name like concat('%', #{fileName}, '%')</if>
+ <if test="createdBy != null and createdBy != ''"> and created_by = #{createdBy}</if>
+ <if test="createdTime != null "> and created_time = #{createdTime}</if>
+ <if test="updatedBy != null and updatedBy != ''"> and updated_by = #{updatedBy}</if>
+ <if test="updatedTime != null "> and updated_time = #{updatedTime}</if>
</where>
</select>
-
+
<select id="selectArdRouteFolderById" parameterType="String" resultMap="ArdRouteFolderResult">
<include refid="selectArdRouteFolderVo"/>
where id = #{id}
@@ -44,25 +57,28 @@
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>
<if test="fileName != null">file_name,</if>
+ <if test="serialNumber != null">serial_number,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
- </trim>
+ </trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
<if test="fileName != null">#{fileName},</if>
+ <if test="serialNumber != null">#{serialNumber},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
- </trim>
+ </trim>
</insert>
<update id="updateArdRouteFolder" parameterType="ArdRouteFolder">
update ard_route_folder
<trim prefix="SET" suffixOverrides=",">
<if test="fileName != null">file_name = #{fileName},</if>
+ <if test="serialNumber != null">serial_number = #{serialNumber},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
@@ -76,7 +92,7 @@
</delete>
<delete id="deleteArdRouteFolderByIds" parameterType="String">
- delete from ard_route_folder where id in
+ delete from ard_route_folder where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
diff --git a/ard-route/src/main/resources/mapper/ArdRouteInformationMapper.xml b/ard-route/src/main/resources/mapper/ArdRouteInformationMapper.xml
new file mode 100644
index 0000000..c525b94
--- /dev/null
+++ b/ard-route/src/main/resources/mapper/ArdRouteInformationMapper.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ard.route.mapper.ArdRouteInformationMapper">
+
+ <resultMap type="ArdRouteInformation" id="ArdRouteInformationResult">
+ <result property="id" column="id" />
+ <result property="fileName" column="file_name" />
+ <result property="fileNameNew" column="file_name_new" />
+ <result property="upPath" column="up_path" />
+ <result property="upFileSize" column="up_file_size" />
+ <result property="createBy" column="create_by" />
+ <result property="createTime" column="create_time" />
+ <result property="updateBy" column="update_by" />
+ <result property="updateTime" column="update_time" />
+ </resultMap>
+
+ <sql id="selectArdRouteInformationVo">
+ select id,
+ file_name,
+ file_name_new,
+ up_path,
+ up_file_size,
+ create_by,
+ create_time,
+ update_by,
+ update_time
+ from ard_route_information
+ </sql>
+
+ <select id="selectArdRouteInformationList" parameterType="ArdRouteInformation" resultMap="ArdRouteInformationResult">
+ <include refid="selectArdRouteInformationVo"/>
+ <where>
+ <if test="fileName != null and fileName != ''"> and file_name like concat('%', #{fileName}, '%')</if>
+ <if test="upPath != null and upPath != ''"> and up_path = #{upPath}</if>
+ <if test="upFileSize != null "> and up_file_size = #{upFileSize}</if>
+ </where>
+ </select>
+
+ <select id="selectArdRouteInformationById" parameterType="String" resultMap="ArdRouteInformationResult">
+ <include refid="selectArdRouteInformationVo"/>
+ where id = #{id}
+ </select>
+
+ <insert id="insertArdRouteInformation" parameterType="ArdRouteInformation">
+ insert into ard_route_information
+ <trim prefix="(" suffix=")" suffixOverrides=",">
+ <if test="id != null">id,</if>
+ <if test="fileName != null">file_name,</if>
+ <if test="fileNameNew != null">file_name_new,</if>
+ <if test="upPath != null">up_path,</if>
+ <if test="upFileSize != null">up_file_size,</if>
+ <if test="createBy != null">create_by,</if>
+ <if test="createTime != null">create_time,</if>
+ <if test="updateBy != null">update_by,</if>
+ <if test="updateTime != null">update_time,</if>
+ </trim>
+ <trim prefix="values (" suffix=")" suffixOverrides=",">
+ <if test="id != null">#{id},</if>
+ <if test="fileName != null">#{fileName},</if>
+ <if test="fileNameNew != null">#{fileNameNew},</if>
+ <if test="upPath != null">#{upPath},</if>
+ <if test="upFileSize != null">#{upFileSize},</if>
+ <if test="createBy != null">#{createBy},</if>
+ <if test="createTime != null">#{createTime},</if>
+ <if test="updateBy != null">#{updateBy},</if>
+ <if test="updateTime != null">#{updateTime},</if>
+ </trim>
+ </insert>
+
+ <update id="updateArdRouteInformation" parameterType="ArdRouteInformation">
+ update ard_route_information
+ <trim prefix="SET" suffixOverrides=",">
+ <if test="fileName != null">file_name = #{fileName},</if>
+ <if test="fileNameNew != null">file_name_new = #{fileNameNew},</if>
+ <if test="upPath != null">up_path = #{upPath},</if>
+ <if test="upFileSize != null">up_file_size = #{upFileSize},</if>
+ <if test="createBy != null">create_by = #{createBy},</if>
+ <if test="createTime != null">create_time = #{createTime},</if>
+ <if test="updateBy != null">update_by = #{updateBy},</if>
+ <if test="updateTime != null">update_time = #{updateTime},</if>
+ </trim>
+ where id = #{id}
+ </update>
+
+ <delete id="deleteArdRouteInformationById" parameterType="String">
+ delete from ard_route_information where id = #{id}
+ </delete>
+
+ <delete id="deleteArdRouteInformationByIds" parameterType="String">
+ delete from ard_route_information where id in
+ <foreach item="id" collection="array" open="(" separator="," close=")">
+ #{id}
+ </foreach>
+ </delete>
+
+</mapper>
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/work/component/netty/TyTcpClientManager.java b/ard-work/src/main/java/com/ard/work/component/netty/TyTcpClientManager.java
index 0faafc7..a58e7a6 100644
--- a/ard-work/src/main/java/com/ard/work/component/netty/TyTcpClientManager.java
+++ b/ard-work/src/main/java/com/ard/work/component/netty/TyTcpClientManager.java
@@ -6,6 +6,7 @@
import com.ard.work.component.netty.handler.MessageProtocolEncoder;
import com.ard.work.component.netty.cache.TyTcpServerCache;
import com.ard.work.domain.entity.ArdServerInfo;
+import com.ard.work.service.IArdDroneInfoService;
import com.ard.work.service.IArdServerInfoService;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.*;
@@ -32,6 +33,9 @@
@Resource
private IArdServerInfoService ardServerService; // ← 从数据库读取边缘服务器配置
+
+ @Resource
+ private IArdDroneInfoService ardDroneService;
@Resource
private ClientHandler clientHandler;
@@ -76,8 +80,8 @@
Channel channel = f.channel();
channel.attr(AttributeKey.valueOf("serverId")).set(serverId);
TyTcpServerCache.putTcpServerCache(serverId, true);
- // 断开服务器,修改状态为: 0 - 在线
- ardServerService.updateServerStatus(serverId, "1");
+ // 修改状态为: 1 - 在线
+ updateServerAndDroneStatus(serverId, "1");
// 成功后再加入 channels
TyTcpServerCache.putChannel(serverId, channel);
@@ -86,7 +90,7 @@
log.warn("❌ 服务器 [{}] 连接失败", serverId);
TyTcpServerCache.putTcpServerCache(serverId, false);
// 断开服务器,修改状态为: 0 - 离线
- ardServerService.updateServerStatus(serverId, "0");
+ updateServerAndDroneStatus(serverId, "0");
}
});
}
@@ -100,12 +104,19 @@
channel.close();
log.info("断开服务器 [{}] 连接", serverId);
// 断开服务器,修改状态为: 0 - 离线
- ardServerService.updateServerStatus(serverId, "0");
+ updateServerAndDroneStatus(serverId, "0");
TyTcpServerCache.removeChannel(serverId);
}
TyTcpServerCache.removeTcpServerCache(serverId);
}
+ /**
+ * 同步修改服务和无人机状态
+ */
+ private void updateServerAndDroneStatus(String serverId, String status) {
+ ardServerService.updateServerStatus(serverId, status);
+ ardDroneService.updateDroneStatus(serverId, status);
+ }
/**
* 启动时从数据库加载所有边缘服务器并建立 TCP 连接
diff --git a/ard-work/src/main/java/com/ard/work/mapper/ArdDroneInfoMapper.java b/ard-work/src/main/java/com/ard/work/mapper/ArdDroneInfoMapper.java
index b940f25..59d6009 100644
--- a/ard-work/src/main/java/com/ard/work/mapper/ArdDroneInfoMapper.java
+++ b/ard-work/src/main/java/com/ard/work/mapper/ArdDroneInfoMapper.java
@@ -1,6 +1,7 @@
package com.ard.work.mapper;
import com.ard.work.domain.entity.ArdDroneInfo;
+import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -75,4 +76,13 @@
*/
int insertArdDroneLs(List<ArdDroneInfo> ardDroneInfo);
+ /**
+ * 修改无人机状态
+ *
+ * @param serverId 服务器管理主键
+ * @param onLine 状态
+ * @return 结果
+ */
+ int updateDroneStatus(@Param("serverId") String serverId, @Param("onLine") String onLine);
+
}
diff --git a/ard-work/src/main/java/com/ard/work/mapper/ArdServerInfoMapper.java b/ard-work/src/main/java/com/ard/work/mapper/ArdServerInfoMapper.java
index 3956cb8..7b1ffb1 100644
--- a/ard-work/src/main/java/com/ard/work/mapper/ArdServerInfoMapper.java
+++ b/ard-work/src/main/java/com/ard/work/mapper/ArdServerInfoMapper.java
@@ -64,6 +64,7 @@
* 修改服务器状态
*
* @param id 服务器管理主键
+ * @param status 状态
* @return 结果
*/
public int updateServerStatus(@Param("id") String id, @Param("status") String status);
diff --git a/ard-work/src/main/java/com/ard/work/service/IArdDroneInfoService.java b/ard-work/src/main/java/com/ard/work/service/IArdDroneInfoService.java
index 81766f3..c12abe1 100644
--- a/ard-work/src/main/java/com/ard/work/service/IArdDroneInfoService.java
+++ b/ard-work/src/main/java/com/ard/work/service/IArdDroneInfoService.java
@@ -79,4 +79,9 @@
*/
public int insertArdDroneLs(String[] boxSn,Long deptId);
+ /**
+ * 修改无人机状态
+ */
+ public int updateDroneStatus(String serverId,String status);
+
}
diff --git a/ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java b/ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java
index 9128c2a..7015fa7 100644
--- a/ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java
+++ b/ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java
@@ -38,8 +38,6 @@
@Resource
private AuthorizeService authorizeService;
- UtilMethod utilMethod = new UtilMethod();
-
/**
* 查询无人机盒子
*
@@ -153,6 +151,14 @@
}
/**
+ * 修改无人机状态
+ */
+ @Override
+ public int updateDroneStatus(String serverId, String status) {
+ return ArdDroneInfoMapper.updateDroneStatus(serverId, status);
+ }
+
+ /**
* 获取已存在的无人机信息
*/
private List<ArdDroneInfo> getExistingDrones(String[] boxSn) {
diff --git a/ard-work/src/main/resources/mapper/ArdDroneInfoMapper.xml b/ard-work/src/main/resources/mapper/ArdDroneInfoMapper.xml
index fdcc976..6c78ec8 100644
--- a/ard-work/src/main/resources/mapper/ArdDroneInfoMapper.xml
+++ b/ard-work/src/main/resources/mapper/ArdDroneInfoMapper.xml
@@ -196,4 +196,12 @@
</foreach>
</insert>
+ <update id="updateDroneStatus">
+ update ard_drone_info
+ <trim prefix="SET" suffixOverrides=",">
+ <if test="onLine != null">on_line = #{onLine},</if>
+ </trim>
+ where server_id = #{serverId}
+ </update>
+
</mapper>
\ No newline at end of file
--
Gitblit v1.9.3