From 861f963ab4750c3efcc19d0d3abd60761ec399b7 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期日, 26 三月 2023 21:06:19 +0800
Subject: [PATCH] 1

---
 src/main/resources/mapper/data/DirMapper.xml                   |   20 +++++-----
 src/main/java/com/lf/server/controller/data/DirController.java |   26 +++++++++++++
 src/main/java/com/lf/server/helper/Zip4jHelper.java            |    4 +-
 data/db_cx.sql                                                 |    2 +
 src/main/java/com/lf/server/service/data/DirService.java       |   42 +++++++++++++++++++++
 5 files changed, 82 insertions(+), 12 deletions(-)

diff --git a/data/db_cx.sql b/data/db_cx.sql
index 371299b..c89211c 100644
--- a/data/db_cx.sql
+++ b/data/db_cx.sql
@@ -15,6 +15,8 @@
 select * from lf.sys_attach where tab != 'bd.b_borehole' order by id desc limit 50; -- 358042
 select * from lf.sys_meta where tab is not null order by id desc
 
+select * from bs.m_pipeline where parentid in ('fdac47da-8879-478d-b67c-9624e8b79d6c')
+select * from lf.sys_attach where tab='bs.m_pipeline' and tab_guid in (select eventid from bs.m_pipeline where parentid in ('fdac47da-8879-478d-b67c-9624e8b79d6c'))
 
 
 
diff --git a/src/main/java/com/lf/server/controller/data/DirController.java b/src/main/java/com/lf/server/controller/data/DirController.java
index e755baf..45f0410 100644
--- a/src/main/java/com/lf/server/controller/data/DirController.java
+++ b/src/main/java/com/lf/server/controller/data/DirController.java
@@ -5,6 +5,7 @@
 import com.lf.server.entity.all.ResponseMsg;
 import com.lf.server.entity.data.DirEntity;
 import com.lf.server.entity.sys.UserEntity;
+import com.lf.server.helper.WebHelper;
 import com.lf.server.service.data.DirService;
 import com.lf.server.service.sys.TokenService;
 import io.swagger.annotations.Api;
@@ -15,6 +16,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 /**
@@ -183,4 +185,28 @@
             return fail(ex, null);
         }
     }
+
+    @SysLog()
+    @ApiOperation(value = "涓嬭浇鐩綍缁撴瀯")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "鐩綍ID", dataType = "Integer", paramType = "query", example = "1")
+    })
+    @GetMapping(value = "/downloadDir")
+    public void downloadDir(int id, HttpServletResponse res) {
+        try {
+            DirEntity entity = dirService.selectDir(id);
+            if (null == entity || entity.getPid() > 0) {
+                return;
+            }
+
+            String zipFile = dirService.createDirs(id);
+            if (null == zipFile) {
+                return;
+            }
+
+            WebHelper.download(zipFile, entity.getName() + ".zip", res);
+        } catch (Exception ex) {
+            log.error(ex.getMessage(), ex);
+        }
+    }
 }
diff --git a/src/main/java/com/lf/server/helper/Zip4jHelper.java b/src/main/java/com/lf/server/helper/Zip4jHelper.java
index f9ed14b..aebf380 100644
--- a/src/main/java/com/lf/server/helper/Zip4jHelper.java
+++ b/src/main/java/com/lf/server/helper/Zip4jHelper.java
@@ -84,7 +84,7 @@
     /**
      * 鑾峰彇ZipParameters
      */
