From cc559f4cb1e3c787fa18f5977b59b4b8b0846d8f Mon Sep 17 00:00:00 2001 From: gyb Date: Thu, 26 Feb 2026 15:29:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E6=96=B0=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AirlineAreaGroupController.java | 55 +++++++++++++++++++ .../convert/AirlineAreaControllerConvert.java | 6 ++ .../domain/api/IAirlineAreaDomain.java | 7 +++ .../domain/impl/AirlineAreaDomainImpl.java | 6 ++ .../airline/domain/model/AirlineArea.java | 18 ++++++ .../airline/mapper/AirlineAreaMapper.java | 7 +++ .../mapper/entity/AirlineAreaEntity.java | 18 ++++++ .../mapper/entity/AirlineFileEntity.java | 4 +- .../service/api/IAirlineAreaGroupService.java | 16 ++++++ .../airline/service/dto/AirlineAreaDTO.java | 18 ++++++ .../impl/AirlineAreaGroupServiceImpl.java | 35 ++++++++++++ .../db/migration/V2__Create_area_tables.sql | 3 + .../mapper/airline/AirlineAreaMapper.xml | 43 +++++++++++++-- .../mapper/airline/AirlineFileGroupMapper.xml | 31 ++++++++++- .../mapper/airline/AirlineFileMapper.xml | 2 +- 15 files changed, 260 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/ruoyi/airline/controller/AirlineAreaGroupController.java b/src/main/java/com/ruoyi/airline/controller/AirlineAreaGroupController.java index 363eb46..243ea5c 100644 --- a/src/main/java/com/ruoyi/airline/controller/AirlineAreaGroupController.java +++ b/src/main/java/com/ruoyi/airline/controller/AirlineAreaGroupController.java @@ -62,6 +62,8 @@ public class AirlineAreaGroupController extends BaseController { @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() + "'失败,分组名称已存在"); @@ -76,6 +78,7 @@ public class AirlineAreaGroupController extends BaseController { @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() + "'失败,分组名称已存在"); @@ -115,6 +118,8 @@ public class AirlineAreaGroupController extends BaseController { @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)); @@ -130,6 +135,9 @@ public class AirlineAreaGroupController extends BaseController { @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)); @@ -146,4 +154,51 @@ public class AirlineAreaGroupController extends BaseController { 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 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 空域列表 + */ + @GetMapping("/areaList") + @Operation(summary = "根据用户ID查询空域列表") + public AjaxResult selectAreaListByUserId(AirlineAreaVO area) { + // 设置用户ID + area.setCreateBy(SecurityUtils.getUserId().toString()); + // 转换为DTO + AirlineAreaDTO dto = AirlineAreaControllerConvert.to(area); + // 调用服务层方法 + List list = iAirlineAreaGroupService.selectAreaListByUserId(dto); + // 转换为VO + List result = AirlineAreaControllerConvert.fromList(list); + return success(result); + } } diff --git a/src/main/java/com/ruoyi/airline/controller/convert/AirlineAreaControllerConvert.java b/src/main/java/com/ruoyi/airline/controller/convert/AirlineAreaControllerConvert.java index 04e8919..166cca2 100644 --- a/src/main/java/com/ruoyi/airline/controller/convert/AirlineAreaControllerConvert.java +++ b/src/main/java/com/ruoyi/airline/controller/convert/AirlineAreaControllerConvert.java @@ -58,6 +58,9 @@ public class AirlineAreaControllerConvert extends BaseConvert @@ -86,6 +89,9 @@ public class AirlineAreaControllerConvert extends BaseConvert 转换为字符串 diff --git a/src/main/java/com/ruoyi/airline/domain/api/IAirlineAreaDomain.java b/src/main/java/com/ruoyi/airline/domain/api/IAirlineAreaDomain.java index 5f4b457..9dedc9b 100644 --- a/src/main/java/com/ruoyi/airline/domain/api/IAirlineAreaDomain.java +++ b/src/main/java/com/ruoyi/airline/domain/api/IAirlineAreaDomain.java @@ -22,4 +22,11 @@ public interface IAirlineAreaDomain { AirlineArea selectAreaById(Long id); List selectAreaListByIds(List ids); + + /** + * 根据用户ID查询空域列表 + * @param model 查询条件 + * @return 空域列表 + */ + List selectAreaListByUserId(AirlineArea model); } diff --git a/src/main/java/com/ruoyi/airline/domain/impl/AirlineAreaDomainImpl.java b/src/main/java/com/ruoyi/airline/domain/impl/AirlineAreaDomainImpl.java index 96ebf37..dbb046c 100644 --- a/src/main/java/com/ruoyi/airline/domain/impl/AirlineAreaDomainImpl.java +++ b/src/main/java/com/ruoyi/airline/domain/impl/AirlineAreaDomainImpl.java @@ -60,4 +60,10 @@ public class AirlineAreaDomainImpl implements IAirlineAreaDomain { public List selectAreaListByIds(List ids) { return AirlineAreaDomainConvert.fromList(airlineAreaMapper.selectAreaListByIds(ids)); } + + @Override + public List selectAreaListByUserId(AirlineArea model) { + AirlineAreaEntity entity = AirlineAreaDomainConvert.to(model); + return AirlineAreaDomainConvert.fromList(airlineAreaMapper.selectAreaListByUserId(entity)); + } } diff --git a/src/main/java/com/ruoyi/airline/domain/model/AirlineArea.java b/src/main/java/com/ruoyi/airline/domain/model/AirlineArea.java index 3a25b17..9f43aa7 100644 --- a/src/main/java/com/ruoyi/airline/domain/model/AirlineArea.java +++ b/src/main/java/com/ruoyi/airline/domain/model/AirlineArea.java @@ -40,6 +40,21 @@ public class AirlineArea extends ExBaseEntity { */ private String points; + /** + * 面积 + */ + private Double areaArea; + + /** + * 周长 + */ + private Double areaPerimeter; + + /** + * 半径 + */ + private Double radius; + /** * 备注 */ @@ -53,6 +68,9 @@ public class AirlineArea extends ExBaseEntity { .append("areaType", getAreaType()) .append("status", getStatus()) .append("points", getPoints()) + .append("areaArea", getAreaArea()) + .append("areaPerimeter", getAreaPerimeter()) + .append("radius", getRadius()) .append("remark", getRemark()) .toString(); } diff --git a/src/main/java/com/ruoyi/airline/mapper/AirlineAreaMapper.java b/src/main/java/com/ruoyi/airline/mapper/AirlineAreaMapper.java index 3c3ac6e..5967123 100644 --- a/src/main/java/com/ruoyi/airline/mapper/AirlineAreaMapper.java +++ b/src/main/java/com/ruoyi/airline/mapper/AirlineAreaMapper.java @@ -22,4 +22,11 @@ public interface AirlineAreaMapper { AirlineAreaEntity selectAreaById(Long id); List selectAreaListByIds(List ids); + + /** + * 根据用户ID查询空域列表 + * @param entity 查询条件 + * @return 空域列表 + */ + List selectAreaListByUserId(AirlineAreaEntity entity); } diff --git a/src/main/java/com/ruoyi/airline/mapper/entity/AirlineAreaEntity.java b/src/main/java/com/ruoyi/airline/mapper/entity/AirlineAreaEntity.java index 29d38be..ba33cce 100644 --- a/src/main/java/com/ruoyi/airline/mapper/entity/AirlineAreaEntity.java +++ b/src/main/java/com/ruoyi/airline/mapper/entity/AirlineAreaEntity.java @@ -39,6 +39,21 @@ public class AirlineAreaEntity extends ExBaseEntity { */ private String points; + /** + * 面积 + */ + private Double areaArea; + + /** + * 周长 + */ + private Double areaPerimeter; + + /** + * 半径 + */ + private Double radius; + @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) @@ -47,6 +62,9 @@ public class AirlineAreaEntity extends ExBaseEntity { .append("areaType", getAreaType()) .append("status", getStatus()) .append("points", getPoints()) + .append("areaArea", getAreaArea()) + .append("areaPerimeter", getAreaPerimeter()) + .append("radius", getRadius()) .toString(); } } \ No newline at end of file diff --git a/src/main/java/com/ruoyi/airline/mapper/entity/AirlineFileEntity.java b/src/main/java/com/ruoyi/airline/mapper/entity/AirlineFileEntity.java index dfde7cb..7a10883 100644 --- a/src/main/java/com/ruoyi/airline/mapper/entity/AirlineFileEntity.java +++ b/src/main/java/com/ruoyi/airline/mapper/entity/AirlineFileEntity.java @@ -71,8 +71,8 @@ public class AirlineFileEntity extends BaseEntity { */ private String fileMd5; - /** - * 用户ID + /** + * 分组ID */ private Long groupId; diff --git a/src/main/java/com/ruoyi/airline/service/api/IAirlineAreaGroupService.java b/src/main/java/com/ruoyi/airline/service/api/IAirlineAreaGroupService.java index 544927b..385268e 100644 --- a/src/main/java/com/ruoyi/airline/service/api/IAirlineAreaGroupService.java +++ b/src/main/java/com/ruoyi/airline/service/api/IAirlineAreaGroupService.java @@ -60,4 +60,20 @@ public interface IAirlineAreaGroupService { * @return 删除结果 */ int deleteArea(Long areaId); + + /** + * 批量移动空域到新分组 + * @param areaIds 空域ID列表 + * @param oldGroupId 原分组ID + * @param newGroupId 新分组ID + * @return 移动结果 + */ + int batchMoveAreaToNewGroup(List areaIds, Long oldGroupId, Long newGroupId); + + /** + * 根据用户ID查询空域列表 + * @param dto 查询条件 + * @return 空域列表 + */ + List selectAreaListByUserId(AirlineAreaDTO dto); } diff --git a/src/main/java/com/ruoyi/airline/service/dto/AirlineAreaDTO.java b/src/main/java/com/ruoyi/airline/service/dto/AirlineAreaDTO.java index fa4cfb4..78177f6 100644 --- a/src/main/java/com/ruoyi/airline/service/dto/AirlineAreaDTO.java +++ b/src/main/java/com/ruoyi/airline/service/dto/AirlineAreaDTO.java @@ -39,6 +39,21 @@ public class AirlineAreaDTO extends BaseEntity { */ private String points; + /** + * 面积 + */ + private Double areaArea; + + /** + * 周长 + */ + private Double areaPerimeter; + + /** + * 半径 + */ + private Double radius; + /** * 备注 */ @@ -52,6 +67,9 @@ public class AirlineAreaDTO extends BaseEntity { .append("areaType", getAreaType()) .append("status", getStatus()) .append("points", getPoints()) + .append("areaArea", getAreaArea()) + .append("areaPerimeter", getAreaPerimeter()) + .append("radius", getRadius()) .append("remark", getRemark()) .toString(); } diff --git a/src/main/java/com/ruoyi/airline/service/impl/AirlineAreaGroupServiceImpl.java b/src/main/java/com/ruoyi/airline/service/impl/AirlineAreaGroupServiceImpl.java index a3ee576..1cdab46 100644 --- a/src/main/java/com/ruoyi/airline/service/impl/AirlineAreaGroupServiceImpl.java +++ b/src/main/java/com/ruoyi/airline/service/impl/AirlineAreaGroupServiceImpl.java @@ -131,6 +131,8 @@ public class AirlineAreaGroupServiceImpl implements IAirlineAreaGroupService { AirlineAreaGroupInfo groupInfo = new AirlineAreaGroupInfo(); groupInfo.setGroupId(groupId); groupInfo.setAreaId(model.getId()); + groupInfo.setCreateBy(area.getCreateBy()); + groupInfo.setUpdateBy(area.getUpdateBy()); iAirlineAreaGroupInfoDomain.insertGroupInfo(groupInfo); } @@ -150,4 +152,37 @@ public class AirlineAreaGroupServiceImpl implements IAirlineAreaGroupService { areaModel.setId(areaId); return iAirlineAreaDomain.deleteArea(areaModel); } + + @Override + public int batchMoveAreaToNewGroup(List areaIds, Long oldGroupId, Long newGroupId) { + int movedCount = 0; + + // 遍历每个空域ID + for (Long areaId : areaIds) { + // 1、删除原分组关联 + AirlineAreaGroupInfoDTO deleteDto = new AirlineAreaGroupInfoDTO(); + deleteDto.setGroupId(oldGroupId); + deleteDto.setAreaId(areaId); + AirlineAreaGroupInfo deleteModel = AirlineAreaGroupInfoServiceConvert.to(deleteDto); + iAirlineAreaGroupInfoDomain.deleteGroupInfo(deleteModel); + + // 2、添加新分组关联 + AirlineAreaGroupInfoDTO insertDto = new AirlineAreaGroupInfoDTO(); + insertDto.setGroupId(newGroupId); + insertDto.setAreaId(areaId); + AirlineAreaGroupInfo insertModel = AirlineAreaGroupInfoServiceConvert.to(insertDto); + int result = iAirlineAreaGroupInfoDomain.insertGroupInfo(insertModel); + if (result > 0) { + movedCount++; + } + } + + return movedCount; + } + + @Override + public List selectAreaListByUserId(AirlineAreaDTO dto) { + AirlineArea model = AirlineAreaServiceConvert.to(dto); + return AirlineAreaServiceConvert.fromList(iAirlineAreaDomain.selectAreaListByUserId(model)); + } } diff --git a/src/main/resources/db/migration/V2__Create_area_tables.sql b/src/main/resources/db/migration/V2__Create_area_tables.sql index 7545b94..1e6514d 100644 --- a/src/main/resources/db/migration/V2__Create_area_tables.sql +++ b/src/main/resources/db/migration/V2__Create_area_tables.sql @@ -5,6 +5,9 @@ CREATE TABLE IF NOT EXISTS airline_area ( area_type VARCHAR(255) COMMENT '空域类型', status INT(11) DEFAULT 1 COMMENT '1 启用 0 停用。默认启用。', points JSON COMMENT '空域点列表', + area_area DOUBLE DEFAULT NULL COMMENT '面积', + area_perimeter DOUBLE DEFAULT NULL COMMENT '周长', + radius DOUBLE DEFAULT NULL COMMENT '半径', create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', create_time DATETIME COMMENT '创建时间', update_by VARCHAR(64) DEFAULT '' COMMENT '更新者', diff --git a/src/main/resources/mapper/airline/AirlineAreaMapper.xml b/src/main/resources/mapper/airline/AirlineAreaMapper.xml index 84fab55..6ee2256 100644 --- a/src/main/resources/mapper/airline/AirlineAreaMapper.xml +++ b/src/main/resources/mapper/airline/AirlineAreaMapper.xml @@ -11,6 +11,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + @@ -20,8 +23,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - insert into airline_area (name, area_type, status, points, create_by, create_time, update_by, update_time, remark) - values (#{name}, #{areaType}, #{status}, #{points}, #{createBy}, now(), #{updateBy}, now(), #{remark}) + insert into airline_area (name, area_type, status, points, area_area, area_perimeter, radius, create_by, create_time, update_by, update_time, remark) + values (#{name}, #{areaType}, #{status}, #{points}, #{areaArea}, #{areaPerimeter}, #{radius}, #{createBy}, now(), #{updateBy}, now(), #{remark}) @@ -31,6 +34,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" area_type = #{areaType}, status = #{status}, points = #{points}, + area_area = #{areaArea}, + area_perimeter = #{areaPerimeter}, + radius = #{radius}, update_by = #{updateBy}, update_time = now(), remark = #{remark} @@ -48,7 +54,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, name, area_type, status, points, create_by, create_time, update_by, update_time, remark + select id, name, area_type, status, points, area_area, area_perimeter, radius, create_by, create_time, update_by, update_time, remark from airline_area where id = #{id} + + + diff --git a/src/main/resources/mapper/airline/AirlineFileGroupMapper.xml b/src/main/resources/mapper/airline/AirlineFileGroupMapper.xml index bdba98a..8ea7091 100644 --- a/src/main/resources/mapper/airline/AirlineFileGroupMapper.xml +++ b/src/main/resources/mapper/airline/AirlineFileGroupMapper.xml @@ -39,7 +39,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - @@ -119,5 +118,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + \ No newline at end of file diff --git a/src/main/resources/mapper/airline/AirlineFileMapper.xml b/src/main/resources/mapper/airline/AirlineFileMapper.xml index 5abd366..ab0b2cb 100644 --- a/src/main/resources/mapper/airline/AirlineFileMapper.xml +++ b/src/main/resources/mapper/airline/AirlineFileMapper.xml @@ -47,7 +47,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select af.id, af.name, af.air_vendor, af.air_type, af.file_name, af.file_url, af.type, af.source, af.status, af.file_md5, af.create_by, af.create_time, af.update_by, af.update_time, af.remark from airline_file af inner join airline_file_group_info afgi on af.id = afgi.airline_id