From 17badd7ea4d77c0aafbdfa65e05743cb7856489c Mon Sep 17 00:00:00 2001 From: chenhj <chenhj@lunor.cn> Date: 星期五, 30 五月 2025 14:40:58 +0800 Subject: [PATCH] Merge pull request 'chen' (#12) from chen into master --- ruoyi-common/src/main/java/com/ruoyi/basic/service/impl/StorageBlobServiceImpl.java | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 105 insertions(+), 0 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/basic/service/impl/StorageBlobServiceImpl.java b/ruoyi-common/src/main/java/com/ruoyi/basic/service/impl/StorageBlobServiceImpl.java new file mode 100644 index 0000000..dc7acff --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/basic/service/impl/StorageBlobServiceImpl.java @@ -0,0 +1,105 @@ +package com.ruoyi.basic.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +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.StorageBlobService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.config.MinioConfig; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.MinioResult; +import com.ruoyi.common.exception.file.InvalidExtensionException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.file.MinioUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import lombok.RequiredArgsConstructor; +import org.springframework.web.multipart.MultipartFile; + +import java.util.ArrayList; +import java.util.List; + +/** + * <p> + * 閫氱敤鏂囦欢涓婁紶鐨勯檮浠朵俊鎭� 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author ruoyi + * @since 2025-05-29 + */ +@Service +@RequiredArgsConstructor +public class StorageBlobServiceImpl extends ServiceImpl<StorageBlobMapper, StorageBlob> implements StorageBlobService { + @Autowired + private StorageAttachmentMapper storageAttachmentMapper; + + @Autowired + private StorageBlobMapper storageBlobMapper; + + @Autowired + private MinioUtils minioUtils; + + @Override + public List<StorageBlobDTO> updateStorageBlobs(List<MultipartFile> files, String bucketName) { + + // 鑻ユ病浼犲叆bucketName锛屽垯浣跨敤榛樿bucketName + if (StringUtils.isEmpty(bucketName)) { + bucketName = minioUtils.getDefaultBucket(); + } + + List<StorageBlobDTO> storageBlobDTOs = new ArrayList<>(); + for (MultipartFile file : files) { + try { + MinioResult res = minioUtils.upload(bucketName, file, false); + StorageBlobDTO dto = new StorageBlobDTO(); + dto.setContentType(file.getContentType()); + dto.setBucketFilename(res.getBucketFileName()); + dto.setOriginalFilename(res.getOriginalName()); + dto.setByteSize(file.getSize()); + dto.setKey(IdUtils.simpleUUID()); + dto.setBucketName(bucketName); + dto.setCreateTime(DateUtils.getNowDate()); + dto.setUrl(minioUtils.getPreviewUrl(res.getBucketFileName(), bucketName, false)); + // 鎻掑叆鏁版嵁搴� + storageBlobMapper.insert(dto); + + storageBlobDTOs.add(dto); + } catch (InvalidExtensionException e) { + throw new RuntimeException("minio鏂囦欢涓婁紶寮傚父锛�" + e); + } + } + + + return storageBlobDTOs; + } + + @Override + public int deleteStorageBlobs(StorageAttachment attachment) { + List<StorageAttachment> attachments = storageAttachmentMapper.selectList(new LambdaQueryWrapper<StorageAttachment>() + .eq(StorageAttachment::getRecordId, attachment.getRecordId()) + .eq(StorageAttachment::getRecordType, attachment.getRecordType()) + .eq(StorageAttachment::getName, attachment.getName())); + List<Long> ids = attachments.stream().map(StorageAttachment::getStorageBlobId).toList(); + List<StorageBlob> storageBlobs = storageBlobMapper.selectList(new LambdaQueryWrapper<StorageBlob>() + .in(StorageBlob::getId, ids)); + if (!storageBlobs.isEmpty()) { + for (StorageBlob storageBlob : storageBlobs) { + // 绉婚櫎妗跺唴鏂囦欢 + minioUtils.removeObjectsResult(storageBlob.getBucketName(), storageBlob.getBucketName()); + } + } + + if (!ids.isEmpty()) { + return storageBlobMapper.delete(new QueryWrapper<StorageBlob>().lambda().in(StorageBlob::getId, ids)); + } + + return 0; + } +} -- Gitblit v1.9.3