Compare commits

..

No commits in common. "d2d265ec91e94da3d3c1e3eab9aeaf89c5041e1f" and "9c1a5dca5bf0846c52db05408bd88361332bcab3" have entirely different histories.

26 changed files with 60 additions and 498 deletions

View File

@ -60,12 +60,11 @@ public class AirlineFileGroupInfoController extends BaseController {
* <p> * <p>
* kmz类似zip一般情况下内部包含kml和wpml两个文件 * kmz类似zip一般情况下内部包含kml和wpml两个文件
* *
*
* @param file * @param file
*/ */
@PostMapping("/parseAndUpload") @PostMapping("/parseAndUpload")
@Operation(summary = " kmz航线文件并转换成waypoint上传 ,仅仅返航URL") @Operation(summary = " kmz航线文件并转换成waypoint上传 ,仅仅返航URL")
public AjaxResult parseAndUpload(@RequestParam("file") MultipartFile file, Long groupId) throws BaseException { public AjaxResult parseAndUpload(@RequestParam("file") MultipartFile file, Long groupId) throws IOException {
AirlineFileDTO dto = iAirlineFileService.parseAndUplload(file); AirlineFileDTO dto = iAirlineFileService.parseAndUplload(file);
AirlineFileDTO result = iAirlineFileService.save(dto); AirlineFileDTO result = iAirlineFileService.save(dto);
AirlineFileGroupInfoDTO infoDTO = new AirlineFileGroupInfoDTO(); AirlineFileGroupInfoDTO infoDTO = new AirlineFileGroupInfoDTO();
@ -82,16 +81,13 @@ public class AirlineFileGroupInfoController extends BaseController {
*/ */
@PostMapping() @PostMapping()
@Operation(summary = "在当前分组下添加初始航线,必须上传分组ID") @Operation(summary = "在当前分组下添加初始航线,必须上传分组ID")
public AjaxResult add(@RequestBody AirlineFileGroupInfoVO vo) throws BaseException { public AjaxResult add(@RequestBody AirlineFileGroupInfoVO vo) throws IOException {
if (vo.getGroupId() == null) { if (vo.getGroupId() == null) {
throw new BaseException("分组ID不能为空"); throw new BaseException("分组ID不能为空");
} }
AirlineFileGroupInfoDTO dto = AirlineFileGroupInfoControllerConvert.toDTO(vo); AirlineFileGroupInfoDTO dto = AirlineFileGroupInfoControllerConvert.toDTO(vo);
Long result = iAirlineFileGroupInfoService.save(dto); AirlineFileGroupInfoDTO result = iAirlineFileGroupInfoService.save(dto);
if (result > 0) { return success(AirlineFileGroupInfoControllerConvert.toVO(result));
return success(result);
}
throw new BaseException("新增失败");
} }

View File

@ -1,101 +0,0 @@
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<AirLinePointVO> toVOList(List<AirLinePointDTO> 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<AirLinePointDTO> toDTOList(List<AirLinePointVO> voList) {
if (voList == null || voList.isEmpty()) {
return null;
}
return voList.stream()
.map(AirLinePointControllerConvert::toDTO)
.collect(Collectors.toList());
}
}

View File

@ -26,12 +26,11 @@ public class AirlineFileControllerConvert {
return null; return null;
} }
AirlineFileVO vo = new AirlineFileVO(); AirlineFileVO vo = new AirlineFileVO();
vo.setName(dto.getName());
vo.setId(dto.getId()); vo.setId(dto.getId());
vo.setFileName(dto.getFileName()); vo.setFileName(dto.getFileName());
vo.setFileUrl(dto.getFileUrl()); vo.setFileUrl(dto.getFileUrl());
vo.setType(dto.getType()); vo.setType(dto.getType());
vo.setLinePointVOList(AirLinePointControllerConvert.toVOList(dto.getLinePointDtoList())); vo.setLinePointDtoList(dto.getLinePointDtoList());
vo.setStatus(dto.getStatus()); vo.setStatus(dto.getStatus());
vo.setDjiRthAltitude(dto.getDjiRthAltitude()); vo.setDjiRthAltitude(dto.getDjiRthAltitude());
return vo; return vo;
@ -49,11 +48,10 @@ public class AirlineFileControllerConvert {
} }
AirlineFileDTO dto = new AirlineFileDTO(); AirlineFileDTO dto = new AirlineFileDTO();
dto.setId(vo.getId()); dto.setId(vo.getId());
dto.setName(vo.getName());
dto.setFileName(vo.getFileName()); dto.setFileName(vo.getFileName());
dto.setFileUrl(vo.getFileUrl()); dto.setFileUrl(vo.getFileUrl());
dto.setType(vo.getType()); dto.setType(vo.getType());
dto.setLinePointDtoList(AirLinePointControllerConvert.toDTOList(vo.getLinePointVOList())); dto.setLinePointDtoList(vo.getLinePointDtoList());
dto.setStatus(vo.getStatus()); dto.setStatus(vo.getStatus());
dto.setDjiRthAltitude(vo.getDjiRthAltitude()); dto.setDjiRthAltitude(vo.getDjiRthAltitude());
return dto; return dto;

View File

@ -3,7 +3,6 @@ package com.ruoyi.airline.controller.convert;
import com.ruoyi.airline.api.domain.AirlineFileGroupInfoVO; import com.ruoyi.airline.api.domain.AirlineFileGroupInfoVO;
import com.ruoyi.airline.api.domain.AirlineFileGroupVO; 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.AirlineFileGroupDTO;
import com.ruoyi.airline.service.dto.AirlineFileGroupInfoDTO; import com.ruoyi.airline.service.dto.AirlineFileGroupInfoDTO;
@ -34,7 +33,6 @@ public class AirlineFileGroupInfoControllerConvert {
vo.setGroupId(dto.getGroupId()); vo.setGroupId(dto.getGroupId());
vo.setCreateBy(dto.getCreateBy()); vo.setCreateBy(dto.getCreateBy());
vo.setCreateTime(dto.getCreateTime()); vo.setCreateTime(dto.getCreateTime());
vo.setUpdateBy(dto.getUpdateBy()); vo.setUpdateBy(dto.getUpdateBy());
vo.setUpdateTime(dto.getUpdateTime()); vo.setUpdateTime(dto.getUpdateTime());
vo.setRemark(dto.getRemark()); vo.setRemark(dto.getRemark());
@ -59,7 +57,6 @@ public class AirlineFileGroupInfoControllerConvert {
dto.setUpdateBy(vo.getUpdateBy()); dto.setUpdateBy(vo.getUpdateBy());
dto.setUpdateTime(vo.getUpdateTime()); dto.setUpdateTime(vo.getUpdateTime());
dto.setRemark(vo.getRemark()); dto.setRemark(vo.getRemark());
dto.setAirlineFileDTO(AirlineFileControllerConvert.toDTO(vo.getAirlineFileVO()));
return dto; return dto;
} }

View File

@ -16,5 +16,5 @@ public interface IAirlineFileDomain {
List<AirlineFile> selectFileListByIds(List<Long> ids); List<AirlineFile> selectFileListByIds(List<Long> ids);
Long save(AirlineFile model); AirlineFile save(AirlineFile model);
} }

View File

@ -19,16 +19,7 @@ public interface IAirlineFileGroupInfoDomain {
* *
* @param dto * @param dto
*/ */
Long deleteGroupInfo(AirlineFileGroupInfo dto); int deleteGroupInfo(AirlineFileGroupInfo dto);
Long save(AirlineFileGroupInfo model); AirlineFileGroupInfo save(AirlineFileGroupInfo model);
/**
* 检查是否存在相同的groupId和airlineId
*
* @param groupId 分组ID
* @param airlineId 航线ID
* @return 是否存在
*/
boolean existsByGroupIdAndAirlineId(Long groupId, Long airlineId);
} }

