From d957404beb08f0824a4a4737528fe65d6eea0e04 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=AB=98=E5=A4=A7?= <1504665037@qq.com>
Date: Tue, 27 Jan 2026 11:33:17 +0800
Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E5=A2=9E=E5=8A=A0?=
=?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=B1=82BaseException=E5=A4=84=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../AirlineFileGroupInfoController.java | 12 ++-
.../AirLinePointControllerConvert.java | 101 ++++++++++++++++++
.../convert/AirlineFileControllerConvert.java | 6 +-
...AirlineFileGroupInfoControllerConvert.java | 3 +
.../domain/api/IAirlineFileDomain.java | 2 +-
.../api/IAirlineFileGroupInfoDomain.java | 13 ++-
.../convert/AirlineFileDomainConvert.java | 2 +
.../domain/impl/AirlineFileDomainImpl.java | 4 +-
.../impl/AirlineFileGroupInfoDomainImpl.java | 14 ++-
.../airline/domain/model/AirLinePoint.java | 78 ++++++++++++++
.../airline/domain/model/AirlineFile.java | 7 +-
.../domain/model/AirlineFileGroupInfo.java | 2 +-
.../airline/domain/uitl/WayPointUitls.java | 15 +--
.../mapper/AirlineFileGroupInfoMapper.java | 12 ++-
.../airline/mapper/AirlineFileMapper.java | 2 +-
.../api/IAirlineFileGroupInfoService.java | 8 +-
.../service/api/IAirlineFileService.java | 3 +
.../convert/AirLinePointServiceConvert.java | 101 ++++++++++++++++++
.../AirlineFileGroupInfoServiceConvert.java | 2 +
.../convert/AirlineFileServiceConvert.java | 8 +-
.../airline/service/dto/AirLinePointDTO.java | 78 ++++++++++++++
.../airline/service/dto/AirlineFileDTO.java | 7 +-
.../impl/AirlineFileServiceGroupImpl.java | 20 ++--
.../impl/AirlineFileServiceGroupInfoImpl.java | 21 ++--
.../service/impl/AirlineFileServiceImpl.java | 25 +++--
.../airline/AirlineFileGroupInfoMapper.xml | 12 +++
26 files changed, 498 insertions(+), 60 deletions(-)
create mode 100644 src/main/java/com/ruoyi/airline/controller/convert/AirLinePointControllerConvert.java
create mode 100644 src/main/java/com/ruoyi/airline/domain/model/AirLinePoint.java
create mode 100644 src/main/java/com/ruoyi/airline/service/convert/AirLinePointServiceConvert.java
create mode 100644 src/main/java/com/ruoyi/airline/service/dto/AirLinePointDTO.java
diff --git a/src/main/java/com/ruoyi/airline/controller/AirlineFileGroupInfoController.java b/src/main/java/com/ruoyi/airline/controller/AirlineFileGroupInfoController.java
index 14d1583..95eaa21 100644
--- a/src/main/java/com/ruoyi/airline/controller/AirlineFileGroupInfoController.java
+++ b/src/main/java/com/ruoyi/airline/controller/AirlineFileGroupInfoController.java
@@ -60,11 +60,12 @@ public class AirlineFileGroupInfoController extends BaseController {
*
* kmz类似zip,一般情况下内部包含kml和wpml两个文件
*
+ *
* @param file
*/
@PostMapping("/parseAndUpload")
@Operation(summary = " kmz航线文件,并转换成waypoint上传 ,仅仅返航URL")
- public AjaxResult parseAndUpload(@RequestParam("file") MultipartFile file, Long groupId) throws IOException {
+ public AjaxResult parseAndUpload(@RequestParam("file") MultipartFile file, Long groupId) throws BaseException {
AirlineFileDTO dto = iAirlineFileService.parseAndUplload(file);
AirlineFileDTO result = iAirlineFileService.save(dto);
AirlineFileGroupInfoDTO infoDTO = new AirlineFileGroupInfoDTO();
@@ -81,13 +82,16 @@ public class AirlineFileGroupInfoController extends BaseController {
*/
@PostMapping()
@Operation(summary = "在当前分组下添加初始航线,必须上传分组ID")
- public AjaxResult add(@RequestBody AirlineFileGroupInfoVO vo) throws IOException {
+ public AjaxResult add(@RequestBody AirlineFileGroupInfoVO vo) throws BaseException {
if (vo.getGroupId() == null) {
throw new BaseException("分组ID不能为空");
}
AirlineFileGroupInfoDTO dto = AirlineFileGroupInfoControllerConvert.toDTO(vo);
- AirlineFileGroupInfoDTO result = iAirlineFileGroupInfoService.save(dto);
- return success(AirlineFileGroupInfoControllerConvert.toVO(result));
+ Long result = iAirlineFileGroupInfoService.save(dto);
+ if (result > 0) {
+ return success(result);
+ }
+ throw new BaseException("新增失败");
}
diff --git a/src/main/java/com/ruoyi/airline/controller/convert/AirLinePointControllerConvert.java b/src/main/java/com/ruoyi/airline/controller/convert/AirLinePointControllerConvert.java
new file mode 100644
index 0000000..6d23acf
--- /dev/null
+++ b/src/main/java/com/ruoyi/airline/controller/convert/AirLinePointControllerConvert.java
@@ -0,0 +1,101 @@
+package com.ruoyi.airline.controller.convert;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import com.ruoyi.airline.api.domain.AirLinePointVO;
+import com.ruoyi.airline.service.dto.AirLinePointDTO;
+
+/**
+ * 航线航点Controller转换类
+ * 用于Controller层VO和Service层DTO之间的转换
+ *
+ * @author ruoyi
+ * @date 2026-01-26
+ */
+public class AirLinePointControllerConvert {
+
+ /**
+ * 将Service DTO转换为Controller VO
+ *
+ * @param dto Service DTO
+ * @return Controller VO
+ */
+ public static AirLinePointVO toVO(AirLinePointDTO dto) {
+ if (dto == null) {
+ return null;
+ }
+ AirLinePointVO vo = new AirLinePointVO();
+ vo.setId(dto.getId());
+ vo.setCommand(dto.getCommand());
+ vo.setLat(dto.getLat());
+ vo.setLon(dto.getLon());
+ vo.setAlt(dto.getAlt());
+ vo.setLoiterTime(dto.getLoiterTime());
+ vo.setCameraPitch(dto.getCameraPitch());
+ vo.setCameraRoll(dto.getCameraRoll());
+ vo.setCameraYaw(dto.getCameraYaw());
+ vo.setSessionControl(dto.getSessionControl());
+ vo.setShootCommand(dto.getShootCommand());
+ vo.setZoomAbsolute(dto.getZoomAbsolute());
+ vo.setRotateDirection(dto.getRotateDirection());
+ return vo;
+ }
+
+ /**
+ * 将Controller VO转换为Service DTO
+ *
+ * @param vo Controller VO
+ * @return Service DTO
+ */
+ public static AirLinePointDTO toDTO(AirLinePointVO vo) {
+ if (vo == null) {
+ return null;
+ }
+ AirLinePointDTO dto = new AirLinePointDTO();
+ dto.setId(vo.getId());
+ dto.setCommand(vo.getCommand());
+ dto.setLat(vo.getLat());
+ dto.setLon(vo.getLon());
+ dto.setAlt(vo.getAlt());
+ dto.setLoiterTime(vo.getLoiterTime());
+ dto.setCameraPitch(vo.getCameraPitch());
+ dto.setCameraRoll(vo.getCameraRoll());
+ dto.setCameraYaw(vo.getCameraYaw());
+ dto.setSessionControl(vo.getSessionControl());
+ dto.setShootCommand(vo.getShootCommand());
+ dto.setZoomAbsolute(vo.getZoomAbsolute());
+ dto.setRotateDirection(vo.getRotateDirection());
+ return dto;
+ }
+
+ /**
+ * 将Service DTO列表转换为Controller VO列表
+ *
+ * @param dtoList Service DTO列表
+ * @return Controller VO列表
+ */
+ public static List toVOList(List dtoList) {
+ if (dtoList == null || dtoList.isEmpty()) {
+ return null;
+ }
+ return dtoList.stream()
+ .map(AirLinePointControllerConvert::toVO)
+ .collect(Collectors.toList());
+ }
+
+ /**
+ * 将Controller VO列表转换为Service DTO列表
+ *
+ * @param voList Controller VO列表
+ * @return Service DTO列表
+ */
+ public static List toDTOList(List voList) {
+ if (voList == null || voList.isEmpty()) {
+ return null;
+ }
+ return voList.stream()
+ .map(AirLinePointControllerConvert::toDTO)
+ .collect(Collectors.toList());
+ }
+}
diff --git a/src/main/java/com/ruoyi/airline/controller/convert/AirlineFileControllerConvert.java b/src/main/java/com/ruoyi/airline/controller/convert/AirlineFileControllerConvert.java
index ab78f16..2fb8023 100644
--- a/src/main/java/com/ruoyi/airline/controller/convert/AirlineFileControllerConvert.java
+++ b/src/main/java/com/ruoyi/airline/controller/convert/AirlineFileControllerConvert.java
@@ -26,11 +26,12 @@ public class AirlineFileControllerConvert {
return null;
}
AirlineFileVO vo = new AirlineFileVO();
+ vo.setName(dto.getName());
vo.setId(dto.getId());
vo.setFileName(dto.getFileName());
vo.setFileUrl(dto.getFileUrl());
vo.setType(dto.getType());
- vo.setLinePointDtoList(dto.getLinePointDtoList());
+ vo.setLinePointVOList(AirLinePointControllerConvert.toVOList(dto.getLinePointDtoList()));
vo.setStatus(dto.getStatus());
vo.setDjiRthAltitude(dto.getDjiRthAltitude());
return vo;
@@ -48,10 +49,11 @@ public class AirlineFileControllerConvert {
}
AirlineFileDTO dto = new AirlineFileDTO();
dto.setId(vo.getId());
+ dto.setName(vo.getName());
dto.setFileName(vo.getFileName());
dto.setFileUrl(vo.getFileUrl());
dto.setType(vo.getType());
- dto.setLinePointDtoList(vo.getLinePointDtoList());
+ dto.setLinePointDtoList(AirLinePointControllerConvert.toDTOList(vo.getLinePointVOList()));
dto.setStatus(vo.getStatus());
dto.setDjiRthAltitude(vo.getDjiRthAltitude());
return dto;
diff --git a/src/main/java/com/ruoyi/airline/controller/convert/AirlineFileGroupInfoControllerConvert.java b/src/main/java/com/ruoyi/airline/controller/convert/AirlineFileGroupInfoControllerConvert.java
index 7e7583f..4ec6447 100644
--- a/src/main/java/com/ruoyi/airline/controller/convert/AirlineFileGroupInfoControllerConvert.java
+++ b/src/main/java/com/ruoyi/airline/controller/convert/AirlineFileGroupInfoControllerConvert.java
@@ -3,6 +3,7 @@ package com.ruoyi.airline.controller.convert;
import com.ruoyi.airline.api.domain.AirlineFileGroupInfoVO;
import com.ruoyi.airline.api.domain.AirlineFileGroupVO;
+import com.ruoyi.airline.service.convert.AirlineFileServiceConvert;
import com.ruoyi.airline.service.dto.AirlineFileGroupDTO;
import com.ruoyi.airline.service.dto.AirlineFileGroupInfoDTO;
@@ -33,6 +34,7 @@ public class AirlineFileGroupInfoControllerConvert {
vo.setGroupId(dto.getGroupId());
vo.setCreateBy(dto.getCreateBy());
vo.setCreateTime(dto.getCreateTime());
+
vo.setUpdateBy(dto.getUpdateBy());
vo.setUpdateTime(dto.getUpdateTime());
vo.setRemark(dto.getRemark());
@@ -57,6 +59,7 @@ public class AirlineFileGroupInfoControllerConvert {
dto.setUpdateBy(vo.getUpdateBy());
dto.setUpdateTime(vo.getUpdateTime());
dto.setRemark(vo.getRemark());
+ dto.setAirlineFileDTO(AirlineFileControllerConvert.toDTO(vo.getAirlineFileVO()));
return dto;
}
diff --git a/src/main/java/com/ruoyi/airline/domain/api/IAirlineFileDomain.java b/src/main/java/com/ruoyi/airline/domain/api/IAirlineFileDomain.java
index d4d3a08..a893f62 100644
--- a/src/main/java/com/ruoyi/airline/domain/api/IAirlineFileDomain.java
+++ b/src/main/java/com/ruoyi/airline/domain/api/IAirlineFileDomain.java
@@ -16,5 +16,5 @@ public interface IAirlineFileDomain {
List selectFileListByIds(List ids);
- AirlineFile save(AirlineFile model);
+ Long save(AirlineFile model);
}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/airline/domain/api/IAirlineFileGroupInfoDomain.java b/src/main/java/com/ruoyi/airline/domain/api/IAirlineFileGroupInfoDomain.java
index 0f81476..ec72c96 100644
--- a/src/main/java/com/ruoyi/airline/domain/api/IAirlineFileGroupInfoDomain.java
+++ b/src/main/java/com/ruoyi/airline/domain/api/IAirlineFileGroupInfoDomain.java
@@ -19,7 +19,16 @@ public interface IAirlineFileGroupInfoDomain {
*
* @param dto
*/
- int deleteGroupInfo(AirlineFileGroupInfo dto);
+ Long deleteGroupInfo(AirlineFileGroupInfo dto);
- AirlineFileGroupInfo save(AirlineFileGroupInfo model);
+ Long save(AirlineFileGroupInfo model);
+
+ /**
+ * 检查是否存在相同的groupId和airlineId
+ *
+ * @param groupId 分组ID
+ * @param airlineId 航线ID
+ * @return 是否存在
+ */
+ boolean existsByGroupIdAndAirlineId(Long groupId, Long airlineId);
}
diff --git a/src/main/java/com/ruoyi/airline/domain/convert/AirlineFileDomainConvert.java b/src/main/java/com/ruoyi/airline/domain/convert/AirlineFileDomainConvert.java
index 9b00194..4a10397 100644
--- a/src/main/java/com/ruoyi/airline/domain/convert/AirlineFileDomainConvert.java
+++ b/src/main/java/com/ruoyi/airline/domain/convert/AirlineFileDomainConvert.java
@@ -27,6 +27,7 @@ public class AirlineFileDomainConvert {
}
AirlineFileEntity entity = new AirlineFileEntity();
entity.setId(model.getId());
+ entity.setName(model.getName());
entity.setFileName(model.getFileName());
entity.setFileUrl(model.getFileUrl());
entity.setType(model.getType());
@@ -51,6 +52,7 @@ public class AirlineFileDomainConvert {
}
AirlineFile model = new AirlineFile();
model.setId(entity.getId());
+ model.setName(entity.getName());
model.setFileName(entity.getFileName());
model.setFileUrl(entity.getFileUrl());
model.setType(entity.getType());
diff --git a/src/main/java/com/ruoyi/airline/domain/impl/AirlineFileDomainImpl.java b/src/main/java/com/ruoyi/airline/domain/impl/AirlineFileDomainImpl.java
index 8c044c3..d22cc7a 100644
--- a/src/main/java/com/ruoyi/airline/domain/impl/AirlineFileDomainImpl.java
+++ b/src/main/java/com/ruoyi/airline/domain/impl/AirlineFileDomainImpl.java
@@ -28,8 +28,8 @@ public class AirlineFileDomainImpl implements IAirlineFileDomain {
}
@Override
- public AirlineFile save(AirlineFile model) {
+ public Long save(AirlineFile model) {
AirlineFileEntity entity = AirlineFileDomainConvert.toEntity(model);
- return AirlineFileDomainConvert.toModel(airlineFileMapper.save(entity));
+ return airlineFileMapper.save(entity);
}
}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/airline/domain/impl/AirlineFileGroupInfoDomainImpl.java b/src/main/java/com/ruoyi/airline/domain/impl/AirlineFileGroupInfoDomainImpl.java
index 891da30..b6d4400 100644
--- a/src/main/java/com/ruoyi/airline/domain/impl/AirlineFileGroupInfoDomainImpl.java
+++ b/src/main/java/com/ruoyi/airline/domain/impl/AirlineFileGroupInfoDomainImpl.java
@@ -32,15 +32,25 @@ public class AirlineFileGroupInfoDomainImpl implements IAirlineFileGroupInfoDoma
}
@Override
- public int deleteGroupInfo(AirlineFileGroupInfo model) {
+ public Long deleteGroupInfo(AirlineFileGroupInfo model) {
model.setDelFlag(1L);
AirlineFileGroupInfoEntity Entity = AirlineFileGroupInfoDomainConvert.toEntity(model);
return airlineFileGroupInfoMapper.deleteGroupInfo(Entity);
}
@Override
- public AirlineFileGroupInfo save(AirlineFileGroupInfo model) {
+ public Long save(AirlineFileGroupInfo model) {
AirlineFileGroupInfoEntity Entity = AirlineFileGroupInfoDomainConvert.toEntity(model);
return airlineFileGroupInfoMapper.save(Entity);
}
+
+ @Override
+ public boolean existsByGroupIdAndAirlineId(Long groupId, Long airlineId) {
+ AirlineFileGroupInfo model = new AirlineFileGroupInfo();
+ model.setGroupId(groupId);
+ model.setAirlineId(airlineId);
+ AirlineFileGroupInfoEntity entity = AirlineFileGroupInfoDomainConvert.toEntity(model);
+ int count = airlineFileGroupInfoMapper.countByGroupIdAndAirlineId(entity);
+ return count > 0;
+ }
}
diff --git a/src/main/java/com/ruoyi/airline/domain/model/AirLinePoint.java b/src/main/java/com/ruoyi/airline/domain/model/AirLinePoint.java
new file mode 100644
index 0000000..148ea36
--- /dev/null
+++ b/src/main/java/com/ruoyi/airline/domain/model/AirLinePoint.java
@@ -0,0 +1,78 @@
+package com.ruoyi.airline.domain.model;
+/**
+ * 航线航点VO
+ *
+ * @author 拓恒
+ * @date 2026-01-17
+ */
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class AirLinePoint implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+ /**
+ * 序号
+ */
+ private Integer id;
+
+ /**
+ * 动作id
+ */
+ private Integer command;
+ /**
+ * 经纬度 +-180
+ */
+ private String lat;
+ /**
+ * 经纬度 +-90
+ */
+ private String lon;
+
+ /**
+ * 高度
+ */
+ private Integer alt;
+
+ /**
+ * 悬停时间s
+ */
+ private String loiterTime;
+
+ /**
+ * 相机俯仰角
+ */
+ private String cameraPitch;
+
+ /**
+ * 相机滚动角
+ */
+ private String cameraRoll;
+
+ /**
+ * 相机偏航角
+ */
+ private String cameraYaw;
+
+ /**
+ * 挂载控制 1 相机
+ */
+ private Integer sessionControl;
+ /**
+ * 相机指令 1 拍照
+ */
+ private Integer shootCommand;
+
+ /**
+ * 绝对变焦 目前 1-10
+ */
+ private Integer zoomAbsolute;
+
+ /***
+ * 转动方向 -1逆时针 1相对机场方向 (硬件定义的)
+ */
+ private Integer rotateDirection;
+}
diff --git a/src/main/java/com/ruoyi/airline/domain/model/AirlineFile.java b/src/main/java/com/ruoyi/airline/domain/model/AirlineFile.java
index e232eb4..5728da1 100644
--- a/src/main/java/com/ruoyi/airline/domain/model/AirlineFile.java
+++ b/src/main/java/com/ruoyi/airline/domain/model/AirlineFile.java
@@ -19,7 +19,10 @@ public class AirlineFile {
* 主键ID
*/
private Long id;
-
+ /**
+ * 航线名称
+ */
+ private String name;
/**
* 文件名称
*/
@@ -56,7 +59,7 @@ public class AirlineFile {
/**
* 航线点列表
*/
- private List linePointDtoList;
+ private List linePointDtoList;
/**
* 数据来源
diff --git a/src/main/java/com/ruoyi/airline/domain/model/AirlineFileGroupInfo.java b/src/main/java/com/ruoyi/airline/domain/model/AirlineFileGroupInfo.java
index 65f82fd..4110f1e 100644
--- a/src/main/java/com/ruoyi/airline/domain/model/AirlineFileGroupInfo.java
+++ b/src/main/java/com/ruoyi/airline/domain/model/AirlineFileGroupInfo.java
@@ -1,6 +1,5 @@
package com.ruoyi.airline.domain.model;
-import com.ruoyi.common.core.web.domain.BaseEntity;
import com.ruoyi.common.core.web.domain.ExBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -29,6 +28,7 @@ public class AirlineFileGroupInfo extends ExBaseEntity {
*/
private Long airlineId;
+ private AirlineFile airlineFile;
@Override
public String toString() {
diff --git a/src/main/java/com/ruoyi/airline/domain/uitl/WayPointUitls.java b/src/main/java/com/ruoyi/airline/domain/uitl/WayPointUitls.java
index 7e7c066..4d73b85 100644
--- a/src/main/java/com/ruoyi/airline/domain/uitl/WayPointUitls.java
+++ b/src/main/java/com/ruoyi/airline/domain/uitl/WayPointUitls.java
@@ -2,6 +2,7 @@ package com.ruoyi.airline.domain.uitl;
import com.ruoyi.airline.api.domain.AirLinePointVO;
import com.ruoyi.airline.domain.model.kml.*;
+import com.ruoyi.airline.service.dto.AirLinePointDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;
@@ -27,7 +28,7 @@ public class WayPointUitls {
StringBuilder waypointBuilder = new StringBuilder("QGC WPL 110\n");
// 重置全局id计数器
//定义waypoint的航点对象集合备用
- List linePoints = new ArrayList<>();
+ List linePoints = new ArrayList<>();
//m3和m4TD的机型可以从missionConfig获取部分基础数据
KmlMissionConfig missionConfig = kmlInfo.getDocument().getKmlMissionConfig();
//其他场景下都可以从missionConfig 拿航点和动作集合
@@ -67,7 +68,7 @@ public class WayPointUitls {
String[] coords = cleanCoords.split(",");
// 基础航点(安全点22和结束点20之间的其他16普通航点)
- AirLinePointVO waypoint = buildPoint(
+ AirLinePointDTO waypoint = buildPoint(
16,
coords[1], coords[0],
(int) Float.parseFloat(placeMark.getHeight()),
@@ -98,7 +99,7 @@ public class WayPointUitls {
// 5. 生成Waypoints文件内容
for (int i = 0; i < linePoints.size(); i++) {
- AirLinePointVO point = linePoints.get(i);
+ AirLinePointDTO point = linePoints.get(i);
waypointBuilder.append(formatWaypointLine(point, i)).append("\n");
}
@@ -107,7 +108,7 @@ public class WayPointUitls {
}
// 格式化航点行(直接使用DTO字段)
- public static String formatWaypointLine(AirLinePointVO point, Integer index) {
+ public static String formatWaypointLine(AirLinePointDTO point, Integer index) {
switch (point.getCommand()) {
case 16:
if (index == 0) {
@@ -167,7 +168,7 @@ public class WayPointUitls {
}
// 动作解析逻辑
- public static void processActions(KmlAction action, List linePoints) {
+ public static void processActions(KmlAction action, List linePoints) {
//kmz航线的动作code
String actionType = action.getActionActuatorFunc();
@@ -277,10 +278,10 @@ public class WayPointUitls {
//构建waypoint航点
- public static AirLinePointVO buildPoint(int command, String lat, String lon, int alt,
+ public static AirLinePointDTO buildPoint(int command, String lat, String lon, int alt,
String loiterTime, String cameraPitch, String cameraRoll, String cameraYaw,
int sessionControl, int zoomAbsolute, int rotateDirection) {
- AirLinePointVO point = new AirLinePointVO();
+ AirLinePointDTO point = new AirLinePointDTO();
point.setCommand(command);
point.setLat(lat);
point.setLon(lon);
diff --git a/src/main/java/com/ruoyi/airline/mapper/AirlineFileGroupInfoMapper.java b/src/main/java/com/ruoyi/airline/mapper/AirlineFileGroupInfoMapper.java
index 4960544..3a85d5d 100644
--- a/src/main/java/com/ruoyi/airline/mapper/AirlineFileGroupInfoMapper.java
+++ b/src/main/java/com/ruoyi/airline/mapper/AirlineFileGroupInfoMapper.java
@@ -15,7 +15,15 @@ public interface AirlineFileGroupInfoMapper {
List selectGroupList(AirlineFileGroupInfoEntity entity);
- int deleteGroupInfo(AirlineFileGroupInfoEntity entity);
+ Long deleteGroupInfo(AirlineFileGroupInfoEntity entity);
- AirlineFileGroupInfo save(AirlineFileGroupInfoEntity entity);
+ Long save(AirlineFileGroupInfoEntity entity);
+
+ /**
+ * 检查是否存在相同的groupId和airlineId
+ *
+ * @param entity 包含groupId和airlineId的实体
+ * @return 存在的记录数
+ */
+ int countByGroupIdAndAirlineId(AirlineFileGroupInfoEntity entity);
}
diff --git a/src/main/java/com/ruoyi/airline/mapper/AirlineFileMapper.java b/src/main/java/com/ruoyi/airline/mapper/AirlineFileMapper.java
index f5fdcb7..05f5186 100644
--- a/src/main/java/com/ruoyi/airline/mapper/AirlineFileMapper.java
+++ b/src/main/java/com/ruoyi/airline/mapper/AirlineFileMapper.java
@@ -13,7 +13,7 @@ import java.util.List;
public interface AirlineFileMapper {
- AirlineFileEntity save(AirlineFileEntity entity);
+ Long save(AirlineFileEntity entity);
List selectFileListByIds(List ids);
}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/airline/service/api/IAirlineFileGroupInfoService.java b/src/main/java/com/ruoyi/airline/service/api/IAirlineFileGroupInfoService.java
index ba86239..99e71c9 100644
--- a/src/main/java/com/ruoyi/airline/service/api/IAirlineFileGroupInfoService.java
+++ b/src/main/java/com/ruoyi/airline/service/api/IAirlineFileGroupInfoService.java
@@ -1,10 +1,8 @@
package com.ruoyi.airline.service.api;
-import com.alibaba.fastjson.JSONObject;
import com.ruoyi.airline.service.dto.AirlineFileGroupInfoDTO;
-import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.common.core.exception.base.BaseException;
-import java.io.IOException;
import java.util.List;
/**
@@ -13,9 +11,9 @@ import java.util.List;
* @author 拓恒
*/
public interface IAirlineFileGroupInfoService {
- List selectGroupInfoListById(Long groupId);
+ List selectGroupInfoListById(Long groupId);
- AirlineFileGroupInfoDTO save(AirlineFileGroupInfoDTO dto) throws IOException;
+ Long save(AirlineFileGroupInfoDTO dto) throws BaseException;
}
diff --git a/src/main/java/com/ruoyi/airline/service/api/IAirlineFileService.java b/src/main/java/com/ruoyi/airline/service/api/IAirlineFileService.java
index 6c03c13..6b24f8c 100644
--- a/src/main/java/com/ruoyi/airline/service/api/IAirlineFileService.java
+++ b/src/main/java/com/ruoyi/airline/service/api/IAirlineFileService.java
@@ -1,5 +1,6 @@
package com.ruoyi.airline.service.api;
+import com.ruoyi.airline.domain.model.AirlineFile;
import com.ruoyi.airline.service.dto.AirlineFileDTO;
import org.springframework.web.multipart.MultipartFile;
@@ -19,4 +20,6 @@ public interface IAirlineFileService {
AirlineFileDTO parseAndUplload(MultipartFile file);
AirlineFileDTO createOrupdate(AirlineFileDTO airlineFile) throws IOException;
+
+ AirlineFile selectById(Long airlineId);
}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/airline/service/convert/AirLinePointServiceConvert.java b/src/main/java/com/ruoyi/airline/service/convert/AirLinePointServiceConvert.java
new file mode 100644
index 0000000..ca2826e
--- /dev/null
+++ b/src/main/java/com/ruoyi/airline/service/convert/AirLinePointServiceConvert.java
@@ -0,0 +1,101 @@
+package com.ruoyi.airline.service.convert;
+
+import com.ruoyi.airline.service.dto.AirLinePointDTO;
+import com.ruoyi.airline.domain.model.AirLinePoint;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 航线航点Service转换类
+ * 用于Service DTO和Domain模型之间的转换
+ *
+ * @author ruoyi
+ * @date 2026-01-26
+ */
+public class AirLinePointServiceConvert {
+
+ /**
+ * 将Service DTO转换为Domain模型
+ *
+ * @param dto Service DTO
+ * @return Domain模型
+ */
+ public static AirLinePoint toModel(AirLinePointDTO dto) {
+ if (dto == null) {
+ return null;
+ }
+ AirLinePoint model = new AirLinePoint();
+ model.setId(dto.getId());
+ model.setCommand(dto.getCommand());
+ model.setLat(dto.getLat());
+ model.setLon(dto.getLon());
+ model.setAlt(dto.getAlt());
+ model.setLoiterTime(dto.getLoiterTime());
+ model.setCameraPitch(dto.getCameraPitch());
+ model.setCameraRoll(dto.getCameraRoll());
+ model.setCameraYaw(dto.getCameraYaw());
+ model.setSessionControl(dto.getSessionControl());
+ model.setShootCommand(dto.getShootCommand());
+ model.setZoomAbsolute(dto.getZoomAbsolute());
+ model.setRotateDirection(dto.getRotateDirection());
+ return model;
+ }
+
+ /**
+ * 将Domain模型转换为Service DTO
+ *
+ * @param model Domain模型
+ * @return Service DTO
+ */
+ public static AirLinePointDTO toDTO(AirLinePoint model) {
+ if (model == null) {
+ return null;
+ }
+ AirLinePointDTO dto = new AirLinePointDTO();
+ dto.setId(model.getId());
+ dto.setCommand(model.getCommand());
+ dto.setLat(model.getLat());
+ dto.setLon(model.getLon());
+ dto.setAlt(model.getAlt());
+ dto.setLoiterTime(model.getLoiterTime());
+ dto.setCameraPitch(model.getCameraPitch());
+ dto.setCameraRoll(model.getCameraRoll());
+ dto.setCameraYaw(model.getCameraYaw());
+ dto.setSessionControl(model.getSessionControl());
+ dto.setShootCommand(model.getShootCommand());
+ dto.setZoomAbsolute(model.getZoomAbsolute());
+ dto.setRotateDirection(model.getRotateDirection());
+ return dto;
+ }
+
+ /**
+ * 将Domain模型列表转换为Service DTO列表
+ *
+ * @param modelList Domain模型列表
+ * @return Service DTO列表
+ */
+ public static List toDTOList(List modelList) {
+ if (modelList == null || modelList.isEmpty()) {
+ return null;
+ }
+ return modelList.stream()
+ .map(AirLinePointServiceConvert::toDTO)
+ .collect(Collectors.toList());
+ }
+
+ /**
+ * 将Service DTO列表转换为Domain模型列表
+ *
+ * @param dtoList Service DTO列表
+ * @return Domain模型列表
+ */
+ public static List toModelList(List dtoList) {
+ if (dtoList == null || dtoList.isEmpty()) {
+ return null;
+ }
+ return dtoList.stream()
+ .map(AirLinePointServiceConvert::toModel)
+ .collect(Collectors.toList());
+ }
+}
diff --git a/src/main/java/com/ruoyi/airline/service/convert/AirlineFileGroupInfoServiceConvert.java b/src/main/java/com/ruoyi/airline/service/convert/AirlineFileGroupInfoServiceConvert.java
index 2daeac2..c9793f0 100644
--- a/src/main/java/com/ruoyi/airline/service/convert/AirlineFileGroupInfoServiceConvert.java
+++ b/src/main/java/com/ruoyi/airline/service/convert/AirlineFileGroupInfoServiceConvert.java
@@ -30,6 +30,7 @@ public class AirlineFileGroupInfoServiceConvert {
dto.setId(model.getId());
dto.setGroupId(model.getGroupId());
dto.setAirlineId(model.getAirlineId());
+ dto.setAirlineFileDTO(AirlineFileServiceConvert.toDTO(model.getAirlineFile()));
return dto;
}
@@ -47,6 +48,7 @@ public class AirlineFileGroupInfoServiceConvert {
model.setId(dto.getId());
model.setGroupId(dto.getGroupId());
model.setAirlineId(dto.getAirlineId());
+ model.setAirlineFile(AirlineFileServiceConvert.toModel(dto.getAirlineFileDTO()));
return model;
}
diff --git a/src/main/java/com/ruoyi/airline/service/convert/AirlineFileServiceConvert.java b/src/main/java/com/ruoyi/airline/service/convert/AirlineFileServiceConvert.java
index 62013c9..bc6450f 100644
--- a/src/main/java/com/ruoyi/airline/service/convert/AirlineFileServiceConvert.java
+++ b/src/main/java/com/ruoyi/airline/service/convert/AirlineFileServiceConvert.java
@@ -1,7 +1,7 @@
package com.ruoyi.airline.service.convert;
-import com.ruoyi.airline.service.dto.AirlineFileDTO;
import com.ruoyi.airline.domain.model.AirlineFile;
+import com.ruoyi.airline.service.dto.AirlineFileDTO;
import java.util.List;
import java.util.stream.Collectors;
@@ -27,12 +27,13 @@ public class AirlineFileServiceConvert {
}
AirlineFile model = new AirlineFile();
model.setId(dto.getId());
+ model.setName(dto.getName());
model.setFileName(dto.getFileName());
model.setFileUrl(dto.getFileUrl());
model.setType(dto.getType());
model.setNote(dto.getNote());
model.setDistance(dto.getDistance());
- model.setLinePointDtoList(dto.getLinePointDtoList());
+ model.setLinePointDtoList(AirLinePointServiceConvert.toModelList(dto.getLinePointDtoList()));
model.setSource(dto.getSource());
model.setStatus(dto.getStatus());
model.setFileMd5(dto.getFileMd5());
@@ -61,12 +62,13 @@ public class AirlineFileServiceConvert {
}
AirlineFileDTO dto = new AirlineFileDTO();
dto.setId(model.getId());
+ dto.setName(model.getName());
dto.setFileName(model.getFileName());
dto.setFileUrl(model.getFileUrl());
dto.setType(model.getType());
dto.setNote(model.getNote());
dto.setDistance(model.getDistance());
- dto.setLinePointDtoList(model.getLinePointDtoList());
+ dto.setLinePointDtoList(AirLinePointServiceConvert.toDTOList(model.getLinePointDtoList()));
dto.setSource(model.getSource());
dto.setStatus(model.getStatus());
dto.setFileMd5(model.getFileMd5());
diff --git a/src/main/java/com/ruoyi/airline/service/dto/AirLinePointDTO.java b/src/main/java/com/ruoyi/airline/service/dto/AirLinePointDTO.java
new file mode 100644
index 0000000..e210f2f
--- /dev/null
+++ b/src/main/java/com/ruoyi/airline/service/dto/AirLinePointDTO.java
@@ -0,0 +1,78 @@
+package com.ruoyi.airline.service.dto;
+/**
+ * 航线航点VO
+ *
+ * @author 拓恒
+ * @date 2026-01-17
+ */
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class AirLinePointDTO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+ /**
+ * 序号
+ */
+ private Integer id;
+
+ /**
+ * 动作id
+ */
+ private Integer command;
+ /**
+ * 经纬度 +-180
+ */
+ private String lat;
+ /**
+ * 经纬度 +-90
+ */
+ private String lon;
+
+ /**
+ * 高度
+ */
+ private Integer alt;
+
+ /**
+ * 悬停时间s
+ */
+ private String loiterTime;
+
+ /**
+ * 相机俯仰角
+ */
+ private String cameraPitch;
+
+ /**
+ * 相机滚动角
+ */
+ private String cameraRoll;
+
+ /**
+ * 相机偏航角
+ */
+ private String cameraYaw;
+
+ /**
+ * 挂载控制 1 相机
+ */
+ private Integer sessionControl;
+ /**
+ * 相机指令 1 拍照
+ */
+ private Integer shootCommand;
+
+ /**
+ * 绝对变焦 目前 1-10
+ */
+ private Integer zoomAbsolute;
+
+ /***
+ * 转动方向 -1逆时针 1相对机场方向 (硬件定义的)
+ */
+ private Integer rotateDirection;
+}
diff --git a/src/main/java/com/ruoyi/airline/service/dto/AirlineFileDTO.java b/src/main/java/com/ruoyi/airline/service/dto/AirlineFileDTO.java
index ba8b3d4..a54944c 100644
--- a/src/main/java/com/ruoyi/airline/service/dto/AirlineFileDTO.java
+++ b/src/main/java/com/ruoyi/airline/service/dto/AirlineFileDTO.java
@@ -19,7 +19,10 @@ public class AirlineFileDTO {
* 主键ID
*/
private Long id;
-
+ /**
+ * 航线名称
+ */
+ private String name;
/**
* 文件名称
*/
@@ -57,7 +60,7 @@ public class AirlineFileDTO {
/**
* 航线点列表
*/
- private List linePointDtoList;
+ private List linePointDtoList;
/**
* 关联机场id
diff --git a/src/main/java/com/ruoyi/airline/service/impl/AirlineFileServiceGroupImpl.java b/src/main/java/com/ruoyi/airline/service/impl/AirlineFileServiceGroupImpl.java
index 24d7d71..5ec8059 100644
--- a/src/main/java/com/ruoyi/airline/service/impl/AirlineFileServiceGroupImpl.java
+++ b/src/main/java/com/ruoyi/airline/service/impl/AirlineFileServiceGroupImpl.java
@@ -13,7 +13,6 @@ import com.ruoyi.airline.service.convert.AirlineFileGroupServiceConvert;
import com.ruoyi.airline.service.convert.AirlineFileServiceConvert;
import com.ruoyi.airline.service.dto.AirlineFileGroupDTO;
import com.ruoyi.airline.service.dto.AirlineFileGroupInfoDTO;
-import com.ruoyi.common.core.exception.base.BaseException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -48,23 +47,20 @@ public class AirlineFileServiceGroupImpl implements IAirlineFileGroupService {
AirlineFileGroupInfoDTO dto = new AirlineFileGroupInfoDTO();
dto.setGroupId(groupId);
AirlineFileGroupInfo model = AirlineFileGroupInfoServiceConvert.toModel(dto);
- int result = iAirlineFileGroupInfoDomain.deleteGroupInfo(model);
- if (result > 0) {
- // 2、删除分组
- AirlineFileGroup model2 = new AirlineFileGroup();
- model2.setGroupId(groupId);
- model2.setUserId(userId);
- return iAirlineFileGroupDomain.deletegroup(model2);
- }
- // TODO 增加事务机制
- throw new BaseException("删除航线失败");
+ iAirlineFileGroupInfoDomain.deleteGroupInfo(model);
+
+ // 2、删除分组
+ AirlineFileGroup model2 = new AirlineFileGroup();
+ model2.setGroupId(groupId);
+ model2.setUserId(userId);
+ return iAirlineFileGroupDomain.deletegroup(model2);
}
@Override
public boolean checkGroupNameUnique(AirlineFileGroupDTO group) {
AirlineFileGroup model = AirlineFileGroupServiceConvert.toModel(group);
- return iAirlineFileGroupDomain.checkgroupNameUnique(model) ;
+ return iAirlineFileGroupDomain.checkgroupNameUnique(model);
}
@Override
diff --git a/src/main/java/com/ruoyi/airline/service/impl/AirlineFileServiceGroupInfoImpl.java b/src/main/java/com/ruoyi/airline/service/impl/AirlineFileServiceGroupInfoImpl.java
index a09f0ba..e934103 100644
--- a/src/main/java/com/ruoyi/airline/service/impl/AirlineFileServiceGroupInfoImpl.java
+++ b/src/main/java/com/ruoyi/airline/service/impl/AirlineFileServiceGroupInfoImpl.java
@@ -7,13 +7,12 @@ import com.ruoyi.airline.service.api.IAirlineFileService;
import com.ruoyi.airline.service.convert.AirlineFileGroupInfoServiceConvert;
import com.ruoyi.airline.service.dto.AirlineFileDTO;
import com.ruoyi.airline.service.dto.AirlineFileGroupInfoDTO;
+import com.ruoyi.common.core.exception.base.BaseException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
-import java.io.IOException;
import java.util.List;
/**
@@ -38,17 +37,27 @@ public class AirlineFileServiceGroupInfoImpl implements IAirlineFileGroupInfoSer
@Override
public List selectGroupInfoListById(Long groupId) {
List models = iAirlineFileGroupInfoDomain.selectGroupInfoListById(groupId);
+ models.forEach(model -> {
+ model.setAirlineFile(iAirlineFileService.selectById(model.getAirlineId()));
+ });
return AirlineFileGroupInfoServiceConvert.toDtoList(models);
}
@Override
- public AirlineFileGroupInfoDTO save(AirlineFileGroupInfoDTO dto) throws IOException {
+ public Long save(AirlineFileGroupInfoDTO dto) throws BaseException {
AirlineFileDTO result = iAirlineFileService.save(dto.getAirlineFileDTO());
- dto.setAirlineFileDTO(result);
+
+ dto.setAirlineId(result.getId());
// 保存分组信息
AirlineFileGroupInfo model = AirlineFileGroupInfoServiceConvert.toModel(dto);
- AirlineFileGroupInfo airlineFileGroupInfoDTO = iAirlineFileGroupInfoDomain.save(model);
- return AirlineFileGroupInfoServiceConvert.toDTO(airlineFileGroupInfoDTO);
+
+ // 检查唯一性:同一个分组下不能有相同的航线
+ boolean exists = iAirlineFileGroupInfoDomain.existsByGroupIdAndAirlineId(model.getGroupId(), model.getAirlineId());
+ if (exists) {
+ throw new BaseException("该航线已存在于当前分组中");
+ }
+
+ return iAirlineFileGroupInfoDomain.save(model);
}
}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/airline/service/impl/AirlineFileServiceImpl.java b/src/main/java/com/ruoyi/airline/service/impl/AirlineFileServiceImpl.java
index 3cb49b7..a1eaa61 100644
--- a/src/main/java/com/ruoyi/airline/service/impl/AirlineFileServiceImpl.java
+++ b/src/main/java/com/ruoyi/airline/service/impl/AirlineFileServiceImpl.java
@@ -8,6 +8,7 @@ import com.ruoyi.airline.domain.uitl.KmlFileUtils;
import com.ruoyi.airline.domain.uitl.WayPointUitls;
import com.ruoyi.airline.service.api.IAirlineFileService;
import com.ruoyi.airline.service.convert.AirlineFileServiceConvert;
+import com.ruoyi.airline.service.dto.AirLinePointDTO;
import com.ruoyi.airline.service.dto.AirlineFileDTO;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.base.BaseException;
@@ -47,8 +48,9 @@ public class AirlineFileServiceImpl implements IAirlineFileService {
@Override
public AirlineFileDTO save(AirlineFileDTO dto) {
AirlineFile model = AirlineFileServiceConvert.toModel(dto);
- AirlineFile result = iAirlineFileDomain.save(model);
- return AirlineFileServiceConvert.toDTO(result);
+ Long id = iAirlineFileDomain.save(model);
+ dto.setId(id);
+ return dto;
}
@@ -102,11 +104,11 @@ public class AirlineFileServiceImpl implements IAirlineFileService {
public AirlineFileDTO createOrupdate(AirlineFileDTO airlineFile) {
StringBuilder waypointBuilder = new StringBuilder("QGC WPL 110\n");
- List LineDto = airlineFile.getLinePointDtoList();
+ List LineDto = airlineFile.getLinePointDtoList();
// 新建字节输出流,Freemarker操作此输出流写入生成的业务文件.
if (LineDto != null && !LineDto.isEmpty()) {
for (int i = 0; i < LineDto.size(); i++) {
- AirLinePointVO point = LineDto.get(i);
+ AirLinePointDTO point = LineDto.get(i);
waypointBuilder.append(WayPointUitls.formatWaypointLine(point, i)).append("\n");
}
@@ -118,10 +120,21 @@ public class AirlineFileServiceImpl implements IAirlineFileService {
airlineFile.setSource("airport");
airlineFile.setStatus(airlineFile.getStatus() == null ? 1 : airlineFile.getStatus());
AirlineFile model = AirlineFileServiceConvert.toModel(airlineFile);
- AirlineFile result = iAirlineFileDomain.save(model);
- return AirlineFileServiceConvert.toDTO(result);
+ Long id = iAirlineFileDomain.save(model);
+ model.setId(id);
+ return AirlineFileServiceConvert.toDTO(model);
}
return null;
}
+
+ @Override
+ public AirlineFile selectById(Long airlineId) {
+ if (airlineId == null) {
+ return null;
+ }
+ List ids = List.of(airlineId);
+ List airlineFiles = iAirlineFileDomain.selectFileListByIds(ids);
+ return airlineFiles != null && !airlineFiles.isEmpty() ? airlineFiles.get(0) : null;
+ }
}
\ No newline at end of file
diff --git a/src/main/resources/mapper/airline/AirlineFileGroupInfoMapper.xml b/src/main/resources/mapper/airline/AirlineFileGroupInfoMapper.xml
index 7957250..729061b 100644
--- a/src/main/resources/mapper/airline/AirlineFileGroupInfoMapper.xml
+++ b/src/main/resources/mapper/airline/AirlineFileGroupInfoMapper.xml
@@ -52,4 +52,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
values (#{groupId}, #{airlineId}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, 0)
+
+
\ No newline at end of file