From bf6109a746afe7d184f0d14241a5b44d4f95a1bc Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期一, 18 九月 2023 14:40:45 +0800
Subject: [PATCH] 添加删除元数据功能

---
 src/main/java/com/lf/server/service/data/MetaService.java |   84 ++++++++++++++++++++++++++++++++++++++++-
 src/main/java/com/lf/server/mapper/data/MetaMapper.java   |    8 ++++
 src/main/resources/application.yml                        |    8 ++--
 src/main/resources/mapper/data/MetaMapper.xml             |    6 +++
 4 files changed, 99 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/lf/server/mapper/data/MetaMapper.java b/src/main/java/com/lf/server/mapper/data/MetaMapper.java
index a73303e..4ab08a1 100644
--- a/src/main/java/com/lf/server/mapper/data/MetaMapper.java
+++ b/src/main/java/com/lf/server/mapper/data/MetaMapper.java
@@ -178,6 +178,14 @@
     public List<String> selectMetaOverflowDep(String ids, String depcode);
 
     /**
+     * 鏍规嵁璺緞鏌ヨ鏂囦欢鍚�
+     *
+     * @param path 璺緞
+     * @return 鏂囦欢鏁�
+     */
+    public Integer selectCountByPath(String path);
+
+    /**
      * 鎻掑叆涓�鏉�
      *
      * @param entity
diff --git a/src/main/java/com/lf/server/service/data/MetaService.java b/src/main/java/com/lf/server/service/data/MetaService.java
index e9b42e4..1c412e7 100644
--- a/src/main/java/com/lf/server/service/data/MetaService.java
+++ b/src/main/java/com/lf/server/service/data/MetaService.java
@@ -159,6 +159,11 @@
     }
 
     @Override
+    public Integer selectCountByPath(String path) {
+        return metaMapper.selectCountByPath(path);
+    }
+
+    @Override
     public Integer insert(MetaEntity entity) {
         return metaMapper.insert(entity);
     }
@@ -188,14 +193,18 @@
      */
     public Integer deletes(List<Integer> list) {
         String ids = StringHelper.join(list, ",");
+        List<MetaEntity> metas = selectByIds(ids);
 
         String sql = null;
-        List<MetaEntity> metas = selectByIdsForTab(ids);
-        if (null != metas && metas.size() > 0) {
+        List<MetaEntity> tabMetas = selectByIdsForTab(ids);
+        if (null != tabMetas && tabMetas.size() > 0) {
             sql = getDelTabsSql(metas);
         }
 
-        return deletes(sql, ids);
+        int rows = deletes(sql, ids);
+        deleteMetaFiles(metas);
+
+        return rows;
     }
 
     /**
@@ -274,6 +283,75 @@
     }
 
     /**
+     * 鍒犻櫎鍏冩暟鎹枃浠�
+     */
+    private void deleteMetaFiles(List<MetaEntity> metas) {
+        String uploadPath = pathHelper.getConfig().getUploadPath();
+        for (MetaEntity meta : metas) {
+            if (StringHelper.isEmpty(meta.getPath())) {
+                continue;
+            }
+            Integer rows = selectCountByPath(meta.getPath());
+            if (rows > 0) {
+                continue;
+            }
+
+            try {
+                String file = uploadPath + File.separator + meta.getPath();
+                switch ("." + meta.getType()) {
+                    case StaticData.MPT:
+                        deleteFiles(file, meta.getType(), StaticData.MPT_EXT);
+                        break;
+                    case StaticData.JPG:
+                        deleteFiles(file, meta.getType(), StaticData.JPG_EXT);
+                        break;
+                    case StaticData.IMG:
+                        deleteFiles(file, meta.getType(), StaticData.IMG_EXT);
+                        break;
+                    case StaticData.TIF:
+                        deleteFiles(file, meta.getType(), StaticData.TIF_EXT);
+                        break;
+                    case StaticData.TIFF:
+                        deleteFiles(file, meta.getType(), StaticData.TIFF_EXT);
+                        break;
+                    case StaticData.SHP:
+                        deleteFiles(file, meta.getType(), StaticData.SHP_EXT);
+                        break;
+                    case StaticData.GDB:
+                    case StaticData.OSGB:
+                        FileHelper.deleteDir(file);
+                        break;
+                    default:
+                        deleteFiles(file, meta.getType(), null);
+                        break;
+                }
+            } catch (Exception ex) {
+                log.error(ex.getMessage(), ex);
+            }
+        }
+    }
+
+    /**
+     * 鍒犻櫎澶氫釜鏂囦欢
+     */
+    private void deleteFiles(String file, String type, List<String> extList) {
+        File f = new File(file);
+        if (f.exists() && !f.isDirectory()) {
+            f.delete();
+        }
+        if (null == extList || extList.isEmpty()) {
+            return;
+        }
+
+        for (String ext : extList) {
+            f = new File(file.replace("." + type, ext));
+            if (f.exists() && !f.isDirectory()) {
+                f.delete();
+            }
+        }
+    }
+
+    /**
      * 鏌ョ湅鏂囦欢
      */
     public void downloadForView(String guid, boolean inline, HttpServletResponse res) {
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 7f3bda5..3ddebc2 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -46,11 +46,11 @@
     name: prod
     # JDBC 鍩烘湰閰嶇疆 &currentSchema=public
     #url: jdbc:postgresql://103.85.165.99:5433/langfang?useAffectedRows=true
-    url: jdbc:postgresql://192.168.20.205:5433/langfang?useAffectedRows=true
-    #url: jdbc:postgresql://127.0.0.1:5433/langfang?useAffectedRows=true
+    #url: jdbc:postgresql://192.168.20.205:5433/langfang?useAffectedRows=true
+    url: jdbc:postgresql://127.0.0.1:5433/langfang?useAffectedRows=true
     username: postgres
-    password: Postgres!_14_Lf
-    #password: postgres
+    #password: Postgres!_14_Lf
+    password: postgres
     driver-class-name: org.postgresql.Driver
     platform: POSTGRESQL
     type: com.alibaba.druid.pool.DruidDataSource
diff --git a/src/main/resources/mapper/data/MetaMapper.xml b/src/main/resources/mapper/data/MetaMapper.xml
index 1311d29..00223b3 100644
--- a/src/main/resources/mapper/data/MetaMapper.xml
+++ b/src/main/resources/mapper/data/MetaMapper.xml
@@ -205,6 +205,12 @@
          order by depcode;
     </select>
 
+    <select id="selectCountByPath" resultType="java.lang.Integer">
+        with a as (select count(*) from lf.sys_meta where path = #{path}),
+             b as (select count(*) from lf.sys_attach where path = #{path})
+        select a.count + b.count "count" from a, b;
+    </select>
+
     <insert id="insert" parameterType="com.lf.server.entity.data.MetaEntity">
         <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
             select currval('lf.sys_meta_id_seq'::regclass) as id

--
Gitblit v1.9.3