From b2174bdc2c7906b0f6fa65be7a8564e64107581f Mon Sep 17 00:00:00 2001
From: chenrui <1187576398@qq.com>
Date: 星期二, 25 三月 2025 14:18:18 +0800
Subject: [PATCH] Merge branch 'radio_frequency' of http://114.132.189.42:9002/r/lims-ruoyi-after into radio_frequency

---
 basic-server/src/main/java/com/ruoyi/basic/pojo/WorkShopFile.java                    |    3 
 basic-server/src/main/java/com/ruoyi/basic/service/WorkShopFileService.java          |    3 
 basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopFileServiceImpl.java |   38 +++++++++
 ruoyi-admin/src/main/resources/application-druid.yml                                 |    7 +
 basic-server/src/main/java/com/ruoyi/basic/controller/WorkShopController.java        |    6 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java      |   43 ++++++++++
 ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MinioUtils.java               |   21 +++++
 basic-server/src/main/java/com/ruoyi/basic/service/WorkShopService.java              |    2 
 ruoyi-common/src/main/java/com/ruoyi/common/config/MinioConfig.java                  |    3 
 basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopServiceImpl.java     |   82 +++++++-------------
 10 files changed, 143 insertions(+), 65 deletions(-)

diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/controller/WorkShopController.java b/basic-server/src/main/java/com/ruoyi/basic/controller/WorkShopController.java
similarity index 90%
rename from inspect-server/src/main/java/com/ruoyi/inspect/controller/WorkShopController.java
rename to basic-server/src/main/java/com/ruoyi/basic/controller/WorkShopController.java
index a4ff872..624b04b 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/controller/WorkShopController.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/controller/WorkShopController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.inspect.controller;
+package com.ruoyi.basic.controller;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.basic.dto.WorkShopDto;
@@ -42,7 +42,7 @@
 
     @ApiOperation(value = "杞﹂棿鏂囦欢涓婁紶")
     @PostMapping("/uploadFile")
-    public Result uploadFile(Integer id, MultipartFile file) {
+    public Result uploadFile(Integer id, MultipartFile file)throws Exception {
         return Result.success(workShopService.uploadFile(id,file));
     }
 
@@ -55,6 +55,6 @@
     @ApiOperation(value = "鍒犻櫎闄勪欢")
     @DeleteMapping("/delFile")
     public Result<?> delFile(Integer id) {
-        return Result.success(workShopFileService.removeById(id));
+        return Result.success(workShopFileService.delFile(id));
     }
 }
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/WorkShopFile.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/WorkShopFile.java
index 9fb5675..6a580ad 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/WorkShopFile.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/pojo/WorkShopFile.java
@@ -43,4 +43,7 @@
 
     @TableField(fill = FieldFill.INSERT_UPDATE)
     private LocalDateTime updateTime;
+
+    @ApiModelProperty("棰勮鍦板潃")
+    private String fileMinioUrl;
 }
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopFileService.java b/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopFileService.java
index fa257cb..562ffa1 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopFileService.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopFileService.java
@@ -9,5 +9,6 @@
  * @createDate 2024-03-17
  */
 public interface WorkShopFileService extends IService<WorkShopFile> {
-    
+
+    int delFile(Integer id);
 }
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopService.java b/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopService.java
index dd39e58..20bb426 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopService.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopService.java
@@ -20,5 +20,5 @@
 
     int delWorkShop(Integer id);
 
-    int uploadFile(Integer id, MultipartFile file);
+    int uploadFile(Integer id, MultipartFile file) throws Exception;
 }
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopFileServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopFileServiceImpl.java
index bb11804..0b4801d 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopFileServiceImpl.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopFileServiceImpl.java
@@ -5,7 +5,11 @@
 import com.ruoyi.basic.mapper.WorkShopFileMapper;
 import com.ruoyi.basic.pojo.WorkShopFile;
 import com.ruoyi.basic.service.WorkShopFileService;
