From 74d1c21ebb6b3b916904d95d13d289df23dcdedd Mon Sep 17 00:00:00 2001
From: rain <167982779@qq.com>
Date: Tue, 20 Aug 2024 18:06:46 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/ht-dev' into ht-dev

---
 src/main/java/com/dji/sample/patches/service/ShpToDataSourceService.java          |    2 
 src/main/java/com/dji/sample/patches/kml/KmlProperty.java                         |   34 ++
 src/main/java/com/dji/sample/patches/constant/FileSufConstant.java                |   13 
 src/main/java/com/dji/sample/patches/xml/utils/CreateWaylineFileUtils.java        |    1 
 src/main/java/com/dji/sample/patches/kml/KmlLine.java                             |   18 +
 pom.xml                                                                           |   23 +
 src/main/java/com/dji/sample/patches/controller/PatchesController.java            |   21 +
 src/main/java/com/dji/sample/patches/kml/KmlPointTypeEnum.java                    |   18 +
 src/main/java/com/dji/sample/patches/service/impl/ShpToDataSourceServiceImpl.java |  195 ++++++++++-
 src/main/java/com/dji/sample/patches/utils/ParseKmlFileUtil.java                  |  125 +++++++
 src/main/java/com/dji/sample/patches/utils/ParsingKmlUtil.java                    |  236 +++++++++++++
 src/main/java/com/dji/sample/patches/kml/KmlPoint.java                            |   24 +
 src/main/java/com/dji/sample/patches/kml/KmlBaseEntity.java                       |   40 ++
 src/main/java/com/dji/sample/patches/kml/KmlPolygon.java                          |   14 
 src/main/java/com/dji/sample/patches/kml/KmlData.java                             |   13 
 src/main/resources/application-dev.yml                                            |   22 
 src/main/java/com/dji/sample/patches/kml/KmlParser.java                           |  176 ++++++++++
 17 files changed, 942 insertions(+), 33 deletions(-)

diff --git a/pom.xml b/pom.xml
index 6852052..d3bbc2d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -328,6 +328,29 @@
             <artifactId>bcprov-jdk18on</artifactId>
             <version>1.78.1</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.geotools.xsd</groupId>
+            <artifactId>gt-xsd-kml</artifactId>
+            <version>28.2</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/de.micromata.jak/JavaAPIforKml -->
+        <dependency>
+            <groupId>de.micromata.jak</groupId>
+            <artifactId>JavaAPIforKml</artifactId>
+            <version>2.2.1</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress -->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-compress</artifactId>
+            <version>1.21</version>
+        </dependency>
+        <dependency>
+            <groupId>com.vividsolutions</groupId>
+            <artifactId>jts</artifactId>
+            <version>1.13</version>
+        </dependency>
     </dependencies>
 
 
diff --git a/src/main/java/com/dji/sample/patches/constant/FileSufConstant.java b/src/main/java/com/dji/sample/patches/constant/FileSufConstant.java
new file mode 100644
index 0000000..625a30e
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/constant/FileSufConstant.java
@@ -0,0 +1,13 @@
+package com.dji.sample.patches.constant;
+
+/**
+ * 文件后缀常量
+ */
+public class FileSufConstant {
+
+	public static final String FILE_SUFFIX_ZIP = ".zip";
+
+	public static final String FILE_SUFFIX_KMZ = ".kmz";
+
+	public static final String FILE_SUFFIX_KML = ".kml";
+}
diff --git a/src/main/java/com/dji/sample/patches/controller/PatchesController.java b/src/main/java/com/dji/sample/patches/controller/PatchesController.java
index 15deb45..41ca14e 100644
--- a/src/main/java/com/dji/sample/patches/controller/PatchesController.java
+++ b/src/main/java/com/dji/sample/patches/controller/PatchesController.java
@@ -6,6 +6,7 @@
 import com.dji.sample.common.util.MinioUrlUtils;
 import com.dji.sample.media.model.MediaFileEntity;
 import com.dji.sample.media.service.impl.FileServiceImpl;
+import com.dji.sample.patches.constant.FileSufConstant;
 import com.dji.sample.patches.model.Param.PatchesParam;
 import com.dji.sample.patches.model.entity.LotInfo;
 import com.dji.sample.patches.service.GetPatchesService;
@@ -255,6 +256,10 @@
                                  @RequestParam double airportLat,
                                  @RequestParam double airportLon,
                                  HttpServletRequest request) throws Exception {
+        // 检查格式是否正确
+        if(!checkFileType(file.getOriginalFilename())){
+            throw new RuntimeException("文件格式异常");
+        }
         CustomClaim customClaim = (CustomClaim) request.getAttribute(TOKEN_CLAIM);
         String creator = customClaim.getUsername();
         MultipartFile multipartFile = shpToDataSourceService.insertGeo(file, workspaceId, waylineName, airportLat, airportLon, creator);
@@ -272,6 +277,22 @@
         return ResponseResult.success(infoMap);
     }
 
