Parcourir la source

添加 DiskService rpc 接口, 用于获取文件列表

reghao il y a 1 an
Parent
commit
20c3d98569

+ 19 - 0
oss-api/src/main/java/cn/reghao/oss/api/dto/FileInfo.java

@@ -0,0 +1,19 @@
+package cn.reghao.oss.api.dto;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author reghao
+ * @date 2024-07-11 16:42:40
+ */
+public class FileInfo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String objectId;
+    private String objectName;
+    private String filename;
+    private Long size;
+    private Integer storageType;
+    private LocalDateTime updateTime;
+}

+ 16 - 0
oss-api/src/main/java/cn/reghao/oss/api/iface/DiskService.java

@@ -0,0 +1,16 @@
+package cn.reghao.oss.api.iface;
+
+import cn.reghao.oss.api.dto.FileInfo;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2024-07-11 16:45:54
+ */
+public interface DiskService {
+    default public List<FileInfo> getFiles(int pageNumber, int pageSize) {
+        return Collections.emptyList();
+    }
+}

+ 12 - 1
oss-console/src/main/java/cn/reghao/oss/console/app/controller/page/StoreObjectPageController.java

@@ -1,9 +1,11 @@
 package cn.reghao.oss.console.app.controller.page;
 
 import cn.reghao.jutil.jdk.result.WebResult;
+import cn.reghao.oss.api.dto.FileInfo;
 import cn.reghao.oss.api.iface.ConsoleService;
 import cn.reghao.oss.console.account.service.UserContext;
 import cn.reghao.oss.api.dto.ServerInfo;
+import cn.reghao.oss.console.app.service.DiskFileService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.stereotype.Controller;
@@ -11,6 +13,8 @@ import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.List;
+
 /**
  * @author reghao
  * @date 2024-02-27 09:12:14
@@ -20,9 +24,11 @@ import org.springframework.web.multipart.MultipartFile;
 @RequestMapping("/store/object")
 public class StoreObjectPageController {
     private final ConsoleService consoleService;
+    private DiskFileService diskFileService;
 
-    public StoreObjectPageController(ConsoleService consoleService) {
+    public StoreObjectPageController(ConsoleService consoleService, DiskFileService diskFileService) {
         this.consoleService = consoleService;
+        this.diskFileService = diskFileService;
     }
 
     @ApiOperation(value = "文件列表页面")
@@ -30,6 +36,11 @@ public class StoreObjectPageController {
     public String index(@RequestParam(value = "env", required = false) String env,
                         @RequestParam(value = "type", required = false) String type,
                         @RequestParam(value = "appName", required = false) String appName, Model model) throws Exception {
+
+        int pageNumber = 1;
+        List<FileInfo> list = diskFileService.getFileList(pageNumber);
+
+        model.addAttribute("list", list);
         return "/object/index";
     }
 

+ 8 - 0
oss-console/src/main/java/cn/reghao/oss/console/app/rpc/RpcService.java

@@ -1,5 +1,6 @@
 package cn.reghao.oss.console.app.rpc;
 
+import cn.reghao.oss.api.iface.DiskService;
 import cn.reghao.oss.api.iface.StoreService;
 import cn.reghao.oss.console.app.model.po.StoreNode;
 import org.apache.dubbo.config.ApplicationConfig;
@@ -20,6 +21,13 @@ public class RpcService {
         return remoteService.getService(host, port, StoreService.class);
     }
 
+    public DiskService getDiskService() {
+        RemoteService<DiskService> remoteService = new RemoteService<>();
+        String host = "127.0.0.1";
+        int port = 8110;
+        return remoteService.getService(host, port, DiskService.class);
+    }
+
     static class RemoteService<T> {
         public T getService(String host, int port, Class<T> clazz) {
             String serviceName = "remote-service";

+ 29 - 0
oss-console/src/main/java/cn/reghao/oss/console/app/service/DiskFileService.java

@@ -0,0 +1,29 @@
+package cn.reghao.oss.console.app.service;
+
+import cn.reghao.oss.api.dto.FileInfo;
+import cn.reghao.oss.api.iface.DiskService;
+import cn.reghao.oss.console.app.rpc.RpcService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2024-07-11 16:49:34
+ */
+@Service
+public class DiskFileService {
+    private final RpcService rpcService;
+
+    public DiskFileService(RpcService rpcService) {
+        this.rpcService = rpcService;
+    }
+
+    public List<FileInfo> getFileList(int pageNumber) {
+        DiskService diskService = rpcService.getDiskService();
+
+        int pageSize = 10;
+        List<FileInfo> list = diskService.getFiles(pageNumber, pageSize);
+        return list;
+    }
+}

