Compare commits

...

102 Commits
dev ... main

Author SHA1 Message Date
gyb 435ed1c62f feat:增加标注分组 2026-03-16 19:28:18 +08:00
gyb d4253be537 feat:增加标注分组 2026-03-16 18:45:45 +08:00
gyb ce41e4a490 feat:增加标注分组 2026-03-16 18:33:21 +08:00
gyb c7793d7c71 feat:增加批量移动接口,优化查询接口逻辑 2026-03-16 14:35:31 +08:00
gyb e761efb850 feat:增加批量移动接口,优化查询接口逻辑 2026-03-16 11:47:46 +08:00
gyb 7c77837cf5 feat:增加批量移动接口,优化查询接口逻辑 2026-03-16 11:21:17 +08:00
gyb c767572a9f feat:增加标注批量删除接口 2026-03-16 09:09:58 +08:00
gyb 3f87e669d5 feat:增加标注批量删除接口 2026-03-16 08:31:36 +08:00
gyb 8e1550a045 feat:增加通过航线id查询航线详情的接口 2026-03-13 13:44:41 +08:00
gyb 9fd2b1f6d7 fix:bug修复 2026-03-12 19:08:58 +08:00
gyb 1be9f626a0 feat:提交标注代码,调整逻辑 2026-03-12 16:59:00 +08:00
gyb 395397fedc feat:提交标注代码 2026-03-12 16:25:40 +08:00
gyb 755cd26ddb feat:提交标注代码 2026-03-12 15:37:42 +08:00
gyb cac50ce393 feat:提交标注代码 2026-03-12 15:06:54 +08:00
gyb d56262fc34 feat:提交标注代码 2026-03-12 14:04:39 +08:00
gyb 7a661add52 feat:修改路径命令 2026-03-12 10:59:56 +08:00
gyb 249215edd1 feat:航线编辑接口新的航点动作保存 2026-03-11 11:52:04 +08:00
gyb b3cd8d8965 feat:航线编辑接口新的航点动作保存 2026-03-11 10:45:16 +08:00
gyb 7d3d36eb0f feat:航线编辑接口新的航点动作保存 2026-03-11 10:15:40 +08:00
gyb c794a06e7a feat:航线编辑接口新的航点动作保存 2026-03-11 09:32:36 +08:00
gyb 337694250a feat:航线编辑接口新的航点动作保存 2026-03-11 08:45:45 +08:00
gyb 73e1deae4e feat:航线增加新的航点动作保存 2026-03-10 17:30:33 +08:00
gyb 0fd39cf7f3 fix:航线bug修复 2026-03-09 11:40:18 +08:00
gyb ca98f67f13 fix:航线bug修复 2026-03-09 11:27:43 +08:00
gyb 0820951503 feat:空域增加批量删除接口 2026-03-06 14:35:03 +08:00
gyb 9718e3ae41 feat:航点修改保存 2026-03-06 14:28:51 +08:00
gyb 3ccdb8ed5a feat:增加航线修改操作的日志 2026-03-06 11:07:43 +08:00
gyb bb7363bd74 feat:增加无人机类型负载属性 2026-03-06 10:48:49 +08:00
gyb d1398b5991 Revert "feat:增加无人机类型负载属性"
This reverts commit 0da4f1f8d4.
2026-03-04 16:43:00 +08:00
gyb 0da4f1f8d4 feat:增加无人机类型负载属性 2026-03-04 16:41:03 +08:00
gyb 4a6cb25af2 feat:增加航线属性字段 2026-03-02 15:08:39 +08:00
gyb 78428c9e98 feat:增加空域限时规则 2026-03-02 10:11:37 +08:00
gyb 79fcee731d feat:增加空域限时规则 2026-03-02 10:05:48 +08:00
gyb 081261e750 feat:增加航线限高 2026-03-02 09:53:48 +08:00
gyb ba86a0d011 feat:调试接口 2026-02-28 14:03:38 +08:00
gyb f9494ee635 feat:调试接口 2026-02-28 09:11:03 +08:00
gyb d32d652ba2 feat:调试接口 2026-02-28 08:45:14 +08:00
gyb c647948ca9 feat:调试接口 2026-02-28 08:28:58 +08:00
gyb 291b3e1b7b feat:修复过滤查询不生效的问题 2026-02-27 20:15:39 +08:00
gyb ce52499b3e feat:修复过滤查询不生效的问题 2026-02-27 20:08:31 +08:00
gyb 7583f3f98e feat:修复过滤查询不生效的问题 2026-02-27 19:55:00 +08:00
gyb d0cc06c353 feat:调整日志级别 2026-02-27 19:46:52 +08:00
gyb aa5a6641d7 feat:航线增加无人机类型字段 2026-02-27 19:44:29 +08:00
gyb 4491b34704 feat:航线增加无人机类型字段 2026-02-27 16:00:03 +08:00
gyb 38661172ed feat:无人机类型增加类型唯一值 2026-02-26 18:41:25 +08:00
gyb c0d7b808ad feat:调整查询航线分组查询接口 2026-02-26 17:33:13 +08:00
gyb a7cea1a5fb feat:调整查询sql 2026-02-26 16:00:41 +08:00
gyb c2145cf08e feat:调整查询sql 2026-02-26 15:42:17 +08:00
gyb 9f14494575 feat:调整查询sql 2026-02-26 15:39:49 +08:00
gyb cc559f4cb1 feat:增加新接口 2026-02-26 15:29:13 +08:00
gyb 43c4b027bc feat:调整空域分组详情删除接口 2026-02-25 17:07:00 +08:00
gyb 4fd0ee3c4e feat:调整空域分组详情删除接口 2026-02-25 17:06:20 +08:00
gyb c2cc12eeda feat:调整空域分组详情删除接口 2026-02-25 17:05:39 +08:00
gyb 40645de69c feat:调整空域分组详情新增接口 2026-02-25 16:38:55 +08:00
gyb cc1f539a82 feat:调整空域分组详情新增接口 2026-02-25 16:29:32 +08:00
gyb f2b97009ab feat:增加空域相关功能接口 2026-02-25 15:16:28 +08:00
gyb bd79084fa0 bug:bug修复 2026-02-12 16:44:32 +08:00
gyb fc0e317432 bug:bug修复 2026-02-12 16:40:04 +08:00
gyb 7252f19a4b bug:bug修复 2026-02-12 16:12:15 +08:00
gyb 888659deae bug:bug修复 2026-02-12 15:34:47 +08:00
gyb 89f8739c18 fit:触发构建 2026-02-11 13:48:55 +08:00
gyb 9a4fa70463 fit:触发构建 2026-02-11 13:36:37 +08:00
gyb 11336eaea1 fit:增加航线分类接口计数 2026-02-11 13:12:13 +08:00
gyb 1d25c15369 bug:接口报错修复 2026-02-10 11:19:55 +08:00
gyb 7da906c608 bug:修复报错 2026-02-09 13:16:56 +08:00
gyb ae03e92685 bug:修复报错 2026-02-09 10:58:01 +08:00
gyb b9eded75c7 bug:航线一期增加航线查询接口 2026-02-09 08:40:59 +08:00
gyb 9f11633445 fit:航线二期,增加批量航线文件导出接口 2026-02-09 08:35:21 +08:00
gyb f2f849c6e6 Merge remote-tracking branch 'origin/main' 2026-01-30 15:58:10 +08:00
gyb b0e873e9d4 fit:增加航线类型 2026-01-30 15:55:03 +08:00
高大 f27bfc33a2 fit:航线管理,增加批量移动分组的功能 2026-01-29 17:49:03 +08:00
高大 c136e237fb bug:修复修改航线名称导致的问题 2026-01-29 15:39:05 +08:00
高大 b03e858b3b fit:提交触发构建 2026-01-29 13:02:16 +08:00
高大 7e426b3bc7 fit:增加批量删除分组航线功能 2026-01-29 11:38:50 +08:00
高大 ea0a741933 bug:修复新增航线无法自动命名的问题 2026-01-29 11:03:33 +08:00
高大 32ce1b3383 fix:提交重新构建 2026-01-28 20:34:16 +08:00
高大 2377e3e41e fix:优化convert 2026-01-28 20:15:59 +08:00
高大 5e34d029b6 fix:优化convert 2026-01-28 20:15:05 +08:00
高大 272aaa637e fix:联调航线上传 2026-01-28 11:20:39 +08:00
高大 bf42d6b13e Merge remote-tracking branch 'origin/main' 2026-01-28 10:29:19 +08:00
高大 2202f4b034 fix:优化导入逻辑,支持waypoints解析 2026-01-28 10:28:51 +08:00
孙小云 bf538371d7 Merge branch 'main' of http://th.local.t-aaron.com:13000/THENG/a-tuoheng-airline 2026-01-28 09:37:43 +08:00
孙小云 8e1f5c622a xx 2026-01-28 09:37:39 +08:00
高大 a01ec7becd fix:增加自动航线名称的逻辑 2026-01-28 09:11:59 +08:00
高大 99e961c476 fix:修复编译报错 2026-01-27 17:30:13 +08:00
孙小云 8e83c0adc1 修改路径 2026-01-27 15:03:11 +08:00
高大 b9a4eefa4b fix:统一git调用格式 2026-01-27 13:18:16 +08:00
高大 dee7f20935 fix:修复增加控制层BaseException处理 2026-01-27 13:05:51 +08:00
高大 d2d265ec91 Merge remote-tracking branch 'origin/main' 2026-01-27 11:33:55 +08:00
高大 d957404beb fix:修复增加控制层BaseException处理 2026-01-27 11:33:17 +08:00
孙小云 9c1a5dca5b Merge branch 'main' of http://th.local.t-aaron.com:13000/THENG/a-tuoheng-airline 2026-01-26 16:59:58 +08:00
孙小云 4110db19f7 xx 2026-01-26 16:59:45 +08:00
高大 f9babad49d fix:修复接口500的问题,调整接口路径 2026-01-26 16:37:58 +08:00
高大 acc087cd72 fix:修复接口500的问题,增加BaseController getDataTable 的空表处理 2026-01-26 15:47:46 +08:00
高大 4d4b85dd7f fix:优化航线管理航线上传逻辑 2026-01-24 17:18:08 +08:00
高大 5acb3656d3 feat:航线管理,优化接口描述,临时去除接口权限 2026-01-24 16:18:10 +08:00
高大 551d5149b6 feat:航线管理,优化接口描述,临时去除接口权限 2026-01-24 16:17:41 +08:00
高大 105836f2b8 提交航线项目配置-修改服务端口 2026-01-24 14:33:26 +08:00
高大 c22b38ccbb 提交航线项目配置-修改nacos地址 2026-01-24 11:43:08 +08:00
高大 62e235baab 提交航线管理逻辑和接口 2026-01-24 11:29:55 +08:00
孙小云 3d2ee17339 xx 2026-01-24 11:13:38 +08:00
高大 afdc3056ec 提交航线管理逻辑和接口 2026-01-23 18:42:11 +08:00
188 changed files with 12680 additions and 236 deletions

24
pom.xml
View File

@ -23,6 +23,11 @@
<artifactId>tuoheng-api-airline</artifactId>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-api-system</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
@ -70,13 +75,30 @@
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-log</artifactId>
</dependency>
<!-- xml文件转化 -->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.20</version>
</dependency>
<!-- RuoYi Common Swagger -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-swagger</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-core</artifactId>
</dependency>
<!-- Flyway Database Migration -->
<dependency>
<groupId>org.flywaydb</groupId>

1
reademe.md Normal file
View File

@ -0,0 +1 @@
ddddda

View File

@ -1,32 +0,0 @@
package com.ruoyi.airline;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.ruoyi.common.security.annotation.EnableCustomConfig;
import com.ruoyi.common.security.annotation.EnableRyFeignClients;
/**
* 系统模块
*
* @author ruoyi
*/
@EnableCustomConfig
@EnableRyFeignClients
@SpringBootApplication
public class Application
{
public static void main(String[] args)
{
SpringApplication.run(Application.class, args);
System.out.println("(♥◠‿◠)ノ゙ 系统模块启动成功 ლ(´ڡ`ლ)゙ \n" +
" .-------. ____ __ \n" +
" | _ _ \\ \\ \\ / / \n" +
" | ( ' ) | \\ _. / ' \n" +
" |(_ o _) / _( )_ .' \n" +
" | (_,_).' __ ___(_ o _)' \n" +
" | |\\ \\ | || |(_,_)' \n" +
" | | \\ `' /| `-' / \n" +
" | | \\ / \\ / \n" +
" ''-' `'-' `-..-' ");
}
}

View File

@ -0,0 +1,21 @@
package com.ruoyi.airline;
import com.ruoyi.common.security.annotation.EnableCustomConfig;
import com.ruoyi.common.security.annotation.EnableRyFeignClients;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 航线模块应用启动类
*
* @author ruoyi
* @date 2026-01-17
*/
@SpringBootApplication
@EnableCustomConfig
@EnableRyFeignClients
public class TuohengAirlineApplication {
public static void main(String[] args) {
SpringApplication.run(TuohengAirlineApplication.class, args);
}
}

View File

@ -0,0 +1,223 @@
package com.ruoyi.airline.controller;
import com.ruoyi.airline.api.domain.AirlineAreaGroupDetailVO;
import com.ruoyi.airline.api.domain.AirlineAreaGroupVO;
import com.ruoyi.airline.api.domain.AirlineAreaVO;
import com.ruoyi.airline.controller.convert.AirlineAreaControllerConvert;
import com.ruoyi.airline.controller.convert.AirlineAreaGroupControllerConvert;
import com.ruoyi.airline.controller.convert.AirlineAreaGroupDetailControllerConvert;
import com.ruoyi.airline.service.api.IAirlineAreaGroupService;
import com.ruoyi.airline.service.dto.AirlineAreaDTO;
import com.ruoyi.airline.service.dto.AirlineAreaGroupDTO;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.security.utils.SecurityUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 空域分组
*
* @author 拓恒
*/
@RestController
@RequestMapping("/areaGroup")
@Tag(name = "空域分组管理")
public class AirlineAreaGroupController extends BaseController {
private static final Logger log = LoggerFactory.getLogger(AirlineAreaGroupController.class);
@Autowired
private IAirlineAreaGroupService iAirlineAreaGroupService;
/**
* 获取空域分组列表,根据用户Id查询分组
*
* @param airlineAreaGroupVO 查询条件
*/
@GetMapping()
@Operation(summary = "获取所有的空域分组")
public TableDataInfo index(AirlineAreaGroupVO airlineAreaGroupVO) {
startPage();
airlineAreaGroupVO.setUserId(SecurityUtils.getUserId());
AirlineAreaGroupDTO dto = AirlineAreaGroupControllerConvert.to(airlineAreaGroupVO);
List<AirlineAreaGroupDTO> list = iAirlineAreaGroupService.selectGroupList(dto);
List<AirlineAreaGroupVO> result = AirlineAreaGroupControllerConvert.toApiDomainList(list);
return getDataTable(result);
}
/**
* 新增分组
*/
@PostMapping
@Operation(summary = "新增分组")
public AjaxResult add(@Validated @RequestBody AirlineAreaGroupVO group) {
group.setUserId(SecurityUtils.getUserId());
group.setCreateBy(SecurityUtils.getUserId().toString());
group.setUpdateBy(SecurityUtils.getUserId().toString());
AirlineAreaGroupDTO dto = AirlineAreaGroupControllerConvert.to(group);
if (iAirlineAreaGroupService.checkGroupNameUnique(dto)) {
return error("新增分组'" + group.getGroupName() + "'失败,分组名称已存在");
}
return toAjax(iAirlineAreaGroupService.insertGroup(dto));
}
/**
* 修改分组
*/
@PutMapping
@Operation(summary = "修改分组")
public AjaxResult edit(@Validated @RequestBody AirlineAreaGroupVO group) {
group.setUserId(SecurityUtils.getUserId());
group.setUpdateBy(SecurityUtils.getUserId().toString());
AirlineAreaGroupDTO dto = AirlineAreaGroupControllerConvert.to(group);
if (iAirlineAreaGroupService.checkGroupNameUnique(dto)) {
return error("修改分组'" + group.getGroupName() + "'失败,分组名称已存在");
}
return toAjax(iAirlineAreaGroupService.updateGroup(dto));
}
/**
* 删除分组前端校验分组下是否有空域弹出确认删除提示如果确认会将分组及空域一起删除
*/
@DeleteMapping("/delete/{groupId}")
@Operation(summary = "删除分组")
public AjaxResult removeByQueryParam(@PathVariable Long groupId) {
return toAjax(iAirlineAreaGroupService.deletegroupById(SecurityUtils.getUserId(), groupId));
}
/**
* 按照空域分组查询所有的空域信息包含坐标点信息
*
* @param groupId 分组ID
* @return 空域分组详情
*/
@GetMapping("/airspaceList/{groupId}")
@Operation(summary = "按照空域分组查询所有的空域信息")
public AjaxResult selectAirspaceListByGroupId(@PathVariable Long groupId) {
AirlineAreaGroupDTO dto = iAirlineAreaGroupService.selectAirspaceListByGroupId(SecurityUtils.getUserId(), groupId);
// 使用转换类进行转换
AirlineAreaGroupDetailVO result = AirlineAreaGroupDetailControllerConvert.from(dto);
return success(result);
}
/**
* 修改空域信息包含坐标点信息
*
* @param area 空域信息
* @return 修改结果
*/
@PutMapping("/updateArea")
@Operation(summary = "修改空域信息")
public AjaxResult updateAreaWithPoints(@Validated @RequestBody AirlineAreaVO area) {
// 设置更新人
area.setUpdateBy(SecurityUtils.getUserId().toString());
// 使用转换类进行转换
AirlineAreaDTO dto = AirlineAreaControllerConvert.to(area);
return toAjax(iAirlineAreaGroupService.updateAreaWithPoints(dto));
}
/**
* 在指定分组下新增空域包含坐标点信息
*
* @param groupId 分组ID
* @param area 空域信息
* @return 新增结果
*/
@PostMapping("/addArea/{groupId}")
@Operation(summary = "在指定分组下新增空域")
public AjaxResult addAreaWithGroup(@PathVariable Long groupId, @Validated @RequestBody AirlineAreaVO area) {
// 设置创建人和更新人
area.setCreateBy(SecurityUtils.getUserId().toString());
area.setUpdateBy(SecurityUtils.getUserId().toString());
// 使用转换类进行转换
AirlineAreaDTO dto = AirlineAreaControllerConvert.to(area);
return toAjax(iAirlineAreaGroupService.insertAreaWithGroup(groupId, dto));
}
/**
* 删除空域软删除
*
* @param areaId 空域ID
* @return 删除结果
*/
@DeleteMapping("/deleteArea/{areaId}")
@Operation(summary = "删除空域")
public AjaxResult deleteArea(@PathVariable Long areaId) {
return toAjax(iAirlineAreaGroupService.deleteArea(areaId));
}
/**
* 批量移动空域到新分组
*
* @param areaIds 空域ID列表
* @param groupId 原分组ID
* @param newGroupId 新分组ID
* @return 移动结果
*/
@PostMapping("/move/{groupId}/{newGroupId}")
@Operation(summary = "批量移动空域到新分组")
public AjaxResult batchMove(@RequestBody List<Long> areaIds, @PathVariable("groupId") Long groupId, @PathVariable("newGroupId") Long newGroupId) {
if (groupId == null) {
return error("原分组ID不能为空");
}
if (newGroupId == null) {
return error("新分组ID不能为空");
}
if (areaIds == null || areaIds.isEmpty()) {
return error("没有需要移动的空域");
}
int result = iAirlineAreaGroupService.batchMoveAreaToNewGroup(areaIds, groupId, newGroupId);
if (result > 0) {
return success("移动成功,共移动 " + result + " 个空域");
}
return error("移动失败");
}
/**
* 根据用户ID查询空域列表支持名称模糊查询
*
* @param area 查询条件
* @return 空域列表
*/
@PostMapping("/areaList")
@Operation(summary = "根据用户ID查询空域列表")
public AjaxResult selectAreaListByUserId(@RequestBody AirlineAreaVO area) {
// 设置用户ID
area.setCreateBy(SecurityUtils.getUserId().toString());
// 转换为DTO
AirlineAreaDTO dto = AirlineAreaControllerConvert.to(area);
// 调用服务层方法
List<AirlineAreaDTO> list = iAirlineAreaGroupService.selectAreaListByUserId(dto);
// 转换为VO
List<AirlineAreaVO> result = AirlineAreaControllerConvert.fromList(list);
return success(result);
}
/**
* 批量删除空域
*
* @param areaIds 空域ID列表
* @return 删除结果
*/
@DeleteMapping("/batchDeleteArea")
@Operation(summary = "批量删除空域")
public AjaxResult batchDeleteArea(@RequestBody List<Long> areaIds) {
if (areaIds == null || areaIds.isEmpty()) {
return error("没有需要删除的空域");
}
int result = iAirlineAreaGroupService.batchDeleteArea(areaIds);
if (result > 0) {
return success("删除成功,共删除 " + result + " 个空域");
}
return error("删除失败");
}
}

View File

@ -0,0 +1,91 @@
package com.ruoyi.airline.controller;
import com.ruoyi.airline.api.domain.AirlineFileGroupInfoVO;
import com.ruoyi.airline.api.domain.AirlineFileVO;
import com.ruoyi.airline.controller.convert.AirlineFileControllerConvert;
import com.ruoyi.airline.service.api.IAirlineFileService;
import com.ruoyi.airline.service.dto.AirlineFileDTO;
import com.ruoyi.common.core.exception.base.BaseException;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
/**
* 航线文件Controller
*
* @author 拓恒
* @date 2026-01-17
*/
@RestController
@RequestMapping("/file")
@Tag(name = "航线管理")
public class AirlineFileController extends BaseController {
private static final Logger log = LoggerFactory.getLogger(AirlineFileController.class);
@Autowired
private IAirlineFileService airlineFileService;
/**
* 编辑航线文件信息
*
* @param entity 实体对象
* @return
*/
// @RequiresPermissions("airline:file:edit")
// @Log(title = "修改航线属性", businessType = BusinessType.UPDATE)
@PutMapping("/edit")
@Operation(summary = "编辑航线文件描述信息")
public AjaxResult edit(@RequestBody AirlineFileGroupInfoVO entity) {
log.info("编辑航线文件信息请求: {}", entity);
AirlineFileDTO dto = AirlineFileControllerConvert.to(entity.getAirlineFileVO());
log.info("转换后的DTO: {}", dto);
Long result = airlineFileService.update(dto);
log.info("更新结果: {}", result);
return success(result);
}
/**
* 创建航线
* <p>
* kmz类似zip一般情况下内部包含kml和wpml两个文件
*
* @param vo
*/
// @RequiresPermissions("airline:file:parseAndUpload")
// @Log(title = "创建航线", businessType = BusinessType.UPDATE)
@PostMapping("/createOrUpdate")
@Operation(summary = "编辑航线文件内容,生产航点新文件")
public AjaxResult createOrUpdate(@RequestBody AirlineFileVO vo) {
AirlineFileDTO airlineFile = AirlineFileControllerConvert.to(vo);
try {
return success(airlineFileService.createOrupdate(airlineFile));
} catch (IOException e) {
throw new BaseException("更新航线失败", e.getMessage());
}
}
@GetMapping("/{id}")
@Operation(summary = "根据ID查询航线文件详情")
public AjaxResult getById(@PathVariable Long id) {
AirlineFileDTO dto = airlineFileService.selectById(id);
if (dto == null) {
return error("航线文件不存在");
}
AirlineFileVO vo = AirlineFileControllerConvert.from(dto);
return success(vo);
}
}

View File

