Xiajijian
2026-03-06 7653e39b0c809b7f31aed1eaaa42e1662755dfdb
1. 优化精细化巡检业务。
3 files added
6 files modified
205 ■■■■■ changed files
ard-inspection/src/main/java/com/ard/inspection/mapper/ArdPointCloudMapper.java 5 ●●●●● patch | view | raw | blame | history
ard-inspection/src/main/resources/mapper/ArdPointCloudMapper.xml 37 ●●●●● 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/ArdRouteCloud.java 18 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInfo.java 7 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/mapper/ArdRouteCloudMapper.java 43 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInfoServiceImpl.java 41 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/util/ToolUtils.java 9 ●●●●● patch | view | raw | blame | history
ard-route/src/main/resources/mapper/ArdRouteCloudMapper.xml 41 ●●●●● patch | view | raw | blame | history
ard-inspection/src/main/java/com/ard/inspection/mapper/ArdPointCloudMapper.java
@@ -61,4 +61,9 @@
    public ArdPointCloud selectArdPointCloudByFileName(String fileName);
//    /**
//     * 根据航线ID,查询航线名称
//     */
//    public int selectCloudIdByRouteName(ArdPointCloud ardPointCloud);
}
ard-inspection/src/main/resources/mapper/ArdPointCloudMapper.xml
@@ -20,6 +20,20 @@
        <result property="filePath"    column="file_path"    />
    </resultMap>
<!--    <resultMap type="ArdPointCloud" id="ArdPointCloudRouteNameResult">-->
<!--        <result property="id"    column="id"    />-->
<!--        <result property="cloudName"    column="cloud_name"    />-->
<!--        <result property="fileName"    column="file_name"    />-->
<!--        <result property="folderName"    column="folder_name"    />-->
<!--        <result property="fileSize"    column="file_size"    />-->
<!--        <result property="associatedState"    column="associated_state"    />-->
<!--        <result property="routeId"    column="route_id"    />-->
<!--        <result property="groupId"    column="group_id"    />-->
<!--        <result property="filePath"    column="file_path"    />-->
<!--        <result property="filePath"    column="file_path"    />-->
<!--        <result property="filePath"    column="file_path"    />-->
<!--    </resultMap>-->
    <sql id="selectArdPointCloudVo">
        select id,
               cloud_name,
@@ -35,6 +49,24 @@
               update_time,
               file_path
        from ard_point_cloud
    </sql>
    <sql id="selectArdPointCloudRouteName">
        SELECT
            a.id,
            a.cloud_name,
            a.file_name,
            a.folder_name,
            a.file_size,
            a.associated_state,
            a.route_id,
            a.group_id,
            a.file_path,
            c.id,
            c.name
        FROM ard_point_cloud a
                LEFT JOIN ard_route_cloud b ON a.id = b.cloud_id
                LEFT JOIN ard_route_info c ON b.route_id = c.id
    </sql>
    <select id="selectArdPointCloudList" parameterType="ArdPointCloud" resultMap="ArdPointCloudResult">
@@ -130,4 +162,9 @@
        where file_name = #{fileName}
    </select>
<!--    <select id="selectCloudIdByRouteName" parameterType="String" resultMap="ArdPointCloudResult">-->
<!--        <include refid="selectArdPointCloudRouteName"/>-->
<!--        where file_name = #{fileName}-->
<!--    </select>-->
</mapper>
ard-route/pom.xml
@@ -64,6 +64,10 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ard</groupId>
            <artifactId>ard-inspection</artifactId>
        </dependency>
    </dependencies>
ard-route/src/main/java/com/ard/route/domain/route/ArdRouteCloud.java
New file
@@ -0,0 +1,18 @@
package com.ard.route.domain.route;
import lombok.Data;
@Data
public class ArdRouteCloud {
    /** 航线ID */
    private String routeId;
    /** 点云ID */
    private String cloudId;
    private A a;
    private B b;
}
ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInfo.java
@@ -1,11 +1,13 @@
package com.ard.route.domain.route;
import com.ard.common.core.domain.BaseEntity;
import com.ard.inspection.domain.ArdPointCloud;
import com.ard.route.domain.djuav.UavRouteReq;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.List;
/**
 * 航线(kmz)对象 ard_route_info
@@ -72,6 +74,9 @@
    /** 航线数据 */
    private byte[] routeData;
    /** 点云数据 */
    private byte[] cloudData;
    /** 行点总数 */
    private Integer pointCount;
