feat:增加空域相关功能接口

This commit is contained in:
gyb 2026-02-25 15:16:28 +08:00
parent bd79084fa0
commit f2b97009ab
38 changed files with 2023 additions and 0 deletions

View File

@ -0,0 +1,138 @@
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());
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());
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) {
// 使用转换类进行转换
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) {
// 使用转换类进行转换
AirlineAreaDTO dto = AirlineAreaControllerConvert.to(area);
return toAjax(iAirlineAreaGroupService.insertAreaWithGroup(groupId, dto));
}
}

View File

@ -0,0 +1,91 @@
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.service.dto.AirlineAreaDTO;
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.setRemark(dto.getRemark());
// 这里不需要将字符串转换为 List<PointInfo>因为通常是从前端到后端的转换
return vo;
}
@Override
protected AirlineAreaDTO innerTo(AirlineAreaVO vo) {
if (vo == null) {
return null;
}
AirlineAreaDTO dto = new AirlineAreaDTO();
dto.setId(vo.getId());
dto.setName(vo.getName());
dto.setAreaType(vo.getAreaType());
dto.setStatus(vo.getStatus());
dto.setRemark(vo.getRemark());
// 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());
}
}
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,25 @@
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);
}

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,43 @@
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);
}
}

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,58 @@
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);
return airlineAreaMapper.insertArea(entity);
}
@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));
}
}

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,59 @@
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 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("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,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,25 @@
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);
}

View File

@ -0,0 +1,52 @@
package com.ruoyi.airline.mapper.entity;
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;
/**
* 空域列表 airline_area
*
* @author 拓恒
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AirlineAreaEntity extends ExBaseEntity {
/**
* 主键ID
*/
private Long id;
/**
* 空域名称
*/
private String name;
/**
* 空域类型
*/
private String areaType;
/**
* 1 启用 0 停用默认启用
*/
private Integer status;
/**
* 空域点列表
*/
private String points;
@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())
.toString();
}
}

View File

@ -0,0 +1,40 @@
package com.ruoyi.airline.mapper.entity;
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;
/**
* 空域分组表 airline_area_group
*
* @author 拓恒
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AirlineAreaGroupEntity extends ExBaseEntity {
/**
* 用户ID
*/
private Long groupId;
/**
* 分组名称
*/
private String groupName;
/**
* 用户ID分组自带用户归属后期权限都是基于用户ID进行
*/
private Long userId;
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("groupId", getGroupId())
.append("groupName", getGroupName())
.append("userId", getUserId())
.toString();
}
}

View File

@ -0,0 +1,40 @@
package com.ruoyi.airline.mapper.entity;
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;
/**
* 空域分组明细表 airline_area_group_info
*
* @author 拓恒
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AirlineAreaGroupInfoEntity 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,21 @@
package com.ruoyi.airline.service.api;
import com.ruoyi.airline.service.dto.AirlineAreaGroupInfoDTO;
import java.util.List;
/**
* 空域分组明细管理
*
* @author 拓恒
*/
public interface IAirlineAreaGroupInfoService {
int insertGroupInfo(AirlineAreaGroupInfoDTO groupInfo);
int deleteGroupInfo(Long userId, Long groupId, Long areaId);
List<AirlineAreaGroupInfoDTO> selectGroupInfoList(AirlineAreaGroupInfoDTO dto);
List<Long> selectAreaIdsByGroupId(Long groupId);
}

View File