@ -0,0 +1,123 @@
package com.ruoyi.airline.controller;
import com.ruoyi.airline.api.domain.AirlineFileGroupVO;
import com.ruoyi.airline.controller.convert.AirlineFileGroupControllerConvert;
import com.ruoyi.airline.service.api.IAirlineFileGroupService;
import com.ruoyi.airline.service.dto.AirlineFileDTO;
import com.ruoyi.airline.service.dto.AirlineFileGroupDTO;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.utils.SecurityUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 航线分组
*
* @author 拓恒
*/
@RestController
@RequestMapping("/fileGroup")
@Tag(name = "航线分组管理")
public class AirlineFileGroupController extends BaseController {
@Autowired
private IAirlineFileGroupService iAirlineFileGroupService;
/**
* 获取航线文件分组列表,根据用户Id查询分组
*
* @param airlineFileVO 查询条件
* @return
*/
// @RequiresPermissions("airline:group:list")
@GetMapping()
@Operation(summary = "获取所有的航线分组")
public TableDataInfo index(AirlineFileGroupVO airlineFileVO) {
startPage();
airlineFileVO.setCreateBy(String.valueOf(SecurityUtils.getUserId()));
AirlineFileGroupDTO dto = AirlineFileGroupControllerConvert.to(airlineFileVO);
List<AirlineFileGroupDTO> list = iAirlineFileGroupService.selectGroupList(dto);
List<AirlineFileGroupVO> result = AirlineFileGroupControllerConvert.toApiDomainList(list);
return getDataTable(result);
}
/**
* 根据分组编号获取详细信息
*/
// @RequiresPermissions("airline:group:query")
@GetMapping(value = "/{groupId}")
@Operation(summary = "根据分组ID 获取分组详情信息")
public AjaxResult getInfo(@PathVariable("groupId") Long groupId) {
return success(iAirlineFileGroupService.selectAirLineListsByGroupId(SecurityUtils.getUserId(), groupId));
}
/**
* 新增分组
*/
// @RequiresPermissions("airline:group:add")
// @Log(title = "新增分组", businessType = BusinessType.INSERT)
@PostMapping
@Operation(summary = "新增分组")
public AjaxResult add(@Validated @RequestBody AirlineFileGroupVO group) {
group.setCreateBy(String.valueOf(SecurityUtils.getUserId()));
AirlineFileGroupDTO dto = AirlineFileGroupControllerConvert.to(group);
if (iAirlineFileGroupService.checkGroupNameUnique(dto)) {
return error("新增分组'" + group.getGroupName() + "'失败,分组名称已存在");
}
return toAjax(iAirlineFileGroupService.insertGroup(dto));
}
/**
* 修改分组
*/
// @RequiresPermissions("airline:group:edit")
// @Log(title = "修改分组", businessType = BusinessType.UPDATE)
@PutMapping
@Operation(summary = "修改分组")
public AjaxResult edit(@Validated @RequestBody AirlineFileGroupVO group) {
group.setCreateBy(String.valueOf(SecurityUtils.getUserId()));
AirlineFileGroupDTO dto = AirlineFileGroupControllerConvert.to(group);
if (iAirlineFileGroupService.checkGroupNameUnique(dto)) {
return error("修改分组'" + group.getGroupName() + "'失败,分组名称已存在");
}
return toAjax(iAirlineFileGroupService.updateGroup(dto));
}
/**
* 删除分组前端校验分组下是否有航线弹出确认删除提示如果确认会将分组及航线一起删除
*/
// @RequiresPermissions("airline:group:remove")
// @Log(title = "删除分组", businessType = BusinessType.DELETE)
@DeleteMapping("/delete/{groupId}")
@Operation(summary = "删除分组")
public AjaxResult removeByQueryParam(@PathVariable("groupId") Long groupId) {
return toAjax(iAirlineFileGroupService.deletegroupById(SecurityUtils.getUserId(), groupId));
}
/**
* 根据用户ID查询所有符合条件的航线包含分组信息
*
* @param dto 查询条件
* @return 航线列表
*/
@PostMapping("/airlineList")
@Operation(summary = "根据用户ID查询所有符合条件的航线")
public TableDataInfo selectAirlineListByUserId(AirlineFileDTO dto) {
startPage();
dto.setCreateBy(String.valueOf(SecurityUtils.getUserId()));
List<AirlineFileDTO> list = iAirlineFileGroupService.selectAirlineListByUserId(dto);
return getDataTable(list);
}
}

View File

@ -0,0 +1,219 @@
package com.ruoyi.airline.controller;
import com.alibaba.nacos.client.naming.utils.CollectionUtils;
import com.ruoyi.airline.api.domain.AirlineFileGroupInfoVO;
import com.ruoyi.airline.api.domain.AirlineFileVO;
import com.ruoyi.airline.controller.convert.AirlineFileControllerConvert;
import com.ruoyi.airline.controller.convert.AirlineFileGroupInfoControllerConvert;
import com.ruoyi.airline.service.api.IAirlineFileGroupInfoService;
import com.ruoyi.airline.service.api.IAirlineFileService;
import com.ruoyi.airline.service.dto.AirlineFileDTO;
import com.ruoyi.airline.service.dto.AirlineFileGroupInfoDTO;
import com.ruoyi.common.core.exception.base.BaseException;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* 航线分组
*
* @author 拓恒
*/
@RestController
@RequestMapping("/fileGroupInfo")
@Tag(name = "分组航线管理")
public class AirlineFileGroupInfoController extends BaseController {
@Autowired
private IAirlineFileGroupInfoService iAirlineFileGroupInfoService;
@Autowired
private IAirlineFileService iAirlineFileService;
/**
* 获取航线文件分组列表,根据用户Id查询分组
*
* @param groupId 分组ID
* @return
*/
// @RequiresPermissions("airline:groupInfo:list")
@GetMapping("/{groupId}")
@Operation(summary = "编辑航线文件内容,生产航点新文件")
public TableDataInfo selectGroupInfoListById(@PathVariable("groupId") Long groupId) {
startPage();
List<AirlineFileGroupInfoDTO> list = iAirlineFileGroupInfoService.selectGroupInfoListById(groupId);
// List<AirlineFileGroupInfoVO> result = AirlineFileGroupInfoControllerConvert.fromList(list);
return getDataTable(list);
}
/**
* 获取航线文件分组列表,根据用户Id查询分组使用查询参数
*
* @param groupId 分组ID
* @return
*/
// @RequiresPermissions("airline:groupInfo:list")
@GetMapping
@Operation(summary = "编辑航线文件内容,生产航点新文件")
public TableDataInfo selectGroupInfoListByQueryId(@RequestParam("groupId") Long groupId) {
startPage();
List<AirlineFileGroupInfoDTO> list = iAirlineFileGroupInfoService.selectGroupInfoListById(groupId);
List<AirlineFileGroupInfoVO> result = AirlineFileGroupInfoControllerConvert.toApiDomainList(list);
return getDataTable(result);
}
/**
* kmz航线文件并转换成waypoint上传 ,仅仅返航URL
* <p>
* kmz类似zip一般情况下内部包含kml和wpml两个文件
*
* @param file
*/
@PostMapping("/parseAndUpload/{groupId}")
@Operation(summary = " kmz航线文件并转换成waypoint上传 ,仅仅返航URL")
public AjaxResult parseAndUpload(@RequestParam("file") MultipartFile file, @PathVariable("groupId") Long groupId) throws BaseException {
AirlineFileDTO dto = iAirlineFileService.parseAndUplload(file, groupId);
AirlineFileGroupInfoDTO infoDTO = new AirlineFileGroupInfoDTO();
infoDTO.setGroupId(groupId);
infoDTO.setAirlineFileDTO(dto);
AirlineFileDTO result = iAirlineFileGroupInfoService.save(infoDTO);
return success(AirlineFileControllerConvert.from(result));
}
/**
* 在当前分组下添加初始航线空的航线
*
* @param vo 实体对象
*/
@PostMapping()
@Operation(summary = "在当前分组下添加初始航线,必须上传分组ID")
public AjaxResult add(@RequestBody AirlineFileGroupInfoVO vo) throws BaseException {
if (vo.getGroupId() == null) {
throw new BaseException("分组ID不能为空");
}
AirlineFileGroupInfoDTO infoDTO = AirlineFileGroupInfoControllerConvert.to(vo);
AirlineFileDTO result = iAirlineFileGroupInfoService.save(infoDTO);
return success(AirlineFileControllerConvert.from(result));
}
/***
* 删除分组详情
* @param vo
* @return
* @throws BaseException
*/
@DeleteMapping("/delete")
@Operation(summary = "在当前分组下添加初始航线,必须上传分组ID")
public AjaxResult delete(@RequestBody AirlineFileGroupInfoVO vo) throws BaseException {
if (vo.getGroupId() == null) {
throw new BaseException("分组ID不能为空");
}
AirlineFileGroupInfoDTO dto = AirlineFileGroupInfoControllerConvert.to(vo);
Long result = iAirlineFileGroupInfoService.deleteGroupInfo(dto);
if (result > 0) {
return success(result);
}
throw new BaseException("删除失败");
}
/***
* 批量删除分组详情
* @param airLineIds
* @return
* @throws BaseException
*/
@DeleteMapping("/batchDelete/{groupId}")
@Operation(summary = "批量删除分组详情")
public AjaxResult delete(@RequestBody List<Long> airLineIds, @PathVariable("groupId") Long groupId) throws BaseException {
if (groupId == null) {
throw new BaseException("分组ID不能为空");
}
if (CollectionUtils.isEmpty(airLineIds)) {
throw new BaseException("没有需要删除的航线");
}
Long result = iAirlineFileGroupInfoService.deleteGroupInfoBatch(airLineIds, groupId);
if (result > 0) {
return success(result);
}
throw new BaseException("删除失败");
}
/***
* 移动分组详情到新分组
* @param vo
* @param groupId
* @return
* @throws BaseException
*/
@PostMapping("/move/{groupId}")
@Operation(summary = "移动分组详情到新分组")
public AjaxResult move(@RequestBody AirlineFileGroupInfoVO vo, @PathVariable("groupId") Long groupId) throws BaseException {
AirlineFileGroupInfoDTO dto = AirlineFileGroupInfoControllerConvert.to(vo);
Long result = iAirlineFileGroupInfoService.moveGroupInfo(
dto, groupId
);
if (result > 0) {
return success(result);
}
throw new BaseException("移动失败");
}
@PostMapping("/move/{groupId}/{newGroupId}")
@Operation(summary = "批量移动分组详情到新分组")
public AjaxResult batchMove(@RequestBody List<Long> airlines, @PathVariable("groupId") Long groupId, @PathVariable("newGroupId") Long newGroupId) throws BaseException {
if (groupId == null) {
throw new BaseException("原分组ID不能为空");
}
if (newGroupId == null) {
throw new BaseException("新分组ID不能为空");
}
if (CollectionUtils.isEmpty(airlines)) {
throw new BaseException("没有需要移动的航线");
}
Long result = iAirlineFileGroupInfoService.batchMoveGroupInfo(
airlines, groupId, newGroupId
);
if (result > 0) {
return success(result);
}
throw new BaseException("移动失败");
}
// 增加根据分组下的航线id进行批量导出并且支持zip压缩上传到minos将下载地址返回给前端
/**
* 批量导出航线并上传到minio
*
* @param airLineIds 航线ID列表
* @param groupId 分组ID
* @return 下载地址
* @throws BaseException
*/
@PostMapping("/batchExport/{groupId}")
@Operation(summary = "批量导出航线并上传到minio")
public AjaxResult batchExportAirlines(@RequestBody List<Long> airLineIds, @PathVariable("groupId") Long groupId) throws BaseException {
if (groupId == null) {
throw new BaseException("分组ID不能为空");
}
if (airLineIds == null || airLineIds.isEmpty()) {
throw new BaseException("没有需要导出的航线");
}
String downloadUrl = iAirlineFileGroupInfoService.batchExportAirlines(airLineIds, groupId);
return success(downloadUrl);
}
}

View File

@ -0,0 +1,154 @@
package com.ruoyi.airline.controller;
import com.ruoyi.airline.api.domain.AirlineMarkerGroupDetailVO;
import com.ruoyi.airline.api.domain.AirlineMarkerVO;
import com.ruoyi.airline.controller.convert.AirlineMarkerControllerConvert;
import com.ruoyi.airline.controller.convert.AirlineMarkerGroupDetailControllerConvert;
import com.ruoyi.airline.service.api.IAirlineMarkerGroupInfoService;
import com.ruoyi.airline.service.api.IAirlineMarkerService;
import com.ruoyi.airline.service.dto.AirlineMarkerDTO;
import com.ruoyi.airline.service.dto.AirlineMarkerGroupInfoDTO;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.utils.SecurityUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 标注管理
*
* @author 拓恒
*/
@RestController
@RequestMapping("/marker")
@Tag(name = "标注管理")
public class AirlineMarkerController extends BaseController {
@Autowired
private IAirlineMarkerService iAirlineMarkerService;
@Autowired
private IAirlineMarkerGroupInfoService iAirlineMarkerGroupInfoService;
/**
* 新增标注
*/
@PostMapping
@Operation(summary = "新增标注")
public AjaxResult add(@Validated @RequestBody AirlineMarkerVO marker) {
marker.setCreateBy(SecurityUtils.getUserId().toString());
marker.setUpdateBy(SecurityUtils.getUserId().toString());
AirlineMarkerDTO dto = AirlineMarkerControllerConvert.to(marker);
return toAjax(iAirlineMarkerGroupInfoService.insertMarker(dto));
}
/**
* 删除标注软删除
*/
@DeleteMapping("/{id}")
@Operation(summary = "删除标注")
public AjaxResult remove(@PathVariable Long id) {
AirlineMarkerDTO dto = new AirlineMarkerDTO();
dto.setId(id);
dto.setUpdateBy(SecurityUtils.getUserId().toString());
return toAjax(iAirlineMarkerGroupInfoService.deleteMarker(dto));
}
/**
* 修改标注
*/
@PutMapping
@Operation(summary = "修改标注")
public AjaxResult edit(@Validated @RequestBody AirlineMarkerVO marker) {
marker.setUpdateBy(SecurityUtils.getUserId().toString());
AirlineMarkerDTO dto = AirlineMarkerControllerConvert.to(marker);
return toAjax(iAirlineMarkerService.updateMarker(dto));
}
/**
* 批量删除标注
*
* @param markerIds 标注ID列表
* @return 删除结果
*/
@DeleteMapping("/batchDeleteMarker")
@Operation(summary = "批量删除标注")
public AjaxResult batchDeleteMarker(@RequestBody List<Long> markerIds) {
if (markerIds == null || markerIds.isEmpty()) {
return error("没有需要删除的标注");
}
int result = iAirlineMarkerGroupInfoService.batchDeleteMarker(markerIds);
if (result > 0) {
return success("删除成功,共删除 " + result + " 个标注");
}
return error("删除失败");
}
/**
* 获取用户下所有可用标注
*/
@GetMapping("/user-available")
@Operation(summary = "获取用户下所有可用标注")
public AjaxResult getUserAvailableMarkers(AirlineMarkerVO vo) {
AirlineMarkerDTO dto = AirlineMarkerControllerConvert.to(vo);
dto.setCreateBy(SecurityUtils.getUserId().toString());
List<AirlineMarkerDTO> dtoList = iAirlineMarkerGroupInfoService.selectAllAvailableMarkers(dto);
List<AirlineMarkerVO> result = AirlineMarkerControllerConvert.fromList(dtoList);
return success(result);
}
/**
* 获取全部可用标注
*/
@GetMapping("/all-available")
@Operation(summary = "获取全部可用标注")
public AjaxResult getAllAvailableMarkers(AirlineMarkerVO vo) {
AirlineMarkerDTO dto = AirlineMarkerControllerConvert.to(vo);
dto.setStatus(1);
List<AirlineMarkerDTO> dtoList = iAirlineMarkerGroupInfoService.selectAllAvailableMarkers(dto);
List<AirlineMarkerVO> result = AirlineMarkerControllerConvert.fromList(dtoList);
return success(result);
}
/**
* 获取标注详情
*/
@GetMapping("/{groupId}")
@Operation(summary = "按照空域分组查询所有的标准信息")
public AjaxResult getInfo(@PathVariable Long groupId) {
AirlineMarkerGroupInfoDTO dto = iAirlineMarkerGroupInfoService.selectMarkersByGroupId(groupId);
// 使用转换类进行转换
AirlineMarkerGroupDetailVO result = AirlineMarkerGroupDetailControllerConvert.from(dto);
return success(result);
}
/**
* 批量移动分组的接口
*/
@PostMapping("/move/{targetGroupId}")
@Operation(summary = "批量移动标注到指定分组")
public AjaxResult batchMoveToGroup(@RequestBody List<Long> markerIds, @PathVariable("targetGroupId") Long targetGroupId) {
if (targetGroupId == null) {
return error("目标分组ID不能为空");
}
if (markerIds == null || markerIds.isEmpty()) {
return error("没有需要移动的标注");
}
int result = iAirlineMarkerGroupInfoService.batchMoveMarkersToGroup(markerIds, targetGroupId);
if (result > 0) {
return success("移动成功,共移动 " + result + " 个标注");
}
return error("移动失败");
}
}

View File

@ -0,0 +1,123 @@
package com.ruoyi.airline.controller;
import com.ruoyi.airline.api.domain.AirlineMarkerGroupVO;
import com.ruoyi.airline.api.domain.AirlineMarkerVO;
import com.ruoyi.airline.controller.convert.AirlineMarkerControllerConvert;
import com.ruoyi.airline.controller.convert.AirlineMarkerGroupControllerConvert;
import com.ruoyi.airline.service.api.IAirlineMarkerGroupService;
import com.ruoyi.airline.service.dto.AirlineMarkerDTO;
import com.ruoyi.airline.service.dto.AirlineMarkerGroupDTO;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.security.utils.SecurityUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 标注分组
*
* @author 拓恒
*/
@RestController
@RequestMapping("/markerGroup")
@Tag(name = "标注分组管理")
public class AirlineMarkerGroupController extends BaseController {
private static final Logger log = LoggerFactory.getLogger(AirlineMarkerGroupController.class);
@Autowired
private IAirlineMarkerGroupService iAirlineMarkerGroupService;
/**
* 获取标注分组列表
*
* @param markerGroupVO 查询条件
*/
@GetMapping()
@Operation(summary = "获取所有的标注分组")
public TableDataInfo index(AirlineMarkerGroupVO markerGroupVO) {
startPage();
AirlineMarkerGroupDTO dto = AirlineMarkerGroupControllerConvert.to(markerGroupVO);
List<AirlineMarkerGroupDTO> list = iAirlineMarkerGroupService.selectGroupList(dto);
List<AirlineMarkerGroupVO> result = AirlineMarkerGroupControllerConvert.toApiDomainList(list);
return getDataTable(result);
}
/**
* 新增分组
*/
@PostMapping
@Operation(summary = "新增分组")
public AjaxResult add(@Validated @RequestBody AirlineMarkerGroupVO group) {
group.setCreateBy(SecurityUtils.getUserId().toString());
group.setUpdateBy(SecurityUtils.getUserId().toString());
AirlineMarkerGroupDTO dto = AirlineMarkerGroupControllerConvert.to(group);
if (iAirlineMarkerGroupService.checkGroupNameUnique(dto)) {
return error("新增分组'" + group.getName() + "'失败,分组名称已存在");
}
return toAjax(iAirlineMarkerGroupService.insertGroup(dto));
}
/**
* 修改分组
*/
@PutMapping
@Operation(summary = "修改分组")
public AjaxResult edit(@Validated @RequestBody AirlineMarkerGroupVO group) {
group.setUpdateBy(SecurityUtils.getUserId().toString());
AirlineMarkerGroupDTO dto = AirlineMarkerGroupControllerConvert.to(group);
if (iAirlineMarkerGroupService.checkGroupNameUnique(dto)) {
return error("修改分组'" + group.getName() + "'失败,分组名称已存在");
}
return toAjax(iAirlineMarkerGroupService.updateGroup(dto));
}
/**
* 删除分组
*/
@DeleteMapping("/delete/{id}")
@Operation(summary = "删除分组")
public AjaxResult removeByQueryParam(@PathVariable Long id) {
return toAjax(iAirlineMarkerGroupService.deleteGroupById(id));
}
/**
* 批量删除分组
*/
@DeleteMapping("/batchDelete")
@Operation(summary = "批量删除分组")
public AjaxResult batchRemove(@RequestBody List<Long> groupIds) {
return toAjax(iAirlineMarkerGroupService.batchDeleteGroup(groupIds));
}
/**
* 根据ID查询分组
*/
@GetMapping("/get/{id}")
@Operation(summary = "根据ID查询分组")
public AjaxResult getInfo(@PathVariable Long id) {
AirlineMarkerGroupDTO dto = iAirlineMarkerGroupService.selectGroupById(id);
AirlineMarkerGroupVO result = AirlineMarkerGroupControllerConvert.from(dto);
return success(result);
}
/**
* 在指定分组下新增标注
*/
@PostMapping("/addMarker/{id}")
@Operation(summary = "在指定分组下新增标注")
public AjaxResult addMarker(@PathVariable Long id, @Validated @RequestBody AirlineMarkerVO marker) {
marker.setCreateBy(SecurityUtils.getUserId().toString());
marker.setUpdateBy(SecurityUtils.getUserId().toString());
AirlineMarkerDTO dto = AirlineMarkerControllerConvert.to(marker);
return toAjax(iAirlineMarkerGroupService.insertMarkerWithGroup(id, dto));
}
}

View File

@ -1,70 +0,0 @@
package com.ruoyi.airline.controller;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.security.annotation.InnerAuth;
import com.ruoyi.airline.api.domain.AirlineTempVO;
import com.ruoyi.airline.controller.convert.AirlineTempControllerConvert;
import com.ruoyi.airline.service.api.IAirlineTempService;
import com.ruoyi.airline.service.dto.AirlineTempDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 航线临时表Controller
*
* @author ruoyi
* @date 2026-01-17
*/
@RestController
@RequestMapping("/airline/temp")
public class AirlineTempController extends BaseController
{
@Autowired
private IAirlineTempService airlineTempService;
/**
* 查询航线临时表列表
*/
@GetMapping("/list")
public TableDataInfo list(AirlineTempVO airlineTemp)
{
startPage();
// API Domain Service DTO
AirlineTempDTO dto = AirlineTempControllerConvert.toDTO(airlineTemp);
List<AirlineTempDTO> dtoList = airlineTempService.selectAirlineTempList(dto);
// Service DTO API Domain
List<AirlineTempVO> list = AirlineTempControllerConvert.toApiDomainList(dtoList);
return getDataTable(list);
}
/**
* 获取航线临时表详细信息内部调用
*/
@InnerAuth
@GetMapping(value = "/{id}")
public R<AirlineTempVO> getAirlineById(@PathVariable("id") String id)
{
AirlineTempDTO dto = airlineTempService.selectAirlineTempById(id);
AirlineTempVO airlineTemp = AirlineTempControllerConvert.toVO(dto);
return R.ok(airlineTemp);
}
/**
* 获取航线临时表详细信息外部调用
*/
@GetMapping(value = "/info/{id}")
public AjaxResult getInfo(@PathVariable("id") String id)
{
AirlineTempDTO dto = airlineTempService.selectAirlineTempById(id);
AirlineTempVO airlineTemp = AirlineTempControllerConvert.toVO(dto);
return success(airlineTemp);
}
}

View File

@ -0,0 +1,44 @@
package com.ruoyi.airline.controller.convert;
import com.ruoyi.common.core.utils.BaseConvert;
import com.ruoyi.airline.api.domain.AirLinePointVO;
import com.ruoyi.airline.service.dto.AirLinePointDTO;
import java.util.List;
/**
* 航线航点Controller转换类
* 用于Controller层VO和Service层DTO之间的转换
*
* @author ruoyi
* @date 2026-01-26
*/
public class AirLinePointControllerConvert extends BaseConvert<AirLinePointDTO, AirLinePointVO>
{
private static final AirLinePointControllerConvert INSTANCE = new AirLinePointControllerConvert();
private AirLinePointControllerConvert() {
super(AirLinePointDTO.class, AirLinePointVO.class);
}
public static AirLinePointVO from(AirLinePointDTO dto)
{
return INSTANCE.innerFrom(dto);
}
public static AirLinePointDTO to(AirLinePointVO vo)
{
return INSTANCE.innerTo(vo);
}
public static List<AirLinePointVO> fromList(List<AirLinePointDTO> dtoList)
{
return INSTANCE.innerFromList(dtoList);
}
public static List<AirLinePointDTO> toList(List<AirLinePointVO> voList)
{
return INSTANCE.innerToList(voList);
}
}

View File

