From c3b9669d67b5928757e6ad9c3b8215070cef344e Mon Sep 17 00:00:00 2001
From: zhaowenyu <35589726@qq.com>
Date: Mon, 01 Dec 2025 11:25:39 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev
---
ard-route/src/main/java/com/ard/route/service/UavRouteService.java | 5
ard-route/src/main/java/com/ard/route/util/RouteFileUtils.java | 8 +
ard-work/src/main/java/com/ard/work/service/impl/ArdFlightTaskServiceServiceImpl.java | 4
ard-admin/src/main/java/com/ard/web/controller/route/UavRouteController.java | 10 ++
ard-route/src/main/java/com/ard/route/util/UavRouteReqUtils.java | 134 ++++++++++++++++++++++++++
ard-route/src/main/java/com/ard/route/service/impl/UavRouteServiceImpl.java | 41 +-------
ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInfoServiceImpl.java | 57 ++++++----
7 files changed, 192 insertions(+), 67 deletions(-)
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 ccd44ae..273ee47 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
@@ -2,6 +2,7 @@
import com.ard.common.core.domain.AjaxResult;
import com.ard.route.domain.djuav.UavRouteReq;
+import com.ard.route.domain.vo.KmzInfoVo;
import com.ard.route.service.UavRouteService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -51,5 +52,14 @@
return success(routeService.parseKmz(fileUrl));
}
+ /**
+ * KmzInfoVo实体类转换为UavRouteReq实体类
+ */
+ @ApiOperation("KmzInfoVo转换UavRouteReq")
+ @PostMapping("/KmzInfoVoToUavRouteReq")
+ public AjaxResult parseKmz(@RequestBody KmzInfoVo kmzInfoVo){
+ return success(routeService.kmzInfoVoToUavRouteReq(kmzInfoVo));
+ }
+
}
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 47fdb24..c21566f 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
@@ -23,9 +23,8 @@
public KmzInfoVo parseKmz(String file);
/**
- * 编辑kmz文件
- * 定制:删除旧的文件名的文件,并添加新文件名的文件
+ * KmzInfoVo实体类转换为UavRouteReq实体类
*/
- public KmzResultVo updateKmzNew(UavRouteReq uavRouteReq, String oldFileName, String newFilePath) ;
+ public UavRouteReq kmzInfoVoToUavRouteReq(KmzInfoVo kmzInfoVo);
}
diff --git a/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInfoServiceImpl.java b/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInfoServiceImpl.java
index 4d0faaa..aa70de9 100644
--- a/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInfoServiceImpl.java
+++ b/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInfoServiceImpl.java
@@ -113,20 +113,10 @@
if (ardRouteInfo.getGroupId() == null){
ardRouteInfo.setGroupId("0");
}
- // 航线数据
- byte[] routeData;
- try {
- routeData = serialize(ardRouteInfo.getUavRouteReq());
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
ardRouteInfo.getUavRouteReq().setDroneType(subStringDroneType(ardRouteInfo.getAircraft()));
- ardRouteInfo.setRouteData(routeData);
KmzResultVo kmzResult = routeService.buildKmz(ardRouteInfo.getUavRouteReq(), ardRouteInfo.getName());
ardRouteInfo.setPath(kmzResult.getPath());
- ardRouteInfo.setReadOnly("0");
- ardRouteInfo.setPointCount(getPointCount(ardRouteInfo));
- ardRouteInfoMapper.insertArdRouteInfo(ardRouteInfo);
+ ardRouteInfoMapper.insertArdRouteInfo(dataProcessing(ardRouteInfo));
return kmzResult.getPath();
}
@@ -144,20 +134,34 @@
KmzResultVo kmzResult;
// 获取源文件名字
ArdRouteInfo route = ardRouteInfoMapper.selectArdRouteInfoById(ardRouteInfo.getId());
- if (route.getName().equals(ardRouteInfo.getName())) {
- kmzResult = routeService.updateKmz(ardRouteInfo.getUavRouteReq(), ardRouteInfo.getName());
- }else {
- kmzResult = routeService.updateKmzNew(ardRouteInfo.getUavRouteReq(), route.getName(), ardRouteInfo.getName());
- }
+ // 先删除航线
+ delOssService(route);
+ // 再生成航线
+ kmzResult = routeService.buildKmz(ardRouteInfo.getUavRouteReq(), ardRouteInfo.getName());
if ("更新航线kmz文件失败".equals(kmzResult.getData())) {
return 0;
}
ardRouteInfo.setPath(kmzResult.getPath());
- ardRouteInfo.setPointCount(getPointCount(ardRouteInfo));
}
- return ardRouteInfoMapper.updateArdRouteInfo(ardRouteInfo);
+ return ardRouteInfoMapper.updateArdRouteInfo(dataProcessing(ardRouteInfo));
}
+ // 新增信息加工
+ private ArdRouteInfo dataProcessing(ArdRouteInfo ardRouteInfo) {
+ // 航线数据
+ byte[] routeData;
+ try {
+ routeData = serialize(ardRouteInfo.getUavRouteReq());
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ ardRouteInfo.setRouteData(routeData);
+ ardRouteInfo.setReadOnly("0");
+ ardRouteInfo.setPointCount(getPointCount(ardRouteInfo));
+ return ardRouteInfo;
+ }
+
+ // 获取行点总数
private Integer getPointCount(ArdRouteInfo ardRouteInfo) {
if (ardRouteInfo.getUavRouteReq().getRoutePointList() != null) {
return ardRouteInfo.getUavRouteReq().getRoutePointList().size();
@@ -176,16 +180,21 @@
// 删除航线(kmz)文件
for (String id : ids) {
ArdRouteInfo information = ardRouteInfoMapper.selectArdRouteInfoById(id);
- if (information.getPath() != null){
- ossService.deleteObject("kmz", subStringMinioUrlName(information.getPath()));
- }
- if (information.getPath1() != null){
- ossDockService.deleteObject("kmz", subStringMinioUrlName(information.getPath1()));
- }
+ delOssService(information);
}
return ardRouteInfoMapper.deleteArdRouteInfoByIds(ids);
}
+ // 删除minio文件
+ private void delOssService(ArdRouteInfo information){
+ if (information.getPath() != null){
+ ossService.deleteObject("kmz", subStringMinioUrlName(information.getPath()));
+ }
+ if (information.getPath1() != null){
+ ossDockService.deleteObject("kmz", subStringMinioUrlName(information.getPath1()));
+ }
+ }
+
/**
* 删除航线(kmz)信息
*
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 1a8b76e..352d034 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
@@ -37,6 +37,7 @@
import static com.ard.route.util.RouteFileUtils.*;
import static com.ard.route.util.ToolUtils.*;
+import static com.ard.route.util.UavRouteReqUtils.kmzInfoVOToUavRouteReq;
/**
* Author:xia
@@ -230,42 +231,12 @@
return null;
}
+ /**
+ * KmzInfoVo实体类转换为UavRouteReq实体类
+ */
@Override
- public KmzResultVo updateKmzNew(UavRouteReq uavRouteReq, String oldFile, String newFile) {
- KmzResultVo result = new KmzResultVo();
- // 校验修改的文件是否存在
- ArdRouteInfo routeInformation = ardRouteInformationService.selectArdRouteInfoByName(oldFile);
- if ( routeInformation == null ){
- result.setData("修改航线文件失败,请检查文件是否存在");
- return result;
- }
-
- // 获取文件
- String minioUrl = subStringMinioUrlName(routeInformation.getPath());
- try (InputStream inputStream = ossService.getObject(kmzPath,minioUrl);
- ArchiveInputStream archiveInputStream = new ZipArchiveInputStream(inputStream)){
- ArchiveEntry entry;
- KmlInfo kmlInfo = new KmlInfo();
- KmlInfo wpmlInfo = new KmlInfo();
- KmlParams kmlParams = new KmlParams();
- while (!Objects.isNull(entry = archiveInputStream.getNextEntry())) {
- String name = entry.getName();
- if (name.toLowerCase().endsWith(".kml")) {
- kmlInfo = RouteFileUtils.parseKml(archiveInputStream);
- buildKmlParams(kmlParams, kmlInfo);
- this.handleRouteUpdate(kmlInfo, uavRouteReq, FileTypeConstants.KML, kmlParams);
- } else if (name.toLowerCase().endsWith(".wpml")) {
- wpmlInfo = RouteFileUtils.parseKml(archiveInputStream);
- this.handleRouteUpdate(wpmlInfo, uavRouteReq, FileTypeConstants.WPML, kmlParams);
- }
- }
- // 删除文件
- ossService.deleteObject(kmzPath, minioUrl);
- return buildKmzMethod(newFile, kmlInfo, wpmlInfo);
- } catch (Exception e) {
- result.setData("更新航线kmz文件失败");
- return result;
- }
+ public UavRouteReq kmzInfoVoToUavRouteReq(KmzInfoVo kmzInfoVo) {
+ return kmzInfoVOToUavRouteReq(kmzInfoVo);
}
}
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 3573eeb..da95d7b 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
@@ -36,7 +36,13 @@
*/
public static KmlInfo parseKml(InputStream inputStream) {
XStream xStream = new XStream();
- xStream.allowTypes(new Class[]{KmlInfo.class, KmlAction.class, KmlWayLineCoordinateSysParam.class, KmlPoint.class, KmlActionGroup.class});
+ xStream.allowTypes(new Class[]{
+ KmlInfo.class,
+ KmlAction.class,
+ KmlWayLineCoordinateSysParam.class,
+ KmlPoint.class,
+ KmlActionGroup.class
+ });
xStream.alias("kml", KmlInfo.class);
xStream.processAnnotations(KmlInfo.class);
xStream.autodetectAnnotations(true);
diff --git a/ard-route/src/main/java/com/ard/route/util/UavRouteReqUtils.java b/ard-route/src/main/java/com/ard/route/util/UavRouteReqUtils.java
new file mode 100644
index 0000000..8e90bb6
--- /dev/null
+++ b/ard-route/src/main/java/com/ard/route/util/UavRouteReqUtils.java
@@ -0,0 +1,134 @@
+package com.ard.route.util;
+
+import com.ard.oss.service.impl.OssServiceContext;
+import com.ard.route.domain.djuav.ActionGroupReq;
+import com.ard.route.domain.djuav.PointActionReq;
+import com.ard.route.domain.djuav.RoutePointReq;
+import com.ard.route.domain.djuav.UavRouteReq;
+import com.ard.route.domain.djuav.kml.*;
+import com.ard.route.domain.vo.KmzInfoVo;
+import org.apache.commons.compress.archivers.ArchiveEntry;
+import org.apache.commons.compress.archivers.ArchiveInputStream;
+import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import static com.ard.route.util.ToolUtils.getDoublePoint;
+
+public class UavRouteReqUtils {
+
+ @Resource
+ private OssServiceContext ossService;
+
+ // 将文件转换成 UavRouteReq 实体
+ public static KmzInfoVo fileConversionEntity(MultipartFile file){
+ KmzInfoVo kmzInfoVO = new KmzInfoVo();
+ try (InputStream inputStream = file.getInputStream();
+ ArchiveInputStream archiveInputStream = new ZipArchiveInputStream(inputStream)){
+ ArchiveEntry entry;
+ while (!Objects.isNull(entry = archiveInputStream.getNextEntry())) {
+ String name = entry.getName();
+ if (name.toLowerCase().endsWith(".kml")) {
+ kmzInfoVO.setKmlInfo(RouteFileUtils.parseKml(archiveInputStream));
+ } else if (name.toLowerCase().endsWith(".wpml")) {
+ kmzInfoVO.setWpmlInfo(RouteFileUtils.parseKml(archiveInputStream));
+ }
+ }
+ return kmzInfoVO;
+ }catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public static UavRouteReq kmzInfoVOToUavRouteReq(KmzInfoVo vo) {
+ UavRouteReq uavRouteReq = new UavRouteReq();
+ if (vo.getKmlInfo().getDocument().getFolder().getTemplateType() != null){
+ uavRouteReq.setTemplateType(vo.getKmlInfo().getDocument().getFolder().getTemplateType());
+ }
+ uavRouteReq.setDroneType(Integer.valueOf(vo.getKmlInfo().getDocument().getKmlMissionConfig().getDroneInfo().getDroneEnumValue()));
+ uavRouteReq.setImageFormat(vo.getKmlInfo().getDocument().getFolder().getPayloadParam().getImageFormat());
+ uavRouteReq.setGlobalHeight(Double.valueOf(vo.getKmlInfo().getDocument().getFolder().getGlobalHeight()));
+ uavRouteReq.setAutoFlightSpeed(Double.valueOf(vo.getKmlInfo().getDocument().getFolder().getAutoFlightSpeed()));
+ uavRouteReq.setTakeOffRefPoint(vo.getKmlInfo().getDocument().getKmlMissionConfig().getTakeOffRefPoint());
+ uavRouteReq.setRoutePointList(routePointList(vo.getKmlInfo().getDocument().getFolder().getPlacemarkList()));
+ return uavRouteReq;
+ }
+
+ public static List<RoutePointReq> routePointList(List<KmlPlacemark> placemarkList) {
+ List<RoutePointReq> routePointList = new ArrayList<>();
+ for (KmlPlacemark kmlPlacemark : placemarkList) {
+ RoutePointReq routePointReq = new RoutePointReq();
+ routePointReq.setRoutePointIndex(Integer.valueOf(kmlPlacemark.getIndex()));
+ routePointReq.setLongitude(getDoublePoint(kmlPlacemark.getKmlPoint().getCoordinates(),"lon"));
+ routePointReq.setLatitude(getDoublePoint(kmlPlacemark.getKmlPoint().getCoordinates(),"lat"));
+ routePointReq.setHeight(Double.valueOf(kmlPlacemark.getHeight()));
+ if (kmlPlacemark.getWaypointSpeed() != null) {
+ routePointReq.setSpeed(Double.valueOf(kmlPlacemark.getWaypointSpeed()));
+ }
+ if (kmlPlacemark.getActionGroup() != null) {
+ routePointReq.setActionGroupList(actionGroupList(kmlPlacemark.getActionGroup()));
+ }
+ routePointList.add(routePointReq);
+ }
+ return routePointList;
+ }
+
+ public static List<ActionGroupReq> actionGroupList(List<KmlActionGroup> actionGroup) {
+ List<ActionGroupReq> actionGroupList = new ArrayList<>();
+ for (KmlActionGroup kmlActionGroup : actionGroup) {
+ ActionGroupReq actionGroupReq = new ActionGroupReq();
+ List<PointActionReq> actions = new ArrayList<>();
+ //for (KmlAction kmlAction : kmlActionGroup.getAction()) {
+ for (int i=0 ; i < kmlActionGroup.getAction().size() ; i++) {
+ PointActionReq pointActionReq = actions(kmlActionGroup.getAction().get(i),i);
+ actions.add(pointActionReq);
+ }
+ actionGroupReq.setActions(actions);
+ actionGroupList.add(actionGroupReq);
+ }
+ return actionGroupList;
+ }
+
+ public static PointActionReq actions(KmlAction kmlAction,Integer actionIndex){
+ PointActionReq pointActionReq = new PointActionReq();
+ pointActionReq.setActionIndex(actionIndex);
+ if ("takePhoto".equals(kmlAction.getActionActuatorFunc())) { // 照相
+ pointActionReq.setTakePhotoType(0);
+ pointActionReq.setFileSuffix(kmlAction.getActionActuatorFuncParam().getFileSuffix());
+ pointActionReq.setImageFormat("");
+ pointActionReq.setUseGlobalImageFormat(Integer.valueOf(kmlAction.getActionActuatorFuncParam().getUseGlobalPayloadLensIndex()));
+ }
+ if ("startRecord".equals(kmlAction.getActionActuatorFunc())) { // 开始录像
+ pointActionReq.setPanoShotSubMode(kmlAction.getActionActuatorFuncParam().getFileSuffix());
+ pointActionReq.setStartRecord(true);
+ }
+ if ("stopRecord".equals(kmlAction.getActionActuatorFunc())) { // 停止录像
+ pointActionReq.setStopRecord(true);
+ }
+ if ("gimbalRotate".equals(kmlAction.getActionActuatorFunc())) { // 云台偏航俯仰
+ if ("1".equals(kmlAction.getActionActuatorFuncParam().getGimbalPitchRotateEnable())) { // 云台俯仰角
+ pointActionReq.setGimbalPitchRotateAngle(Double.valueOf(kmlAction.getActionActuatorFuncParam().getGimbalPitchRotateAngle()));
+ }
+ if ("1".equals(kmlAction.getActionActuatorFuncParam().getGimbalYawRotateEnable())){ // 云台偏航角
+ pointActionReq.setGimbalYawRotateAngle(Double.valueOf(kmlAction.getActionActuatorFuncParam().getGimbalYawRotateAngle()));
+ }
+ }
+ if ("zoom".equals(kmlAction.getActionActuatorFunc())) {
+ pointActionReq.setZoom(Double.valueOf(kmlAction.getActionActuatorFuncParam().getFocalLength()));
+ }
+ if ("hover".equals(kmlAction.getActionActuatorFunc())) {
+ pointActionReq.setHoverTime(Integer.valueOf(kmlAction.getActionActuatorFuncParam().getHoverTime()));
+ }
+ if ("rotateYaw".equals(kmlAction.getActionActuatorFunc())) {
+ pointActionReq.setAircraftHeading(Double.valueOf(kmlAction.getActionActuatorFuncParam().getAircraftHeading()));
+ }
+ return pointActionReq;
+ }
+
+}
diff --git a/ard-work/src/main/java/com/ard/work/service/impl/ArdFlightTaskServiceServiceImpl.java b/ard-work/src/main/java/com/ard/work/service/impl/ArdFlightTaskServiceServiceImpl.java
index cca3705..4365828 100644
--- a/ard-work/src/main/java/com/ard/work/service/impl/ArdFlightTaskServiceServiceImpl.java
+++ b/ard-work/src/main/java/com/ard/work/service/impl/ArdFlightTaskServiceServiceImpl.java
@@ -196,10 +196,6 @@
if (needUpdate) {
ardFlightTaskMapper.updateArdFlightTask(local);
}
-
- // 其它媒体增量更新
- updateVideoToDatabase(local, remote.getVideoPathList());
- updatePhotoToDatabase(local, local.getServerId(), remote.getBoxSn());
}
--
Gitblit v1.9.3