diff --git a/src/main/java/com/ruoyi/device/controller/convert/DeviceAirTypeGeneralEnumVOConvert.java b/src/main/java/com/ruoyi/device/controller/convert/DeviceAirTypeGeneralEnumVOConvert.java index 6ae1bc1..a09b980 100644 --- a/src/main/java/com/ruoyi/device/controller/convert/DeviceAirTypeGeneralEnumVOConvert.java +++ b/src/main/java/com/ruoyi/device/controller/convert/DeviceAirTypeGeneralEnumVOConvert.java @@ -1,10 +1,15 @@ package com.ruoyi.device.controller.convert; import com.ruoyi.common.core.utils.BaseConvert; +import com.ruoyi.device.api.domain.AirLoadTypeVO; import com.ruoyi.device.api.domain.AirTypeGeneralEnumVO; +import com.ruoyi.device.service.dto.DeviceAirLoadTypeDTO; import com.ruoyi.device.service.dto.DeviceAirTypeGeneralEnumDTO; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 无人机类型通用枚举Controller转换器 @@ -23,7 +28,27 @@ public class DeviceAirTypeGeneralEnumVOConvert extends BaseConvert> loadVOMap = new HashMap<>(); + for (Map.Entry> entry : dto.getLoadList().entrySet()) { + String series = entry.getKey(); + List loadDTOList = entry.getValue(); + List loadVOList = new ArrayList<>(); + for (DeviceAirLoadTypeDTO loadDTO : loadDTOList) { + AirLoadTypeVO loadVO = new AirLoadTypeVO(); + loadVO.setLoadName(loadDTO.getLoadName()); + loadVO.setLoadSeries(loadDTO.getLoadSeries()); + loadVO.setLoadCategory(loadDTO.getLoadCategory()); + loadVO.setSlot(loadDTO.getSlot()); + loadVOList.add(loadVO); + } + loadVOMap.put(series, loadVOList); + } + vo.setLoadList(loadVOMap); + } + return vo; } public static DeviceAirTypeGeneralEnumDTO to(AirTypeGeneralEnumVO vo) @@ -33,7 +58,11 @@ public class DeviceAirTypeGeneralEnumVOConvert extends BaseConvert fromList(List dtoList) { - return INSTANCE.innerFromList(dtoList); + List voList = new ArrayList<>(); + for (DeviceAirTypeGeneralEnumDTO dto : dtoList) { + voList.add(from(dto)); + } + return voList; } public static List toList(List voList) diff --git a/src/main/java/com/ruoyi/device/domain/DeviceAirLoadSlot.java b/src/main/java/com/ruoyi/device/domain/DeviceAirLoadSlot.java new file mode 100644 index 0000000..adceefc --- /dev/null +++ b/src/main/java/com/ruoyi/device/domain/DeviceAirLoadSlot.java @@ -0,0 +1,38 @@ +package com.ruoyi.device.domain; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 无人机负载槽位实体 + * + * @author 拓恒 + * @date 2026-03-04 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class DeviceAirLoadSlot extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** 主键 */ + private Long id; + + /** 无人机厂商ID */ + private Long vendorId; + + /** 无人机主类型 */ + private Long type; + + /** 无人机子类型 */ + private Long subType; + + /** 槽位数 */ + private Integer slotCount; + + /** 负载数量限制 */ + private Integer loadLimit; + + /** 配件限制数量 */ + private Integer accessoryLimit; +} diff --git a/src/main/java/com/ruoyi/device/domain/DeviceAirLoadType.java b/src/main/java/com/ruoyi/device/domain/DeviceAirLoadType.java new file mode 100644 index 0000000..f6e189c --- /dev/null +++ b/src/main/java/com/ruoyi/device/domain/DeviceAirLoadType.java @@ -0,0 +1,41 @@ +package com.ruoyi.device.domain; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 无人机负载类型实体 + * + * @author 拓恒 + * @date 2026-03-04 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class DeviceAirLoadType extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** 主键 */ + private Long id; + + /** 无人机厂商ID */ + private Long vendorId; + + /** 无人机主类型 */ + private Long type; + + /** 无人机子类型 */ + private Long subType; + + /** 负载名称 */ + private String loadName; + + /** 负载系列 */ + private String loadSeries; + + /** 负载分类:0-负载,1-配件 */ + private Integer loadCategory; + + /** 槽:1、2 或者-1(-1代表全部槽位可用) */ + private Integer slot; +} diff --git a/src/main/java/com/ruoyi/device/domain/api/IDeviceAirLoadSlotDomain.java b/src/main/java/com/ruoyi/device/domain/api/IDeviceAirLoadSlotDomain.java new file mode 100644 index 0000000..e8faefa --- /dev/null +++ b/src/main/java/com/ruoyi/device/domain/api/IDeviceAirLoadSlotDomain.java @@ -0,0 +1,21 @@ +package com.ruoyi.device.domain.api; + +import com.ruoyi.device.domain.DeviceAirLoadSlot; + +import java.util.List; + +/** + * 无人机负载槽位领域接口 + * + * @author 拓恒 + * @date 2026-03-04 + */ +public interface IDeviceAirLoadSlotDomain { + + /** + * 根据厂商ID、主类型、子类型查询负载槽位 + * + * @return 负载槽位信息 + */ + DeviceAirLoadSlot selectDeviceAirLoadSlotByVendorAndType(DeviceAirLoadSlot deviceAirLoadSlot); +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/device/domain/api/IDeviceAirLoadTypeDomain.java b/src/main/java/com/ruoyi/device/domain/api/IDeviceAirLoadTypeDomain.java new file mode 100644 index 0000000..4634489 --- /dev/null +++ b/src/main/java/com/ruoyi/device/domain/api/IDeviceAirLoadTypeDomain.java @@ -0,0 +1,23 @@ +package com.ruoyi.device.domain.api; + +import com.ruoyi.device.domain.DeviceAirLoadType; +import java.util.List; +import java.util.Map; + +/** + * 无人机负载类型领域接口 + * + * @author 拓恒 + * @date 2026-03-04 + */ +public interface IDeviceAirLoadTypeDomain { + /** + * 查询无人机负载类型列表 + * + * @param deviceAirLoadType 无人机负载类型 + * @return 无人机负载类型集合 + */ + List selectDeviceAirLoadTypeList(DeviceAirLoadType deviceAirLoadType); + + +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/device/domain/convert/DeviceAirLoadSlotConvert.java b/src/main/java/com/ruoyi/device/domain/convert/DeviceAirLoadSlotConvert.java new file mode 100644 index 0000000..935ae48 --- /dev/null +++ b/src/main/java/com/ruoyi/device/domain/convert/DeviceAirLoadSlotConvert.java @@ -0,0 +1,57 @@ +package com.ruoyi.device.domain.convert; + +import com.ruoyi.common.core.utils.BaseConvert; +import com.ruoyi.device.domain.DeviceAirLoadSlot; +import com.ruoyi.device.mapper.entity.DeviceAirLoadSlotEntity; + +import java.util.List; + +/** + * 无人机负载槽位领域层转换器 + * Domain Entity ↔ Mapper Entity + * + * @author 拓恒 + * @date 2026-03-04 + */ +public class DeviceAirLoadSlotConvert extends BaseConvert +{ + + private static final DeviceAirLoadSlotConvert INSTANCE = new DeviceAirLoadSlotConvert(); + + private DeviceAirLoadSlotConvert() { + super(DeviceAirLoadSlotEntity.class, DeviceAirLoadSlot.class); + } + + /** + * Entity 转 Domain + */ + public static DeviceAirLoadSlot from(DeviceAirLoadSlotEntity entity) + { + return INSTANCE.innerFrom(entity); + } + + /** + * Domain 转 Entity + */ + public static DeviceAirLoadSlotEntity to(DeviceAirLoadSlot domain) + { + return INSTANCE.innerTo(domain); + } + + /** + * Entity List 转 Domain List + */ + public static List fromList(List entityList) + { + return INSTANCE.innerFromList(entityList); + } + + /** + * Domain List 转 Entity List + */ + public static List toList(List domainList) + { + return INSTANCE.innerToList(domainList); + } + +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/device/domain/convert/DeviceAirLoadTypeConvert.java b/src/main/java/com/ruoyi/device/domain/convert/DeviceAirLoadTypeConvert.java new file mode 100644 index 0000000..4dec906 --- /dev/null +++ b/src/main/java/com/ruoyi/device/domain/convert/DeviceAirLoadTypeConvert.java @@ -0,0 +1,57 @@ +package com.ruoyi.device.domain.convert; + +import com.ruoyi.common.core.utils.BaseConvert; +import com.ruoyi.device.domain.DeviceAirLoadType; +import com.ruoyi.device.mapper.entity.DeviceAirLoadTypeEntity; + +import java.util.List; + +/** + * 无人机负载类型领域层转换器 + * Domain Entity ↔ Mapper Entity + * + * @author 拓恒 + * @date 2026-03-04 + */ +public class DeviceAirLoadTypeConvert extends BaseConvert +{ + + private static final DeviceAirLoadTypeConvert INSTANCE = new DeviceAirLoadTypeConvert(); + + private DeviceAirLoadTypeConvert() { + super(DeviceAirLoadTypeEntity.class, DeviceAirLoadType.class); + } + + /** + * Entity 转 Domain + */ + public static DeviceAirLoadType from(DeviceAirLoadTypeEntity entity) + { + return INSTANCE.innerFrom(entity); + } + + /** + * Domain 转 Entity + */ + public static DeviceAirLoadTypeEntity to(DeviceAirLoadType domain) + { + return INSTANCE.innerTo(domain); + } + + /** + * Entity List 转 Domain List + */ + public static List fromList(List entityList) + { + return INSTANCE.innerFromList(entityList); + } + + /** + * Domain List 转 Entity List + */ + public static List toList(List domainList) + { + return INSTANCE.innerToList(domainList); + } + +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/device/domain/impl/DeviceAirLoadSlotDomainImpl.java b/src/main/java/com/ruoyi/device/domain/impl/DeviceAirLoadSlotDomainImpl.java new file mode 100644 index 0000000..d1c2b0c --- /dev/null +++ b/src/main/java/com/ruoyi/device/domain/impl/DeviceAirLoadSlotDomainImpl.java @@ -0,0 +1,41 @@ +package com.ruoyi.device.domain.impl; + +import com.ruoyi.device.domain.DeviceAirLoadSlot; +import com.ruoyi.device.domain.api.IDeviceAirLoadSlotDomain; +import com.ruoyi.device.domain.convert.DeviceAirLoadSlotConvert; +import com.ruoyi.device.domain.convert.DeviceAirLoadTypeConvert; +import com.ruoyi.device.mapper.DeviceAirLoadSlotMapper; +import com.ruoyi.device.mapper.entity.DeviceAirLoadSlotEntity; +import com.ruoyi.device.mapper.entity.DeviceAirLoadTypeEntity; +import com.ruoyi.device.service.dto.DeviceAirLoadSlotDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 无人机负载槽位Domain实现类 + * + * @author 拓恒 + * @date 2026-03-04 + */ +@Repository +public class DeviceAirLoadSlotDomainImpl implements IDeviceAirLoadSlotDomain { + + @Autowired + private DeviceAirLoadSlotMapper deviceAirLoadSlotMapper; + + @Override + public DeviceAirLoadSlot selectDeviceAirLoadSlotByVendorAndType(DeviceAirLoadSlot deviceAirLoadSlot) { + DeviceAirLoadSlotEntity entity = DeviceAirLoadSlotConvert.to(deviceAirLoadSlot); + DeviceAirLoadSlotEntity result = deviceAirLoadSlotMapper.selectDeviceAirLoadSlotByVendorAndType(entity); + if (result == null) { + // 设置默认值 + result = new DeviceAirLoadSlotEntity(); + result.setSlotCount(0); + result.setLoadLimit(0); + result.setAccessoryLimit(0); + } + return DeviceAirLoadSlotConvert.from(result); + } +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/device/domain/impl/DeviceAirLoadTypeDomainImpl.java b/src/main/java/com/ruoyi/device/domain/impl/DeviceAirLoadTypeDomainImpl.java new file mode 100644 index 0000000..3a1e800 --- /dev/null +++ b/src/main/java/com/ruoyi/device/domain/impl/DeviceAirLoadTypeDomainImpl.java @@ -0,0 +1,35 @@ +package com.ruoyi.device.domain.impl; + +import com.ruoyi.device.domain.DeviceAirLoadType; +import com.ruoyi.device.domain.api.IDeviceAirLoadTypeDomain; +import com.ruoyi.device.domain.convert.DeviceAirLoadTypeConvert; +import com.ruoyi.device.mapper.DeviceAirLoadTypeMapper; +import com.ruoyi.device.mapper.entity.DeviceAirLoadTypeEntity; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 无人机负载类型Domain实现类 + * + * @author 拓恒 + * @date 2026-03-04 + */ +@Repository +public class DeviceAirLoadTypeDomainImpl implements IDeviceAirLoadTypeDomain { + + @Autowired + private DeviceAirLoadTypeMapper deviceAirLoadTypeMapper; + + @Override + public List selectDeviceAirLoadTypeList(DeviceAirLoadType deviceAirLoadType) { + DeviceAirLoadTypeEntity entity = DeviceAirLoadTypeConvert.to(deviceAirLoadType); + List entityList = deviceAirLoadTypeMapper.selectDeviceAirLoadTypeList(entity); + return DeviceAirLoadTypeConvert.fromList(entityList); + } + +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/device/mapper/DeviceAirLoadSlotMapper.java b/src/main/java/com/ruoyi/device/mapper/DeviceAirLoadSlotMapper.java new file mode 100644 index 0000000..70acc57 --- /dev/null +++ b/src/main/java/com/ruoyi/device/mapper/DeviceAirLoadSlotMapper.java @@ -0,0 +1,20 @@ +package com.ruoyi.device.mapper; + +import com.ruoyi.device.mapper.entity.DeviceAirLoadSlotEntity; +import java.util.List; + +/** + * 无人机负载槽位Mapper接口 + * + * @author 拓恒 + * @date 2026-03-04 + */ +public interface DeviceAirLoadSlotMapper { + /** + * 根据厂商ID、主类型、子类型查询负载槽位 + * + * @return 负载槽位信息 + */ + DeviceAirLoadSlotEntity selectDeviceAirLoadSlotByVendorAndType(DeviceAirLoadSlotEntity entity); + +} diff --git a/src/main/java/com/ruoyi/device/mapper/DeviceAirLoadTypeMapper.java b/src/main/java/com/ruoyi/device/mapper/DeviceAirLoadTypeMapper.java new file mode 100644 index 0000000..4207356 --- /dev/null +++ b/src/main/java/com/ruoyi/device/mapper/DeviceAirLoadTypeMapper.java @@ -0,0 +1,20 @@ +package com.ruoyi.device.mapper; + +import com.ruoyi.device.mapper.entity.DeviceAirLoadTypeEntity; +import java.util.List; + +/** + * 无人机负载类型Mapper接口 + * + * @author 拓恒 + * @date 2026-03-04 + */ +public interface DeviceAirLoadTypeMapper { + /** + * 查询无人机负载类型列表 + * + * @param deviceAirLoadType 无人机负载类型 + * @return 无人机负载类型集合 + */ + List selectDeviceAirLoadTypeList(DeviceAirLoadTypeEntity deviceAirLoadType); +} diff --git a/src/main/java/com/ruoyi/device/mapper/entity/DeviceAirLoadSlotEntity.java b/src/main/java/com/ruoyi/device/mapper/entity/DeviceAirLoadSlotEntity.java new file mode 100644 index 0000000..3e52a65 --- /dev/null +++ b/src/main/java/com/ruoyi/device/mapper/entity/DeviceAirLoadSlotEntity.java @@ -0,0 +1,54 @@ +package com.ruoyi.device.mapper.entity; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 无人机负载槽位表实体对象 device_air_load_slot + * Mapper 层实体,对应数据库表 + * + * @author 拓恒 + * @date 2026-03-04 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class DeviceAirLoadSlotEntity extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键 */ + private Long id; + + /** 无人机厂商ID */ + private Long vendorId; + + /** 无人机主类型 */ + private Long type; + + /** 无人机子类型 */ + private Long subType; + + /** 槽位数 */ + private Integer slotCount; + + /** 负载数量限制 */ + private Integer loadLimit; + + /** 配件限制数量 */ + private Integer accessoryLimit; + + @Override + public String toString() + { + return "DeviceAirLoadSlotEntity{" + + "id=" + id + + ", vendorId=" + vendorId + + ", type=" + type + + ", subType=" + subType + + ", slotCount=" + slotCount + + ", loadLimit=" + loadLimit + + ", accessoryLimit=" + accessoryLimit + + '}'; + } +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/device/mapper/entity/DeviceAirLoadTypeEntity.java b/src/main/java/com/ruoyi/device/mapper/entity/DeviceAirLoadTypeEntity.java new file mode 100644 index 0000000..0bc0e98 --- /dev/null +++ b/src/main/java/com/ruoyi/device/mapper/entity/DeviceAirLoadTypeEntity.java @@ -0,0 +1,60 @@ +package com.ruoyi.device.mapper.entity; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 无人机负载类型表实体对象 device_air_load_type + * Mapper 层实体,对应数据库表 + * + * @author 拓恒 + * @date 2026-03-04 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class DeviceAirLoadTypeEntity extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键 */ + private Long id; + + /** 无人机厂商ID */ + private Long vendorId; + + /** 无人机主类型 */ + private Long type; + + /** 无人机子类型 */ + private Long subType; + + /** 负载名称 */ + private String loadName; + + /** 负载系列 */ + private String loadSeries; + + /** 负载分类:0-负载,1-配件 */ + private Integer loadCategory; + + /** 槽:1、2 或者-1(-1代表全部槽位可用) */ + private Integer slot; + + + + @Override + public String toString() + { + return "DeviceAirLoadTypeEntity{" + + "id=" + id + + ", vendorId=" + vendorId + + ", type=" + type + + ", subType=" + subType + + ", loadName='" + loadName + '\'' + + ", loadSeries='" + loadSeries + '\'' + + ", loadCategory=" + loadCategory + + ", slot=" + slot + + '}'; + } +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/device/service/api/IDeviceAirLoadSlotService.java b/src/main/java/com/ruoyi/device/service/api/IDeviceAirLoadSlotService.java new file mode 100644 index 0000000..a4781d1 --- /dev/null +++ b/src/main/java/com/ruoyi/device/service/api/IDeviceAirLoadSlotService.java @@ -0,0 +1,23 @@ +package com.ruoyi.device.service.api; + +import com.ruoyi.device.domain.DeviceAirLoadSlot; +import com.ruoyi.device.service.dto.DeviceAirLoadSlotDTO; + +/** + * 无人机负载槽位Service接口 + * + * @author 拓恒 + * @date 2026-03-04 + */ +public interface IDeviceAirLoadSlotService { + /** + * 根据厂商ID、主类型、子类型查询负载槽位 + * + * @param vendorId 厂商ID + * @param type 主类型 + * @param subType 子类型 + * @return 负载槽位信息 + */ + DeviceAirLoadSlotDTO selectDeviceAirLoadSlotByVendorAndType(DeviceAirLoadSlotDTO deviceAirLoadSlotDTO); + +} diff --git a/src/main/java/com/ruoyi/device/service/api/IDeviceAirLoadTypeService.java b/src/main/java/com/ruoyi/device/service/api/IDeviceAirLoadTypeService.java new file mode 100644 index 0000000..229472f --- /dev/null +++ b/src/main/java/com/ruoyi/device/service/api/IDeviceAirLoadTypeService.java @@ -0,0 +1,25 @@ +package com.ruoyi.device.service.api; + +import com.ruoyi.device.domain.DeviceAirLoadType; +import com.ruoyi.device.service.dto.DeviceAirLoadTypeDTO; + +import java.util.List; +import java.util.Map; + +/** + * 无人机负载类型Service接口 + * + * @author 拓恒 + * @date 2026-03-04 + */ +public interface IDeviceAirLoadTypeService { + /** + * 查询无人机负载类型列表 + * + * @param deviceAirLoadTypeDTO 无人机负载类型 + * @return 无人机负载类型集合 + */ + List selectDeviceAirLoadTypeList(DeviceAirLoadTypeDTO deviceAirLoadTypeDTO); + + +} diff --git a/src/main/java/com/ruoyi/device/service/convert/DeviceAirLoadSlotDTOConvert.java b/src/main/java/com/ruoyi/device/service/convert/DeviceAirLoadSlotDTOConvert.java new file mode 100644 index 0000000..fc2c580 --- /dev/null +++ b/src/main/java/com/ruoyi/device/service/convert/DeviceAirLoadSlotDTOConvert.java @@ -0,0 +1,57 @@ +package com.ruoyi.device.service.convert; + +import com.ruoyi.common.core.utils.BaseConvert; +import com.ruoyi.device.domain.DeviceAirLoadSlot; +import com.ruoyi.device.service.dto.DeviceAirLoadSlotDTO; + +import java.util.List; + +/** + * 无人机负载槽位Service层转换器 + * Service DTO ↔ Domain Entity + * + * @author 拓恒 + * @date 2026-03-04 + */ +public class DeviceAirLoadSlotDTOConvert extends BaseConvert +{ + + private static final DeviceAirLoadSlotDTOConvert INSTANCE = new DeviceAirLoadSlotDTOConvert(); + + private DeviceAirLoadSlotDTOConvert() { + super(DeviceAirLoadSlot.class, DeviceAirLoadSlotDTO.class); + } + + /** + * Entity 转 DTO + */ + public static DeviceAirLoadSlotDTO from(DeviceAirLoadSlot entity) + { + return INSTANCE.innerFrom(entity); + } + + /** + * DTO 转 Entity + */ + public static DeviceAirLoadSlot to(DeviceAirLoadSlotDTO dto) + { + return INSTANCE.innerTo(dto); + } + + /** + * Entity List 转 DTO List + */ + public static List fromList(List entityList) + { + return INSTANCE.innerFromList(entityList); + } + + /** + * DTO List 转 Entity List + */ + public static List toList(List dtoList) + { + return INSTANCE.innerToList(dtoList); + } + +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/device/service/convert/DeviceAirLoadTypeDTOConvert.java b/src/main/java/com/ruoyi/device/service/convert/DeviceAirLoadTypeDTOConvert.java new file mode 100644 index 0000000..08e91bb --- /dev/null +++ b/src/main/java/com/ruoyi/device/service/convert/DeviceAirLoadTypeDTOConvert.java @@ -0,0 +1,57 @@ +package com.ruoyi.device.service.convert; + +import com.ruoyi.common.core.utils.BaseConvert; +import com.ruoyi.device.domain.DeviceAirLoadType; +import com.ruoyi.device.service.dto.DeviceAirLoadTypeDTO; + +import java.util.List; + +/** + * 无人机负载类型Service层转换器 + * Service DTO ↔ Domain Entity + * + * @author 拓恒 + * @date 2026-03-04 + */ +public class DeviceAirLoadTypeDTOConvert extends BaseConvert +{ + + private static final DeviceAirLoadTypeDTOConvert INSTANCE = new DeviceAirLoadTypeDTOConvert(); + + private DeviceAirLoadTypeDTOConvert() { + super(DeviceAirLoadType.class, DeviceAirLoadTypeDTO.class); + } + + /** + * Entity 转 DTO + */ + public static DeviceAirLoadTypeDTO from(DeviceAirLoadType entity) + { + return INSTANCE.innerFrom(entity); + } + + /** + * DTO 转 Entity + */ + public static DeviceAirLoadType to(DeviceAirLoadTypeDTO dto) + { + return INSTANCE.innerTo(dto); + } + + /** + * Entity List 转 DTO List + */ + public static List fromList(List entityList) + { + return INSTANCE.innerFromList(entityList); + } + + /** + * DTO List 转 Entity List + */ + public static List toList(List dtoList) + { + return INSTANCE.innerToList(dtoList); + } + +} diff --git a/src/main/java/com/ruoyi/device/service/dto/DeviceAirLoadSlotDTO.java b/src/main/java/com/ruoyi/device/service/dto/DeviceAirLoadSlotDTO.java new file mode 100644 index 0000000..69f5102 --- /dev/null +++ b/src/main/java/com/ruoyi/device/service/dto/DeviceAirLoadSlotDTO.java @@ -0,0 +1,38 @@ +package com.ruoyi.device.service.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 无人机负载槽位DTO + * + * @author 拓恒 + * @date 2026-03-04 + */ +@Data +public class DeviceAirLoadSlotDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 主键 */ + private Long id; + + /** 无人机厂商ID */ + private Long vendorId; + + /** 无人机主类型 */ + private Long type; + + /** 无人机子类型 */ + private Long subType; + + /** 槽位数 */ + private Integer slotCount; + + /** 负载数量限制 */ + private Integer loadLimit; + + /** 配件限制数量 */ + private Integer accessoryLimit; + +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/device/service/dto/DeviceAirLoadTypeDTO.java b/src/main/java/com/ruoyi/device/service/dto/DeviceAirLoadTypeDTO.java new file mode 100644 index 0000000..9eb46dd --- /dev/null +++ b/src/main/java/com/ruoyi/device/service/dto/DeviceAirLoadTypeDTO.java @@ -0,0 +1,40 @@ +package com.ruoyi.device.service.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 无人机负载类型DTO + * + * @author 拓恒 + * @date 2026-03-04 + */ +@Data +public class DeviceAirLoadTypeDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 主键 */ + private Long id; + + /** 无人机厂商ID */ + private Long vendorId; + + /** 无人机主类型 */ + private Long type; + + /** 无人机子类型 */ + private Long subType; + + /** 负载名称 */ + private String loadName; + + /** 负载系列 */ + private String loadSeries; + + /** 负载分类:0-负载,1-配件 */ + private Integer loadCategory; + + /** 槽:1、2 或者-1(-1代表全部槽位可用) */ + private Integer slot; +} diff --git a/src/main/java/com/ruoyi/device/service/dto/DeviceAirTypeGeneralEnumDTO.java b/src/main/java/com/ruoyi/device/service/dto/DeviceAirTypeGeneralEnumDTO.java index 2dafb58..64c7caf 100644 --- a/src/main/java/com/ruoyi/device/service/dto/DeviceAirTypeGeneralEnumDTO.java +++ b/src/main/java/com/ruoyi/device/service/dto/DeviceAirTypeGeneralEnumDTO.java @@ -5,7 +5,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; -import java.util.Date; +import java.util.List; +import java.util.Map; /** * 无人机类型通用枚举服务层DTO @@ -47,4 +48,16 @@ public class DeviceAirTypeGeneralEnumDTO extends BaseEntity /** 是否生效:0-失效,1-生效 */ private Integer enabled; + /** 槽位数 */ + private Integer slotCount; + + /** 负载数量限制 */ + private Integer loadLimit; + + /** 配件限制数量 */ + private Integer accessoryLimit; + + /** 可用负载列表(按系列分组) */ + private Map> loadList; + } diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceAirLoadSlotServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceAirLoadSlotServiceImpl.java new file mode 100644 index 0000000..7f34507 --- /dev/null +++ b/src/main/java/com/ruoyi/device/service/impl/DeviceAirLoadSlotServiceImpl.java @@ -0,0 +1,31 @@ +package com.ruoyi.device.service.impl; + +import com.ruoyi.device.domain.DeviceAirLoadSlot; +import com.ruoyi.device.domain.api.IDeviceAirLoadSlotDomain; +import com.ruoyi.device.service.api.IDeviceAirLoadSlotService; +import com.ruoyi.device.service.convert.DeviceAirLoadSlotDTOConvert; +import com.ruoyi.device.service.dto.DeviceAirLoadSlotDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 无人机负载槽位Service实现 + * + * @author 拓恒 + * @date 2026-03-04 + */ +@Service +public class DeviceAirLoadSlotServiceImpl implements IDeviceAirLoadSlotService { + + @Autowired + private IDeviceAirLoadSlotDomain deviceAirLoadSlotDomain; + + @Override + public DeviceAirLoadSlotDTO selectDeviceAirLoadSlotByVendorAndType(DeviceAirLoadSlotDTO deviceAirLoadSlotDTO) { + + DeviceAirLoadSlot entity = DeviceAirLoadSlotDTOConvert.to(deviceAirLoadSlotDTO); + DeviceAirLoadSlot slotInfo = deviceAirLoadSlotDomain.selectDeviceAirLoadSlotByVendorAndType(entity); + + return DeviceAirLoadSlotDTOConvert.from(slotInfo); + } +} diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceAirLoadTypeServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceAirLoadTypeServiceImpl.java new file mode 100644 index 0000000..eabc7eb --- /dev/null +++ b/src/main/java/com/ruoyi/device/service/impl/DeviceAirLoadTypeServiceImpl.java @@ -0,0 +1,34 @@ +package com.ruoyi.device.service.impl; + +import com.ruoyi.device.domain.DeviceAirLoadType; +import com.ruoyi.device.domain.api.IDeviceAirLoadTypeDomain; +import com.ruoyi.device.service.api.IDeviceAirLoadTypeService; +import com.ruoyi.device.service.convert.DeviceAirLoadTypeDTOConvert; +import com.ruoyi.device.service.dto.DeviceAirLoadTypeDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 无人机负载类型Service实现 + * + * @author 拓恒 + * @date 2026-03-04 + */ +@Service +public class DeviceAirLoadTypeServiceImpl implements IDeviceAirLoadTypeService { + + @Autowired + private IDeviceAirLoadTypeDomain deviceAirLoadTypeDomain; + + @Override + public List selectDeviceAirLoadTypeList(DeviceAirLoadTypeDTO deviceAirLoadType) { + + DeviceAirLoadType entity = DeviceAirLoadTypeDTOConvert.to(deviceAirLoadType); + List loadTypes = deviceAirLoadTypeDomain.selectDeviceAirLoadTypeList(entity); + + return DeviceAirLoadTypeDTOConvert.fromList(loadTypes); + } + +} diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceAirTypeGeneralEnumServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceAirTypeGeneralEnumServiceImpl.java index 77f1a05..cbcb560 100644 --- a/src/main/java/com/ruoyi/device/service/impl/DeviceAirTypeGeneralEnumServiceImpl.java +++ b/src/main/java/com/ruoyi/device/service/impl/DeviceAirTypeGeneralEnumServiceImpl.java @@ -1,17 +1,28 @@ package com.ruoyi.device.service.impl; +import com.ruoyi.device.domain.DeviceAirLoadSlot; +import com.ruoyi.device.domain.DeviceAirLoadType; import com.ruoyi.device.domain.api.IDeviceAirTypeGeneralEnumDomain; +import com.ruoyi.device.domain.convert.DeviceAirTypeGeneralEnumConvert; import com.ruoyi.device.domain.model.DeviceAirTypeGeneralEnum; +import com.ruoyi.device.service.api.IDeviceAirLoadSlotService; +import com.ruoyi.device.service.api.IDeviceAirLoadTypeService; import com.ruoyi.device.service.api.IDeviceAirTypeGeneralEnumService; +import com.ruoyi.device.service.convert.DeviceAirLoadTypeDTOConvert; import com.ruoyi.device.service.convert.DeviceAirTypeGeneralEnumDTOConvert; +import com.ruoyi.device.service.dto.DeviceAirLoadSlotDTO; +import com.ruoyi.device.service.dto.DeviceAirLoadTypeDTO; import com.ruoyi.device.service.dto.DeviceAirTypeGeneralEnumDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** - * 无人机类型通用枚举Service业务层处理 + * 无人机类型通用枚举Service实现 * * @author ruoyi * @date 2026-01-28 @@ -22,17 +33,55 @@ public class DeviceAirTypeGeneralEnumServiceImpl implements IDeviceAirTypeGenera @Autowired private IDeviceAirTypeGeneralEnumDomain airTypeGeneralEnumDomain; + @Autowired + private IDeviceAirLoadSlotService deviceAirLoadSlotService; + + @Autowired + private IDeviceAirLoadTypeService deviceAirLoadTypeService; + @Override - public List selectAirTypeGeneralEnumList(DeviceAirTypeGeneralEnumDTO airTypeGeneralEnumDTO) - { + public List selectAirTypeGeneralEnumList(DeviceAirTypeGeneralEnumDTO airTypeGeneralEnumDTO) { + // 转换DTO为领域模型 DeviceAirTypeGeneralEnum model = DeviceAirTypeGeneralEnumDTOConvert.to(airTypeGeneralEnumDTO); + // 通过领域层获取数据 List modelList = airTypeGeneralEnumDomain.selectAirTypeGeneralEnumList(model); - return DeviceAirTypeGeneralEnumDTOConvert.fromList(modelList); + // 转换领域模型为DTO + List list = DeviceAirTypeGeneralEnumDTOConvert.fromList(modelList); + + // 关联负载信息 + for (DeviceAirTypeGeneralEnumDTO dto : list) { + // 关联负载槽位信息 + DeviceAirLoadSlotDTO deviceAirLoadSlotDTO = new DeviceAirLoadSlotDTO(); + deviceAirLoadSlotDTO.setVendorId(dto.getVendorId()); + deviceAirLoadSlotDTO.setType(dto.getType()); + deviceAirLoadSlotDTO.setSubType(dto.getSubType()); + DeviceAirLoadSlotDTO slotInfo = deviceAirLoadSlotService.selectDeviceAirLoadSlotByVendorAndType(deviceAirLoadSlotDTO); + dto.setSlotCount(slotInfo.getSlotCount()); + dto.setLoadLimit(slotInfo.getLoadLimit()); + dto.setAccessoryLimit(slotInfo.getAccessoryLimit()); + + // 关联负载类型信息(按系列分组) + DeviceAirLoadTypeDTO deviceAirLoadTypeDTO = new DeviceAirLoadTypeDTO(); + deviceAirLoadTypeDTO.setVendorId(dto.getVendorId()); + deviceAirLoadTypeDTO.setType(dto.getType()); + deviceAirLoadTypeDTO.setSubType(dto.getSubType()); + List deviceAirLoadTypeDTOS = deviceAirLoadTypeService.selectDeviceAirLoadTypeList(deviceAirLoadTypeDTO); + + Map> loadMap = new HashMap<>(); + for (DeviceAirLoadTypeDTO airLoadTypeDTO : deviceAirLoadTypeDTOS) { + if (loadMap.get(airLoadTypeDTO.getLoadSeries()).isEmpty()) { + loadMap.put(airLoadTypeDTO.getLoadSeries(), new ArrayList<>()); + } + loadMap.get(airLoadTypeDTO.getLoadSeries()).add(airLoadTypeDTO); + } + dto.setLoadList(loadMap); + } + + return list; } @Override - public DeviceAirTypeGeneralEnumDTO selectAirTypeGeneralEnumById(Long id) - { + public DeviceAirTypeGeneralEnumDTO selectAirTypeGeneralEnumById(Long id) { DeviceAirTypeGeneralEnum model = airTypeGeneralEnumDomain.selectAirTypeGeneralEnumById(id); return DeviceAirTypeGeneralEnumDTOConvert.from(model); } diff --git a/src/main/resources/db/migration/V5__Create_air_type_general_enum_table.sql b/src/main/resources/db/migration/V5__Create_air_type_general_enum_table.sql index f346e8d..a3b5467 100644 --- a/src/main/resources/db/migration/V5__Create_air_type_general_enum_table.sql +++ b/src/main/resources/db/migration/V5__Create_air_type_general_enum_table.sql @@ -57,4 +57,39 @@ INSERT INTO device_air_type_general_enum (name, category, enabled, vendor_id, do -- 拓恒无人机系列 INSERT INTO device_air_type_general_enum (name, category, enabled, vendor_id, domain, type, sub_type, remark) VALUES - ('云003-FM', '云', 1, 0, 0, 1, 0, '-'); + ('云003-FM', '云', 1, 0, 0, 1, 0, '-'); + +-- 创建无人机负载类型表 +CREATE TABLE IF NOT EXISTS `device_air_load_type` ( + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', + `vendor_id` BIGINT DEFAULT NULL COMMENT '无人机厂商ID', + `type` BIGINT DEFAULT NULL COMMENT '无人机主类型', + `sub_type` BIGINT DEFAULT NULL COMMENT '无人机子类型', + `load_name` VARCHAR(255) DEFAULT NULL COMMENT '负载名称', + `load_series` VARCHAR(255) DEFAULT NULL COMMENT '负载系列', + `load_category` TINYINT DEFAULT 0 COMMENT '负载分类:0-负载,1-配件', + `slot` INT DEFAULT -1 COMMENT '槽:1、2 或者-1(-1代表全部槽位可用)', + `create_by` VARCHAR(64) DEFAULT '' COMMENT '创建者', + `create_time` DATETIME DEFAULT NULL COMMENT '创建时间', + `update_by` VARCHAR(64) DEFAULT '' COMMENT '更新者', + `update_time` DATETIME DEFAULT NULL COMMENT '更新时间', + `remark` VARCHAR(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='无人机负载类型表'; + +-- 创建无人机负载槽位表 +CREATE TABLE IF NOT EXISTS `device_air_load_slot` ( + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', + `vendor_id` BIGINT DEFAULT NULL COMMENT '无人机厂商ID', + `type` BIGINT DEFAULT NULL COMMENT '无人机主类型', + `sub_type` BIGINT DEFAULT NULL COMMENT '无人机子类型', + `slot_count` INT DEFAULT 4 COMMENT '槽位数', + `load_limit` INT DEFAULT 1 COMMENT '负载数量限制', + `accessory_limit` INT DEFAULT 2 COMMENT '配件限制数量', + `create_by` VARCHAR(64) DEFAULT '' COMMENT '创建者', + `create_time` DATETIME DEFAULT NULL COMMENT '创建时间', + `update_by` VARCHAR(64) DEFAULT '' COMMENT '更新者', + `update_time` DATETIME DEFAULT NULL COMMENT '更新时间', + `remark` VARCHAR(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='无人机负载槽位表'; diff --git a/src/main/resources/mapper/device/DeviceAirLoadSlotMapper.xml b/src/main/resources/mapper/device/DeviceAirLoadSlotMapper.xml new file mode 100644 index 0000000..8433324 --- /dev/null +++ b/src/main/resources/mapper/device/DeviceAirLoadSlotMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/device/DeviceAirLoadTypeMapper.xml b/src/main/resources/mapper/device/DeviceAirLoadTypeMapper.xml new file mode 100644 index 0000000..447cfb5 --- /dev/null +++ b/src/main/resources/mapper/device/DeviceAirLoadTypeMapper.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + +