Browse Source

增加新功能:扫描服务所在目录中的文件可选择加入服务信息表

zhaojinyu 1 week ago
parent
commit
f66ec11f01

+ 17 - 10
base-modules/service-file/src/main/java/com/ruoyi/file/controller/FileUpdateInfoController.java

@@ -50,25 +50,19 @@ public class FileUpdateInfoController {
     }
 
     //查询服务信息
+// 查询服务信息(支持分页)
     @GetMapping("/query")
     public ApiResult<CommonPage<FileUpdateInfo>> queryFiles(
             @RequestParam(required = false) String fileName,
             @RequestParam(required = false, defaultValue = "1") int current,
             @RequestParam(required = false, defaultValue = "10") int size) {
         try {
-            List<FileUpdateInfo> files;
+            CommonPage<FileUpdateInfo> commonPage;
             if (fileName == null || fileName.trim().isEmpty()) {
-                files = fileUpdateInfoService.getAllFiles();
+                commonPage = fileUpdateInfoService.getAllFiles(current, size);
             } else {
-                files = fileUpdateInfoService.getFilesByFileNameContaining(fileName);
+                commonPage = fileUpdateInfoService.getFilesByFileNameContaining(fileName, current, size);
             }
-
-            CommonPage<FileUpdateInfo> commonPage = new CommonPage<>(
-                    files.subList((current - 1) * size, Math.min(current * size, files.size())),
-                    files.size(),
-                    size,
-                    current
-            );
             return ApiResult.success(commonPage);
         } catch (Exception e) {
             return ApiResult.error("查询文件信息失败: " + e.getMessage());
@@ -101,4 +95,17 @@ public class FileUpdateInfoController {
             return ApiResult.error("控制服务失败: " + e.getMessage());
         }
     }
+
+    // 扫描服务所在目录下的文件
+    @GetMapping("/scan")
+    public ApiResult<CommonPage<String>> scanFilesInServiceDir(
+            @RequestParam(required = false, defaultValue = "1") int current,
+            @RequestParam(required = false, defaultValue = "10") int size) {
+        try {
+            CommonPage<String> fileNamesPage = fileUpdateInfoService.scanFilesInServiceDir(current, size);
+            return ApiResult.success(fileNamesPage);
+        } catch (Exception e) {
+            return ApiResult.error("扫描文件失败: " + e.getMessage());
+        }
+    }
 }

+ 17 - 4
base-modules/service-file/src/main/java/com/ruoyi/file/service/FileUpdateInfoService.java

@@ -1,6 +1,9 @@
 package com.ruoyi.file.service;
 
 import com.ruoyi.file.domain.FileUpdateInfo;