View File

@ -27,7 +27,6 @@ public class AirlineFileDomainConvert {
} }
AirlineFileEntity entity = new AirlineFileEntity(); AirlineFileEntity entity = new AirlineFileEntity();
entity.setId(model.getId()); entity.setId(model.getId());
entity.setName(model.getName());
entity.setFileName(model.getFileName()); entity.setFileName(model.getFileName());
entity.setFileUrl(model.getFileUrl()); entity.setFileUrl(model.getFileUrl());
entity.setType(model.getType()); entity.setType(model.getType());
@ -52,7 +51,6 @@ public class AirlineFileDomainConvert {
} }
AirlineFile model = new AirlineFile(); AirlineFile model = new AirlineFile();
model.setId(entity.getId()); model.setId(entity.getId());
model.setName(entity.getName());
model.setFileName(entity.getFileName()); model.setFileName(entity.getFileName());
model.setFileUrl(entity.getFileUrl()); model.setFileUrl(entity.getFileUrl());
model.setType(entity.getType()); model.setType(entity.getType());

View File

@ -28,8 +28,8 @@ public class AirlineFileDomainImpl implements IAirlineFileDomain {
} }
@Override @Override
public Long save(AirlineFile model) { public AirlineFile save(AirlineFile model) {
AirlineFileEntity entity = AirlineFileDomainConvert.toEntity(model); AirlineFileEntity entity = AirlineFileDomainConvert.toEntity(model);
return airlineFileMapper.save(entity); return AirlineFileDomainConvert.toModel(airlineFileMapper.save(entity));
} }
} }

