ard-admin/src/main/java/com/ard/web/controller/inspection/ArdPointCloudController.java
New file @@ -0,0 +1,104 @@ package com.ard.web.controller.inspection; import java.util.List; import javax.servlet.http.HttpServletResponse; import com.ard.common.annotation.Log; import com.ard.common.core.controller.BaseController; import com.ard.common.core.domain.AjaxResult; import com.ard.common.core.page.TableDataInfo; import com.ard.common.enums.BusinessType; import com.ard.common.utils.poi.ExcelUtil; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.ard.inspection.domain.ArdPointCloud; import com.ard.inspection.service.IArdPointCloudService; /** * 点云文件Controller * * @author xia * @date 2026-03-03 */ @Api(tags = "点云文件信息") @RestController @RequestMapping("/inspection/cloud") @Slf4j public class ArdPointCloudController extends BaseController { @Autowired private IArdPointCloudService ardPointCloudService; /** * 查询点云文件列表 */ @PreAuthorize("@ss.hasPermi('inspection:cloud:list')") @GetMapping("/list") public TableDataInfo list(ArdPointCloud ardPointCloud) { startPage(); List<ArdPointCloud> list = ardPointCloudService.selectArdPointCloudList(ardPointCloud); return getDataTable(list); } /** * 导出点云文件列表 */ @PreAuthorize("@ss.hasPermi('inspection:cloud:export')") @Log(title = "点云文件", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, ArdPointCloud ardPointCloud) { List<ArdPointCloud> list = ardPointCloudService.selectArdPointCloudList(ardPointCloud); ExcelUtil<ArdPointCloud> util = new ExcelUtil<ArdPointCloud>(ArdPointCloud.class); util.exportExcel(response, list, "点云文件数据"); } /** * 获取点云文件详细信息 */ @PreAuthorize("@ss.hasPermi('inspection:cloud:query')") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") String id) { return success(ardPointCloudService.selectArdPointCloudById(id)); } /** * 新增点云文件 */ @PreAuthorize("@ss.hasPermi('inspection:cloud:add')") @Log(title = "点云文件", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody ArdPointCloud ardPointCloud) { return toAjax(ardPointCloudService.insertArdPointCloud(ardPointCloud)); } /** * 修改点云文件 */ @PreAuthorize("@ss.hasPermi('inspection:cloud:edit')") @Log(title = "点云文件", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody ArdPointCloud ardPointCloud) { return toAjax(ardPointCloudService.updateArdPointCloud(ardPointCloud)); } /** * 删除点云文件 */ @PreAuthorize("@ss.hasPermi('inspection:cloud:remove')") @Log(title = "点云文件", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable String[] ids) { return toAjax(ardPointCloudService.deleteArdPointCloudByIds(ids)); } } ard-admin/src/main/java/com/ard/web/controller/inspection/BigFileUploadController.java
@@ -5,6 +5,7 @@ import com.ard.common.core.domain.AjaxResult; import com.ard.common.enums.BusinessType; import com.ard.inspection.service.IBigFileUploadService; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import io.swagger.annotations.Api; @@ -26,16 +27,17 @@ @Autowired private IBigFileUploadService bigFileUploadService; //@Value(value = "${inspection.profile}") @Value(value = "${inspection.profile}") private String uploadPath; //@Value(value = "${inspection.chunk.path}") @Value(value = "${inspection.chunk.path}") private String chunkPath; /** * 检查分片是否存在 */ @GetMapping("/chunks/{fileMd5}") @ApiOperation("检查分片是否存在") @GetMapping("/bigfile/{fileMd5}") public AjaxResult checkChunk(@PathVariable String fileMd5) { Map<String, Object> result = bigFileUploadService.checkChunk(fileMd5,chunkPath); return AjaxResult.success(result); @@ -44,7 +46,8 @@ /** * 上传分片 */ @PostMapping("/chunk") @ApiOperation("上传分片") @PostMapping("/bigfile/chunk") public AjaxResult uploadChunk(@RequestParam("file") MultipartFile file, @RequestParam("chunkNumber") Integer chunkNumber, @RequestParam("fileMd5") String fileMd5) { @@ -55,8 +58,9 @@ /** * 合并切片 */ @ApiOperation("合并分片") @Log(title = "合并切片", businessType = BusinessType.IMPORT) @PostMapping("/merge") @PostMapping("/bigfile/merge") public AjaxResult mergeChunks(@RequestParam("md5") String md5, @RequestParam("fileName") String fileName) { Map<String, Object> result = bigFileUploadService.mergeChunks(md5, fileName, uploadPath); ard-admin/src/main/resources/application.yml
@@ -160,7 +160,11 @@ management-url: http://127.0.0.1:8080/actuator service-url: http://127.0.0.1:8080/ # 激活配置文件 profiles: active: @spring.profiles.active@ active: @spring.profiles.active@ inspection: profile: /home/inspection/uploadPath # 上传文件存储路径 chunk: path: /home/inspection/uploadPath/chunks # 切片临时目录 ard-inspection/src/main/java/com/ard/inspection/domain/ArdPointCloud.java
New file @@ -0,0 +1,47 @@ package com.ard.inspection.domain; import com.ard.common.core.domain.BaseEntity; import lombok.Data; import lombok.EqualsAndHashCode; /** * 点云文件 * @author xia */ @EqualsAndHashCode(callSuper = true) @Data public class ArdPointCloud extends BaseEntity { /** * ID */ private String id; /** * 文件名称 */ private String fileName; /** * 文件大小 */ private Long fileSize; /** * 关联状态 * 0:未关联 * 1:已关联 */ private String associatedState; /** * 航线ID */ private String routeId; /** * 分组ID */ private String groupId; } ard-inspection/src/main/java/com/ard/inspection/mapper/ArdPointCloudMapper.java
New file @@ -0,0 +1,61 @@ package com.ard.inspection.mapper; import java.util.List; import com.ard.inspection.domain.ArdPointCloud; /** * 点云文件Mapper接口 * * @author xia * @date 2026-03-03 */ public interface ArdPointCloudMapper { /** * 查询点云文件 * * @param id 点云文件主键 * @return 点云文件 */ public ArdPointCloud selectArdPointCloudById(String id); /** * 查询点云文件列表 * * @param ardPointCloud 点云文件 * @return 点云文件集合 */ public List<ArdPointCloud> selectArdPointCloudList(ArdPointCloud ardPointCloud); /** * 新增点云文件 * * @param ardPointCloud 点云文件 * @return 结果 */ public int insertArdPointCloud(ArdPointCloud ardPointCloud); /** * 修改点云文件 * * @param ardPointCloud 点云文件 * @return 结果 */ public int updateArdPointCloud(ArdPointCloud ardPointCloud); /** * 删除点云文件 * * @param id 点云文件主键 * @return 结果 */ public int deleteArdPointCloudById(String id); /** * 批量删除点云文件 * * @param ids 需要删除的数据主键集合 * @return 结果 */ public int deleteArdPointCloudByIds(String[] ids); } ard-inspection/src/main/java/com/ard/inspection/service/IArdPointCloudService.java
New file @@ -0,0 +1,61 @@ package com.ard.inspection.service; import java.util.List; import com.ard.inspection.domain.ArdPointCloud; /** * 点云文件Service接口 * * @author xia * @date 2026-03-03 */ public interface IArdPointCloudService { /** * 查询点云文件 * * @param id 点云文件主键 * @return 点云文件 */ public ArdPointCloud selectArdPointCloudById(String id); /** * 查询点云文件列表 * * @param ardPointCloud 点云文件 * @return 点云文件集合 */ public List<ArdPointCloud> selectArdPointCloudList(ArdPointCloud ardPointCloud); /** * 新增点云文件 * * @param ardPointCloud 点云文件 * @return 结果 */ public int insertArdPointCloud(ArdPointCloud ardPointCloud); /** * 修改点云文件 * * @param ardPointCloud 点云文件 * @return 结果 */ public int updateArdPointCloud(ArdPointCloud ardPointCloud); /** * 批量删除点云文件 * * @param ids 需要删除的点云文件主键集合 * @return 结果 */ public int deleteArdPointCloudByIds(String[] ids); /** * 删除点云文件信息 * * @param id 点云文件主键 * @return 结果 */ public int deleteArdPointCloudById(String id); } ard-inspection/src/main/java/com/ard/inspection/service/impl/ArdPointCloudServiceImpl.java
New file @@ -0,0 +1,92 @@ package com.ard.inspection.service.impl; import java.util.List; import com.ard.common.utils.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ard.inspection.mapper.ArdPointCloudMapper; import com.ard.inspection.domain.ArdPointCloud; import com.ard.inspection.service.IArdPointCloudService; /** * 点云文件Service业务层处理 * * @author xia * @date 2026-03-03 */ @Service public class ArdPointCloudServiceImpl implements IArdPointCloudService { @Autowired private ArdPointCloudMapper ardPointCloudMapper; /** * 查询点云文件 * * @param id 点云文件主键 * @return 点云文件 */ @Override public ArdPointCloud selectArdPointCloudById(String id) { return ardPointCloudMapper.selectArdPointCloudById(id); } /** * 查询点云文件列表 * * @param ardPointCloud 点云文件 * @return 点云文件 */ @Override public List<ArdPointCloud> selectArdPointCloudList(ArdPointCloud ardPointCloud) { return ardPointCloudMapper.selectArdPointCloudList(ardPointCloud); } /** * 新增点云文件 * * @param ardPointCloud 点云文件 * @return 结果 */ @Override public int insertArdPointCloud(ArdPointCloud ardPointCloud) { ardPointCloud.setCreateTime(DateUtils.getNowDate()); return ardPointCloudMapper.insertArdPointCloud(ardPointCloud); } /** * 修改点云文件 * * @param ardPointCloud 点云文件 * @return 结果 */ @Override public int updateArdPointCloud(ArdPointCloud ardPointCloud) { ardPointCloud.setUpdateTime(DateUtils.getNowDate()); return ardPointCloudMapper.updateArdPointCloud(ardPointCloud); } /** * 批量删除点云文件 * * @param ids 需要删除的点云文件主键 * @return 结果 */ @Override public int deleteArdPointCloudByIds(String[] ids) { return ardPointCloudMapper.deleteArdPointCloudByIds(ids); } /** * 删除点云文件信息 * * @param id 点云文件主键 * @return 结果 */ @Override public int deleteArdPointCloudById(String id) { return ardPointCloudMapper.deleteArdPointCloudById(id); } } ard-inspection/src/main/resources/mapper/ArdPointCloudMapper.xml
New file @@ -0,0 +1,105 @@ <?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.inspection.mapper.ArdPointCloudMapper"> <resultMap type="ArdPointCloud" id="ArdPointCloudResult"> <result property="id" column="id" /> <result property="fileName" column="file_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="createBy" column="create_by" /> <result property="createTime" column="create_time" /> <result property="updateBy" column="update_by" /> <result property="updateTime" column="update_time" /> </resultMap> <sql id="selectArdPointCloudVo"> select id, file_name, file_size, associated_state, route_id, group_id, create_by, create_time, update_by, update_time from ard_point_cloud </sql> <select id="selectArdPointCloudList" parameterType="ArdPointCloud" resultMap="ArdPointCloudResult"> <include refid="selectArdPointCloudVo"/> <where> <if test="fileName != null and fileName != ''"> and file_name like concat('%', #{fileName}, '%')</if> <if test="fileSize != null "> and file_size = #{fileSize}</if> <if test="associatedState != null and associatedState != ''"> and associated_state = #{associatedState}</if> <if test="routeId != null and routeId != ''"> and route_id = #{routeId}</if> <if test="groupId != null and groupId != ''"> and group_id = #{groupId}</if> </where> </select> <select id="selectArdPointCloudById" parameterType="String" resultMap="ArdPointCloudResult"> <include refid="selectArdPointCloudVo"/> where id = #{id} </select> <insert id="insertArdPointCloud" parameterType="ArdPointCloud"> insert into ard_point_cloud <trim prefix="(" suffix=")" suffixOverrides=","> <if test="id != null">id,</if> <if test="fileName != null">file_name,</if> <if test="fileSize != null">file_size,</if> <if test="associatedState != null">associated_state,</if> <if test="routeId != null">route_id,</if> <if test="groupId != null">group_id,</if> <if test="createBy != null">create_by,</if> <if test="createTime != null">create_time,</if> <if test="updateBy != null">update_by,</if> <if test="updateTime != null">update_time,</if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="id != null">#{id},</if> <if test="fileName != null">#{fileName},</if> <if test="fileSize != null">#{fileSize},</if> <if test="associatedState != null">#{associatedState},</if> <if test="routeId != null">#{routeId},</if> <if test="groupId != null">#{groupId},</if> <if test="createBy != null">#{createBy},</if> <if test="createTime != null">#{createTime},</if> <if test="updateBy != null">#{updateBy},</if> <if test="updateTime != null">#{updateTime},</if> </trim> </insert> <update id="updateArdPointCloud" parameterType="ArdPointCloud"> update ard_point_cloud <trim prefix="SET" suffixOverrides=","> <if test="fileName != null">file_name = #{fileName},</if> <if test="fileSize != null">file_size = #{fileSize},</if> <if test="associatedState != null">associated_state = #{associatedState},</if> <if test="routeId != null">route_id = #{routeId},</if> <if test="groupId != null">group_id = #{groupId},</if> <if test="createBy != null">create_by = #{createBy},</if> <if test="createTime != null">create_time = #{createTime},</if> <if test="updateBy != null">update_by = #{updateBy},</if> <if test="updateTime != null">update_time = #{updateTime},</if> </trim> where id = #{id} </update> <delete id="deleteArdPointCloudById" parameterType="String"> delete from ard_point_cloud where id = #{id} </delete> <delete id="deleteArdPointCloudByIds" parameterType="String"> delete from ard_point_cloud where id in <foreach item="id" collection="array" open="(" separator="," close=")"> #{id} </foreach> </delete> </mapper> ard-route/src/main/java/com/ard/route/domain/djuav/RoutePointReq.java
@@ -7,6 +7,7 @@ /** * 航点列表实体类 * @author xia */ @Data public class RoutePointReq implements Serializable { @@ -56,4 +57,19 @@ */ private List<ActionGroupReq> actionGroupList; /** * 目标点 */ private TargetPosObj targetPosObj; /** * 当前航线距离 */ private Double distance; /** * 当前航线速度 */ private Integer nowGlobalFlightSpeed; } ard-route/src/main/java/com/ard/route/domain/djuav/TargetPosObj.java
New file @@ -0,0 +1,29 @@ package com.ard.route.domain.djuav; import lombok.Data; import java.io.Serializable; /** * 目标点 * @author xia */ @Data public class TargetPosObj implements Serializable { /** * 经度 */ private Double longitude; /** * 纬度 */ private Double latitude; /** * 高度 */ private Double height; } ard-route/src/main/java/com/ard/route/domain/djuav/WaypointTurnReq.java
@@ -26,5 +26,4 @@ */ private Integer useStraightLine; } ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInfo.java
@@ -5,6 +5,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; /** * 航线(kmz)对象 ard_route_info * @@ -13,9 +15,7 @@ */ @EqualsAndHashCode(callSuper = true) @Data public class ArdRouteInfo extends BaseEntity { private static final long serialVersionUID = 1L; public class ArdRouteInfo extends BaseEntity implements Serializable{ /** ID */ private String id; @@ -78,4 +78,7 @@ /** 航线任务ID */ private String missionId; /** 点云数据 */ //private List<> } ard-route/src/main/java/com/ard/route/util/ToolUtils.java
@@ -1,7 +1,6 @@ package com.ard.route.util; import com.ard.route.domain.djuav.UavRouteReq; import java.io.*; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -86,6 +85,9 @@ // 对象序列化为字节数组 public static byte[] serialize(Object obj) throws IOException { if (obj == null) { return null; } try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos)) { oos.writeObject(obj);