zhanghai 4 years ago
parent
commit
4bbccd81ea

+ 3 - 1
src/main/java/com/gz/rvo/statistics/ArchiveStatisticsRVO.java

@@ -15,5 +15,7 @@ public class ArchiveStatisticsRVO {
     private Integer id;
     private Integer parentId;
     //磁盘占用的大小
-    private String space;
+    private Long space;
+    //占用磁盘的总大小
+    private String sumSpace;
 }

+ 3 - 1
src/main/java/com/gz/rvo/statistics/ArchiveYearStatisticsRVO.java

@@ -12,7 +12,9 @@ public class ArchiveYearStatisticsRVO {
     private Integer archiveCount;
     private Integer fileCount;
     //占用磁盘大小
-    private String space;
+    private Long space;
+    //累计占用磁盘大小
+    private String sumSpace;
 
 
 }

+ 29 - 12
src/main/java/com/gz/service/statistics/impl/SelectStatisticsServiceImpl.java

@@ -4,9 +4,10 @@ import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
-import cn.hutool.core.lang.tree.Tree;
-import cn.hutool.core.lang.tree.TreeNodeConfig;
-import cn.hutool.core.lang.tree.TreeUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.RuntimeUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ReUtil;
 import cn.hutool.core.util.RuntimeUtil;
@@ -19,7 +20,6 @@ import com.gz.dto.borrow.ArchiveBorrowDTO;
 import com.gz.dto.system.ArchivesTreeDTO;
 import com.gz.mapper.borrow.ArchiveBorrowMapper;
 import com.gz.mapper.statistics.SelectStatisticsMapper;
-import com.gz.mapper.system.ArchivesTreeMapper;
 import com.gz.rvo.statistics.ArchiveStatisticsRVO;
 import com.gz.rvo.statistics.ArchiveYearStatisticsRVO;
 import com.gz.rvo.statistics.BorrowStatisticsRVO;
@@ -27,6 +27,7 @@ import com.gz.service.statistics.SelectStatisticsService;
 import com.gz.service.system.ArchivesTreeService;
 import com.gz.service.system.impl.AuthServiceImpl;
 import com.gz.utils.JwtUtils;
+import com.gz.utils.UnitUtils;
 import com.gz.vo.statistics.StatisticsVO;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -102,9 +103,11 @@ public class SelectStatisticsServiceImpl implements SelectStatisticsService {
                 }
             });
             //占用磁盘大小临时存储到map
-            Map<String, String> map = new HashMap<>();
+            Map<String, Long> map = new HashMap<>();
             // 档案文件根目录
             File baseDir = FileUtil.file(this.baseDir);
+            //占用磁盘的总大小
+            Long hj=0l;
             if (FileUtil.exist(baseDir) && FileUtil.isDirectory(baseDir)) {
                 // 全宗号
                 for (File qzh : baseDir.listFiles()) {
@@ -119,12 +122,14 @@ public class SelectStatisticsServiceImpl implements SelectStatisticsService {
                                             //二级分类
                                             for (File category2 : category.listFiles()) {
                                                 if (ObjectUtil.isNotEmpty(category2)) {
-                                                    String s1 = this.getLinuxDirectorySize(category);
+                                                    Long s1 = this.getLinuxDirectorySize(category);
+                                                    hj+=s1;
                                                     map.put(category.getName(), s1);
                                                 }
                                             }
                                         }
-                                        String s2 = this.getLinuxDirectorySize(category);
+                                        Long s2 = this.getLinuxDirectorySize(category);
+                                        hj+=s2;
                                         map.put(category.getName(), s2);
                                     }
                                 }
@@ -134,7 +139,7 @@ public class SelectStatisticsServiceImpl implements SelectStatisticsService {
                 }
             }
             //内存大小赋值
-            for (Map.Entry<String, String> entry : map.entrySet()) {
+            for (Map.Entry<String, Long> entry : map.entrySet()) {
                 for (ArchiveStatisticsRVO li : tree) {
                     if (li.getTitle().equals(entry.getKey())) {
                         li.setSpace(entry.getValue());
@@ -156,6 +161,8 @@ public class SelectStatisticsServiceImpl implements SelectStatisticsService {
                     }
                 }
             });
+
+            tree.get(tree.size()-1).setSumSpace(UnitUtils.storageUnitConvertStr(hj));
             stringRedisTemplate.opsForValue().set(key, JSONObject.toJSONString(tree), DataGlobalVariable.CACHE_EXPIRES, DataGlobalVariable.TIME_UNIT);
             return tree;
         }