@ -0,0 +1,140 @@
package com.ruoyi.airline.controller.convert;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.airline.api.domain.AirlineAreaVO;
import com.ruoyi.airline.api.domain.AirlineAreaTimeRuleVO;
import com.ruoyi.airline.controller.convert.AirlineAreaTimeRuleControllerConvert;
import com.ruoyi.airline.service.dto.AirlineAreaDTO;
import com.ruoyi.airline.service.dto.AirlineAreaTimeRuleDTO;
import com.ruoyi.common.core.utils.BaseConvert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* 空域Controller转换类
* 用于API VO和Service DTO之间的转换
*
* @author ruoyi
* @date 2026-02-25
*/
public class AirlineAreaControllerConvert extends BaseConvert<AirlineAreaDTO, AirlineAreaVO>
{
private static final Logger log = LoggerFactory.getLogger(AirlineAreaControllerConvert.class);
private static final ObjectMapper objectMapper = new ObjectMapper();
private static final AirlineAreaControllerConvert INSTANCE = new AirlineAreaControllerConvert();
private AirlineAreaControllerConvert() {
super(AirlineAreaDTO.class, AirlineAreaVO.class);
}
public static AirlineAreaVO from(AirlineAreaDTO dto)
{
return INSTANCE.innerFrom(dto);
}
public static AirlineAreaDTO to(AirlineAreaVO vo)
{
return INSTANCE.innerTo(vo);
}
public static List<AirlineAreaVO> fromList(List<AirlineAreaDTO> dtoList)
{
return INSTANCE.innerFromList(dtoList);
}
public static List<AirlineAreaDTO> toList(List<AirlineAreaVO> voList)
{
return INSTANCE.innerToList(voList);
}
@Override
protected AirlineAreaVO innerFrom(AirlineAreaDTO dto) {
if (dto == null) {
return null;
}
AirlineAreaVO vo = new AirlineAreaVO();
vo.setId(dto.getId());
vo.setName(dto.getName());
vo.setAreaType(dto.getAreaType());
vo.setStatus(dto.getStatus());
vo.setShape(dto.getShape());
vo.setAreaArea(dto.getAreaArea());
vo.setAreaPerimeter(dto.getAreaPerimeter());
vo.setRadius(dto.getRadius());
vo.setMinHeight(dto.getMinHeight());
vo.setMaxHeight(dto.getMaxHeight());
vo.setRemark(dto.getRemark());
// 转换时间规则列表
if (dto.getTimeRules() != null && !dto.getTimeRules().isEmpty()) {
List<AirlineAreaTimeRuleVO> timeRuleVOs = AirlineAreaTimeRuleControllerConvert.fromList(dto.getTimeRules());
vo.setTimeRules(timeRuleVOs);
}
// 将字符串转换为 List<PointInfo>
if (dto.getPoints() != null && !dto.getPoints().isEmpty()) {
try {
List<AirlineAreaVO.PointInfo> pointsList = objectMapper.readValue(
dto.getPoints(),
objectMapper.getTypeFactory().constructCollectionType(List.class, AirlineAreaVO.PointInfo.class)
);
vo.setPoints(pointsList);
} catch (JsonProcessingException e) {
log.error("转换坐标点信息失败: {}", e.getMessage());
}
}
return vo;
}
@Override
protected AirlineAreaDTO innerTo(AirlineAreaVO vo) {
if (vo == null) {
return null;
}
log.info("AirlineAreaControllerConvert.innerTo - vo.getName(): {}, vo.getAreaType(): {}, vo.getStatus(): {}",
vo.getName(), vo.getAreaType(), vo.getStatus());
AirlineAreaDTO dto = new AirlineAreaDTO();
dto.setId(vo.getId());
dto.setName(vo.getName());
dto.setAreaType(vo.getAreaType());
dto.setStatus(vo.getStatus());
dto.setShape(vo.getShape());
dto.setAreaArea(vo.getAreaArea());
dto.setAreaPerimeter(vo.getAreaPerimeter());
dto.setRadius(vo.getRadius());
dto.setMinHeight(vo.getMinHeight());
dto.setMaxHeight(vo.getMaxHeight());
dto.setRemark(vo.getRemark());
// 转换时间规则列表
if (vo.getTimeRules() != null && !vo.getTimeRules().isEmpty()) {
List<AirlineAreaTimeRuleDTO> timeRuleDTOs = AirlineAreaTimeRuleControllerConvert.toList(vo.getTimeRules());
dto.setTimeRules(timeRuleDTOs);
}
// List<PointInfo> 转换为字符串
if (vo.getPoints() != null && !vo.getPoints().isEmpty()) {
try {
String pointsJson = objectMapper.writeValueAsString(vo.getPoints());
dto.setPoints(pointsJson);
} catch (JsonProcessingException e) {
log.error("转换坐标点信息失败: {}", e.getMessage());
dto.setPoints("[]"); // Default to empty array
}
} else {
dto.setPoints("[]"); // Default to empty array
}
log.info("AirlineAreaControllerConvert.innerTo - dto.getName(): {}, dto.getAreaType(): {}, dto.getStatus(): {}",
dto.getName(), dto.getAreaType(), dto.getStatus());
return dto;
}
}

View File

@ -0,0 +1,52 @@
package com.ruoyi.airline.controller.convert;
import com.ruoyi.airline.api.domain.AirlineAreaGroupVO;
import com.ruoyi.airline.service.dto.AirlineAreaGroupDTO;
import com.ruoyi.common.core.utils.BaseConvert;
import java.util.List;
/**
* 空域分组Controller转换类
* 用于Controller VO和Service DTO之间的转换
*
* @author ruoyi
* @date 2026-02-25
*/
public class AirlineAreaGroupControllerConvert extends BaseConvert<AirlineAreaGroupDTO, AirlineAreaGroupVO>
{
private static final AirlineAreaGroupControllerConvert INSTANCE = new AirlineAreaGroupControllerConvert();
private AirlineAreaGroupControllerConvert() {
super(AirlineAreaGroupDTO.class, AirlineAreaGroupVO.class);
}
public static AirlineAreaGroupVO from(AirlineAreaGroupDTO dto)
{
return INSTANCE.innerFrom(dto);
}
public static AirlineAreaGroupDTO to(AirlineAreaGroupVO vo)
{
return INSTANCE.innerTo(vo);
}
public static List<AirlineAreaGroupVO> fromList(List<AirlineAreaGroupDTO> dtoList)
{
return INSTANCE.innerFromList(dtoList);
}
public static List<AirlineAreaGroupDTO> toList(List<AirlineAreaGroupVO> voList)
{
return INSTANCE.innerToList(voList);
}
public static List<AirlineAreaGroupVO> toApiDomainList(List<AirlineAreaGroupDTO> dtoList) {
if (dtoList == null) {
return null;
}
return fromList(dtoList);
}
}

View File

@ -0,0 +1,81 @@
package com.ruoyi.airline.controller.convert;
import com.ruoyi.airline.api.domain.AirlineAreaGroupDetailVO;
import com.ruoyi.airline.service.dto.AirlineAreaDTO;
import com.ruoyi.airline.service.dto.AirlineAreaGroupDTO;
import com.ruoyi.common.core.utils.BaseConvert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
/**
* 空域分组详情Controller转换类
* 用于Service DTO和API VO之间的转换
*
* @author ruoyi
* @date 2026-02-25
*/
public class AirlineAreaGroupDetailControllerConvert extends BaseConvert<AirlineAreaGroupDTO, AirlineAreaGroupDetailVO>
{
private static final Logger log = LoggerFactory.getLogger(AirlineAreaGroupDetailControllerConvert.class);
private static final AirlineAreaGroupDetailControllerConvert INSTANCE = new AirlineAreaGroupDetailControllerConvert();
private AirlineAreaGroupDetailControllerConvert() {
super(AirlineAreaGroupDTO.class, AirlineAreaGroupDetailVO.class);
}
public static AirlineAreaGroupDetailVO from(AirlineAreaGroupDTO dto)
{
return INSTANCE.innerFrom(dto);
}
public static AirlineAreaGroupDTO to(AirlineAreaGroupDetailVO vo)
{
return INSTANCE.innerTo(vo);
}
public static List<AirlineAreaGroupDetailVO> fromList(List<AirlineAreaGroupDTO> dtoList)
{
return INSTANCE.innerFromList(dtoList);
}
public static List<AirlineAreaGroupDTO> toList(List<AirlineAreaGroupDetailVO> voList)
{
return INSTANCE.innerToList(voList);
}
@Override
protected AirlineAreaGroupDetailVO innerFrom(AirlineAreaGroupDTO dto) {
if (dto == null) {
return null;
}
AirlineAreaGroupDetailVO result = new AirlineAreaGroupDetailVO();
result.setGroupId(dto.getGroupId());
if (dto.getGroupInfos() != null && !dto.getGroupInfos().isEmpty()) {
List<com.ruoyi.airline.api.domain.AirlineAreaVO> airspaceList = new ArrayList<>();
for (AirlineAreaDTO area : dto.getGroupInfos()) {
// 使用 AirlineAreaControllerConvert 进行转换
com.ruoyi.airline.api.domain.AirlineAreaVO vo = AirlineAreaControllerConvert.from(area);
airspaceList.add(vo);
}
result.setAirspaceList(airspaceList);
}
return result;
}
@Override
protected AirlineAreaGroupDTO innerTo(AirlineAreaGroupDetailVO vo) {
if (vo == null) {
return null;
}
AirlineAreaGroupDTO dto = new AirlineAreaGroupDTO();
dto.setGroupId(vo.getGroupId());
// 这里不需要转换 airspaceList groupInfos因为通常是从服务层到控制层的转换
return dto;
}
}

View File

@ -0,0 +1,146 @@
package com.ruoyi.airline.controller.convert;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.airline.api.domain.AirlineAreaTimeRuleVO;
import com.ruoyi.airline.service.dto.AirlineAreaTimeRuleDTO;
import com.ruoyi.common.core.utils.BaseConvert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* 空域时间规则 Controller 转换类
* 用于 API VO Service DTO 之间的转换
*
* @author 拓恒
*/
public class AirlineAreaTimeRuleControllerConvert extends BaseConvert<AirlineAreaTimeRuleDTO, AirlineAreaTimeRuleVO>
{
private static final Logger log = LoggerFactory.getLogger(AirlineAreaTimeRuleControllerConvert.class);
private static final ObjectMapper objectMapper = new ObjectMapper();
private static final AirlineAreaTimeRuleControllerConvert INSTANCE = new AirlineAreaTimeRuleControllerConvert();
private AirlineAreaTimeRuleControllerConvert() {
super(AirlineAreaTimeRuleDTO.class, AirlineAreaTimeRuleVO.class);
}
public static AirlineAreaTimeRuleVO from(AirlineAreaTimeRuleDTO dto)
{
return INSTANCE.innerFrom(dto);
}
public static AirlineAreaTimeRuleDTO to(AirlineAreaTimeRuleVO vo)
{
return INSTANCE.innerTo(vo);
}
public static List<AirlineAreaTimeRuleVO> fromList(List<AirlineAreaTimeRuleDTO> dtoList)
{
return INSTANCE.innerFromList(dtoList);
}
public static List<AirlineAreaTimeRuleDTO> toList(List<AirlineAreaTimeRuleVO> voList)
{
return INSTANCE.innerToList(voList);
}
@Override
protected AirlineAreaTimeRuleVO innerFrom(AirlineAreaTimeRuleDTO dto) {
if (dto == null) {
return null;
}
AirlineAreaTimeRuleVO vo = new AirlineAreaTimeRuleVO();
vo.setId(dto.getId());
vo.setAreaId(dto.getAreaId());
vo.setRestrictType(dto.getRestrictType());
vo.setGranularity(dto.getGranularity());
vo.setRepetFrequency(dto.getRepetFrequency());
vo.setRemark(dto.getRemark());
// 将字符串转换为 Object
if (dto.getDateRange() != null && !dto.getDateRange().isEmpty()) {
try {
Object dateRange = objectMapper.readValue(dto.getDateRange(), Object.class);
vo.setDateRange(dateRange);
} catch (JsonProcessingException e) {
log.error("转换日期范围失败: {}", e.getMessage());
}
}
if (dto.getTimeRange() != null && !dto.getTimeRange().isEmpty()) {
try {
Object timeRange = objectMapper.readValue(dto.getTimeRange(), Object.class);
vo.setTimeRange(timeRange);
} catch (JsonProcessingException e) {
log.error("转换时间范围失败: {}", e.getMessage());
}
}
if (dto.getGranularityTimes() != null && !dto.getGranularityTimes().isEmpty()) {
try {
Object granularityTimes = objectMapper.readValue(dto.getGranularityTimes(), Object.class);
vo.setGranularityTimes(granularityTimes);
} catch (JsonProcessingException e) {
log.error("转换重复粒度具体时间失败: {}", e.getMessage());
}
}
return vo;
}
@Override
protected AirlineAreaTimeRuleDTO innerTo(AirlineAreaTimeRuleVO vo) {
if (vo == null) {
return null;
}
AirlineAreaTimeRuleDTO dto = new AirlineAreaTimeRuleDTO();
dto.setId(vo.getId());
dto.setAreaId(vo.getAreaId());
dto.setRestrictType(vo.getRestrictType());
dto.setGranularity(vo.getGranularity());
dto.setRepetFrequency(vo.getRepetFrequency());
dto.setRemark(vo.getRemark());
// Object 转换为字符串
if (vo.getDateRange() != null) {
try {
String dateRangeJson = objectMapper.writeValueAsString(vo.getDateRange());
dto.setDateRange(dateRangeJson);
} catch (JsonProcessingException e) {
log.error("转换日期范围失败: {}", e.getMessage());
dto.setDateRange("[]"); // Default to empty array
}
} else {
dto.setDateRange("[]"); // Default to empty array
}
if (vo.getTimeRange() != null) {
try {
String timeRangeJson = objectMapper.writeValueAsString(vo.getTimeRange());
dto.setTimeRange(timeRangeJson);
} catch (JsonProcessingException e) {
log.error("转换时间范围失败: {}", e.getMessage());
dto.setTimeRange("[]"); // Default to empty array
}
} else {
dto.setTimeRange("[]"); // Default to empty array
}
if (vo.getGranularityTimes() != null) {
try {
String granularityTimesJson = objectMapper.writeValueAsString(vo.getGranularityTimes());
dto.setGranularityTimes(granularityTimesJson);
} catch (JsonProcessingException e) {
log.error("转换重复粒度具体时间失败: {}", e.getMessage());
dto.setGranularityTimes("[]"); // Default to empty array
}
} else {
dto.setGranularityTimes("[]"); // Default to empty array
}
return dto;
}
}

View File

@ -0,0 +1,43 @@
package com.ruoyi.airline.controller.convert;
import com.ruoyi.common.core.utils.BaseConvert;
import com.ruoyi.airline.api.domain.AirlineDataVO;
import com.ruoyi.airline.service.dto.AirlineDataDTO;
import java.util.List;
/**
* 航线数据Controller转换类
* 用于Controller VO和Service DTO之间的转换
*
* @author 拓恒
* @date 2026-01-17
*/
public class AirlineDataControllerConvert extends BaseConvert<AirlineDataDTO, AirlineDataVO>
{
private static final AirlineDataControllerConvert INSTANCE = new AirlineDataControllerConvert();
private AirlineDataControllerConvert() {
super(AirlineDataDTO.class, AirlineDataVO.class);
}
public static AirlineDataVO from(AirlineDataDTO dto)
{
return INSTANCE.innerFrom(dto);
}
public static AirlineDataDTO to(AirlineDataVO vo)
{
return INSTANCE.innerTo(vo);
}
public static List<AirlineDataVO> fromList(List<AirlineDataDTO> dtoList)
{
return INSTANCE.innerFromList(dtoList);
}
public static List<AirlineDataDTO> toList(List<AirlineDataVO> voList)
{
return INSTANCE.innerToList(voList);
}
}

View File

@ -0,0 +1,75 @@
package com.ruoyi.airline.controller.convert;
import com.ruoyi.airline.api.domain.AirLinePointVO;
import com.ruoyi.airline.api.domain.AirlineFileVO;
import com.ruoyi.airline.service.dto.AirLinePointDTO;
import com.ruoyi.airline.service.dto.AirlineFileDTO;
import com.ruoyi.common.core.utils.BaseConvert;
import org.springframework.beans.BeanUtils;
import java.util.List;
import java.util.stream.Collectors;
/**
* 航线文件Controller转换类
* 用于Controller VO和Service DTO之间的转换
*
* @author 拓恒
* @date 2026-01-17
*/
public class AirlineFileControllerConvert extends BaseConvert<AirlineFileDTO, AirlineFileVO>
{
private static final AirlineFileControllerConvert INSTANCE = new AirlineFileControllerConvert();
private AirlineFileControllerConvert() {
super(AirlineFileDTO.class, AirlineFileVO.class);
}
public static AirlineFileVO from(AirlineFileDTO dto)
{
return INSTANCE.innerFrom(dto);
}
public static AirlineFileDTO to(AirlineFileVO vo)
{
if (vo == null) {
return null;
}
AirlineFileDTO dto = new AirlineFileDTO();
BeanUtils.copyProperties(vo, dto);
if (vo.getLinePointVOList() != null) {
dto.setLinePointDtoList(vo.getLinePointVOList().stream()
.map(AirlineFileControllerConvert::convertPoint)
.collect(Collectors.toList()));
}
return dto;
}
private static AirLinePointDTO convertPoint(AirLinePointVO vo) {
if (vo == null) {
return null;
}
AirLinePointDTO dto = new AirLinePointDTO();
BeanUtils.copyProperties(vo, dto);
return dto;
}
public static List<AirlineFileVO> fromList(List<AirlineFileDTO> dtoList)
{
return INSTANCE.innerFromList(dtoList);
}
public static List<AirlineFileDTO> toList(List<AirlineFileVO> voList)
{
return INSTANCE.innerToList(voList);
}
public static List<AirlineFileVO> toApiDomainList(List<AirlineFileDTO> dtoList) {
if (dtoList == null)
{
return null;
}
return fromList(dtoList);
}
}

View File

@ -0,0 +1,51 @@
package com.ruoyi.airline.controller.convert;
import com.ruoyi.airline.api.domain.AirlineFileGroupVO;
import com.ruoyi.airline.service.dto.AirlineFileGroupDTO;
import com.ruoyi.common.core.utils.BaseConvert;
import java.util.List;
/**
* 航线文件分组Domain转换类
* 用于Domain模型和Mapper实体之间的转换
*
* @author 拓恒
* @date 2026-01-17
*/
public class AirlineFileGroupControllerConvert extends BaseConvert<AirlineFileGroupDTO, AirlineFileGroupVO> {
private static final AirlineFileGroupControllerConvert INSTANCE = new AirlineFileGroupControllerConvert();
private AirlineFileGroupControllerConvert() {
super(AirlineFileGroupDTO.class, AirlineFileGroupVO.class);
}
public static AirlineFileGroupVO from(AirlineFileGroupDTO dto) {
AirlineFileGroupVO vo = INSTANCE.innerFrom(dto);
vo.setGroupInfos(AirlineFileControllerConvert.fromList(dto.getGroupInfos()));
return vo;
}
public static AirlineFileGroupDTO to(AirlineFileGroupVO vo) {
AirlineFileGroupDTO dto = INSTANCE.innerTo(vo);
dto.setGroupInfos(AirlineFileControllerConvert.toList(vo.getGroupInfos()));
return dto;
}
public static List<AirlineFileGroupVO> fromList(List<AirlineFileGroupDTO> dtoList) {
return INSTANCE.innerFromList(dtoList);
}
public static List<AirlineFileGroupDTO> toList(List<AirlineFileGroupVO> voList) {
return INSTANCE.innerToList(voList);
}
public static List<AirlineFileGroupVO> toApiDomainList(List<AirlineFileGroupDTO> dtoList) {
if (dtoList == null) {
return null;
}
return fromList(dtoList);
}
}

View File

@ -0,0 +1,60 @@
package com.ruoyi.airline.controller.convert;
import com.ruoyi.common.core.utils.BaseConvert;
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;
import java.util.List;
/**
* 航线文件Domain转换类
* 用于Domain模型和Mapper实体之间的转换
*
* @author ruoyi
* @date 2026-01-17
*/
public class AirlineFileGroupInfoControllerConvert extends BaseConvert<AirlineFileGroupInfoDTO, AirlineFileGroupInfoVO>
{
private static final AirlineFileGroupInfoControllerConvert INSTANCE = new AirlineFileGroupInfoControllerConvert();
private AirlineFileGroupInfoControllerConvert() {
super(AirlineFileGroupInfoDTO.class, AirlineFileGroupInfoVO.class);
}
public static AirlineFileGroupInfoVO from(AirlineFileGroupInfoDTO dto)
{
AirlineFileGroupInfoVO vo = INSTANCE.innerFrom(dto);
vo.setAirlineFileVO(AirlineFileControllerConvert.from(dto.getAirlineFileDTO()));
return vo;
}
public static AirlineFileGroupInfoDTO to(AirlineFileGroupInfoVO vo)
{
AirlineFileGroupInfoDTO dto = INSTANCE.innerTo(vo);
dto.setAirlineFileDTO(AirlineFileControllerConvert.to(vo.getAirlineFileVO()));
return dto;
}
public static List<AirlineFileGroupInfoVO> fromList(List<AirlineFileGroupInfoDTO> dtoList)
{
return INSTANCE.innerFromList(dtoList);
}
public static List<AirlineFileGroupInfoDTO> toList(List<AirlineFileGroupInfoVO> voList)
{
return INSTANCE.innerToList(voList);
}
public static List<AirlineFileGroupInfoVO> toApiDomainList(List<AirlineFileGroupInfoDTO> dtoList) {
if (dtoList == null)
{
return null;
}
return fromList(dtoList);
}
}

View File

@ -0,0 +1,115 @@
package com.ruoyi.airline.controller.convert;
import com.ruoyi.airline.api.domain.AirlineMarkerVO;
import com.ruoyi.airline.service.dto.AirlineMarkerDTO;
import com.ruoyi.common.core.utils.BaseConvert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.stream.Collectors;
/**
* 标注Controller转换类
* 用于API VO和Service DTO之间的转换
*
* @author 拓恒
*/
public class AirlineMarkerControllerConvert extends BaseConvert<AirlineMarkerDTO, AirlineMarkerVO>
{
private static final Logger log = LoggerFactory.getLogger(AirlineMarkerControllerConvert.class);
private static final AirlineMarkerControllerConvert INSTANCE = new AirlineMarkerControllerConvert();
private AirlineMarkerControllerConvert() {
super(AirlineMarkerDTO.class, AirlineMarkerVO.class);
}
public static AirlineMarkerVO from(AirlineMarkerDTO dto) {
return INSTANCE.innerFrom(dto);
}
public static AirlineMarkerDTO to(AirlineMarkerVO vo) {
return INSTANCE.innerTo(vo);
}
public static List<AirlineMarkerVO> fromList(List<AirlineMarkerDTO> dtoList) {
return INSTANCE.innerFromList(dtoList);
}
public static List<AirlineMarkerDTO> toList(List<AirlineMarkerVO> voList) {
return INSTANCE.innerToList(voList);
}
@Override
protected AirlineMarkerVO innerFrom(AirlineMarkerDTO dto) {
if (dto == null) {
return null;
}
AirlineMarkerVO vo = new AirlineMarkerVO();
vo.setId(dto.getId());
vo.setMarkerName(dto.getMarkerName());
vo.setMarkerType(dto.getMarkerType());
vo.setStatus(dto.getStatus());
vo.setColor(dto.getColor());
vo.setIcon(dto.getIcon());
vo.setFontSize(dto.getFontSize());
// 转换coordinates
if (dto.getCoordinates() != null) {
vo.setCoordinates(dto.getCoordinates().stream()
.map(point -> {
AirlineMarkerVO.PointInfo voPoint = new AirlineMarkerVO.PointInfo();
voPoint.setLatitude(point.getLatitude());
voPoint.setLongitude(point.getLongitude());
voPoint.setAsl(point.getAsl());
return voPoint;
})
.collect(Collectors.toList()));
}
vo.setDescription(dto.getDescription());
vo.setGroupId(dto.getGroupId());
vo.setCreateBy(dto.getCreateBy());
vo.setCreateTime(dto.getCreateTime());
vo.setUpdateBy(dto.getUpdateBy());
vo.setUpdateTime(dto.getUpdateTime());
return vo;
}
@Override
protected AirlineMarkerDTO innerTo(AirlineMarkerVO vo) {
if (vo == null) {
return null;
}
AirlineMarkerDTO dto = new AirlineMarkerDTO();
dto.setId(vo.getId());
dto.setMarkerName(vo.getMarkerName());
dto.setMarkerType(vo.getMarkerType());
dto.setStatus(vo.getStatus());
dto.setColor(vo.getColor());
dto.setIcon(vo.getIcon());
dto.setFontSize(vo.getFontSize());
// 转换coordinates
if (vo.getCoordinates() != null) {
dto.setCoordinates(vo.getCoordinates().stream()
.map(point -> {
AirlineMarkerDTO.PointInfo dtoPoint = new AirlineMarkerDTO.PointInfo();
dtoPoint.setLatitude(point.getLatitude());
dtoPoint.setLongitude(point.getLongitude());
dtoPoint.setAsl(point.getAsl());
return dtoPoint;
})
.collect(Collectors.toList()));
}
dto.setDescription(vo.getDescription());
dto.setGroupId(vo.getGroupId());
dto.setCreateBy(vo.getCreateBy());
dto.setCreateTime(vo.getCreateTime());
dto.setUpdateBy(vo.getUpdateBy());
dto.setUpdateTime(vo.getUpdateTime());
return dto;
}
}

