ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteFolderController.java
@@ -43,7 +43,6 @@ * 查询分组列表 */ @ApiOperation("查询分组列表") //@PreAuthorize("@ss.hasPermi('route:folder:list')") @GetMapping("/list") public TableDataInfo list(ArdRouteFolder ardRouteFolder) { //startPage(); @@ -55,7 +54,6 @@ * 导出分组列表 */ @ApiOperation("导出分组列表") //@PreAuthorize("@ss.hasPermi('route:folder:export')") @Log(title = "分组", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, ArdRouteFolder ardRouteFolder) { @@ -68,7 +66,6 @@ * 获取分组详细信息 */ @ApiOperation("获取分组详细信息") //@PreAuthorize("@ss.hasPermi('route:folder:query')") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") String id) { return success(ardRouteFolderService.selectArdRouteFolderById(id)); @@ -78,7 +75,6 @@ * 新增分组 */ @ApiOperation("新增分组") //@PreAuthorize("@ss.hasPermi('route:folder:add')") @Log(title = "分组", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody ArdRouteFolder ardRouteFolder) { @@ -90,7 +86,6 @@ * 修改分组 */ @ApiOperation("修改分组") //@PreAuthorize("@ss.hasPermi('route:folder:edit')") @Log(title = "分组", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody ArdRouteFolder ardRouteFolder) { @@ -102,7 +97,6 @@ * 删除分组 */ @ApiOperation("删除分组") //@PreAuthorize("@ss.hasPermi('route:folder:remove')") @Log(title = "分组", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable String[] ids) { ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteInformationController.java
@@ -39,7 +39,6 @@ * 查询航线(kmz)列表 */ @ApiOperation("查询航线(kmz)列表") //@PreAuthorize("@ss.hasPermi('route:information:list')") @GetMapping("/list") public TableDataInfo list(ArdRouteInformation ardRouteInformation) { startPage(); @@ -51,7 +50,6 @@ * 导出航线(kmz)列表 */ @ApiOperation("导出航线(kmz)列表") //@PreAuthorize("@ss.hasPermi('route:information:export')") @Log(title = "航线(kmz)", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, ArdRouteInformation ardRouteInformation) { @@ -64,7 +62,6 @@ * 获取航线(kmz)详细信息 */ @ApiOperation("获取航线(kmz)详细信息") //@PreAuthorize("@ss.hasPermi('route:information:query')") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") String id) { return success(ardRouteInformationService.selectArdRouteInformationById(id)); @@ -74,7 +71,6 @@ * 新增航线(kmz) */ @ApiOperation("新增航线(kmz)") //@PreAuthorize("@ss.hasPermi('route:information:add')") @Log(title = "航线(kmz)", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody ArdRouteInformation ardRouteInformation) { @@ -86,7 +82,6 @@ * 修改航线(kmz) */ @ApiOperation("修改航线(kmz)") //@PreAuthorize("@ss.hasPermi('route:information:edit')") @Log(title = "航线(kmz)", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody ArdRouteInformation ardRouteInformation) { @@ -98,7 +93,6 @@ * 删除航线(kmz) */ @ApiOperation("删除航线(kmz)") //@PreAuthorize("@ss.hasPermi('route:information:remove')") @Log(title = "航线(kmz)", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable String[] ids) { @@ -109,7 +103,6 @@ * 导入航线(kmz)文件 */ @ApiOperation("导入航线(kmz)文件") //@PreAuthorize("@ss.hasPermi('route:information:upload')") @PostMapping("/upload") public AjaxResult upload(@RequestPart("file") MultipartFile file) { MinioUploadResult minioUploadResult = ardRouteInformationService.uploadArdRouteInformation(file); @@ -127,4 +120,14 @@ return toAjax(ardRouteInformationService.updateRouteInformationFolderId(id,folderId)); } /** * 判断行点是否在禁飞区 */ @ApiOperation("判断行点是否在禁飞区") @GetMapping("/noFly/{longitude}/{latitude}") public Boolean noFly(@PathVariable("longitude") Double longitude, @PathVariable("latitude") Double latitude) { return ardRouteInformationService.selectRouteInformationNoFly(longitude,latitude); } } ard-route/pom.xml
@@ -51,6 +51,10 @@ <groupId>com.ard</groupId> <artifactId>ard-oss</artifactId> </dependency> <dependency> <groupId>com.ard</groupId> <artifactId>ard-system</artifactId> </dependency> </dependencies> ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInformation.java
@@ -56,4 +56,7 @@ */ private UavRouteReq uavRouteReq; /** 航线数据 */ private byte[] routeData; } ard-route/src/main/java/com/ard/route/domain/vo/KmzResultVo.java
@@ -5,14 +5,19 @@ @Data public class KmzResultVo { /** 新文件名称 */ private String fileNameNew; /** Minio文件路径 */ private String minioUpPath; /** 文件路径 */ private String upPath; /** 文件大小 */ private Double upFileSize; /** 返回数据 */ private String data; } ard-route/src/main/java/com/ard/route/service/IArdRouteInformationService.java
@@ -87,4 +87,13 @@ */ public int updateRouteInformationFolderId(String id,String folderId); /** * 判断行点是否在禁飞区 * * @param longitude 经度 * @param latitude 纬度 * @return 结果 */ public Boolean selectRouteInformationNoFly(Double longitude, Double latitude); } ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInformationServiceImpl.java
@@ -1,11 +1,19 @@ package com.ard.route.service.impl; import java.io.IOException; import java.util.List; import com.ard.common.exception.ControlException; import com.ard.common.utils.DateUtils; import com.ard.common.utils.file.FileUtils; import com.ard.common.utils.uuid.IdUtils; import com.ard.data.noflyzone.domain.ArdNoFlyZone; import com.ard.data.noflyzone.domain.Vertex; import com.ard.data.noflyzone.service.IArdNoFlyZoneService; import com.ard.data.noflyzone.utils.NoFlyZoneUtils; import com.ard.oss.model.MinioUploadResult; import com.ard.oss.service.impl.OssServiceContext; import com.ard.route.domain.UavRouteReq; import com.ard.route.domain.route.ArdRouteInformation; import com.ard.route.domain.vo.KmzResultVo; import com.ard.route.service.UavRouteService; @@ -17,8 +25,7 @@ import javax.annotation.Resource; import static com.ard.route.util.ToolUtils.extractFilePath; import static com.ard.route.util.ToolUtils.getFileNameWithoutExtension; import static com.ard.route.util.ToolUtils.*; /** * 航线(kmz)Service业务层处理 @@ -38,6 +45,9 @@ @Autowired private UavRouteService routeService; @Resource private IArdNoFlyZoneService ardNoFlyZoneService; /** * 查询航线(kmz) * @@ -46,7 +56,13 @@ */ @Override public ArdRouteInformation selectArdRouteInformationById(String id) { return ardRouteInformationMapper.selectArdRouteInformationById(id); ArdRouteInformation ardRouteInformation = ardRouteInformationMapper.selectArdRouteInformationById(id); try { ardRouteInformation.setUavRouteReq((UavRouteReq) deserialize(ardRouteInformation.getRouteData())); } catch (IOException | ClassNotFoundException e) { throw new RuntimeException(e); } return ardRouteInformation; } /** @@ -73,6 +89,14 @@ if (ardRouteInformation.getFolderId() == null){ ardRouteInformation.setFolderId("0"); } // 航线数据 byte[] routeData; try { routeData = serialize(ardRouteInformation.getUavRouteReq()); } catch (IOException e) { throw new RuntimeException(e); } ardRouteInformation.setRouteData(routeData); KmzResultVo kmzResult = routeService.buildKmz(ardRouteInformation.getUavRouteReq(), ardRouteInformation.getFileName()); ardRouteInformationMapper.insertArdRouteInformation(assembly(ardRouteInformation,kmzResult)); return kmzResult.getUpPath(); @@ -188,6 +212,29 @@ } /** * 判断行点是否在禁飞区 * * @param longitude 经度 * @param latitude 纬度 * @return 结果 */ @Override public Boolean selectRouteInformationNoFly(Double longitude, Double latitude) { if (longitude == null || latitude == null) { throw new ControlException("方法参数中未找到有效经纬度字段,无法判断禁飞区!"); } List<ArdNoFlyZone> ardNoFlyZones = ardNoFlyZoneService.selectArdNoFlyZoneList(new ArdNoFlyZone()); if (!ardNoFlyZones.isEmpty()) { Vertex vertex = new Vertex(longitude, latitude); boolean inNoFlyZones = NoFlyZoneUtils.isInNoFlyZones(vertex, ardNoFlyZones); if (inNoFlyZones) { throw new ControlException("目标点在禁飞区内,无法执行操作!"); } } return true; } /** * 数据新增航线信息 */ private void insertRouteInformation(ArdRouteInformation ardRouteInformation){ ard-route/src/main/java/com/ard/route/service/impl/UavRouteServiceImpl.java
@@ -205,8 +205,10 @@ ZipOutputStream zipOutputStream = new ZipOutputStream(baos)) { zipOutputStream.setLevel(0); // 创建KMZ文件内容 // 创建 wpmz 目录中的 template.kml 文件条目 buildZipFile("wpmz/template.kml", zipOutputStream, kml); // 创建 wpmz 目录中的 waylines.wpml 文件条目 buildZipFile("wpmz/waylines.wpml", zipOutputStream, wpml); zipOutputStream.finish(); ard-route/src/main/java/com/ard/route/util/InitializationUtils.java
@@ -17,9 +17,11 @@ public UavRouteReq initialization(UavRouteReq uavRouteReq){ uavRouteReq.setTemplateType("waypoint"); // 起始点默认航线第一个点 uavRouteReq.setTakeOffRefPoint( uavRouteReq.getRoutePointList().get(0).getLatitude() + "," + uavRouteReq.getRoutePointList().get(0).getLongitude() + "," + "0"); if (uavRouteReq.getTakeOffRefPoint().isEmpty()){ uavRouteReq.setTakeOffRefPoint( uavRouteReq.getRoutePointList().get(0).getLatitude() + "," + uavRouteReq.getRoutePointList().get(0).getLongitude() + "," + "0"); } //uavRouteReq.setDroneType(89); uavRouteReq.setSubDroneType(0); uavRouteReq.setPayloadType(43); ard-route/src/main/java/com/ard/route/util/ToolUtils.java
@@ -1,5 +1,6 @@ package com.ard.route.util; import java.io.*; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -85,4 +86,21 @@ return ""; } // 对象序列化为字节数组 public static byte[] serialize(Object obj) throws IOException { try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos)) { oos.writeObject(obj); return baos.toByteArray(); } } // 字节数组反序列化为对象 public static Object deserialize(byte[] data) throws IOException, ClassNotFoundException { try (ByteArrayInputStream bais = new ByteArrayInputStream(data); ObjectInputStream ois = new ObjectInputStream(bais)) { return ois.readObject(); } } } ard-route/src/main/resources/mapper/ArdRouteInformationMapper.xml
@@ -15,6 +15,7 @@ <result property="routeType" column="route_type" /> <result property="aircraft" column="aircraft" /> <result property="aircraftModel" column="aircraft_model" /> <result property="routeData" column="route_data" /> <result property="createBy" column="create_by" /> <result property="createTime" column="create_time" /> <result property="updateBy" column="update_by" /> @@ -32,6 +33,7 @@ route_type, aircraft, aircraft_model, route_data, create_by, create_time, update_by, @@ -69,6 +71,7 @@ <if test="routeType != null">route_type,</if> <if test="aircraft != null">aircraft,</if> <if test="aircraftModel != null">aircraft_model,</if> <if test="routeData != null">route_data,</if> <if test="createBy != null">create_by,</if> <if test="createTime != null">create_time,</if> <if test="updateBy != null">update_by,</if> @@ -85,6 +88,7 @@ <if test="routeType != null">#{routeType},</if> <if test="aircraft != null">#{aircraft},</if> <if test="aircraftModel != null">#{aircraftModel},</if> <if test="routeData != null">#{routeData},</if> <if test="createBy != null">#{createBy},</if> <if test="createTime != null">#{createTime},</if> <if test="updateBy != null">#{updateBy},</if>