From f023cdc41243754b0e79dc172149839a214c2f3e Mon Sep 17 00:00:00 2001
From: dengzedong <dengzedong@email>
Date: 星期四, 24 四月 2025 17:18:34 +0800
Subject: [PATCH] 删除多余备份pyd文件

---
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/impl/MpkFileServiceImpl.java |   70 ++++++++++++++++++++++++++++++++++
 1 files changed, 69 insertions(+), 1 deletions(-)

diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/impl/MpkFileServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/impl/MpkFileServiceImpl.java
index 0c592b3..51535f1 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/impl/MpkFileServiceImpl.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/impl/MpkFileServiceImpl.java
@@ -41,12 +41,12 @@
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.PostConstruct;
 import java.io.File;
 import java.io.IOException;
 import java.net.URLClassLoader;
 import java.nio.file.Files;
 import java.util.*;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -85,6 +85,74 @@
     @Value("${mpk.bak-resources}")
     private String mpkResources;
 
+    @Value("${mpk.delete-bak-file-cache}")
+    private Boolean isDeleteBakFile;
+
+    @PostConstruct
+    void init() {
+        if (isDeleteBakFile) {
+            //删除无用备份pyd文件
+            try {
+                deleteBakFile();
+            } catch (Exception e) {
+                log.error("删除多余备份pyd文件失败",e);
+            }
+        }
+    }
+
+
+    private void deleteBakFile() {
+        // 租户目录下的无用pyd
+        File bakDir = new File(mpkBakFilePath);
+        if (bakDir.exists() && bakDir.isDirectory()) {
+            File[] tenantDirs = bakDir.listFiles(dir -> dir.isDirectory() && !dir.getName().equals(MdkConstant.PROJECT_PUBLISH) && !dir.getName().equals(MdkConstant.PROJECT_UNPUBLISH) && dir.getName().matches("^[1-9]\\d*$"));
+
+            if (tenantDirs != null && !CollectionUtils.isEmpty(Arrays.asList(tenantDirs))) {
+                for (File tenantDir : tenantDirs) {
+                    File[] pydFiles = tenantDir.listFiles(file -> file.isFile() && file.getName().endsWith(".pyd"));
+                    if (pydFiles == null || CollectionUtils.isEmpty(Arrays.asList(pydFiles))) {
+                        continue;
+                    }
+                    TenantContextHolder.setTenantId(Long.valueOf(tenantDir.getName()));
+                    List<MpkFileEntity> fileEntityList = baseDao.selectList(new QueryWrapper<>());
+                    List<String> filePathList = fileEntityList.stream().map(MpkFileEntity::getFilePath).collect(Collectors.toList());
+                    for (File pydFile : pydFiles) {
+                        if (!filePathList.contains(pydFile.getAbsolutePath())) {
+                            log.info("删除多余备份pyd文件:" + pydFile.getAbsoluteFile());
+                            pydFile.delete();
+                        }
+                    }
+                }
+            }
+        }
+//
+//
+//        // 环境变量MDK_PKGS下pyd文件
+//        String mdkPkgs = System.getenv("MDK_PKGS");
+//        File pkgsDir = new File(mdkPkgs);
+//        List<File> pydFiles = getPydFiles(pkgsDir);
+
+    }
+
+    private List<File> getPydFiles(File pkgsDir) {
+        List<File> result = new ArrayList<>();
+        if (pkgsDir.exists() && pkgsDir.isDirectory()) {
+            File[] files = pkgsDir.listFiles();
+            if (files != null) {
+                for (File file : files) {
+                    if (file.isDirectory()) {
+                        // 递归调用获取子目录下的 .pyd 文件
+                        result.addAll(getPydFiles(file));
+                    } else if (file.isFile() && file.getName().endsWith(".pyd")) {
+                        result.add(file);
+                    }
+                }
+            }
+        }
+        return result;
+    }
+
+
     @Override
     public PageData<MpkFileDTO> page(Map<String, Object> params) {
         IPage<MpkFileEntity> page = baseDao.selectPage(

--
Gitblit v1.9.3