+    /**
+     * 检查文件格式是否正确
+     * @param originalFilename
+     * @return
+     */
+    private boolean checkFileType(String originalFilename) {
+        if (originalFilename.endsWith(FileSufConstant.FILE_SUFFIX_ZIP) ||
+                originalFilename.endsWith(FileSufConstant.FILE_SUFFIX_KML) ||
+                originalFilename.endsWith(FileSufConstant.FILE_SUFFIX_KMZ)
+        ){
+            return true;
+        }
+        // 返回
+        return false;
+    }
+
     @GetMapping("/getExcel")
     public ResponseEntity<byte[]> exportExcel(@RequestParam String ids) {
 //        List<LotInfo> lotInfos = getPatchesService.listLotinfo(workspaceId);
diff --git a/src/main/java/com/dji/sample/patches/kml/KmlBaseEntity.java b/src/main/java/com/dji/sample/patches/kml/KmlBaseEntity.java
new file mode 100644
index 0000000..b5da20d
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/kml/KmlBaseEntity.java
@@ -0,0 +1,40 @@
+package com.dji.sample.patches.kml;
+
+import java.util.List;
+import de.micromata.opengis.kml.v_2_2_0.Coordinate;
+/**
+ * kml 基类,将name、description、List<Coordinate>进行统一封装
+ * @author 夜郎king
+ */
+public class KmlBaseEntity {
+	private List<Coordinate> points;
+	private String name;
+	private String description;
+	public List<Coordinate> getPoints() {
+		return points;
+	}
+	public void setPoints(List<Coordinate> points) {
+		this.points = points;
+	}
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public String getDescription() {
+		return description;
+	}
+	public void setDescription(String description) {
+		this.description = description;
+	}
+	public KmlBaseEntity(List<Coordinate> points, String name, String description) {
+		super();
+		this.points = points;
+		this.name = name;
+		this.description = description;
+	}
+	public KmlBaseEntity() {
+		super();
+	}
+}
diff --git a/src/main/java/com/dji/sample/patches/kml/KmlData.java b/src/main/java/com/dji/sample/patches/kml/KmlData.java
new file mode 100644
index 0000000..22bde72
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/kml/KmlData.java
@@ -0,0 +1,13 @@
+package com.dji.sample.patches.kml;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class KmlData {
+
+	private List<KmlPoint> kmlPoints;
+	private List<KmlLine> kmlLines;
+	private List<KmlPolygon> kmlPolygons;
+}
diff --git a/src/main/java/com/dji/sample/patches/kml/KmlLine.java b/src/main/java/com/dji/sample/patches/kml/KmlLine.java
new file mode 100644
index 0000000..15dbc52
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/kml/KmlLine.java
@@ -0,0 +1,18 @@
+package com.dji.sample.patches.kml;
+
+public class KmlLine extends KmlBaseEntity {
+	private String color;
+	private long width;
+	public String getColor() {
+		return color;
+	}
+	public void setColor(String color) {
+		this.color = color;
+	}
+	public long getWidth() {
+		return width;
+	}
+	public void setWidth(long width) {
+		this.width = width;
+	}
+}
diff --git a/src/main/java/com/dji/sample/patches/kml/KmlParser.java b/src/main/java/com/dji/sample/patches/kml/KmlParser.java
new file mode 100644
index 0000000..cf0250f
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/kml/KmlParser.java
@@ -0,0 +1,176 @@
+package com.dji.sample.patches.kml;
+
+
+import cn.hutool.core.lang.Snowflake;
+import cn.hutool.core.util.IdUtil;
+import de.micromata.opengis.kml.v_2_2_0.*;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Objects;
+
+public class KmlParser {
+
+	private final Snowflake snowflake = IdUtil.getSnowflake(1, 1);
+
+	/**
+	 * 保存kml数据到临时表
+	 *
+	 * @param file 上传的文件实体
+	 * @return 自定义的KML文件实体
+	 */
+	public static KmlProperty toData(File file) {
+		Kml kml = Kml.unmarshal(file);
+		Feature feature = kml.getFeature();
+
+		KmlProperty kmlProperty = new KmlProperty();
+		if (Objects.isNull(feature)) {
+			return kmlProperty;
+		}
+		kmlProperty.setName(feature.getName());
+		KmlParser kmlParser = new KmlParser();
+		kmlParser.parseFeature(feature, kmlProperty);
+		return kmlProperty;
+	}
+
+	public static KmlProperty toData(InputStream content) {
+		Kml kml = Kml.unmarshal(content);
+		Feature feature = kml.getFeature();
+
+		KmlProperty kmlProperty = new KmlProperty();
+		if (Objects.isNull(feature)) {
+			return kmlProperty;
+		}
+		kmlProperty.setName(feature.getName());
+		KmlParser kmlParser = new KmlParser();
+		kmlParser.parseFeature(feature, kmlProperty);
+		return kmlProperty;
+	}
+
+	private void parseFeature(Feature feature, KmlProperty kmlProperty) {
+		if (feature instanceof Document) {
+			List<Feature> featureList = ((Document) feature).getFeature();
+			List<KmlProperty> kmlPropertyList = kmlProperty.getKmlPropertyList();
+			featureList.forEach(d -> {
+				if (d instanceof Placemark) {
+					getPlaceMark((Placemark) d, kmlProperty);
+				} else {
+					KmlProperty kmlProperty1 = new KmlProperty();
+					kmlProperty1.setName(d.getName());
+					kmlProperty1.setId(snowflake.nextIdStr());
+					kmlPropertyList.add(kmlProperty1);
+					parseFeature(d, kmlProperty1);
+				}
+			});
+		} else if (feature instanceof Folder) {
+			List<Feature> featureList = ((Folder) feature).getFeature();
+			List<KmlProperty> kmlPropertyList = kmlProperty.getKmlPropertyList();
+			featureList.forEach(d -> {
+				if (d instanceof Placemark) {
+					getPlaceMark((Placemark) d, kmlProperty);
+				} else {
+					KmlProperty kmlProperty1 = new KmlProperty();
+					kmlProperty1.setName(d.getName());
+					kmlProperty1.setId(snowflake.nextIdStr());
+					kmlPropertyList.add(kmlProperty1);
+					parseFeature(d, kmlProperty1);
+				}
+			});
+		}
+	}
+
+	private void getPlaceMark(Placemark placemark, KmlProperty kmlProperty) {
+		Geometry geometry = placemark.getGeometry();
+		String name = placemark.getName();
+		String description = placemark.getDescription();
+		parseGeometry(name, geometry, description, kmlProperty);
+	}
+
+	private void parseGeometry(String name, Geometry geometry, String description, KmlProperty kmlProperty) {
+		if (geometry != null) {
+			if (geometry instanceof Polygon) {
+				Polygon polygon = (Polygon) geometry;
+				Boundary outerBoundaryIs = polygon.getOuterBoundaryIs();
+				if (outerBoundaryIs != null) {
+					LinearRing linearRing = outerBoundaryIs.getLinearRing();
+					if (linearRing != null) {
+						List<Coordinate> coordinates = linearRing.getCoordinates();
+						if (coordinates != null) {
+							outerBoundaryIs = ((Polygon) geometry).getOuterBoundaryIs();
+							addPolygonToList(name, outerBoundaryIs, description, kmlProperty);
+						}
+					}
+				}
+			} else if (geometry instanceof LineString) {
+				LineString lineString = (LineString) geometry;
+				List<Coordinate> coordinates = lineString.getCoordinates();
+				if (coordinates != null) {
+					int width = 0;
+					coordinates = ((LineString) geometry).getCoordinates();
+					addLineStringToList(coordinates, name, description, kmlProperty);
+
+				}
+			} else if (geometry instanceof Point) {
+				Point point = (Point) geometry;
+				List<Coordinate> coordinates = point.getCoordinates();
+				if (coordinates != null) {
+					coordinates = ((Point) geometry).getCoordinates();
+					addPointToList(coordinates, name, description, kmlProperty);
+				}
+			} else if (geometry instanceof MultiGeometry) {
+				List<Geometry> geometries = ((MultiGeometry) geometry).getGeometry();
+				for (Geometry geometryToMult : geometries) {
+					Boundary outerBoundaryIs;
+					List<Coordinate> coordinates;
+					if (geometryToMult instanceof Point) {
+						coordinates = ((Point) geometryToMult).getCoordinates();
+						addPointToList(coordinates, name, description, kmlProperty);
+					} else if (geometryToMult instanceof LineString) {
+						coordinates = ((LineString) geometryToMult).getCoordinates();
+						addLineStringToList(coordinates, name, description, kmlProperty);
+					} else if (geometryToMult instanceof Polygon) {
+						outerBoundaryIs = ((Polygon) geometryToMult).getOuterBoundaryIs();
+						addPolygonToList(name, outerBoundaryIs, description, kmlProperty);
+					}
+				}
+			}
+		}
+	}
+
+	private void addPolygonToList(String name, Boundary outerBoundaryIs, String description, KmlProperty kmlProperty) {
+		LinearRing linearRing = outerBoundaryIs.getLinearRing();//面
+		List<Coordinate> coordinates = linearRing.getCoordinates();
+		KmlProperty kmlProperty1 = new KmlProperty();
+		kmlProperty1.setId(snowflake.nextIdStr());
+		kmlProperty1.setName(name);
+		kmlProperty1.setPoints(coordinates);
+		kmlProperty1.setDescription(description);
+		kmlProperty1.setType(KmlPointTypeEnum.POLYGON.getCode());
+		List<KmlProperty> kmlPropertyList = kmlProperty.getKmlPropertyList();
+		kmlPropertyList.add(kmlProperty1);
+	}
+
+	private void addLineStringToList(List<Coordinate> coordinates, String name, String description, KmlProperty kmlProperty) {
+		KmlProperty kmlProperty1 = new KmlProperty();
+		kmlProperty1.setId(snowflake.nextIdStr());
+		kmlProperty1.setName(name);
+		kmlProperty1.setPoints(coordinates);
+		kmlProperty1.setDescription(description);
+		kmlProperty1.setType(KmlPointTypeEnum.LINE.getCode());
+		List<KmlProperty> kmlPropertyList = kmlProperty.getKmlPropertyList();
+		kmlPropertyList.add(kmlProperty1);
+	}
+
+	private void addPointToList(List<Coordinate> coordinates, String name, String description, KmlProperty kmlProperty) {
+		KmlProperty kmlProperty1 = new KmlProperty();
+		kmlProperty1.setId(snowflake.nextIdStr());
+		kmlProperty1.setName(name);
+		kmlProperty1.setPoints(coordinates);
+		kmlProperty1.setDescription(description);
+		kmlProperty1.setType(KmlPointTypeEnum.POINT.getCode());
+		List<KmlProperty> kmlPropertyList = kmlProperty.getKmlPropertyList();
+		kmlPropertyList.add(kmlProperty1);
+	}
+
+}
diff --git a/src/main/java/com/dji/sample/patches/kml/KmlPoint.java b/src/main/java/com/dji/sample/patches/kml/KmlPoint.java
new file mode 100644
index 0000000..fd9500d
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/kml/KmlPoint.java
@@ -0,0 +1,24 @@
+package com.dji.sample.patches.kml;
+
+import java.util.List;
+import de.micromata.opengis.kml.v_2_2_0.Coordinate;
+
+/**
+ * 点
+ */
+public class KmlPoint extends KmlBaseEntity{
+	private String color;
+	public String getColor() {
+		return color;
+	}
+	public void setColor(String color) {
+		this.color = color;
+	}
+	public KmlPoint(List<Coordinate> points,String name,String description,String color){
+		super(points, name, description);
+		this.color = color;
+	}
+	public KmlPoint() {
+		super();
+	}
+}
diff --git a/src/main/java/com/dji/sample/patches/kml/KmlPointTypeEnum.java b/src/main/java/com/dji/sample/patches/kml/KmlPointTypeEnum.java
new file mode 100644
index 0000000..87afdb4
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/kml/KmlPointTypeEnum.java
@@ -0,0 +1,18 @@
+package com.dji.sample.patches.kml;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum KmlPointTypeEnum {
+	//kml文件数据类型
+	POINT(0, "点"),
+	LINE(1, "线"),
+	POLYGON(2, "面");
+
+	private final Integer code;
+	private final String name;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/kml/KmlPolygon.java b/src/main/java/com/dji/sample/patches/kml/KmlPolygon.java
new file mode 100644
index 0000000..9acdeaa
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/kml/KmlPolygon.java
@@ -0,0 +1,14 @@
+package com.dji.sample.patches.kml;
+
+/**
+ * @program: 面状实体
+ **/
+public class KmlPolygon extends KmlBaseEntity {
+	private String color;
+	public String getColor() {
+		return color;
+	}
+	public void setColor(String color) {
+		this.color = color;
+	}
+}
diff --git a/src/main/java/com/dji/sample/patches/kml/KmlProperty.java b/src/main/java/com/dji/sample/patches/kml/KmlProperty.java
new file mode 100644
index 0000000..dd2e085
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/kml/KmlProperty.java
@@ -0,0 +1,34 @@
+package com.dji.sample.patches.kml;
+
+
+import de.micromata.opengis.kml.v_2_2_0.Coordinate;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+@Data
+public class KmlProperty implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private String id = "0";
+
+	private Set<String> ids = new HashSet<>();
+
+	private String name;
+
+	private String description;
+
+	private List<Coordinate> points = new ArrayList<>();
+
+	//0:点     1:线     2:面
+	private Integer type;
+
+	private List<KmlProperty> kmlPropertyList = new ArrayList<>();
+
+
+}
diff --git a/src/main/java/com/dji/sample/patches/service/ShpToDataSourceService.java b/src/main/java/com/dji/sample/patches/service/ShpToDataSourceService.java
index b067bd0..320fc23 100644
--- a/src/main/java/com/dji/sample/patches/service/ShpToDataSourceService.java
+++ b/src/main/java/com/dji/sample/patches/service/ShpToDataSourceService.java
@@ -25,7 +25,7 @@
      * @return 图斑生成的航线
      * @throws Exception 处理过程中可能出现的任何异常
      */
-    MultipartFile insertGeo(MultipartFile file , String workspaceId,String waylineName, double airportLat, double airportLon,String creator) throws Exception;
+    MultipartFile insertGeo(MultipartFile file , String workspaceId,String waylineName, double airportLat, double airportLon,String creator) ;
 
     /**
      * 将List<TbDkjbxxEntity>类型的数据批量插入到数据库中。
diff --git a/src/main/java/com/dji/sample/patches/service/impl/ShpToDataSourceServiceImpl.java b/src/main/java/com/dji/sample/patches/service/impl/ShpToDataSourceServiceImpl.java
index 2c5d384..3b76bd7 100644
--- a/src/main/java/com/dji/sample/patches/service/impl/ShpToDataSourceServiceImpl.java
+++ b/src/main/java/com/dji/sample/patches/service/impl/ShpToDataSourceServiceImpl.java
@@ -2,7 +2,12 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.dji.sample.patches.config.pojo.PatchesConfigPojo;
+import com.dji.sample.patches.constant.FileSufConstant;
 import com.dji.sample.patches.dao.ShpToDataSourceMapper;
+import com.dji.sample.patches.kml.KmlData;
+import com.dji.sample.patches.kml.KmlLine;
+import com.dji.sample.patches.kml.KmlPoint;
+import com.dji.sample.patches.kml.KmlPolygon;
 import com.dji.sample.patches.model.dto.ShpDTO;
 import com.dji.sample.patches.model.entity.LotInfo;
 import com.dji.sample.patches.service.ShpToDataSourceService;
@@ -11,7 +16,11 @@
 import com.dji.sample.patches.xml.utils.CreateWaylineFileUtils;
 import com.dji.sample.territory.model.entity.TbDkjbxxEntity;
 import com.dji.sample.wayline.service.IWaylineFileService;
-import org.locationtech.jts.geom.Coordinate;
+import de.micromata.opengis.kml.v_2_2_0.Coordinate;
+import lombok.extern.slf4j.Slf4j;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.locationtech.jts.io.ParseException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -19,6 +28,8 @@
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -26,11 +37,13 @@
 
 import static com.dji.sample.patches.utils.FormatConversionUtil.getCentros;
 import static com.dji.sample.patches.utils.MultipartFileTOFileUtil.convert;
+import static com.dji.sample.patches.utils.TimerUtil.getNowDay;
 import static com.dji.sample.patches.utils.ZipUtil.*;
 import static com.dji.sample.territory.utils.CoordinateSystemUtil.*;
 import static org.locationtech.jts.io.WKTConstants.POLYGON;
 
 @Service
+@Slf4j
 public class ShpToDataSourceServiceImpl implements ShpToDataSourceService {
 
     @Autowired
@@ -45,35 +58,175 @@
     private PatchesConfigPojo patchesConfigPojo;
 
     @Transactional
-    public MultipartFile insertGeo(MultipartFile file, String workspaceId, String waylineName, double airportLat, double airportLon,String creator) throws Exception {
-        List<LotInfo> list = new ArrayList<>();
-        File file1 = MultipartFileTOFileUtil.multipartFile2File(file, patchesConfigPojo.getUnzip());
-        List<ShpDTO> shpData = ShapeFileUtil.shpToGeoJson(file1);
-        for (ShpDTO shpDatum : shpData) {
+    public MultipartFile insertGeo(MultipartFile file,
+                                   String workspaceId,
+                                   String waylineName,
+                                   double airportLat,
+                                   double airportLon,
+                                   String creator){
+        // zip 格式
+        if (file.getOriginalFilename().endsWith(FileSufConstant.FILE_SUFFIX_ZIP)) {
+            List<LotInfo> list = new ArrayList<>();
+            File file1 = MultipartFileTOFileUtil.multipartFile2File(file, patchesConfigPojo.getUnzip());
+            List<ShpDTO> shpData = null;
+            try {
+                shpData = ShapeFileUtil.shpToGeoJson(file1);
+            } catch (IOException | ParseException e) {
+                throw new RuntimeException(e);
+            }
+            for (ShpDTO shpDatum : shpData) {
+                LotInfo lotInfo = new LotInfo();
+                String uuid = UUID.randomUUID().toString();
+                String bsm = uuid.replaceAll("-", "");
+                lotInfo.setBsm(bsm);
+                lotInfo.setUserName(creator);
+                lotInfo.setWorkspaceId(workspaceId);
+                lotInfo.setDkfw(poylonCGCStoWGS(convertToWKT(shpDatum.getDKFW())));
+                lotInfo.setDkbh(shpDatum.getDKBH());
+                lotInfo.setXzb(shpDatum.getXZB());
+                lotInfo.setYzb(shpDatum.getYZB());
+                lotInfo.setXzqdm(shpDatum.getXZQDM());
+                lotInfo.setXmc(DistrictCodeUtils.codeToName(lotInfo.getXzqdm()));
+                list.add(lotInfo);
+                shpToDataSourceMapper.insert(lotInfo);
+            }
+            MultipartFile multipartFile = createWaylineFile(waylineName, airportLat, airportLon, list);
+            MultipartFileTOFileUtil.deleteFile(file1);
+            return  multipartFile;
+        }
+        // kmz 格式
+        if (file.getOriginalFilename().endsWith(FileSufConstant.FILE_SUFFIX_KMZ)){
+            try {
+                InputStream inputStream = file.getInputStream();
+                // 转换 kmz 文件并获取数据
+                KmlData kmlData = ParsingKmlUtil.parseKMZFile(inputStream);
+                log.info("kmlData:{}",kmlData);
+                MultipartFile multipartFile = insertLOTAndGetMultipartFile(workspaceId, waylineName, airportLat, airportLon, creator, kmlData);
+                // 返回
+                if (multipartFile != null) return multipartFile;
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        // kml 格式
+        if (file.getOriginalFilename().endsWith(FileSufConstant.FILE_SUFFIX_KML)) {
+            try {
+                InputStream inputStream = file.getInputStream();
+                KmlData kmlData = ParsingKmlUtil.parseKmlByInputstream(inputStream);
+                log.info("kmlData:{}",kmlData);
+                MultipartFile multipartFile = insertLOTAndGetMultipartFile(workspaceId, waylineName, airportLat, airportLon, creator, kmlData);
+                // 返回
+                if (multipartFile != null) return multipartFile;
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 保存图斑信息和生成航线文件
+     * @param workspaceId
+     * @param waylineName
+     * @param airportLat
+     * @param airportLon
+     * @param creator
+     * @param kmlData
+     * @return
+     * @throws IOException
+     */
+    @Nullable
+    public MultipartFile insertLOTAndGetMultipartFile(String workspaceId,
+                                                      String waylineName,
+                                                      double airportLat,
+                                                      double airportLon,
+                                                      String creator,
+                                                      KmlData kmlData
+    ) {
+        if (null!=kmlData){
+            List<LotInfo> list = new ArrayList<>();
+            // 点、线暂不处理
+            if (null!=kmlData.getKmlPoints() && kmlData.getKmlPoints().size()>0){
+                List<KmlPoint> kmlPointList = kmlData.getKmlPoints();
+            }
+            if (null!=kmlData.getKmlLines() && kmlData.getKmlLines().size()>0){
+                List<KmlLine> kmlLineList = kmlData.getKmlLines();
+            }
+            // 处理面状数据
+            if (null!=kmlData.getKmlPolygons() && kmlData.getKmlPolygons().size()>0){
+                List<KmlPolygon> kmlPolygonList = kmlData.getKmlPolygons();
+                // 保存图斑信息
+                this.saveLot(workspaceId, creator, list, kmlPolygonList);
+                // 生成航线文件
+                MultipartFile multipartFile = createWaylineFile(waylineName, airportLat, airportLon, list);
+                // 返回
+                return  multipartFile;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 创建航线文件
+     * @param waylineName 航线名称
+     * @param airportLat
+     * @param airportLon
+     * @param list
+     * @return
+     * @throws IOException
+     */
+    @NotNull
+    public MultipartFile createWaylineFile(String waylineName, double airportLat, double airportLon, List<LotInfo> list) {
+        try {
+            List<PointPO> coordinates = GeoToolsUtil.getRoutePointOrder(list, airportLat, airportLon);
+            XMLTemplateModel xmlModel = XMLTemplateModel.init(coordinates, list);
+            CreateWaylineFileUtils.createWaylineFile(xmlModel, patchesConfigPojo.getTemplate(), patchesConfigPojo.getTargetTemplate(), patchesConfigPojo.getWaylines(), patchesConfigPojo.getTargetWaylines());
+            // 压缩文件夹中的内容
+            String destKMZFile = patchesConfigPojo.getDestKMZFile() + waylineName + ".kmz"; // 输出的KMZ文件路径
+            zipFolder(patchesConfigPojo.getSourceDir(), destKMZFile);
+            return convert(new File(destKMZFile));
+        }catch (IOException e){
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 保存图斑信息
+     * @param workspaceId
+     * @param creator
+     * @param list
+     * @param kmlPolygonList
+     */
+    public void saveLot(String workspaceId, String creator, List<LotInfo> list, List<KmlPolygon> kmlPolygonList) {
+        for (KmlPolygon kmlPolygon : kmlPolygonList) {
             LotInfo lotInfo = new LotInfo();
             String uuid = UUID.randomUUID().toString();
             String bsm = uuid.replaceAll("-", "");
             lotInfo.setBsm(bsm);
             lotInfo.setUserName(creator);
             lotInfo.setWorkspaceId(workspaceId);
-            lotInfo.setDkfw(poylonCGCStoWGS(convertToWKT(shpDatum.getDKFW())));
-            lotInfo.setDkbh(shpDatum.getDKBH());
-            lotInfo.setXzb(shpDatum.getXZB());
-            lotInfo.setYzb(shpDatum.getYZB());
-            lotInfo.setXzqdm(shpDatum.getXZQDM());
-            lotInfo.setXmc(DistrictCodeUtils.codeToName(lotInfo.getXzqdm()));
+            lotInfo.setDkbh(getNowDay());
+            lotInfo.setDkfw(handlePolygon(kmlPolygon.getPoints()));
             list.add(lotInfo);
             shpToDataSourceMapper.insert(lotInfo);
         }
-        List<PointPO> coordinates = GeoToolsUtil.getRoutePointOrder(list, airportLat, airportLon);
-        XMLTemplateModel xmlModel = XMLTemplateModel.init(coordinates, list);
-        CreateWaylineFileUtils.createWaylineFile(xmlModel, patchesConfigPojo.getTemplate(), patchesConfigPojo.getTargetTemplate(), patchesConfigPojo.getWaylines(), patchesConfigPojo.getTargetWaylines());
-        // 压缩文件夹中的内容
-        String destKMZFile = patchesConfigPojo.getDestKMZFile() + waylineName + ".kmz"; // 输出的KMZ文件路径
-        zipFolder(patchesConfigPojo.getSourceDir(), destKMZFile);
-        multipartFile = convert(new File(destKMZFile));
-        MultipartFileTOFileUtil.deleteFile(file1);
-        return multipartFile;
+    }
+
+    /**
+     * 处理面状数据
+     * @param coordinates
+     * @return
+     */
+    private String handlePolygon(List<de.micromata.opengis.kml.v_2_2_0.Coordinate> coordinates) {
+        // 转换为WKT格式
+        StringBuilder wkt = new StringBuilder("POLYGON((");
+        for (Coordinate coordinate : coordinates) {
+            wkt.append(coordinate.getLongitude()).append(" ").append(coordinate.getLatitude()).append(",");
+        }
+        // 添加第一个点的坐标以闭合多边形
+        wkt.append(coordinates.get(0).getLongitude()).append(" ").append(coordinates.get(0).getLatitude()).append("))");
+        // 返回
+        return wkt.toString();
     }
 
     @Transactional
diff --git a/src/main/java/com/dji/sample/patches/utils/ParseKmlFileUtil.java b/src/main/java/com/dji/sample/patches/utils/ParseKmlFileUtil.java
new file mode 100644
index 0000000..87141a5
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/utils/ParseKmlFileUtil.java
@@ -0,0 +1,125 @@
+package com.dji.sample.patches.utils;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+import java.io.InputStream;
+import java.util.List;
+
+/**
+ * 解析KML文件工具类
+ */
+public class ParseKmlFileUtil {
+
+	/**
+	 * 解析kml中的数据
+	 * @param inputStream
+	 * @return
+	 */
+	public static String kmlParseData(InputStream inputStream) {
+		SAXReader reader = new SAXReader();
+		Document doc = null;
+		try {
+			doc = reader.read(inputStream);
+		} catch (DocumentException e) {
+			e.printStackTrace();
+		}
+		return getResultJSON(doc);
+	}
+
+	private static String getResultJSON(Document doc) {
+		JSONObject jObj = new JSONObject();
+		if (doc == null) {
+			return null;
+		}
+
+		JSONArray jArray = new JSONArray();
+		int index = 0;
+		String autoFlightSpeed = "";
+		String actionOnFinish = "";
+		List<Element> rootEls = doc.getRootElement().elements();
+		for (Element rootEl : rootEls) {
+			List<Element> docEls = rootEl.elements();
+			for (Element docEl : docEls) {
+				if (docEl.getName().equals("Folder")) {
+					List<Element> folderEls = docEl.elements();
+					for (Element folderEl : folderEls) {
+						if (folderEl.getName().equals("Placemark")) {
+							JSONObject wayPointObj = new JSONObject();
+							List<Element> placeMarkEls = folderEl.elements();
+							index++;
+							for (Element placeMarkEl : placeMarkEls) {
+								if (placeMarkEl.getName().equals("ExtendedData")) {
+									String heading = placeMarkEl.elementTextTrim("heading");
+									String speed = placeMarkEl.elementTextTrim("speed");
+									String turnMode = placeMarkEl.elementTextTrim("turnMode");
+									wayPointObj.put("index", index);
+									wayPointObj.put("heading", Integer.parseInt(heading));
+									wayPointObj.put("speed", Integer.parseInt(speed));
+									wayPointObj.put("turnMode", turnMode);
+
+									//航点动作
+									JSONArray actionsArr = new JSONArray();
+									if (placeMarkEl.elements("actions") != null) {
+										int hIndex = 1;
+										List<Element> elList = placeMarkEl.elements("actions");
+										for (Element el : elList) {
+											JSONObject wayAction = new JSONObject();
+											String actionsName = el.getTextTrim();
+											//这里只解析航点动作,其余的参数可以根据情况自行取值
+											if (!(actionsName.equals("ShootPhoto")) && !(actionsName.equals("StartRecording")) && !(actionsName.equals("Hovering")) && !(actionsName.equals("StopRecording"))) {
+												continue;
+											}
+											String actionParam = "";//动作参数
+											if (actionsName.equals("ShootPhoto")) {//拍照
+												actionParam = el.attribute("targetMode").getValue();
+											} else if (actionsName.equals("StartRecording")) {//开始录影
+												actionParam = el.attribute("targetMode").getValue();
+											} else if (actionsName.equals("Hovering")) {//悬停
+												actionParam = el.attribute("param").getValue();
+											} else if (actionsName.equals("StopRecording")) {//结束录影
+												actionParam = el.attribute("targetMode").getValue();
+											}
+											String actionName = el.attribute("label").getValue();//动作名称
+											wayAction.put("index", hIndex++);
+											wayAction.put("actionParam", Integer.parseInt(actionParam));
+											wayAction.put("actionName", actionName);
+											actionsArr.add(wayAction);
+										}
+									}
+									wayPointObj.put("wayPoint", actionsArr);
+								}
+
+								if (placeMarkEl.getName().equals("Point")) {
+									String coordinates = placeMarkEl.elementTextTrim("coordinates");
+									wayPointObj.put("latitude", Double.parseDouble(coordinates.split(",")[1]));//纬度
+									wayPointObj.put("longitude", Double.parseDouble(coordinates.split(",")[0]));//经度
+									wayPointObj.put("altitude", Float.parseFloat(coordinates.split(",")[2]));//海拔高度
+								}
+							}
+							jArray.add(wayPointObj);
+						}
+					}
+				}
+
+				if (docEl.getName().equals("Placemark")) {
+					List<Element> extendedDataEls = docEl.elements();
+					for (Element extendedDataEl : extendedDataEls) {
+						if (extendedDataEl.getName().equals("ExtendedData")) {
+							autoFlightSpeed = extendedDataEl.elementTextTrim("autoFlightSpeed");
+							actionOnFinish = extendedDataEl.elementTextTrim("actionOnFinish");
+						}
+					}
+				}
+			}
+		}
+		jObj.put("autoFlightSpeed", autoFlightSpeed);
+		jObj.put("actionOnFinish", actionOnFinish);
+		jObj.put("wayPoint", jArray);
+		return JSONObject.toJSONString(jObj);
+	}
+}
diff --git a/src/main/java/com/dji/sample/patches/utils/ParsingKmlUtil.java b/src/main/java/com/dji/sample/patches/utils/ParsingKmlUtil.java
new file mode 100644
index 0000000..7bb9017
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/utils/ParsingKmlUtil.java
@@ -0,0 +1,236 @@
+package com.dji.sample.patches.utils;
+
+import com.dji.sample.patches.kml.KmlData;
+import com.dji.sample.patches.kml.KmlLine;
+import com.dji.sample.patches.kml.KmlPoint;
+import com.dji.sample.patches.kml.KmlPolygon;
+import de.micromata.opengis.kml.v_2_2_0.*;
+import org.apache.commons.compress.archivers.ArchiveEntry;
+import org.apache.commons.compress.archivers.ArchiveInputStream;
+import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @description: KML文件解析
+ **/
+public class ParsingKmlUtil {
+	/**
+	 *   解析kml文件
+	 */
+	public static KmlData parseKmlByFile(File file) {
+		Kml kml = Kml.unmarshal(file);
+		return getByKml(kml);
+	}
+	/**
+	 *  解析kml文件流
+	 *
+	 * @param inputstream
+	 * @return
+	 */
+	public static KmlData parseKmlByInputstream(InputStream inputstream) {
+		Kml kml = Kml.unmarshal(inputstream);
+		return getByKml(kml);
+	}
+	/**
+	 * Kml对象转自定义存储对象
+	 *
+	 * @param kml
+	 * @return
+	 */
+	public static KmlData getByKml(Kml kml) {
+		KmlData kmlData = new KmlData();
+		kmlData.setKmlPoints(new ArrayList<>());
+		kmlData.setKmlLines(new ArrayList<>());
+		kmlData.setKmlPolygons(new ArrayList<>());
+		Feature feature = kml.getFeature();
+		parseFeature(feature, kmlData);
+		return kmlData;
+	}
+
+	/**
+	 *  解析kml节点
+	 * @param feature
+	 * @param kmlData
+	 */
+	private static void parseFeature(Feature feature, KmlData kmlData) {
+		if (feature != null) {
+			if (feature instanceof Document) {
+				List<Feature> featureList = ((Document) feature).getFeature();
+				featureList.forEach(documentFeature -> {
+					if (documentFeature instanceof Placemark) {
+						getPlaceMark((Placemark) documentFeature, kmlData);
+					} else {
+						parseFeature(documentFeature, kmlData);
+					}
+				});
+			} else if (feature instanceof Folder) {
+				List<Feature> featureList = ((Folder) feature).getFeature();
+				featureList.forEach(documentFeature -> {
+					if (documentFeature instanceof Placemark) {
+						getPlaceMark((Placemark) documentFeature, kmlData);
+					} else {
+						parseFeature(documentFeature, kmlData);
+					}
+				});
+			}
+		}
+	}
+
+	private static void getPlaceMark(Placemark placemark, KmlData kmlData) {
+		Geometry geometry = placemark.getGeometry();
+        /*String name = placemark.getName();
+        placemark.getDescription();
+        System.out.println(placemark.getDescription());
+        if (name == null) {
+            name = placemark.getDescription();
+        }
+        parseGeometry(name, geometry, kmlData);*/
+		parseGeometry(placemark,geometry,kmlData);
+	}
+	/**
+	 *   解析点线面形状的数据分别放入存储对象
+	 * @param placemark placemark对象
+	 * @param geometry 形状类型
+	 * @param kmlData  存储对象
+	 */
+	private static void parseGeometry(Placemark placemark, Geometry geometry, KmlData kmlData) {
+		if (geometry != null) {
+			if (geometry instanceof Polygon) {
+				Polygon polygon = (Polygon) geometry;
+				Boundary outerBoundaryIs = polygon.getOuterBoundaryIs();
+				if (outerBoundaryIs != null) {
+					LinearRing linearRing = outerBoundaryIs.getLinearRing();
+					if (linearRing != null) {
+						List<Coordinate> coordinates = linearRing.getCoordinates();
+						if (coordinates != null) {
+							outerBoundaryIs = ((Polygon) geometry).getOuterBoundaryIs();
+							addPolygonToList(kmlData.getKmlPolygons(), placemark, outerBoundaryIs);
+						}
+					}
+				}
+			} else if (geometry instanceof LineString) {
+				LineString lineString = (LineString) geometry;
+				List<Coordinate> coordinates = lineString.getCoordinates();
+				if (coordinates != null) {
+					coordinates = ((LineString) geometry).getCoordinates();
+					addLineStringToList(kmlData.getKmlLines(), coordinates, placemark);
+				}
+			} else if (geometry instanceof Point) {
+				Point point = (Point) geometry;
+				List<Coordinate> coordinates = point.getCoordinates();
+				if (coordinates != null) {
+					coordinates = ((Point) geometry).getCoordinates();
+					addPointToList(kmlData.getKmlPoints(), coordinates, placemark);
+				}
+			} else if (geometry instanceof MultiGeometry) {
+				List<Geometry> geometries = ((MultiGeometry) geometry).getGeometry();
+				for (Geometry geometryToMult : geometries) {
+					Boundary outerBoundaryIs;
+					List<Coordinate> coordinates;
+					if (geometryToMult instanceof Point) {
+						coordinates = ((Point) geometryToMult).getCoordinates();
+						addPointToList(kmlData.getKmlPoints(), coordinates, placemark);
+					} else if (geometryToMult instanceof LineString) {
+						coordinates = ((LineString) geometryToMult).getCoordinates();
+						addLineStringToList(kmlData.getKmlLines(), coordinates, placemark);
+					} else if (geometryToMult instanceof Polygon) {
+						outerBoundaryIs = ((Polygon) geometryToMult).getOuterBoundaryIs();
+						addPolygonToList(kmlData.getKmlPolygons(), placemark, outerBoundaryIs);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 *   保存面状数据
+	 *
+	 * @param kmlPolygonList  已有面状数据
+	 * @param placemark       placemark对象
+	 * @param outerBoundaryIs 面状信息
+	 */
+	private static void addPolygonToList(List<KmlPolygon> kmlPolygonList, Placemark placemark, Boundary outerBoundaryIs) {
+		LinearRing linearRing = outerBoundaryIs.getLinearRing();// 面
+		KmlPolygon kmlPolygon = new KmlPolygon();
+		kmlPolygon.setPoints(linearRing.getCoordinates());
+		kmlPolygon.setName(placemark.getName());
+		kmlPolygon.setDescription(placemark.getDescription());
+		kmlPolygonList.add(kmlPolygon);
+	}
+	/**
+	 * 保存线状数据
+	 *
+	 * @param kmlLineList 已有线状数据
+	 * @param coordinates 线状经纬度数据
+	 * @param placemark   线状名称
+	 */
+	private static void addLineStringToList(List<KmlLine> kmlLineList, List<Coordinate> coordinates, Placemark placemark) {
+		KmlLine kmlLine = new KmlLine();
+		kmlLine.setPoints(coordinates);
+		kmlLine.setName(placemark.getName());
+		kmlLine.setDescription(placemark.getDescription());
+		kmlLineList.add(kmlLine);
+	}
+	/**
+	 * 保存点状数据
+	 *
+	 * @param kmlPointList 已有点状数据
+	 * @param coordinates  点状经纬度数据
+	 * @param placemark    点状名称
+	 */
+	private static void addPointToList(List<KmlPoint> kmlPointList, List<Coordinate> coordinates, Placemark placemark) {
+		KmlPoint kmlPoint = new KmlPoint();
+		kmlPoint.setName(placemark.getName());
+		kmlPoint.setDescription(placemark.getDescription());
+		kmlPoint.setPoints(coordinates);
+		kmlPointList.add(kmlPoint);
+	}
+
+	/**
+	 * kmz 文件解析
+	 * @param inputStream
+	 * @throws IOException
+	 */
+	public static KmlData parseKMZFile(InputStream inputStream) throws IOException {
+		KmlData kmlData = new KmlData();
+		ArchiveInputStream archiveInputStream = new ZipArchiveInputStream(inputStream);
+		ArchiveEntry entry;
+		while ((entry = archiveInputStream.getNextEntry()) != null) {
+			String name = entry.getName();
+			if (name.toLowerCase().endsWith(".kml") || name.toLowerCase().endsWith(".kmz")) {
+				// 如果发现.kml或.kmz文件,可以将其内容读取出来并传递给KMLParser处理
+				kmlData = parseKML(archiveInputStream,kmlData);
+			}
+		}
+		return kmlData;
+	}
+
+	/**
+	 * 解析kml 文件
+	 * @param kmlInputStream
+	 * @throws IOException
+	 */
+	public static KmlData parseKML(InputStream kmlInputStream, KmlData kmlData) {
+		// 取出kml中的内容
+		try (BufferedReader reader = new BufferedReader(new InputStreamReader(kmlInputStream))) {
+			String line;
+			StringBuffer xmlContent = new StringBuffer(1024);
+			while ((line = reader.readLine()) != null) {
+				// 处理每一行KML数据
+				xmlContent.append(line);
+			}
+			// System.out.println(xmlContent);
+			Kml kml = Kml.unmarshal(xmlContent.toString());
+			ParsingKmlUtil pku = new ParsingKmlUtil();
+			// 赋值
+			kmlData = pku.getByKml(kml);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		// 返回
+		return kmlData;
+	}
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/utils/CreateWaylineFileUtils.java b/src/main/java/com/dji/sample/patches/xml/utils/CreateWaylineFileUtils.java
index 20fa4dc..7825a9c 100644
--- a/src/main/java/com/dji/sample/patches/xml/utils/CreateWaylineFileUtils.java
+++ b/src/main/java/com/dji/sample/patches/xml/utils/CreateWaylineFileUtils.java
@@ -75,6 +75,7 @@
             out.close();
         } catch (Exception e) {
             log.error("write xml failed:", e);
+            throw new RuntimeException(e);
         } finally {
             if (out != null) {
                 try {
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 5abb57a..c413807 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -12,7 +12,7 @@
 #          url: jdbc:mysql://182.108.40.114:3308/drone_zt_test?useSSL=false&allowPublicKeyRetrieval=true
 #          username: root
 #          password: yshb@123
-          url: jdbc:mysql://139.196.74.78:3306/drone_test?useSSL=false&allowPublicKeyRetrieval=true
+          url: jdbc:mysql://139.196.74.78:3306/drone_o_test?useSSL=false&allowPublicKeyRetrieval=true
           username: root
           password: jxpskj_2018
         sqlite-resource:
@@ -62,10 +62,10 @@
   # BASIC parameters are required.
   BASIC:
     protocol: MQTT # @see com.dji.sample.component.mqtt.model.MqttProtocolEnum
-    host: 139.196.74.78
-    port: 1883
-    username: manage
-    password: 123456
+    host: 182.108.40.114
+    port: 31883
+    username: root
+    password: root
 #    host: 127.0.0.1
 #    port: 1883
 #    username: guest
@@ -74,13 +74,13 @@
     # If the protocol is ws/wss, this value is required.
     path:
     # 最初连接到mqtt时需要订阅的主题 多个订阅用 "," .
-    inbound-topic: sys/product/+/status,thing/product/+/requests,thing/product/+/osd
-#    inbound-topic: sys/product/+/+,thing/product/+/+
+#    inbound-topic: sys/product/+/status,thing/product/+/requests,thing/product/+/osd
+    inbound-topic: sys/product/+/+,thing/product/+/+
   DRC:
-    protocol: WS # @see com.dji.sample.component.mqtt.model.MqttProtocolEnum
-    host: 139.196.74.78
-    port: 8083
-    path: /mqtt
+    protocol: ws # @see com.dji.sample.component.mqtt.model.MqttProtocolEnum
+    host: 182.108.40.114
+    port: 35675
+    path: /ws
 
 oss:
   enable: true

--
Gitblit v1.9.3