1. 开始航线增肌航线id用于判断是否是单次执行航线业务。
2. 增加判断无人机,禁飞区逻辑。
8 files modified
137 ■■■■■ changed files
ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteInfoController.java 7 ●●●●● patch | view | raw | blame | history
ard-admin/src/main/java/com/ard/web/controller/work/ArdServerInfoController.java 12 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInfo.java 14 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/service/IArdRouteInfoService.java 2 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInfoServiceImpl.java 56 ●●●●● patch | view | raw | blame | history
ard-route/src/main/resources/mapper/ArdRouteInfoMapper.xml 15 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/work/service/IArdServerInfoService.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/work/service/impl/ArdServerInfoServiceImpl.java 29 ●●●●● patch | view | raw | blame | history
ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteInfoController.java
@@ -143,9 +143,10 @@
     * 开始航线
     */
    @ApiOperation("开始航线")
    @PostMapping("/routeBegins/{boxSn}")
    public AjaxResult routeBegins(@PathVariable("boxSn") String boxSn) {
        ardRouteInfoService.routeBegins(boxSn);
    @PostMapping("/routeBegins/{id}/{boxSn}")
    public AjaxResult routeBegins(@PathVariable("id") String id,
                                  @PathVariable("boxSn") String boxSn) {
        ardRouteInfoService.routeBegins(id,boxSn);
        return AjaxResult.success();
    }
ard-admin/src/main/java/com/ard/web/controller/work/ArdServerInfoController.java
@@ -51,6 +51,18 @@
    }
    /**
     * 查询服务器管理列表
     */
    @ApiOperation("查询服务器管理列表")
    @PreAuthorize("@ss.hasPermi('work:server:listNo')")
    @GetMapping("/listNo")
    public TableDataInfo listNo(ArdServerInfo ardServerInfo) {
        startPage();
        List<ArdServerInfo> list = ardServerInfoService.selectArdServerInfoListNo(ardServerInfo);
        return getDataTable(list);
    }
    /**
     * 导出服务器管理列表
     */
    @ApiOperation("导出服务器管理列表")
ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInfo.java
@@ -29,10 +29,6 @@
    @Excel(name = "文件路径")
    private String path;
//    /** 文件路径1 */
//    @Excel(name = "文件路径1")
//    private String path1;
    /** 分组ID */
    @Excel(name = "分组ID")
    private String groupId;
@@ -50,7 +46,7 @@
    private String payload;
    /**
     * 是否只读 是否只读
     * 是否只读
     * 0:否
     * 1:是
     */
@@ -66,6 +62,14 @@
    private String orderByTime;
    /**
     * 是否循环 isLoop
     * 0:否
     * 1:是
     */
    @Excel(name = "是否循环")
    private String isLoop;
    /**
     * 生成kmz文件实体类
     */
    private UavRouteReq uavRouteReq;
ard-route/src/main/java/com/ard/route/service/IArdRouteInfoService.java
@@ -114,7 +114,7 @@
     * @param boxSn 云盒SN编号
     * @return 结果
     */
    public Boolean routeBegins(String boxSn);
    public Boolean routeBegins(String id, String boxSn);
    /**
     * 暂停航线
ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInfoServiceImpl.java
@@ -25,8 +25,10 @@
import com.ard.route.mapper.ArdRouteInfoMapper;
import com.ard.route.service.IArdRouteInfoService;
import com.ard.route.service.UavRouteService;
import com.ard.work.domain.cache.UavTelemetryDataCache;
import com.ard.work.domain.cache.UavWaylineCache;
import com.ard.work.domain.dto.state.PointData;
import com.ard.work.domain.dto.telemetry.TelemetryData;
import com.ard.work.domain.dto.wayline.*;
import com.ard.work.service.ITyService;
import org.slf4j.Logger;
@@ -86,17 +88,20 @@
            throw new RuntimeException(e);
        }
        // 主逻辑优化
        double altitudeOffset = getDoublePoint(ardRouteInfo.getUavRouteReq().getTakeOffRefPoint(), "alt");
        // 如果参考起飞点不为空,将每个航点高度进行加工。
        if (ardRouteInfo.getUavRouteReq().getTakeOffRefPoint() != null){
        for (RoutePointReq routePointReq : ardRouteInfo.getUavRouteReq().getRoutePointList()) {
            // 调整航点高度
            adjustRoutePointHeight(routePointReq, altitudeOffset);
            double altitudeOffset = getDoublePoint(ardRouteInfo.getUavRouteReq().getTakeOffRefPoint(), "alt");
            for (RoutePointReq routePointReq : ardRouteInfo.getUavRouteReq().getRoutePointList()) {
                // 调整每个航点高度
                adjustRoutePointHeight(routePointReq, altitudeOffset);
            }
        }
        return ardRouteInfo;
    }
    // 提取航点高度调整逻辑到方法中
    private void adjustRoutePointHeight(RoutePointReq routePointReq, double altitudeOffset) {
        routePointReq.setHeight(routePointReq.getHeight() + altitudeOffset);
    }
@@ -234,6 +239,9 @@
     */
    @Override
    public int deleteArdRouteInfoById(String id) {
        // 删除航线(kmz)文件
        ArdRouteInfo information = ardRouteInfoMapper.selectArdRouteInfoById(id);
        delOssService(information);
        return ardRouteInfoMapper.deleteArdRouteInfoById(id);
    }
