feat:增加空域限时规则

This commit is contained in:
gyb 2026-03-02 10:05:48 +08:00
parent 081261e750
commit 79fcee731d
16 changed files with 945 additions and 4 deletions

View File

@ -3,7 +3,10 @@ package com.ruoyi.airline.controller.convert;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.airline.api.domain.AirlineAreaVO; 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.AirlineAreaDTO;
import com.ruoyi.airline.service.dto.AirlineAreaTimeRuleDTO;
import com.ruoyi.common.core.utils.BaseConvert; import com.ruoyi.common.core.utils.BaseConvert;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -66,6 +69,12 @@ public class AirlineAreaControllerConvert extends BaseConvert<AirlineAreaDTO, Ai
vo.setMaxHeight(dto.getMaxHeight()); vo.setMaxHeight(dto.getMaxHeight());
vo.setRemark(dto.getRemark()); vo.setRemark(dto.getRemark());
// 转换时间规则列表
if (dto.getTimeRules() != null && !dto.getTimeRules().isEmpty()) {
List<AirlineAreaTimeRuleVO> timeRuleVOs = AirlineAreaTimeRuleControllerConvert.fromList(dto.getTimeRules());
vo.setTimeRules(timeRuleVOs);
}
// 将字符串转换为 List<PointInfo> // 将字符串转换为 List<PointInfo>
if (dto.getPoints() != null && !dto.getPoints().isEmpty()) { if (dto.getPoints() != null && !dto.getPoints().isEmpty()) {
try { try {
@ -103,6 +112,12 @@ public class AirlineAreaControllerConvert extends BaseConvert<AirlineAreaDTO, Ai
dto.setMaxHeight(vo.getMaxHeight()); dto.setMaxHeight(vo.getMaxHeight());
dto.setRemark(vo.getRemark()); dto.setRemark(vo.getRemark());
// 转换时间规则列表
if (vo.getTimeRules() != null && !vo.getTimeRules().isEmpty()) {
List<AirlineAreaTimeRuleDTO> timeRuleDTOs = AirlineAreaTimeRuleControllerConvert.toList(vo.getTimeRules());
dto.setTimeRules(timeRuleDTOs);
}
// List<PointInfo> 转换为字符串 // List<PointInfo> 转换为字符串
if (vo.getPoints() != null && !vo.getPoints().isEmpty()) { if (vo.getPoints() != null && !vo.getPoints().isEmpty()) {
try { try {

View File

@ -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<AirlineAreaTimeRuleDTO, AirlineAreaTimeRuleVO>
{
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<AirlineAreaTimeRuleVO> fromList(List<AirlineAreaTimeRuleDTO> dtoList)
{
return INSTANCE.innerFromList(dtoList);
}
public static List<AirlineAreaTimeRuleDTO> toList(List<AirlineAreaTimeRuleVO> 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;
}
}

View File

@ -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<AirlineAreaTimeRule> selectTimeRuleList(AirlineAreaTimeRule model);
AirlineAreaTimeRule selectTimeRuleById(Long id);
List<AirlineAreaTimeRule> selectTimeRuleListByAreaId(Long areaId);
int deleteTimeRuleByAreaId(Long areaId);
}

View File

@ -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<AirlineAreaTimeRuleEntity, AirlineAreaTimeRule>
{
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<AirlineAreaTimeRule> fromList(List<AirlineAreaTimeRuleEntity> entityList)
{
return INSTANCE.innerFromList(entityList);
}
public static List<AirlineAreaTimeRuleEntity> toList(List<AirlineAreaTimeRule> 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;
}
}

View File

@ -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<AirlineAreaTimeRule> 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<AirlineAreaTimeRule> selectTimeRuleListByAreaId(Long areaId) {
return AirlineAreaTimeRuleDomainConvert.fromList(airlineAreaTimeRuleMapper.selectTimeRuleListByAreaId(areaId));
}
@Override
public int deleteTimeRuleByAreaId(Long areaId) {
return airlineAreaTimeRuleMapper.deleteTimeRuleByAreaId(areaId);
}
}

View File

@ -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,712分别是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();
}
}

View File

@ -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<AirlineAreaTimeRuleEntity> selectTimeRuleList(AirlineAreaTimeRuleEntity entity);
AirlineAreaTimeRuleEntity selectTimeRuleById(Long id);
List<AirlineAreaTimeRuleEntity> selectTimeRuleListByAreaId(Long areaId);
int deleteTimeRuleByAreaId(Long areaId);
}

View File

@ -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,712分别是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();
}
}

View File

@ -56,11 +56,30 @@ public interface IAirlineAreaGroupService {
/** /**
* 删除空域软删除 * 删除空域软删除
*
* @param areaId 空域ID * @param areaId 空域ID
* @return 删除结果 * @return 删除结果
*/ */
int deleteArea(Long areaId); int deleteArea(Long areaId);
/**
* 批量移动空域到新分组
*
* @param areaIds 空域ID列表
* @param groupId 原分组ID
* @param newGroupId 新分组ID
* @return 移动结果
*/
int batchMoveAreaToNewGroup(List<Long> areaIds, Long groupId, Long newGroupId);
/**
* 根据用户ID查询空域列表支持名称模糊查询
*
* @param dto 查询条件
* @return 空域列表
*/
List<AirlineAreaDTO> selectAreaListByUserId(AirlineAreaDTO dto);
/** /**
* 批量移动空域到新分组 * 批量移动空域到新分组
* @param areaIds 空域ID列表 * @param areaIds 空域ID列表

View File

@ -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<AirlineAreaTimeRuleDTO> selectTimeRuleList(AirlineAreaTimeRuleDTO dto);
AirlineAreaTimeRuleDTO selectTimeRuleById(Long id);
List<AirlineAreaTimeRuleDTO> selectTimeRuleListByAreaId(Long areaId);
int deleteTimeRuleByAreaId(Long areaId);
int batchInsertTimeRule(Long areaId, List<AirlineAreaTimeRuleDTO> timeRules);
}

View File

@ -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<AirlineAreaTimeRule, AirlineAreaTimeRuleDTO>
{
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<AirlineAreaTimeRuleDTO> fromList(List<AirlineAreaTimeRule> modelList)
{
return INSTANCE.innerFromList(modelList);
}
public static List<AirlineAreaTimeRule> toList(List<AirlineAreaTimeRuleDTO> 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;
}
}

View File

@ -6,6 +6,8 @@ import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle; import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.List;
/** /**
* 空域列表 airline_area * 空域列表 airline_area
* *
@ -69,6 +71,11 @@ public class AirlineAreaDTO extends BaseEntity {
*/ */
private Double maxHeight; private Double maxHeight;
/**
* 时间规则列表
*/
private List<AirlineAreaTimeRuleDTO> timeRules;
/** /**
* 备注 * 备注
*/ */
@ -88,6 +95,7 @@ public class AirlineAreaDTO extends BaseEntity {
.append("radius", getRadius()) .append("radius", getRadius())
.append("minHeight", getMinHeight()) .append("minHeight", getMinHeight())
.append("maxHeight", getMaxHeight()) .append("maxHeight", getMaxHeight())
.append("timeRules", getTimeRules())
.append("remark", getRemark()) .append("remark", getRemark())
.toString(); .toString();
} }

View File

@ -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,712分别是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();
}
}