+import com.ruoyi.common.utils.file.MinioUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
 
 /**
  * @description 閽堝琛ㄣ�恮ork_shop_file(杞﹂棿闄勪欢鍚嶇О)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
@@ -14,6 +18,40 @@
 @Service
 public class WorkShopFileServiceImpl extends ServiceImpl<WorkShopFileMapper, WorkShopFile> implements WorkShopFileService {
 
+    @Resource
+    private WorkShopFileMapper workShopFileMapper;
+
+    @Resource
+    private MinioUtils minioUtils;
+
+    @Value("${minio.bucketName}")
+    private String bucketName;
+
+    @Override
+    public int delFile(Integer id) {
+        // 鑻� id 涓虹┖锛岀洿鎺ヨ繑鍥� 0锛岃〃绀烘湭鍒犻櫎浠讳綍璁板綍
+        if (id == null) {
+            return 0;
+        }
+        try {
+            // 鏌ヨ瑕佸垹闄ょ殑鏂囦欢淇℃伅
+            WorkShopFile file = workShopFileMapper.selectById(id);
+            if (file != null && file.getFileUrl() != null) {
+                // 妫�鏌� MinIO 涓枃浠舵槸鍚﹀瓨鍦�
+                if (minioUtils.objectExists(bucketName, file.getFileUrl())) {
+                    // 鍏堝垹闄� MinIO 涓殑瀵硅薄
+                    minioUtils.removeObjectsResult(bucketName, file.getFileUrl());
+                }
+            }
+            // 鎵ц鏁版嵁搴撳垹闄ゆ搷浣�
+            int deleteResult = workShopFileMapper.deleteById(id);
+            return deleteResult;
+        } catch (Exception e) {
+            // 澶勭悊寮傚父锛屽彲鏍规嵁瀹為檯鎯呭喌璁板綍鏃ュ織鎴栨姏鍑鸿嚜瀹氫箟寮傚父
+            e.printStackTrace();
+            return 0;
+        }
+    }
 }
 
 
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopServiceImpl.java
index 7d006b6..7620e5b 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopServiceImpl.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopServiceImpl.java
@@ -1,6 +1,5 @@
 package com.ruoyi.basic.service.impl;
 
-import cn.hutool.core.lang.UUID;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -10,16 +9,16 @@
 import com.ruoyi.basic.pojo.WorkShop;
 import com.ruoyi.basic.pojo.WorkShopFile;
 import com.ruoyi.basic.service.WorkShopService;
+import com.ruoyi.common.core.domain.MinioResult;
 import com.ruoyi.common.utils.QueryWrappers;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.file.MinioUtils;
+import com.ruoyi.framework.exception.ErrorException;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
-import java.io.File;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
 
 /**
  * @description 閽堝琛ㄣ�恮ork_shop(杞﹂棿鍚嶇О)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
@@ -33,11 +32,11 @@
     @Resource
     private WorkShopFileMapper workShopFileMapper;
 
-    @Value("${wordUrl}")
-    private String wordUrl;
+    @Resource
+    private MinioUtils minioUtils;
 
-    @Value("${file.path}")
-    private String imgUrl;
+    @Value("${minio.bucketName}")
+    private String bucketName;
 
 
     @Override
@@ -58,58 +57,37 @@
     public int delWorkShop(Integer id) {
         return workShopMapper.deleteById(id);
     }
-    
+
     @Override
-    public int uploadFile(Integer id, MultipartFile file) {
-        String username = SecurityUtils.getUsername();
-        String urlString;
-        String pathName;
-        String path;
-        String filename = file.getOriginalFilename();
-        String contentType = file.getContentType();
+    public int uploadFile(Integer id, MultipartFile file) throws Exception {
+        // 鍩虹鏍¢獙
+        if (file == null || file.isEmpty()) {
+            throw new ErrorException("涓婁紶鏂囦欢涓虹┖");
+        }
+
         WorkShopFile workShopFile = new WorkShopFile();
         workShopFile.setWorkShopId(id);
-        workShopFile.setFileName(filename);
-        if (contentType != null && contentType.startsWith("image/")) {
-            // 鏄浘鐗�
-            path = imgUrl;
-            workShopFile.setType(1);
-        } else {
-            // 鏄枃浠�
-            path = wordUrl;
-            workShopFile.setType(2);
-        }
+        workShopFile.setFileName(file.getOriginalFilename());
+        workShopFile.setName(SecurityUtils.getUsername());
+
         try {
-            // 1. 瑙f瀽缁濆璺緞锛堜紭鍏堜娇鐢ㄩ厤缃殑缁濆璺緞锛屽惁鍒欏熀浜庨」鐩牴鐩綍锛�
-            String basePath = imgUrl.startsWith(File.separator) ? imgUrl : System.getProperty("user.dir") + File.separator + imgUrl;
-            File realpath = new File(basePath);
-
-            // 2. 鍒涘缓鐩綍锛堣褰曟棩蹇楋紝妫�鏌ユ槸鍚︽垚鍔燂級
-            if (!realpath.exists()) {
-                if (!realpath.mkdirs()) {
-                    System.err.println("鐩綍鍒涘缓澶辫触锛歿}");
-                    return 0;
-                }
+            String contentType = file.getContentType();
+            String category = contentType != null && contentType.startsWith("image/") ? "images" : "docs";
+            MinioResult upload = minioUtils.upload(bucketName, file, true);
+            // 璁板綍瀛樺偍璺緞
+            workShopFile.setFileUrl(upload.getBucketFileName());
+            workShopFile.setFileMinioUrl(upload.getPreviewExpiry());
+            workShopFile.setType(category.equals("images") ? 1 : 2);
+            // 鏁版嵁搴撴搷浣�
+            int insertResult = workShopFileMapper.insert(workShopFile);
+            if (insertResult <= 0) {
+                throw new ErrorException("鏁版嵁搴撴彃鍏ュけ璐�");
             }
-
-            // 3. 鐢熸垚鍞竴鏂囦欢鍚�
-            String uuid = UUID.randomUUID().toString().replace("-", "");
-            String suffix = filename.substring(filename.lastIndexOf("."));
-            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "_" + uuid + suffix;
-            File targetFile = new File(realpath, pathName);
-
-            // 4. 淇濆瓨鏂囦欢
-            file.transferTo(targetFile);
-            workShopFile.setFileUrl(pathName);
-            workShopFile.setName(username);
-            return workShopFileMapper.insert(workShopFile);
+            return insertResult;
         } catch (Exception e) {
-            e.printStackTrace();
-            System.err.println("闄勪欢涓婁紶閿欒");
-            return 0;
+            throw new Exception("绯荤粺寮傚父: ", e);
         }
     }
-
 }
 
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
index d58b107..6378290 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
@@ -1,9 +1,13 @@
 package com.ruoyi.web.controller.common;
 
+import java.io.IOException;
+import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.List;
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import com.ruoyi.common.utils.file.MinioUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,14 +32,16 @@
  */
 @RestController
 @RequestMapping("/common")
