1.去掉权限注解。
2.数据库存储航线实体数据。
3.增加判断行点是否在禁飞区接口。
11 files modified
131 ■■■■■ changed files
ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteFolderController.java 6 ●●●●● patch | view | raw | blame | history
ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteInformationController.java 17 ●●●●● patch | view | raw | blame | history
ard-route/pom.xml 4 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInformation.java 3 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/domain/vo/KmzResultVo.java 5 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/service/IArdRouteInformationService.java 9 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInformationServiceImpl.java 53 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/service/impl/UavRouteServiceImpl.java 4 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/util/InitializationUtils.java 8 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/util/ToolUtils.java 18 ●●●●● patch | view | raw | blame | history
ard-route/src/main/resources/mapper/ArdRouteInformationMapper.xml 4 ●●●●● patch | view | raw | blame | history
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>