Browse Source

本地代码提交

高家顺 4 years ago
parent
commit
487d1ff106

+ 33 - 16
src/main/java/com/macro/mall/tiny/common/util/MyFileUtils.java

@@ -3,7 +3,10 @@ package com.macro.mall.tiny.common.util;
 
 import com.google.common.collect.Lists;
 import com.macro.mall.tiny.config.UploadConfig;
+import com.macro.mall.tiny.domain.AdminUserDetails;
 import com.macro.mall.tiny.modules.business.model.BDirectory;
+import com.macro.mall.tiny.modules.business.model.BFile;
+import com.macro.mall.tiny.security.util.AuthUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -84,7 +87,7 @@ public class MyFileUtils {
     }
 
     public static String getAuthFilePath(String basePath, String fileName, boolean auth) {
-        if (StringUtils.isBlank(basePath)||StringUtils.isBlank(fileName)) return "";
+        if (StringUtils.isBlank(basePath) || StringUtils.isBlank(fileName)) return "";
         String resultPath = basePath + UploadConfig.SEPARATOR + fileName;
         File file = new File(resultPath);
         if (file.exists()) {
@@ -98,31 +101,45 @@ public class MyFileUtils {
         return "";
     }
 
-    public static List<String> getSonPaths(String basePath, boolean auth) {
+    public static List<BFile> getSonPaths(String basePath, boolean auth) {
         return getSonPaths(basePath, null, auth);
     }
 
-    public static List<String> getSonPaths(String basePath, FilenameFilter filter, boolean auth) {
+    public static List<BFile> getSonPaths(String basePath, FilenameFilter filter, boolean auth) {
         if (StringUtils.isBlank(basePath)) return Lists.newArrayList();
         File file = new File(basePath);
         if (file.exists() && file.isDirectory()) {
-            String[] sonStrs = filter == null ? file.list() : file.list(filter);
-            if (sonStrs == null) return Lists.newArrayList();
-            return Arrays.stream(sonStrs)
-                    .filter(son -> auth || !son.contains("~"))
-                    .map(son -> basePath + UploadConfig.SEPARATOR + son)
+            File[] sonFiles = filter == null ? file.listFiles() : file.listFiles(filter);
+            if (sonFiles == null) return Lists.newArrayList();
+            return Arrays.stream(sonFiles)
+                    .filter(son -> auth || !son.getName().startsWith("~"))
+                    .map(son -> {
+                        final BFile sonFile = new BFile();
+                        sonFile.setName(son.getName());
+                        sonFile.setPath(son.getPath());
+                        sonFile.setIsDirectory(son.isDirectory() ? 1 : 0);
+                        return sonFile;
+                    })
                     .collect(Collectors.toList());
         }
         return Lists.newArrayList();
     }
 
-    public static void main(String[] args) {
-        String path = "F:/StudyWorkSpace/doc-manager/power";
-        final BDirectory file = getAllAuthDirectory(new File(path), true);
-        System.out.println(file);
+    /**
+     *@describe 获取根目录下的所有文件夹
+     *@param    userDetails
+     *@return   com.macro.mall.tiny.modules.business.model.BDirectory
+     *@author   gjs
+     *@since    J7.23.0
+     *@date     2021/4/2
+     */
+    public static BDirectory getRootDirectory(AdminUserDetails userDetails) {
+        final boolean access = AuthUtil.checkAccess(userDetails, "/visit");
+        final File rootDirectory = new File(UploadConfig.powerPath);
+        return getAllAuthDirectory(rootDirectory, access);
     }
 
-    public static BDirectory getAllAuthDirectory(File file, boolean auth) {
+    public static BDirectory getAllAuthDirectory(File file, boolean access) {
         if (!file.exists() && !file.isDirectory()) {
             return null;
         }
@@ -130,13 +147,13 @@ public class MyFileUtils {
         List<BDirectory> subDirectory = Lists.newArrayList();
         boolean hasFile = false;
 
-        final File[] subFiles = file.listFiles((dir, name) -> auth || !name.startsWith(String.valueOf(UploadConfig.AUTH_STR)));
+        final File[] subFiles = file.listFiles((dir, name) -> access || !name.startsWith(String.valueOf(UploadConfig.AUTH_STR)));
         if (subFiles != null && subFiles.length > 0) {
             for (File subFile : subFiles) {
                 if (!subFile.isDirectory() && !hasFile) {
                     hasFile = true;
-                } else {
-                    subDirectory.add(getAllAuthDirectory(subFile, auth));
+                } else if (subFile.isDirectory()) {
+                    subDirectory.add(getAllAuthDirectory(subFile, access));
                 }
             }
         }

+ 3 - 2
src/main/java/com/macro/mall/tiny/modules/business/controller/BTowerController.java

@@ -3,6 +3,7 @@ package com.macro.mall.tiny.modules.business.controller;
 
 import com.macro.mall.tiny.common.api.CommonResult;
 import com.macro.mall.tiny.domain.AdminUserDetails;
+import com.macro.mall.tiny.modules.business.model.BFile;
 import com.macro.mall.tiny.modules.business.model.BTower;
 import com.macro.mall.tiny.modules.business.service.BTowerService;
 import io.swagger.annotations.Api;
@@ -44,9 +45,9 @@ public class BTowerController {
     @ApiOperation("获取电塔文件资料")
     @RequestMapping(value = "/getData/{id}", method = RequestMethod.GET)
     @ResponseBody
-    public CommonResult<Map<String, List<String>>> getData(@PathVariable Long id) {
+    public CommonResult<Map<String, List<BFile>>> getData(@PathVariable Long id) {
         AdminUserDetails userDetails = (AdminUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
-        Map<String, List<String>> data = towerService.getData(id, userDetails);
+        Map<String, List<BFile>> data = towerService.getData(id, userDetails);
         return CommonResult.success(data);
     }
 

+ 18 - 4
src/main/java/com/macro/mall/tiny/modules/business/controller/FileController.java

@@ -4,6 +4,7 @@ import com.macro.mall.tiny.common.api.CommonResult;
 import com.macro.mall.tiny.domain.AdminUserDetails;
 import com.macro.mall.tiny.modules.business.dto.FileUploadParam;
 import com.macro.mall.tiny.modules.business.model.BDirectory;
+import com.macro.mall.tiny.modules.business.service.BDirectoryService;
 import com.macro.mall.tiny.modules.business.service.FileService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -34,6 +35,9 @@ public class FileController {
     @Autowired
     private FileService fileService;
 
+    @Autowired
+    private BDirectoryService directoryService;
+
 
     /**
      * @param fileUploadParam
@@ -81,9 +85,19 @@ public class FileController {
         outputStream.close();
     }
 
-    @ApiOperation("文件上传接口")
-    @PostMapping("/upload")
-    public CommonResult<BDirectory> getDirectory(){
-        return null;
+    /**
+     *@describe 获取全部文件夹
+     *@param
+     *@return   com.macro.mall.tiny.common.api.CommonResult<com.macro.mall.tiny.modules.business.model.BDirectory>
+     *@author   gjs
+     *@since    J7.23.0
+     *@date     2021/4/2
+     */
+    @ApiOperation("获取全部文件夹接口")
+    @GetMapping("/getAllDirectory")
+    public CommonResult<BDirectory> getDirectory() {
+        AdminUserDetails userDetails = (AdminUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
+        final BDirectory directory = directoryService.getDirectory(userDetails);
+        return CommonResult.success(directory);
     }
 }

+ 1 - 1
src/main/java/com/macro/mall/tiny/modules/business/model/BDirectory.java

@@ -15,7 +15,7 @@ import java.util.List;
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
-@ApiModel(value = "BFile对象", description = "文件对象")
+@ApiModel(value = "BDirectory对象", description = "文件夹对象")
 public class BDirectory implements Serializable {
 
     @ApiModelProperty(value = "文件夹名称")

+ 33 - 0
src/main/java/com/macro/mall/tiny/modules/business/model/BFile.java

@@ -0,0 +1,33 @@
+package com.macro.mall.tiny.modules.business.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author gjs
+ * @description
+ * @date 2021/4/2 11:35
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "BFile对象", description = "文件对象")
+public class BFile implements Serializable {
+
+    @ApiModelProperty(value = "文件/文件夹名称")
+    private String name;
+
+    @ApiModelProperty(value = "文件/文件夹详细路径")
+    private String path;
+
+    @ApiModelProperty(value = "是否为文件夹")
+    private int isDirectory;
+
+    @ApiModelProperty(value = "下一层")
+    private List<BFile> subFile;
+
+}

+ 2 - 0
src/main/java/com/macro/mall/tiny/modules/business/service/BDirectoryCacheService.java

@@ -16,4 +16,6 @@ public interface BDirectoryCacheService {
 
     void delDirectory(AdminUserDetails userDetails);
 
+    void delDirectory();
+
 }

+ 15 - 0
src/main/java/com/macro/mall/tiny/modules/business/service/BDirectoryService.java

@@ -0,0 +1,15 @@
+package com.macro.mall.tiny.modules.business.service;
+
+import com.macro.mall.tiny.domain.AdminUserDetails;
+import com.macro.mall.tiny.modules.business.model.BDirectory;
+
+/**
+ * @author gjs
+ * @description
+ * @date 2021/4/2 9:30
+ */
+public interface BDirectoryService {
+
+    BDirectory getDirectory(AdminUserDetails userDetails);
+
+}

+ 2 - 1
src/main/java/com/macro/mall/tiny/modules/business/service/BTowerService.java

@@ -1,6 +1,7 @@
 package com.macro.mall.tiny.modules.business.service;
 
 import com.macro.mall.tiny.domain.AdminUserDetails;
+import com.macro.mall.tiny.modules.business.model.BFile;
 import com.macro.mall.tiny.modules.business.model.BTower;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -20,5 +21,5 @@ public interface BTowerService extends IService<BTower> {
 
     long saveAndUpdate(List<BTower> towerList);
 
-    Map<String, List<String>> getData(Long id, AdminUserDetails userDetails);
+    Map<String, List<BFile>> getData(Long id, AdminUserDetails userDetails);
 }

+ 11 - 3
src/main/java/com/macro/mall/tiny/modules/business/service/impl/AsyncHandler.java

@@ -9,9 +9,7 @@ import com.macro.mall.tiny.config.UploadConfig;
 import com.macro.mall.tiny.domain.AdminUserDetails;
 import com.macro.mall.tiny.modules.business.enums.DirectoryEnum;
 import com.macro.mall.tiny.modules.business.model.*;
-import com.macro.mall.tiny.modules.business.service.BLineService;
-import com.macro.mall.tiny.modules.business.service.BLineUploadLogService;
-import com.macro.mall.tiny.modules.business.service.BTowerService;
+import com.macro.mall.tiny.modules.business.service.*;
 import com.macro.mall.tiny.modules.ums.model.UmsAdmin;
 import com.macro.mall.tiny.modules.ums.service.UmsAdminService;
 import com.macro.mall.tiny.security.util.AuthUtil;
@@ -66,6 +64,12 @@ public class AsyncHandler {
     @Autowired
     private BTowerService towerService;
 
+    @Autowired
+    private BLineCacheService lineCacheService;
+
+    @Autowired
+    private BDirectoryCacheService directoryCacheService;
+
     @Async
     @Transactional
     public void handleDocument(Long provinceId, String fileSource, String lineName, AdminUserDetails userDetails) {
@@ -195,6 +199,10 @@ public class AsyncHandler {
             lineUploadLog.setUploadTime(new Date());
             lineUploadLog.setWarnMsg(warnMsg.toString());
             lineUploadLogService.save(lineUploadLog);
+
+            // 后续清楚缓存处理
+            lineCacheService.delLineList();
+            directoryCacheService.delDirectory();
         } catch (ApiException e) {
             log.error("上传文件抛出业务异常", e);
         } catch (Exception e) {

+ 8 - 0
src/main/java/com/macro/mall/tiny/modules/business/service/impl/BDirectoryCacheServiceImpl.java

@@ -7,12 +7,14 @@ import com.macro.mall.tiny.modules.business.service.BDirectoryCacheService;
 import com.macro.mall.tiny.security.util.AuthUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
 
 /**
  * @author gjs
  * @description
  * @date 2021/4/1 18:08
  */
+@Service
 public class BDirectoryCacheServiceImpl implements BDirectoryCacheService {
     @Autowired
     private RedisService redisService;
@@ -42,4 +44,10 @@ public class BDirectoryCacheServiceImpl implements BDirectoryCacheService {
     public void delDirectory(AdminUserDetails userDetails) {
         redisService.del(getKey(userDetails));
     }
+
+    @Override
+    public void delDirectory() {
+        redisService.del(REDIS_DATABASE + ":" + REDIS_KEY_DIRECTORY + ":" + 0);
+        redisService.del(REDIS_DATABASE + ":" + REDIS_KEY_DIRECTORY + ":" + 1);
+    }
 }

+ 37 - 0
src/main/java/com/macro/mall/tiny/modules/business/service/impl/BDirectoryServiceImpl.java

@@ -0,0 +1,37 @@
+package com.macro.mall.tiny.modules.business.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.macro.mall.tiny.common.util.MyFileUtils;
+import com.macro.mall.tiny.domain.AdminUserDetails;
+import com.macro.mall.tiny.modules.business.model.BDirectory;
+import com.macro.mall.tiny.modules.business.service.BDirectoryCacheService;
+import com.macro.mall.tiny.modules.business.service.BDirectoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author gjs
+ * @description
+ * @date 2021/4/2 9:32
+ */
+@Service
+public class BDirectoryServiceImpl implements BDirectoryService {
+
+    @Autowired
+    BDirectoryCacheService directoryCacheService;
+
+    @Override
+    public BDirectory getDirectory(AdminUserDetails userDetails) {
+        BDirectory directory = directoryCacheService.getDirectory(userDetails);
+        if (directory != null) {
+            return directory;
+        }
+        directory = MyFileUtils.getRootDirectory(userDetails);
+        if (directory != null) {
+            directoryCacheService.setDirectory(userDetails, directory);
+        } else {
+            directoryCacheService.setDirectory(userDetails, new BDirectory());
+        }
+        return directory;
+    }
+}

+ 1 - 1
src/main/java/com/macro/mall/tiny/modules/business/service/impl/BLineCacheServiceImpl.java

@@ -23,7 +23,7 @@ public class BLineCacheServiceImpl implements BLineCacheService {
     private String REDIS_DATABASE;
     @Value("${redis.expire.common}")
     private Long REDIS_EXPIRE;
-    @Value("${redis.key.directory}")
+    @Value("${redis.key.lineList}")
     private String REDIS_KEY_LINE_LIST;
 
     @Override

+ 4 - 3
src/main/java/com/macro/mall/tiny/modules/business/service/impl/BTowerServiceImpl.java

@@ -10,6 +10,7 @@ import com.macro.mall.tiny.modules.business.enums.DirectoryEnum;
 import com.macro.mall.tiny.modules.business.mapper.BLineMapper;
 import com.macro.mall.tiny.modules.business.mapper.BProvinceMapper;
 import com.macro.mall.tiny.modules.business.mapper.BTowerMapper;
+import com.macro.mall.tiny.modules.business.model.BFile;
 import com.macro.mall.tiny.modules.business.model.BLine;
 import com.macro.mall.tiny.modules.business.model.BProvince;
 import com.macro.mall.tiny.modules.business.model.BTower;
@@ -52,13 +53,13 @@ public class BTowerServiceImpl extends ServiceImpl<BTowerMapper, BTower> impleme
     }
 
     @Override
-    public Map<String, List<String>> getData(Long id, AdminUserDetails userDetails) {
+    public Map<String, List<BFile>> getData(Long id, AdminUserDetails userDetails) {
         if (userDetails == null) {
             Asserts.fail("查询失败,未获取到当前用户");
         }
         boolean auth = AuthUtil.checkAccess(userDetails, "/visit");
 
-        HashMap<String, List<String>> resultMap = new HashMap<>();
+        HashMap<String, List<BFile>> resultMap = new HashMap<>();
 
         BTower tower = towerMapper.selectById(id);
         if (tower == null) Asserts.fail("该电塔不存在,id:" + id);
@@ -71,7 +72,7 @@ public class BTowerServiceImpl extends ServiceImpl<BTowerMapper, BTower> impleme
 
         String SecBasePath;
         String ThirdBasePath;
-        List<String> sonList;
+        List<BFile> sonList;
         // 获取3杆塔图纸
         String shape = tower.getShape();
         int lastIndex = shape.lastIndexOf('-');

+ 1 - 0
src/main/resources/application.yml

@@ -33,6 +33,7 @@ redis:
     resourceList: 'ums:resourceList'
     provinceList: 'business:provinceList'
     lineList: 'business:lineList'
+    directory: 'business:directory'
   expire:
     common: 86400 # 24小时