+ 2 - 2
oss-store/src/main/java/cn/reghao/oss/store/db/mapper/FileMetaMapper.java

@@ -24,7 +24,7 @@ public interface FileMetaMapper extends BaseMapper<FileMeta> {
     ObjectMeta findObjectMetaById(String objectName);
 
     /******************************************************************************************************************/
-    List<FileMeta> findAll0(@Param("bucket") String bucket, @Param("max") Integer max, @Param("regex") String regex);
-    List<FileMeta> findAll2(@Param("bucket") String bucket, @Param("prefix") String prefix,
+    List<FileMeta> findAll0(@Param("objectId") String objectId, @Param("max") Integer max, @Param("regex") String regex);
+    List<FileMeta> findAll2(@Param("objectId") String objectId, @Param("prefix") String prefix,
                             @Param("start") String start, @Param("max") Integer max);
 }

+ 45 - 0
oss-store/src/main/java/cn/reghao/oss/store/rpc/DiskServiceImpl.java

@@ -0,0 +1,45 @@
+package cn.reghao.oss.store.rpc;
+
+import cn.reghao.oss.api.dto.FileInfo;
+import cn.reghao.oss.api.iface.DiskService;
+import cn.reghao.oss.store.db.mapper.FileMetaMapper;
+import cn.reghao.oss.store.model.po.FileMeta;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2024-07-11 16:46:50
+ */
+@DubboService
+@Service
+public class DiskServiceImpl implements DiskService {
+    private final FileMetaMapper fileMetaMapper;
+
+    public DiskServiceImpl(FileMetaMapper fileMetaMapper) {
+        this.fileMetaMapper = fileMetaMapper;
+    }
+
+    @Override
+    public List<FileInfo> getFiles(int pageNumber, int pageSize) {
+        String bucket = "";
+        String prefix = "abc/d/";
+        String startAfter = "abc/d/e";
+        startAfter = "";
+        Integer maxKeys = 10;
+
+        StringBuilder regex = new StringBuilder();
+        regex.append("^").append(prefix).append("([^/])+/?$");
+        List<FileMeta> list;
+        if (startAfter.isBlank()) {
+            list = fileMetaMapper.findAll0(bucket, maxKeys, regex.toString());
+        } else {
+            list = fileMetaMapper.findAll2(bucket, prefix, startAfter, maxKeys);
+        }
+
+        return Collections.emptyList();
+    }
+}

+ 6 - 16
oss-store/src/main/resources/mapper/FileMetaMapper.xml

@@ -64,25 +64,15 @@
         select * from file_meta
     </select>
     <select id="findAll0" resultType="cn.reghao.oss.store.model.po.FileMeta">
-        select file_meta.* from file_meta
-        inner join bucket
-        on bucket.name=#{bucket}
-        and object_name regexp #{regex}
-        limit #{max}
-    </select>
-    <!-- TODO ${prefix} 和 #{prefix} 的区别 -->
-    <select id="findAll1" resultType="cn.reghao.oss.store.model.po.FileMeta">
-        select file_meta.* from file_meta
-        inner join bucket
-        on bucket.name=#{bucket}
-        and object_name regexp concat_ws('', '^', '${prefix}', '([^/])+/?$')
+        select file_meta.*
+        from file_meta
+        where object_id=#{objectId} and object_name regexp #{regex}
         limit #{max}
     </select>
     <select id="findAll2" resultType="cn.reghao.oss.store.model.po.FileMeta">
-        select file_meta.* from file_meta
-        inner join bucket
-        on bucket.name=#{bucket}
-        and object_name regexp concat_ws('', '^', '${prefix}', '([^/])+/?$')
+        select file_meta.*
+        from file_meta
+        where object_id=#{objectId} and object_name regexp concat_ws('', '^', '${prefix}', '([^/])+/?$')
         and id > (select id from file_meta where object_name=#{start})
         limit #{max}
     </select>