View File

@ -0,0 +1,51 @@
package com.ruoyi.airline.controller.convert;
import com.ruoyi.airline.api.domain.AirlineMarkerGroupVO;
import com.ruoyi.airline.service.dto.AirlineMarkerGroupDTO;
import com.ruoyi.common.core.utils.BaseConvert;
import java.util.List;
/**
* 标注分组Controller转换类
* 用于Controller VO和Service DTO之间的转换
*
* @author 拓恒
*/
public class AirlineMarkerGroupControllerConvert extends BaseConvert<AirlineMarkerGroupDTO, AirlineMarkerGroupVO>
{
private static final AirlineMarkerGroupControllerConvert INSTANCE = new AirlineMarkerGroupControllerConvert();
private AirlineMarkerGroupControllerConvert() {
super(AirlineMarkerGroupDTO.class, AirlineMarkerGroupVO.class);
}
public static AirlineMarkerGroupVO from(AirlineMarkerGroupDTO dto)
{
return INSTANCE.innerFrom(dto);
}
public static AirlineMarkerGroupDTO to(AirlineMarkerGroupVO vo)
{
return INSTANCE.innerTo(vo);
}
public static List<AirlineMarkerGroupVO> fromList(List<AirlineMarkerGroupDTO> dtoList)
{
return INSTANCE.innerFromList(dtoList);
}
public static List<AirlineMarkerGroupDTO> toList(List<AirlineMarkerGroupVO> voList)
{
return INSTANCE.innerToList(voList);
}
public static List<AirlineMarkerGroupVO> toApiDomainList(List<AirlineMarkerGroupDTO> dtoList) {
if (dtoList == null) {
return null;
}
return fromList(dtoList);
}
}

View File

@ -0,0 +1,58 @@
package com.ruoyi.airline.controller.convert;
import com.ruoyi.airline.api.domain.AirlineMarkerGroupDetailVO;
import com.ruoyi.airline.service.dto.AirlineMarkerGroupInfoDTO;
import com.ruoyi.common.core.utils.BaseConvert;
/**
* 标注分组详情Controller转换类
* 用于API VO和Service DTO之间的转换
*
* @author 拓恒
*/
public class AirlineMarkerGroupDetailControllerConvert extends BaseConvert<AirlineMarkerGroupInfoDTO, AirlineMarkerGroupDetailVO>
{
private static final AirlineMarkerGroupDetailControllerConvert INSTANCE = new AirlineMarkerGroupDetailControllerConvert();
private AirlineMarkerGroupDetailControllerConvert() {
super(AirlineMarkerGroupInfoDTO.class, AirlineMarkerGroupDetailVO.class);
}
public static AirlineMarkerGroupDetailVO from(AirlineMarkerGroupInfoDTO dto) {
return INSTANCE.innerFrom(dto);
}
public static AirlineMarkerGroupInfoDTO to(AirlineMarkerGroupDetailVO vo) {
return INSTANCE.innerTo(vo);
}
@Override
protected AirlineMarkerGroupDetailVO innerFrom(AirlineMarkerGroupInfoDTO dto) {
if (dto == null) {
return null;
}
AirlineMarkerGroupDetailVO vo = new AirlineMarkerGroupDetailVO();
vo.setGroupId(dto.getGroupId());
if (dto.getGroupInfos() != null) {
vo.setAirspaceList(dto.getGroupInfos().stream()
.map(AirlineMarkerControllerConvert::from)
.collect(java.util.stream.Collectors.toList()));
}
return vo;
}
@Override
protected AirlineMarkerGroupInfoDTO innerTo(AirlineMarkerGroupDetailVO vo) {
if (vo == null) {
return null;
}
AirlineMarkerGroupInfoDTO dto = new AirlineMarkerGroupInfoDTO();
dto.setGroupId(vo.getGroupId());
if (vo.getAirspaceList() != null) {
dto.setGroupInfos(vo.getAirspaceList().stream()
.map(AirlineMarkerControllerConvert::to)
.collect(java.util.stream.Collectors.toList()));
}
return dto;
}
}

View File

