From 7c77837cf5579a46f7aea4caf68af06698149688 Mon Sep 17 00:00:00 2001 From: gyb Date: Mon, 16 Mar 2026 11:21:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E6=8E=A5=E5=8F=A3=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AirlineMarkerController.java | 93 +++++--- .../api/IAirlineMarkerGroupInfoService.java | 31 ++- .../service/api/IAirlineMarkerService.java | 11 +- .../AirlineMarkerGroupInfoServiceImpl.java | 198 ++++++++++++++++-- .../impl/AirlineMarkerServiceImpl.java | 80 +------ 5 files changed, 271 insertions(+), 142 deletions(-) diff --git a/src/main/java/com/ruoyi/airline/controller/AirlineMarkerController.java b/src/main/java/com/ruoyi/airline/controller/AirlineMarkerController.java index 2e32f77..e90d418 100644 --- a/src/main/java/com/ruoyi/airline/controller/AirlineMarkerController.java +++ b/src/main/java/com/ruoyi/airline/controller/AirlineMarkerController.java @@ -2,6 +2,7 @@ package com.ruoyi.airline.controller; import com.ruoyi.airline.api.domain.AirlineMarkerVO; import com.ruoyi.airline.controller.convert.AirlineMarkerControllerConvert; +import com.ruoyi.airline.service.api.IAirlineMarkerGroupInfoService; import com.ruoyi.airline.service.api.IAirlineMarkerService; import com.ruoyi.airline.service.dto.AirlineMarkerDTO; import com.ruoyi.common.core.web.controller.BaseController; @@ -24,28 +25,16 @@ import java.util.List; * @author 拓恒 */ @RestController -@RequestMapping("/marker") +@RequestMapping("/markerGroup") @Tag(name = "标注管理") public class AirlineMarkerController extends BaseController { - private static final Logger log = LoggerFactory.getLogger(AirlineMarkerController.class); @Autowired private IAirlineMarkerService iAirlineMarkerService; - /** - * 获取标注列表 - */ - @GetMapping("/list") - @Operation(summary = "获取标注列表") - public TableDataInfo list(AirlineMarkerVO airlineMarkerVO) { - startPage(); - airlineMarkerVO.setCreateBy(SecurityUtils.getUserId().toString()); - AirlineMarkerDTO dto = AirlineMarkerControllerConvert.to(airlineMarkerVO); - List list = iAirlineMarkerService.selectMarkerList(dto); - List result = AirlineMarkerControllerConvert.fromList(list); - return getDataTable(result); - } + @Autowired + private IAirlineMarkerGroupInfoService iAirlineMarkerGroupInfoService; /** * 新增标注 @@ -56,7 +45,7 @@ public class AirlineMarkerController extends BaseController { marker.setCreateBy(SecurityUtils.getUserId().toString()); marker.setUpdateBy(SecurityUtils.getUserId().toString()); AirlineMarkerDTO dto = AirlineMarkerControllerConvert.to(marker); - return toAjax(iAirlineMarkerService.insertMarker(dto)); + return toAjax(iAirlineMarkerGroupInfoService.insertMarker(dto)); } /** @@ -68,18 +57,7 @@ public class AirlineMarkerController extends BaseController { AirlineMarkerDTO dto = new AirlineMarkerDTO(); dto.setId(id); dto.setUpdateBy(SecurityUtils.getUserId().toString()); - return toAjax(iAirlineMarkerService.deleteMarker(dto)); - } - - /** - * 获取标注详情 - */ - @GetMapping("/{groupId}") - @Operation(summary = "按照空域分组查询所有的标准信息") - public AjaxResult getInfo(@PathVariable Long groupId) { - List dto = iAirlineMarkerService.selectMarkerById(groupId); - List result = AirlineMarkerControllerConvert.fromList(dto); - return success(result); + return toAjax(iAirlineMarkerGroupInfoService.deleteMarker(dto)); } @@ -107,10 +85,65 @@ public class AirlineMarkerController extends BaseController { if (markerIds == null || markerIds.isEmpty()) { return error("没有需要删除的标注"); } - int result = iAirlineMarkerService.batchDeleteMarker(markerIds); + int result = iAirlineMarkerGroupInfoService.batchDeleteMarker(markerIds); if (result > 0) { return success("删除成功,共删除 " + result + " 个标注"); } return error("删除失败"); } -} + + + /** + * 获取用户下所有可用标注 + */ + @GetMapping("/user-available") + @Operation(summary = "获取用户下所有可用标注") + public AjaxResult getUserAvailableMarkers() { + List dtoList = iAirlineMarkerGroupInfoService.selectUserAvailableMarkers(); + List result = AirlineMarkerControllerConvert.fromList(dtoList); + return success(result); + } + + /** + * 获取全部可用标注 + */ + @GetMapping("/all-available") + @Operation(summary = "获取全部可用标注") + public AjaxResult getAllAvailableMarkers() { + List dtoList = iAirlineMarkerGroupInfoService.selectAllAvailableMarkers(); + List result = AirlineMarkerControllerConvert.fromList(dtoList); + return success(result); + } + + + /** + * 获取标注详情 + */ + @GetMapping("/{groupId}") + @Operation(summary = "按照空域分组查询所有的标准信息") + public AjaxResult getInfo(@PathVariable Long groupId) { + List dto = iAirlineMarkerGroupInfoService.selectMarkersByGroupId(groupId); + List result = AirlineMarkerControllerConvert.fromList(dto); + return success(result); + } + + /** + * 批量移动分组的接口 + */ + @PostMapping("/move/{targetGroupId}") + @Operation(summary = "批量移动标注到指定分组") + public AjaxResult batchMoveToGroup(@RequestBody List 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("移动失败"); + } + +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/airline/service/api/IAirlineMarkerGroupInfoService.java b/src/main/java/com/ruoyi/airline/service/api/IAirlineMarkerGroupInfoService.java index 504b5ec..b842343 100644 --- a/src/main/java/com/ruoyi/airline/service/api/IAirlineMarkerGroupInfoService.java +++ b/src/main/java/com/ruoyi/airline/service/api/IAirlineMarkerGroupInfoService.java @@ -1,5 +1,6 @@ package com.ruoyi.airline.service.api; +import com.ruoyi.airline.service.dto.AirlineMarkerDTO; import com.ruoyi.airline.service.dto.AirlineMarkerGroupInfoDTO; import java.util.List; @@ -11,13 +12,31 @@ import java.util.List; */ public interface IAirlineMarkerGroupInfoService { - int insertMarkerGroupInfo(AirlineMarkerGroupInfoDTO groupInfo); + int insertMarker(AirlineMarkerDTO dto); - int deleteMarkerGroupInfo(Long groupId, Long markerId); + int deleteMarker(AirlineMarkerDTO dto); - List selectMarkerGroupInfoList(AirlineMarkerGroupInfoDTO dto); - - List selectMarkerIdsByGroupId(Long groupId); + int batchDeleteMarker(List markerIds); - int deleteByMarkerId(Long markerId); + List selectMarkersByGroupId(Long groupId); + + /** + * 获取用户下所有可用标注 + * @return 标注列表 + */ + List selectUserAvailableMarkers(); + + /** + * 获取全部可用标注 + * @return 标注列表 + */ + List selectAllAvailableMarkers(); + + /** + * 批量移动标注到指定分组 + * @param markerIds 标注ID列表 + * @param targetGroupId 目标分组ID + * @return 移动成功的数量 + */ + int batchMoveMarkersToGroup(List markerIds, Long targetGroupId); } \ No newline at end of file diff --git a/src/main/java/com/ruoyi/airline/service/api/IAirlineMarkerService.java b/src/main/java/com/ruoyi/airline/service/api/IAirlineMarkerService.java index d191890..09eea58 100644 --- a/src/main/java/com/ruoyi/airline/service/api/IAirlineMarkerService.java +++ b/src/main/java/com/ruoyi/airline/service/api/IAirlineMarkerService.java @@ -11,16 +11,7 @@ import java.util.List; */ public interface IAirlineMarkerService { - int insertMarker(AirlineMarkerDTO marker); - int updateMarker(AirlineMarkerDTO marker); - int deleteMarker(AirlineMarkerDTO dto); - - List selectMarkerList(AirlineMarkerDTO dto); - - List selectMarkerById(Long id); - - - int batchDeleteMarker(List markerIds); } + diff --git a/src/main/java/com/ruoyi/airline/service/impl/AirlineMarkerGroupInfoServiceImpl.java b/src/main/java/com/ruoyi/airline/service/impl/AirlineMarkerGroupInfoServiceImpl.java index 26e6252..c74d62c 100644 --- a/src/main/java/com/ruoyi/airline/service/impl/AirlineMarkerGroupInfoServiceImpl.java +++ b/src/main/java/com/ruoyi/airline/service/impl/AirlineMarkerGroupInfoServiceImpl.java @@ -1,16 +1,19 @@ package com.ruoyi.airline.service.impl; +import com.ruoyi.airline.domain.api.IAirlineMarkerDomain; import com.ruoyi.airline.domain.api.IAirlineMarkerGroupInfoDomain; +import com.ruoyi.airline.domain.model.AirlineMarker; import com.ruoyi.airline.domain.model.AirlineMarkerGroupInfo; import com.ruoyi.airline.service.api.IAirlineMarkerGroupInfoService; -import com.ruoyi.airline.service.convert.AirlineMarkerGroupInfoServiceConvert; -import com.ruoyi.airline.service.dto.AirlineMarkerGroupInfoDTO; +import com.ruoyi.airline.service.convert.AirlineMarkerServiceConvert; +import com.ruoyi.airline.service.dto.AirlineMarkerDTO; import com.ruoyi.common.security.utils.SecurityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; /** @@ -26,35 +29,194 @@ public class AirlineMarkerGroupInfoServiceImpl implements IAirlineMarkerGroupInf @Autowired private IAirlineMarkerGroupInfoDomain iAirlineMarkerGroupInfoDomain; - @Override - public int insertMarkerGroupInfo(AirlineMarkerGroupInfoDTO groupInfo) { - AirlineMarkerGroupInfo model = AirlineMarkerGroupInfoServiceConvert.to(groupInfo); - return iAirlineMarkerGroupInfoDomain.insertMarkerGroupInfo(model); - } + @Autowired + private IAirlineMarkerDomain iAirlineMarkerDomain; + @Override - public int deleteMarkerGroupInfo(Long groupId, Long markerId) { + public int insertMarker(AirlineMarkerDTO dto) { + AirlineMarker model = AirlineMarkerServiceConvert.to(dto); + int result = iAirlineMarkerDomain.insertMarker(model); + + // 处理分组关系 + if (result > 0 && dto.getGroupId() != null) { + AirlineMarkerGroupInfo groupInfo = new AirlineMarkerGroupInfo(); + groupInfo.setGroupId(dto.getGroupId()); + groupInfo.setMarkerId(model.getId()); + groupInfo.setCreateBy(dto.getCreateBy()); + groupInfo.setUpdateBy(dto.getUpdateBy()); + iAirlineMarkerGroupInfoDomain.insertMarkerGroupInfo(groupInfo); + } + return result; + } + + public int deleteMarker(AirlineMarkerDTO dto) { + AirlineMarker marker = AirlineMarkerServiceConvert.to(dto); + // 先删除分组关系 AirlineMarkerGroupInfo model = new AirlineMarkerGroupInfo(); - model.setGroupId(groupId); - model.setMarkerId(markerId); +// model.setGroupId(dto.getGroupId()); + model.setMarkerId(dto.getId()); String userId = SecurityUtils.getUserId().toString(); model.setDeletedBy(userId); - return iAirlineMarkerGroupInfoDomain.deleteMarkerGroupInfo(model); + iAirlineMarkerGroupInfoDomain.deleteMarkerGroupInfo(model); + + // 再置失效 + return iAirlineMarkerDomain.deleteMarker(marker); + } + + + + @Override + public int batchDeleteMarker(List markerIds) { + if (markerIds == null || markerIds.isEmpty()) { + return 0; + } + + int deletedCount = 0; + for (Long markerId : markerIds) { + + // 先删除分组关系 + AirlineMarkerGroupInfo model = new AirlineMarkerGroupInfo(); + model.setMarkerId(markerId); + String userId = SecurityUtils.getUserId().toString(); + model.setDeletedBy(userId); + iAirlineMarkerGroupInfoDomain.deleteMarkerGroupInfo(model); + + // 再置失效 + AirlineMarker marker = new AirlineMarker(); + marker.setId(markerId); + marker.setUpdateBy(SecurityUtils.getUserId().toString()); + int result = iAirlineMarkerDomain.deleteMarker(marker); + if (result > 0) { + deletedCount++; + } + + } + + return deletedCount; } @Override - public List selectMarkerGroupInfoList(AirlineMarkerGroupInfoDTO dto) { - AirlineMarkerGroupInfo model = AirlineMarkerGroupInfoServiceConvert.to(dto); - return AirlineMarkerGroupInfoServiceConvert.fromList(iAirlineMarkerGroupInfoDomain.selectMarkerGroupInfoList(model)); + public List selectMarkersByGroupId(Long groupId) { + // 先获取该分组下的所有标注ID + List markerIds = iAirlineMarkerGroupInfoDomain.selectMarkerIdsByGroupId(groupId); + if (markerIds == null || markerIds.isEmpty()) { + return List.of(); + } + // 根据ID列表查询标注详情 + List markers = iAirlineMarkerDomain.selectMarkerListByIds(markerIds); + // 转换为DTO并返回 + return AirlineMarkerServiceConvert.fromList(markers); } @Override - public List selectMarkerIdsByGroupId(Long groupId) { - return iAirlineMarkerGroupInfoDomain.selectMarkerIdsByGroupId(groupId); + public List selectUserAvailableMarkers() { + // 先获取所有未被删除的标注分组关系 + AirlineMarkerGroupInfo groupInfo = new AirlineMarkerGroupInfo(); + // 只查询未被删除的记录(deletedBy 为 null) + List groupInfos = iAirlineMarkerGroupInfoDomain.selectMarkerGroupInfoList(groupInfo); + + if (groupInfos == null || groupInfos.isEmpty()) { + return List.of(); + } + + // 提取标注ID列表 + List markerIds = groupInfos.stream() + .map(AirlineMarkerGroupInfo::getMarkerId) + .distinct() + .collect(java.util.stream.Collectors.toList()); + + if (markerIds.isEmpty()) { + return List.of(); + } + + // 根据标注ID列表查询标注详情 + List markers = iAirlineMarkerDomain.selectMarkerListByIds(markerIds); + + if (markers == null || markers.isEmpty()) { + return List.of(); + } + + // 过滤出当前用户创建的且启用的标注 + String currentUserId = SecurityUtils.getUserId().toString(); + List availableMarkers = new ArrayList<>(); + for (AirlineMarker airlineMarker : markers) { + if (currentUserId.equals(airlineMarker.getCreateBy()) && airlineMarker.getStatus() == 1) { + availableMarkers.add(AirlineMarkerServiceConvert.from(airlineMarker)); + } + } + + return availableMarkers; } @Override - public int deleteByMarkerId(Long markerId) { - return iAirlineMarkerGroupInfoDomain.deleteByMarkerId(markerId); + public List selectAllAvailableMarkers() { + // 先获取所有未被删除的标注分组关系 + AirlineMarkerGroupInfo groupInfo = new AirlineMarkerGroupInfo(); + // 只查询未被删除的记录(deletedBy 为 null) + List groupInfos = iAirlineMarkerGroupInfoDomain.selectMarkerGroupInfoList(groupInfo); + + if (groupInfos == null || groupInfos.isEmpty()) { + return List.of(); + } + + // 提取标注ID列表 + List markerIds = groupInfos.stream() + .map(AirlineMarkerGroupInfo::getMarkerId) + .distinct() + .collect(java.util.stream.Collectors.toList()); + + if (markerIds.isEmpty()) { + return List.of(); + } + + // 根据标注ID列表查询标注详情 + List markers = iAirlineMarkerDomain.selectMarkerListByIds(markerIds); + + if (markers == null || markers.isEmpty()) { + return List.of(); + } + + // 过滤出启用的标注 + List availableMarkers = new ArrayList<>(); + for (AirlineMarker airlineMarker : markers) { + if (airlineMarker.getStatus() == 1) { + availableMarkers.add(AirlineMarkerServiceConvert.from(airlineMarker)); + } + } + + return availableMarkers; + } + + @Override + public int batchMoveMarkersToGroup(List markerIds, Long targetGroupId) { + if (markerIds == null || markerIds.isEmpty() || targetGroupId == null) { + return 0; + } + + int movedCount = 0; + String currentUserId = SecurityUtils.getUserId().toString(); + + for (Long markerId : markerIds) { + // 先删除旧的分组关系 + AirlineMarkerGroupInfo oldGroupInfo = new AirlineMarkerGroupInfo(); + oldGroupInfo.setMarkerId(markerId); + oldGroupInfo.setDeletedBy(currentUserId); + iAirlineMarkerGroupInfoDomain.deleteMarkerGroupInfo(oldGroupInfo); + + // 然后创建新的分组关系 + AirlineMarkerGroupInfo newGroupInfo = new AirlineMarkerGroupInfo(); + newGroupInfo.setGroupId(targetGroupId); + newGroupInfo.setMarkerId(markerId); + newGroupInfo.setCreateBy(currentUserId); + newGroupInfo.setUpdateBy(currentUserId); + + int result = iAirlineMarkerGroupInfoDomain.insertMarkerGroupInfo(newGroupInfo); + if (result > 0) { + movedCount++; + } + } + + return movedCount; } } diff --git a/src/main/java/com/ruoyi/airline/service/impl/AirlineMarkerServiceImpl.java b/src/main/java/com/ruoyi/airline/service/impl/AirlineMarkerServiceImpl.java index 6277f0e..afbb6c1 100644 --- a/src/main/java/com/ruoyi/airline/service/impl/AirlineMarkerServiceImpl.java +++ b/src/main/java/com/ruoyi/airline/service/impl/AirlineMarkerServiceImpl.java @@ -1,7 +1,9 @@ package com.ruoyi.airline.service.impl; import com.ruoyi.airline.domain.api.IAirlineMarkerDomain; +import com.ruoyi.airline.domain.api.IAirlineMarkerGroupInfoDomain; import com.ruoyi.airline.domain.model.AirlineMarker; +import com.ruoyi.airline.domain.model.AirlineMarkerGroupInfo; import com.ruoyi.airline.service.api.IAirlineMarkerService; import com.ruoyi.airline.service.api.IAirlineMarkerGroupInfoService; import com.ruoyi.airline.service.convert.AirlineMarkerServiceConvert; @@ -29,26 +31,7 @@ public class AirlineMarkerServiceImpl implements IAirlineMarkerService { @Autowired private IAirlineMarkerDomain iAirlineMarkerDomain; - @Autowired - private IAirlineMarkerGroupInfoService iAirlineMarkerGroupInfoService; - @Override - public int insertMarker(AirlineMarkerDTO dto) { - AirlineMarker model = AirlineMarkerServiceConvert.to(dto); - int result = iAirlineMarkerDomain.insertMarker(model); - - // 处理分组关系 - if (result > 0 && dto.getGroupId() != null) { - AirlineMarkerGroupInfoDTO groupInfo = new AirlineMarkerGroupInfoDTO(); - groupInfo.setGroupId(dto.getGroupId()); - groupInfo.setMarkerId(model.getId()); - groupInfo.setCreateBy(dto.getCreateBy()); - groupInfo.setUpdateBy(dto.getUpdateBy()); - iAirlineMarkerGroupInfoService.insertMarkerGroupInfo(groupInfo); - } - - return result; - } @Override public int updateMarker(AirlineMarkerDTO dto) { @@ -56,64 +39,5 @@ public class AirlineMarkerServiceImpl implements IAirlineMarkerService { return iAirlineMarkerDomain.updateMarker(model); } - @Override - public int deleteMarker(AirlineMarkerDTO dto) { - AirlineMarker marker = AirlineMarkerServiceConvert.to(dto); - // 先删除分组关系 - iAirlineMarkerGroupInfoService.deleteMarkerGroupInfo(dto.getGroupId(), dto.getId()); - // 再置失效 - return iAirlineMarkerDomain.deleteMarker(marker); - } - @Override - public List selectMarkerList(AirlineMarkerDTO dto) { - // TODO 需要修改为查所有生效的 - AirlineMarker marker = AirlineMarkerServiceConvert.to(dto); - List airlineMarker = iAirlineMarkerDomain.selectMarkerList(marker); - return AirlineMarkerServiceConvert.fromList(airlineMarker); - } - - - @Override - public List selectMarkerById(Long groupId) { - AirlineMarkerGroupInfoDTO groupInfoDTO = new AirlineMarkerGroupInfoDTO(); - groupInfoDTO.setGroupId(groupId); - List groupInfos = iAirlineMarkerGroupInfoService.selectMarkerGroupInfoList(groupInfoDTO); - List result= new ArrayList<>(); - for (AirlineMarkerGroupInfoDTO groupInfo : groupInfos) { - AirlineMarker model = iAirlineMarkerDomain.selectMarkerById(groupInfo.getMarkerId()); - AirlineMarkerDTO dto = AirlineMarkerServiceConvert.from(model); - dto.setGroupId(groupId); - result.add(dto); - } - - return result; - } - - - @Override - public int batchDeleteMarker(List markerIds) { - if (markerIds == null || markerIds.isEmpty()) { - return 0; - } - - int deletedCount = 0; - for (Long markerId : markerIds) { - - // 先删除分组关系 - iAirlineMarkerGroupInfoService.deleteByMarkerId(markerId); - - // 再置失效 - AirlineMarker marker = new AirlineMarker(); - marker.setId(markerId); - marker.setUpdateBy(SecurityUtils.getUserId().toString()); - int result = iAirlineMarkerDomain.deleteMarker(marker); - if (result > 0) { - deletedCount++; - } - - } - - return deletedCount; - } }