From f1eefdbe63b64afab32502785e9c46ffd35fc718 Mon Sep 17 00:00:00 2001
From: Xiajijian <1176061145@qq.com>
Date: Tue, 10 Mar 2026 11:25:21 +0800
Subject: [PATCH] 1. 相关航线实体类增加序列化版本号。

---
 ard-route/src/main/java/com/ard/route/util/RouteFileUtils.java |   66 ++++++++++++++++++++++++--------
 1 files changed, 49 insertions(+), 17 deletions(-)

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 628b2b1..b79dc6a 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
@@ -3,8 +3,8 @@
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
-import com.ard.route.domain.*;
-import com.ard.route.domain.kml.*;
+import com.ard.route.domain.djuav.*;
+import com.ard.route.domain.djuav.kml.*;
 import com.ard.route.enums.kml.*;
 import com.ard.route.constant.FileTypeConstants;
 import com.thoughtworks.xstream.XStream;
@@ -36,12 +36,19 @@
      */
     public static KmlInfo parseKml(InputStream inputStream) {
         XStream xStream = new XStream();
-        xStream.allowTypes(new Class[]{KmlInfo.class, KmlAction.class, KmlWayLineCoordinateSysParam.class, KmlPoint.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);
         xStream.ignoreUnknownElements();
         xStream.addImplicitCollection(KmlActionGroup.class, "action");
+        xStream.addImplicitCollection(KmlPlacemark.class, "actionGroup");
         return (KmlInfo) xStream.fromXML(inputStream);
     }
 
@@ -53,10 +60,11 @@
      * @param wpmlInfo wpml 文件信息
      * @return 本地文件路径
      */
-    public static String buildKmz(String fileName, KmlInfo kmlInfo, KmlInfo wpmlInfo, String kmzFilePath) {
+    public static String buildKmzA(String fileName, KmlInfo kmlInfo, KmlInfo wpmlInfo, String kmzFilePath) {
         XStream xStream = new XStream(new DomDriver());
         xStream.processAnnotations(KmlInfo.class);
         xStream.addImplicitCollection(KmlActionGroup.class, "action");
+        xStream.addImplicitCollection(KmlPlacemark.class, "actionGroup");
 
         String kml = XML_HEADER + xStream.toXML(kmlInfo);
         String wpml = XML_HEADER + xStream.toXML(wpmlInfo);
@@ -135,7 +143,9 @@
         }else {
             kmlMissionConfig.setGlobalTransitionalSpeed("15");
         }
-        kmlMissionConfig.setGlobalRTHHeight("100");
+        if (kmlParams.getHeightMode().equals(HeightModeEnums.RELATIVE_TO_START_POINT.getValue())){
+            kmlMissionConfig.setGlobalRTHHeight("100");
+        }
         kmlMissionConfig.setTakeOffRefPoint(kmlParams.getTakeOffRefPoint());
         kmlMissionConfig.setDroneInfo(buildKmlDroneInfo(kmlParams.getDroneType(), kmlParams.getSubDroneType()));
         kmlMissionConfig.setPayloadInfo(buildKmlPayloadInfo(kmlParams.getPayloadType(), kmlParams.getPayloadPosition()));
@@ -147,7 +157,8 @@
         kmlDroneInfo.setDroneEnumValue(String.valueOf(droneType));
         if (Objects.equals(droneType, DroneEnumValueEnums.M30_M30T.getValue()) ||
                 Objects.equals(droneType, DroneEnumValueEnums.M3D_M3TD.getValue()) ||
-                Objects.equals(droneType, DroneEnumValueEnums.M3E_M3T_M3M.getValue())) {
+                Objects.equals(droneType, DroneEnumValueEnums.M3E_M3T_M3M.getValue())||
+                Objects.equals(droneType, DroneEnumValueEnums.MATRICE_4D.getValue())) {
             kmlDroneInfo.setDroneSubEnumValue(String.valueOf(subDroneType));
         }
         return kmlDroneInfo;
@@ -166,13 +177,28 @@
         kmlFolder.setAutoFlightSpeed(String.valueOf(kmlParams.getAutoFlightSpeed()));
         if (StringUtils.equals(fileType, FileTypeConstants.KML)) {
             kmlFolder.setTemplateType(kmlParams.getTemplateType());
-            kmlFolder.setWaylineCoordinateSysParam(buildKmlWayLineCoordinateSysParam(kmlParams.getTemplateType(), HeightModeEnums.RELATIVE_TO_START_POINT.getValue(),
-                    String.valueOf(kmlParams.getGlobalHeight())));
+            if (kmlParams.getHeightMode().equals(HeightModeEnums.RELATIVE_TO_START_POINT.getValue())){
+                kmlFolder.setWaylineCoordinateSysParam(
+                        buildKmlWayLineCoordinateSysParam(
+                                kmlParams.getTemplateType(),
+                                HeightModeEnums.RELATIVE_TO_START_POINT.getValue(),
+                                String.valueOf(kmlParams.getGlobalHeight())));
+            }else if(kmlParams.getHeightMode().equals(HeightModeEnums.EGM96.getValue())){
+                kmlFolder.setWaylineCoordinateSysParam(
+                        buildKmlWayLineCoordinateSysParam(
+                                kmlParams.getTemplateType(),
+                                HeightModeEnums.EGM96.getValue(),
+                                String.valueOf(kmlParams.getGlobalHeight())));
+            }
             kmlFolder.setPayloadParam(buildKmlPayloadParam(kmlParams));
         }
         if (StringUtils.equals(fileType, FileTypeConstants.WPML)) {
             kmlFolder.setWaylineId("0");
-            kmlFolder.setExecuteHeightMode(ExecuteHeightModeEnums.RELATIVE_TO_START_POINT.getValue());
+            if (kmlParams.getHeightMode().equals(HeightModeEnums.RELATIVE_TO_START_POINT.getValue())){
+                kmlFolder.setExecuteHeightMode(ExecuteHeightModeEnums.RELATIVE_TO_START_POINT.getValue());
+            } else if (kmlParams.getHeightMode().equals(HeightModeEnums.EGM96.getValue())) {
+                kmlFolder.setExecuteHeightMode(ExecuteHeightModeEnums.WGS84.getValue());
+            }
             if (CollectionUtil.isNotEmpty(kmlParams.getStartActionList())) {
                 KmlActionGroup kmlActionGroup = new KmlActionGroup();
                 kmlActionGroup.setAction(getKmlActionList(kmlParams.getStartActionList(), kmlParams));
@@ -329,7 +355,9 @@
         if (CollectionUtil.isNotEmpty(routePointInfo.getActionGroupList())) {
             List<KmlActionGroup> kmlActionGroupList = new ArrayList<>();
             for (ActionGroupReq actionGroupReq : routePointInfo.getActionGroupList()) {
-                kmlActionGroupList.add(buildKmlActionGroup(actionGroupReq, kmlParams));
+                if (ObjectUtil.isNotEmpty(actionGroupReq.getActions())){
+                    kmlActionGroupList.add(buildKmlActionGroup(actionGroupReq, kmlParams));
+                }
             }
             kmlPlacemark.setActionGroup(kmlActionGroupList);
         }
@@ -492,13 +520,13 @@
 
     public static KmlActionGroup buildKmlActionGroup(ActionGroupReq actionGroupReq, KmlParams kmlParams) {
         KmlActionGroup kmlActionGroup = new KmlActionGroup();
-        kmlActionGroup.setActionGroupId(String.valueOf(actionGroupReq.getActionGroupId()));
-        kmlActionGroup.setActionGroupStartIndex(String.valueOf(actionGroupReq.getActionGroupStartIndex()));
-        kmlActionGroup.setActionGroupEndIndex(String.valueOf(actionGroupReq.getActionGroupEndIndex()));
-        kmlActionGroup.setActionGroupMode(ActionGroupModeEnums.SEQUENCE.getValue());
+            kmlActionGroup.setActionGroupId(String.valueOf(actionGroupReq.getActionGroupId()));
+            kmlActionGroup.setActionGroupStartIndex(String.valueOf(actionGroupReq.getActionGroupStartIndex()));
+            kmlActionGroup.setActionGroupEndIndex(String.valueOf(actionGroupReq.getActionGroupEndIndex()));
+            kmlActionGroup.setActionGroupMode(ActionGroupModeEnums.SEQUENCE.getValue());
 
-        kmlActionGroup.setActionTrigger(buildKmlActionTrigger(actionGroupReq.getActionTriggerType(), actionGroupReq.getActionTriggerParam()));
-        kmlActionGroup.setAction(getKmlActionList(actionGroupReq.getActions(), kmlParams));
+            kmlActionGroup.setActionTrigger(buildKmlActionTrigger(actionGroupReq.getActionTriggerType(), actionGroupReq.getActionTriggerParam()));
+            kmlActionGroup.setAction(getKmlActionList(actionGroupReq.getActions(), kmlParams));
         return kmlActionGroup;
     }
 
@@ -530,7 +558,11 @@
             }else {
                 kmlActionActuatorFuncParam.setFileSuffix("panoramicPhoto_360");
             }
-            kmlActionActuatorFuncParam.setUseGlobalPayloadLensIndex(String.valueOf(pointActionReq.getUseGlobalImageFormat()));
+            if (pointActionReq.getUseGlobalImageFormat() != null) {
+                kmlActionActuatorFuncParam.setUseGlobalPayloadLensIndex(String.valueOf(pointActionReq.getUseGlobalImageFormat()));
+            }else {
+                kmlActionActuatorFuncParam.setUseGlobalPayloadLensIndex("0");
+            }
             if (ObjectUtil.equals(pointActionReq.getUseGlobalImageFormat(), 0)) {
                 kmlActionActuatorFuncParam.setPayloadLensIndex(pointActionReq.getImageFormat());
             } else {

--
Gitblit v1.9.3