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()));
}
}