@ -0,0 +1,56 @@
package com.ruoyi.airline.service.api;
import com.ruoyi.airline.service.dto.AirlineAreaDTO;
import com.ruoyi.airline.service.dto.AirlineAreaGroupDTO;
import java.util.List;
/**
* 空域分组管理
*
* @author 拓恒
*/
public interface IAirlineAreaGroupService {
int deletegroupById(Long userId, Long groupId);
/**
* 检查名称是否已经存在
* @param group
* @return
*/
boolean checkGroupNameUnique(AirlineAreaGroupDTO group);
int updateGroup(AirlineAreaGroupDTO group);
int insertGroup(AirlineAreaGroupDTO group);
List<AirlineAreaGroupDTO> selectGroupList(AirlineAreaGroupDTO dto);
// AirlineAreaGroupDTO selectAirLineListsByGroupId(Long userId, Long groupId);
// List<AirlineAreaDTO> selectAirlineListByUserId(AirlineAreaDTO dto);
/**
* 按照空域分组查询所有的空域信息包含坐标点信息
* @param userId 用户ID
* @param groupId 分组ID
* @return 空域分组详情
*/
AirlineAreaGroupDTO selectAirspaceListByGroupId(Long userId, Long groupId);
/**
* 修改空域信息包含坐标点信息
* @param area 空域信息
* @return 修改结果
*/
int updateAreaWithPoints(AirlineAreaDTO area);
/**
* 在指定分组下新增空域
* @param groupId 分组ID
* @param area 空域信息
* @return 新增结果
*/
int insertAreaWithGroup(Long groupId, AirlineAreaDTO area);
}

View File

@ -0,0 +1,23 @@
package com.ruoyi.airline.service.api;
import com.ruoyi.airline.service.dto.AirlineAreaDTO;
import java.util.List;
/**
* 空域管理
*
* @author 拓恒
*/
public interface IAirlineAreaService {
int insertArea(AirlineAreaDTO area);
int updateArea(AirlineAreaDTO area);
int deleteArea(Long id);
List<AirlineAreaDTO> selectAreaList(AirlineAreaDTO dto);
AirlineAreaDTO selectAreaById(Long id);
}

View File

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

View File

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

View File

@ -0,0 +1,44 @@
package com.ruoyi.airline.service.convert;
import com.ruoyi.common.core.utils.BaseConvert;
import com.ruoyi.airline.domain.model.AirlineArea;
import com.ruoyi.airline.service.dto.AirlineAreaDTO;
import java.util.List;
/**
* 空域Domain转换类
* 用于Domain模型和Service DTO之间的转换
*
* @author ruoyi
* @date 2026-02-25
*/
public class AirlineAreaServiceConvert extends BaseConvert<AirlineArea, AirlineAreaDTO>
{
private static final AirlineAreaServiceConvert INSTANCE = new AirlineAreaServiceConvert();
private AirlineAreaServiceConvert() {
super(AirlineArea.class, AirlineAreaDTO.class);
}
public static AirlineAreaDTO from(AirlineArea model)
{
return INSTANCE.innerFrom(model);
}
public static AirlineArea to(AirlineAreaDTO dto)
{
return INSTANCE.innerTo(dto);
}
public static List<AirlineAreaDTO> fromList(List<AirlineArea> modelList)
{
return INSTANCE.innerFromList(modelList);
}
public static List<AirlineArea> toList(List<AirlineAreaDTO> dtoList)
{
return INSTANCE.innerToList(dtoList);
}
}

View File

@ -0,0 +1,58 @@
package com.ruoyi.airline.service.dto;
import com.ruoyi.common.core.web.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 空域列表 airline_area
*
* @author 拓恒
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AirlineAreaDTO extends BaseEntity {
/**
* 主键ID
*/
private Long id;
/**
* 空域名称
*/
private String name;
/**
* 空域类型
*/
private String areaType;
/**
* 1 启用 0 停用默认启用
*/
private Integer status;
/**
* 空域点列表
*/
private String points;
/**
* 备注
*/
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("remark", getRemark())
.toString();
}
}

View File