@@ -79,6 +84,6 @@
    private String missionId;
    /** 点云数据 */
    //private List<>
    private List<ArdPointCloud> ardPointCloudList;
}
ard-route/src/main/java/com/ard/route/mapper/ArdRouteCloudMapper.java
New file
@@ -0,0 +1,43 @@
package com.ard.route.mapper;
import com.ard.route.domain.route.ArdRouteCloud;
import java.util.List;
/**
 * @author xia
 */
public interface ArdRouteCloudMapper {
    /**
     * 通过航线ID删除关联
     *
     * @param routeId 航线ID
     * @return 结果
     */
    public int deleteRouteCloudByRouteId(String routeId);
    /**
     * 批量删除关联信息
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int selectRouteCloudByCloudId(String[] ids);
    /**
     * 查询点云ID使用数量
     *
     * @param cloudId 点云ID
     * @return 结果
     */
    public int deleteRouteCloud(String cloudId);
    /**
     * 批量新增
     *
     * @param routeCloudList List
     * @return 结果
     */
    public int batchRouteCloud(List<ArdRouteCloud> routeCloudList);
}
ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInfoServiceImpl.java
@@ -1,6 +1,7 @@
package com.ard.route.service.impl;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.ard.common.exception.ControlException;
@@ -13,6 +14,8 @@
import com.ard.data.noflyzone.service.IArdNoFlyZoneService;
import com.ard.data.noflyzone.utils.NoFlyZoneUtils;
import com.ard.framework.web.service.TokenService;
import com.ard.inspection.domain.ArdPointCloud;
import com.ard.inspection.mapper.ArdPointCloudMapper;
import com.ard.oss.model.MinioUploadResult;
import com.ard.oss.service.impl.OssServiceContext;
import com.ard.route.domain.djuav.ActionGroupReq;
@@ -20,9 +23,11 @@
import com.ard.route.domain.djuav.RoutePointReq;
import com.ard.route.domain.djuav.UavRouteReq;
import com.ard.route.domain.dto.ArdNoflyDto;
import com.ard.route.domain.route.ArdRouteCloud;
import com.ard.route.domain.route.ArdRouteInfo;
import com.ard.route.domain.route.ArdRouteMission;
import com.ard.route.domain.vo.KmzResultVo;
import com.ard.route.mapper.ArdRouteCloudMapper;
import com.ard.route.mapper.ArdRouteInfoMapper;
import com.ard.route.mapper.ArdRouteMissionMapper;
import com.ard.route.service.IArdRouteInfoService;
@@ -38,8 +43,6 @@
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import static com.ard.common.utils.SecurityUtils.getUserId;
import static com.ard.route.enums.kml.DroneEnumValueEnums.M350_RTK;
import static com.ard.route.util.InitializationUtils.divided_23;
import static com.ard.route.util.ToolUtils.*;
@@ -69,6 +72,12 @@
    @Autowired
    private ArdRouteMissionMapper ardRouteMissionMapper;
    @Autowired
    private ArdPointCloudMapper ardPointCloudMapper;
    @Autowired
    private ArdRouteCloudMapper ardRouteCloudMapper;
    @Resource
    private IArdNoFlyZoneService ardNoFlyZoneService;
