ソースを参照

新增模式4答题卡管理

wangliang 3 ヶ月 前
コミット
4d8f11b475

+ 78 - 23
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardModelFourServiceImpl.java

@@ -15,6 +15,7 @@ import com.qmth.distributed.print.business.enums.ExamCardStatusEnum;
 import com.qmth.distributed.print.business.mapper.ExamCardModelFourMapper;
 import com.qmth.distributed.print.business.service.BasicCardRuleService;
 import com.qmth.distributed.print.business.service.ExamCardModelFourService;
+import com.qmth.distributed.print.business.service.ExamCardService;
 import com.qmth.distributed.print.business.util.CreatePdfUtil;
 import com.qmth.distributed.print.business.util.HtmlToJpgUtil;
 import com.qmth.distributed.print.business.util.PdfUtil;
@@ -27,10 +28,7 @@ import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.PageSizeEnum;
 import com.qmth.teachcloud.common.service.*;
-import com.qmth.teachcloud.common.util.Base64Util;
-import com.qmth.teachcloud.common.util.FileUtil;
-import com.qmth.teachcloud.common.util.HtmlToPdfUtil;
-import com.qmth.teachcloud.common.util.ServletUtil;
+import com.qmth.teachcloud.common.util.*;
 import com.qmth.teachcloud.mark.enums.LockType;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.collections4.CollectionUtils;
@@ -273,6 +271,9 @@ public class ExamCardModelFourServiceImpl extends ServiceImpl<ExamCardModelFourM
         }
     }
 
+    @Resource
+    ExamCardService examCardService;
+
     /**
      * 导出题卡文件
      *
@@ -280,13 +281,72 @@ public class ExamCardModelFourServiceImpl extends ServiceImpl<ExamCardModelFourM
      */
     @Override
     public void downloadCard(Long id) {
+        Map<String, Object> map = this.createZipFile(id, true);
         String rootPath = null;
+        try {
+            if (!org.springframework.util.CollectionUtils.isEmpty(map)) {
+                rootPath = (String) map.get("rootPath");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (Objects.nonNull(rootPath)) {
+                FileUtil.deleteDirectory(rootPath);
+            }
+        }
+    }
+
+    /**
+     * 批量导出题卡文件
+     *
+     * @param ids
+     */
+    @Override
+    public void batchDownloadCard(List<Long> ids) {
+        List<String> rootPathList = new ArrayList<>(ids.size());
+        List<File> zipFileList = new ArrayList<>(ids.size());
+        try {
+            for (Long l : ids) {
+                Map<String, Object> map = this.createZipFile(l, false);
+                if (!org.springframework.util.CollectionUtils.isEmpty(map)) {
+                    rootPathList.add((String) map.get("rootPath"));
+                    zipFileList.add(new File((String) map.get("zipFilePath")));
+                }
+            }
+            if (CollectionUtils.isNotEmpty(zipFileList)) {
+                String zipFileRootPath = FileUtil.getFileTempDirPath(true);
+                String zipFileName = zipFileRootPath + File.separator + "批量下载" + SystemConstant.ZIP_PREFIX;
+                Zip4jUtil.zipFile(zipFileName, zipFileList);
+                File zipFile = new File(zipFileName);
+                rootPathList.add(zipFileRootPath);
+                FileUtil.outputFile(ServletUtil.getResponse(), zipFile, zipFile.getName());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (CollectionUtils.isNotEmpty(rootPathList)) {
+                for (String s : rootPathList) {
+                    FileUtil.deleteDirectory(s);
+                }
+            }
+        }
+    }
+
+    /**
+     * 创建zip
+     *
+     * @param id
+     * @param output
+     * @return
+     */
+    protected Map<String, Object> createZipFile(Long id, boolean output) {
+        Map<String, Object> map = new HashMap<>();
         try {
             ExamCardModelFour examCardModelFour = this.getById(id);
             // 去掉题卡名称中的空格,否则创建目录报错
             String title = StringUtils.deleteWhitespace(examCardModelFour.getTitle());
             // 本地保存目录
-            rootPath = FileUtil.getFileTempDirPath(true);
+            String rootPath = FileUtil.getFileTempDirPath(true);
             // 下载文件保存路径(以题卡名称命名)
             String downloadFilePath = rootPath + File.separator + title;
             File downloadPathFile = new File(downloadFilePath);
@@ -320,7 +380,11 @@ public class ExamCardModelFourServiceImpl extends ServiceImpl<ExamCardModelFourM
                         BasicAttachment attachment = basicAttachmentService.getById(jpgAttachmentId);
                         if (attachment != null) {
                             String fileName = downloadFilePath + File.separator + title + SystemConstant.HYPHEN + index + attachment.getType();
-                            fileUploadService.downloadFile(attachment.getPath(), fileName);
+                            try {
+                                fileUploadService.downloadFile(attachment.getPath(), fileName);
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                            }
                         }
                     }
                 }
@@ -335,25 +399,16 @@ public class ExamCardModelFourServiceImpl extends ServiceImpl<ExamCardModelFourM
 
             String zipFileName = title + SystemConstant.ZIP_PREFIX;
             SysUser sysUser = sysUserService.getById(ServletUtil.getRequestUserId());
-            FileUtil.downloadEncryptZip(ServletUtil.getResponse(), downloadPathFile, zipFileName, new String(Base64Util.decode(sysUser.getPassword())));
+            if (output) {
+                FileUtil.downloadEncryptZip(ServletUtil.getResponse(), downloadPathFile, zipFileName, new String(Base64Util.decode(sysUser.getPassword())));
+            } else {
+                FileUtil.downloadEncryptZip(downloadPathFile, zipFileName, new String(Base64Util.decode(sysUser.getPassword())));
+            }
+            map.put("rootPath", rootPath);
+            map.put("zipFilePath", rootPath + File.separator + zipFileName);
         } catch (Exception e) {
             e.printStackTrace();
-        } finally {
-            if (Objects.nonNull(rootPath)) {
-                FileUtil.deleteDirectory(rootPath);
-            }
-        }
-    }
-
-    /**
-     * 批量导出题卡文件
-     *
-     * @param ids
-     */
-    @Override
-    public void batchDownloadCard(List<Long> ids) {
-        for (Long l : ids) {
-
         }
+        return map;
     }
 }

+ 22 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/FileUtil.java

@@ -641,7 +641,29 @@ public class FileUtil {
     }
 
     /**
+     * 下载加密zip文件
      *
+     * @param downloadPathFile 压缩文件所在文件夹路径
+     * @param zipFileName      压缩zip文件路径+文件名
+     */
+    public static void downloadEncryptZip(File downloadPathFile, String zipFileName, String password) {
+        if (StringUtils.isBlank(password)) {
+            password = SystemConstant.ZIP_ENCRYPT_PWD;
+        }
+        // 压缩zip文件和图片保存文件夹放在同一级
+        File zipFile = new File(downloadPathFile.getParent(), zipFileName);
+        try {
+            // 压缩zip文件路径+文件名
+            String zipFilePath = zipFile.getPath();
+            // 待压缩文件所在文件夹
+            String zipFilesPath = downloadPathFile.getPath();
+            Zip4jUtil.zipEncryptFile(zipFilePath, zipFilesPath, password);
+        } catch (Exception e) {
+            throw ExceptionResultEnum.ERROR.exception("下载失败");
+        }
+    }
+
+    /**
      * @param zipLocalRootPath
      * @param zipDirName
      * @param password