@ -0,0 +1,53 @@
package com.ruoyi.airline.service.dto;
import com.ruoyi.common.core.web.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.List;
/**
* 空域分组表 airline_area_group
*
* @author 拓恒
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AirlineAreaGroupDTO extends BaseEntity {
/**
* 用户ID
*/
private Long groupId;
/**
* 分组名称
*/
private String groupName;
/**
* 用户ID分组自带用户归属后期权限都是基于用户ID进行
*/
private Long userId;
/**
* 组关联的空域
*/
private List<AirlineAreaDTO> 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.service.dto;
import com.ruoyi.common.core.web.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 空域分组明细表 airline_area_group_info
*
* @author 拓恒
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AirlineAreaGroupInfoDTO extends BaseEntity {
/**
* 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,53 @@
package com.ruoyi.airline.service.impl;
import com.ruoyi.airline.domain.api.IAirlineAreaGroupInfoDomain;
import com.ruoyi.airline.domain.model.AirlineAreaGroupInfo;
import com.ruoyi.airline.service.api.IAirlineAreaGroupInfoService;
import com.ruoyi.airline.service.convert.AirlineAreaGroupInfoServiceConvert;
import com.ruoyi.airline.service.dto.AirlineAreaGroupInfoDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 空域分组明细Service实现类
*
* @author ruoyi
* @date 2026-02-25
*/
@Service
public class AirlineAreaGroupInfoServiceImpl implements IAirlineAreaGroupInfoService {
private static final Logger log = LoggerFactory.getLogger(AirlineAreaGroupInfoServiceImpl.class);
@Autowired
private IAirlineAreaGroupInfoDomain iAirlineAreaGroupInfoDomain;
@Override
public int insertGroupInfo(AirlineAreaGroupInfoDTO groupInfo) {
AirlineAreaGroupInfo model = AirlineAreaGroupInfoServiceConvert.to(groupInfo);
return iAirlineAreaGroupInfoDomain.insertGroupInfo(model);
}
@Override
public int deleteGroupInfo(Long userId, Long groupId, Long areaId) {
AirlineAreaGroupInfo model = new AirlineAreaGroupInfo();
model.setGroupId(groupId);
model.setAreaId(areaId);
return iAirlineAreaGroupInfoDomain.deleteGroupInfo(model);
}
@Override
public List<AirlineAreaGroupInfoDTO> selectGroupInfoList(AirlineAreaGroupInfoDTO dto) {
AirlineAreaGroupInfo model = AirlineAreaGroupInfoServiceConvert.to(dto);
return AirlineAreaGroupInfoServiceConvert.fromList(iAirlineAreaGroupInfoDomain.selectGroupInfoList(model));
}
@Override
public List<Long> selectAreaIdsByGroupId(Long groupId) {
return iAirlineAreaGroupInfoDomain.selectAreaIdsByGroupId(groupId);
}
}

View File

@ -0,0 +1,139 @@
package com.ruoyi.airline.service.impl;
import com.alibaba.nacos.client.naming.utils.CollectionUtils;
import com.ruoyi.airline.domain.api.IAirlineAreaDomain;
import com.ruoyi.airline.domain.api.IAirlineAreaGroupDomain;
import com.ruoyi.airline.domain.api.IAirlineAreaGroupInfoDomain;
import com.ruoyi.airline.domain.model.AirlineArea;
import com.ruoyi.airline.domain.model.AirlineAreaGroup;
import com.ruoyi.airline.domain.model.AirlineAreaGroupInfo;
import com.ruoyi.airline.service.api.IAirlineAreaGroupService;
import com.ruoyi.airline.service.convert.AirlineAreaGroupInfoServiceConvert;
import com.ruoyi.airline.service.convert.AirlineAreaGroupServiceConvert;
import com.ruoyi.airline.service.convert.AirlineAreaServiceConvert;
import com.ruoyi.airline.service.dto.AirlineAreaDTO;
import com.ruoyi.airline.service.dto.AirlineAreaGroupDTO;
import com.ruoyi.airline.service.dto.AirlineAreaGroupInfoDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 空域分组Service实现类
*
* @author ruoyi
* @date 2026-02-25
*/
@Service
public class AirlineAreaGroupServiceImpl implements IAirlineAreaGroupService {
private static final Logger log = LoggerFactory.getLogger(AirlineAreaGroupServiceImpl.class);
@Autowired
private IAirlineAreaGroupDomain iAirlineAreaGroupDomain;
@Autowired
private IAirlineAreaGroupInfoDomain iAirlineAreaGroupInfoDomain;
@Autowired
private IAirlineAreaDomain iAirlineAreaDomain;
@Override
public int deletegroupById(Long userId, Long groupId) {
// 1删除空域分组明细
AirlineAreaGroupInfoDTO dto = new AirlineAreaGroupInfoDTO();
dto.setGroupId(groupId);
AirlineAreaGroupInfo model = AirlineAreaGroupInfoServiceConvert.to(dto);
iAirlineAreaGroupInfoDomain.deleteGroupInfo(model);
// 2删除分组
AirlineAreaGroup model2 = new AirlineAreaGroup();
model2.setGroupId(groupId);
model2.setUserId(userId);
return iAirlineAreaGroupDomain.deletegroup(model2);
}
@Override
public boolean checkGroupNameUnique(AirlineAreaGroupDTO group) {
AirlineAreaGroup model = AirlineAreaGroupServiceConvert.to(group);
return iAirlineAreaGroupDomain.checkgroupNameUnique(model);
}
@Override
public int updateGroup(AirlineAreaGroupDTO group) {
AirlineAreaGroup model = AirlineAreaGroupServiceConvert.to(group);
return iAirlineAreaGroupDomain.updateGroup(model);
}
@Override
public int insertGroup(AirlineAreaGroupDTO group) {
AirlineAreaGroup model = AirlineAreaGroupServiceConvert.to(group);
return iAirlineAreaGroupDomain.insertGroup(model);
}
@Override
public List<AirlineAreaGroupDTO> selectGroupList(AirlineAreaGroupDTO dto) {
AirlineAreaGroup model = AirlineAreaGroupServiceConvert.to(dto);
return AirlineAreaGroupServiceConvert.fromList(iAirlineAreaGroupDomain.selectGroupList(model));
}
// @Override
// public AirlineAreaGroupDTO selectAirLineListsByGroupId(Long userId, Long groupId) {
// AirlineAreaGroupDTO dto = new AirlineAreaGroupDTO();
// dto.setUserId(userId);
// dto.setGroupId(groupId);
// List<AirlineAreaGroupInfo> airlineAreaGroupInfoDTOS = iAirlineAreaGroupInfoDomain.selectGroupInfoListById(groupId);
// if (!CollectionUtils.isEmpty(airlineAreaGroupInfoDTOS)) {
// List<Long> ids = airlineAreaGroupInfoDTOS.stream().map(AirlineAreaGroupInfo::getAreaId).toList();
// List<AirlineArea> airlineAreaDTOS = iAirlineAreaDomain.selectAreaListByIds(ids);
// dto.setGroupInfos(AirlineAreaServiceConvert.fromList(airlineAreaDTOS));
// }
// return dto;
// }
// @Override
// public List<AirlineAreaDTO> selectAirlineListByUserId(AirlineAreaDTO dto) {
// AirlineArea model = AirlineAreaServiceConvert.to(dto);
// return AirlineAreaServiceConvert.fromList(iAirlineAreaGroupDomain.selectAirlineListByUserId(model));
// }
@Override
public AirlineAreaGroupDTO selectAirspaceListByGroupId(Long userId, Long groupId) {
AirlineAreaGroupDTO dto = new AirlineAreaGroupDTO();
dto.setUserId(userId);
dto.setGroupId(groupId);
List<AirlineAreaGroupInfo> airlineAreaGroupInfoList = iAirlineAreaGroupInfoDomain.selectGroupInfoListById(groupId);
if (!CollectionUtils.isEmpty(airlineAreaGroupInfoList)) {
List<Long> ids = airlineAreaGroupInfoList.stream().map(AirlineAreaGroupInfo::getAreaId).toList();
List<AirlineArea> airlineAreaList = iAirlineAreaDomain.selectAreaListByIds(ids);
dto.setGroupInfos(AirlineAreaServiceConvert.fromList(airlineAreaList));
}
return dto;
}
@Override
public int updateAreaWithPoints(AirlineAreaDTO area) {
AirlineArea model = AirlineAreaServiceConvert.to(area);
return iAirlineAreaDomain.updateArea(model);
}
@Override
public int insertAreaWithGroup(Long groupId, AirlineAreaDTO area) {
// 1保存空域信息
AirlineArea model = AirlineAreaServiceConvert.to(area);
int result = iAirlineAreaDomain.insertArea(model);
// 2保存空域分组信息
if (result > 0) {
AirlineAreaGroupInfo groupInfo = new AirlineAreaGroupInfo();
groupInfo.setGroupId(groupId);
groupInfo.setAreaId(model.getId());
iAirlineAreaGroupInfoDomain.insertGroupInfo(groupInfo);
}
return result;
}
}

View File

@ -0,0 +1,59 @@
package com.ruoyi.airline.service.impl;
import com.ruoyi.airline.domain.api.IAirlineAreaDomain;
import com.ruoyi.airline.domain.model.AirlineArea;
import com.ruoyi.airline.service.api.IAirlineAreaService;
import com.ruoyi.airline.service.convert.AirlineAreaServiceConvert;
import com.ruoyi.airline.service.dto.AirlineAreaDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 空域Service实现类
*
* @author ruoyi
* @date 2026-02-25
*/
@Service
public class AirlineAreaServiceImpl implements IAirlineAreaService {
private static final Logger log = LoggerFactory.getLogger(AirlineAreaServiceImpl.class);
@Autowired
private IAirlineAreaDomain iAirlineAreaDomain;
@Override
public int insertArea(AirlineAreaDTO area) {
AirlineArea model = AirlineAreaServiceConvert.to(area);
return iAirlineAreaDomain.insertArea(model);
}
@Override
public int updateArea(AirlineAreaDTO area) {
AirlineArea model = AirlineAreaServiceConvert.to(area);
return iAirlineAreaDomain.updateArea(model);
}
@Override
public int deleteArea(Long id) {
AirlineArea model = new AirlineArea();
model.setId(id);
return iAirlineAreaDomain.deleteArea(model);
}
@Override
public List<AirlineAreaDTO> selectAreaList(AirlineAreaDTO dto) {
AirlineArea model = AirlineAreaServiceConvert.to(dto);
return AirlineAreaServiceConvert.fromList(iAirlineAreaDomain.selectAreaList(model));
}
@Override
public AirlineAreaDTO selectAreaById(Long id) {
AirlineArea model = iAirlineAreaDomain.selectAreaById(id);
return AirlineAreaServiceConvert.from(model);
}
}

View File

@ -0,0 +1,48 @@
-- 创建空域列表
CREATE TABLE IF NOT EXISTS airline_area (
id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
name VARCHAR(255) NOT NULL COMMENT '空域名称',
area_type VARCHAR(255) COMMENT '空域类型',
status INT(11) DEFAULT 1 COMMENT '1 启用 0 停用。默认启用。',
points JSON COMMENT '空域点列表',
create_by VARCHAR(64) DEFAULT '' COMMENT '创建者',
create_time DATETIME COMMENT '创建时间',
update_by VARCHAR(64) DEFAULT '' COMMENT '更新者',
update_time DATETIME COMMENT '更新时间',
remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='空域列表';
-- 创建空域分组表
CREATE TABLE IF NOT EXISTS airline_area_group (
group_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
group_name VARCHAR(255) NOT NULL COMMENT '分组名称',
user_id BIGINT(20) NOT NULL COMMENT '用户ID分组自带用户归属。后期权限都是基于用户ID进行',
del_flag BIGINT(20) DEFAULT 0 COMMENT '删除标识0.未删除默认1已删除',
deleted_by VARCHAR(64) DEFAULT '' COMMENT '删除者',
deleted_time DATETIME COMMENT '删除时间',
create_by VARCHAR(64) DEFAULT '' COMMENT '创建者',
create_time DATETIME COMMENT '创建时间',
update_by VARCHAR(64) DEFAULT '' COMMENT '更新者',
update_time DATETIME COMMENT '更新时间',
remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (group_id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='空域分组表';
-- 创建空域分组明细表
CREATE TABLE IF NOT EXISTS airline_area_group_info (
id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'id,主键',
group_id BIGINT(20) NOT NULL COMMENT '用户ID',
area_id BIGINT(20) NOT NULL COMMENT '空域id',
del_flag BIGINT(20) DEFAULT 0 COMMENT '删除标识0.未删除默认1已删除',
deleted_by VARCHAR(64) DEFAULT '' COMMENT '删除者',
deleted_time DATETIME COMMENT '删除时间',
create_by VARCHAR(64) DEFAULT '' COMMENT '创建者',
create_time DATETIME COMMENT '创建时间',
update_by VARCHAR(64) DEFAULT '' COMMENT '更新者',
update_time DATETIME COMMENT '更新时间',
remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (id),
INDEX idx_group_id (group_id),
INDEX idx_area_id (area_id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='空域分组明细表';

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.airline.mapper.AirlineAreaGroupInfoMapper">
<!-- 结果映射 -->
<resultMap id="AirlineAreaGroupInfoResult" type="com.ruoyi.airline.mapper.entity.AirlineAreaGroupInfoEntity">
<id property="id" column="id" />
<result property="groupId" column="group_id" />
<result property="areaId" column="area_id" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="delFlag" column="del_flag" />
<result property="deletedBy" column="deleted_by" />
<result property="deletedTime" column="deleted_time" />
</resultMap>
<!-- 插入分组明细 -->
<insert id="insertGroupInfo" parameterType="com.ruoyi.airline.mapper.entity.AirlineAreaGroupInfoEntity">
insert into airline_area_group_info (group_id, area_id, create_by, create_time, update_by, update_time, del_flag)
values (#{groupId}, #{areaId}, #{createBy}, now(), #{updateBy}, now(), 0)
</insert>
<!-- 删除分组明细(软删除) -->
<update id="deleteGroupInfo" parameterType="com.ruoyi.airline.mapper.entity.AirlineAreaGroupInfoEntity">
update airline_area_group_info
set del_flag = 1,
deleted_by = #{deletedBy},
deleted_time = now()
where group_id = #{groupId}
<if test="areaId != null">
and area_id = #{areaId}
</if>
</update>
<!-- 查询分组明细列表 -->
<select id="selectGroupInfoList" parameterType="com.ruoyi.airline.mapper.entity.AirlineAreaGroupInfoEntity" resultMap="AirlineAreaGroupInfoResult">
select id, group_id, area_id, create_by, create_time, update_by, update_time, del_flag, deleted_by, deleted_time
from airline_area_group_info
<where>
del_flag = 0
<if test="groupId != null">
and group_id = #{groupId}
</if>
<if test="areaId != null">
and area_id = #{areaId}
</if>
</where>
</select>
<!-- 根据分组ID查询空域ID列表 -->
<select id="selectAreaIdsByGroupId" parameterType="java.lang.Long" resultType="java.lang.Long">
select area_id
from airline_area_group_info
where group_id = #{groupId}
and del_flag = 0
</select>
</mapper>

View File

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.airline.mapper.AirlineAreaGroupMapper">
<!-- 结果映射 -->
<resultMap id="AirlineAreaGroupResult" type="com.ruoyi.airline.mapper.entity.AirlineAreaGroupEntity">
<id property="groupId" column="group_id" />
<result property="groupName" column="group_name" />
<result property="userId" column="user_id" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="delFlag" column="del_flag" />
<result property="deletedBy" column="deleted_by" />
<result property="deletedTime" column="deleted_time" />
</resultMap>
<!-- 检查分组名称是否唯一 -->
<select id="checkgroupNameUnique" parameterType="com.ruoyi.airline.mapper.entity.AirlineAreaGroupEntity" resultType="java.lang.Integer">
select count(1) from airline_area_group
where group_name = #{groupName}
and del_flag = 0
<if test="groupId != null">
and group_id != #{groupId}
</if>
<if test="userId != null">
and user_id = #{userId}
</if>
</select>
<!-- 删除分组(软删除) -->
<update id="deletegroup" parameterType="com.ruoyi.airline.mapper.entity.AirlineAreaGroupEntity">
update airline_area_group
set del_flag = 1,
deleted_by = #{deletedBy},
deleted_time = now()
where group_id = #{groupId}
<if test="userId != null">
and user_id = #{userId}
</if>
</update>
<!-- 更新分组 -->
<update id="updateGroup" parameterType="com.ruoyi.airline.mapper.entity.AirlineAreaGroupEntity">
update airline_area_group
set group_name = #{groupName},
update_by = #{updateBy},
update_time = now()
where group_id = #{groupId}
and del_flag = 0
<if test="userId != null">
and user_id = #{userId}
</if>
</update>
<!-- 插入分组 -->
<insert id="insertGroup" parameterType="com.ruoyi.airline.mapper.entity.AirlineAreaGroupEntity">
insert into airline_area_group (group_name, user_id, create_by, create_time, update_by, update_time, del_flag)
values (#{groupName}, #{userId}, #{createBy}, now(), #{updateBy}, now(), 0)
</insert>
<!-- 查询分组列表 -->
<select id="selectGroupList" parameterType="com.ruoyi.airline.mapper.entity.AirlineAreaGroupEntity" resultMap="AirlineAreaGroupResult">
select group_id, group_name, user_id, create_by, create_time, update_by, update_time, del_flag, deleted_by, deleted_time
from airline_area_group
<where>
del_flag = 0
<if test="groupName != null and groupName != ''">
and group_name like concat('%', #{groupName}, '%')
</if>
<if test="userId != null">
and user_id = #{userId}
</if>
</where>
</select>
<!-- 根据ID查询分组 -->
<select id="selectGroupById" parameterType="java.lang.Long" resultMap="AirlineAreaGroupResult">
select group_id, group_name, user_id, create_by, create_time, update_by, update_time, del_flag, deleted_by, deleted_time
from airline_area_group
where group_id = #{groupId}
and del_flag = 0
</select>
</mapper>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.airline.mapper.AirlineAreaMapper">
<!-- 结果映射 -->
<resultMap id="AirlineAreaResult" type="com.ruoyi.airline.mapper.entity.AirlineAreaEntity">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="areaType" column="area_type" />
<result property="status" column="status" />
<result property="points" column="points" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
</resultMap>
<!-- 插入空域 -->
<insert id="insertArea" parameterType="com.ruoyi.airline.mapper.entity.AirlineAreaEntity">
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>
<!-- 更新空域 -->
<update id="updateArea" parameterType="com.ruoyi.airline.mapper.entity.AirlineAreaEntity">
update airline_area
set name = #{name},
area_type = #{areaType},
status = #{status},
points = #{points},
update_by = #{updateBy},
update_time = now(),
remark = #{remark}
where id = #{id}
</update>
<!-- 删除空域 -->
<update id="deleteArea" parameterType="com.ruoyi.airline.mapper.entity.AirlineAreaEntity">
update airline_area
set status = 0,
update_by = #{updateBy},
update_time = now()
where id = #{id}
</update>
<!-- 查询空域列表 -->
<select id="selectAreaList" parameterType="com.ruoyi.airline.mapper.entity.AirlineAreaEntity" resultMap="AirlineAreaResult">
select id, name, area_type, status, points, create_by, create_time, update_by, update_time, remark
from airline_area
<where>
<if test="name != null and name != ''">
and name like concat('%', #{name}, '%')
</if>
<if test="areaType != null and areaType != ''">
and area_type = #{areaType}
</if>
<if test="status != null">
and status = #{status}
</if>
</where>
</select>
<!-- 根据ID查询空域 -->
<select id="selectAreaById" parameterType="java.lang.Long" resultMap="AirlineAreaResult">
select id, name, area_type, status, points, create_by, create_time, update_by, update_time, remark
from airline_area
where id = #{id}
</select>
<!-- 根据ID列表查询空域 -->
<select id="selectAreaListByIds" parameterType="java.util.List" resultMap="AirlineAreaResult">
select id, name, area_type, status, points, create_by, create_time, update_by, update_time, remark
from airline_area
where id in
<foreach item="id" collection="list" open="(" separator="," close=")">
#{id}
</foreach>
</select>
</mapper>