-    public static ZipParameters getZipParams(boolean flag) {
+    public static ZipParameters getZipParams(boolean hasPwd) {
         // 璁剧疆鍘嬬缉鏂囦欢鍙傛暟
         ZipParameters params = new ZipParameters();
         // 鍘嬬缉鏂瑰紡
@@ -92,7 +92,7 @@
         // 鍘嬬缉绾у埆
         params.setCompressionLevel(CompressionLevel.MAXIMUM);
 
-        if (flag) {
+        if (hasPwd) {
             // 鏄惁璁剧疆鍔犲瘑鏂囦欢
             params.setEncryptFiles(true);
             // 璁剧疆AES鍔犲瘑寮哄害锛欿EY_STRENGTH_256
diff --git a/src/main/java/com/lf/server/service/data/DirService.java b/src/main/java/com/lf/server/service/data/DirService.java
index 2ff7021..f435d3f 100644
--- a/src/main/java/com/lf/server/service/data/DirService.java
+++ b/src/main/java/com/lf/server/service/data/DirService.java
@@ -1,11 +1,17 @@
 package com.lf.server.service.data;
 
 import com.lf.server.entity.data.DirEntity;
+import com.lf.server.helper.PathHelper;
 import com.lf.server.helper.StringHelper;
+import com.lf.server.helper.Zip4jHelper;
 import com.lf.server.mapper.data.DirMapper;
+import net.lingala.zip4j.ZipFile;
+import net.lingala.zip4j.model.ZipParameters;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.io.File;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -16,6 +22,9 @@
 
 @Service
 public class DirService implements DirMapper {
+    @Autowired
+    PathHelper pathHelper;
+
     @Autowired
     DirMapper dirMapper;
 
@@ -85,4 +94,37 @@
     public List<DirEntity> selectDirsForPrj() {
         return dirMapper.selectDirsForPrj();
     }
+
+    /**
+     * 鍒涘缓鏁版嵁鐩綍
+     */
+    public String createDirs(int id) throws Exception {
+        List<DirEntity> list = selectRecursiveById(id);
+        if (null == list || list.isEmpty()) {
+            return null;
+        }
+
+        String tempPath = pathHelper.getTempPath();
+        for (DirEntity dir : list) {
+            String path = tempPath + File.separator + dir.getFullName();
+            File f = new File(path);
+            if (f.exists() && f.isDirectory()) {
+                continue;
+            }
+
+            f.mkdirs();
+        }
+
+        File file = new File(tempPath + File.separator + list.get(0).getName());
+        if (!file.exists() || !file.isDirectory()) {
+            file.mkdirs();
+        }
+
+        String zipFile = tempPath + File.separator + list.get(0).getName() + ".zip";
+        ZipFile zip = Zip4jHelper.createZipFile(zipFile, null);
+        ZipParameters params = Zip4jHelper.getZipParams(false);
+        zip.addFolder(file, params);
+
+        return zipFile;
+    }
 }
diff --git a/src/main/resources/mapper/data/DirMapper.xml b/src/main/resources/mapper/data/DirMapper.xml
index 2a09256..05bcaae 100644
--- a/src/main/resources/mapper/data/DirMapper.xml
+++ b/src/main/resources/mapper/data/DirMapper.xml
@@ -30,20 +30,20 @@
 
     <select id="selectDirRecursive" resultType="com.lf.server.entity.data.DirEntity">
         with recursive rs as(
-        select a.*, fn_get_fullname(a.code, 2) fullName from lf.sys_dir a where name = #{name}
-        union
-            select b.*, fn_get_fullname(b.code, 2) fullName from lf.sys_dir b, rs c where b.pid = c.id
-        )
-        select * from rs order by order_num;
+            select a.*, fn_get_fullname(a.code, 2) fullName from lf.sys_dir a where name = #{name}
+            union
+            select b.*, fn_get_fullname(b.code, 2) fullName from lf.sys_dir b, rs c where b.pid = c.id)
+        select * from rs
+        order by order_num;
     </select>
 
     <select id="selectRecursiveById" resultType="com.lf.server.entity.data.DirEntity">
         with recursive rs as(
-        select a.*, fn_get_fullname(a.code, 2) fullName from lf.sys_dir a where id = #{id}
-        union
-            select b.*, fn_get_fullname(b.code, 2) fullName from lf.sys_dir b, rs c where b.pid = c.id
-        )
-        select * from rs order by order_num;
+            select a.*, fn_get_fullname(a.code, 2) fullName from lf.sys_dir a where id = #{id}
+            union
+            select b.*, fn_get_fullname(b.code, 2) fullName from lf.sys_dir b, rs c where b.pid = c.id)
+        select * from rs
+        order by code;
     </select>
 
     <select id="selectDirsForPrj" resultType="com.lf.server.entity.data.DirEntity">

--
Gitblit v1.9.3