package com.ruoyi.business.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.business.dto.EquipmentManagementDto; 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.EquipmentManagementService; import com.ruoyi.business.service.EquipmentUsageDetailService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.business.service.EquipmentUsageRecordService; import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.utils.bean.BeanUtils; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; 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 IPage selectEquipmentUsageDetailList(Page page,EquipmentUsageDetailDto equipmentUsageDetailDto) { // 必须传递usageId参数 if (equipmentUsageDetailDto.getUsageId() == null) { throw new BaseException("请选择使用记录"); } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(EquipmentUsageDetail::getUsageId, equipmentUsageDetailDto.getUsageId()); Page entityPage = equipmentUsageDetailMapper.selectPage(page, queryWrapper); IPage dtoPage = new Page<>(); BeanUtils.copyProperties(entityPage, dtoPage); // 先获取主表记录 List usageIds = entityPage.getRecords().stream() .map(EquipmentUsageDetail::getUsageId) .distinct() .collect(Collectors.toList()); if (!usageIds.isEmpty()) { // 查询关联的使用记录 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<>(); } // 构建使用记录ID到设备ID的映射 Map usageIdToEquipmentIdMap = usageRecords.stream() .collect(Collectors.toMap(EquipmentUsageRecord::getId, EquipmentUsageRecord::getEquipmentId)); // 转换DTO并填充设备信息 List dtoList = entityPage.getRecords().stream().map(detail -> { EquipmentUsageDetailDto detailDto = new EquipmentUsageDetailDto(); BeanUtils.copyProperties(detail, detailDto); // 获取关联的设备ID 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()); dtoPage.setRecords(dtoList); } else { dtoPage.setRecords(Collections.emptyList()); } return dtoPage; } }