@@ -332,7 +340,6 @@
    /**
     * 上传航线到边缘服务器
     *
     * ardNoflyDto
     * @return 结果
     */
@@ -346,6 +353,34 @@
        } catch (IOException | ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
        // 获取第一个点
        double firstPointLng = route.getUavRouteReq().getRoutePointList().get(0).getLongitude();
        double firstPointLat = route.getUavRouteReq().getRoutePointList().get(0).getLatitude();
        // 获取最后一个点
        double lastPointLng = route.getUavRouteReq().getRoutePointList().get(route.getUavRouteReq().getRoutePointList().size()-1).getLongitude();
        double lastPointLat = route.getUavRouteReq().getRoutePointList().get(route.getUavRouteReq().getRoutePointList().size()-1).getLatitude();
        // 无人机遥测数据,用于校验真实起飞点和第一个点是否在禁飞区
        TelemetryData telemetryData = UavTelemetryDataCache.get(boxSn);
        double telemetryDataLng = 0;
        double telemetryDataLat = 0;
        if (telemetryData != null){
            telemetryDataLng = telemetryData.getLng();
            telemetryDataLat = telemetryData.getLat();
        }
        ArdNoflyDto dto1 = new ArdNoflyDto();
        dto1.setCurrent(new Vertex(telemetryDataLng,telemetryDataLat));
        dto1.setTarget(new Vertex(firstPointLng,firstPointLat));
        verifyNoFlyZone(dto1);
        ArdNoflyDto dto2 = new ArdNoflyDto();
        dto2.setCurrent(new Vertex(lastPointLng,lastPointLat));
        dto2.setTarget(new Vertex(telemetryDataLng,telemetryDataLat));
        verifyNoFlyZone(dto2);
        // 判断禁飞区
        arrayWithinNoFlyZone(route.getUavRouteReq().getRoutePointList());
        // 1.2通过minio获取航线信息
@@ -369,7 +404,12 @@
     * @return 结果
     */
    @Override
    public Boolean routeBegins(String boxSn) {
    public Boolean routeBegins(String id,String boxSn) {
        ArdRouteInfo route = ardRouteInfoMapper.selectArdRouteInfoById(id);
        // 判断是否循环航线
        if ("1".equals(route.getIsLoop())) {
            deleteArdRouteInfoById(id);
        }
        WayLineBeginDTO wayLineBeginDTO = new WayLineBeginDTO(boxSn);
        tyService.wayLineBegin(wayLineBeginDTO);
        return true;
ard-route/src/main/resources/mapper/ArdRouteInfoMapper.xml
@@ -8,7 +8,6 @@
        <result property="id"    column="id"    />
        <result property="name"    column="name"    />
        <result property="path"    column="path"    />
<!--        <result property="path1"    column="path1"    />-->
        <result property="groupId"    column="group_id"    />
        <result property="type"    column="type"    />
        <result property="aircraft"    column="aircraft"    />
@@ -20,13 +19,13 @@
        <result property="updateBy"    column="update_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="pointCount"    column="point_count"    />
        <result property="isLoop"    column="is_loop"    />
    </resultMap>
    <sql id="selectArdRouteInfoVo">
        select id,
               name,
               path,
<!--               path1,-->
               group_id,
               type,
               aircraft,
@@ -37,7 +36,8 @@
               create_time,
               update_by,
               update_time,
               point_count
               point_count,
               is_loop
        from ard_route_info
    </sql>
@@ -50,6 +50,7 @@
            <if test="type != null  and type != ''"> and type = #{type}</if>
            <if test="path != null  and path != ''"> and path = #{path}</if>
            <if test="groupId != null"> and group_id = #{groupId}</if>
            <if test="isLoop != null"> and is_loop = #{isLoop}</if>
        </where>
        <if test="orderByTime == null and orderByTime == ''">
            ORDER BY update_time DESC
@@ -71,7 +72,6 @@
            <if test="id != null">id,</if>
            <if test="name != null">name,</if>
            <if test="path != null">path,</if>
<!--            <if test="path1 != null">path1,</if>-->
            <if test="groupId != null">group_id,</if>
            <if test="type != null">type,</if>
            <if test="aircraft != null">aircraft,</if>
@@ -83,12 +83,12 @@
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="pointCount != null">point_count,</if>
            <if test="isLoop != null">is_loop,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="name != null">#{name},</if>
            <if test="path != null">#{path},</if>
<!--            <if test="path1 != null">#{path1},</if>-->
            <if test="groupId != null">#{groupId},</if>
            <if test="type != null">#{type},</if>
            <if test="aircraft != null">#{aircraft},</if>
@@ -100,6 +100,7 @@
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="pointCount != null">#{pointCount},</if>
            <if test="isLoop != null">#{isLoop},</if>
         </trim>
    </insert>
@@ -108,7 +109,6 @@
        <trim prefix="SET" suffixOverrides=",">
            <if test="name != null">name = #{name},</if>
            <if test="path != null">path = #{path},</if>
<!--            <if test="path1 != null">path1 = #{path1},</if>-->
            <if test="groupId != null">group_id = #{groupId},</if>
            <if test="type != null">type = #{type},</if>
            <if test="aircraft != null">aircraft = #{aircraft},</if>
@@ -120,6 +120,7 @@
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="pointCount != null">point_count = #{pointCount},</if>
            <if test="isLoop != null">is_loop = #{isLoop},</if>
        </trim>
        where id = #{id}
    </update>
@@ -148,7 +149,7 @@
    </delete>
    <select id="selectArdRouteInfoByGroupId" parameterType="String" resultMap="ArdRouteInfoResult">
        select id,name,path,group_id,type,aircraft,payload,read_only,create_by,create_time,update_by,update_time,point_count from ard_route_info
        select id,name,path,group_id,type,aircraft,payload,read_only,create_by,create_time,update_by,update_time,point_count,is_loop from ard_route_info
        <where>
            <if test="groupId != null "> and group_id = #{groupId}</if>
        </where>
ard-work/src/main/java/com/ard/work/service/IArdServerInfoService.java
@@ -28,6 +28,8 @@
     */
    public List<ArdServerInfo> selectArdServerInfoList(ArdServerInfo ardServerInfo);
    public List<ArdServerInfo> selectArdServerInfoListNo(ArdServerInfo ardServerInfo);
    /**
     * 新增服务器管理
     * 
ard-work/src/main/java/com/ard/work/service/impl/ArdServerInfoServiceImpl.java
@@ -5,9 +5,11 @@
import com.ard.work.component.forest.TyClient;
import com.ard.work.component.netty.TyTcpClientManager;
import com.ard.work.domain.dto.TokenDTO;
import com.ard.work.domain.entity.ArdDroneInfo;
import com.ard.work.domain.entity.ArdServerInfo;
import com.ard.work.domain.receiver.AccessTokenReceiver;
import com.ard.work.domain.receiver.TyHttpCommonReceiver;
import com.ard.work.mapper.ArdDroneInfoMapper;
import com.ard.work.mapper.ArdServerInfoMapper;
import com.ard.work.service.IArdServerInfoService;
import com.dtflys.forest.exceptions.ForestRuntimeException;
@@ -30,11 +32,16 @@
public class ArdServerInfoServiceImpl implements IArdServerInfoService {
    @Resource
    private ArdServerInfoMapper ardServerInfoMapper;
    @Resource
    private TyClient tyClient;
    @Resource
    private ArdServerInfoMapper ardServerInfoMapper;
    @Resource
    private TyTcpClientManager tyTcpClientManager;
    @Resource
    private ArdDroneInfoMapper ArdDroneInfoMapper;
    /**
     * 查询服务器管理
@@ -59,6 +66,24 @@
        return ardServerInfoMapper.selectArdServerInfoList(ardServerInfo);
    }
    @Override
    @DataScope(deptAlias = "d", userAlias = "u")
    public List<ArdServerInfo> selectArdServerInfoListNo(ArdServerInfo ardServerInfo) {
//        List<ArdDroneInfo> ardDroneInfos = ArdDroneInfoMapper.selectArdDroneList(new ArdDroneInfo());
//        for (ArdDroneInfo ardDroneInfo : ardDroneInfos) {
//            ardDroneInfo.getBoxSn();
//        }
//        List<ArdServerInfo> servers = ardServerInfoMapper.selectArdServerInfoList(ardServerInfo);
//        for (ArdServerInfo server : servers) {
//            for (ArdDroneInfo ardDroneInfo : server.getArdDroneInfoList()) {
//                ardDroneInfo.getBoxSn();
//            }
//        }
        return ardServerInfoMapper.selectArdServerInfoList(ardServerInfo);
    }
    /**
     * 新增服务器管理
     *