@ -1,11 +1,10 @@
package com.ruoyi.airline.controller.convert;
import com.ruoyi.common.core.utils.BaseConvert;
import com.ruoyi.airline.api.domain.AirlineTempVO;
import com.ruoyi.airline.service.dto.AirlineTempDTO;
import org.springframework.beans.BeanUtils;
import java.util.List;
import java.util.stream.Collectors;
/**
* 航线临时表Controller层转换器
@ -14,45 +13,40 @@ import java.util.stream.Collectors;
* @author ruoyi
* @date 2026-01-17
*/
public class AirlineTempControllerConvert
public class AirlineTempControllerConvert extends BaseConvert<AirlineTempDTO, AirlineTempVO>
{
/**
* DTO API Domain
*/
public static AirlineTempVO toVO(AirlineTempDTO dto)
{
if (dto == null)
{
return null;
}
AirlineTempVO apiDomain = new AirlineTempVO();
BeanUtils.copyProperties(dto, apiDomain);
return apiDomain;
private static final AirlineTempControllerConvert INSTANCE = new AirlineTempControllerConvert();
private AirlineTempControllerConvert() {
super(AirlineTempDTO.class, AirlineTempVO.class);
}
/**
* API Domain DTO
*/
public static AirlineTempDTO toDTO(AirlineTempVO apiDomain)
public static AirlineTempVO from(AirlineTempDTO dto)
{
if (apiDomain == null)
{
return null;
}
AirlineTempDTO dto = new AirlineTempDTO();
BeanUtils.copyProperties(apiDomain, dto);
return dto;
return INSTANCE.innerFrom(dto);
}
public static AirlineTempDTO to(AirlineTempVO vo)
{
return INSTANCE.innerTo(vo);
}
public static List<AirlineTempVO> fromList(List<AirlineTempDTO> dtoList)
{
return INSTANCE.innerFromList(dtoList);
}
public static List<AirlineTempDTO> toList(List<AirlineTempVO> voList)
{
return INSTANCE.innerToList(voList);
}
/**
* DTO List API Domain List
*/
public static List<AirlineTempVO> toApiDomainList(List<AirlineTempDTO> dtoList)
{
if (dtoList == null)
{
return null;
}
return dtoList.stream().map(AirlineTempControllerConvert::toVO).collect(Collectors.toList());
return fromList(dtoList);
}
}

View File

@ -0,0 +1,32 @@
package com.ruoyi.airline.domain.api;
import com.ruoyi.airline.domain.model.AirlineArea;
import java.util.List;
/**
* 空域管理
*
* @author 拓恒
*/
public interface IAirlineAreaDomain {
int insertArea(AirlineArea model);
int updateArea(AirlineArea model);
int deleteArea(AirlineArea model);
List<AirlineArea> selectAreaList(AirlineArea model);
AirlineArea selectAreaById(Long id);
List<AirlineArea> selectAreaListByIds(List<Long> ids);
/**
* 根据用户ID查询空域列表
* @param model 查询条件
* @return 空域列表
*/
List<AirlineArea> selectAreaListByUserId(AirlineArea model);
}

View File

@ -0,0 +1,36 @@
package com.ruoyi.airline.domain.api;
import com.ruoyi.airline.domain.model.AirlineArea;
import com.ruoyi.airline.domain.model.AirlineAreaGroup;
import java.util.List;
/**
* 空域分组管理
*
* @author 拓恒
*/
public interface IAirlineAreaGroupDomain {
/**
* 软删除
* @param model
* @return
*/
int deletegroup(AirlineAreaGroup model);
/**
* 检查当前用户下分组名称是否唯一
* @param model
* @return
*/
boolean checkgroupNameUnique(AirlineAreaGroup model);
int updateGroup(AirlineAreaGroup model);
int insertGroup(AirlineAreaGroup model);
List<AirlineAreaGroup> selectGroupList(AirlineAreaGroup model);
List<AirlineArea> selectAirlineListByUserId(AirlineArea model);
}

View File

@ -0,0 +1,23 @@
package com.ruoyi.airline.domain.api;
import com.ruoyi.airline.domain.model.AirlineAreaGroupInfo;
import java.util.List;
/**
* 空域分组明细管理
*
* @author 拓恒
*/
public interface IAirlineAreaGroupInfoDomain {
int insertGroupInfo(AirlineAreaGroupInfo model);
int deleteGroupInfo(AirlineAreaGroupInfo model);
List<AirlineAreaGroupInfo> selectGroupInfoList(AirlineAreaGroupInfo model);
List<Long> selectAreaIdsByGroupId(Long groupId);
List<AirlineAreaGroupInfo> selectGroupInfoListById(Long groupId);
}

View File

@ -0,0 +1,27 @@
package com.ruoyi.airline.domain.api;
import com.ruoyi.airline.domain.model.AirlineAreaTimeRule;
import java.util.List;
/**
* 空域时间规则领域接口
*
* @author 拓恒
*/
public interface IAirlineAreaTimeRuleDomain {
int insertTimeRule(AirlineAreaTimeRule model);
int updateTimeRule(AirlineAreaTimeRule model);
int deleteTimeRule(AirlineAreaTimeRule model);
List<AirlineAreaTimeRule> selectTimeRuleList(AirlineAreaTimeRule model);
AirlineAreaTimeRule selectTimeRuleById(Long id);
List<AirlineAreaTimeRule> selectTimeRuleListByAreaId(Long areaId);
int deleteTimeRuleByAreaId(Long areaId);
}

View File

@ -0,0 +1,31 @@
package com.ruoyi.airline.domain.api;
import com.ruoyi.airline.domain.model.AirlineData;
import java.util.List;
/**
* 航线数据Domain接口
*
* @author ruoyi
* @date 2026-01-17
*/
public interface IAirlineDataDomain
{
/**
* 查询航线数据列表
*
* @param airlineData 航线数据
* @return 航线数据集合
*/
List<AirlineData> selectAirlineDataList(AirlineData airlineData);
/**
* 根据ID查询航线数据
*
* @param id 主键ID
* @return 航线数据
*/
AirlineData selectAirlineDataById(Long id);
}

View File

@ -0,0 +1,26 @@
package com.ruoyi.airline.domain.api;
import com.ruoyi.airline.domain.model.AirlineFile;
import com.ruoyi.airline.service.dto.AirlineFileDTO;
import java.util.List;
/**
* 航线文件领域接口
*
* @author ruoyi
* @date 2026-01-17
*/
public interface IAirlineFileDomain {
List<AirlineFile> selectFileListByIds(List<Long> ids);
Long save(AirlineFile model);
List<AirlineFile> selectFileNameLike(String name);
List<AirlineFile> selectFileNameLikeByGroupId(String name, Long groupId);
Long update(AirlineFile model);
}

View File

@ -0,0 +1,37 @@
package com.ruoyi.airline.domain.api;
import com.ruoyi.airline.domain.model.AirlineFile;
import com.ruoyi.airline.domain.model.AirlineFileGroup;
import java.util.List;
/**
* 航线分组
*
* @author 拓恒
*/
public interface IAirlineFileGroupDomain {
/**
* 软删除
* @param model
* @return
*/
int deletegroup(AirlineFileGroup model);
/**
* 检查当前用户下分组名称是否唯一
* @param model
* @return
*/
boolean checkgroupNameUnique(AirlineFileGroup model);
int updateGroup(AirlineFileGroup model);
int insertGroup(AirlineFileGroup model);
List<AirlineFileGroup> selectGroupList(AirlineFileGroup model);
List<AirlineFile> selectAirlineListByUserId(AirlineFile model);
}

View File

@ -0,0 +1,63 @@
package com.ruoyi.airline.domain.api;
import com.ruoyi.airline.domain.model.AirlineFileGroupInfo;
import com.ruoyi.airline.service.dto.AirlineFileGroupInfoDTO;
import java.util.List;
/**
* 航线分组明细
*
* @author 拓恒
*/
public interface IAirlineFileGroupInfoDomain {
List<AirlineFileGroupInfo> selectGroupInfoListById(Long groupId);
/**
* 软删除
*
* @param dto
*/
Long deleteGroupInfo(AirlineFileGroupInfo dto);
Long save(AirlineFileGroupInfo model);
/**
* 检查是否存在相同的groupId和airlineId
*
* @param groupId 分组ID
* @param airlineId 航线ID
* @return 是否存在
*/
boolean existsByGroupIdAndAirlineId(Long groupId, Long airlineId);
/**
* 移动分组详情到新分组
*
* @param oldGroupId 原分组ID
* @param newGroupId 新分组ID
* @param airlineId 航线文件ID
* @return 结果
*/
Long moveGroupInfo(Long oldGroupId, Long newGroupId, Long airlineId);
/**
* 批量删除分组详情
*
* @param airLineIds 航线ID列表
* @param groupId 分组ID
* @return 结果
*/
Long deleteGroupInfoBatch(List<Long> airLineIds, Long groupId);
/**
* 批量移动分组详情到新分组
*
* @param oldGroupId 原分组ID
* @param newGroupId 新分组ID
* @param airLineIds 航线ID列表
* @return 结果
*/
Long batchMoveGroupInfo(Long oldGroupId, Long newGroupId, List<Long> airLineIds);
}

View File

@ -0,0 +1,41 @@
package com.ruoyi.airline.domain.api;
import com.ruoyi.airline.domain.model.AirlineMarker;
import java.util.List;
/**
* 标注管理
*
* @author 拓恒
*/
public interface IAirlineMarkerDomain {
int insertMarker(AirlineMarker model);
int updateMarker(AirlineMarker model);
int deleteMarker(AirlineMarker model);
List<AirlineMarker> selectMarkerList(AirlineMarker model);
AirlineMarker selectMarkerById(Long id);
AirlineMarker selectMarker(AirlineMarker marker);
List<AirlineMarker> selectMarkerListByIds(List<Long> ids);
/**
* 根据用户ID查询标注列表
* @param model 查询条件
* @return 标注列表
*/
List<AirlineMarker> selectMarkerListByUserId(AirlineMarker model);
/**
* 查询所有可用标注关联分组信息表
* @param model 查询条件
* @return 标注列表
*/
List<AirlineMarker> selectAllAvailableMarkers(AirlineMarker model);
}

View File

@ -0,0 +1,38 @@
package com.ruoyi.airline.domain.api;
import com.ruoyi.airline.domain.model.AirlineMarker;
import com.ruoyi.airline.domain.model.AirlineMarkerGroup;
import java.util.List;
/**
* 标注分组管理
*
* @author 拓恒
*/
public interface IAirlineMarkerGroupDomain {
/**
* 软删除
* @param model
* @return
*/
int deleteGroup(AirlineMarkerGroup model);
/**
* 检查分组名称是否唯一
* @param model
* @return
*/
boolean checkGroupNameUnique(AirlineMarkerGroup model);
int updateGroup(AirlineMarkerGroup model);
int insertGroup(AirlineMarkerGroup model);
List<AirlineMarkerGroup> selectGroupList(AirlineMarkerGroup model);
AirlineMarkerGroup selectGroupById(Long id);
List<AirlineMarker> selectMarkerListByUserId(AirlineMarker model);
}

View File

@ -0,0 +1,27 @@
package com.ruoyi.airline.domain.api;
import com.ruoyi.airline.domain.model.AirlineMarkerGroupInfo;
import java.util.List;
/**
* 标注分组明细管理
*
* @author 拓恒
*/
public interface IAirlineMarkerGroupInfoDomain {
int insertMarkerGroupInfo(AirlineMarkerGroupInfo model);
int deleteMarkerGroupInfo(AirlineMarkerGroupInfo model);
List<AirlineMarkerGroupInfo> selectMarkerGroupInfoList(AirlineMarkerGroupInfo model);
List<Long> selectMarkerIdsByGroupId(Long groupId);
int deleteByGroupId(Long groupId);
int deleteByMarkerId(Long markerId);
int batchInsertMarkerGroupInfo(List<AirlineMarkerGroupInfo> list);
}

View File

@ -0,0 +1,28 @@
package com.ruoyi.airline.domain.constant;
public class FileTypeConstants {
/**
* kmz 文件本质上是zip文件
*/
public static final String KMZ = "zip";
/**
* kml 文件
*/
public static final String KML = "kml";
/**
* wpml 文件
*/
public static final String WPML = "wpml";
/**
* 航线导入支持的文件类型
*/
public static final String ROUTE_SUPPORT_TYPE = "kml,zip";
}

View File

@ -0,0 +1,93 @@
package com.ruoyi.airline.domain.convert;
import com.ruoyi.common.core.utils.BaseConvert;
import com.ruoyi.airline.domain.model.AirlineArea;
import com.ruoyi.airline.mapper.entity.AirlineAreaEntity;
import java.util.List;
/**
* 空域Domain转换类
* 用于Domain模型和Mapper实体之间的转换
*
* @author ruoyi
* @date 2026-02-25
*/
public class AirlineAreaDomainConvert extends BaseConvert<AirlineAreaEntity, AirlineArea>
{
private static final AirlineAreaDomainConvert INSTANCE = new AirlineAreaDomainConvert();
private AirlineAreaDomainConvert() {
super(AirlineAreaEntity.class, AirlineArea.class);
}
public static AirlineArea from(AirlineAreaEntity entity)
{
return INSTANCE.innerFrom(entity);
}
public static AirlineAreaEntity to(AirlineArea model)
{
return INSTANCE.innerTo(model);
}
public static List<AirlineArea> fromList(List<AirlineAreaEntity> entityList)
{
return INSTANCE.innerFromList(entityList);
}
public static List<AirlineAreaEntity> toList(List<AirlineArea> modelList)
{
return INSTANCE.innerToList(modelList);
}
@Override
protected AirlineArea innerFrom(AirlineAreaEntity entity) {
if (entity == null) {
return null;
}
AirlineArea model = new AirlineArea();
model.setId(entity.getId());
model.setName(entity.getName());
model.setAreaType(entity.getAreaType());
model.setStatus(entity.getStatus());
model.setPoints(entity.getPoints());
model.setShape(entity.getShape());
model.setAreaArea(entity.getAreaArea());
model.setAreaPerimeter(entity.getAreaPerimeter());
model.setRadius(entity.getRadius());
model.setMinHeight(entity.getMinHeight());
model.setMaxHeight(entity.getMaxHeight());
model.setRemark(entity.getRemark());
model.setCreateBy(entity.getCreateBy());
model.setCreateTime(entity.getCreateTime());
model.setUpdateBy(entity.getUpdateBy());
model.setUpdateTime(entity.getUpdateTime());
return model;
}
@Override
protected AirlineAreaEntity innerTo(AirlineArea model) {
if (model == null) {
return null;
}
AirlineAreaEntity entity = new AirlineAreaEntity();
entity.setId(model.getId());
entity.setName(model.getName());
entity.setAreaType(model.getAreaType());
entity.setStatus(model.getStatus());
entity.setPoints(model.getPoints());
entity.setShape(model.getShape());
entity.setAreaArea(model.getAreaArea());
entity.setAreaPerimeter(model.getAreaPerimeter());
entity.setRadius(model.getRadius());
entity.setMinHeight(model.getMinHeight());
entity.setMaxHeight(model.getMaxHeight());
entity.setRemark(model.getRemark());
entity.setCreateBy(model.getCreateBy());
entity.setCreateTime(model.getCreateTime());
entity.setUpdateBy(model.getUpdateBy());
entity.setUpdateTime(model.getUpdateTime());
return entity;
}
}

View File

@ -0,0 +1,43 @@
package com.ruoyi.airline.domain.convert;
import com.ruoyi.common.core.utils.BaseConvert;
import com.ruoyi.airline.domain.model.AirlineAreaGroup;
import com.ruoyi.airline.mapper.entity.AirlineAreaGroupEntity;
import java.util.List;
/**
* 空域分组Domain转换类
* 用于Domain模型和Mapper实体之间的转换
*
* @author ruoyi
* @date 2026-02-25
*/
public class AirlineAreaGroupDomainConvert extends BaseConvert<AirlineAreaGroupEntity, AirlineAreaGroup>
{
private static final AirlineAreaGroupDomainConvert INSTANCE = new AirlineAreaGroupDomainConvert();
private AirlineAreaGroupDomainConvert() {
super(AirlineAreaGroupEntity.class, AirlineAreaGroup.class);
}
public static AirlineAreaGroup from(AirlineAreaGroupEntity entity)
{
return INSTANCE.innerFrom(entity);
}
public static AirlineAreaGroupEntity to(AirlineAreaGroup model)
{
return INSTANCE.innerTo(model);
}
public static List<AirlineAreaGroup> fromList(List<AirlineAreaGroupEntity> entityList)
{
return INSTANCE.innerFromList(entityList);
}
public static List<AirlineAreaGroupEntity> toList(List<AirlineAreaGroup> modelList)
{
return INSTANCE.innerToList(modelList);
}
}

View File

@ -0,0 +1,43 @@
package com.ruoyi.airline.domain.convert;
import com.ruoyi.common.core.utils.BaseConvert;
import com.ruoyi.airline.domain.model.AirlineAreaGroupInfo;
import com.ruoyi.airline.mapper.entity.AirlineAreaGroupInfoEntity;
import java.util.List;
/**
* 空域分组明细Domain转换类
* 用于Domain模型和Mapper实体之间的转换
*
* @author ruoyi
* @date 2026-02-25
*/
public class AirlineAreaGroupInfoDomainConvert extends BaseConvert<AirlineAreaGroupInfoEntity, AirlineAreaGroupInfo>
{
private static final AirlineAreaGroupInfoDomainConvert INSTANCE = new AirlineAreaGroupInfoDomainConvert();
private AirlineAreaGroupInfoDomainConvert() {
super(AirlineAreaGroupInfoEntity.class, AirlineAreaGroupInfo.class);
}
public static AirlineAreaGroupInfo from(AirlineAreaGroupInfoEntity entity)
{
return INSTANCE.innerFrom(entity);
}
public static AirlineAreaGroupInfoEntity to(AirlineAreaGroupInfo model)
{
return INSTANCE.innerTo(model);
}
public static List<AirlineAreaGroupInfo> fromList(List<AirlineAreaGroupInfoEntity> entityList)
{
return INSTANCE.innerFromList(entityList);
}
public static List<AirlineAreaGroupInfoEntity> toList(List<AirlineAreaGroupInfo> modelList)
{
return INSTANCE.innerToList(modelList);
}
}

View File

@ -0,0 +1,86 @@
package com.ruoyi.airline.domain.convert;
import com.ruoyi.common.core.utils.BaseConvert;
import com.ruoyi.airline.domain.model.AirlineAreaTimeRule;
import com.ruoyi.airline.mapper.entity.AirlineAreaTimeRuleEntity;
import java.util.List;
/**
* 空域时间规则 Domain 转换类
* 用于 Domain 模型和 Mapper 实体之间的转换
*
* @author 拓恒
*/
public class AirlineAreaTimeRuleDomainConvert extends BaseConvert<AirlineAreaTimeRuleEntity, AirlineAreaTimeRule>
{
private static final AirlineAreaTimeRuleDomainConvert INSTANCE = new AirlineAreaTimeRuleDomainConvert();
private AirlineAreaTimeRuleDomainConvert() {
super(AirlineAreaTimeRuleEntity.class, AirlineAreaTimeRule.class);
}
public static AirlineAreaTimeRule from(AirlineAreaTimeRuleEntity entity)
{
return INSTANCE.innerFrom(entity);
}
public static AirlineAreaTimeRuleEntity to(AirlineAreaTimeRule model)
{
return INSTANCE.innerTo(model);
}
public static List<AirlineAreaTimeRule> fromList(List<AirlineAreaTimeRuleEntity> entityList)
{
return INSTANCE.innerFromList(entityList);
}
public static List<AirlineAreaTimeRuleEntity> toList(List<AirlineAreaTimeRule> modelList)
{
return INSTANCE.innerToList(modelList);
}
@Override
protected AirlineAreaTimeRule innerFrom(AirlineAreaTimeRuleEntity entity) {
if (entity == null) {
return null;
}
AirlineAreaTimeRule model = new AirlineAreaTimeRule();
model.setId(entity.getId());
model.setAreaId(entity.getAreaId());
model.setRestrictType(entity.getRestrictType());
model.setDateRange(entity.getDateRange());
model.setTimeRange(entity.getTimeRange());
model.setGranularity(entity.getGranularity());
model.setRepetFrequency(entity.getRepetFrequency());
model.setGranularityTimes(entity.getGranularityTimes());
model.setRemark(entity.getRemark());
model.setCreateBy(entity.getCreateBy());
model.setCreateTime(entity.getCreateTime());
model.setUpdateBy(entity.getUpdateBy());
model.setUpdateTime(entity.getUpdateTime());
return model;
}
@Override
protected AirlineAreaTimeRuleEntity innerTo(AirlineAreaTimeRule model) {
if (model == null) {
return null;
}
AirlineAreaTimeRuleEntity entity = new AirlineAreaTimeRuleEntity();
entity.setId(model.getId());
entity.setAreaId(model.getAreaId());
entity.setRestrictType(model.getRestrictType());
entity.setDateRange(model.getDateRange());
entity.setTimeRange(model.getTimeRange());
entity.setGranularity(model.getGranularity());
entity.setRepetFrequency(model.getRepetFrequency());
entity.setGranularityTimes(model.getGranularityTimes());
entity.setRemark(model.getRemark());
entity.setCreateBy(model.getCreateBy());
entity.setCreateTime(model.getCreateTime());
entity.setUpdateBy(model.getUpdateBy());
entity.setUpdateTime(model.getUpdateTime());
return entity;
}
}

View File

@ -0,0 +1,43 @@
package com.ruoyi.airline.domain.convert;
import com.ruoyi.common.core.utils.BaseConvert;
import com.ruoyi.airline.domain.model.AirlineData;
import com.ruoyi.airline.mapper.entity.AirlineDataEntity;
import java.util.List;
/**
* 航线数据Domain转换类
* 用于Domain模型和Mapper实体之间的转换
*
* @author ruoyi
* @date 2026-01-17
*/
public class AirlineDataDomainConvert extends BaseConvert<AirlineDataEntity, AirlineData>
{
private static final AirlineDataDomainConvert INSTANCE = new AirlineDataDomainConvert();
private AirlineDataDomainConvert() {
super(AirlineDataEntity.class, AirlineData.class);
}
public static AirlineData from(AirlineDataEntity entity)
{
return INSTANCE.innerFrom(entity);
}
public static AirlineDataEntity to(AirlineData model)
{
return INSTANCE.innerTo(model);
}
public static List<AirlineData> fromList(List<AirlineDataEntity> entityList)
{
return INSTANCE.innerFromList(entityList);
}
public static List<AirlineDataEntity> toList(List<AirlineData> modelList)
{
return INSTANCE.innerToList(modelList);
}
}

View File

@ -0,0 +1,43 @@
package com.ruoyi.airline.domain.convert;
import com.ruoyi.common.core.utils.BaseConvert;
import com.ruoyi.airline.domain.model.AirlineFile;
import com.ruoyi.airline.mapper.entity.AirlineFileEntity;
import java.util.List;
/**
* 航线文件Domain转换类
* 用于Domain模型和Mapper实体之间的转换
*
* @author ruoyi
* @date 2026-01-17
*/
public class AirlineFileDomainConvert extends BaseConvert<AirlineFileEntity, AirlineFile>
{
private static final AirlineFileDomainConvert INSTANCE = new AirlineFileDomainConvert();
private AirlineFileDomainConvert() {
super(AirlineFileEntity.class, AirlineFile.class);
}
public static AirlineFile from(AirlineFileEntity entity)
{
return INSTANCE.innerFrom(entity);
}
public static AirlineFileEntity to(AirlineFile model)
{
return INSTANCE.innerTo(model);
}
public static List<AirlineFile> fromList(List<AirlineFileEntity> entityList)
{
return INSTANCE.innerFromList(entityList);
}
public static List<AirlineFileEntity> toList(List<AirlineFile> modelList)
{
return INSTANCE.innerToList(modelList);
}
}

View File

@ -0,0 +1,44 @@
package com.ruoyi.airline.domain.convert;
import com.ruoyi.common.core.utils.BaseConvert;
import com.ruoyi.airline.domain.model.AirlineFileGroup;
import com.ruoyi.airline.mapper.entity.AirlineFileGroupEntity;
import java.util.List;
/**
* 航线文件分组Domain转换类
* 用于Domain模型和Mapper实体之间的转换
*
* @author ruoyi
* @date 2026-01-17
*/
public class AirlineFileGroupDomainConvert extends BaseConvert<AirlineFileGroupEntity, AirlineFileGroup>
{
private static final AirlineFileGroupDomainConvert INSTANCE = new AirlineFileGroupDomainConvert();
private AirlineFileGroupDomainConvert() {
super(AirlineFileGroupEntity.class, AirlineFileGroup.class);
}
public static AirlineFileGroup from(AirlineFileGroupEntity entity)
{
return INSTANCE.innerFrom(entity);
}
public static AirlineFileGroupEntity to(AirlineFileGroup model)
{
return INSTANCE.innerTo(model);
}
public static List<AirlineFileGroup> fromList(List<AirlineFileGroupEntity> entityList)
{
return INSTANCE.innerFromList(entityList);
}
public static List<AirlineFileGroupEntity> toList(List<AirlineFileGroup> modelList)
{
return INSTANCE.innerToList(modelList);
}
}

View File

@ -0,0 +1,44 @@
package com.ruoyi.airline.domain.convert;
import com.ruoyi.common.core.utils.BaseConvert;
import com.ruoyi.airline.domain.model.AirlineFileGroupInfo;
import com.ruoyi.airline.mapper.entity.AirlineFileGroupInfoEntity;
import java.util.List;
/**
* 航线文件Domain转换类
* 用于Domain模型和Mapper实体之间的转换
*
* @author ruoyi
* @date 2026-01-17
*/
public class AirlineFileGroupInfoDomainConvert extends BaseConvert<AirlineFileGroupInfoEntity, AirlineFileGroupInfo>
{
private static final AirlineFileGroupInfoDomainConvert INSTANCE = new AirlineFileGroupInfoDomainConvert();
private AirlineFileGroupInfoDomainConvert() {
super(AirlineFileGroupInfoEntity.class, AirlineFileGroupInfo.class);
}
public static AirlineFileGroupInfo from(AirlineFileGroupInfoEntity entity)
{
return INSTANCE.innerFrom(entity);
}
public static AirlineFileGroupInfoEntity to(AirlineFileGroupInfo model)
{
return INSTANCE.innerTo(model);
}
public static List<AirlineFileGroupInfo> fromList(List<AirlineFileGroupInfoEntity> entityList)
{
return INSTANCE.innerFromList(entityList);
}
public static List<AirlineFileGroupInfoEntity> toList(List<AirlineFileGroupInfo> modelList)
{
return INSTANCE.innerToList(modelList);
}
}

View File

@ -0,0 +1,105 @@
package com.ruoyi.airline.domain.convert;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.common.core.utils.BaseConvert;
import com.ruoyi.airline.domain.model.AirlineMarker;
import com.ruoyi.airline.mapper.entity.AirlineMarkerEntity;
import java.util.List;
/**
* 标注Domain转换类
* 用于Domain模型和Mapper实体之间的转换
*
* @author 拓恒
*/
public class AirlineMarkerDomainConvert extends BaseConvert<AirlineMarkerEntity, AirlineMarker>
{
private static final AirlineMarkerDomainConvert INSTANCE = new AirlineMarkerDomainConvert();
private static final ObjectMapper objectMapper = new ObjectMapper();
private AirlineMarkerDomainConvert() {
super(AirlineMarkerEntity.class, AirlineMarker.class);
}
public static AirlineMarker from(AirlineMarkerEntity entity) {
return INSTANCE.innerFrom(entity);
}
public static AirlineMarkerEntity to(AirlineMarker model) {
return INSTANCE.innerTo(model);
}
public static List<AirlineMarker> fromList(List<AirlineMarkerEntity> entityList) {
return INSTANCE.innerFromList(entityList);
}
public static List<AirlineMarkerEntity> toList(List<AirlineMarker> modelList) {
return INSTANCE.innerToList(modelList);
}
@Override
protected AirlineMarker innerFrom(AirlineMarkerEntity entity) {
if (entity == null) {
return null;
}
AirlineMarker model = new AirlineMarker();
model.setId(entity.getId());
model.setMarkerName(entity.getMarkerName());
model.setMarkerType(entity.getMarkerType());
model.setStatus(entity.getStatus());
model.setColor(entity.getColor());
model.setIcon(entity.getIcon());
model.setFontSize(entity.getFontSize());
// 从JSON字符串转换为List<PointInfo>
if (entity.getCoordinates() != null) {
try {
model.setCoordinates(objectMapper.readValue(entity.getCoordinates(), objectMapper.getTypeFactory().constructCollectionType(List.class, AirlineMarker.PointInfo.class)));
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
model.setDescription(entity.getDescription());
model.setCreateBy(entity.getCreateBy());
model.setCreateTime(entity.getCreateTime());
model.setUpdateBy(entity.getUpdateBy());
model.setUpdateTime(entity.getUpdateTime());
model.setRemark(entity.getRemark());
return model;
}
@Override
protected AirlineMarkerEntity innerTo(AirlineMarker model) {
if (model == null) {
return null;
}
AirlineMarkerEntity entity = new AirlineMarkerEntity();
entity.setId(model.getId());
entity.setMarkerName(model.getMarkerName());
entity.setMarkerType(model.getMarkerType());
entity.setStatus(model.getStatus());
entity.setColor(model.getColor());
entity.setIcon(model.getIcon());
entity.setFontSize(model.getFontSize());
// 从List<PointInfo>转换为JSON字符串
if (model.getCoordinates() != null) {
try {
entity.setCoordinates(objectMapper.writeValueAsString(model.getCoordinates()));
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
entity.setDescription(model.getDescription());
entity.setCreateBy(model.getCreateBy());
entity.setCreateTime(model.getCreateTime());
entity.setUpdateBy(model.getUpdateBy());
entity.setUpdateTime(model.getUpdateTime());
entity.setRemark(model.getRemark());
return entity;
}
}

View File

@ -0,0 +1,42 @@
package com.ruoyi.airline.domain.convert;
import com.ruoyi.common.core.utils.BaseConvert;
import com.ruoyi.airline.domain.model.AirlineMarkerGroup;
import com.ruoyi.airline.mapper.entity.AirlineMarkerGroupEntity;
import java.util.List;
/**
* 标注分组Domain转换类
* 用于Domain模型和Mapper实体之间的转换
*
* @author 拓恒
*/
public class AirlineMarkerGroupDomainConvert extends BaseConvert<AirlineMarkerGroupEntity, AirlineMarkerGroup>
{
private static final AirlineMarkerGroupDomainConvert INSTANCE = new AirlineMarkerGroupDomainConvert();
private AirlineMarkerGroupDomainConvert() {
super(AirlineMarkerGroupEntity.class, AirlineMarkerGroup.class);
}
public static AirlineMarkerGroup from(AirlineMarkerGroupEntity entity)
{
return INSTANCE.innerFrom(entity);
}
public static AirlineMarkerGroupEntity to(AirlineMarkerGroup model)
{
return INSTANCE.innerTo(model);
}
public static List<AirlineMarkerGroup> fromList(List<AirlineMarkerGroupEntity> entityList)
{
return INSTANCE.innerFromList(entityList);
}
public static List<AirlineMarkerGroupEntity> toList(List<AirlineMarkerGroup> modelList)
{
return INSTANCE.innerToList(modelList);
}
}

View File

@ -0,0 +1,42 @@
package com.ruoyi.airline.domain.convert;
import com.ruoyi.common.core.utils.BaseConvert;
import com.ruoyi.airline.domain.model.AirlineMarkerGroupInfo;
import com.ruoyi.airline.mapper.entity.AirlineMarkerGroupInfoEntity;
import java.util.List;
/**
* 标注分组明细Domain转换类
* 用于Domain模型和Mapper实体之间的转换
*
* @author 拓恒
*/
public class AirlineMarkerGroupInfoDomainConvert extends BaseConvert<AirlineMarkerGroupInfoEntity, AirlineMarkerGroupInfo>
{
private static final AirlineMarkerGroupInfoDomainConvert INSTANCE = new AirlineMarkerGroupInfoDomainConvert();
private AirlineMarkerGroupInfoDomainConvert() {
super(AirlineMarkerGroupInfoEntity.class, AirlineMarkerGroupInfo.class);
}
public static AirlineMarkerGroupInfo from(AirlineMarkerGroupInfoEntity entity)
{
return INSTANCE.innerFrom(entity);
}
public static AirlineMarkerGroupInfoEntity to(AirlineMarkerGroupInfo model)
{
return INSTANCE.innerTo(model);
}
public static List<AirlineMarkerGroupInfo> fromList(List<AirlineMarkerGroupInfoEntity> entityList)
{
return INSTANCE.innerFromList(entityList);
}
public static List<AirlineMarkerGroupInfoEntity> toList(List<AirlineMarkerGroupInfo> modelList)
{
return INSTANCE.innerToList(modelList);
}
}

View File

@ -1,11 +1,10 @@
package com.ruoyi.airline.domain.convert;
import com.ruoyi.common.core.utils.BaseConvert;
import com.ruoyi.airline.domain.model.AirlineTemp;
import com.ruoyi.airline.mapper.entity.AirlineTempEntity;
import org.springframework.beans.BeanUtils;
import java.util.List;
import java.util.stream.Collectors;
/**
* 航线临时表Domain层转换器
@ -14,45 +13,31 @@ import java.util.stream.Collectors;
* @author ruoyi
* @date 2026-01-17
*/
public class AirlineTempDomainConvert
public class AirlineTempDomainConvert extends BaseConvert<AirlineTempEntity, AirlineTemp>
{
/**
* Entity Model
*/
public static AirlineTemp toModel(AirlineTempEntity entity)
{
if (entity == null)
{
return null;
}
AirlineTemp model = new AirlineTemp();
BeanUtils.copyProperties(entity, model);
return model;
private static final AirlineTempDomainConvert INSTANCE = new AirlineTempDomainConvert();
private AirlineTempDomainConvert() {
super(AirlineTempEntity.class, AirlineTemp.class);
}
/**
* Model Entity
*/
public static AirlineTempEntity toEntity(AirlineTemp model)
public static AirlineTemp from(AirlineTempEntity entity)
{
if (model == null)
{
return null;
}
AirlineTempEntity entity = new AirlineTempEntity();
BeanUtils.copyProperties(model, entity);
return entity;
return INSTANCE.innerFrom(entity);
}
/**
* Entity List Model List
*/
public static List<AirlineTemp> toModelList(List<AirlineTempEntity> entityList)
public static AirlineTempEntity to(AirlineTemp model)
{
if (entityList == null)
{
return null;
}
return entityList.stream().map(AirlineTempDomainConvert::toModel).collect(Collectors.toList());
return INSTANCE.innerTo(model);
}
public static List<AirlineTemp> fromList(List<AirlineTempEntity> entityList)
{
return INSTANCE.innerFromList(entityList);
}
public static List<AirlineTempEntity> toList(List<AirlineTemp> modelList)
{
return INSTANCE.innerToList(modelList);
}
}

View File

@ -0,0 +1,32 @@
package com.ruoyi.airline.domain.enums;
import lombok.Getter;
/**
* @Author: 吴彬
* @CreateTime: 2023-06-29 15:24
* @Description: 航线文件类型枚举
* @Version: 1.0
*/
public enum AirlineFileTypeEnum {
NORMAL(1,"普通航线"),
POINT(2,"指点"),
PLANE(3,"指面"),
;
AirlineFileTypeEnum(int code, String description){
this.code = code;
this.description = description;
}
@Getter
private int code;
@Getter
private String description;
}

View File

@ -0,0 +1,69 @@
package com.ruoyi.airline.domain.impl;
import com.ruoyi.airline.domain.api.IAirlineAreaDomain;
import com.ruoyi.airline.domain.convert.AirlineAreaDomainConvert;
import com.ruoyi.airline.domain.model.AirlineArea;
import com.ruoyi.airline.mapper.AirlineAreaMapper;
import com.ruoyi.airline.mapper.entity.AirlineAreaEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 空域管理
*
* @author 拓恒
*/
@Component
public class AirlineAreaDomainImpl implements IAirlineAreaDomain {
@Autowired
private AirlineAreaMapper airlineAreaMapper;
@Override
public int insertArea(AirlineArea model) {
AirlineAreaEntity entity = AirlineAreaDomainConvert.to(model);
int result = airlineAreaMapper.insertArea(entity);
// 将自增的 ID 设置回 model 对象
if (result > 0 && entity.getId() != null) {
model.setId(entity.getId());
}
return result;
}
@Override
public int updateArea(AirlineArea model) {
AirlineAreaEntity entity = AirlineAreaDomainConvert.to(model);
return airlineAreaMapper.updateArea(entity);
}
@Override
public int deleteArea(AirlineArea model) {
AirlineAreaEntity entity = AirlineAreaDomainConvert.to(model);
return airlineAreaMapper.deleteArea(entity);
}
@Override
public List<AirlineArea> selectAreaList(AirlineArea model) {
AirlineAreaEntity entity = AirlineAreaDomainConvert.to(model);
return AirlineAreaDomainConvert.fromList(airlineAreaMapper.selectAreaList(entity));
}
@Override
public AirlineArea selectAreaById(Long id) {
AirlineAreaEntity entity = airlineAreaMapper.selectAreaById(id);
return AirlineAreaDomainConvert.from(entity);
}
@Override
public List<AirlineArea> selectAreaListByIds(List<Long> ids) {
return AirlineAreaDomainConvert.fromList(airlineAreaMapper.selectAreaListByIds(ids));
}
@Override
public List<AirlineArea> selectAreaListByUserId(AirlineArea model) {
AirlineAreaEntity entity = AirlineAreaDomainConvert.to(model);
return AirlineAreaDomainConvert.fromList(airlineAreaMapper.selectAreaListByUserId(entity));
}
}

View File

@ -0,0 +1,64 @@
package com.ruoyi.airline.domain.impl;
import com.ruoyi.airline.domain.api.IAirlineAreaGroupDomain;
import com.ruoyi.airline.domain.convert.AirlineAreaGroupDomainConvert;
import com.ruoyi.airline.domain.convert.AirlineAreaDomainConvert;
import com.ruoyi.airline.domain.model.AirlineArea;
import com.ruoyi.airline.domain.model.AirlineAreaGroup;
import com.ruoyi.airline.mapper.AirlineAreaGroupMapper;
import com.ruoyi.airline.mapper.entity.AirlineAreaEntity;
import com.ruoyi.airline.mapper.entity.AirlineAreaGroupEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 空域分组管理
*
* @author 拓恒
*/
@Component
public class AirlineAreaGroupDomainImpl implements IAirlineAreaGroupDomain {
@Autowired
private AirlineAreaGroupMapper airlineAreaGroupMapper;
@Override
public int deletegroup(AirlineAreaGroup model) {
model.setDelFlag(1L);
AirlineAreaGroupEntity entity = AirlineAreaGroupDomainConvert.to(model);
return airlineAreaGroupMapper.deletegroup(entity);
}
@Override
public boolean checkgroupNameUnique(AirlineAreaGroup model) {
AirlineAreaGroupEntity entity = AirlineAreaGroupDomainConvert.to(model);
return airlineAreaGroupMapper.checkgroupNameUnique(entity) > 0;
}
@Override
public int updateGroup(AirlineAreaGroup model) {
AirlineAreaGroupEntity entity = AirlineAreaGroupDomainConvert.to(model);
return airlineAreaGroupMapper.updateGroup(entity);
}
@Override
public int insertGroup(AirlineAreaGroup model) {
AirlineAreaGroupEntity entity = AirlineAreaGroupDomainConvert.to(model);
return airlineAreaGroupMapper.insertGroup(entity);
}
@Override
public List<AirlineAreaGroup> selectGroupList(AirlineAreaGroup model) {
AirlineAreaGroupEntity entity = AirlineAreaGroupDomainConvert.to(model);
return AirlineAreaGroupDomainConvert.fromList(airlineAreaGroupMapper.selectGroupList(entity));
}
@Override
public List<AirlineArea> selectAirlineListByUserId(AirlineArea model) {
// 这里需要在 AirlineAreaGroupMapper 中添加对应的方法
// 暂时返回空列表后续需要实现
return null;
}
}

View File

@ -0,0 +1,56 @@
package com.ruoyi.airline.domain.impl;
import com.ruoyi.airline.domain.api.IAirlineAreaGroupInfoDomain;
import com.ruoyi.airline.domain.convert.AirlineAreaGroupInfoDomainConvert;
import com.ruoyi.airline.domain.model.AirlineAreaGroupInfo;
import com.ruoyi.airline.mapper.AirlineAreaGroupInfoMapper;
import com.ruoyi.airline.mapper.entity.AirlineAreaGroupInfoEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 空域分组明细管理
*
* @author 拓恒
*/
@Component
public class AirlineAreaGroupInfoDomainImpl implements IAirlineAreaGroupInfoDomain {
@Autowired
private AirlineAreaGroupInfoMapper airlineAreaGroupInfoMapper;
@Override
public int insertGroupInfo(AirlineAreaGroupInfo model) {
model.setDelFlag(0L);
AirlineAreaGroupInfoEntity entity = AirlineAreaGroupInfoDomainConvert.to(model);
return airlineAreaGroupInfoMapper.insertGroupInfo(entity);
}
@Override
public int deleteGroupInfo(AirlineAreaGroupInfo model) {
model.setDelFlag(1L);
AirlineAreaGroupInfoEntity entity = AirlineAreaGroupInfoDomainConvert.to(model);
return airlineAreaGroupInfoMapper.deleteGroupInfo(entity);
}
@Override
public List<AirlineAreaGroupInfo> selectGroupInfoList(AirlineAreaGroupInfo model) {
AirlineAreaGroupInfoEntity entity = AirlineAreaGroupInfoDomainConvert.to(model);
return AirlineAreaGroupInfoDomainConvert.fromList(airlineAreaGroupInfoMapper.selectGroupInfoList(entity));
}
@Override
public List<Long> selectAreaIdsByGroupId(Long groupId) {
return airlineAreaGroupInfoMapper.selectAreaIdsByGroupId(groupId);
}
@Override
public List<AirlineAreaGroupInfo> selectGroupInfoListById(Long groupId) {
AirlineAreaGroupInfo model = new AirlineAreaGroupInfo();
model.setGroupId(groupId);
AirlineAreaGroupInfoEntity entity = AirlineAreaGroupInfoDomainConvert.to(model);
return AirlineAreaGroupInfoDomainConvert.fromList(airlineAreaGroupInfoMapper.selectGroupInfoList(entity));
}
}

View File

@ -0,0 +1,68 @@
package com.ruoyi.airline.domain.impl;
import com.ruoyi.airline.domain.api.IAirlineAreaTimeRuleDomain;
import com.ruoyi.airline.domain.convert.AirlineAreaTimeRuleDomainConvert;
import com.ruoyi.airline.domain.model.AirlineAreaTimeRule;
import com.ruoyi.airline.mapper.AirlineAreaTimeRuleMapper;
import com.ruoyi.airline.mapper.entity.AirlineAreaTimeRuleEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 空域时间规则领域实现
*
* @author 拓恒
*/
@Component
public class AirlineAreaTimeRuleDomainImpl implements IAirlineAreaTimeRuleDomain {
@Autowired
private AirlineAreaTimeRuleMapper airlineAreaTimeRuleMapper;
@Override
public int insertTimeRule(AirlineAreaTimeRule model) {
AirlineAreaTimeRuleEntity entity = AirlineAreaTimeRuleDomainConvert.to(model);
int result = airlineAreaTimeRuleMapper.insertTimeRule(entity);
// 将自增的 ID 设置回 model 对象
if (result > 0 && entity.getId() != null) {
model.setId(entity.getId());
}
return result;
}
@Override
public int updateTimeRule(AirlineAreaTimeRule model) {
AirlineAreaTimeRuleEntity entity = AirlineAreaTimeRuleDomainConvert.to(model);
return airlineAreaTimeRuleMapper.updateTimeRule(entity);
}
@Override
public int deleteTimeRule(AirlineAreaTimeRule model) {
AirlineAreaTimeRuleEntity entity = AirlineAreaTimeRuleDomainConvert.to(model);
return airlineAreaTimeRuleMapper.deleteTimeRule(entity);
}
@Override
public List<AirlineAreaTimeRule> selectTimeRuleList(AirlineAreaTimeRule model) {
AirlineAreaTimeRuleEntity entity = AirlineAreaTimeRuleDomainConvert.to(model);
return AirlineAreaTimeRuleDomainConvert.fromList(airlineAreaTimeRuleMapper.selectTimeRuleList(entity));
}
@Override
public AirlineAreaTimeRule selectTimeRuleById(Long id) {
AirlineAreaTimeRuleEntity entity = airlineAreaTimeRuleMapper.selectTimeRuleById(id);
return AirlineAreaTimeRuleDomainConvert.from(entity);
}
@Override
public List<AirlineAreaTimeRule> selectTimeRuleListByAreaId(Long areaId) {
return AirlineAreaTimeRuleDomainConvert.fromList(airlineAreaTimeRuleMapper.selectTimeRuleListByAreaId(areaId));
}
@Override
public int deleteTimeRuleByAreaId(Long areaId) {
return airlineAreaTimeRuleMapper.deleteTimeRuleByAreaId(areaId);
}
}

View File

@ -0,0 +1,53 @@
package com.ruoyi.airline.domain.impl;
import com.ruoyi.airline.domain.api.IAirlineDataDomain;
import com.ruoyi.airline.domain.model.AirlineData;
import com.ruoyi.airline.mapper.AirlineDataMapper;
import com.ruoyi.airline.mapper.entity.AirlineDataEntity;
import com.ruoyi.airline.domain.convert.AirlineDataDomainConvert;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 航线数据Domain实现类
*
* @author ruoyi
* @date 2026-01-17
*/
@Component
public class AirlineDataDomainImpl implements IAirlineDataDomain
{
@Autowired
private AirlineDataMapper airlineDataMapper;
/**
* 查询航线数据列表
*
* @param airlineData 航线数据
* @return 航线数据集合
*/
@Override
public List<AirlineData> selectAirlineDataList(AirlineData airlineData)
{
AirlineDataEntity entity = AirlineDataDomainConvert.to(airlineData);
List<AirlineDataEntity> entityList = airlineDataMapper.selectAirlineDataList(entity);
return AirlineDataDomainConvert.fromList(entityList);
}
/**
* 根据ID查询航线数据
*
* @param id 主键ID
* @return 航线数据
*/
@Override
public AirlineData selectAirlineDataById(Long id)
{
AirlineDataEntity entity = airlineDataMapper.selectAirlineDataById(id);
return AirlineDataDomainConvert.from(entity);
}
}

View File

@ -0,0 +1,54 @@
package com.ruoyi.airline.domain.impl;
import com.ruoyi.airline.domain.api.IAirlineFileDomain;
import com.ruoyi.airline.domain.convert.AirlineFileDomainConvert;
import com.ruoyi.airline.domain.model.AirlineFile;
import com.ruoyi.airline.mapper.AirlineFileMapper;
import com.ruoyi.airline.mapper.entity.AirlineFileEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 航线文件领域实现类
*
* @author ruoyi
* @date 2026-01-17
*/
@Component
public class AirlineFileDomainImpl implements IAirlineFileDomain {
@Autowired
private AirlineFileMapper airlineFileMapper;
@Override
public List<AirlineFile> selectFileListByIds(List<Long> ids) {
return AirlineFileDomainConvert.fromList(airlineFileMapper.selectFileListByIds(ids));
}
@Override
public Long save(AirlineFile model) {
AirlineFileEntity entity = AirlineFileDomainConvert.to(model);
airlineFileMapper.save(entity);
return entity.getId();
}
@Override
public List<AirlineFile> selectFileNameLike(String name) {
return AirlineFileDomainConvert.fromList(airlineFileMapper.selectFileNameLike(name));
}
@Override
public List<AirlineFile> selectFileNameLikeByGroupId(String name, Long groupId) {
return AirlineFileDomainConvert.fromList(airlineFileMapper.selectFileNameLikeByGroupId(groupId, name));
}
@Override
public Long update(AirlineFile model) {
AirlineFileEntity entity = AirlineFileDomainConvert.to(model);
return airlineFileMapper.update(entity);
}
}

View File

@ -0,0 +1,63 @@
package com.ruoyi.airline.domain.impl;
import com.ruoyi.airline.domain.api.IAirlineFileGroupDomain;
import com.ruoyi.airline.domain.convert.AirlineFileGroupDomainConvert;
import com.ruoyi.airline.domain.convert.AirlineFileDomainConvert;
import com.ruoyi.airline.domain.model.AirlineFile;
import com.ruoyi.airline.domain.model.AirlineFileGroup;
import com.ruoyi.airline.mapper.AirlineFileGroupMapper;
import com.ruoyi.airline.mapper.entity.AirlineFileEntity;
import com.ruoyi.airline.mapper.entity.AirlineFileGroupEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 航线分组
*
* @author 拓恒
*/
@Component
public class AirlineFileGroupDomainImpl implements IAirlineFileGroupDomain {
@Autowired
private AirlineFileGroupMapper airlineFileGroupMapper;
@Override
public int deletegroup(AirlineFileGroup model) {
model.setDelFlag(1L);
AirlineFileGroupEntity entity = AirlineFileGroupDomainConvert.to(model);
return airlineFileGroupMapper.deletegroup(entity);
}
@Override
public boolean checkgroupNameUnique(AirlineFileGroup model) {
AirlineFileGroupEntity entity = AirlineFileGroupDomainConvert.to(model);
return airlineFileGroupMapper.checkgroupNameUnique(entity) > 0;
}
@Override
public int updateGroup(AirlineFileGroup model) {
AirlineFileGroupEntity entity = AirlineFileGroupDomainConvert.to(model);
return airlineFileGroupMapper.updateGroup(entity);
}
@Override
public int insertGroup(AirlineFileGroup model) {
AirlineFileGroupEntity entity = AirlineFileGroupDomainConvert.to(model);
return airlineFileGroupMapper.insertGroup(entity);
}
@Override
public List<AirlineFileGroup> selectGroupList(AirlineFileGroup model) {
AirlineFileGroupEntity entity = AirlineFileGroupDomainConvert.to(model);
return AirlineFileGroupDomainConvert.fromList(airlineFileGroupMapper.selectGroupList(entity));
}
@Override
public List<AirlineFile> selectAirlineListByUserId(AirlineFile model) {
AirlineFileEntity entity = AirlineFileDomainConvert.to(model);
return AirlineFileDomainConvert.fromList(airlineFileGroupMapper.selectAirlineListByUserId(entity));
}
}

View File

@ -0,0 +1,71 @@
package com.ruoyi.airline.domain.impl;
import com.ruoyi.airline.domain.api.IAirlineFileGroupInfoDomain;
import com.ruoyi.airline.domain.convert.AirlineFileGroupInfoDomainConvert;
import com.ruoyi.airline.domain.model.AirlineFileGroupInfo;
import com.ruoyi.airline.mapper.AirlineFileGroupInfoMapper;
import com.ruoyi.airline.mapper.entity.AirlineFileGroupInfoEntity;
import com.ruoyi.airline.service.dto.AirlineFileGroupInfoDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 航线分组明细
*
* @author 拓恒
*/
@Component
public class AirlineFileGroupInfoDomainImpl implements IAirlineFileGroupInfoDomain {
@Autowired
private AirlineFileGroupInfoMapper airlineFileGroupInfoMapper;
@Override
public List<AirlineFileGroupInfo> selectGroupInfoListById(Long groupId) {
AirlineFileGroupInfo dto = new AirlineFileGroupInfo();
dto.setGroupId(groupId);
AirlineFileGroupInfoEntity Entity = AirlineFileGroupInfoDomainConvert.to(dto);
List<AirlineFileGroupInfoEntity> entities = airlineFileGroupInfoMapper.selectGroupList(Entity);
return AirlineFileGroupInfoDomainConvert.fromList(entities);
}
@Override
public Long deleteGroupInfo(AirlineFileGroupInfo model) {
model.setDelFlag(1L);
AirlineFileGroupInfoEntity Entity = AirlineFileGroupInfoDomainConvert.to(model);
return airlineFileGroupInfoMapper.deleteGroupInfo(Entity);
}
@Override
public Long save(AirlineFileGroupInfo model) {
AirlineFileGroupInfoEntity Entity = AirlineFileGroupInfoDomainConvert.to(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.to(model);
int count = airlineFileGroupInfoMapper.countByGroupIdAndAirlineId(entity);
return count > 0;
}
@Override
public Long moveGroupInfo(Long oldGroupId, Long newGroupId, Long airlineId) {
return airlineFileGroupInfoMapper.updateGroupId(oldGroupId, newGroupId, airlineId);
}
@Override
public Long deleteGroupInfoBatch(List<Long> airLineIds, Long groupId) {
return airlineFileGroupInfoMapper.deleteGroupInfoBatch(airLineIds, groupId);
}
@Override
public Long batchMoveGroupInfo(Long oldGroupId, Long newGroupId, List<Long> airLineIds) {
return airlineFileGroupInfoMapper.batchUpdateGroupId(oldGroupId, newGroupId, airLineIds);
}
}

View File

@ -0,0 +1,87 @@
package com.ruoyi.airline.domain.impl;
import com.ruoyi.airline.domain.api.IAirlineMarkerDomain;
import com.ruoyi.airline.domain.convert.AirlineMarkerDomainConvert;
import com.ruoyi.airline.domain.model.AirlineMarker;
import com.ruoyi.airline.mapper.AirlineMarkerMapper;
import com.ruoyi.airline.mapper.entity.AirlineMarkerEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 标注管理
*
* @author 拓恒
*/
@Component
public class AirlineMarkerDomainImpl implements IAirlineMarkerDomain {
@Autowired
private AirlineMarkerMapper airlineMarkerMapper;
@Override
public int insertMarker(AirlineMarker model) {
AirlineMarkerEntity entity = AirlineMarkerDomainConvert.to(model);
int result = airlineMarkerMapper.insertMarker(entity);
if (result > 0 && entity.getId() != null) {
model.setId(entity.getId());
}
return result;
}
@Override
public int updateMarker(AirlineMarker model) {
AirlineMarkerEntity entity = AirlineMarkerDomainConvert.to(model);
return airlineMarkerMapper.updateMarker(entity);
}
@Override
public int deleteMarker(AirlineMarker model) {
AirlineMarkerEntity entity = AirlineMarkerDomainConvert.to(model);
return airlineMarkerMapper.deleteMarker(entity);
}
@Override
public List<AirlineMarker> selectMarkerList(AirlineMarker model) {
AirlineMarkerEntity entity = AirlineMarkerDomainConvert.to(model);
return AirlineMarkerDomainConvert.fromList(airlineMarkerMapper.selectMarkerList(entity));
}
@Override
public AirlineMarker selectMarkerById(Long id) {
AirlineMarkerEntity entity = airlineMarkerMapper.selectMarkerById(id);
return AirlineMarkerDomainConvert.from(entity);
}
@Override
public AirlineMarker selectMarker(AirlineMarker marker) {
if (marker == null) {
return null;
}
AirlineMarkerEntity entity = AirlineMarkerDomainConvert.to(marker);
List<AirlineMarkerEntity> list = airlineMarkerMapper.selectMarkerList(entity);
if (list != null && !list.isEmpty()) {
return AirlineMarkerDomainConvert.from(list.get(0));
}
return null;
}
@Override
public List<AirlineMarker> selectMarkerListByIds(List<Long> ids) {
return AirlineMarkerDomainConvert.fromList(airlineMarkerMapper.selectMarkerListByIds(ids));
}
@Override
public List<AirlineMarker> selectMarkerListByUserId(AirlineMarker model) {
AirlineMarkerEntity entity = AirlineMarkerDomainConvert.to(model);
return AirlineMarkerDomainConvert.fromList(airlineMarkerMapper.selectMarkerListByUserId(entity));
}
@Override
public List<AirlineMarker> selectAllAvailableMarkers(AirlineMarker model) {
AirlineMarkerEntity entity = AirlineMarkerDomainConvert.to(model);
return AirlineMarkerDomainConvert.fromList(airlineMarkerMapper.selectAllAvailableMarkers(entity));
}
}

View File

@ -0,0 +1,70 @@
package com.ruoyi.airline.domain.impl;
import com.ruoyi.airline.domain.api.IAirlineMarkerGroupDomain;
import com.ruoyi.airline.domain.convert.AirlineMarkerGroupDomainConvert;
import com.ruoyi.airline.domain.convert.AirlineMarkerDomainConvert;
import com.ruoyi.airline.domain.model.AirlineMarker;
import com.ruoyi.airline.domain.model.AirlineMarkerGroup;
import com.ruoyi.airline.mapper.AirlineMarkerGroupMapper;
import com.ruoyi.airline.mapper.entity.AirlineMarkerEntity;
import com.ruoyi.airline.mapper.entity.AirlineMarkerGroupEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 标注分组管理
*
* @author 拓恒
*/
@Component
public class AirlineMarkerGroupDomainImpl implements IAirlineMarkerGroupDomain {
@Autowired
private AirlineMarkerGroupMapper airlineMarkerGroupMapper;
@Override
public int deleteGroup(AirlineMarkerGroup model) {
model.setDelFlag(1L);
AirlineMarkerGroupEntity entity = AirlineMarkerGroupDomainConvert.to(model);
return airlineMarkerGroupMapper.deleteGroup(entity);
}
@Override
public boolean checkGroupNameUnique(AirlineMarkerGroup model) {
AirlineMarkerGroupEntity entity = AirlineMarkerGroupDomainConvert.to(model);
return airlineMarkerGroupMapper.checkGroupNameUnique(entity) > 0;
}
@Override
public int updateGroup(AirlineMarkerGroup model) {
AirlineMarkerGroupEntity entity = AirlineMarkerGroupDomainConvert.to(model);
return airlineMarkerGroupMapper.updateGroup(entity);
}
@Override
public int insertGroup(AirlineMarkerGroup model) {
AirlineMarkerGroupEntity entity = AirlineMarkerGroupDomainConvert.to(model);
return airlineMarkerGroupMapper.insertGroup(entity);
}
@Override
public List<AirlineMarkerGroup> selectGroupList(AirlineMarkerGroup model) {
AirlineMarkerGroupEntity entity = AirlineMarkerGroupDomainConvert.to(model);
return AirlineMarkerGroupDomainConvert.fromList(airlineMarkerGroupMapper.selectGroupList(entity));
}
@Override
public AirlineMarkerGroup selectGroupById(Long id) {
AirlineMarkerGroupEntity entity = airlineMarkerGroupMapper.selectGroupById(id);
return AirlineMarkerGroupDomainConvert.from(entity);
}
@Override
public List<AirlineMarker> selectMarkerListByUserId(AirlineMarker model) {
// 这里需要在 AirlineMarkerGroupMapper 中添加对应的方法
// 暂时返回空列表后续需要实现
return null;
}
}

View File

@ -0,0 +1,64 @@
package com.ruoyi.airline.domain.impl;
import com.ruoyi.airline.domain.api.IAirlineMarkerGroupInfoDomain;
import com.ruoyi.airline.domain.convert.AirlineMarkerGroupInfoDomainConvert;
import com.ruoyi.airline.domain.model.AirlineMarkerGroupInfo;
import com.ruoyi.airline.mapper.AirlineMarkerGroupInfoMapper;
import com.ruoyi.airline.mapper.entity.AirlineMarkerGroupInfoEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 标注分组明细管理
*
* @author 拓恒
*/
@Component
public class AirlineMarkerGroupInfoDomainImpl implements IAirlineMarkerGroupInfoDomain {
@Autowired
private AirlineMarkerGroupInfoMapper airlineMarkerGroupInfoMapper;
@Override
public int insertMarkerGroupInfo(AirlineMarkerGroupInfo model) {
model.setDelFlag(0L);
AirlineMarkerGroupInfoEntity entity = AirlineMarkerGroupInfoDomainConvert.to(model);
return airlineMarkerGroupInfoMapper.insertMarkerGroupInfo(entity);
}
@Override
public int deleteMarkerGroupInfo(AirlineMarkerGroupInfo model) {
model.setDelFlag(1L);
AirlineMarkerGroupInfoEntity entity = AirlineMarkerGroupInfoDomainConvert.to(model);
return airlineMarkerGroupInfoMapper.deleteMarkerGroupInfo(entity);
}
@Override
public List<AirlineMarkerGroupInfo> selectMarkerGroupInfoList(AirlineMarkerGroupInfo model) {
AirlineMarkerGroupInfoEntity entity = AirlineMarkerGroupInfoDomainConvert.to(model);
return AirlineMarkerGroupInfoDomainConvert.fromList(airlineMarkerGroupInfoMapper.selectMarkerGroupInfoList(entity));
}
@Override
public List<Long> selectMarkerIdsByGroupId(Long groupId) {
return airlineMarkerGroupInfoMapper.selectMarkerIdsByGroupId(groupId);
}
@Override
public int deleteByGroupId(Long groupId) {
return airlineMarkerGroupInfoMapper.deleteByGroupId(groupId);
}
@Override
public int deleteByMarkerId(Long markerId) {
return airlineMarkerGroupInfoMapper.deleteByMarkerId(markerId);
}
@Override
public int batchInsertMarkerGroupInfo(List<AirlineMarkerGroupInfo> list) {
List<AirlineMarkerGroupInfoEntity> entityList = AirlineMarkerGroupInfoDomainConvert.toList(list);
return airlineMarkerGroupInfoMapper.batchInsertMarkerGroupInfo(entityList);
}
}

View File

@ -25,15 +25,15 @@ public class AirlineTempDomainImpl implements IAirlineTempDomain
@Override
public List<AirlineTemp> selectAirlineTempList(AirlineTemp airlineTempModel)
{
AirlineTempEntity entity = AirlineTempDomainConvert.toEntity(airlineTempModel);
AirlineTempEntity entity = AirlineTempDomainConvert.to(airlineTempModel);
List<AirlineTempEntity> entityList = airlineTempMapper.selectAirlineTempList(entity);
return AirlineTempDomainConvert.toModelList(entityList);
return AirlineTempDomainConvert.fromList(entityList);
}
@Override
public AirlineTemp selectAirlineTempById(String id)
{
AirlineTempEntity entity = airlineTempMapper.selectAirlineTempById(id);
return AirlineTempDomainConvert.toModel(entity);
return AirlineTempDomainConvert.from(entity);
}
}

View File

@ -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;
}

View File

@ -0,0 +1,95 @@
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;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 空域
*
* @author 拓恒
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AirlineArea extends ExBaseEntity {
/**
* 主键ID
*/
private Long id;
/**
* 空域名称
*/
private String name;
/**
* 空域类型
*/
private String areaType;
/**
* 1 启用 0 停用默认启用
*/
private Integer status;
/**
* 空域点列表
*/
private String points;
/**
* 形状
*/
private String shape;
/**
* 面积
*/
private Double areaArea;
/**
* 周长
*/
private Double areaPerimeter;
/**
* 半径
*/
private Double radius;
/**
* 最小高度
*/
private Double minHeight;
/**
* 最大高度
*/
private Double maxHeight;
/**
* 备注
*/
private String remark;
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("name", getName())
.append("areaType", getAreaType())
.append("status", getStatus())
.append("points", getPoints())
.append("shape", getShape())
.append("areaArea", getAreaArea())
.append("areaPerimeter", getAreaPerimeter())
.append("radius", getRadius())
.append("minHeight", getMinHeight())
.append("maxHeight", getMaxHeight())
.append("remark", getRemark())
.toString();
}
}

View File

@ -0,0 +1,53 @@
package com.ruoyi.airline.domain.model;
import com.ruoyi.common.core.web.domain.ExBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.List;
/**
* 空域分组
*
* @author 拓恒
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AirlineAreaGroup extends ExBaseEntity {
/**
* 用户ID
*/
private Long groupId;
/**
* 分组名称
*/
private String groupName;
/**
* 用户ID分组自带用户归属后期权限都是基于用户ID进行
*/
private Long userId;
/**
* 组关联的空域
*/
private List<AirlineArea> groupInfos;
/**
* 空域数量
*/
private Integer areaCount;
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("groupId", getGroupId())
.append("groupName", getGroupName())
.append("userId", getUserId())
.append("areaCount", getAreaCount())
.toString();
}
}

View File

@ -0,0 +1,40 @@
package com.ruoyi.airline.domain.model;
import com.ruoyi.common.core.web.domain.ExBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 空域分组明细
*
* @author 拓恒
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AirlineAreaGroupInfo extends ExBaseEntity {
/**
* id,主键
*/
private Long id;
/**
* 用户ID
*/
private Long groupId;
/**
* 空域id
*/
private Long areaId;
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("groupId", getGroupId())
.append("areaId", getAreaId())
.toString();
}
}

View File

@ -0,0 +1,76 @@
package com.ruoyi.airline.domain.model;
import com.ruoyi.common.core.web.domain.ExBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 空域时间规则领域模型
*
* @author 拓恒
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AirlineAreaTimeRule extends ExBaseEntity {
/**
* 主键ID
*/
private Long id;
/**
* 空域ID
*/
private Long areaId;
/**
* 限制类型0是永久 1单次2自定义
*/
private Integer restrictType;
/**
* 日期范围
*/
private String dateRange;
/**
* 时间范围
*/
private String timeRange;
/**
* 重复粒度值0,1,2: restrictType=0时生效
*/
private Integer granularity;
/**
* 粒度循环周期整数值每1天每1周每1个月
*/
private Integer repetFrequency;
/**
* 重复粒度具体时间 granularity = 0时该值为空不生效granularity = 1时granularityTimes最多7个值1,2,3,4,5,6,7分别周一周二周日granularity = 2时granularityTimes最多12个值1,2,3,4,5,6,712分别是1月2月.12月
*/
private String granularityTimes;
/**
* 备注
*/
private String remark;
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("areaId", getAreaId())
.append("restrictType", getRestrictType())
.append("dateRange", getDateRange())
.append("timeRange", getTimeRange())
.append("granularity", getGranularity())
.append("repetFrequency", getRepetFrequency())
.append("granularityTimes", getGranularityTimes())
.append("remark", getRemark())
.toString();
}
}

