Răsfoiți Sursa

成绩归档下载和预览修复

wangliang 2 ani în urmă
părinte
comite
765fc3d27c

+ 51 - 28
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TSyncExamStudentScoreServiceImpl.java

@@ -22,6 +22,7 @@ import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
@@ -63,13 +64,13 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
      */
     @Override
     public IPage<TSyncExamStudentScoreResult> list(IPage<Map> iPage, Long semesterId, Long examId, Long clazzId, String courseCode) {
-        if(semesterId == null){
+        if (semesterId == null) {
             throw ExceptionResultEnum.ERROR.exception("请选择学期");
         }
-        if(examId == null){
+        if (examId == null) {
             throw ExceptionResultEnum.ERROR.exception("请选择考试");
         }
-        if(StringUtils.isBlank(courseCode)){
+        if (StringUtils.isBlank(courseCode)) {
             throw ExceptionResultEnum.ERROR.exception("请选择课程");
         }
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
@@ -171,7 +172,7 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
                         sheetObject.put(SystemConstant.PATH, dirJpgName.toString());
                         String jpgFileMd5 = DigestUtils.md5Hex(new FileInputStream(fileSource));
                         if (oss || (!oss && dictionaryConfig.fssPrivateDomain().getConfig().startsWith(SystemConstant.START_PARENT))) {
-                            fileStoreUtil.ossUpload(dirJpgName.toString(), fileSource, DigestUtils.md5Hex(new FileInputStream(fileSource)), UploadFileEnum.FILE.getFssType());
+                            fileStoreUtil.ossUpload(dirJpgName.toString(), fileSource, jpgFileMd5, UploadFileEnum.FILE.getFssType());
                             sheetObject.put(SystemConstant.TYPE, oss ? SystemConstant.OSS : SystemConstant.LOCAL);
                         } else {
                             fileStoreUtil.localUpload(dirJpgName.toString(), new FileInputStream(fileSource), jpgFileMd5, LocalCatalogEnum.LOCAL_FILE);
@@ -196,11 +197,18 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
                         String jpgTargetFileMd5 = DigestUtils.md5Hex(new FileInputStream(fileTarget));
                         jsonImageTrajectoryPathArray.add(dirTargetName);
                         if (oss || (!oss && dictionaryConfig.fssPrivateDomain().getConfig().startsWith(SystemConstant.START_PARENT))) {
-                            fileStoreUtil.ossUpload(dirTargetName, fileTarget, DigestUtils.md5Hex(new FileInputStream(fileTarget)), UploadFileEnum.FILE.getFssType());
+                            fileStoreUtil.ossUpload(dirTargetName, fileTarget, jpgTargetFileMd5, UploadFileEnum.FILE.getFssType());
+                            trailUrlsList.add(fileStoreUtil.getPrivateUrl(dirTargetName, UploadFileEnum.FILE.getFssType()));
                         } else {
                             fileStoreUtil.localUpload(dirTargetName, new FileInputStream(fileTarget), jpgTargetFileMd5, LocalCatalogEnum.LOCAL_FILE);
+                            String finalUrl = null;
+                            if (dirTargetName.contains(dictionaryConfig.fssPrivateDomain().getServer())) {
+                                finalUrl = dirTargetName.substring(dirTargetName.indexOf(dictionaryConfig.fssPrivateDomain().getServer()), dirTargetName.length());
+                            } else if (dirTargetName.contains(dictionaryConfig.fssPublicDomain().getServer())) {
+                                finalUrl = dirTargetName.substring(dirTargetName.indexOf(dictionaryConfig.fssPublicDomain().getServer()), dirTargetName.length());
+                            }
+                            trailUrlsList.add(finalUrl);
                         }
-                        trailUrlsList.add(dirTargetName);
                     }
                     if (!jsonImageSourcePathArray.isEmpty()) {
                         tSyncExamStudentScore.setLocalSheetUrls(jsonImageSourcePathArray.toJSONString());
@@ -219,7 +227,9 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
                     for (int i = 0; i < jsonArray.size(); i++) {
                         String url = (String) jsonArray.get(i);
                         if (imageTrajectoryEnum == ImageTrajectoryEnum.DOWNLOAD) {
-                            fileTargetList.add(fileStoreUtil.ossDownload(url, stringJoiner.toString() + url, UploadFileEnum.FILE.getFssType()));
+                            String sheetName = url.substring(url.lastIndexOf(SystemConstant.ORG_SPLIT) + 1);
+                            File fileSource = SystemConstant.getFileTempDirVar(stringJoiner.toString() + sheetName, null);
+                            fileTargetList.add(fileStoreUtil.ossDownload(url, fileSource, UploadFileEnum.FILE.getFssType()));
                         } else {
                             trailUrlsList.add(fileStoreUtil.getPrivateUrl(url, UploadFileEnum.convertToFssType((String) jsonObject.get(SystemConstant.UPLOAD_TYPE))));
                         }
@@ -230,27 +240,41 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
                         if (imageTrajectoryEnum == ImageTrajectoryEnum.DOWNLOAD) {
                             fileTargetList.add(new File(url));
                         } else {
-                            trailUrlsList.add(fileStoreUtil.getPrivateUrl(url, UploadFileEnum.FILE.getFssType()));
+                            String finalUrl = null;
+                            if (url.contains(dictionaryConfig.fssPrivateDomain().getServer())) {
+                                finalUrl = url.substring(url.indexOf(dictionaryConfig.fssPrivateDomain().getServer()), url.length());
+                            } else if (url.contains(dictionaryConfig.fssPublicDomain().getServer())) {
+                                finalUrl = url.substring(url.indexOf(dictionaryConfig.fssPublicDomain().getServer()), url.length());
+                            }
+                            trailUrlsList.add(finalUrl);
                         }
                     }
                 }
             }
             tSyncExamStudentScore.setTrailUrls(trailUrlsList);
-            if (!fileTargetList.isEmpty()) {
+            if (!CollectionUtils.isEmpty(fileTargetList)) {
                 tSyncExamStudentScore.setTrajectoryFileList(fileTargetList);
             }
         } catch (Exception e) {
             log.error(SystemConstant.LOG_ERROR, e);
             tSyncExamStudentScore.setErrorInfo();
-            if (Objects.nonNull(fileTargetList)) {
-                for (File f : fileTargetList) {
-                    f.delete();
-                }
-            }
         } finally {
-            if (oss && Objects.nonNull(fileSourceList)) {
-                for (File f : fileSourceList) {
-                    f.delete();
+            if (oss && imageTrajectoryEnum == ImageTrajectoryEnum.PREVIEW) {
+                if (!CollectionUtils.isEmpty(fileSourceList)) {
+                    for (File f : fileSourceList) {
+                        f.delete();
+                    }
+                }
+                if (!CollectionUtils.isEmpty(fileTargetList)) {
+                    for (File f : fileTargetList) {
+                        f.delete();
+                    }
+                }
+            } else {
+                if (oss && !CollectionUtils.isEmpty(fileSourceList)) {
+                    for (File f : fileSourceList) {
+                        f.delete();
+                    }
                 }
             }
         }
@@ -267,24 +291,18 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
     public void createZipFile(TSyncExamStudentScore tSyncExamStudentScore) throws IOException {
         File zipFile = null;
         OutputStream outputStream = null;
+        List<File> fileList = null;
+        boolean oss = dictionaryConfig.sysDomain().isOss();
         try {
             if (Objects.nonNull(tSyncExamStudentScore.getTrajectoryFileList())) {
-                StringJoiner dirZipName = SystemConstant.getDirName(UploadFileEnum.FILE, true);
-                dirZipName.add(SystemConstant.getNanoId()).add(SystemConstant.ZIP_PREFIX);
-                zipFile = SystemConstant.getFileTempDirVar(dirZipName.toString(), null);
+                zipFile = SystemConstant.getFileTempDirVar(SystemConstant.ZIP_PREFIX);
 
-                List<File> fileList = tSyncExamStudentScore.getTrajectoryFileList();
+                fileList = tSyncExamStudentScore.getTrajectoryFileList();
                 if (fileList.isEmpty()) {
                     throw ExceptionResultEnum.ERROR.exception("没有可下载文件");
                 }
 
-                FileUtil.doZip(zipFile, fileList);
-
-                if (Objects.nonNull(dictionaryConfig.sysDomain()) && dictionaryConfig.sysDomain().isOss()) {
-                    for (File file : fileList) {
-                        file.delete();
-                    }
-                }
+                Zip4jUtil.zipEncryptFile(zipFile.getPath(), fileList, SystemConstant.ZIP_ENCRYPT_PWD);
 
                 HttpServletResponse response = ServletUtil.getResponse();
                 response.reset();
@@ -305,6 +323,11 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
             if (Objects.nonNull(zipFile)) {
                 zipFile.delete();
             }
+            if (oss && !CollectionUtils.isEmpty(fileList)) {
+                for (File file : fileList) {
+                    file.delete();
+                }
+            }
         }
     }
 }

+ 6 - 10
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -44,7 +44,6 @@ import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -59,7 +58,6 @@ import javax.annotation.Resource;
 import java.io.*;
 import java.lang.reflect.Field;
 import java.nio.charset.StandardCharsets;
-import java.security.NoSuchAlgorithmException;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Function;
@@ -1662,6 +1660,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         File zipFile = null;
         List<File> sourceFiles = null;
         List<TSyncExamStudentScore> errorTSyncExamStudentScoreList = null;
+        boolean oss = dictionaryConfig.sysDomain().isOss();
         try {
             SysUser sysUser = (SysUser) map.get(SystemConstant.USER);
             Long semesterId = null, examId = null, clazzId = null;
@@ -1676,7 +1675,6 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 List<TSyncExamStudentScore> tSyncExamStudentScoreList = new Gson().fromJson(JacksonUtil.parseJson(tSyncExamStudentScoreResultList), new TypeToken<List<TSyncExamStudentScore>>() {
                 }.getType());
                 Long time = System.currentTimeMillis();
-                boolean oss = dictionaryConfig.sysDomain().isOss();
                 StringJoiner stringJoiner = new StringJoiner("");
                 if (!oss && Objects.nonNull(dictionaryConfig.fssPublicDomain()) && !StringUtils.isBlank(dictionaryConfig.fssPublicDomain().getConfig()) && !dictionaryConfig.fssPublicDomain().getConfig().startsWith(SystemConstant.START_PARENT)) {
                     stringJoiner.add(dictionaryConfig.fssPublicDomain().getConfig()).add(File.separator);
@@ -1695,13 +1693,6 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                         boolean update = Objects.isNull(t.getTrajectoryUrls()) ? true : false;
                         t = tSyncExamStudentScoreService.createImageTrajectory(t, ImageTrajectoryEnum.DOWNLOAD, false, sysUser.getId());
                         if (Objects.nonNull(t.getTrajectoryFileList())) {
-                            List<File> fileList = t.getTrajectoryFileList();
-//                            fileList.removeAll(t.getTrajectoryFileList());
-                            if (Objects.nonNull(dictionaryConfig.sysDomain()) && dictionaryConfig.sysDomain().isOss()) {
-                                for (File file : fileList) {
-                                    file.delete();
-                                }
-                            }
                             sourceFiles.addAll(t.getTrajectoryFileList());
                         } else {
                             errorTSyncExamStudentScoreList.add(t);
@@ -1745,6 +1736,11 @@ public class TaskLogicServiceImpl implements TaskLogicService {
             if (Objects.nonNull(zipFile)) {
                 zipFile.delete();
             }
+            if (oss && !CollectionUtils.isEmpty(sourceFiles)) {
+                for (File f : sourceFiles) {
+                    f.delete();
+                }
+            }
         }
         return map;
     }

+ 8 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -838,6 +838,14 @@ public class SystemConstant {
             fileNameNew = fileName;
         }
         File file = new File(System.getProperty(SystemConstant.TMP_DIR), fileNameNew);
+        if (!file.exists()) {
+            file.getParentFile().mkdirs();
+            try {
+                file.createNewFile();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
         log.info("getFileTempDirVar_absolutePath:{}", file.getAbsolutePath());
         return file;
     }