feat:增加批量移动接口,优化查询接口逻辑

This commit is contained in:
gyb 2026-03-16 11:21:17 +08:00
parent c767572a9f
commit 7c77837cf5
5 changed files with 271 additions and 142 deletions

View File

@ -2,6 +2,7 @@ package com.ruoyi.airline.controller;
import com.ruoyi.airline.api.domain.AirlineMarkerVO; import com.ruoyi.airline.api.domain.AirlineMarkerVO;
import com.ruoyi.airline.controller.convert.AirlineMarkerControllerConvert; 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.api.IAirlineMarkerService;
import com.ruoyi.airline.service.dto.AirlineMarkerDTO; import com.ruoyi.airline.service.dto.AirlineMarkerDTO;
import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.controller.BaseController;
@ -24,28 +25,16 @@ import java.util.List;
* @author 拓恒 * @author 拓恒
*/ */
@RestController @RestController
@RequestMapping("/marker") @RequestMapping("/markerGroup")
@Tag(name = "标注管理") @Tag(name = "标注管理")
public class AirlineMarkerController extends BaseController { public class AirlineMarkerController extends BaseController {
private static final Logger log = LoggerFactory.getLogger(AirlineMarkerController.class);
@Autowired @Autowired
private IAirlineMarkerService iAirlineMarkerService; private IAirlineMarkerService iAirlineMarkerService;
/** @Autowired
* 获取标注列表 private IAirlineMarkerGroupInfoService iAirlineMarkerGroupInfoService;
*/
@GetMapping("/list")
@Operation(summary = "获取标注列表")
public TableDataInfo list(AirlineMarkerVO airlineMarkerVO) {
startPage();
airlineMarkerVO.setCreateBy(SecurityUtils.getUserId().toString());
AirlineMarkerDTO dto = AirlineMarkerControllerConvert.to(airlineMarkerVO);
List<AirlineMarkerDTO> list = iAirlineMarkerService.selectMarkerList(dto);
List<AirlineMarkerVO> result = AirlineMarkerControllerConvert.fromList(list);
return getDataTable(result);
}
/** /**
* 新增标注 * 新增标注
@ -56,7 +45,7 @@ public class AirlineMarkerController extends BaseController {
marker.setCreateBy(SecurityUtils.getUserId().toString()); marker.setCreateBy(SecurityUtils.getUserId().toString());
marker.setUpdateBy(SecurityUtils.getUserId().toString()); marker.setUpdateBy(SecurityUtils.getUserId().toString());
AirlineMarkerDTO dto = AirlineMarkerControllerConvert.to(marker); 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(); AirlineMarkerDTO dto = new AirlineMarkerDTO();
dto.setId(id); dto.setId(id);
dto.setUpdateBy(SecurityUtils.getUserId().toString()); dto.setUpdateBy(SecurityUtils.getUserId().toString());
return toAjax(iAirlineMarkerService.deleteMarker(dto)); return toAjax(iAirlineMarkerGroupInfoService.deleteMarker(dto));
}
/**
* 获取标注详情
*/
@GetMapping("/{groupId}")
@Operation(summary = "按照空域分组查询所有的标准信息")
public AjaxResult getInfo(@PathVariable Long groupId) {
List<AirlineMarkerDTO> dto = iAirlineMarkerService.selectMarkerById(groupId);
List<AirlineMarkerVO> result = AirlineMarkerControllerConvert.fromList(dto);
return success(result);
} }
@ -107,10 +85,65 @@ public class AirlineMarkerController extends BaseController {
if (markerIds == null || markerIds.isEmpty()) { if (markerIds == null || markerIds.isEmpty()) {
return error("没有需要删除的标注"); return error("没有需要删除的标注");
} }
int result = iAirlineMarkerService.batchDeleteMarker(markerIds); int result = iAirlineMarkerGroupInfoService.batchDeleteMarker(markerIds);
if (result > 0) { if (result > 0) {
return success("删除成功,共删除 " + result + " 个标注"); return success("删除成功,共删除 " + result + " 个标注");
} }
return error("删除失败"); return error("删除失败");
} }
/**
* 获取用户下所有可用标注
*/
@GetMapping("/user-available")
@Operation(summary = "获取用户下所有可用标注")
public AjaxResult getUserAvailableMarkers() {
List<AirlineMarkerDTO> dtoList = iAirlineMarkerGroupInfoService.selectUserAvailableMarkers();
List<AirlineMarkerVO> result = AirlineMarkerControllerConvert.fromList(dtoList);
return success(result);
}
/**
* 获取全部可用标注
*/
@GetMapping("/all-available")
@Operation(summary = "获取全部可用标注")
public AjaxResult getAllAvailableMarkers() {
List<AirlineMarkerDTO> dtoList = iAirlineMarkerGroupInfoService.selectAllAvailableMarkers();
List<AirlineMarkerVO> result = AirlineMarkerControllerConvert.fromList(dtoList);
return success(result);
}
/**
* 获取标注详情
*/
@GetMapping("/{groupId}")
@Operation(summary = "按照空域分组查询所有的标准信息")
public AjaxResult getInfo(@PathVariable Long groupId) {
List<AirlineMarkerDTO> dto = iAirlineMarkerGroupInfoService.selectMarkersByGroupId(groupId);
List<AirlineMarkerVO> result = AirlineMarkerControllerConvert.fromList(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

@ -1,5 +1,6 @@
package com.ruoyi.airline.service.api; package com.ruoyi.airline.service.api;
import com.ruoyi.airline.service.dto.AirlineMarkerDTO;
import com.ruoyi.airline.service.dto.AirlineMarkerGroupInfoDTO; import com.ruoyi.airline.service.dto.AirlineMarkerGroupInfoDTO;
import java.util.List; import java.util.List;
@ -11,13 +12,31 @@ import java.util.List;
*/ */
public interface IAirlineMarkerGroupInfoService { public interface IAirlineMarkerGroupInfoService {
int insertMarkerGroupInfo(AirlineMarkerGroupInfoDTO groupInfo); int insertMarker(AirlineMarkerDTO dto);
int deleteMarkerGroupInfo(Long groupId, Long markerId); int deleteMarker(AirlineMarkerDTO dto);
List<AirlineMarkerGroupInfoDTO> selectMarkerGroupInfoList(AirlineMarkerGroupInfoDTO dto); int batchDeleteMarker(List<Long> markerIds);
List<Long> selectMarkerIdsByGroupId(Long groupId); List<AirlineMarkerDTO> selectMarkersByGroupId(Long groupId);
int deleteByMarkerId(Long markerId); /**
* 获取用户下所有可用标注
* @return 标注列表
*/
List<AirlineMarkerDTO> selectUserAvailableMarkers();
/**
* 获取全部可用标注
* @return 标注列表
*/
List<AirlineMarkerDTO> selectAllAvailableMarkers();
/**
* 批量移动标注到指定分组
* @param markerIds 标注ID列表
* @param targetGroupId 目标分组ID
* @return 移动成功的数量
*/
int batchMoveMarkersToGroup(List<Long> markerIds, Long targetGroupId);
} }

View File

@ -11,16 +11,7 @@ import java.util.List;
*/ */
public interface IAirlineMarkerService { public interface IAirlineMarkerService {
int insertMarker(AirlineMarkerDTO marker);
int updateMarker(AirlineMarkerDTO marker); int updateMarker(AirlineMarkerDTO marker);
int deleteMarker(AirlineMarkerDTO dto);
List<AirlineMarkerDTO> selectMarkerList(AirlineMarkerDTO dto);
List<AirlineMarkerDTO> selectMarkerById(Long id);
int batchDeleteMarker(List<Long> markerIds);
} }

View File

@ -1,16 +1,19 @@
package com.ruoyi.airline.service.impl; 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.api.IAirlineMarkerGroupInfoDomain;
import com.ruoyi.airline.domain.model.AirlineMarker;
import com.ruoyi.airline.domain.model.AirlineMarkerGroupInfo; import com.ruoyi.airline.domain.model.AirlineMarkerGroupInfo;
import com.ruoyi.airline.service.api.IAirlineMarkerGroupInfoService; import com.ruoyi.airline.service.api.IAirlineMarkerGroupInfoService;
import com.ruoyi.airline.service.convert.AirlineMarkerGroupInfoServiceConvert; import com.ruoyi.airline.service.convert.AirlineMarkerServiceConvert;
import com.ruoyi.airline.service.dto.AirlineMarkerGroupInfoDTO; import com.ruoyi.airline.service.dto.AirlineMarkerDTO;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.utils.SecurityUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -26,35 +29,194 @@ public class AirlineMarkerGroupInfoServiceImpl implements IAirlineMarkerGroupInf
@Autowired @Autowired
private IAirlineMarkerGroupInfoDomain iAirlineMarkerGroupInfoDomain; private IAirlineMarkerGroupInfoDomain iAirlineMarkerGroupInfoDomain;
@Override @Autowired
public int insertMarkerGroupInfo(AirlineMarkerGroupInfoDTO groupInfo) { private IAirlineMarkerDomain iAirlineMarkerDomain;
AirlineMarkerGroupInfo model = AirlineMarkerGroupInfoServiceConvert.to(groupInfo);
return iAirlineMarkerGroupInfoDomain.insertMarkerGroupInfo(model);
}
@Override @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(dto.getGroupId());
model.setMarkerId(dto.getId());
String userId = SecurityUtils.getUserId().toString();
model.setDeletedBy(userId);
iAirlineMarkerGroupInfoDomain.deleteMarkerGroupInfo(model);
// 再置失效
return iAirlineMarkerDomain.deleteMarker(marker);
}
@Override
public int batchDeleteMarker(List<Long> markerIds) {
if (markerIds == null || markerIds.isEmpty()) {
return 0;
}
int deletedCount = 0;
for (Long markerId : markerIds) {
// 先删除分组关系
AirlineMarkerGroupInfo model = new AirlineMarkerGroupInfo(); AirlineMarkerGroupInfo model = new AirlineMarkerGroupInfo();
model.setGroupId(groupId);
model.setMarkerId(markerId); model.setMarkerId(markerId);
String userId = SecurityUtils.getUserId().toString(); String userId = SecurityUtils.getUserId().toString();
model.setDeletedBy(userId); model.setDeletedBy(userId);
return iAirlineMarkerGroupInfoDomain.deleteMarkerGroupInfo(model); 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 @Override
public List<AirlineMarkerGroupInfoDTO> selectMarkerGroupInfoList(AirlineMarkerGroupInfoDTO dto) { public List<AirlineMarkerDTO> selectMarkersByGroupId(Long groupId) {
AirlineMarkerGroupInfo model = AirlineMarkerGroupInfoServiceConvert.to(dto); // 先获取该分组下的所有标注ID
return AirlineMarkerGroupInfoServiceConvert.fromList(iAirlineMarkerGroupInfoDomain.selectMarkerGroupInfoList(model)); List<Long> markerIds = iAirlineMarkerGroupInfoDomain.selectMarkerIdsByGroupId(groupId);
if (markerIds == null || markerIds.isEmpty()) {
return List.of();
}
// 根据ID列表查询标注详情
List<AirlineMarker> markers = iAirlineMarkerDomain.selectMarkerListByIds(markerIds);
// 转换为DTO并返回
return AirlineMarkerServiceConvert.fromList(markers);
} }
@Override @Override
public List<Long> selectMarkerIdsByGroupId(Long groupId) { public List<AirlineMarkerDTO> selectUserAvailableMarkers() {
return iAirlineMarkerGroupInfoDomain.selectMarkerIdsByGroupId(groupId); // 先获取所有未被删除的标注分组关系
AirlineMarkerGroupInfo groupInfo = new AirlineMarkerGroupInfo();
// 只查询未被删除的记录deletedBy null
List<AirlineMarkerGroupInfo> groupInfos = iAirlineMarkerGroupInfoDomain.selectMarkerGroupInfoList(groupInfo);
if (groupInfos == null || groupInfos.isEmpty()) {
return List.of();
}
// 提取标注ID列表
List<Long> markerIds = groupInfos.stream()
.map(AirlineMarkerGroupInfo::getMarkerId)
.distinct()
.collect(java.util.stream.Collectors.toList());
if (markerIds.isEmpty()) {
return List.of();
}
// 根据标注ID列表查询标注详情
List<AirlineMarker> markers = iAirlineMarkerDomain.selectMarkerListByIds(markerIds);
if (markers == null || markers.isEmpty()) {
return List.of();
}
// 过滤出当前用户创建的且启用的标注
String currentUserId = SecurityUtils.getUserId().toString();
List<AirlineMarkerDTO> availableMarkers = new ArrayList<>();
for (AirlineMarker airlineMarker : markers) {
if (currentUserId.equals(airlineMarker.getCreateBy()) && airlineMarker.getStatus() == 1) {
availableMarkers.add(AirlineMarkerServiceConvert.from(airlineMarker));
}
}
return availableMarkers;
} }
@Override @Override
public int deleteByMarkerId(Long markerId) { public List<AirlineMarkerDTO> selectAllAvailableMarkers() {
return iAirlineMarkerGroupInfoDomain.deleteByMarkerId(markerId); // 先获取所有未被删除的标注分组关系
AirlineMarkerGroupInfo groupInfo = new AirlineMarkerGroupInfo();
// 只查询未被删除的记录deletedBy null
List<AirlineMarkerGroupInfo> groupInfos = iAirlineMarkerGroupInfoDomain.selectMarkerGroupInfoList(groupInfo);
if (groupInfos == null || groupInfos.isEmpty()) {
return List.of();
}
// 提取标注ID列表
List<Long> markerIds = groupInfos.stream()
.map(AirlineMarkerGroupInfo::getMarkerId)
.distinct()
.collect(java.util.stream.Collectors.toList());
if (markerIds.isEmpty()) {
return List.of();
}
// 根据标注ID列表查询标注详情
List<AirlineMarker> markers = iAirlineMarkerDomain.selectMarkerListByIds(markerIds);
if (markers == null || markers.isEmpty()) {
return List.of();
}
// 过滤出启用的标注
List<AirlineMarkerDTO> availableMarkers = new ArrayList<>();
for (AirlineMarker airlineMarker : markers) {
if (airlineMarker.getStatus() == 1) {
availableMarkers.add(AirlineMarkerServiceConvert.from(airlineMarker));
}
}
return availableMarkers;
}
@Override
public int batchMoveMarkersToGroup(List<Long> 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;
} }
} }

View File

@ -1,7 +1,9 @@
package com.ruoyi.airline.service.impl; package com.ruoyi.airline.service.impl;
import com.ruoyi.airline.domain.api.IAirlineMarkerDomain; 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.AirlineMarker;
import com.ruoyi.airline.domain.model.AirlineMarkerGroupInfo;
import com.ruoyi.airline.service.api.IAirlineMarkerService; import com.ruoyi.airline.service.api.IAirlineMarkerService;
import com.ruoyi.airline.service.api.IAirlineMarkerGroupInfoService; import com.ruoyi.airline.service.api.IAirlineMarkerGroupInfoService;
import com.ruoyi.airline.service.convert.AirlineMarkerServiceConvert; import com.ruoyi.airline.service.convert.AirlineMarkerServiceConvert;
@ -29,26 +31,7 @@ public class AirlineMarkerServiceImpl implements IAirlineMarkerService {
@Autowired @Autowired
private IAirlineMarkerDomain iAirlineMarkerDomain; 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 @Override
public int updateMarker(AirlineMarkerDTO dto) { public int updateMarker(AirlineMarkerDTO dto) {
@ -56,64 +39,5 @@ public class AirlineMarkerServiceImpl implements IAirlineMarkerService {
return iAirlineMarkerDomain.updateMarker(model); 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<AirlineMarkerDTO> selectMarkerList(AirlineMarkerDTO dto) {
// TODO 需要修改为查所有生效的
AirlineMarker marker = AirlineMarkerServiceConvert.to(dto);
List<AirlineMarker> airlineMarker = iAirlineMarkerDomain.selectMarkerList(marker);
return AirlineMarkerServiceConvert.fromList(airlineMarker);
}
@Override
public List<AirlineMarkerDTO> selectMarkerById(Long groupId) {
AirlineMarkerGroupInfoDTO groupInfoDTO = new AirlineMarkerGroupInfoDTO();
groupInfoDTO.setGroupId(groupId);
List<AirlineMarkerGroupInfoDTO> groupInfos = iAirlineMarkerGroupInfoService.selectMarkerGroupInfoList(groupInfoDTO);
List<AirlineMarkerDTO> 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<Long> 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;
}
} }