package com.ruoyi.basic.service.impl; 
 | 
  
 | 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 
 | 
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 
 | 
import com.ruoyi.basic.dto.StorageBlobDTO; 
 | 
import com.ruoyi.basic.pojo.StorageAttachment; 
 | 
import com.ruoyi.basic.mapper.StorageAttachmentMapper; 
 | 
import com.ruoyi.basic.mapper.StorageBlobMapper; 
 | 
import com.ruoyi.basic.pojo.StorageBlob; 
 | 
import com.ruoyi.basic.service.StorageAttachmentService; 
 | 
import com.ruoyi.basic.service.StorageBlobService; 
 | 
import com.ruoyi.common.constant.StorageAttachmentConstants; 
 | 
import com.ruoyi.common.enums.StorageAttachmentRecordType; 
 | 
import com.ruoyi.common.utils.MinioUtils; 
 | 
import lombok.RequiredArgsConstructor; 
 | 
import org.springframework.beans.BeanUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * <p> 
 | 
 * 通用文件上传的附件信息 服务实现类 
 | 
 * </p> 
 | 
 * 
 | 
 * @author ruoyi 
 | 
 * @since 2025-05-29 
 | 
 */ 
 | 
@Service 
 | 
@RequiredArgsConstructor 
 | 
public class StorageAttachmentServiceImpl extends ServiceImpl<StorageAttachmentMapper, StorageAttachment> implements StorageAttachmentService { 
 | 
    @Autowired 
 | 
    private StorageBlobMapper storageBlobMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private StorageAttachmentMapper storageAttachmentMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private StorageBlobService storageBlobService; 
 | 
  
 | 
    @Autowired 
 | 
    private MinioUtils minioUtils; 
 | 
  
 | 
    @Override 
 | 
    public List<StorageAttachment> selectStorageAttachments(Long recordId, StorageAttachmentRecordType recordType, StorageAttachmentConstants fileType) { 
 | 
        List<StorageAttachment> storageAttachments = storageAttachmentMapper.selectList(new LambdaQueryWrapper<StorageAttachment>() 
 | 
                .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<StorageAttachment> 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 void saveStorageAttachment(List<StorageAttachment> attachments, Long recordId, StorageAttachmentRecordType recordType, String fileType) { 
 | 
        // 删除旧图 
 | 
        deleteStorageAttachment(new StorageAttachment(fileType, (long) recordType.ordinal(), recordId)); 
 | 
        for (StorageAttachment attachment : attachments) { 
 | 
            // 获取关联记录 
 | 
            StorageBlob storageBlob = attachment.getStorageBlobDTO(); 
 | 
            attachment.setName(fileType); 
 | 
            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<StorageAttachment>() 
 | 
                .eq(StorageAttachment::getRecordId, storageAttachment.getRecordId()) 
 | 
                .eq(StorageAttachment::getRecordType, storageAttachment.getRecordType()) 
 | 
                .eq(StorageAttachment::getName, storageAttachment.getName())); 
 | 
    } 
 | 
} 
 |