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.api.IAirlineAreaTimeRuleService; 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; @Autowired private IAirlineAreaTimeRuleService iAirlineAreaTimeRuleService; @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 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 airlineAreaGroupInfoDTOS = iAirlineAreaGroupInfoDomain.selectGroupInfoListById(groupId); // if (!CollectionUtils.isEmpty(airlineAreaGroupInfoDTOS)) { // List ids = airlineAreaGroupInfoDTOS.stream().map(AirlineAreaGroupInfo::getAreaId).toList(); // List airlineAreaDTOS = iAirlineAreaDomain.selectAreaListByIds(ids); // dto.setGroupInfos(AirlineAreaServiceConvert.fromList(airlineAreaDTOS)); // } // return dto; // } // @Override // public List 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 airlineAreaGroupInfoList = iAirlineAreaGroupInfoDomain.selectGroupInfoListById(groupId); if (!CollectionUtils.isEmpty(airlineAreaGroupInfoList)) { List ids = airlineAreaGroupInfoList.stream().map(AirlineAreaGroupInfo::getAreaId).toList(); List airlineAreaList = iAirlineAreaDomain.selectAreaListByIds(ids); List areaDTOs = AirlineAreaServiceConvert.fromList(airlineAreaList); // 为每个空域添加时间规则 for (AirlineAreaDTO areaDTO : areaDTOs) { List timeRules = iAirlineAreaTimeRuleService.selectTimeRuleListByAreaId(areaDTO.getId()); areaDTO.setTimeRules(timeRules); } dto.setGroupInfos(areaDTOs); } return dto; } @Override public int updateAreaWithPoints(AirlineAreaDTO area) { // 1、更新空域信息 AirlineArea model = AirlineAreaServiceConvert.to(area); int result = iAirlineAreaDomain.updateArea(model); // 2、更新时间规则 if (result > 0 && area.getId() != null) { // 删除原有时间规则 iAirlineAreaTimeRuleService.deleteTimeRuleByAreaId(area.getId()); // 保存新时间规则 if (area.getTimeRules() != null && !area.getTimeRules().isEmpty()) { iAirlineAreaTimeRuleService.batchInsertTimeRule(area.getId(), area.getTimeRules()); } } return result; } @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()); groupInfo.setCreateBy(area.getCreateBy()); groupInfo.setUpdateBy(area.getUpdateBy()); iAirlineAreaGroupInfoDomain.insertGroupInfo(groupInfo); // 3、保存时间规则 if (area.getTimeRules() != null && !area.getTimeRules().isEmpty()) { iAirlineAreaTimeRuleService.batchInsertTimeRule(model.getId(), area.getTimeRules()); } } return result; } @Override public int deleteArea(Long areaId) { // 1、删除空域分组明细关联 AirlineAreaGroupInfoDTO dto = new AirlineAreaGroupInfoDTO(); dto.setAreaId(areaId); AirlineAreaGroupInfo model = AirlineAreaGroupInfoServiceConvert.to(dto); iAirlineAreaGroupInfoDomain.deleteGroupInfo(model); // 2、删除时间规则 -- 不删除 // iAirlineAreaTimeRuleService.deleteTimeRuleByAreaId(areaId); // 3、软删除空域 AirlineArea areaModel = new AirlineArea(); areaModel.setId(areaId); return iAirlineAreaDomain.deleteArea(areaModel); } @Override public int batchMoveAreaToNewGroup(List areaIds, Long oldGroupId, Long newGroupId) { int movedCount = 0; // 遍历每个空域ID for (Long areaId : areaIds) { // 1、删除原分组关联 AirlineAreaGroupInfoDTO deleteDto = new AirlineAreaGroupInfoDTO(); deleteDto.setGroupId(oldGroupId); deleteDto.setAreaId(areaId); AirlineAreaGroupInfo deleteModel = AirlineAreaGroupInfoServiceConvert.to(deleteDto); iAirlineAreaGroupInfoDomain.deleteGroupInfo(deleteModel); // 2、添加新分组关联 AirlineAreaGroupInfoDTO insertDto = new AirlineAreaGroupInfoDTO(); insertDto.setGroupId(newGroupId); insertDto.setAreaId(areaId); AirlineAreaGroupInfo insertModel = AirlineAreaGroupInfoServiceConvert.to(insertDto); int result = iAirlineAreaGroupInfoDomain.insertGroupInfo(insertModel); if (result > 0) { movedCount++; } } return movedCount; } @Override public List selectAreaListByUserId(AirlineAreaDTO dto) { log.info("AirlineAreaGroupServiceImpl.selectAreaListByUserId - dto.getName(): {}, dto.getAreaType(): {}, dto.getStatus(): {}", dto.getName(), dto.getAreaType(), dto.getStatus()); AirlineArea model = AirlineAreaServiceConvert.to(dto); log.info("AirlineAreaGroupServiceImpl.selectAreaListByUserId - model.getName(): {}, model.getAreaType(): {}, model.getStatus(): {}", model.getName(), model.getAreaType(), model.getStatus()); List areaDTOs = AirlineAreaServiceConvert.fromList(iAirlineAreaDomain.selectAreaListByUserId(model)); // 为每个空域添加时间规则 for (AirlineAreaDTO areaDTO : areaDTOs) { List timeRules = iAirlineAreaTimeRuleService.selectTimeRuleListByAreaId(areaDTO.getId()); areaDTO.setTimeRules(timeRules); } return areaDTOs; } }