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