package com.ruoyi.basic.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.service.StorageBlobService; import com.ruoyi.common.constant.StorageAttachmentConstants; import com.ruoyi.common.enums.StorageAttachmentRecordType; import com.ruoyi.common.utils.file.MinioUtils; import io.minio.MinioClient; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; import java.util.List; /** *

* 通用文件上传的附件信息 服务实现类 *

* * @author ruoyi * @since 2025-05-29 */ @Service @RequiredArgsConstructor public class StorageAttachmentServiceImpl extends ServiceImpl implements StorageAttachmentService { @Autowired private StorageBlobMapper storageBlobMapper; @Autowired private StorageAttachmentMapper storageAttachmentMapper; @Autowired private StorageBlobService storageBlobService; @Autowired private MinioUtils minioUtils; @Override public List selectStorageAttachments(Long recordId, StorageAttachmentRecordType recordType, StorageAttachmentConstants fileType) { List storageAttachments = storageAttachmentMapper.selectList(new LambdaQueryWrapper() .eq(StorageAttachment::getRecordId, recordId) .eq(StorageAttachment::getRecordType, recordType.ordinal()) .eq(StorageAttachment::getName, fileType.toString())); if (storageAttachments != null) { for (StorageAttachment storageAttachment : storageAttachments) { StorageBlob storageBlob = storageBlobMapper.selectById(storageAttachment.getStorageBlobId()); StorageBlobDTO storageBlobDTO = new StorageBlobDTO(); BeanUtils.copyProperties(storageBlob, storageBlobDTO); storageBlobDTO.setUrl(minioUtils.getPreviewUrl(storageBlob.getBucketName(), storageBlob.getBucketName(), true)); storageAttachment.setStorageBlobDTO(storageBlobDTO); } } return storageAttachments; } @Override public void saveStorageAttachment(List attachments, Long recordId, StorageAttachmentRecordType recordType, StorageAttachmentConstants fileType) { // 删除旧图 deleteStorageAttachment(new StorageAttachment(fileType.toString(), (long) recordType.ordinal(), recordId)); for (StorageAttachment attachment : attachments) { // 获取关联记录 StorageBlob storageBlob = attachment.getStorageBlobDTO(); attachment.setName(fileType.toString()); attachment.setRecordType((long) recordType.ordinal()); attachment.setRecordId(recordId); attachment.setStorageBlobId(storageBlob.getId()); storageAttachmentMapper.insert(attachment); } } @Override public int deleteStorageAttachment(StorageAttachment storageAttachment) { // 先删除明细表 storageBlobService.deleteStorageBlobs(storageAttachment); return storageAttachmentMapper.delete(new LambdaQueryWrapper() .eq(StorageAttachment::getRecordId, storageAttachment.getRecordId()) .eq(StorageAttachment::getRecordType, storageAttachment.getRecordType()) .eq(StorageAttachment::getName, storageAttachment.getName())); } }