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.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.entity.StorageAttachment; import com.ruoyi.basic.entity.StorageBlob; import com.ruoyi.basic.entity.dto.StorageBlobDTO; import com.ruoyi.basic.mapper.StorageAttachmentMapper; import com.ruoyi.basic.mapper.StorageBlobMapper; import com.ruoyi.basic.service.StorageAttachmentService; import com.ruoyi.business.dto.InspectionTaskDto; import com.ruoyi.business.entity.InspectionTask; import com.ruoyi.business.mapper.InspectionTaskMapper; import com.ruoyi.business.service.InspectionTaskService; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.file.MinioUtils; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; import static com.ruoyi.common.constant.StorageAttachmentConstants.StorageAttachmentFile; import static com.ruoyi.common.enums.StorageAttachmentRecordType.InspectionTasks; /** *

* 巡检任务表 服务实现类 *

* * @author ld * @since 2025-06-14 */ @Service @RequiredArgsConstructor public class InspectionTaskServiceImpl extends ServiceImpl implements InspectionTaskService { private final InspectionTaskMapper inspectionTaskMapper; private final StorageAttachmentService storageAttachmentService; private final StorageBlobMapper storageBlobMapper; private final StorageAttachmentMapper storageAttachmentMapper; private final MinioUtils minioUtils; @Override public IPage selectInspectionTaskList(Page page, InspectionTaskDto inspectionTaskDto) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.orderByDesc(InspectionTask::getCreateTime); IPage entityPage = inspectionTaskMapper.selectPage(page, queryWrapper); // 无数据提前返回 if (CollectionUtils.isEmpty(entityPage.getRecords())) { return new Page<>(entityPage.getCurrent(), entityPage.getSize(), entityPage.getTotal()); } // 获取id集合 List ids = entityPage.getRecords().stream().map(InspectionTask::getId).collect(Collectors.toList()); Map> attachmentsMap = storageAttachmentMapper.selectList(new LambdaQueryWrapper().in(StorageAttachment::getRecordId, ids) .eq(StorageAttachment::getRecordType, InspectionTasks.ordinal())) .stream() .collect(Collectors.groupingBy(StorageAttachment::getRecordId)); // 批量查询所有需要的文件数据 Set blobIds = attachmentsMap.values() .stream() .flatMap(List::stream) .map(StorageAttachment::getStorageBlobId) .collect(Collectors.toSet()); Map blobMap = blobIds.isEmpty() ? Collections.emptyMap() : storageBlobMapper.selectList(new LambdaQueryWrapper().in(StorageBlob::getId, blobIds)) .stream() .collect(Collectors.toMap(StorageBlob::getId, Function.identity())); List dtoList = entityPage.getRecords().stream().map(inspectionTask -> { InspectionTaskDto dto = new InspectionTaskDto(); BeanUtils.copyProperties(inspectionTask, dto); // 复制主对象属性 // 初始化三个附件列表 dto.setBeforeProduction(new ArrayList<>()); dto.setAfterProduction(new ArrayList<>()); dto.setProductionIssues(new ArrayList<>()); // 处理附件分类 Optional.ofNullable(attachmentsMap.get(inspectionTask.getId())) .orElse(Collections.emptyList()) .forEach(attachment -> { StorageBlob blob = blobMap.get(attachment.getStorageBlobId()); if (blob != null) { // 创建附件DTO StorageBlobDTO blobDto = createBlobDto(blob); // 根据type分类 switch ((int) blob.getType().longValue()) { case 0: dto.getBeforeProduction().add(blobDto); break; case 1: dto.getAfterProduction().add(blobDto); break; case 2: dto.getProductionIssues().add(blobDto); break; default: // 可选:记录未分类类型 break; } } }); return dto; }).collect(Collectors.toList()); // 7. 构建返回分页对象 IPage resultPage = new Page<>(); resultPage.setRecords(dtoList); return resultPage; } // 提取创建BlobDTO的公共方法 private StorageBlobDTO createBlobDto(StorageBlob blob) { StorageBlobDTO dto = new StorageBlobDTO(); BeanUtils.copyProperties(blob, dto); // 设置URL dto.setUrl(minioUtils.getPreviewUrls( blob.getBucketFilename(), blob.getBucketName(), true )); // 设置下载URL dto.setDownloadUrl(minioUtils.getDownloadUrls( blob.getBucketFilename(), blob.getBucketName(), blob.getOriginalFilename(), true )); return dto; } @Override public int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) { SecurityUtils.getLoginUser().getUserId(); InspectionTask inspectionTask = new InspectionTask(); BeanUtils.copyProperties(inspectionTaskDto, inspectionTask); inspectionTask.setRegistrantId(SecurityUtils.getLoginUser().getUserId()); inspectionTask.setRegistrant(SecurityUtils.getLoginUser().getUsername()); int i; if (Objects.isNull(inspectionTaskDto.getId())) { i = inspectionTaskMapper.insert(inspectionTask); } else { i = inspectionTaskMapper.updateById(inspectionTask); } if (inspectionTaskDto.getStorageBlobDTO() != null && !inspectionTaskDto.getStorageBlobDTO().isEmpty()) { List attachments = new ArrayList<>(); for (StorageBlobDTO storageBlobDTO : inspectionTaskDto.getStorageBlobDTO()) { StorageAttachment storageAttachment = new StorageAttachment( StorageAttachmentFile, (long) InspectionTasks.ordinal(), inspectionTask.getId() ); storageAttachment.setStorageBlobDTO(storageBlobDTO); attachments.add(storageAttachment); } storageAttachmentService.saveStorageAttachment(attachments, inspectionTask.getId(), InspectionTasks, StorageAttachmentFile); } return i; } @Override public int delByIds(Long[] ids) { // 检查参数 if (ids == null || ids.length == 0) { return 0; } return inspectionTaskMapper.deleteByIds(Arrays.asList(ids)); } }