-public class CommonController
-{
+public class CommonController {
     private static final Logger log = LoggerFactory.getLogger(CommonController.class);
 
     @Autowired
     private ServerConfig serverConfig;
 
     private static final String FILE_DELIMETER = ",";
+
+    @Resource
+    private MinioUtils minioUtils;
 
     /**
      * 閫氱敤涓嬭浇璇锋眰
@@ -160,4 +166,37 @@
             log.error("涓嬭浇鏂囦欢澶辫触", e);
         }
     }
+
+    /**
+     * 閫氱敤鏂囦欢涓嬭浇鏂规硶
+     *
+     * @param fileUrl  Minio涓殑鏂囦欢璺緞锛堝锛歩mages/2023/report.pdf锛�
+     * @param fileName 涓嬭浇鏃舵樉绀虹殑鏂囦欢鍚嶏紙濡傦細骞村害鎶ュ憡.pdf锛�
+     * @param response HttpServletResponse瀵硅薄
+     */
+    @GetMapping("/downloadMinio")
+    public void downloadFile(String fileUrl, String fileName, HttpServletResponse response) {
+        Logger logger = LoggerFactory.getLogger(this.getClass());
+        if (StringUtils.isBlank(fileUrl) || StringUtils.isBlank(fileName)) {
+            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+            try (PrintWriter writer = response.getWriter()) {
+                writer.write("鏂囦欢璺緞鍜屾枃浠跺悕涓嶈兘涓虹┖");
+            } catch (IOException e) {
+                logger.error("璁剧疆鍝嶅簲淇℃伅鍑洪敊", e);
+            }
+            return;
+        }
+        String bucketName = "radio-frequency";
+        try {
+            minioUtils.download(bucketName, fileUrl, fileName, response);
+        } catch (Exception e) {
+            logger.error("鏂囦欢涓嬭浇澶辫触", e);
+            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+            try (PrintWriter writer = response.getWriter()) {
+                writer.write("鏂囦欢涓嬭浇澶辫触: " + e.getMessage());
+            } catch (IOException ioException) {
+                logger.error("璁剧疆鍝嶅簲淇℃伅鍑洪敊", ioException);
+            }
+        }
+    }
 }
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index 9bd45f1..719bc31 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -1,4 +1,4 @@
-# 鏈湴
+# 瑁呭姝e紡搴�
 
 # 鏁版嵁婧愰厤缃�
 spring:
@@ -111,12 +111,13 @@
     org.springframework: warn
 
 minio:
-  endpoint: http://114.132.189.42/
-  port: 7019
+  endpoint: http://114.132.189.42:7019
   secure: false
   accessKey: admin
   secretKey: 12345678
   preview-expiry: 24 # 棰勮鍦板潃榛樿24灏忔椂
+  bucketName: radio-frequency
+  publicUrl:
 
 # 鐓х墖瀛樺偍璺緞+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++
 file:
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/MinioConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/MinioConfig.java
index 28f489f..d9277a0 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/config/MinioConfig.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/MinioConfig.java
@@ -13,14 +13,13 @@
 @Data
 public class MinioConfig {
     private String endpoint;
-    private int port;
     private String accessKey;
     private String secretKey;
     private Boolean secure;
 
     @Bean
     public MinioClient getMinioClient() {
-        return MinioClient.builder().endpoint(endpoint, port, secure)
+        return MinioClient.builder().endpoint(endpoint)
                 .credentials(accessKey, secretKey)
                 .build();
     }
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MinioUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MinioUtils.java
index 25efe7c..73402bb 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MinioUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MinioUtils.java
@@ -167,7 +167,7 @@
             minioResult.setBucketFileName(bucketFilePath);
             // 杩斿洖姘镐箙棰勮鍦板潃
             if (isPreviewExpiry) {
-                String previewUrl = getPreviewUrl(bucketFilePath, bucketName, isPreviewExpiry);
+                String previewUrl = getPreviewUrl(bucketFilePath, bucketName, true);
                 minioResult.setPreviewExpiry(previewUrl);
             }
             minioResult.setOriginalName(originalFileName);
@@ -291,4 +291,23 @@
         }
         return null;
     }
+
+
+    /**
+     *  妫�鏌� MinIO 涓璞℃槸鍚﹀瓨鍦�
+     * @param bucketName 瀛樺偍妗跺悕绉�
+     * @param bucketFileName   妗朵腑鏂囦欢鍚嶇О
+     * @return
+     */
+    public boolean objectExists(String bucketName, String bucketFileName) {
+        try {
+            minioClient.statObject(StatObjectArgs.builder()
+                    .bucket(bucketName)
+                    .object(bucketFileName)
+                    .build());
+            return true;
+        } catch (Exception e) {
+            return false;
+        }
+    }
 }

--
Gitblit v1.9.3