package com.ruoyi.business.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.business.dto.EquipmentUsageDetailDto; import com.ruoyi.business.entity.EquipmentManagement; import com.ruoyi.business.entity.EquipmentUsageDetail; import com.ruoyi.business.entity.EquipmentUsageRecord; import com.ruoyi.business.mapper.EquipmentManagementMapper; import com.ruoyi.business.mapper.EquipmentUsageDetailMapper; import com.ruoyi.business.mapper.EquipmentUsageRecordMapper; import com.ruoyi.business.service.EquipmentUsageDetailService; import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.utils.bean.BeanUtils; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; /** *

* 设备使用明细表 服务实现类 *

* * @author ld * @since 2025-07-23 */ @Service @RequiredArgsConstructor public class EquipmentUsageDetailServiceImpl extends ServiceImpl implements EquipmentUsageDetailService { private final EquipmentUsageDetailMapper equipmentUsageDetailMapper; private final EquipmentUsageRecordMapper equipmentUsageRecordMapper; private final EquipmentManagementMapper equipmentManagementMapper; @Override public List selectEquipmentUsageDetailList(EquipmentUsageDetailDto equipmentUsageDetailDto) { // 必须传递 usageId 参数 if (equipmentUsageDetailDto.getUsageId() == null) { throw new BaseException("请选择使用记录"); } // 查询明细列表(不分页) LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(EquipmentUsageDetail::getUsageId, equipmentUsageDetailDto.getUsageId()); List details = equipmentUsageDetailMapper.selectList(queryWrapper); // 如果没有数据,直接返回空列表 if (details.isEmpty()) { return Collections.emptyList(); } // 获取所有关联的 usageId List usageIds = details.stream() .map(EquipmentUsageDetail::getUsageId) .distinct() .collect(Collectors.toList()); // 查询关联的使用记录 List usageRecords = equipmentUsageRecordMapper.selectList( new LambdaQueryWrapper() .in(EquipmentUsageRecord::getId, usageIds) ); // 获取所有设备ID List equipmentIds = usageRecords.stream() .map(EquipmentUsageRecord::getEquipmentId) .distinct() .collect(Collectors.toList()); // 查询设备信息 Map equipmentMap; if (!equipmentIds.isEmpty()) { equipmentMap = equipmentManagementMapper.selectList( new LambdaQueryWrapper() .in(EquipmentManagement::getId, equipmentIds) ).stream().collect(Collectors.toMap(EquipmentManagement::getId, Function.identity())); } else { equipmentMap = new HashMap<>(); } // 构建 usageId → equipmentId 的映射 Map usageIdToEquipmentIdMap = usageRecords.stream() .collect(Collectors.toMap(EquipmentUsageRecord::getId, EquipmentUsageRecord::getEquipmentId)); // 转换为 DTO 并填充设备信息 return details.stream().map(detail -> { EquipmentUsageDetailDto detailDto = new EquipmentUsageDetailDto(); BeanUtils.copyProperties(detail, detailDto); // 获取关联的设备信息 Long equipmentId = usageIdToEquipmentIdMap.get(detail.getUsageId()); if (equipmentId != null && equipmentMap.containsKey(equipmentId)) { EquipmentManagement equipment = equipmentMap.get(equipmentId); detailDto.setEquipmentNo(equipment.getEquipmentNo()); detailDto.setEquipmentName(equipment.getEquipmentName()); detailDto.setSpecification(equipment.getSpecification()); } return detailDto; }).collect(Collectors.toList()); } }