+import com.usky.common.core.bean.CommonPage;
+import org.springframework.web.bind.annotation.RequestParam;
+
 import java.util.List;
 
 public interface FileUpdateInfoService {
@@ -14,11 +17,16 @@ public interface FileUpdateInfoService {
     //执行服务更新
     void performFileUpdate(Long id) throws Exception;
 
-    //获取所有服务信息
-    List<FileUpdateInfo> getAllFiles() throws Exception;
+    // 获取所有服务信息(分页)
+    CommonPage<FileUpdateInfo> getAllFiles(
+            @RequestParam(required = false, defaultValue = "1") int current,
+            @RequestParam(required = false, defaultValue = "10") int size) throws Exception;
 
-    //根据文件名模糊查询服务信息
-    List<FileUpdateInfo> getFilesByFileNameContaining(String fileName) throws Exception;
+    // 根据文件名模糊查询服务信息(分页)
+    CommonPage<FileUpdateInfo> getFilesByFileNameContaining(
+            @RequestParam(required = false) String fileName,
+            @RequestParam(required = false, defaultValue = "1") int current,
+            @RequestParam(required = false, defaultValue = "10") int size) throws Exception;
 
     //根据id查询服务信息
     FileUpdateInfo getFileById(Long id) throws Exception;
@@ -28,4 +36,9 @@ public interface FileUpdateInfoService {
 
     //控制服务运行状态
     void controlApplication(String fileName, String action) throws Exception;
+
+    // 扫描 JAR 文件所在的目录并获取文件列表
+    CommonPage<String> scanFilesInServiceDir(
+            @RequestParam(required = false, defaultValue = "1") int current,
+            @RequestParam(required = false, defaultValue = "10") int size) throws Exception;
 }

+ 75 - 7
base-modules/service-file/src/main/java/com/ruoyi/file/service/impl/FileUpdateInfoServiceImpl.java

@@ -1,8 +1,12 @@
 package com.ruoyi.file.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.file.domain.FileUpdateInfo;
 import com.ruoyi.file.mapper.FileUpdateInfoMapper;
 import com.ruoyi.file.service.FileUpdateInfoService;
+import com.usky.common.core.bean.CommonPage;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -17,6 +21,7 @@ import java.nio.file.Paths;
 import java.nio.file.StandardCopyOption;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -41,7 +46,15 @@ public class FileUpdateInfoServiceImpl implements FileUpdateInfoService {
 
     @Override
     public void addFileToDatabase(FileUpdateInfo fileUpdateInfo) throws Exception {
-        String filePath = fileUpdateInfo.getFilePath(); // 使用新的 getFilePath 方法
+        // 假设前端只传入文件名
+        String fileName = fileUpdateInfo.getFileName();
+        if (fileName == null || fileName.trim().isEmpty()) {
+            throw new IllegalArgumentException("文件名不能为空");
+        }
+
+        // 设置文件路径
+        String filePath = FileUpdateInfo.getServiceDir() + File.separator + fileUpdateInfo.getFileName();
+
         File file = new File(filePath);
 
         if (file.exists()) {
@@ -177,15 +190,34 @@ public class FileUpdateInfoServiceImpl implements FileUpdateInfoService {
     }
 
     @Override
-    public List<FileUpdateInfo> getAllFiles() {
-        return fileUpdateInfoMapper.selectList(null);
+    public CommonPage<FileUpdateInfo> getAllFiles(int current, int size) throws Exception {
+        // 使用 MyBatis-Plus 的分页功能
+        Page<FileUpdateInfo> page = new Page<>(current, size);
+        IPage<FileUpdateInfo> result = fileUpdateInfoMapper.selectPage(page, null);
+
+        // 将 MyBatis-Plus 的分页结果转换为 CommonPage
+        return new CommonPage<>(
+                result.getRecords(),
+                (int) result.getTotal(),
+                size,
+                current
+        );
     }
 
     @Override
-    public List<FileUpdateInfo> getFilesByFileNameContaining(String fileName) {
-        return fileUpdateInfoMapper.selectList(
-                new com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<FileUpdateInfo>()
-                        .like("file_name", fileName)
+    public CommonPage<FileUpdateInfo> getFilesByFileNameContaining(String fileName, int current, int size) throws Exception {
+        // 使用 MyBatis-Plus 的分页功能
+        Page<FileUpdateInfo> page = new Page<>(current, size);
+        QueryWrapper<FileUpdateInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.like("file_name", fileName);
+        IPage<FileUpdateInfo> result = fileUpdateInfoMapper.selectPage(page, queryWrapper);
+
+        // 将 MyBatis-Plus 的分页结果转换为 CommonPage
+        return new CommonPage<>(
+                result.getRecords(),
+                (int) result.getTotal(),
+                size,
+                current
         );
     }
 
@@ -231,4 +263,40 @@ public class FileUpdateInfoServiceImpl implements FileUpdateInfoService {
             throw new Exception("不支持的操作系统: " + osName);
         }
     }
+
+    //扫描服务所在目录下的文件
+    @Override
+    public CommonPage<String> scanFilesInServiceDir(int current, int size) throws Exception {
+        // 获取 JAR 文件所在的目录
+        String serviceDir = FileUpdateInfo.getServiceDir();
+        File dir = new File(serviceDir);
+
+        if (!dir.exists() || !dir.isDirectory()) {
+            throw new Exception("无法找到服务目录: " + serviceDir);
+        }
+
+        // 获取目录中的所有文件名
+        File[] files = dir.listFiles();
+        if (files == null) {
+            throw new Exception("无法读取目录内容: " + serviceDir);
+        }
+
+        // 提取文件名
+        List<String> fileNames = new ArrayList<>();
+        for (File file : files) {
+            if (file.isFile()) {
+                fileNames.add(file.getName());
+            }
+        }
+
+        // 对文件名列表进行分页处理
+        int total = fileNames.size();
+        int start = (current - 1) * size;
+        int end = Math.min(start + size, total);
+
+        List<String> pageFileNames = fileNames.subList(start, end);
+
+        // 返回分页结果
+        return new CommonPage<>(pageFileNames, total, size, current);
+    }
 }