@@ -88,6 +97,7 @@
            if (ardRouteInfo != null) {
                if (ardRouteInfo.getRouteData() != null){
                    ardRouteInfo.setUavRouteReq((UavRouteReq) deserialize(ardRouteInfo.getRouteData()));
                    ardRouteInfo.setArdPointCloudList(deserializeLs(ardRouteInfo.getCloudData()));
                }
            }
        } catch (IOException | ClassNotFoundException e) {
@@ -153,8 +163,29 @@
        zoomProcessing(ardRouteInfo);
        ardRouteInfo.setPath(kmzResult.getPath());
        ardRouteInfo.setReadOnly("0");
        insertRoutePointCloud(ardRouteInfo);
        ardRouteInfoMapper.insertArdRouteInfo(dataProcessing(ardRouteInfo));
        return kmzResult.getPath();
    }
    /**
     * 新增航信信息时,修改点云数据
     * 同时增加航线与点云关联关系表数据
     */
    private void insertRoutePointCloud(ArdRouteInfo ardRouteInfo) {
        List<ArdRouteCloud> cloudList = new ArrayList<>();
        if (ardRouteInfo.getArdPointCloudList() != null){
            for (ArdPointCloud cloudId : ardRouteInfo.getArdPointCloudList()) {
                ArdRouteCloud cloud = new ArdRouteCloud();
                cloud.setRouteId(ardRouteInfo.getId());
                cloud.setCloudId(cloudId.getId());
                cloudId.setAssociatedState("1");
                cloudList.add(cloud);
                cloudId.setUpdateTime(DateUtils.getNowDate());
                ardPointCloudMapper.updateArdPointCloud(cloudId);
            }
            ardRouteCloudMapper.batchRouteCloud(cloudList);
        }
    }
    /**
@@ -255,14 +286,19 @@
    private ArdRouteInfo dataProcessing(ArdRouteInfo ardRouteInfo) {
        // 航线数据
        byte[] routeData = null;
        byte[] cloudData = null;
        try {
            if (ardRouteInfo.getUavRouteReq() != null){
                routeData = serialize(ardRouteInfo.getUavRouteReq());
            }
            if (ardRouteInfo.getArdPointCloudList() != null){
                cloudData = serialize(ardRouteInfo.getArdPointCloudList());
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        ardRouteInfo.setRouteData(routeData);
        ardRouteInfo.setCloudData(cloudData);
        ardRouteInfo.setPointCount(getPointCount(ardRouteInfo));
        return ardRouteInfo;
    }
@@ -419,6 +455,7 @@
        ArdRouteInfo route = ardRouteInfoMapper.selectArdRouteInfoById(id);
        try {
            route.setUavRouteReq((UavRouteReq) deserialize(route.getRouteData()));
            route.setArdPointCloudList(deserializeLs(route.getRouteData()));
        } catch (IOException | ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
ard-route/src/main/java/com/ard/route/util/ToolUtils.java
@@ -1,9 +1,11 @@
package com.ard.route.util;
import com.ard.inspection.domain.ArdPointCloud;
import com.ard.route.domain.djuav.UavRouteReq;
import java.io.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
/**
 * 工具类
@@ -103,6 +105,13 @@
        }
    }
    public static List<ArdPointCloud> deserializeLs(byte[] data) throws IOException, ClassNotFoundException {
        try (ByteArrayInputStream bais = new ByteArrayInputStream(data);
             ObjectInputStream ois = new ObjectInputStream(bais)) {
            return (List<ArdPointCloud>) ois.readObject();
        }
    }
    /**
     * 截取字符串
     * 参数: https://xxx.xxx.xxx.xxx:xxx/kmz/2025/11/08/文件名_20251108152249A001.kmz
ard-route/src/main/resources/mapper/ArdRouteCloudMapper.xml
New file
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ard.route.mapper.ArdRouteCloudMapper">
    <resultMap type="ArdRouteCloud" id="ArdRouteCloudResult">
        <result property="routeId"     column="route_id"      />
        <result property="cloudId"     column="cloud_id"      />
    </resultMap>
    <delete id="deleteRouteCloudByRouteId" parameterType="String">
        delete from ard_route_cloud where route_id=#{routeId}
    </delete>
    <select id="selectRouteCloudByCloudId" resultType="Integer">
        select count(1) from ard_route_cloud where cloud_id=#{cloudId}
    </select>
    <delete id="deleteRouteCloud" parameterType="String">
         delete from ard_route_cloud where route_id in
         <foreach collection="array" item="routeId" open="(" separator="," close=")">
             #{routeId}
        </foreach>
     </delete>
    <insert id="batchRouteCloud">
        insert into ard_route_cloud(route_id, cloud_id) values
        <foreach item="item" index="index" collection="list" separator=",">
            (#{item.routeId},#{item.cloudId})
        </foreach>
    </insert>
    <insert id="insert">
        insert into ard_route_cloud(route_id, cloud_id) values
        <foreach item="item" index="index" collection="list" separator=",">
            (#{item.routeId},#{item.cloudId})
        </foreach>
    </insert>
</mapper>