View File

@ -0,0 +1,130 @@
package com.ruoyi.airline.domain.model;
/**
* 航线数据模型
* Domain 层模型用于业务逻辑处理
*
* @author ruoyi
* @date 2026-01-17
*/
public class AirlineData
{
/** 主键ID */
private Long id;
/** 航班号 */
private String flightNumber;
/** 起飞城市 */
private String departureCity;
/** 到达城市 */
private String arrivalCity;
/** 空气速度 */
private Double airspeed;
/** 速度 */
private Double velocity;
/** 垂直速度 */
private Double vspeed;
/** 水平速度 */
private Double hspeed;
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
public String getFlightNumber()
{
return flightNumber;
}
public void setFlightNumber(String flightNumber)
{
this.flightNumber = flightNumber;
}
public String getDepartureCity()
{
return departureCity;
}
public void setDepartureCity(String departureCity)
{
this.departureCity = departureCity;
}
public String getArrivalCity()
{
return arrivalCity;
}
public void setArrivalCity(String arrivalCity)
{
this.arrivalCity = arrivalCity;
}
public Double getAirspeed()
{
return airspeed;
}
public void setAirspeed(Double airspeed)
{
this.airspeed = airspeed;
}
public Double getVelocity()
{
return velocity;
}
public void setVelocity(Double velocity)
{
this.velocity = velocity;
}
public Double getVspeed()
{
return vspeed;
}
public void setVspeed(Double vspeed)
{
this.vspeed = vspeed;
}
public Double getHspeed()
{
return hspeed;
}
public void setHspeed(Double hspeed)
{
this.hspeed = hspeed;
}
@Override
public String toString()
{
return "AirlineData{" +
"id=" + id +
", flightNumber='" + flightNumber + '\'' +
", departureCity='" + departureCity + '\'' +
", arrivalCity='" + arrivalCity + '\'' +
", airspeed=" + airspeed +
", velocity=" + velocity +
", vspeed=" + vspeed +
", hspeed=" + hspeed +
'}';
}
}