View File

@ -32,25 +32,15 @@ public class AirlineFileGroupInfoDomainImpl implements IAirlineFileGroupInfoDoma
} }
@Override @Override
public Long deleteGroupInfo(AirlineFileGroupInfo model) { public int deleteGroupInfo(AirlineFileGroupInfo model) {
model.setDelFlag(1L); model.setDelFlag(1L);
AirlineFileGroupInfoEntity Entity = AirlineFileGroupInfoDomainConvert.toEntity(model); AirlineFileGroupInfoEntity Entity = AirlineFileGroupInfoDomainConvert.toEntity(model);
return airlineFileGroupInfoMapper.deleteGroupInfo(Entity); return airlineFileGroupInfoMapper.deleteGroupInfo(Entity);
} }
@Override @Override
public Long save(AirlineFileGroupInfo model) { public AirlineFileGroupInfo save(AirlineFileGroupInfo model) {
AirlineFileGroupInfoEntity Entity = AirlineFileGroupInfoDomainConvert.toEntity(model); AirlineFileGroupInfoEntity Entity = AirlineFileGroupInfoDomainConvert.toEntity(model);
return airlineFileGroupInfoMapper.save(Entity); 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;
}
} }

View File

@ -1,78 +0,0 @@
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;
}

View File

@ -19,10 +19,7 @@ public class AirlineFile {
* 主键ID * 主键ID
*/ */
private Long id; private Long id;
/**
* 航线名称
*/
private String name;
/** /**
* 文件名称 * 文件名称
*/ */
@ -59,7 +56,7 @@ public class AirlineFile {
/** /**
* 航线点列表 * 航线点列表
*/ */
private List<AirLinePoint> linePointDtoList; private List<AirLinePointVO> linePointDtoList;
/** /**
* 数据来源 * 数据来源

View File

@ -1,5 +1,6 @@
package com.ruoyi.airline.domain.model; package com.ruoyi.airline.domain.model;
import com.ruoyi.common.core.web.domain.BaseEntity;
import com.ruoyi.common.core.web.domain.ExBaseEntity; import com.ruoyi.common.core.web.domain.ExBaseEntity;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -28,7 +29,6 @@ public class AirlineFileGroupInfo extends ExBaseEntity {
*/ */
private Long airlineId; private Long airlineId;
private AirlineFile airlineFile;
@Override @Override
public String toString() { public String toString() {

View File

@ -2,7 +2,6 @@ package com.ruoyi.airline.domain.uitl;
import com.ruoyi.airline.api.domain.AirLinePointVO; import com.ruoyi.airline.api.domain.AirLinePointVO;
import com.ruoyi.airline.domain.model.kml.*; import com.ruoyi.airline.domain.model.kml.*;
import com.ruoyi.airline.service.dto.AirLinePointDTO;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
@ -28,7 +27,7 @@ public class WayPointUitls {
StringBuilder waypointBuilder = new StringBuilder("QGC WPL 110\n"); StringBuilder waypointBuilder = new StringBuilder("QGC WPL 110\n");
// 重置全局id计数器 // 重置全局id计数器
//定义waypoint的航点对象集合备用 //定义waypoint的航点对象集合备用
List<AirLinePointDTO> linePoints = new ArrayList<>(); List<AirLinePointVO> linePoints = new ArrayList<>();
//m3和m4TD的机型可以从missionConfig获取部分基础数据 //m3和m4TD的机型可以从missionConfig获取部分基础数据
KmlMissionConfig missionConfig = kmlInfo.getDocument().getKmlMissionConfig(); KmlMissionConfig missionConfig = kmlInfo.getDocument().getKmlMissionConfig();
//其他场景下都可以从missionConfig 拿航点和动作集合 //其他场景下都可以从missionConfig 拿航点和动作集合
@ -68,7 +67,7 @@ public class WayPointUitls {
String[] coords = cleanCoords.split(","); String[] coords = cleanCoords.split(",");
// 基础航点安全点22和结束点20之间的其他16普通航点 // 基础航点安全点22和结束点20之间的其他16普通航点
AirLinePointDTO waypoint = buildPoint( AirLinePointVO waypoint = buildPoint(
16, 16,
coords[1], coords[0], coords[1], coords[0],
(int) Float.parseFloat(placeMark.getHeight()), (int) Float.parseFloat(placeMark.getHeight()),
@ -99,7 +98,7 @@ public class WayPointUitls {
// 5. 生成Waypoints文件内容 // 5. 生成Waypoints文件内容
for (int i = 0; i < linePoints.size(); i++) { for (int i = 0; i < linePoints.size(); i++) {
AirLinePointDTO point = linePoints.get(i); AirLinePointVO point = linePoints.get(i);
waypointBuilder.append(formatWaypointLine(point, i)).append("\n"); waypointBuilder.append(formatWaypointLine(point, i)).append("\n");
} }
@ -108,7 +107,7 @@ public class WayPointUitls {
} }
// 格式化航点行直接使用DTO字段 // 格式化航点行直接使用DTO字段
public static String formatWaypointLine(AirLinePointDTO point, Integer index) { public static String formatWaypointLine(AirLinePointVO point, Integer index) {
switch (point.getCommand()) { switch (point.getCommand()) {
case 16: case 16:
if (index == 0) { if (index == 0) {
@ -168,7 +167,7 @@ public class WayPointUitls {
} }
// 动作解析逻辑 // 动作解析逻辑
public static void processActions(KmlAction action, List<AirLinePointDTO> linePoints) { public static void processActions(KmlAction action, List<AirLinePointVO> linePoints) {
//kmz航线的动作code //kmz航线的动作code
String actionType = action.getActionActuatorFunc(); String actionType = action.getActionActuatorFunc();
@ -278,10 +277,10 @@ public class WayPointUitls {
//构建waypoint航点 //构建waypoint航点
public static AirLinePointDTO buildPoint(int command, String lat, String lon, int alt, public static AirLinePointVO buildPoint(int command, String lat, String lon, int alt,
String loiterTime, String cameraPitch, String cameraRoll, String cameraYaw, String loiterTime, String cameraPitch, String cameraRoll, String cameraYaw,
int sessionControl, int zoomAbsolute, int rotateDirection) { int sessionControl, int zoomAbsolute, int rotateDirection) {
AirLinePointDTO point = new AirLinePointDTO(); AirLinePointVO point = new AirLinePointVO();
point.setCommand(command); point.setCommand(command);
point.setLat(lat); point.setLat(lat);
point.setLon(lon); point.setLon(lon);

View File

@ -15,15 +15,7 @@ public interface AirlineFileGroupInfoMapper {
List<AirlineFileGroupInfoEntity> selectGroupList(AirlineFileGroupInfoEntity entity); List<AirlineFileGroupInfoEntity> selectGroupList(AirlineFileGroupInfoEntity entity);
Long deleteGroupInfo(AirlineFileGroupInfoEntity entity); int deleteGroupInfo(AirlineFileGroupInfoEntity entity);
Long save(AirlineFileGroupInfoEntity entity); AirlineFileGroupInfo save(AirlineFileGroupInfoEntity entity);
/**
* 检查是否存在相同的groupId和airlineId
*
* @param entity 包含groupId和airlineId的实体
* @return 存在的记录数
*/
int countByGroupIdAndAirlineId(AirlineFileGroupInfoEntity entity);
} }

View File

@ -13,7 +13,7 @@ import java.util.List;
public interface AirlineFileMapper { public interface AirlineFileMapper {
Long save(AirlineFileEntity entity); AirlineFileEntity save(AirlineFileEntity entity);
List<AirlineFileEntity> selectFileListByIds(List<Long> ids); List<AirlineFileEntity> selectFileListByIds(List<Long> ids);
} }

View File

@ -1,8 +1,10 @@
package com.ruoyi.airline.service.api; package com.ruoyi.airline.service.api;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.airline.service.dto.AirlineFileGroupInfoDTO; import com.ruoyi.airline.service.dto.AirlineFileGroupInfoDTO;
import com.ruoyi.common.core.exception.base.BaseException; import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List; import java.util.List;
/** /**
@ -11,9 +13,9 @@ import java.util.List;
* @author 拓恒 * @author 拓恒
*/ */
public interface IAirlineFileGroupInfoService { public interface IAirlineFileGroupInfoService {
List<AirlineFileGroupInfoDTO> selectGroupInfoListById(Long groupId); List<AirlineFileGroupInfoDTO> selectGroupInfoListById(Long groupId);
Long save(AirlineFileGroupInfoDTO dto) throws BaseException; AirlineFileGroupInfoDTO save(AirlineFileGroupInfoDTO dto) throws IOException;
} }

View File

@ -1,6 +1,5 @@
package com.ruoyi.airline.service.api; package com.ruoyi.airline.service.api;
import com.ruoyi.airline.domain.model.AirlineFile;
import com.ruoyi.airline.service.dto.AirlineFileDTO; import com.ruoyi.airline.service.dto.AirlineFileDTO;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -20,6 +19,4 @@ public interface IAirlineFileService {
AirlineFileDTO parseAndUplload(MultipartFile file); AirlineFileDTO parseAndUplload(MultipartFile file);
AirlineFileDTO createOrupdate(AirlineFileDTO airlineFile) throws IOException; AirlineFileDTO createOrupdate(AirlineFileDTO airlineFile) throws IOException;
AirlineFile selectById(Long airlineId);
} }

View File

@ -1,101 +0,0 @@
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<AirLinePointDTO> toDTOList(List<AirLinePoint> 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<AirLinePoint> toModelList(List<AirLinePointDTO> dtoList) {
if (dtoList == null || dtoList.isEmpty()) {
return null;
}
return dtoList.stream()
.map(AirLinePointServiceConvert::toModel)
.collect(Collectors.toList());
}
}

View File

@ -30,7 +30,6 @@ public class AirlineFileGroupInfoServiceConvert {
dto.setId(model.getId()); dto.setId(model.getId());
dto.setGroupId(model.getGroupId()); dto.setGroupId(model.getGroupId());
dto.setAirlineId(model.getAirlineId()); dto.setAirlineId(model.getAirlineId());
dto.setAirlineFileDTO(AirlineFileServiceConvert.toDTO(model.getAirlineFile()));
return dto; return dto;
} }
@ -48,7 +47,6 @@ public class AirlineFileGroupInfoServiceConvert {
model.setId(dto.getId()); model.setId(dto.getId());
model.setGroupId(dto.getGroupId()); model.setGroupId(dto.getGroupId());
model.setAirlineId(dto.getAirlineId()); model.setAirlineId(dto.getAirlineId());
model.setAirlineFile(AirlineFileServiceConvert.toModel(dto.getAirlineFileDTO()));
return model; return model;
} }

View File

@ -1,7 +1,7 @@
package com.ruoyi.airline.service.convert; package com.ruoyi.airline.service.convert;
import com.ruoyi.airline.domain.model.AirlineFile;
import com.ruoyi.airline.service.dto.AirlineFileDTO; import com.ruoyi.airline.service.dto.AirlineFileDTO;
import com.ruoyi.airline.domain.model.AirlineFile;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -27,13 +27,12 @@ public class AirlineFileServiceConvert {
} }
AirlineFile model = new AirlineFile(); AirlineFile model = new AirlineFile();
model.setId(dto.getId()); model.setId(dto.getId());
model.setName(dto.getName());
model.setFileName(dto.getFileName()); model.setFileName(dto.getFileName());
model.setFileUrl(dto.getFileUrl()); model.setFileUrl(dto.getFileUrl());
model.setType(dto.getType()); model.setType(dto.getType());
model.setNote(dto.getNote()); model.setNote(dto.getNote());
model.setDistance(dto.getDistance()); model.setDistance(dto.getDistance());
model.setLinePointDtoList(AirLinePointServiceConvert.toModelList(dto.getLinePointDtoList())); model.setLinePointDtoList(dto.getLinePointDtoList());
model.setSource(dto.getSource()); model.setSource(dto.getSource());
model.setStatus(dto.getStatus()); model.setStatus(dto.getStatus());
model.setFileMd5(dto.getFileMd5()); model.setFileMd5(dto.getFileMd5());
@ -62,13 +61,12 @@ public class AirlineFileServiceConvert {
} }
AirlineFileDTO dto = new AirlineFileDTO(); AirlineFileDTO dto = new AirlineFileDTO();
dto.setId(model.getId()); dto.setId(model.getId());
dto.setName(model.getName());
dto.setFileName(model.getFileName()); dto.setFileName(model.getFileName());
dto.setFileUrl(model.getFileUrl()); dto.setFileUrl(model.getFileUrl());
dto.setType(model.getType()); dto.setType(model.getType());
dto.setNote(model.getNote()); dto.setNote(model.getNote());
dto.setDistance(model.getDistance()); dto.setDistance(model.getDistance());
dto.setLinePointDtoList(AirLinePointServiceConvert.toDTOList(model.getLinePointDtoList())); dto.setLinePointDtoList(model.getLinePointDtoList());
dto.setSource(model.getSource()); dto.setSource(model.getSource());
dto.setStatus(model.getStatus()); dto.setStatus(model.getStatus());
dto.setFileMd5(model.getFileMd5()); dto.setFileMd5(model.getFileMd5());

View File

@ -1,78 +0,0 @@
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;
}

View File

@ -19,10 +19,7 @@ public class AirlineFileDTO {
* 主键ID * 主键ID
*/ */
private Long id; private Long id;
/**
* 航线名称
*/
private String name;
/** /**
* 文件名称 * 文件名称
*/ */
@ -60,7 +57,7 @@ public class AirlineFileDTO {
/** /**
* 航线点列表 * 航线点列表
*/ */
private List<AirLinePointDTO> linePointDtoList; private List<AirLinePointVO> linePointDtoList;
/** /**
* 关联机场id * 关联机场id

View File

@ -13,6 +13,7 @@ import com.ruoyi.airline.service.convert.AirlineFileGroupServiceConvert;
import com.ruoyi.airline.service.convert.AirlineFileServiceConvert; import com.ruoyi.airline.service.convert.AirlineFileServiceConvert;
import com.ruoyi.airline.service.dto.AirlineFileGroupDTO; import com.ruoyi.airline.service.dto.AirlineFileGroupDTO;
import com.ruoyi.airline.service.dto.AirlineFileGroupInfoDTO; import com.ruoyi.airline.service.dto.AirlineFileGroupInfoDTO;
import com.ruoyi.common.core.exception.base.BaseException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -47,20 +48,23 @@ public class AirlineFileServiceGroupImpl implements IAirlineFileGroupService {
AirlineFileGroupInfoDTO dto = new AirlineFileGroupInfoDTO(); AirlineFileGroupInfoDTO dto = new AirlineFileGroupInfoDTO();
dto.setGroupId(groupId); dto.setGroupId(groupId);
AirlineFileGroupInfo model = AirlineFileGroupInfoServiceConvert.toModel(dto); AirlineFileGroupInfo model = AirlineFileGroupInfoServiceConvert.toModel(dto);
iAirlineFileGroupInfoDomain.deleteGroupInfo(model); int result = iAirlineFileGroupInfoDomain.deleteGroupInfo(model);
if (result > 0) {
// 2删除分组 // 2删除分组
AirlineFileGroup model2 = new AirlineFileGroup(); AirlineFileGroup model2 = new AirlineFileGroup();
model2.setGroupId(groupId); model2.setGroupId(groupId);
model2.setUserId(userId); model2.setUserId(userId);
return iAirlineFileGroupDomain.deletegroup(model2); return iAirlineFileGroupDomain.deletegroup(model2);
}
// TODO 增加事务机制
throw new BaseException("删除航线失败");
} }
@Override @Override
public boolean checkGroupNameUnique(AirlineFileGroupDTO group) { public boolean checkGroupNameUnique(AirlineFileGroupDTO group) {
AirlineFileGroup model = AirlineFileGroupServiceConvert.toModel(group); AirlineFileGroup model = AirlineFileGroupServiceConvert.toModel(group);
return iAirlineFileGroupDomain.checkgroupNameUnique(model); return iAirlineFileGroupDomain.checkgroupNameUnique(model) ;
} }
@Override @Override

View File

@ -7,12 +7,13 @@ import com.ruoyi.airline.service.api.IAirlineFileService;
import com.ruoyi.airline.service.convert.AirlineFileGroupInfoServiceConvert; import com.ruoyi.airline.service.convert.AirlineFileGroupInfoServiceConvert;
import com.ruoyi.airline.service.dto.AirlineFileDTO; import com.ruoyi.airline.service.dto.AirlineFileDTO;
import com.ruoyi.airline.service.dto.AirlineFileGroupInfoDTO; import com.ruoyi.airline.service.dto.AirlineFileGroupInfoDTO;
import com.ruoyi.common.core.exception.base.BaseException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List; import java.util.List;
/** /**
@ -37,27 +38,17 @@ public class AirlineFileServiceGroupInfoImpl implements IAirlineFileGroupInfoSer
@Override @Override
public List<AirlineFileGroupInfoDTO> selectGroupInfoListById(Long groupId) { public List<AirlineFileGroupInfoDTO> selectGroupInfoListById(Long groupId) {
List<AirlineFileGroupInfo> models = iAirlineFileGroupInfoDomain.selectGroupInfoListById(groupId); List<AirlineFileGroupInfo> models = iAirlineFileGroupInfoDomain.selectGroupInfoListById(groupId);
models.forEach(model -> {
model.setAirlineFile(iAirlineFileService.selectById(model.getAirlineId()));
});
return AirlineFileGroupInfoServiceConvert.toDtoList(models); return AirlineFileGroupInfoServiceConvert.toDtoList(models);
} }
@Override @Override
public Long save(AirlineFileGroupInfoDTO dto) throws BaseException { public AirlineFileGroupInfoDTO save(AirlineFileGroupInfoDTO dto) throws IOException {
AirlineFileDTO result = iAirlineFileService.save(dto.getAirlineFileDTO()); AirlineFileDTO result = iAirlineFileService.save(dto.getAirlineFileDTO());
dto.setAirlineFileDTO(result);
dto.setAirlineId(result.getId());
// 保存分组信息 // 保存分组信息
AirlineFileGroupInfo model = AirlineFileGroupInfoServiceConvert.toModel(dto); 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);
} }
} }

View File

@ -8,7 +8,6 @@ import com.ruoyi.airline.domain.uitl.KmlFileUtils;
import com.ruoyi.airline.domain.uitl.WayPointUitls; import com.ruoyi.airline.domain.uitl.WayPointUitls;
import com.ruoyi.airline.service.api.IAirlineFileService; import com.ruoyi.airline.service.api.IAirlineFileService;
import com.ruoyi.airline.service.convert.AirlineFileServiceConvert; import com.ruoyi.airline.service.convert.AirlineFileServiceConvert;
import com.ruoyi.airline.service.dto.AirLinePointDTO;
import com.ruoyi.airline.service.dto.AirlineFileDTO; import com.ruoyi.airline.service.dto.AirlineFileDTO;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.base.BaseException; import com.ruoyi.common.core.exception.base.BaseException;
@ -48,9 +47,8 @@ public class AirlineFileServiceImpl implements IAirlineFileService {
@Override @Override
public AirlineFileDTO save(AirlineFileDTO dto) { public AirlineFileDTO save(AirlineFileDTO dto) {
AirlineFile model = AirlineFileServiceConvert.toModel(dto); AirlineFile model = AirlineFileServiceConvert.toModel(dto);
Long id = iAirlineFileDomain.save(model); AirlineFile result = iAirlineFileDomain.save(model);
dto.setId(id); return AirlineFileServiceConvert.toDTO(result);
return dto;
} }
@ -104,11 +102,11 @@ public class AirlineFileServiceImpl implements IAirlineFileService {
public AirlineFileDTO createOrupdate(AirlineFileDTO airlineFile) { public AirlineFileDTO createOrupdate(AirlineFileDTO airlineFile) {
StringBuilder waypointBuilder = new StringBuilder("QGC WPL 110\n"); StringBuilder waypointBuilder = new StringBuilder("QGC WPL 110\n");
List<AirLinePointDTO> LineDto = airlineFile.getLinePointDtoList(); List<AirLinePointVO> LineDto = airlineFile.getLinePointDtoList();
// 新建字节输出流,Freemarker操作此输出流写入生成的业务文件. // 新建字节输出流,Freemarker操作此输出流写入生成的业务文件.
if (LineDto != null && !LineDto.isEmpty()) { if (LineDto != null && !LineDto.isEmpty()) {
for (int i = 0; i < LineDto.size(); i++) { for (int i = 0; i < LineDto.size(); i++) {
AirLinePointDTO point = LineDto.get(i); AirLinePointVO point = LineDto.get(i);
waypointBuilder.append(WayPointUitls.formatWaypointLine(point, i)).append("\n"); waypointBuilder.append(WayPointUitls.formatWaypointLine(point, i)).append("\n");
} }
@ -120,21 +118,10 @@ public class AirlineFileServiceImpl implements IAirlineFileService {
airlineFile.setSource("airport"); airlineFile.setSource("airport");
airlineFile.setStatus(airlineFile.getStatus() == null ? 1 : airlineFile.getStatus()); airlineFile.setStatus(airlineFile.getStatus() == null ? 1 : airlineFile.getStatus());
AirlineFile model = AirlineFileServiceConvert.toModel(airlineFile); AirlineFile model = AirlineFileServiceConvert.toModel(airlineFile);
Long id = iAirlineFileDomain.save(model); AirlineFile result = iAirlineFileDomain.save(model);
model.setId(id); return AirlineFileServiceConvert.toDTO(result);
return AirlineFileServiceConvert.toDTO(model);
} }
return null; return null;
} }
@Override
public AirlineFile selectById(Long airlineId) {
if (airlineId == null) {
return null;
}
List<Long> ids = List.of(airlineId);
List<AirlineFile> airlineFiles = iAirlineFileDomain.selectFileListByIds(ids);
return airlineFiles != null && !airlineFiles.isEmpty() ? airlineFiles.get(0) : null;
}
} }

View File

@ -52,16 +52,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
values (#{groupId}, #{airlineId}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, 0) values (#{groupId}, #{airlineId}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, 0)
</insert> </insert>
<!-- 检查是否存在相同的groupId和airlineId -->
<select id="countByGroupIdAndAirlineId" parameterType="com.ruoyi.airline.mapper.entity.AirlineFileGroupInfoEntity" resultType="int">
select count(*)
from airline_file_group_info
where del_flag = 0
<if test="groupId != null">
and group_id = #{groupId}
</if>
<if test="airlineId != null">
and airline_id = #{airlineId}
</if>
</select>
</mapper> </mapper>