From 3c7fe4c13ff70362da15adb6d291952f4525048c Mon Sep 17 00:00:00 2001 From: lilin Date: Mon, 14 Jul 2025 10:09:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E4=B8=8A=E6=96=87=E4=BB=B6=E5=89=A9?= =?UTF-8?q?=E4=BD=99=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/StorageSourceConvertImpl.java | 42 +++++++++++++++++++ .../storage/model/entity/StorageSource.java | 4 ++ .../result/StorageSourceAdminResult.java | 4 +- 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/java/src/main/java/com/yfd/platform/modules/storage/convert/impl/StorageSourceConvertImpl.java b/java/src/main/java/com/yfd/platform/modules/storage/convert/impl/StorageSourceConvertImpl.java index e1fa84b..76a2971 100644 --- a/java/src/main/java/com/yfd/platform/modules/storage/convert/impl/StorageSourceConvertImpl.java +++ b/java/src/main/java/com/yfd/platform/modules/storage/convert/impl/StorageSourceConvertImpl.java @@ -144,6 +144,7 @@ public class StorageSourceConvertImpl implements StorageSourceConvert { if(StringUtils.isNotBlank(value)){ //空间使用率 storageSource.setSpaceOccupancyRatio(calculateLocalStorageUsage(value)); + storageSource.setRemainingSpaceSize(calculateFreeSpaceInGB(value)); } }else { @@ -172,16 +173,20 @@ public class StorageSourceConvertImpl implements StorageSourceConvert { List valueList = Arrays.asList(values); StringBuilder spaceOccupancyRatio = new StringBuilder(); + StringBuilder remainingSpaceSize = new StringBuilder(); for (String valueData : valueList){ String percentage = calculateLocalStorageUsage(valueData); + String spaceSize = calculateFreeSpaceInGB(valueData); if (spaceOccupancyRatio.length() > 0) { spaceOccupancyRatio.append(";"); // 添加分号分隔 } spaceOccupancyRatio.append(percentage); + remainingSpaceSize.append(spaceSize); } //空间使用率 storageSource.setSpaceOccupancyRatio(spaceOccupancyRatio.toString()); + storageSource.setRemainingSpaceSize(remainingSpaceSize.toString()); } @@ -239,6 +244,42 @@ public class StorageSourceConvertImpl implements StorageSourceConvert { throw new IllegalArgumentException("无法获取磁盘空间: " + e.getMessage()); } } + //计算空间生育大小 + public static String calculateFreeSpaceInGB(String path) { + try { + Path target = Paths.get(path); + + // 解析符号链接 + if (Files.isSymbolicLink(target)) { + target = Files.readSymbolicLink(target); + } + + // 获取文件存储信息 + FileStore store = Files.getFileStore(target); + long freeSpaceBytes = store.getUsableSpace(); + + // 转换为GB (1 GB = 1024^3 bytes) + double freeSpaceGB = (double) freeSpaceBytes / (1024 * 1024 * 1024); + + // 格式化输出 + DecimalFormat df = new DecimalFormat("#.##"); + String formatted = df.format(freeSpaceGB); + + // 移除多余的小数位(如60.0 -> 60) + if (formatted.endsWith(".00")) { + formatted = formatted.substring(0, formatted.length() - 3); + } else if (formatted.endsWith(".0")) { + formatted = formatted.substring(0, formatted.length() - 2); + } + + return formatted + "GB"; + + } catch (Exception e) { + throw new IllegalArgumentException("无法获取磁盘空间: " + e.getMessage()); + } + } + + // 计算本地路径的空间使用率 // public static String calculateLocalStorageUsage(String path) { // @@ -385,6 +426,7 @@ public class StorageSourceConvertImpl implements StorageSourceConvert { storageSourceAdminResult.setStoreContent( storageSource.getStoreContent()); storageSourceAdminResult.setSpaceOccupancyRatio( storageSource.getSpaceOccupancyRatio()); storageSourceAdminResult.setValueData( storageSource.getValueData()); + storageSourceAdminResult.setRemainingSpaceSize( storageSource.getRemainingSpaceSize()); return storageSourceAdminResult; } } diff --git a/java/src/main/java/com/yfd/platform/modules/storage/model/entity/StorageSource.java b/java/src/main/java/com/yfd/platform/modules/storage/model/entity/StorageSource.java index 5624a8e..c263186 100644 --- a/java/src/main/java/com/yfd/platform/modules/storage/model/entity/StorageSource.java +++ b/java/src/main/java/com/yfd/platform/modules/storage/model/entity/StorageSource.java @@ -111,4 +111,8 @@ public class StorageSource implements Serializable { //存储路径 @TableField(exist = false) private String valueData; + + //存储剩余大小GB + @TableField(exist = false) + private String remainingSpaceSize; } diff --git a/java/src/main/java/com/yfd/platform/modules/storage/model/result/StorageSourceAdminResult.java b/java/src/main/java/com/yfd/platform/modules/storage/model/result/StorageSourceAdminResult.java index acfd7d1..28c4af7 100644 --- a/java/src/main/java/com/yfd/platform/modules/storage/model/result/StorageSourceAdminResult.java +++ b/java/src/main/java/com/yfd/platform/modules/storage/model/result/StorageSourceAdminResult.java @@ -91,5 +91,7 @@ public class StorageSourceAdminResult { //存储路径 @TableField(exist = false) private String valueData; - + //存储剩余大小GB + @TableField(exist = false) + private String remainingSpaceSize; }