View File

@ -0,0 +1,176 @@
package com.ruoyi.airline.domain.model;
import com.ruoyi.airline.api.domain.AirLinePointVO;
import com.ruoyi.common.core.web.domain.BaseEntity;
import lombok.Data;
import java.util.List;
/**
* 航线文件领域模型
* Domain 层模型用于业务逻辑处理
*
* @author ruoyi
* @date 2026-01-17
*/
@Data
public class AirlineFile extends BaseEntity {
/**
* 主键ID
*/
private Long id;
/**
* 航线名称
*/
private String name;
/**
* 文件名称
*/
private String fileName;
/**
* 飞行器厂商
*/
private String airVendor;
/**
* 飞行器类型
*/
private String airType;
/**
* 文件地址
*/
private String fileUrl;
/**
* 航线类型1,航点航线;2,指点航线;3,指面航线
*/
private String type;
/**
* 文件备注
*/
private String note;
/**
* 航线距离
*/
private Double distance;
/**
* 航线点列表
*/
private List<AirLinePoint> linePointDtoList;
/**
* 数据来源
*/
private String source;
/**
* 1 启用 0 停用
*/
private Integer status;
/**
* 航线文件对应的 MD5指纹
*/
private String fileMd5;
/**
* 爬升模式
*/
private String climbMode;
/**
* 海拔高度
*/
private Double altitude;
/**
* 飞行速度
*/
private Double flightSpeed;
/**
* 全局航点高度
*/
private Double globalWaypointHeight;
/**
* 拍照模式
*/
private String photoMode;
/**
* 大疆航线对应的oss地址可能存kmz也可能存waypoint要看fileUrl存的是啥这个字段存反的
*/
private String djiFileUrl;
/**
* kmz航线的全局高度
*/
private Integer djiRthAltitude;
/**
* 航线转弯类型 1-直线2-协调转弯
*/
private Integer turnRadius;
/**
* 是否需要自动拍照
*/
private Integer autoTakePhoto;
/**
* 自动拍照间隔时间
*/
private Integer autoTakePhotoInterval;
/**
* 分组ID
*/
private Long groupId;
/**
* 分组名称
*/
private String groupName;
/**
* 用户ID分组自带用户归属 后期权限都是基于用户ID进行
*/
private Long userId;
@Override
public String toString() {
return "AirlineFile{" +
"id=" + id +
", fileName='" + fileName + '\'' +
", fileUrl='" + fileUrl + '\'' +
", type=" + type + '\'' +
", note='" + note + '\'' +
", distance=" + distance +
", linePointDtoList=" + linePointDtoList +
", source='" + source + '\'' +
", status=" + status +
", fileMd5='" + fileMd5 + '\'' +
", climbMode='" + climbMode + '\'' +
", altitude=" + altitude +
", flightSpeed=" + flightSpeed +
", globalWaypointHeight=" + globalWaypointHeight +
", photoMode='" + photoMode + '\'' +
", djiFileUrl='" + djiFileUrl + '\'' +
", djiRthAltitude=" + djiRthAltitude +
", turnRadius=" + turnRadius +
", autoTakePhoto=" + autoTakePhoto +
", autoTakePhotoInterval=" + autoTakePhotoInterval +
", groupId=" + groupId +
", groupName='" + groupName + '\'' +
", userId=" + userId +
'}';
}
}

View File

@ -0,0 +1,42 @@
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;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 航线分组
*
* @author 拓恒
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AirlineFileGroup extends ExBaseEntity {
/**
* 用户ID
*/
private Long groupId;
/**
* 分组名称
*/
private String groupName;
/**
* 航线数量
*/
private Integer airlineCount;
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("groupId", getGroupId())
.append("groupName", getGroupName())
.append("airlineCount", getAirlineCount())
.toString();
}
}

View File

@ -0,0 +1,41 @@
package com.ruoyi.airline.domain.model;
import com.ruoyi.common.core.web.domain.ExBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 航线分组明细
*
* @author 拓恒
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AirlineFileGroupInfo extends ExBaseEntity {
/**
* id,主键用于order by 排序
*/
private Long id;
/**
* 用户ID
*/
private Long groupId;
/**
* 航线id
*/
private Long airlineId;
private AirlineFile airlineFile;
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("groupId", getGroupId())
.append("airlineId", getAirlineId())
.toString();
}
}

View File

@ -0,0 +1,102 @@
package com.ruoyi.airline.domain.model;
import com.ruoyi.common.core.web.domain.ExBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.List;
/**
* 标注
*
* @author 拓恒
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AirlineMarker extends ExBaseEntity {
/**
* 主键ID
*/
private Long id;
/**
* 标注名称
*/
private String markerName;
/**
* 标注类型
*/
private String markerType;
/**
* 1 启用 0 停用默认启用
*/
private Integer status;
/**
* 颜色
*/
private String color;
/**
* 图标
*/
private String icon;
/**
* 字体大小
*/
private Integer fontSize;
/**
* 经纬度格式[,,asl高度]
*/
private List<PointInfo> coordinates;
/**
* 简介
*/
private String description;
/**
* 备注
*/
private String remark;
@Data
public static class PointInfo {
/**
* 纬度
*/
private Double latitude;
/**
* 经度
*/
private Double longitude;
/**
* 海拔高度
*/
private Double asl;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("markerName", getMarkerName())
.append("markerType", getMarkerType())
.append("status", getStatus())
.append("color", getColor())
.append("icon", getIcon())
.append("fontSize", getFontSize())
.append("coordinates", getCoordinates())
.append("description", getDescription())
.append("remark", getRemark())
.toString();
}
}

View File

@ -0,0 +1,47 @@
package com.ruoyi.airline.domain.model;
import com.ruoyi.common.core.web.domain.ExBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.List;
/**
* 标注分组
*
* @author 拓恒
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AirlineMarkerGroup extends ExBaseEntity {
/**
* 分组ID
*/
private Long id;
/**
* 分组名称
*/
private String name;
/**
* 组关联的标注
*/
private List<AirlineMarker> groupInfos;
/**
* 标注数量
*/
private Integer markerCount;
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("name", getName())
.append("markerCount", getMarkerCount())
.toString();
}
}

View File

@ -0,0 +1,40 @@
package com.ruoyi.airline.domain.model;
import com.ruoyi.common.core.web.domain.ExBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 标注分组明细
*
* @author 拓恒
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AirlineMarkerGroupInfo extends ExBaseEntity {
/**
* id,主键
*/
private Long id;
/**
* 分组ID
*/
private Long groupId;
/**
* 标注id
*/
private Long markerId;
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("groupId", getGroupId())
.append("markerId", getMarkerId())
.toString();
}
}

View File

@ -0,0 +1,74 @@
package com.ruoyi.airline.domain.model;
import com.ruoyi.airline.domain.model.kml.NewGeoPoint;
import lombok.Data;
import java.util.List;
/**
* 航线文件
*/
@Data
public class KmlParams {
/**
* 无人机类型 91
*/
private Integer droneType;
/**
* 无人机子类型 1
*/
private Integer subDroneType;
/**
* 相机枚举值 type 机场2为81
*/
private Integer payloadType;
/**
* 相机枚举值 subtype 机场2为0
*/
private Integer payloadSubEnumType;
/**
* 相机枚举值 gimbalindex 机场2为0
*/
private Integer payloadPosition;
/**
* 航点执行高度
*/
private Integer executeHeight;
/**
* 航点飞行速度
*/
private Integer autoFlightSpeed;
/**
* 图片存储类型
*/
private String imageFormat;
/**
* 机场经度
*/
private String airportLongitude;
/**
* 机场纬度
*/
private String airportLatitude;
/**
* 椭球高度 地表高度 可以先给默认值
*/
private String airportHeight;
/**
* 航线航点
*/
private List<NewGeoPoint> pointList;
}

View File

@ -0,0 +1,20 @@
package com.ruoyi.airline.domain.model.kml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
@Data
@XStreamAlias("wpml:action")
public class KmlAction {
@XStreamAlias("wpml:actionId")
private String actionId;
@XStreamAlias("wpml:actionActuatorFunc")
private String actionActuatorFunc;
@XStreamAlias("wpml:actionActuatorFuncParam")
private KmlActionActuatorFuncParam actionActuatorFuncParam;
}

View File

@ -0,0 +1,175 @@
package com.ruoyi.airline.domain.model.kml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
@Data
@XStreamAlias("wpml:actionActuatorFuncParam")
public class KmlActionActuatorFuncParam {
// takePhoto & startRecord & stopRecord
@XStreamAlias("wpml:payloadPositionIndex")
private String payloadPositionIndex;
@XStreamAlias("wpml:fileSuffix")
private String fileSuffix;
@XStreamAlias("wpml:payloadLensIndex")
private String payloadLensIndex;
@XStreamAlias("wpml:useGlobalPayloadLensIndex")
private String useGlobalPayloadLensIndex;
// focus
@XStreamAlias("wpml:isPointFocus")
private String isPointFocus;
@XStreamAlias("wpml:focusX")
private String focusX;
@XStreamAlias("wpml:focusY")
private String focusY;
@XStreamAlias("wpml:focusRegionWidth")
private String focusRegionWidth;
@XStreamAlias("wpml:focusRegionHeight")
private String focusRegionHeight;
@XStreamAlias("wpml:isInfiniteFocus")
private String isInfiniteFocus;
// zoom
@XStreamAlias("wpml:focalLength")
private String focalLength;
// customDirName
@XStreamAlias("wpml:directoryName")
private String directoryName;
// gimbalRotate & gimbalEvenlyRotate
@XStreamAlias("wpml:gimbalHeadingYawBase")
private String gimbalHeadingYawBase;
@XStreamAlias("wpml:gimbalRotateMode")
private String gimbalRotateMode;
@XStreamAlias("wpml:gimbalPitchRotateEnable")
private String gimbalPitchRotateEnable;
@XStreamAlias("wpml:gimbalPitchRotateAngle")
private String gimbalPitchRotateAngle;
@XStreamAlias("wpml:gimbalRollRotateEnable")
private String gimbalRollRotateEnable;
@XStreamAlias("wpml:gimbalRollRotateAngle")
private String gimbalRollRotateAngle;
@XStreamAlias("wpml:gimbalYawRotateEnable")
private String gimbalYawRotateEnable;
@XStreamAlias("wpml:gimbalYawRotateAngle")
private String gimbalYawRotateAngle;
@XStreamAlias("wpml:gimbalRotateTimeEnable")
private String gimbalRotateTimeEnable;
@XStreamAlias("wpml:gimbalRotateTime")
private String gimbalRotateTime;
// rotateYaw
@XStreamAlias("wpml:aircraftHeading")
private String aircraftHeading;
@XStreamAlias("wpml:aircraftPathMode")
private String aircraftPathMode;
// hover
@XStreamAlias("wpml:hoverTime")
private String hoverTime;
// orientedShoot
@XStreamAlias("wpml:accurateFrameValid")
private String accurateFrameValid;
@XStreamAlias("wpml:targetAngle")
private String targetAngle;
@XStreamAlias("wpml:actionUUID")
private String actionUUID;
@XStreamAlias("wpml:imageWidth")
private String imageWidth;
@XStreamAlias("wpml:imageHeight")
private String imageHeight;
@XStreamAlias("wpml:AFPos")
private String AFPos;
@XStreamAlias("wpml:gimbalPort")
private String gimbalPort;
@XStreamAlias("wpml:orientedCameraType")
private String orientedCameraType;
@XStreamAlias("wpml:orientedFilePath")
private String orientedFilePath;
@XStreamAlias("wpml:orientedFileMD5")
private String orientedFileMD5;
@XStreamAlias("wpml:orientedFileSize")
private String orientedFileSize;
@XStreamAlias("wpml:orientedFileSuffix")
private String orientedFileSuffix;
@XStreamAlias("wpml:orientedCameraApertue")
private String orientedCameraApertue;
@XStreamAlias("wpml:orientedCameraLuminance")
private String orientedCameraLuminance;
@XStreamAlias("wpml:orientedCameraShutterTime")
private String orientedCameraShutterTime;
@XStreamAlias("wpml:orientedCameraISO")
private String orientedCameraISO;
@XStreamAlias("wpml:orientedPhotoMode")
private String orientedPhotoMode;
// panoShot
@XStreamAlias("wpml:panoShotSubMode")
private String panoShotSubMode;
// recordPointCloud
@XStreamAlias("wpml:recordPointCloudOperate")
private String recordPointCloudOperate;
// 间隔拍照参数
@XStreamAlias("wpml:photoTime")
private String photoTime;
@XStreamAlias("wpml:photoDistance")
private String photoDistance;
@XStreamAlias("wpml:photoType")
private String photoType;
@XStreamAlias("wpml:droneYaw")
private String droneYaw;
}

View File

@ -0,0 +1,34 @@
package com.ruoyi.airline.domain.model.kml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
import java.util.List;
@Data
@XStreamAlias("wpml:actionGroup")
public class KmlActionGroup {
@XStreamAlias("wpml:actionGroupId")
private String actionGroupId;
@XStreamAlias("wpml:actionGroupStartIndex")
private String actionGroupStartIndex;
@XStreamAlias("wpml:actionGroupEndIndex")
private String actionGroupEndIndex;
@XStreamAlias("wpml:actionGroupMode")
private String actionGroupMode;
@XStreamAlias("wpml:actionTrigger")
private KmlActionTrigger actionTrigger;
@XStreamAlias("wpml:action")
private List<KmlAction> action;
}

View File

@ -0,0 +1,17 @@
package com.ruoyi.airline.domain.model.kml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
@Data
@XStreamAlias("wpml:actionTrigger")
public class KmlActionTrigger {
@XStreamAlias("wpml:actionTriggerType")
private String actionTriggerType;
@XStreamAlias("wpml:actionTriggerParam")
private String actionTriggerParam;
}

View File

@ -0,0 +1,26 @@
package com.ruoyi.airline.domain.model.kml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
@Data
@XStreamAlias("Document")
public class KmlDocument {
@XStreamAlias("wpml:author")
private String author;
@XStreamAlias("wpml:createTime")
private String createTime;
@XStreamAlias("wpml:updateTime")
private String updateTime;
@XStreamAlias("wpml:missionConfig")
private KmlMissionConfig kmlMissionConfig;
@XStreamAlias("Folder")
private KmlFolder folder;
}

View File

@ -0,0 +1,16 @@
package com.ruoyi.airline.domain.model.kml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
@Data
@XStreamAlias("wpml:droneInfo")
public class KmlDroneInfo {
@XStreamAlias("wpml:droneEnumValue")
private String droneEnumValue;
@XStreamAlias("wpml:droneSubEnumValue")
private String droneSubEnumValue;
}

View File

@ -0,0 +1,140 @@
package com.ruoyi.airline.domain.model.kml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import lombok.Data;
import java.util.List;
/**
* 模板信息
*/
@Data
@XStreamAlias("Folder")
public class KmlFolder {
/**
* 预定义模板类型 必填
* waypoint航点飞行
* mapping2d建图航拍
* mapping3d倾斜摄影
* mappingStrip航带飞行
*/
@XStreamAlias("wpml:templateType")
private String templateType;
/**
* 模板ID 必填
* 0 0开始
*/
@XStreamAlias("wpml:templateId")
private String templateId;
// 以下为 wpml 文件使用
/**
* 执行高度模式
* WGS84椭球高模式
* relativeToStartPoint相对起飞点高度模式
* realTimeFollowSurface: 使用实时仿地模式仅支持M3E/M3T/M3M
*/
@XStreamAlias("wpml:executeHeightMode")
private String executeHeightMode;
/**
* 航线ID 0开始
*/
@XStreamAlias("wpml:waylineId")
private String waylineId;
/**
*
*/
@XStreamAlias("wpml:distance")
private String distance;
/**
*
*/
@XStreamAlias("wpml:duration")
private String duration;
@XStreamAlias("wpml:waylineCoordinateSysParam")
private KmlWayLineCoordinateSysParam waylineCoordinateSysParam;
/**
* 全局航线飞行速度 m/s 必填
*/
@XStreamAlias("wpml:autoFlightSpeed")
private String autoFlightSpeed;
/**
* 全局航线高度相对起飞点高度
*/
@XStreamAlias("wpml:globalHeight")
private String globalHeight;
/**
*
*/
@XStreamAlias("wpml:caliFlightEnable")
private String caliFlightEnable;
/**
* 云台俯仰角控制模式
* manual手动控制飞行器从一个航点飞向下一个航点的过程中支持用户手动控制云台的俯仰角度若无用户控制则保持飞离航点时的云台俯仰角度
* usePointSetting依照每个航点设置飞行器从一个航点飞向下一个航点的过程中云台俯仰角均匀过渡至下一个航点的俯仰角
*/
@XStreamAlias("wpml:gimbalPitchMode")
private String gimbalPitchMode;
//以下为航点飞行模板元素
/**
* 全局偏航角模式参数
*/
@XStreamAlias("wpml:globalWaypointHeadingParam")
private KmlGlobalWaypointHeadingParam globalWaypointHeadingParam;
/**
* 全局航点类型全局航点转弯模式
* coordinateTurn协调转弯不过点提前转弯
* toPointAndStopWithDiscontinuityCurvature直线飞行飞行器到点停
* toPointAndStopWithContinuityCurvature曲线飞行飞行器到点停
* toPointAndPassWithContinuityCurvature曲线飞行飞行器过点不停
*/
@XStreamAlias("wpml:globalWaypointTurnMode")
private String globalWaypointTurnMode;
/**
* 全局航段轨迹是否尽量贴合直线
* 0航段轨迹全程为曲线
* 1航段轨迹尽量贴合两点连线
*/
@XStreamAlias("wpml:globalUseStraightLine")
private String globalUseStraightLine;
/**
* 航点信息包括航点经纬度和高度等
*/
@XStreamImplicit(itemFieldName = "Placemark")
private List<KmlPlacemark> placemarkList;
/**
* TODO
* 航线初始动作
* *该元素用于规划一系列初始动作在航线开始前执行航线中断恢复时先执行初始动作再执行航点动作
*/
@XStreamAlias("wpml:startActionGroup")
private KmlActionGroup actionGroup;
/**
* 负载数据
*/
@XStreamAlias("wpml:payloadParam")
private KmlPayloadParam payloadParam;
}

View File

@ -0,0 +1,46 @@
package com.ruoyi.airline.domain.model.kml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
/**
* 全局偏航角模式参数
*/
@Data
@XStreamAlias("wpml:globalWaypointHeadingParam")
public class KmlGlobalWaypointHeadingParam {
/**
* fixed:固定为用户设置的偏航角
* followWayline:偏航角跟随航线
*/
@XStreamAlias("wpml:waypointHeadingMode")
private String waypointHeadingMode;
/**
* 不知道啥 默认0
*/
@XStreamAlias("wpml:waypointHeadingAngle")
private String waypointHeadingAngle;
/**
* 不知道啥 默认0.000000,0.000000,0.000000
*/
@XStreamAlias("wpml:waypointPoiPoint")
private String waypointPoiPoint;
/**
* 不知道啥 followBadArc
*/
@XStreamAlias("wpml:waypointHeadingPathMode")
private String waypointHeadingPathMode;
/**
* 不知道啥 默认0
*/
@XStreamAlias("wpml:waypointHeadingPoiIndex")
private String waypointHeadingPoiIndex;
}

View File

@ -0,0 +1,22 @@
package com.ruoyi.airline.domain.model.kml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import lombok.Data;
@Data
@XStreamAlias("kml")
public class KmlInfo {
@XStreamAsAttribute
@XStreamAlias("xmlns")
private String xmlns = "http://www.opengis.net/kml/2.2";
@XStreamAsAttribute
@XStreamAlias("xmlns:wpml")
private String wpml = "http://www.dji.com/wpmz/1.0.4";
@XStreamAlias("Document")
private KmlDocument document;
}

View File

@ -0,0 +1,44 @@
package com.ruoyi.airline.domain.model.kml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
@Data
@XStreamAlias("wpml:missionConfig")
public class KmlMissionConfig {
@XStreamAlias("wpml:flyToWaylineMode")
private String flyToWayLineMode;
@XStreamAlias("wpml:finishAction")
private String finishAction;
@XStreamAlias("wpml:exitOnRCLost")
private String exitOnRCLost;
@XStreamAlias("wpml:executeRCLostAction")
private String executeRCLostAction;
@XStreamAlias("wpml:takeOffSecurityHeight")
private String takeOffSecurityHeight;
@XStreamAlias("wpml:globalTransitionalSpeed")
private String globalTransitionalSpeed;
@XStreamAlias("wpml:globalRTHHeight")
private String globalRTHHeight;
@XStreamAlias("wpml:takeOffRefPoint")
private String takeOffRefPoint;
@XStreamAlias("wpml:takeOffRefPointAGLHeight")
private String takeOffRefPointAGLHeight;
@XStreamAlias("wpml:droneInfo")
private KmlDroneInfo droneInfo;
@XStreamAlias("wpml:payloadInfo")
private KmlPayloadInfo payloadInfo;
}

View File

@ -0,0 +1,31 @@
package com.ruoyi.airline.domain.model.kml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
/**
* 负载机型信息 type-subtype-gimbalindex
*/
@Data
@XStreamAlias("wpml:payloadInfo")
public class KmlPayloadInfo {
/**
* 相机枚举值 type
*/
@XStreamAlias("wpml:payloadEnumValue")
private String payloadEnumValue;
/**
* 相机枚举值 subtype
*/
@XStreamAlias("wpml:payloadSubEnumValue")
private String payloadSubEnumValue;
/**
* 相机枚举值 gimbalindex
*/
@XStreamAlias("wpml:payloadPositionIndex")
private String payloadPositionIndex;
}

View File

@ -0,0 +1,41 @@
package com.ruoyi.airline.domain.model.kml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
/**
* 负载设置
*/
@Data
@XStreamAlias("wpml:payloadParam")
public class KmlPayloadParam {
@XStreamAlias("wpml:payloadPositionIndex")
private String payloadPositionIndex;
@XStreamAlias("wpml:focusMode")
private String focusMode;
@XStreamAlias("wpml:meteringMode")
private String meteringMode;
@XStreamAlias("wpml:dewarpingEnable")
private String dewarpingEnable;
@XStreamAlias("wpml:returnMode")
private String returnMode;
@XStreamAlias("wpml:samplingRate")
private String samplingRate;
@XStreamAlias("wpml:scanningMode")
private String scanningMode;
@XStreamAlias("wpml:modelColoringEnable")
private String modelColoringEnable;
@XStreamAlias("wpml:imageFormat")
private String imageFormat;
}

View File