View File

@ -8,6 +8,7 @@ import com.ruoyi.airline.domain.model.AirlineArea;
import com.ruoyi.airline.domain.model.AirlineAreaGroup; import com.ruoyi.airline.domain.model.AirlineAreaGroup;
import com.ruoyi.airline.domain.model.AirlineAreaGroupInfo; import com.ruoyi.airline.domain.model.AirlineAreaGroupInfo;
import com.ruoyi.airline.service.api.IAirlineAreaGroupService; 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.AirlineAreaGroupInfoServiceConvert;
import com.ruoyi.airline.service.convert.AirlineAreaGroupServiceConvert; import com.ruoyi.airline.service.convert.AirlineAreaGroupServiceConvert;
import com.ruoyi.airline.service.convert.AirlineAreaServiceConvert; import com.ruoyi.airline.service.convert.AirlineAreaServiceConvert;
@ -41,6 +42,9 @@ public class AirlineAreaGroupServiceImpl implements IAirlineAreaGroupService {
@Autowired @Autowired
private IAirlineAreaDomain iAirlineAreaDomain; private IAirlineAreaDomain iAirlineAreaDomain;
@Autowired
private IAirlineAreaTimeRuleService iAirlineAreaTimeRuleService;
@Override @Override
public int deletegroupById(Long userId, Long groupId) { public int deletegroupById(Long userId, Long groupId) {
// 1删除空域分组明细 // 1删除空域分组明细
@ -109,15 +113,36 @@ public class AirlineAreaGroupServiceImpl implements IAirlineAreaGroupService {
if (!CollectionUtils.isEmpty(airlineAreaGroupInfoList)) { if (!CollectionUtils.isEmpty(airlineAreaGroupInfoList)) {
List<Long> ids = airlineAreaGroupInfoList.stream().map(AirlineAreaGroupInfo::getAreaId).toList(); List<Long> ids = airlineAreaGroupInfoList.stream().map(AirlineAreaGroupInfo::getAreaId).toList();
List<AirlineArea> airlineAreaList = iAirlineAreaDomain.selectAreaListByIds(ids); List<AirlineArea> airlineAreaList = iAirlineAreaDomain.selectAreaListByIds(ids);
dto.setGroupInfos(AirlineAreaServiceConvert.fromList(airlineAreaList)); List<AirlineAreaDTO> areaDTOs = AirlineAreaServiceConvert.fromList(airlineAreaList);
// 为每个空域添加时间规则
for (AirlineAreaDTO areaDTO : areaDTOs) {
List<com.ruoyi.airline.service.dto.AirlineAreaTimeRuleDTO> timeRules = iAirlineAreaTimeRuleService.selectTimeRuleListByAreaId(areaDTO.getId());
areaDTO.setTimeRules(timeRules);
}
dto.setGroupInfos(areaDTOs);
} }
return dto; return dto;
} }
@Override @Override
public int updateAreaWithPoints(AirlineAreaDTO area) { public int updateAreaWithPoints(AirlineAreaDTO area) {
// 1更新空域信息
AirlineArea model = AirlineAreaServiceConvert.to(area); 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 @Override
@ -134,6 +159,11 @@ public class AirlineAreaGroupServiceImpl implements IAirlineAreaGroupService {
groupInfo.setCreateBy(area.getCreateBy()); groupInfo.setCreateBy(area.getCreateBy());
groupInfo.setUpdateBy(area.getUpdateBy()); groupInfo.setUpdateBy(area.getUpdateBy());
iAirlineAreaGroupInfoDomain.insertGroupInfo(groupInfo); iAirlineAreaGroupInfoDomain.insertGroupInfo(groupInfo);
// 3保存时间规则
if (area.getTimeRules() != null && !area.getTimeRules().isEmpty()) {
iAirlineAreaTimeRuleService.batchInsertTimeRule(model.getId(), area.getTimeRules());
}
} }
return result; return result;
@ -147,7 +177,10 @@ public class AirlineAreaGroupServiceImpl implements IAirlineAreaGroupService {
AirlineAreaGroupInfo model = AirlineAreaGroupInfoServiceConvert.to(dto); AirlineAreaGroupInfo model = AirlineAreaGroupInfoServiceConvert.to(dto);
iAirlineAreaGroupInfoDomain.deleteGroupInfo(model); iAirlineAreaGroupInfoDomain.deleteGroupInfo(model);
// 2软删除空域 // 2删除时间规则 -- 不删除
// iAirlineAreaTimeRuleService.deleteTimeRuleByAreaId(areaId);
// 3软删除空域
AirlineArea areaModel = new AirlineArea(); AirlineArea areaModel = new AirlineArea();
areaModel.setId(areaId); areaModel.setId(areaId);
return iAirlineAreaDomain.deleteArea(areaModel); return iAirlineAreaDomain.deleteArea(areaModel);
@ -190,6 +223,14 @@ public class AirlineAreaGroupServiceImpl implements IAirlineAreaGroupService {
log.info("AirlineAreaGroupServiceImpl.selectAreaListByUserId - model.getName(): {}, model.getAreaType(): {}, model.getStatus(): {}", log.info("AirlineAreaGroupServiceImpl.selectAreaListByUserId - model.getName(): {}, model.getAreaType(): {}, model.getStatus(): {}",
model.getName(), model.getAreaType(), model.getStatus()); model.getName(), model.getAreaType(), model.getStatus());
return AirlineAreaServiceConvert.fromList(iAirlineAreaDomain.selectAreaListByUserId(model)); List<AirlineAreaDTO> areaDTOs = AirlineAreaServiceConvert.fromList(iAirlineAreaDomain.selectAreaListByUserId(model));
// 为每个空域添加时间规则
for (AirlineAreaDTO areaDTO : areaDTOs) {
List<com.ruoyi.airline.service.dto.AirlineAreaTimeRuleDTO> timeRules = iAirlineAreaTimeRuleService.selectTimeRuleListByAreaId(areaDTO.getId());
areaDTO.setTimeRules(timeRules);
}
return areaDTOs;
} }
} }

View File

@ -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<AirlineAreaTimeRuleDTO> 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<AirlineAreaTimeRuleDTO> 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<AirlineAreaTimeRuleDTO> timeRules) {
int count = 0;
if (timeRules != null && !timeRules.isEmpty()) {
for (AirlineAreaTimeRuleDTO dto : timeRules) {
dto.setAreaId(areaId);
count += insertTimeRule(dto);
}
}
return count;
}
}