@@ -177,6 +184,7 @@ public class SelectStatisticsServiceImpl implements SelectStatisticsService {
             List<ArchiveYearStatisticsRVO> archiveYearStatisticsRVOS = selectStatisticsMapper.selectArchiveYearStatistics(vo);
             // 档案文件根目录
             File baseDir = FileUtil.file(this.baseDir);
+            Long hj=0l;
             log.info("{}{}", baseDir, baseDir.isDirectory());
             if (FileUtil.exist(baseDir) && FileUtil.isDirectory(baseDir)) {
                 // 全宗号
@@ -185,7 +193,8 @@ public class SelectStatisticsServiceImpl implements SelectStatisticsService {
                         // 年份
                         for (File year : qzh.listFiles()) {
                             if (ObjectUtil.isNotEmpty(year)) {
-                                String linuxDirectorySize = this.getLinuxDirectorySize(year);
+                                Long linuxDirectorySize = this.getLinuxDirectorySize(year);
+                                hj+=linuxDirectorySize;
                                 archiveYearStatisticsRVOS.forEach(statisticsRVO -> {
                                     if (statisticsRVO.getGdnd().equals(year.getName())) {
                                         statisticsRVO.setSpace(linuxDirectorySize);
@@ -196,17 +205,19 @@ public class SelectStatisticsServiceImpl implements SelectStatisticsService {
                     }
                 }
             }
+            archiveYearStatisticsRVOS.get(archiveYearStatisticsRVOS.size()-1).setSumSpace(UnitUtils.storageUnitConvertStr(hj));
             stringRedisTemplate.opsForValue().set(key, JSONObject.toJSONString(archiveYearStatisticsRVOS), DataGlobalVariable.CACHE_EXPIRES, DataGlobalVariable.TIME_UNIT);
             return archiveYearStatisticsRVOS;
         }
     }
 
     /**
+     * @return 文件夹占用空间大小 单位:字节(K) 1GB = 1024MB = 1024 * 1024 KB = 1024 * 1024 * 1024 B
      * @description 获取Linux文件夹大小
      * @author ZhangHai
      * @since 2021/9/15 11:33
      */
-    private String getLinuxDirectorySize(File file) {
+    private Long getLinuxDirectorySize(File file) {
         if (!file.exists()) {
             throw new BusinessException(500, "文件见不存在");
         }
@@ -214,13 +225,19 @@ public class SelectStatisticsServiceImpl implements SelectStatisticsService {
             throw new BusinessException(500, "参数非文件见");
         }
         // 执行命令Format
-        final String commandFomat = "du -sh {}";
+        final String commandFomat = "du -s {}";
         // 需要执行的命令
         final String command = StrUtil.format(commandFomat, file.getAbsoluteFile());
         log.info("文件夹大小扫描命令执行:{}", command);
         // 执行命令的结果
         String commandResult = RuntimeUtil.execForStr(command);
-        return commandResult.substring(0, commandResult.indexOf(" "));
+        // 占用空间大小 String类型
+        String sizeStr = commandResult.substring(0, commandResult.indexOf("\t"));
+        Long size = 0L;
+        if (StrUtil.isNotEmpty(sizeStr)) {
+            size = Long.parseLong(sizeStr);
+        }
+        return size;
     }
 
     @Override

+ 54 - 0
src/main/java/com/gz/utils/UnitUtils.java

@@ -0,0 +1,54 @@
+package com.gz.utils;
+
+import cn.hutool.core.util.NumberUtil;
+
+import java.math.BigDecimal;
+
+/**
+ * 单位Utils
+ *
+ * @author LiuChangLan
+ * @since 2021/9/5 0:20
+ */
+public class UnitUtils {
+
+    /**
+     * 1KB
+     */
+    public static final Long KB = 1L * 1024;
+    /**
+     * 1MB
+     */
+    public static final Long MB = KB * 1024;
+    /**
+     * 1GB
+     */
+    public static final Long GB = MB * 1024;
+
+
+    /**
+     * 单位转换
+     *
+     * @author LiuChangLan
+     * @since 2021/9/5 0:28
+     */
+    public static String storageUnitConvertStr(Long byteValue) {
+        String value = "";
+        if (byteValue >= KB && byteValue < MB) {
+            value += NumberUtil.round(byteValue / 1.0 / KB, 2).toString();
+            value += "KB";
+        } else if (byteValue >= MB && byteValue < GB) {
+            value += NumberUtil.round(byteValue / 1.0 / MB, 2).toString();
+            value += "MB";
+        } else if (byteValue >= GB) {
+            value += NumberUtil.round(byteValue / 1.0 / GB, 2).toString();
+            value += "GB";
+        }
+        return value;
+    }
+
+    public static BigDecimal storageUnitConvertMB(Long byteValue) {
+        return NumberUtil.round(byteValue / 1.0 / MB, 2);
+    }
+}
+