@ -0,0 +1,135 @@
package com.ruoyi.airline.domain.model.kml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
@Data
@XStreamAlias("Placemark")
public class KmlPlacemark {
/**
* 航点经纬度<经度,纬度>
*/
@XStreamAlias("Point")
private KmlPoint kmlPoint;
/**
* 航点序号
* 在一条航线内该ID唯一该序号必须从0开始单调连续递增
*/
@XStreamAlias("wpml:index")
private String index;
/**
*
*/
@XStreamAlias("wpml:executeHeight")
private String executeHeight;
// 下面 wpml 文件使用
/**
* 航点高度WGS84椭球高度
*/
@XStreamAlias("wpml:ellipsoidHeight")
private String ellipsoidHeight;
/**
* 航点高度EGM96海拔高度/相对起飞点高度/AGL相对地面高度
*/
@XStreamAlias("wpml:height")
private String height;
/**
* 航点飞行速度 1,15 默认10
*/
@XStreamAlias("wpml:waypointSpeed")
private String waypointSpeed;
/**
* 偏航角模式参数
*/
@XStreamAlias("wpml:waypointHeadingParam")
private KmlWaypointHeadingParam waypointHeadingParam;
/**
* 航点类型航点转弯模式
*/
@XStreamAlias("wpml:waypointTurnParam")
private KmlWaypointTurnParam waypointTurnParam;
/**
* 是否使用全局高度 0, 1
*/
@XStreamAlias("wpml:useGlobalHeight")
private String useGlobalHeight;
/**
* 是否使用全局飞行速度 此处的全局飞行速度即wpml:autoFlightSpeed
* 0不使用全局设置
* 1使用全局设置
*/
@XStreamAlias("wpml:useGlobalSpeed")
private String useGlobalSpeed;
/**
* 是否使用全局偏航角模式参数 默认1
* 0不使用全局设置
* 1使用全局设置
*/
@XStreamAlias("wpml:useGlobalHeadingParam")
private String useGlobalHeadingParam;
/**
* 是否使用全局偏航角模式参数
* 0不使用全局设置
* 1使用全局设置
*/
@XStreamAlias("wpml:useGlobalTurnParam")
private String useGlobalTurnParam;
/**
* 该航段是否贴合直线
* 0航段轨迹全程为曲线
* 1航段轨迹尽量贴合两点连线
* 当且仅当wpml:waypointTurnParam"waypointTurnMode"被设置为toPointAndStopWithContinuityCurvaturetoPointAndPassWithContinuityCurvature时必需
* 如果此元素被设置则局部定义会覆盖全局定义
*/
@XStreamAlias("wpml:useStraightLine")
private String useStraightLine;
/**
* 航点云台俯仰角
* 对应机型云台可转动范围
*/
@XStreamAlias("wpml:gimbalPitchAngle")
private String gimbalPitchAngle;
/**
* 动作集合
*/
@XStreamAlias("wpml:actionGroup")
private KmlActionGroup actionGroup;
/**
*
*/
@XStreamAlias("wpml:waypointGimbalHeadingParam")
private KmlWaypointGimbalHeadingParam waypointGimbalHeadingParam;
/**
* 是否危险点
* 0正常点1危险点
*/
@XStreamAlias("wpml:isRisky")
private String isRisky;
/**
*
*/
@XStreamAlias("wpml:waypointWorkType")
private String waypointWorkType;
}

View File

@ -0,0 +1,21 @@
package com.ruoyi.airline.domain.model.kml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
//@Data
@XStreamAlias("Point")
public class KmlPoint {
public String getCoordinates() {
return coordinates;
}
public void setCoordinates(String coordinates) {
String replace = coordinates.replace("\n", "");
this.coordinates = replace;
}
@XStreamAlias("coordinates")
private String coordinates;
}

View File

@ -0,0 +1,31 @@
package com.ruoyi.airline.domain.model.kml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
/**
* 坐标系参数
*/
@Data
@XStreamAlias("wpml:waylineCoordinateSysParam")
public class KmlWayLineCoordinateSysParam {
@XStreamAlias("wpml:coordinateMode")
private String coordinateMode;
@XStreamAlias("wpml:heightMode")
private String heightMode;
@XStreamAlias("wpml:positioningType")
private String positioningType;
@XStreamAlias("wpml:globalShootHeight")
private String globalShootHeight;
@XStreamAlias("wpml:surfaceFollowModeEnable")
private String surfaceFollowModeEnable;
@XStreamAlias("wpml:surfaceRelativeHeight")
private String surfaceRelativeHeight;
}

View File

@ -0,0 +1,17 @@
package com.ruoyi.airline.domain.model.kml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
@Data
@XStreamAlias("wpml:waypointGimbalHeadingParam")
public class KmlWaypointGimbalHeadingParam {
@XStreamAlias("wpml:waypointGimbalPitchAngle")
private String waypointGimbalPitchAngle;
@XStreamAlias("wpml:waypointGimbalYawAngle")
private String waypointGimbalYawAngle;
}

View File

@ -0,0 +1,48 @@
package com.ruoyi.airline.domain.model.kml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
@Data
@XStreamAlias("wpml:waypointHeadingParam")
public class KmlWaypointHeadingParam {
/**
* 不知道是啥 默认followWayline
*/
@XStreamAlias("wpml:waypointHeadingMode")
private String waypointHeadingMode;
/**
* 不知道是啥 默认0
*/
@XStreamAlias("wpml:waypointHeadingAngle")
private String waypointHeadingAngle;
/**
* 不知道是啥 默认 0.000000,0.000000,0.000000
*/
@XStreamAlias("wpml:waypointPoiPoint")
private String waypointPoiPoint;
/**
* 不知道是啥 默认0
*/
@XStreamAlias("wpml:waypointHeadingAngleEnable")
private String waypointHeadingAngleEnable;
/**
* 不知道是啥 默认 followBadArc
*/
@XStreamAlias("wpml:waypointHeadingPathMode")
private String waypointHeadingPathMode;
/**
* 不知道是啥 默认 followBadArc 默认0
*/
@XStreamAlias("wpml:waypointHeadingPoiIndex")
private String waypointHeadingPoiIndex;
}

View File

@ -0,0 +1,16 @@
package com.ruoyi.airline.domain.model.kml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
@Data
@XStreamAlias("wpml:waypointTurnParam")
public class KmlWaypointTurnParam {
@XStreamAlias("wpml:waypointTurnMode")
private String waypointTurnMode;
@XStreamAlias("wpml:waypointTurnDampingDist")
private String waypointTurnDampingDist;
}

View File

@ -0,0 +1,33 @@
package com.ruoyi.airline.domain.model.kml;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 一个点
*/
@Data
public class NewGeoPoint implements Serializable {
/**
* 序号
*/
private int id;
/**
* 经度
*/
private double longitude;
/**
* 纬度
*/
private double latitude;
/**
* 航点动作
*/
private List<PointActionReq> actions ;
}

View File

@ -0,0 +1,49 @@
package com.ruoyi.airline.domain.model.kml;
import lombok.Data;
import java.io.Serializable;
@Data
public class PointActionReq implements Serializable {
/**
* 动作编号
*/
private Integer actionIndex;
/**
* 飞行器悬停等待时间
*/
private Integer hoverTime;
/**
* 飞行器目标偏航角
*/
private Double aircraftHeading;
/**
* 是否使用全局拍照模式 0不使用 1使用
*/
private Integer useGlobalImageFormat;
/**
* 拍照模式字典
*/
private String imageFormat;
/**
* 云台偏航角
*/
private Double gimbalYawRotateAngle;
/**
* 云台俯仰角
*/
private Double gimbalPitchRotateAngle;
/**
* 变焦焦距
*/
private Double zoom;
}

View File

@ -0,0 +1,37 @@
package com.ruoyi.airline.domain.model.kml;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class RoutePointReq implements Serializable {
/**
* 航点编号
*/
private Integer routePointIndex;
/**
* 经度
*/
private Double longitude;
/**
* 纬度
*/
private Double latitude;
/**
* 高度
*/
private Double height;
/**
* 航点动作列表
*/
private List<PointActionReq> actions;
}

View File

@ -0,0 +1,31 @@
package com.ruoyi.airline.domain.util;
import com.ruoyi.airline.domain.model.kml.*;
import com.thoughtworks.xstream.XStream;
import java.io.InputStream;
/**
* 航线文件操作工具类
*/
public class KmlFileUtils {
/**
* kml文件解析
*
* @param inputStream 输入
* @return 输出
*/
public static KmlInfo parseKml(InputStream inputStream) {
XStream xStream = new XStream();
xStream.allowTypes(new Class[]{KmlInfo.class, KmlAction.class, KmlWayLineCoordinateSysParam.class, KmlPoint.class});
xStream.alias("kml", KmlInfo.class);
xStream.processAnnotations(KmlInfo.class);
xStream.autodetectAnnotations(true);
xStream.ignoreUnknownElements();
xStream.addImplicitCollection(KmlActionGroup.class, "action");
return (KmlInfo) xStream.fromXML(inputStream);
}
}

View File

@ -0,0 +1,404 @@
package com.ruoyi.airline.domain.util;
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;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public class WayPointUitls {
private static final Logger log = LoggerFactory.getLogger(WayPointUitls.class);
/**
* kmz转换waypoint并同时上传到OSS返回两个url
*
* @param kmlInfo
* @return
*/
public static String kmz2waypoint(KmlInfo kmlInfo) {
//准备一个waypoint文件的标头文本
StringBuilder waypointBuilder = new StringBuilder("QGC WPL 110\n");
// 重置全局id计数器
//定义waypoint的航点对象集合备用
List<AirLinePointDTO> linePoints = new ArrayList<>();
//m3和m4TD的机型可以从missionConfig获取部分基础数据
KmlMissionConfig missionConfig = kmlInfo.getDocument().getKmlMissionConfig();
//其他场景下都可以从missionConfig 拿航点和动作集合
List<KmlPlacemark> placeMarkList = kmlInfo.getDocument().getFolder().getPlacemarkList();
if (placeMarkList == null || placeMarkList.isEmpty()) {
return "";
}
//获取kml文件中的第一个坐标
String[] takeoffCoords;
if (missionConfig.getTakeOffRefPoint() != null) {
takeoffCoords = missionConfig.getTakeOffRefPoint().split(",");
} else {
// M300/M350使用第一个航点的坐标
KmlPlacemark kmlPlacemark = placeMarkList.get(0);
String[] coords = kmlPlacemark.getKmlPoint().getCoordinates()
.replaceAll("[\\n ]", "")
.split(",");
takeoffCoords = new String[]{coords[1], coords[0]}; // 纬度, 经度
}
//1.设置waypoint文件的起飞点第一个command 16 不需要高度
linePoints.add(buildPoint(16,
takeoffCoords[0], takeoffCoords[1], 0,
null, null, null, null, 0, 0, 0
));
//2.设置waypoint文件的安全高度点command 22需要高度,使用第一个航点的高度
linePoints.add(buildPoint(22,
takeoffCoords[0], takeoffCoords[1],
Math.round(Float.parseFloat(placeMarkList.get(0).getHeight())), //高度转换成整数
null, null, null, null, 0, 0, 0
));
//3.处理普通航点和航线动作
for (KmlPlacemark placeMark : placeMarkList) {
// 航点坐标纬度+经度的排布顺序
KmlPoint point = placeMark.getKmlPoint();
String cleanCoords = point.getCoordinates().replaceAll("[\n ]", "");
String[] coords = cleanCoords.split(",");
// 基础航点安全点22和结束点20之间的其他16普通航点
AirLinePointDTO waypoint = buildPoint(
16,
coords[1], coords[0],
(int) Float.parseFloat(placeMark.getHeight()),
null, null, null, null, 0, 0, 0
);
linePoints.add(waypoint);
// 解析该航点对应的附加动作如拍照悬停等
//先判断动作组有没有动作
KmlActionGroup actionGroup = placeMark.getActionGroup();
if (!ObjectUtils.isEmpty(actionGroup)) {
// 获取动作组中的动作列表
List<KmlAction> actionList = actionGroup.getAction();
//动作组没有动作也结束动作组合
if (!CollectionUtils.isEmpty(actionList)) {
// 遍历所有动作
for (KmlAction action : actionList) {
// 使用全局id累加
processActions(action, linePoints);
}
}
}
}
// 4. 返航点command 20
linePoints.add(buildPoint(20, takeoffCoords[0], takeoffCoords[1], Math.round(Float.parseFloat(placeMarkList.get(0).getHeight())), null, null, null, null, 0, 0, 0));
// 5. 生成Waypoints文件内容
for (int i = 0; i < linePoints.size(); i++) {
AirLinePointDTO point = linePoints.get(i);
waypointBuilder.append(formatWaypointLine(point, i)).append("\n");
}
return waypointBuilder.toString();
}
// 格式化航点行直接使用DTO字段
public static String formatWaypointLine(AirLinePointDTO point, Integer index) {
switch (point.getCommand()) {
case 16:
if (index == 0) {
// 标准航点第一个16航点的时候字段3是0
return String.format(Locale.US,
"%d\t0\t0\t16\t0\t0\t0\t0\t%s\t%s\t%d.000000\t1",
index, point.getLat(), point.getLon(), point.getAlt());
} else {
//其他16的时候字段3是3
return String.format(Locale.US,
"%d\t0\t3\t16\t0\t0\t0\t0\t%s\t%s\t%d.000000\t1",
index, point.getLat(), point.getLon(), point.getAlt());
}
case 22: // 安全高度
return String.format(Locale.US,
"%d\t0\t3\t22\t0\t0\t0\t0\t%s\t%s\t%d.000000\t1",
index, point.getLat(), point.getLon(), point.getAlt());
case 93: // 悬停参数1=悬停时间
return String.format(Locale.US,
"%d\t0\t3\t93\t%s\t0\t0\t0\t0\t0\t0.000000\t1", index, point.getLoiterTime());
case 203: // 拍照没有参数只是个触发点
return String.format(Locale.US,
"%d\t0\t3\t203\t0\t0\t0\t0\t0\t0\t0.000000\t1", index);
case 205: // 云台角度参数1=俯仰角参数3=偏航角
return String.format(Locale.US,
"%d\t0\t3\t205\t%s\t0\t%s\t0\t0\t0\t0.000000\t1",
index, point.getCameraPitch(), point.getCameraYaw());
case 115: // 旋转无人机参数1=索引参数2=角度参数3=速度写死5参数4=方向写死1全都代表正向角度自带正负值避免负负得正参数5=1默认写死
return String.format(Locale.US,
"%d\t0\t3\t115\t%s\t5\t1\t1\t0\t0\t0.000000\t1",
index, point.getCameraYaw());
case 531: // 变焦第二个参数是变焦倍数
return String.format(Locale.US,
"%d\t0\t3\t531\t0\t%s\t0\t0\t0\t0\t0.000000\t1", index, point.getZoomAbsolute());
case 532: // 聚焦没有参数
return String.format(Locale.US,
"%d\t0\t3\t532\t0\t0\t0\t0\t0\t0\t0.000000\t1", index);
case 2500: // 视频录制无参数
return String.format("%d\t0\t3\t2500\t0\t0\t0\t0\t0\t0\t0.000000\t1", index);
case 2501: // 结束录制无参数
return String.format("%d\t0\t3\t2501\t0\t0\t0\t0\t0\t0\t0.000000\t1", index);
case 20: // 返航 使用的是第一个航点的经纬度和高度
return String.format("%d\t0\t3\t20\t0\t0\t0\t0\t%s\t%s\t%d.000000\t1", index, point.getLat(), point.getLon(), point.getAlt());
case 4000: // 飞行器偏航角
return String.format(Locale.US,
"%d\t0\t3\t4000\t0\t%s\t0\t0\t0\t0\t0.000000\t1",
index, point.getDroneYaw());
case 5000: // 开始等时间隔拍照
log.info("处理5000命令photoTime={}, photoType={}", point.getPhotoTime(), point.getPhotoType());
return String.format(Locale.US,
"%d\t0\t3\t5000\t%s\t0\t%s\t0\t0\t0\t0.000000\t1",
index,
point.getPhotoTime() != null ? String.valueOf(point.getPhotoTime()) : "0",
point.getPhotoType() != null ? String.valueOf(point.getPhotoType()) : "0");
case 6000: // 开始等间距隔拍照
return String.format(Locale.US,
"%d\t0\t3\t6000\t%s\t0\t%s\t0\t0\t0\t0.000000\t1",
index,
point.getPhotoDistance() != null ? String.valueOf(point.getPhotoDistance()) : "0",
point.getPhotoType() != null ? String.valueOf(point.getPhotoType()) : "0");
case 7000: // 结束间隔拍照
return String.format(Locale.US,
"%d\t0\t3\t2501\t0\t0\t0\t0\t0\t0\t0.000000\t1", index);
case 8000: // 全景拍照
return String.format(Locale.US,
"%d\t0\t3\t2501\t0\t0\t0\t0\t0\t0\t0.000000\t1", index);
default:
throw new IllegalArgumentException("未知命令: " + point.getCommand());
}
}
// 动作解析逻辑
public static void processActions(KmlAction action, List<AirLinePointDTO> linePoints) {
//kmz航线的动作code
String actionType = action.getActionActuatorFunc();
//动作参数
KmlActionActuatorFuncParam actionActuatorFuncParam = action.getActionActuatorFuncParam();
switch (actionType) {
case "hover":
// 悬停命令93
linePoints.add(buildPoint(
93,
"0", "0", 0,
actionActuatorFuncParam.getHoverTime(), // loiterTime悬停时间/s
"0",
"0",
"0",
0,
0,
0
));
break;
case "takePhoto":
// 拍照动作命令203 没啥参数
linePoints.add(buildPoint(
203,
"0", "0", 0,
"0",
"0",
"0",
"0",
0,
0,
0
));
break;
case "startRecord":
// 开始录像命令2500没啥参数
linePoints.add(buildPoint(
2500,
"0", "0", 0,
"0", "0", "0", "0",
0, 0, 0
));
break;
case "stopRecord":
// 结束录像命令2501 没啥参数
linePoints.add(buildPoint(
2501,
"0", "0", 0,
"0", "0", "0", "0",
0, 0, 0
));
break;
case "zoom":
// 变焦动作通过命令531的参数6实现
linePoints.add(buildPoint(
531,
"0", "0", 0,
"0", "0", "0", "0",
0,
Math.round(Float.parseFloat(actionActuatorFuncParam.getFocalLength()) / 24) //FocalLength=kmz的这个值的mm的焦距除24一般是最低焦距取绝对值得到变倍整数
, 0
));
break;
case "focus":
// 聚焦动作命令532 没啥参数
linePoints.add(buildPoint(
532,
"0", "0", 0,
"0", "0", "0", "0",
0, 0, 0
));
break;
case "gimbalRotate":
// 云台控制命令205
linePoints.add(buildPoint(
205,
"0", "0", 0,
"0",
String.valueOf(Math.round(Float.parseFloat(actionActuatorFuncParam.getGimbalPitchRotateAngle().toString()))), // 参数1=俯仰角 转换成整数
"0",
String.valueOf(Math.round(Float.parseFloat(actionActuatorFuncParam.getGimbalYawRotateAngle().toString()))), // 参数3=偏航角转换成整数
0, 0, 0
));
break;
case "rotateYaw":
// 无人机旋转命令115
linePoints.add(buildPoint(
115,
"0", "0", 0, "0", "0", "0",
String.valueOf(Math.round(Float.parseFloat(actionActuatorFuncParam.getAircraftHeading().toString()))), //旋转角度偏航角转换成整数
0, 0, "counterClockwise".equals(actionActuatorFuncParam.getAircraftPathMode()) ? -1 : 1 // 旋转方向逆时针/顺时针
));
break;
case "panoPhoto":
// 全景拍照命令8000
linePoints.add(buildPoint(
8000,
"0", "0", 0,
"0", "0", "0", "0",
0, 0, 0
));
break;
case "startTimeIntervalPhoto":
// 开始等时间隔拍照命令5000
linePoints.add(buildPoint(
5000,
"0", "0", 0,
"0", "0", "0", "0",
0, 0, 0,
actionActuatorFuncParam.getPhotoTime() != null ? Integer.parseInt(actionActuatorFuncParam.getPhotoTime()) : null,
null,
actionActuatorFuncParam.getPhotoType() != null ? Integer.parseInt(actionActuatorFuncParam.getPhotoType()) : null,
null
));
break;
case "startDistanceIntervalPhoto":
// 开始等间距隔拍照命令6000
linePoints.add(buildPoint(
6000,
"0", "0", 0,
"0", "0", "0", "0",
0, 0, 0,
null,
actionActuatorFuncParam.getPhotoDistance() != null ? Integer.parseInt(actionActuatorFuncParam.getPhotoDistance()) : null,
actionActuatorFuncParam.getPhotoType() != null ? Integer.parseInt(actionActuatorFuncParam.getPhotoType()) : null,
null
));
break;
case "stopIntervalPhoto":
// 结束间隔拍照命令7000
linePoints.add(buildPoint(
7000,
"0", "0", 0,
"0", "0", "0", "0",
0, 0, 0
));
break;
case "aircraftYaw":
// 飞行器偏航角命令4000
linePoints.add(buildPoint(
4000,
"0", "0", 0,
"0", "0", "0", "0",
0, 0, 0,
null, null, null,
actionActuatorFuncParam.getDroneYaw()
));
break;
default:
log.error("未知动作类型: {}", actionType);
}
}
//构建waypoint航点
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) {
AirLinePointDTO point = new AirLinePointDTO();
point.setCommand(command);
point.setLat(lat);
point.setLon(lon);
point.setAlt(alt);
point.setLoiterTime(loiterTime);
point.setCameraPitch(cameraPitch);
point.setCameraRoll(cameraRoll);
point.setCameraYaw(cameraYaw);
point.setSessionControl(sessionControl);
point.setZoomAbsolute(zoomAbsolute);
point.setRotateDirection(rotateDirection);
return point;
}
//构建waypoint航点带间隔拍照参数
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,
Integer photoTime, Integer photoDistance, Integer photoType, String droneYaw) {
AirLinePointDTO point = buildPoint(command, lat, lon, alt, loiterTime, cameraPitch, cameraRoll, cameraYaw,
sessionControl, zoomAbsolute, rotateDirection);
point.setPhotoTime(photoTime);
point.setPhotoDistance(photoDistance);
point.setPhotoType(photoType);
point.setDroneYaw(droneYaw);
return point;
}
}

View File

@ -0,0 +1,21 @@
package com.ruoyi.airline.mapper;
import com.ruoyi.airline.mapper.entity.AirlineAreaGroupInfoEntity;
import java.util.List;
/**
* 空域分组明细表 airline_area_group_info
*
* @author 拓恒
*/
public interface AirlineAreaGroupInfoMapper {
int insertGroupInfo(AirlineAreaGroupInfoEntity entity);
int deleteGroupInfo(AirlineAreaGroupInfoEntity entity);
List<AirlineAreaGroupInfoEntity> selectGroupInfoList(AirlineAreaGroupInfoEntity entity);
List<Long> selectAreaIdsByGroupId(Long groupId);
}

View File

@ -0,0 +1,25 @@
package com.ruoyi.airline.mapper;
import com.ruoyi.airline.mapper.entity.AirlineAreaGroupEntity;
import java.util.List;
/**
* 空域分组表 airline_area_group
*
* @author 拓恒
*/
public interface AirlineAreaGroupMapper {
int checkgroupNameUnique(AirlineAreaGroupEntity model);
int deletegroup(AirlineAreaGroupEntity entity);
int updateGroup(AirlineAreaGroupEntity entity);
int insertGroup(AirlineAreaGroupEntity entity);
List<AirlineAreaGroupEntity> selectGroupList(AirlineAreaGroupEntity entity);
AirlineAreaGroupEntity selectGroupById(Long groupId);
}

View File

@ -0,0 +1,32 @@
package com.ruoyi.airline.mapper;
import com.ruoyi.airline.mapper.entity.AirlineAreaEntity;
import java.util.List;
/**
* 空域列表 airline_area
*
* @author 拓恒
*/
public interface AirlineAreaMapper {
int insertArea(AirlineAreaEntity entity);
int updateArea(AirlineAreaEntity entity);
int deleteArea(AirlineAreaEntity entity);
List<AirlineAreaEntity> selectAreaList(AirlineAreaEntity entity);
AirlineAreaEntity selectAreaById(Long id);
List<AirlineAreaEntity> selectAreaListByIds(List<Long> ids);
/**
* 根据用户ID查询空域列表
* @param entity 查询条件
* @return 空域列表
*/
List<AirlineAreaEntity> selectAreaListByUserId(AirlineAreaEntity entity);
}

Some files were not shown because too many files have changed in this diff Show More