From 79fcee731ddb1ead84376636945c9fff22efa863 Mon Sep 17 00:00:00 2001 From: gyb Date: Mon, 2 Mar 2026 10:05:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E7=A9=BA=E5=9F=9F?= =?UTF-8?q?=E9=99=90=E6=97=B6=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../convert/AirlineAreaControllerConvert.java | 15 ++ .../AirlineAreaTimeRuleControllerConvert.java | 146 ++++++++++++++++++ .../api/IAirlineAreaTimeRuleDomain.java | 27 ++++ .../AirlineAreaTimeRuleDomainConvert.java | 86 +++++++++++ .../impl/AirlineAreaTimeRuleDomainImpl.java | 68 ++++++++ .../domain/model/AirlineAreaTimeRule.java | 76 +++++++++ .../mapper/AirlineAreaTimeRuleMapper.java | 27 ++++ .../entity/AirlineAreaTimeRuleEntity.java | 76 +++++++++ .../service/api/IAirlineAreaGroupService.java | 19 +++ .../api/IAirlineAreaTimeRuleService.java | 29 ++++ .../AirlineAreaTimeRuleServiceConvert.java | 86 +++++++++++ .../airline/service/dto/AirlineAreaDTO.java | 8 + .../service/dto/AirlineAreaTimeRuleDTO.java | 76 +++++++++ .../impl/AirlineAreaGroupServiceImpl.java | 49 +++++- .../impl/AirlineAreaTimeRuleServiceImpl.java | 75 +++++++++ .../airline/AirlineAreaTimeRuleMapper.xml | 86 +++++++++++ 16 files changed, 945 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/ruoyi/airline/controller/convert/AirlineAreaTimeRuleControllerConvert.java create mode 100644 src/main/java/com/ruoyi/airline/domain/api/IAirlineAreaTimeRuleDomain.java create mode 100644 src/main/java/com/ruoyi/airline/domain/convert/AirlineAreaTimeRuleDomainConvert.java create mode 100644 src/main/java/com/ruoyi/airline/domain/impl/AirlineAreaTimeRuleDomainImpl.java create mode 100644 src/main/java/com/ruoyi/airline/domain/model/AirlineAreaTimeRule.java create mode 100644 src/main/java/com/ruoyi/airline/mapper/AirlineAreaTimeRuleMapper.java create mode 100644 src/main/java/com/ruoyi/airline/mapper/entity/AirlineAreaTimeRuleEntity.java create mode 100644 src/main/java/com/ruoyi/airline/service/api/IAirlineAreaTimeRuleService.java create mode 100644 src/main/java/com/ruoyi/airline/service/convert/AirlineAreaTimeRuleServiceConvert.java create mode 100644 src/main/java/com/ruoyi/airline/service/dto/AirlineAreaTimeRuleDTO.java create mode 100644 src/main/java/com/ruoyi/airline/service/impl/AirlineAreaTimeRuleServiceImpl.java create mode 100644 src/main/resources/mapper/airline/AirlineAreaTimeRuleMapper.xml diff --git a/src/main/java/com/ruoyi/airline/controller/convert/AirlineAreaControllerConvert.java b/src/main/java/com/ruoyi/airline/controller/convert/AirlineAreaControllerConvert.java index 626d23c..d1d5779 100644 --- a/src/main/java/com/ruoyi/airline/controller/convert/AirlineAreaControllerConvert.java +++ b/src/main/java/com/ruoyi/airline/controller/convert/AirlineAreaControllerConvert.java @@ -3,7 +3,10 @@ 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.api.domain.AirlineAreaTimeRuleVO; +import com.ruoyi.airline.controller.convert.AirlineAreaTimeRuleControllerConvert; import com.ruoyi.airline.service.dto.AirlineAreaDTO; +import com.ruoyi.airline.service.dto.AirlineAreaTimeRuleDTO; import com.ruoyi.common.core.utils.BaseConvert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -65,6 +68,12 @@ public class AirlineAreaControllerConvert extends BaseConvert timeRuleVOs = AirlineAreaTimeRuleControllerConvert.fromList(dto.getTimeRules()); + vo.setTimeRules(timeRuleVOs); + } // 将字符串转换为 List if (dto.getPoints() != null && !dto.getPoints().isEmpty()) { @@ -102,6 +111,12 @@ public class AirlineAreaControllerConvert extends BaseConvert timeRuleDTOs = AirlineAreaTimeRuleControllerConvert.toList(vo.getTimeRules()); + dto.setTimeRules(timeRuleDTOs); + } // 将 List 转换为字符串 if (vo.getPoints() != null && !vo.getPoints().isEmpty()) { diff --git a/src/main/java/com/ruoyi/airline/controller/convert/AirlineAreaTimeRuleControllerConvert.java b/src/main/java/com/ruoyi/airline/controller/convert/AirlineAreaTimeRuleControllerConvert.java new file mode 100644 index 0000000..cf57b22 --- /dev/null +++ b/src/main/java/com/ruoyi/airline/controller/convert/AirlineAreaTimeRuleControllerConvert.java @@ -0,0 +1,146 @@ +package com.ruoyi.airline.controller.convert; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.ruoyi.airline.api.domain.AirlineAreaTimeRuleVO; +import com.ruoyi.airline.service.dto.AirlineAreaTimeRuleDTO; +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 拓恒 + */ +public class AirlineAreaTimeRuleControllerConvert extends BaseConvert +{ + private static final Logger log = LoggerFactory.getLogger(AirlineAreaTimeRuleControllerConvert.class); + private static final ObjectMapper objectMapper = new ObjectMapper(); + + private static final AirlineAreaTimeRuleControllerConvert INSTANCE = new AirlineAreaTimeRuleControllerConvert(); + + private AirlineAreaTimeRuleControllerConvert() { + super(AirlineAreaTimeRuleDTO.class, AirlineAreaTimeRuleVO.class); + } + + public static AirlineAreaTimeRuleVO from(AirlineAreaTimeRuleDTO dto) + { + return INSTANCE.innerFrom(dto); + } + + public static AirlineAreaTimeRuleDTO to(AirlineAreaTimeRuleVO vo) + { + return INSTANCE.innerTo(vo); + } + + public static List fromList(List dtoList) + { + return INSTANCE.innerFromList(dtoList); + } + + public static List toList(List voList) + { + return INSTANCE.innerToList(voList); + } + + @Override + protected AirlineAreaTimeRuleVO innerFrom(AirlineAreaTimeRuleDTO dto) { + if (dto == null) { + return null; + } + AirlineAreaTimeRuleVO vo = new AirlineAreaTimeRuleVO(); + vo.setId(dto.getId()); + vo.setAreaId(dto.getAreaId()); + vo.setRestrictType(dto.getRestrictType()); + vo.setGranularity(dto.getGranularity()); + vo.setRepetFrequency(dto.getRepetFrequency()); + vo.setRemark(dto.getRemark()); + + // 将字符串转换为 Object + if (dto.getDateRange() != null && !dto.getDateRange().isEmpty()) { + try { + Object dateRange = objectMapper.readValue(dto.getDateRange(), Object.class); + vo.setDateRange(dateRange); + } catch (JsonProcessingException e) { + log.error("转换日期范围失败: {}", e.getMessage()); + } + } + + if (dto.getTimeRange() != null && !dto.getTimeRange().isEmpty()) { + try { + Object timeRange = objectMapper.readValue(dto.getTimeRange(), Object.class); + vo.setTimeRange(timeRange); + } catch (JsonProcessingException e) { + log.error("转换时间范围失败: {}", e.getMessage()); + } + } + + if (dto.getGranularityTimes() != null && !dto.getGranularityTimes().isEmpty()) { + try { + Object granularityTimes = objectMapper.readValue(dto.getGranularityTimes(), Object.class); + vo.setGranularityTimes(granularityTimes); + } catch (JsonProcessingException e) { + log.error("转换重复粒度具体时间失败: {}", e.getMessage()); + } + } + + return vo; + } + + @Override + protected AirlineAreaTimeRuleDTO innerTo(AirlineAreaTimeRuleVO vo) { + if (vo == null) { + return null; + } + AirlineAreaTimeRuleDTO dto = new AirlineAreaTimeRuleDTO(); + dto.setId(vo.getId()); + dto.setAreaId(vo.getAreaId()); + dto.setRestrictType(vo.getRestrictType()); + dto.setGranularity(vo.getGranularity()); + dto.setRepetFrequency(vo.getRepetFrequency()); + dto.setRemark(vo.getRemark()); + + // 将 Object 转换为字符串 + if (vo.getDateRange() != null) { + try { + String dateRangeJson = objectMapper.writeValueAsString(vo.getDateRange()); + dto.setDateRange(dateRangeJson); + } catch (JsonProcessingException e) { + log.error("转换日期范围失败: {}", e.getMessage()); + dto.setDateRange("[]"); // Default to empty array + } + } else { + dto.setDateRange("[]"); // Default to empty array + } + + if (vo.getTimeRange() != null) { + try { + String timeRangeJson = objectMapper.writeValueAsString(vo.getTimeRange()); + dto.setTimeRange(timeRangeJson); + } catch (JsonProcessingException e) { + log.error("转换时间范围失败: {}", e.getMessage()); + dto.setTimeRange("[]"); // Default to empty array + } + } else { + dto.setTimeRange("[]"); // Default to empty array + } + + if (vo.getGranularityTimes() != null) { + try { + String granularityTimesJson = objectMapper.writeValueAsString(vo.getGranularityTimes()); + dto.setGranularityTimes(granularityTimesJson); + } catch (JsonProcessingException e) { + log.error("转换重复粒度具体时间失败: {}", e.getMessage()); + dto.setGranularityTimes("[]"); // Default to empty array + } + } else { + dto.setGranularityTimes("[]"); // Default to empty array + } + + return dto; + } +} diff --git a/src/main/java/com/ruoyi/airline/domain/api/IAirlineAreaTimeRuleDomain.java b/src/main/java/com/ruoyi/airline/domain/api/IAirlineAreaTimeRuleDomain.java new file mode 100644 index 0000000..ad58f3a --- /dev/null +++ b/src/main/java/com/ruoyi/airline/domain/api/IAirlineAreaTimeRuleDomain.java @@ -0,0 +1,27 @@ +package com.ruoyi.airline.domain.api; + +import com.ruoyi.airline.domain.model.AirlineAreaTimeRule; + +import java.util.List; + +/** + * 空域时间规则领域接口 + * + * @author 拓恒 + */ +public interface IAirlineAreaTimeRuleDomain { + + int insertTimeRule(AirlineAreaTimeRule model); + + int updateTimeRule(AirlineAreaTimeRule model); + + int deleteTimeRule(AirlineAreaTimeRule model); + + List selectTimeRuleList(AirlineAreaTimeRule model); + + AirlineAreaTimeRule selectTimeRuleById(Long id); + + List selectTimeRuleListByAreaId(Long areaId); + + int deleteTimeRuleByAreaId(Long areaId); +} diff --git a/src/main/java/com/ruoyi/airline/domain/convert/AirlineAreaTimeRuleDomainConvert.java b/src/main/java/com/ruoyi/airline/domain/convert/AirlineAreaTimeRuleDomainConvert.java new file mode 100644 index 0000000..01d2c60 --- /dev/null +++ b/src/main/java/com/ruoyi/airline/domain/convert/AirlineAreaTimeRuleDomainConvert.java @@ -0,0 +1,86 @@ +package com.ruoyi.airline.domain.convert; + +import com.ruoyi.common.core.utils.BaseConvert; +import com.ruoyi.airline.domain.model.AirlineAreaTimeRule; +import com.ruoyi.airline.mapper.entity.AirlineAreaTimeRuleEntity; + +import java.util.List; + +/** + * 空域时间规则 Domain 转换类 + * 用于 Domain 模型和 Mapper 实体之间的转换 + * + * @author 拓恒 + */ +public class AirlineAreaTimeRuleDomainConvert extends BaseConvert +{ + private static final AirlineAreaTimeRuleDomainConvert INSTANCE = new AirlineAreaTimeRuleDomainConvert(); + + private AirlineAreaTimeRuleDomainConvert() { + super(AirlineAreaTimeRuleEntity.class, AirlineAreaTimeRule.class); + } + + public static AirlineAreaTimeRule from(AirlineAreaTimeRuleEntity entity) + { + return INSTANCE.innerFrom(entity); + } + + public static AirlineAreaTimeRuleEntity to(AirlineAreaTimeRule model) + { + return INSTANCE.innerTo(model); + } + + public static List fromList(List entityList) + { + return INSTANCE.innerFromList(entityList); + } + + public static List toList(List modelList) + { + return INSTANCE.innerToList(modelList); + } + + @Override + protected AirlineAreaTimeRule innerFrom(AirlineAreaTimeRuleEntity entity) { + if (entity == null) { + return null; + } + AirlineAreaTimeRule model = new AirlineAreaTimeRule(); + model.setId(entity.getId()); + model.setAreaId(entity.getAreaId()); + model.setRestrictType(entity.getRestrictType()); + model.setDateRange(entity.getDateRange()); + model.setTimeRange(entity.getTimeRange()); + model.setGranularity(entity.getGranularity()); + model.setRepetFrequency(entity.getRepetFrequency()); + model.setGranularityTimes(entity.getGranularityTimes()); + model.setRemark(entity.getRemark()); + model.setCreateBy(entity.getCreateBy()); + model.setCreateTime(entity.getCreateTime()); + model.setUpdateBy(entity.getUpdateBy()); + model.setUpdateTime(entity.getUpdateTime()); + return model; + } + + @Override + protected AirlineAreaTimeRuleEntity innerTo(AirlineAreaTimeRule model) { + if (model == null) { + return null; + } + AirlineAreaTimeRuleEntity entity = new AirlineAreaTimeRuleEntity(); + entity.setId(model.getId()); + entity.setAreaId(model.getAreaId()); + entity.setRestrictType(model.getRestrictType()); + entity.setDateRange(model.getDateRange()); + entity.setTimeRange(model.getTimeRange()); + entity.setGranularity(model.getGranularity()); + entity.setRepetFrequency(model.getRepetFrequency()); + entity.setGranularityTimes(model.getGranularityTimes()); + entity.setRemark(model.getRemark()); + entity.setCreateBy(model.getCreateBy()); + entity.setCreateTime(model.getCreateTime()); + entity.setUpdateBy(model.getUpdateBy()); + entity.setUpdateTime(model.getUpdateTime()); + return entity; + } +} diff --git a/src/main/java/com/ruoyi/airline/domain/impl/AirlineAreaTimeRuleDomainImpl.java b/src/main/java/com/ruoyi/airline/domain/impl/AirlineAreaTimeRuleDomainImpl.java new file mode 100644 index 0000000..f01a713 --- /dev/null +++ b/src/main/java/com/ruoyi/airline/domain/impl/AirlineAreaTimeRuleDomainImpl.java @@ -0,0 +1,68 @@ +package com.ruoyi.airline.domain.impl; + +import com.ruoyi.airline.domain.api.IAirlineAreaTimeRuleDomain; +import com.ruoyi.airline.domain.convert.AirlineAreaTimeRuleDomainConvert; +import com.ruoyi.airline.domain.model.AirlineAreaTimeRule; +import com.ruoyi.airline.mapper.AirlineAreaTimeRuleMapper; +import com.ruoyi.airline.mapper.entity.AirlineAreaTimeRuleEntity; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 空域时间规则领域实现 + * + * @author 拓恒 + */ +@Component +public class AirlineAreaTimeRuleDomainImpl implements IAirlineAreaTimeRuleDomain { + + @Autowired + private AirlineAreaTimeRuleMapper airlineAreaTimeRuleMapper; + + @Override + public int insertTimeRule(AirlineAreaTimeRule model) { + AirlineAreaTimeRuleEntity entity = AirlineAreaTimeRuleDomainConvert.to(model); + int result = airlineAreaTimeRuleMapper.insertTimeRule(entity); + // 将自增的 ID 设置回 model 对象 + if (result > 0 && entity.getId() != null) { + model.setId(entity.getId()); + } + return result; + } + + @Override + public int updateTimeRule(AirlineAreaTimeRule model) { + AirlineAreaTimeRuleEntity entity = AirlineAreaTimeRuleDomainConvert.to(model); + return airlineAreaTimeRuleMapper.updateTimeRule(entity); + } + + @Override + public int deleteTimeRule(AirlineAreaTimeRule model) { + AirlineAreaTimeRuleEntity entity = AirlineAreaTimeRuleDomainConvert.to(model); + return airlineAreaTimeRuleMapper.deleteTimeRule(entity); + } + + @Override + public List selectTimeRuleList(AirlineAreaTimeRule model) { + AirlineAreaTimeRuleEntity entity = AirlineAreaTimeRuleDomainConvert.to(model); + return AirlineAreaTimeRuleDomainConvert.fromList(airlineAreaTimeRuleMapper.selectTimeRuleList(entity)); + } + + @Override + public AirlineAreaTimeRule selectTimeRuleById(Long id) { + AirlineAreaTimeRuleEntity entity = airlineAreaTimeRuleMapper.selectTimeRuleById(id); + return AirlineAreaTimeRuleDomainConvert.from(entity); + } + + @Override + public List selectTimeRuleListByAreaId(Long areaId) { + return AirlineAreaTimeRuleDomainConvert.fromList(airlineAreaTimeRuleMapper.selectTimeRuleListByAreaId(areaId)); + } + + @Override + public int deleteTimeRuleByAreaId(Long areaId) { + return airlineAreaTimeRuleMapper.deleteTimeRuleByAreaId(areaId); + } +} diff --git a/src/main/java/com/ruoyi/airline/domain/model/AirlineAreaTimeRule.java b/src/main/java/com/ruoyi/airline/domain/model/AirlineAreaTimeRule.java new file mode 100644 index 0000000..6aea394 --- /dev/null +++ b/src/main/java/com/ruoyi/airline/domain/model/AirlineAreaTimeRule.java @@ -0,0 +1,76 @@ +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 AirlineAreaTimeRule extends ExBaseEntity { + /** + * 主键ID + */ + private Long id; + + /** + * 空域ID + */ + private Long areaId; + + /** + * 限制类型:0是永久 1:单次,2:自定义 + */ + private Integer restrictType; + + /** + * 日期范围 + */ + private String dateRange; + + /** + * 时间范围 + */ + private String timeRange; + + /** + * 重复粒度值:0,1,2:日,周,月 restrictType=0时生效 + */ + private Integer granularity; + + /** + * 粒度循环周期:整数值,每1天、每1周,每1个月 + */ + private Integer repetFrequency; + + /** + * 重复粒度具体时间 granularity = 0时,该值为空,不生效;granularity = 1时,granularityTimes最多7个值(1,2,3,4,5,6,7分别周一周二。。。周日),granularity = 2时,granularityTimes最多12个值,(1,2,3,4,5,6,7。。12分别是1月,2月.。。12月) + */ + private String granularityTimes; + + /** + * 备注 + */ + private String remark; + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("areaId", getAreaId()) + .append("restrictType", getRestrictType()) + .append("dateRange", getDateRange()) + .append("timeRange", getTimeRange()) + .append("granularity", getGranularity()) + .append("repetFrequency", getRepetFrequency()) + .append("granularityTimes", getGranularityTimes()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/src/main/java/com/ruoyi/airline/mapper/AirlineAreaTimeRuleMapper.java b/src/main/java/com/ruoyi/airline/mapper/AirlineAreaTimeRuleMapper.java new file mode 100644 index 0000000..b5f877a --- /dev/null +++ b/src/main/java/com/ruoyi/airline/mapper/AirlineAreaTimeRuleMapper.java @@ -0,0 +1,27 @@ +package com.ruoyi.airline.mapper; + +import com.ruoyi.airline.mapper.entity.AirlineAreaTimeRuleEntity; + +import java.util.List; + +/** + * 空域时间规则 Mapper + * + * @author 拓恒 + */ +public interface AirlineAreaTimeRuleMapper { + + int insertTimeRule(AirlineAreaTimeRuleEntity entity); + + int updateTimeRule(AirlineAreaTimeRuleEntity entity); + + int deleteTimeRule(AirlineAreaTimeRuleEntity entity); + + List selectTimeRuleList(AirlineAreaTimeRuleEntity entity); + + AirlineAreaTimeRuleEntity selectTimeRuleById(Long id); + + List selectTimeRuleListByAreaId(Long areaId); + + int deleteTimeRuleByAreaId(Long areaId); +} diff --git a/src/main/java/com/ruoyi/airline/mapper/entity/AirlineAreaTimeRuleEntity.java b/src/main/java/com/ruoyi/airline/mapper/entity/AirlineAreaTimeRuleEntity.java new file mode 100644 index 0000000..d5e8787 --- /dev/null +++ b/src/main/java/com/ruoyi/airline/mapper/entity/AirlineAreaTimeRuleEntity.java @@ -0,0 +1,76 @@ +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_time_rule + * + * @author 拓恒 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class AirlineAreaTimeRuleEntity extends ExBaseEntity { + /** + * 主键ID + */ + private Long id; + + /** + * 空域ID + */ + private Long areaId; + + /** + * 限制类型:0是永久 1:单次,2:自定义 + */ + private Integer restrictType; + + /** + * 日期范围 + */ + private String dateRange; + + /** + * 时间范围 + */ + private String timeRange; + + /** + * 重复粒度值:0,1,2:日,周,月 restrictType=0时生效 + */ + private Integer granularity; + + /** + * 粒度循环周期:整数值,每1天、每1周,每1个月 + */ + private Integer repetFrequency; + + /** + * 重复粒度具体时间 granularity = 0时,该值为空,不生效;granularity = 1时,granularityTimes最多7个值(1,2,3,4,5,6,7分别周一周二。。。周日),granularity = 2时,granularityTimes最多12个值,(1,2,3,4,5,6,7。。12分别是1月,2月.。。12月) + */ + private String granularityTimes; + + /** + * 备注 + */ + private String remark; + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("areaId", getAreaId()) + .append("restrictType", getRestrictType()) + .append("dateRange", getDateRange()) + .append("timeRange", getTimeRange()) + .append("granularity", getGranularity()) + .append("repetFrequency", getRepetFrequency()) + .append("granularityTimes", getGranularityTimes()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/src/main/java/com/ruoyi/airline/service/api/IAirlineAreaGroupService.java b/src/main/java/com/ruoyi/airline/service/api/IAirlineAreaGroupService.java index 385268e..a55d74b 100644 --- a/src/main/java/com/ruoyi/airline/service/api/IAirlineAreaGroupService.java +++ b/src/main/java/com/ruoyi/airline/service/api/IAirlineAreaGroupService.java @@ -56,11 +56,30 @@ public interface IAirlineAreaGroupService { /** * 删除空域(软删除) + * * @param areaId 空域ID * @return 删除结果 */ int deleteArea(Long areaId); + /** + * 批量移动空域到新分组 + * + * @param areaIds 空域ID列表 + * @param groupId 原分组ID + * @param newGroupId 新分组ID + * @return 移动结果 + */ + int batchMoveAreaToNewGroup(List areaIds, Long groupId, Long newGroupId); + + /** + * 根据用户ID查询空域列表,支持名称模糊查询 + * + * @param dto 查询条件 + * @return 空域列表 + */ + List selectAreaListByUserId(AirlineAreaDTO dto); + /** * 批量移动空域到新分组 * @param areaIds 空域ID列表 diff --git a/src/main/java/com/ruoyi/airline/service/api/IAirlineAreaTimeRuleService.java b/src/main/java/com/ruoyi/airline/service/api/IAirlineAreaTimeRuleService.java new file mode 100644 index 0000000..b34d12f --- /dev/null +++ b/src/main/java/com/ruoyi/airline/service/api/IAirlineAreaTimeRuleService.java @@ -0,0 +1,29 @@ +package com.ruoyi.airline.service.api; + +import com.ruoyi.airline.service.dto.AirlineAreaTimeRuleDTO; + +import java.util.List; + +/** + * 空域时间规则服务接口 + * + * @author 拓恒 + */ +public interface IAirlineAreaTimeRuleService { + + int insertTimeRule(AirlineAreaTimeRuleDTO dto); + + int updateTimeRule(AirlineAreaTimeRuleDTO dto); + + int deleteTimeRule(Long id); + + List selectTimeRuleList(AirlineAreaTimeRuleDTO dto); + + AirlineAreaTimeRuleDTO selectTimeRuleById(Long id); + + List selectTimeRuleListByAreaId(Long areaId); + + int deleteTimeRuleByAreaId(Long areaId); + + int batchInsertTimeRule(Long areaId, List timeRules); +} diff --git a/src/main/java/com/ruoyi/airline/service/convert/AirlineAreaTimeRuleServiceConvert.java b/src/main/java/com/ruoyi/airline/service/convert/AirlineAreaTimeRuleServiceConvert.java new file mode 100644 index 0000000..6793b88 --- /dev/null +++ b/src/main/java/com/ruoyi/airline/service/convert/AirlineAreaTimeRuleServiceConvert.java @@ -0,0 +1,86 @@ +package com.ruoyi.airline.service.convert; + +import com.ruoyi.common.core.utils.BaseConvert; +import com.ruoyi.airline.domain.model.AirlineAreaTimeRule; +import com.ruoyi.airline.service.dto.AirlineAreaTimeRuleDTO; + +import java.util.List; + +/** + * 空域时间规则 Service 转换类 + * 用于 Domain 模型和 Service DTO 之间的转换 + * + * @author 拓恒 + */ +public class AirlineAreaTimeRuleServiceConvert extends BaseConvert +{ + private static final AirlineAreaTimeRuleServiceConvert INSTANCE = new AirlineAreaTimeRuleServiceConvert(); + + private AirlineAreaTimeRuleServiceConvert() { + super(AirlineAreaTimeRule.class, AirlineAreaTimeRuleDTO.class); + } + + public static AirlineAreaTimeRuleDTO from(AirlineAreaTimeRule model) + { + return INSTANCE.innerFrom(model); + } + + public static AirlineAreaTimeRule to(AirlineAreaTimeRuleDTO dto) + { + return INSTANCE.innerTo(dto); + } + + public static List fromList(List modelList) + { + return INSTANCE.innerFromList(modelList); + } + + public static List toList(List dtoList) + { + return INSTANCE.innerToList(dtoList); + } + + @Override + protected AirlineAreaTimeRuleDTO innerFrom(AirlineAreaTimeRule model) { + if (model == null) { + return null; + } + AirlineAreaTimeRuleDTO dto = new AirlineAreaTimeRuleDTO(); + dto.setId(model.getId()); + dto.setAreaId(model.getAreaId()); + dto.setRestrictType(model.getRestrictType()); + dto.setDateRange(model.getDateRange()); + dto.setTimeRange(model.getTimeRange()); + dto.setGranularity(model.getGranularity()); + dto.setRepetFrequency(model.getRepetFrequency()); + dto.setGranularityTimes(model.getGranularityTimes()); + dto.setRemark(model.getRemark()); + dto.setCreateBy(model.getCreateBy()); + dto.setCreateTime(model.getCreateTime()); + dto.setUpdateBy(model.getUpdateBy()); + dto.setUpdateTime(model.getUpdateTime()); + return dto; + } + + @Override + protected AirlineAreaTimeRule innerTo(AirlineAreaTimeRuleDTO dto) { + if (dto == null) { + return null; + } + AirlineAreaTimeRule model = new AirlineAreaTimeRule(); + model.setId(dto.getId()); + model.setAreaId(dto.getAreaId()); + model.setRestrictType(dto.getRestrictType()); + model.setDateRange(dto.getDateRange()); + model.setTimeRange(dto.getTimeRange()); + model.setGranularity(dto.getGranularity()); + model.setRepetFrequency(dto.getRepetFrequency()); + model.setGranularityTimes(dto.getGranularityTimes()); + model.setRemark(dto.getRemark()); + model.setCreateBy(dto.getCreateBy()); + model.setCreateTime(dto.getCreateTime()); + model.setUpdateBy(dto.getUpdateBy()); + model.setUpdateTime(dto.getUpdateTime()); + return model; + } +} diff --git a/src/main/java/com/ruoyi/airline/service/dto/AirlineAreaDTO.java b/src/main/java/com/ruoyi/airline/service/dto/AirlineAreaDTO.java index f0dc150..74bc520 100644 --- a/src/main/java/com/ruoyi/airline/service/dto/AirlineAreaDTO.java +++ b/src/main/java/com/ruoyi/airline/service/dto/AirlineAreaDTO.java @@ -6,6 +6,8 @@ import lombok.EqualsAndHashCode; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; +import java.util.List; + /** * 空域列表 airline_area * @@ -69,6 +71,11 @@ public class AirlineAreaDTO extends BaseEntity { */ private Double maxHeight; + /** + * 时间规则列表 + */ + private List timeRules; + /** * 备注 */ @@ -88,6 +95,7 @@ public class AirlineAreaDTO extends BaseEntity { .append("radius", getRadius()) .append("minHeight", getMinHeight()) .append("maxHeight", getMaxHeight()) + .append("timeRules", getTimeRules()) .append("remark", getRemark()) .toString(); } diff --git a/src/main/java/com/ruoyi/airline/service/dto/AirlineAreaTimeRuleDTO.java b/src/main/java/com/ruoyi/airline/service/dto/AirlineAreaTimeRuleDTO.java new file mode 100644 index 0000000..72317a0 --- /dev/null +++ b/src/main/java/com/ruoyi/airline/service/dto/AirlineAreaTimeRuleDTO.java @@ -0,0 +1,76 @@ +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; + +/** + * 空域时间规则 DTO + * + * @author 拓恒 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class AirlineAreaTimeRuleDTO extends BaseEntity { + /** + * 主键ID + */ + private Long id; + + /** + * 空域ID + */ + private Long areaId; + + /** + * 限制类型:0是永久 1:单次,2:自定义 + */ + private Integer restrictType; + + /** + * 日期范围 + */ + private String dateRange; + + /** + * 时间范围 + */ + private String timeRange; + + /** + * 重复粒度值:0,1,2:日,周,月 restrictType=0时生效 + */ + private Integer granularity; + + /** + * 粒度循环周期:整数值,每1天、每1周,每1个月 + */ + private Integer repetFrequency; + + /** + * 重复粒度具体时间 granularity = 0时,该值为空,不生效;granularity = 1时,granularityTimes最多7个值(1,2,3,4,5,6,7分别周一周二。。。周日),granularity = 2时,granularityTimes最多12个值,(1,2,3,4,5,6,7。。12分别是1月,2月.。。12月) + */ + private String granularityTimes; + + /** + * 备注 + */ + private String remark; + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("areaId", getAreaId()) + .append("restrictType", getRestrictType()) + .append("dateRange", getDateRange()) + .append("timeRange", getTimeRange()) + .append("granularity", getGranularity()) + .append("repetFrequency", getRepetFrequency()) + .append("granularityTimes", getGranularityTimes()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/src/main/java/com/ruoyi/airline/service/impl/AirlineAreaGroupServiceImpl.java b/src/main/java/com/ruoyi/airline/service/impl/AirlineAreaGroupServiceImpl.java index e40f06c..c6b9cf2 100644 --- a/src/main/java/com/ruoyi/airline/service/impl/AirlineAreaGroupServiceImpl.java +++ b/src/main/java/com/ruoyi/airline/service/impl/AirlineAreaGroupServiceImpl.java @@ -8,6 +8,7 @@ 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; @@ -41,6 +42,9 @@ public class AirlineAreaGroupServiceImpl implements IAirlineAreaGroupService { @Autowired private IAirlineAreaDomain iAirlineAreaDomain; + @Autowired + private IAirlineAreaTimeRuleService iAirlineAreaTimeRuleService; + @Override public int deletegroupById(Long userId, Long groupId) { // 1、删除空域分组明细 @@ -109,15 +113,36 @@ public class AirlineAreaGroupServiceImpl implements IAirlineAreaGroupService { if (!CollectionUtils.isEmpty(airlineAreaGroupInfoList)) { List ids = airlineAreaGroupInfoList.stream().map(AirlineAreaGroupInfo::getAreaId).toList(); List airlineAreaList = iAirlineAreaDomain.selectAreaListByIds(ids); - dto.setGroupInfos(AirlineAreaServiceConvert.fromList(airlineAreaList)); + 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); - return iAirlineAreaDomain.updateArea(model); + 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 @@ -134,6 +159,11 @@ public class AirlineAreaGroupServiceImpl implements IAirlineAreaGroupService { 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; @@ -147,7 +177,10 @@ public class AirlineAreaGroupServiceImpl implements IAirlineAreaGroupService { AirlineAreaGroupInfo model = AirlineAreaGroupInfoServiceConvert.to(dto); iAirlineAreaGroupInfoDomain.deleteGroupInfo(model); - // 2、软删除空域 + // 2、删除时间规则 -- 不删除 + // iAirlineAreaTimeRuleService.deleteTimeRuleByAreaId(areaId); + + // 3、软删除空域 AirlineArea areaModel = new AirlineArea(); areaModel.setId(areaId); return iAirlineAreaDomain.deleteArea(areaModel); @@ -190,6 +223,14 @@ public class AirlineAreaGroupServiceImpl implements IAirlineAreaGroupService { log.info("AirlineAreaGroupServiceImpl.selectAreaListByUserId - model.getName(): {}, model.getAreaType(): {}, model.getStatus(): {}", model.getName(), model.getAreaType(), model.getStatus()); - return AirlineAreaServiceConvert.fromList(iAirlineAreaDomain.selectAreaListByUserId(model)); + List areaDTOs = AirlineAreaServiceConvert.fromList(iAirlineAreaDomain.selectAreaListByUserId(model)); + + // 为每个空域添加时间规则 + for (AirlineAreaDTO areaDTO : areaDTOs) { + List timeRules = iAirlineAreaTimeRuleService.selectTimeRuleListByAreaId(areaDTO.getId()); + areaDTO.setTimeRules(timeRules); + } + + return areaDTOs; } } diff --git a/src/main/java/com/ruoyi/airline/service/impl/AirlineAreaTimeRuleServiceImpl.java b/src/main/java/com/ruoyi/airline/service/impl/AirlineAreaTimeRuleServiceImpl.java new file mode 100644 index 0000000..ad5e70d --- /dev/null +++ b/src/main/java/com/ruoyi/airline/service/impl/AirlineAreaTimeRuleServiceImpl.java @@ -0,0 +1,75 @@ +package com.ruoyi.airline.service.impl; + +import com.ruoyi.airline.domain.api.IAirlineAreaTimeRuleDomain; +import com.ruoyi.airline.domain.model.AirlineAreaTimeRule; +import com.ruoyi.airline.service.api.IAirlineAreaTimeRuleService; +import com.ruoyi.airline.service.convert.AirlineAreaTimeRuleServiceConvert; +import com.ruoyi.airline.service.dto.AirlineAreaTimeRuleDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 空域时间规则服务实现 + * + * @author 拓恒 + */ +@Service +public class AirlineAreaTimeRuleServiceImpl implements IAirlineAreaTimeRuleService { + + @Autowired + private IAirlineAreaTimeRuleDomain airlineAreaTimeRuleDomain; + + @Override + public int insertTimeRule(AirlineAreaTimeRuleDTO dto) { + AirlineAreaTimeRule model = AirlineAreaTimeRuleServiceConvert.to(dto); + return airlineAreaTimeRuleDomain.insertTimeRule(model); + } + + @Override + public int updateTimeRule(AirlineAreaTimeRuleDTO dto) { + AirlineAreaTimeRule model = AirlineAreaTimeRuleServiceConvert.to(dto); + return airlineAreaTimeRuleDomain.updateTimeRule(model); + } + + @Override + public int deleteTimeRule(Long id) { + AirlineAreaTimeRule model = new AirlineAreaTimeRule(); + model.setId(id); + return airlineAreaTimeRuleDomain.deleteTimeRule(model); + } + + @Override + public List selectTimeRuleList(AirlineAreaTimeRuleDTO dto) { + AirlineAreaTimeRule model = AirlineAreaTimeRuleServiceConvert.to(dto); + return AirlineAreaTimeRuleServiceConvert.fromList(airlineAreaTimeRuleDomain.selectTimeRuleList(model)); + } + + @Override + public AirlineAreaTimeRuleDTO selectTimeRuleById(Long id) { + return AirlineAreaTimeRuleServiceConvert.from(airlineAreaTimeRuleDomain.selectTimeRuleById(id)); + } + + @Override + public List selectTimeRuleListByAreaId(Long areaId) { + return AirlineAreaTimeRuleServiceConvert.fromList(airlineAreaTimeRuleDomain.selectTimeRuleListByAreaId(areaId)); + } + + @Override + public int deleteTimeRuleByAreaId(Long areaId) { + return airlineAreaTimeRuleDomain.deleteTimeRuleByAreaId(areaId); + } + + @Override + public int batchInsertTimeRule(Long areaId, List timeRules) { + int count = 0; + if (timeRules != null && !timeRules.isEmpty()) { + for (AirlineAreaTimeRuleDTO dto : timeRules) { + dto.setAreaId(areaId); + count += insertTimeRule(dto); + } + } + return count; + } +} diff --git a/src/main/resources/mapper/airline/AirlineAreaTimeRuleMapper.xml b/src/main/resources/mapper/airline/AirlineAreaTimeRuleMapper.xml new file mode 100644 index 0000000..d7a2ca2 --- /dev/null +++ b/src/main/resources/mapper/airline/AirlineAreaTimeRuleMapper.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + insert into airline_area_time_rule (area_id, restrict_type, date_range, time_range, granularity, repet_frequency, granularity_times, create_by, create_time, update_by, update_time, remark) + values (#{areaId}, #{restrictType}, #{dateRange}, #{timeRange}, #{granularity}, #{repetFrequency}, #{granularityTimes}, #{createBy}, now(), #{updateBy}, now(), #{remark}) + + + + + update airline_area_time_rule + set area_id = #{areaId}, + restrict_type = #{restrictType}, + date_range = #{dateRange}, + time_range = #{timeRange}, + granularity = #{granularity}, + repet_frequency = #{repetFrequency}, + granularity_times = #{granularityTimes}, + update_by = #{updateBy}, + update_time = now(), + remark = #{remark} + where id = #{id} + + + + + delete from airline_area_time_rule + where id = #{id} + + + + + + + + + + + + + + delete from airline_area_time_rule + where area_id = #{areaId} + + +