View File

@ -0,0 +1,86 @@
<?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.AirlineAreaTimeRuleMapper">
<!-- 结果映射 -->
<resultMap id="AirlineAreaTimeRuleResult" type="com.ruoyi.airline.mapper.entity.AirlineAreaTimeRuleEntity">
<id property="id" column="id" />
<result property="areaId" column="area_id" />
<result property="restrictType" column="restrict_type" />
<result property="dateRange" column="date_range" />
<result property="timeRange" column="time_range" />
<result property="granularity" column="granularity" />
<result property="repetFrequency" column="repet_frequency" />
<result property="granularityTimes" column="granularity_times" />
<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="insertTimeRule" parameterType="com.ruoyi.airline.mapper.entity.AirlineAreaTimeRuleEntity" useGeneratedKeys="true" keyProperty="id">
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})
</insert>
<!-- 更新时间规则 -->
<update id="updateTimeRule" parameterType="com.ruoyi.airline.mapper.entity.AirlineAreaTimeRuleEntity">
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}
</update>
<!-- 删除时间规则 -->
<delete id="deleteTimeRule" parameterType="com.ruoyi.airline.mapper.entity.AirlineAreaTimeRuleEntity">
delete from airline_area_time_rule
where id = #{id}
</delete>
<!-- 查询时间规则列表 -->
<select id="selectTimeRuleList" parameterType="com.ruoyi.airline.mapper.entity.AirlineAreaTimeRuleEntity" resultMap="AirlineAreaTimeRuleResult">
select id, area_id, restrict_type, date_range, time_range, granularity, repet_frequency, granularity_times, create_by, create_time, update_by, update_time, remark
from airline_area_time_rule
<where>
<if test="areaId != null">
and area_id = #{areaId}
</if>
<if test="restrictType != null">
and restrict_type = #{restrictType}
</if>
</where>
</select>
<!-- 根据ID查询时间规则 -->
<select id="selectTimeRuleById" parameterType="java.lang.Long" resultMap="AirlineAreaTimeRuleResult">
select id, area_id, restrict_type, date_range, time_range, granularity, repet_frequency, granularity_times, create_by, create_time, update_by, update_time, remark
from airline_area_time_rule
where id = #{id}
</select>
<!-- 根据空域ID查询时间规则列表 -->
<select id="selectTimeRuleListByAreaId" parameterType="java.lang.Long" resultMap="AirlineAreaTimeRuleResult">
select id, area_id, restrict_type, date_range, time_range, granularity, repet_frequency, granularity_times, create_by, create_time, update_by, update_time, remark
from airline_area_time_rule
where area_id = #{areaId}
</select>
<!-- 根据空域ID删除时间规则 -->
<delete id="deleteTimeRuleByAreaId" parameterType="java.lang.Long">
delete from airline_area_time_rule
where area_id = #{areaId}
</delete>
</mapper>