xiaofei 1 rok temu
rodzic
commit
ff53d33ad1
21 zmienionych plików z 352 dodań i 169 usunięć
  1. 0 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/PrintCommonService.java
  2. 20 13
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicTemplateServiceImpl.java
  3. 5 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java
  4. 6 50
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java
  5. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TSyncExamStudentScoreServiceImpl.java
  6. 7 7
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java
  7. 3 7
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java
  8. 7 7
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/HtmlToJpgUtil.java
  9. 5 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/PdfFillUtils.java
  10. 20 4
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/vo/FilePathVo.java
  11. 16 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/FileUploadService.java
  12. 0 8
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/TeachcloudCommonService.java
  13. 3 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicAttachmentServiceImpl.java
  14. 206 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/FileUploadServiceImpl.java
  15. 3 22
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java
  16. 5 3
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/FileStoreUtil.java
  17. 29 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/FileUtil.java
  18. 4 4
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkArbitrateHistoryServiceImpl.java
  19. 10 23
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/utils/FileStoreUtils.java
  20. 1 1
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/ReportCommonServiceImpl.java
  21. 1 1
      teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/BasicDatasourceController.java

+ 0 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/PrintCommonService.java

@@ -266,7 +266,5 @@ public interface PrintCommonService {
 
     void saveAttachmentPackagePdf(PdfPackageDto pdfPackageDto, ExamDetail examDetail, List<PdfDto> variablePdfList, Integer printCount, List<File> fileTempList);
 
-    JSONObject uploadPdfFile(File pdfFile, ClassifyEnum classifyEnum);
-
     String parseAttachmentPath(String attachmentPath, PrintPathVo printPathVo);
 }

+ 20 - 13
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicTemplateServiceImpl.java

@@ -13,10 +13,7 @@ import com.qmth.distributed.print.business.bean.result.TemplatePrintInfoResult;
 import com.qmth.distributed.print.business.entity.BasicExamRule;
 import com.qmth.distributed.print.business.entity.BasicTemplate;
 import com.qmth.distributed.print.business.mapper.BasicTemplateMapper;
-import com.qmth.distributed.print.business.service.BasicExamRuleService;
-import com.qmth.distributed.print.business.service.BasicPrintConfigService;
-import com.qmth.distributed.print.business.service.BasicTemplateService;
-import com.qmth.distributed.print.business.service.ExamPrintPlanService;
+import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.util.PdfFillUtils;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.contant.SystemConstant;
@@ -26,8 +23,10 @@ import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ClassifyEnum;
 import com.qmth.teachcloud.common.enums.EnumResult;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.UploadFileEnum;
 import com.qmth.teachcloud.common.service.BasicAttachmentService;
 import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
+import com.qmth.teachcloud.common.service.FileUploadService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.io.FileUtils;
@@ -75,6 +74,8 @@ public class BasicTemplateServiceImpl extends ServiceImpl<BasicTemplateMapper, B
 
     @Resource
     private ExamPrintPlanService examPrintPlanService;
+    @Resource
+    private FileUploadService fileUploadService;
 
     @Override
     public IPage<BasicTemplate> list(Boolean enable, String name, Long startTime, Long endTime, Integer pageNumber, Integer pageSize) {
@@ -249,21 +250,27 @@ public class BasicTemplateServiceImpl extends ServiceImpl<BasicTemplateMapper, B
             // 签到表
             if (ClassifyEnum.SIGN.equals(classifyEnum)) {
                 if (StringUtils.isBlank(basicTemplate.getPreviewPath())) {
-                    JSONObject json = PdfFillUtils.parseSignTempData(basicTemplate, destUrl);
-                    basicTemplate.setPreviewPath(JSON.toJSONString(json));
-                    basicTemplateMapper.updateById(basicTemplate);
+                    File uploadFile = PdfFillUtils.parseSignTempData(basicTemplate, destUrl);
+                    if (uploadFile != null) {
+                        String fileName = basicTemplate.getId() + SystemConstant.PDF_PREFIX;
+                        basicTemplate.setPreviewPath(JSON.toJSONString(fileUploadService.uploadFile(uploadFile, UploadFileEnum.PDF, fileName)));
+                        basicTemplateMapper.updateById(basicTemplate);
+                    }
                 }
-                return basicTemplate.getPreviewPath() == null ? null : teachcloudCommonService.filePreview(basicTemplate.getPreviewPath());
+                return basicTemplate.getPreviewPath() == null ? null : fileUploadService.filePreview(basicTemplate.getPreviewPath());
             } else if (ClassifyEnum.PACKAGE.equals(classifyEnum)) {
                 if (StringUtils.isBlank(basicTemplate.getPreviewPath())) {
-                    JSONObject json = PdfFillUtils.packageTempData(basicTemplate.getDisplayRange(), destUrl);
-                    basicTemplate.setPreviewPath(JSON.toJSONString(json));
-                    basicTemplateMapper.updateById(basicTemplate);
+                    File uploadFile = PdfFillUtils.packageTempData(basicTemplate.getDisplayRange(), destUrl);
+                    if (uploadFile != null) {
+                        String fileName = basicTemplate.getId() + SystemConstant.PDF_PREFIX;
+                        basicTemplate.setPreviewPath(JSON.toJSONString(fileUploadService.uploadFile(uploadFile, UploadFileEnum.PDF, fileName)));
+                        basicTemplateMapper.updateById(basicTemplate);
+                    }
                 }
-                return basicTemplate.getPreviewPath() == null ? null : teachcloudCommonService.filePreview(basicTemplate.getPreviewPath());
+                return basicTemplate.getPreviewPath() == null ? null : fileUploadService.filePreview(basicTemplate.getPreviewPath());
             } else if (ClassifyEnum.CHECK_IN.equals(classifyEnum)) {
                 BasicAttachment attachment = basicAttachmentService.getById(basicTemplate.getAttachmentId());
-                return attachment == null ? null : teachcloudCommonService.filePreview(attachment.getPath());
+                return attachment == null ? null : fileUploadService.filePreview(attachment.getPath());
             } else {
                 throw ExceptionResultEnum.ERROR.exception("不支持当前模板预览");
             }

+ 5 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java

@@ -137,7 +137,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
                 examCard.setContent(examCardParams.getContent());
                 examCard.setStageContent(null);
                 String htmlContent = examCardParams.getHtmlContent();
-                List<ConvertJpgStorage> convertJpgStorageList = htmlToJpgUtil.convertHtmlToJpgByCard(examCard.getTitle(), htmlContent, PageSizeEnum.A3);
+                List<ConvertJpgStorage> convertJpgStorageList = htmlToJpgUtil.convertHtmlToJpgByCard(examCard.getId(), htmlContent, PageSizeEnum.A3);
                 if (convertJpgStorageList.size() > 0) {
                     examCard.setJpgAttachment(JSON.toJSONString(convertJpgStorageList));
                 }
@@ -168,7 +168,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
                 examCard.setContent(examCardParams.getContent());
                 examCard.setStageContent(null);
                 String htmlContent = examCardParams.getHtmlContent();
-                List<ConvertJpgStorage> convertJpgStorageList = htmlToJpgUtil.convertHtmlToJpgByCard(examCard.getTitle(), htmlContent, PageSizeEnum.A3);
+                List<ConvertJpgStorage> convertJpgStorageList = htmlToJpgUtil.convertHtmlToJpgByCard(examCard.getId(), htmlContent, PageSizeEnum.A3);
                 if (convertJpgStorageList.size() > 0) {
                     examCard.setJpgAttachment(JSON.toJSONString(convertJpgStorageList));
                 }
@@ -352,7 +352,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
         }
         if (CardStatusEnum.SUBMIT.name().equals(params.getStatus())) {
             // 生成题卡图片
-            List<ConvertJpgStorage> convertJpgStorageList = htmlToJpgUtil.convertHtmlToJpgByCard(examCard.getTitle(), examCard.getHtmlContent(), PageSizeEnum.A3);
+            List<ConvertJpgStorage> convertJpgStorageList = htmlToJpgUtil.convertHtmlToJpgByCard(examCard.getId(), examCard.getHtmlContent(), PageSizeEnum.A3);
             if (convertJpgStorageList.size() > 0) {
                 examCard.setJpgAttachment(JSON.toJSONString(convertJpgStorageList));
             }
@@ -401,7 +401,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
         copyExamCard.setRemark(String.format("来源题卡:%s(%s)", id, examCard.getTitle()));
         copyExamCard.setUsed(false);
         // 生成图片
-        List<ConvertJpgStorage> convertJpgStorageList = htmlToJpgUtil.convertHtmlToJpgByCard(examCard.getTitle(), copyExamCard.getHtmlContent(), PageSizeEnum.A3);
+        List<ConvertJpgStorage> convertJpgStorageList = htmlToJpgUtil.convertHtmlToJpgByCard(examCard.getId(), copyExamCard.getHtmlContent(), PageSizeEnum.A3);
         if (!convertJpgStorageList.isEmpty()) {
             copyExamCard.setJpgAttachment(JSON.toJSONString(convertJpgStorageList));
         } else {
@@ -414,7 +414,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
     @Override
     public void convertImage(Long id) {
         ExamCard examCard = this.getById(id);
-        List<ConvertJpgStorage> convertJpgStorageList = htmlToJpgUtil.convertHtmlToJpgByCard(examCard.getTitle(), examCard.getHtmlContent(), PageSizeEnum.A3);
+        List<ConvertJpgStorage> convertJpgStorageList = htmlToJpgUtil.convertHtmlToJpgByCard(examCard.getId(), examCard.getHtmlContent(), PageSizeEnum.A3);
         if (convertJpgStorageList.size() > 0) {
             String jpgAttachmentIds = JSON.toJSONString(convertJpgStorageList);
             UpdateWrapper<ExamCard> updateWrapper = new UpdateWrapper<>();

+ 6 - 50
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java

@@ -22,9 +22,7 @@ import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.enums.StudentClazzEnum;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.util.CreatePrintPdfUtil;
-import com.qmth.teachcloud.common.util.HtmlToPdfUtil;
 import com.qmth.distributed.print.business.util.PdfUtil;
-import com.qmth.teachcloud.common.util.RedisCounterUtil;
 import com.qmth.teachcloud.common.bean.dto.MqDto;
 import com.qmth.teachcloud.common.bean.params.ArraysParams;
 import com.qmth.teachcloud.common.bean.result.BasicStudentResult;
@@ -268,7 +266,7 @@ public class PrintCommonServiceImpl implements PrintCommonService {
                 PdfUtil.addPdfEmptyPage(pdfFileTemp);
             }
 
-            String pdfDirName = pdfStringJoiner.toString().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+            String pdfDirName = FileUtil.replaceSplit(pdfStringJoiner.toString());
             //pdf生成和上传
             String pdfFileMd5 = DigestUtils.md5Hex(new FileInputStream(pdfFileTemp));
             if (oss || (!oss && dictionaryConfig.fssPrivateDomain().getConfig().startsWith(SystemConstant.START_PARENT))) {
@@ -359,8 +357,8 @@ public class PrintCommonServiceImpl implements PrintCommonService {
             pdfStringJoiner.add(SystemConstant.getNanoId()).add(SystemConstant.PDF_PREFIX);
 
             JSONObject jsonObject = new JSONObject();
-            String htmlDirName = stringJoiner.toString().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
-            String pdfDirName = pdfStringJoiner.toString().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+            String htmlDirName = FileUtil.replaceSplit(stringJoiner.toString());
+            String pdfDirName = FileUtil.replaceSplit(pdfStringJoiner.toString());
 
             //html生成和上传
             String htmlFileMd5 = DigestUtils.md5Hex(new FileInputStream(htmlFileTemp));
@@ -554,7 +552,7 @@ public class PrintCommonServiceImpl implements PrintCommonService {
             stringJoiner.add(SystemConstant.getNanoId()).add(format);
 
             JSONObject jsonObject = new JSONObject();
-            String dirName = stringJoiner.toString().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+            String dirName = FileUtil.replaceSplit(stringJoiner.toString());
             if (oss || (!oss && dictionaryConfig.fssPrivateDomain().getConfig().startsWith(SystemConstant.START_PARENT))) {//上传至oss
                 fileStoreUtil.ossUpload(dirName, file.getInputStream(), md5, type.getFssType());
                 jsonObject.put(SystemConstant.TYPE, oss ? SystemConstant.OSS : SystemConstant.LOCAL);
@@ -1142,7 +1140,7 @@ public class PrintCommonServiceImpl implements PrintCommonService {
             stringJoiner.add(SystemConstant.getNanoId()).add(".").add(SystemConstant.XLSX);
 
             jsonObject = new JSONObject();
-            String dirName = stringJoiner.toString().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+            String dirName = FileUtil.replaceSplit(stringJoiner.toString());
             if (oss || (!oss && dictionaryConfig.fssPrivateDomain().getConfig().startsWith(SystemConstant.START_PARENT))) {//上传至oss
                 fileStoreUtil.ossUpload(dirName, inputStream, DigestUtils.md5Hex(new ByteArrayInputStream(fos.toByteArray())), UploadFileEnum.FILE.getFssType());
                 jsonObject.put(SystemConstant.TYPE, oss ? SystemConstant.OSS : SystemConstant.LOCAL);
@@ -1234,7 +1232,7 @@ public class PrintCommonServiceImpl implements PrintCommonService {
             pdfStringJoiner = SystemConstant.getDirName(pdfStringJoiner, UploadFileEnum.PDF, true);
             pdfStringJoiner.add(SystemConstant.getNanoId()).add(SystemConstant.PDF_PREFIX);
 
-            String pdfDirName = pdfStringJoiner.toString().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+            String pdfDirName = FileUtil.replaceSplit(pdfStringJoiner.toString());
             File pdfFileTemp = SystemConstant.getFileTempVar(SystemConstant.PDF_PREFIX);
             fileTempList.add(pdfFileTemp);
             createPrintPdfUtil.createPackagePdf(pdfPackageDto, pdfFileTemp.getPath());
@@ -1264,46 +1262,4 @@ public class PrintCommonServiceImpl implements PrintCommonService {
             }
         }
     }
-
-    /**
-     * 上传pdf文件
-     *
-     * @param pdfFile
-     * @return
-     */
-    @Override
-    public JSONObject uploadPdfFile(File pdfFile, ClassifyEnum classifyEnum) {
-        try {
-            boolean oss = dictionaryConfig.sysDomain().isOss();
-            StringJoiner pdfStringJoiner = new StringJoiner("");
-            if (!oss && Objects.nonNull(dictionaryConfig.fssPrivateDomain()) && !StringUtils.isBlank(dictionaryConfig.fssPrivateDomain().getConfig()) && !dictionaryConfig.fssPrivateDomain().getConfig().startsWith(SystemConstant.START_PARENT)) {
-                pdfStringJoiner.add(dictionaryConfig.fssPrivateDomain().getConfig()).add(File.separator);
-            }
-            pdfStringJoiner = SystemConstant.getDirName(pdfStringJoiner, UploadFileEnum.PDF, true);
-            pdfStringJoiner.add(SystemConstant.getNanoId()).add(SystemConstant.PDF_PREFIX);
-
-            String pdfDirName = pdfStringJoiner.toString();
-            pdfDirName = SystemConstant.getPdfFilePath(pdfDirName, pdfFile);
-
-            JSONObject object = new JSONObject();
-            object.put("printType", classifyEnum);
-            object.put("pdfMd5", DigestUtils.md5Hex(new FileInputStream(pdfFile)));
-            object.put(SystemConstant.PATH, pdfDirName);
-            if (!oss) {
-                object.put(SystemConstant.TYPE, SystemConstant.LOCAL);
-            } else {
-                object.put(SystemConstant.TYPE, SystemConstant.OSS);
-            }
-            object.put(SystemConstant.UPLOAD_TYPE, UploadFileEnum.PDF);
-            return object;
-        } catch (Exception e) {
-            log.error(SystemConstant.LOG_ERROR, e);
-            if (e instanceof ApiException) {
-                ResultUtil.error((ApiException) e, e.getMessage());
-            } else {
-                ResultUtil.error(e.getMessage());
-            }
-        }
-        return null;
-    }
 }

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

@@ -215,7 +215,7 @@ public class TSyncExamStudentScoreServiceImpl extends ServiceImpl<TSyncExamStude
 
                         ImageTrajectoryUtil.createImage(fileSource, fileTarget, markTagJsonArray);
                         fileTargetList.add(fileTarget);
-                        String dirTargetName = dirTargetJpgName.toString().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+                        String dirTargetName = FileUtil.replaceSplit(dirTargetJpgName.toString());
                         String jpgTargetFileMd5 = DigestUtils.md5Hex(new FileInputStream(fileTarget));
                         jsonImageTrajectoryPathArray.add(dirTargetName);
                         if (oss || (!oss && dictionaryConfig.fssPrivateDomain().getConfig().startsWith(SystemConstant.START_PARENT))) {

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

@@ -628,14 +628,14 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         stringJoiner.add(SystemConstant.getNanoId()).add(".").add(SystemConstant.XLSX);
 
         JSONObject jsonObject = new JSONObject();
-        String dirName = stringJoiner.toString().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+        String dirName = FileUtil.replaceSplit(stringJoiner.toString());
         boolean oss = dictionaryConfig.sysDomain().isOss();
         if (oss || (!oss && dictionaryConfig.fssPrivateDomain().getConfig().startsWith(SystemConstant.START_PARENT))) {//上传至oss
             fileStoreUtil.ossUpload(dirName, in, DigestUtils.md5Hex(new ByteArrayInputStream(outputStream.toByteArray())), fileStoreUtil.getUploadEnumByPath(dirName).getFssType());
             jsonObject.put(SystemConstant.TYPE, oss ? SystemConstant.OSS : SystemConstant.LOCAL);
             jsonObject.put(SystemConstant.PATH, dirName);
         } else {
-            dirName = (dictionaryConfig.fssPublicDomain().getConfig() + File.separator + dirName).replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+            dirName = FileUtil.replaceSplit((dictionaryConfig.fssPublicDomain().getConfig() + File.separator + dirName));
             fileStoreUtil.copyInputStreamToFile(in, new File(stringJoiner.toString()), DigestUtils.md5Hex(new ByteArrayInputStream(outputStream.toByteArray())), LocalCatalogEnum.LOCAL_FILE);
             jsonObject.put(SystemConstant.TYPE, SystemConstant.LOCAL);
             jsonObject.put(SystemConstant.PATH, dirName);
@@ -998,7 +998,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 stringJoiner = SystemConstant.getDirName(stringJoiner, UploadFileEnum.FILE, true);
                 stringJoiner.add("印刷任务管理_批量下载PDF_" + time).add(SystemConstant.ZIP_PREFIX);
 
-                String zipDirName = stringJoiner.toString().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+                String zipDirName = FileUtil.replaceSplit(stringJoiner.toString());
                 zipFile = SystemConstant.getFileTempDirVar(SystemConstant.ZIP_PREFIX);
                 zipLocalRootPath = zipFile.getParent() + File.separator + time;
 
@@ -1160,7 +1160,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
             stringJoiner = SystemConstant.getDirName(stringJoiner, UploadFileEnum.FILE, true);
             stringJoiner.add("导出审核样本_" + time).add(SystemConstant.ZIP_PREFIX);
 
-            String zipDirName = stringJoiner.toString().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+            String zipDirName = FileUtil.replaceSplit(stringJoiner.toString());
             zipFile = SystemConstant.getFileTempDirVar(SystemConstant.ZIP_PREFIX);
             zipLocalRootPath = zipFile.getParent() + File.separator + time;
 
@@ -1303,7 +1303,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
             stringJoiner = SystemConstant.getDirName(stringJoiner, UploadFileEnum.FILE, true);
             stringJoiner.add("卷库查询管理试卷、空白题卡批量下载_" + time).add(SystemConstant.ZIP_PREFIX);
 
-            String zipDirName = stringJoiner.toString().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+            String zipDirName = FileUtil.replaceSplit(stringJoiner.toString());
             zipFile = SystemConstant.getFileTempDirVar(SystemConstant.ZIP_PREFIX);
             zipLocalRootPath = zipFile.getParent() + File.separator + time;
 
@@ -1758,7 +1758,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 stringJoiner = SystemConstant.getDirName(stringJoiner, UploadFileEnum.FILE, true);
                 stringJoiner.add("成绩轨迹下载_" + time).add(SystemConstant.ZIP_PREFIX);
 
-                String zipDirName = stringJoiner.toString().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+                String zipDirName = FileUtil.replaceSplit(stringJoiner.toString());
                 zipFile = SystemConstant.getFileTempDirVar(SystemConstant.ZIP_PREFIX);
 
                 sourceFiles = new LinkedList<>();
@@ -1869,7 +1869,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
             stringJoiner = SystemConstant.getDirName(stringJoiner, UploadFileEnum.FILE, true);
             stringJoiner.add("下载管理_批量下载_" + System.currentTimeMillis()).add(SystemConstant.ZIP_PREFIX);
 
-            String zipDirName = stringJoiner.toString().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+            String zipDirName = FileUtil.replaceSplit(stringJoiner.toString());
             zipFile = SystemConstant.getFileTempDirVarForZip(SystemConstant.getNanoId(), SystemConstant.ZIP_PREFIX);
             zipLocalRootPath = zipFile.getParent() + File.separator + System.currentTimeMillis();
 

+ 3 - 7
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java

@@ -23,10 +23,7 @@ import com.qmth.teachcloud.common.service.BasicAttachmentService;
 import com.qmth.teachcloud.common.service.BasicClazzService;
 import com.qmth.teachcloud.common.service.BasicSemesterService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
-import com.qmth.teachcloud.common.util.ConvertUtil;
-import com.qmth.teachcloud.common.util.ExamTaskUtil;
-import com.qmth.teachcloud.common.util.FileStoreUtil;
-import com.qmth.teachcloud.common.util.RedisUtil;
+import com.qmth.teachcloud.common.util.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -1223,7 +1220,7 @@ public class CreatePdfUtil {
         BasicAttachment basicAttachment = null;
         // 试卷+题卡
         if (StringUtils.isNotBlank(dirNamePaper)) {
-            dirNamePaper = dirNamePaper.replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+            dirNamePaper = FileUtil.replaceSplit(dirNamePaper);
             localPaperPdfFile = new File(dirNamePaper);
             basicAttachment = basicAttachmentService.saveAttachmentPdf(dirNamePaper, userId);
             if (StringUtils.isBlank(tbTask.getImportFileName())) {
@@ -1236,8 +1233,7 @@ public class CreatePdfUtil {
         }
         // 题卡
         if (StringUtils.isNotBlank(dirNameCardA3)) {
-            dirNameCardA3 = dirNameCardA3.replaceAll("\\\\", SystemConstant.ORG_SPLIT);
-            localA3PdfCardFile = new File(dirNameCardA3);
+            localA3PdfCardFile = new File(FileUtil.replaceSplit(dirNameCardA3));
             basicAttachment = basicAttachmentService.saveAttachmentPdf(dirNameCardA3, userId);
             if (StringUtils.isBlank(tbTask.getImportFileName())) {
                 tbTask.setImportFileName(basicAttachment.getName());

+ 7 - 7
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/HtmlToJpgUtil.java

@@ -53,11 +53,11 @@ public class HtmlToJpgUtil {
     /**
      * 转换html -> jpg : 生成本地临时文件
      *
-     * @param cardTitle    题卡名称
+     * @param id    题卡Id
      * @param htmlContent  html内容
      * @param pageSizeEnum 转化pdf的纸张类型
      */
-    public List<BasicAttachment> convertHtmlToJpg(String cardTitle, String htmlContent, PageSizeEnum pageSizeEnum) {
+    public List<BasicAttachment> convertHtmlToJpg(Long id, String htmlContent, PageSizeEnum pageSizeEnum) {
         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)) {
@@ -68,11 +68,11 @@ public class HtmlToJpgUtil {
         // 本地存储目录
         String rootPath = stringJoiner.toString();
         // html临时路径
-        String htmlPath = rootPath + File.separator + "html" + File.separator + cardTitle + SystemConstant.HTML_PREFIX;
+        String htmlPath = rootPath + File.separator + "html" + File.separator + id + SystemConstant.HTML_PREFIX;
         // pdf临时路径
-        String pdfPath = rootPath + File.separator + "pdf" + File.separator + cardTitle + SystemConstant.PDF_PREFIX;
+        String pdfPath = rootPath + File.separator + "pdf" + File.separator + id + SystemConstant.PDF_PREFIX;
         // jpg临时路径
-        String jpgPath = rootPath + File.separator + "jpg" + File.separator + cardTitle;
+        String jpgPath = rootPath + File.separator + "jpg" + File.separator + id;
         List<BasicAttachment> basicAttachmentList = new ArrayList<>();
         // html
         try {
@@ -109,13 +109,13 @@ public class HtmlToJpgUtil {
      * @param htmlContent  题卡内容
      * @param pageSizeEnum 转化pdf的纸张类型
      */
-    public List<ConvertJpgStorage> convertHtmlToJpgByCard(String cardTitle, String htmlContent, PageSizeEnum pageSizeEnum) {
+    public List<ConvertJpgStorage> convertHtmlToJpgByCard(Long id, String htmlContent, PageSizeEnum pageSizeEnum) {
         List<ConvertJpgStorage> convertJpgStorageList = new ArrayList<>();
         try {
             String regex = "\\$\\{\\w+}";
             htmlContent = htmlContent.replaceAll("<img src=\"data:image/png;base64,\\$\\{examNumber\\}\">", "");
             htmlContent = htmlContent.replaceAll(regex, "");
-            convertJpgStorageList = this.convertHtmlToJpg(cardTitle, htmlContent, pageSizeEnum).stream().flatMap(e -> {
+            convertJpgStorageList = this.convertHtmlToJpg(id, htmlContent, pageSizeEnum).stream().flatMap(e -> {
                 ConvertJpgStorage tmp = new ConvertJpgStorage();
                 String name = e.getName();
                 String index = name.substring(name.lastIndexOf(SystemConstant.HYPHEN) + 1);

+ 5 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/PdfFillUtils.java

@@ -67,7 +67,7 @@ public class PdfFillUtils {
      * @param basicTemplate 数据内容
      * @param fileName      文件名
      */
-    public static JSONObject parseSignTempData(BasicTemplate basicTemplate, String fileName) {
+    public static File parseSignTempData(BasicTemplate basicTemplate, String fileName) {
         PdfSignDto pdfFillDto = new PdfSignDto();
         pdfFillDto.setTitle("签到表样例");
         pdfFillDto.setPackageNumber("123456789");
@@ -191,9 +191,8 @@ public class PdfFillUtils {
         pdfFillDto.setStudentPlate(studentPlate);
         try {
             CreatePrintPdfUtil createPrintPdfUtil = new CreatePrintPdfUtil();
-            File file = createPrintPdfUtil.createSignPdf(pdfFillDto, fileName, basicTemplate);
-            PrintCommonService printCommonService = SpringContextHolder.getBean(PrintCommonService.class);
-            return printCommonService.uploadPdfFile(file, ClassifyEnum.SIGN);
+            return createPrintPdfUtil.createSignPdf(pdfFillDto, fileName, basicTemplate);
+
         } catch (
                 Exception e) {
             e.printStackTrace();
@@ -207,7 +206,7 @@ public class PdfFillUtils {
      *
      * @param data data
      */
-    public static JSONObject packageTempData(String data, String fileName) {
+    public static File packageTempData(String data, String fileName) {
         PdfPackageDto pdfPackageDto = new PdfPackageDto();
         pdfPackageDto.setTitle("卷袋贴样例");
         pdfPackageDto.setTag(true);
@@ -317,9 +316,7 @@ public class PdfFillUtils {
 
         try {
             CreatePrintPdfUtil createPrintPdfUtil = new CreatePrintPdfUtil();
-            File file = createPrintPdfUtil.createPackagePdf(pdfPackageDto, fileName);
-            PrintCommonService printCommonService = SpringContextHolder.getBean(PrintCommonService.class);
-            return printCommonService.uploadPdfFile(file, ClassifyEnum.PACKAGE);
+            return createPrintPdfUtil.createPackagePdf(pdfPackageDto, fileName);
         } catch (Exception e) {
             e.printStackTrace();
         }

+ 20 - 4
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/vo/FilePathVo.java

@@ -5,16 +5,24 @@ import com.qmth.teachcloud.common.enums.UploadFileEnum;
 public class FilePathVo {
 
     private String path;
-    private String uploadType;
+    private UploadFileEnum uploadType;
     private String type;
+    private String md5;
 
     public FilePathVo() {
     }
 
     public FilePathVo(String path, UploadFileEnum uploadType, String type) {
         this.path = path;
-        this.uploadType = uploadType.name();
+        this.uploadType = uploadType;
+        this.type = type;
+    }
+
+    public FilePathVo(String path, UploadFileEnum uploadType, String type, String md5) {
+        this.path = path;
+        this.uploadType = uploadType;
         this.type = type;
+        this.md5 = md5;
     }
 
     public String getPath() {
@@ -25,11 +33,11 @@ public class FilePathVo {
         this.path = path;
     }
 
-    public String getUploadType() {
+    public UploadFileEnum getUploadType() {
         return uploadType;
     }
 
-    public void setUploadType(String uploadType) {
+    public void setUploadType(UploadFileEnum uploadType) {
         this.uploadType = uploadType;
     }
 
@@ -40,4 +48,12 @@ public class FilePathVo {
     public void setType(String type) {
         this.type = type;
     }
+
+    public String getMd5() {
+        return md5;
+    }
+
+    public void setMd5(String md5) {
+        this.md5 = md5;
+    }
 }

+ 16 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/FileUploadService.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.common.service;
+
+import com.qmth.teachcloud.common.bean.vo.FilePathVo;
+import com.qmth.teachcloud.common.enums.UploadFileEnum;
+
+import java.io.File;
+
+public interface FileUploadService {
+
+    FilePathVo uploadFile(File pdfFile, UploadFileEnum uploadFileEnum, String fileName);
+
+    String filePreview(String path);
+
+    String filePreview(Long attachmentId);
+
+}

+ 0 - 8
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/TeachcloudCommonService.java

@@ -185,14 +185,6 @@ public interface TeachcloudCommonService {
      */
     public File copyFile(String rootPath, String fileName, BasicAttachment attachment) throws Exception;
 
-    /**
-     * 下载文件到本地并压缩返回
-     *
-     * @param filePath 文件根目录
-     * @param files    需要下载的文件集合
-     */
-    public void downloadFileAndZip(HttpServletResponse response, String filePath, List<File> files);
-
     /**
      * 下载文件到本地并压缩返回
      *

+ 3 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicAttachmentServiceImpl.java

@@ -15,6 +15,7 @@ import com.qmth.teachcloud.common.mapper.BasicAttachmentMapper;
 import com.qmth.teachcloud.common.service.BasicAttachmentService;
 import com.qmth.teachcloud.common.service.CommonCacheService;
 import com.qmth.teachcloud.common.util.FileStoreUtil;
+import com.qmth.teachcloud.common.util.FileUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.codec.digest.DigestUtils;
@@ -78,7 +79,7 @@ public class BasicAttachmentServiceImpl extends ServiceImpl<BasicAttachmentMappe
             String pdfName = SystemConstant.getNanoId() + SystemConstant.PDF_PREFIX;
             pdfStringJoiner.add(pdfName);
 
-            String pdfDirName = pdfStringJoiner.toString().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+            String pdfDirName = FileUtil.replaceSplit(pdfStringJoiner.toString());
             String pdfFileMd5 = DigestUtils.md5Hex(new FileInputStream(pdfFile));
 
             JSONObject jsonPdf = new JSONObject();
@@ -188,7 +189,7 @@ public class BasicAttachmentServiceImpl extends ServiceImpl<BasicAttachmentMappe
             stringJoiner.add(SystemConstant.getNanoId()).add(format);
 
             JSONObject jsonObject = new JSONObject();
-            String dirName = stringJoiner.toString().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+            String dirName = FileUtil.replaceSplit(stringJoiner.toString());
             jsonObject.put(SystemConstant.PATH, dirName);
             if (oss || (!oss && dictionaryConfig.fssPrivateDomain().getConfig().startsWith(SystemConstant.START_PARENT))) {//上传至oss
                 fileStoreUtil.ossUpload(dirName, file.getInputStream(), DigestUtils.md5Hex(file.getInputStream()), type.getFssType());

+ 206 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/FileUploadServiceImpl.java

@@ -0,0 +1,206 @@
+package com.qmth.teachcloud.common.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.qmth.boot.api.exception.ApiException;
+import com.qmth.teachcloud.common.service.FileUploadService;
+import com.qmth.teachcloud.common.bean.vo.FilePathVo;
+import com.qmth.teachcloud.common.config.DictionaryConfig;
+import com.qmth.teachcloud.common.contant.SpringContextHolder;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.domain.FssDomain;
+import com.qmth.teachcloud.common.entity.BasicAttachment;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.LocalCatalogEnum;
+import com.qmth.teachcloud.common.enums.UploadFileEnum;
+import com.qmth.teachcloud.common.service.BasicAttachmentService;
+import com.qmth.teachcloud.common.util.FileStoreUtil;
+import com.qmth.teachcloud.common.util.FileUtil;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.FileInputStream;
+import java.time.LocalDateTime;
+import java.util.Objects;
+import java.util.StringJoiner;
+
+/**
+ * 文件上传服务类
+ */
+@Service
+public class FileUploadServiceImpl implements FileUploadService {
+    private static final Logger log = LoggerFactory.getLogger(FileUploadServiceImpl.class);
+
+    @Resource
+    private DictionaryConfig dictionaryConfig;
+    @Resource
+    private BasicAttachmentService basicAttachmentService;
+    @Resource
+    FileStoreUtil fileStoreUtil;
+
+    /**
+     * 上传文件
+     *
+     * @param pdfFile        上传文件
+     * @param uploadFileEnum 文件类型
+     * @param fileName       文件名称
+     */
+    @Override
+    public FilePathVo uploadFile(File pdfFile, UploadFileEnum uploadFileEnum, String fileName) {
+        try {
+            boolean oss = dictionaryConfig.sysDomain().isOss();
+            StringJoiner pdfStringJoiner = new StringJoiner("");
+            String fssConfig = findFssConfig(oss, uploadFileEnum);
+            if (StringUtils.isNotBlank(fssConfig)) {
+                pdfStringJoiner.add(dictionaryConfig.fssPrivateDomain().getConfig()).add(File.separator);
+            }
+            pdfStringJoiner = getDateCatalog(pdfStringJoiner, uploadFileEnum, true);
+            pdfStringJoiner.add(fileName);
+
+            String uploadFileName = FileUtil.replaceSplit(pdfStringJoiner.toString());
+            uploadFile(oss, uploadFileEnum, uploadFileName, pdfFile);
+
+            String type = isOssUpload(oss, uploadFileEnum) ? SystemConstant.OSS : SystemConstant.LOCAL;
+            return new FilePathVo(uploadFileName, uploadFileEnum, type, FileUtil.md5File(pdfFile));
+
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 预览文件
+     *
+     * @param path 文件路径
+     */
+    @Override
+    public String filePreview(String path) {
+        if (StringUtils.isBlank(path)) {
+            return null;
+        }
+        String url;
+        FilePathVo filePathVo = JSON.parseObject(path, FilePathVo.class);
+        String filePath = filePathVo.getPath();
+        if (StringUtils.isBlank(filePath)) {
+            return null;
+        }
+        if (Objects.equals(filePathVo.getType(), SystemConstant.LOCAL)) {
+            if (filePath.contains(dictionaryConfig.fssPrivateDomain().getServer())) {
+                url = filePath.substring(filePath.indexOf(dictionaryConfig.fssPrivateDomain().getServer()), filePath.length());
+            } else if (filePath.contains(dictionaryConfig.fssPublicDomain().getServer())) {
+                url = filePath.substring(filePath.indexOf(dictionaryConfig.fssPublicDomain().getServer()), filePath.length());
+            } else {
+                url = fileStoreUtil.getPrivateUrl(filePath, filePathVo.getUploadType().getFssType());
+            }
+        } else {
+            url = fileStoreUtil.getPrivateUrl(filePath, filePathVo.getUploadType().getFssType());
+        }
+        return FileUtil.replaceSplit(url);
+    }
+
+    @Override
+    public String filePreview(Long attachmentId) {
+        if (attachmentId == null) {
+            return null;
+        }
+        BasicAttachment basicAttachment = basicAttachmentService.getById(attachmentId);
+        if (basicAttachment == null && StringUtils.isBlank(basicAttachment.getPath())) {
+            return null;
+        }
+        return filePreview(basicAttachment.getPath());
+    }
+
+    /**
+     * 获取oss配置路径
+     *
+     * @param oss            是否oss上传
+     * @param uploadFileEnum 文件类型
+     */
+    private String findFssConfig(boolean oss, UploadFileEnum uploadFileEnum) {
+        if (oss) {
+            return null;
+        }
+        if ("private".equals(uploadFileEnum.getFssType())) {
+            FssDomain fssDomain = dictionaryConfig.fssPrivateDomain();
+            if (Objects.nonNull(fssDomain) && !StringUtils.isBlank(fssDomain.getConfig()) && !fssDomain.getConfig().startsWith(SystemConstant.START_PARENT)) {
+                return fssDomain.getConfig();
+            }
+        } else if ("public".equals(uploadFileEnum.getFssType())) {
+            FssDomain fssDomain = dictionaryConfig.fssPublicDomain();
+            if (Objects.nonNull(fssDomain) && !StringUtils.isBlank(fssDomain.getConfig()) && !fssDomain.getConfig().startsWith(SystemConstant.START_PARENT)) {
+                return fssDomain.getConfig();
+            }
+        } else {
+            throw ExceptionResultEnum.ERROR.exception("fss类型异常");
+        }
+        return null;
+    }
+
+    /**
+     * 是否为oss上传
+     *
+     * @param oss            oss上传配置
+     * @param uploadFileEnum 文件类型
+     */
+    private boolean isOssUpload(boolean oss, UploadFileEnum uploadFileEnum) {
+        if (oss) {
+            return true;
+        }
+        if ("private".equals(uploadFileEnum.getFssType())) {
+            FssDomain fssDomain = dictionaryConfig.fssPrivateDomain();
+            return Objects.nonNull(fssDomain) && StringUtils.isNotBlank(fssDomain.getConfig()) && fssDomain.getConfig().startsWith(SystemConstant.START_PARENT);
+        } else if ("public".equals(uploadFileEnum.getFssType())) {
+            FssDomain fssDomain = dictionaryConfig.fssPublicDomain();
+            return Objects.nonNull(fssDomain) && StringUtils.isNotBlank(fssDomain.getConfig()) && fssDomain.getConfig().startsWith(SystemConstant.START_PARENT);
+        } else {
+            throw ExceptionResultEnum.ERROR.exception("fss类型异常");
+        }
+    }
+
+    /**
+     * 上传文件
+     *
+     * @param oss            是否为oss上传
+     * @param uploadFileEnum 文件类型
+     * @param uploadFileName 上传文件名
+     * @param file           文件
+     */
+    public void uploadFile(boolean oss, UploadFileEnum uploadFileEnum, String uploadFileName, File file) throws Exception {
+        FileStoreUtil fileStoreUtil = SpringContextHolder.getBean(FileStoreUtil.class);
+        if (isOssUpload(oss, uploadFileEnum)) {
+            fileStoreUtil.ossUpload(uploadFileName, file, DigestUtils.md5Hex(new FileInputStream(file)), fileStoreUtil.getUploadEnumByPath(uploadFileName).getFssType());
+        } else {
+            fileStoreUtil.localUpload(uploadFileName, new FileInputStream(file), DigestUtils.md5Hex(new FileInputStream(file)), LocalCatalogEnum.LOCAL_PDF);
+        }
+    }
+
+    /**
+     * 按日期生成目录
+     *
+     * @param stringJoiner     stringJoiner
+     * @param uploadFileEnum   文件类型
+     * @param endFileSeparator 结尾是否为分隔符"/"
+     */
+    public static StringJoiner getDateCatalog(StringJoiner stringJoiner, UploadFileEnum uploadFileEnum, boolean endFileSeparator) {
+        LocalDateTime nowTime = LocalDateTime.now();
+        stringJoiner.add(uploadFileEnum.getTitle()).add(File.separator)
+                .add(String.valueOf(nowTime.getYear())).add(File.separator)
+                .add(String.format(SystemConstant.DATE_TIME_FORMAT, nowTime.getMonthValue())).add(File.separator)
+                .add(String.format(SystemConstant.DATE_TIME_FORMAT, nowTime.getDayOfMonth()));
+        if (endFileSeparator) {
+            stringJoiner.add(File.separator);
+        }
+        return stringJoiner;
+    }
+}

+ 3 - 22
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

@@ -1,7 +1,6 @@
 package com.qmth.teachcloud.common.service.impl;
 
 import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.io.FileUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -474,8 +473,7 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
             UploadFileEnum uploadFileEnum = UploadFileEnum.valueOf((String) jsonObject.get(SystemConstant.UPLOAD_TYPE));
             url = fileStoreUtil.getPrivateUrl(filePath, uploadFileEnum.getFssType());
         }
-        url = url.replaceAll("\\\\", SystemConstant.ORG_SPLIT);
-        return url;
+        return FileUtil.replaceSplit(url);
     }
 
     /**
@@ -670,23 +668,6 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
         }
     }
 
-    @Override
-    public void downloadFileAndZip(HttpServletResponse response, String rootPath, List<File> files) {
-        long time = System.currentTimeMillis();
-        File zipFile = SystemConstant.getFileTempDirVarForZip(System.currentTimeMillis() + SystemConstant.ZIP_PREFIX, null);
-        try {
-            Zip4jUtil.zipEncryptFile(zipFile.getPath(), files, SystemConstant.ZIP_ENCRYPT_PWD);
-            outputFile(response, zipFile, String.valueOf(time));
-        } catch (Exception e) {
-            throw ExceptionResultEnum.ERROR.exception("下载失败");
-        } finally {
-            // 删除zip文件
-            FileUtil.del(zipFile);
-            // 删除压缩内容
-            FileUtil.del(rootPath);
-        }
-    }
-
     /**
      * 下载文件到本地并压缩返回
      *
@@ -707,9 +688,9 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
             throw ExceptionResultEnum.ERROR.exception("下载失败");
         } finally {
             // 删除zip文件
-            FileUtil.del(zipFile);
+            FileUtil.deleteFile(zipFile);
             // 删除压缩内容
-            FileUtil.del(rootPath);
+            FileUtil.deleteFile(rootPath);
         }
     }
 

+ 5 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/FileStoreUtil.java

@@ -4,7 +4,9 @@ import com.alibaba.fastjson.JSONObject;
 import com.qmth.boot.core.fss.service.FileService;
 import com.qmth.boot.core.fss.store.FileStore;
 import com.qmth.teachcloud.common.config.DictionaryConfig;
+import com.qmth.teachcloud.common.contant.SpringContextHolder;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.domain.FssDomain;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.LocalCatalogEnum;
 import com.qmth.teachcloud.common.enums.UploadFileEnum;
@@ -48,7 +50,7 @@ public class FileStoreUtil {
      * @throws Exception 异常
      */
     public void copyInputStreamToFile(InputStream inputStream, File finalFile, String md5, LocalCatalogEnum catalogType) throws Exception {
-        String dirName = finalFile.getPath().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+        String dirName = FileUtil.replaceSplit(finalFile.getPath());
         this.localUpload(dirName, inputStream, md5, catalogType);
     }
 
@@ -271,7 +273,7 @@ public class FileStoreUtil {
      * @return 类型
      */
     public UploadFileEnum getUploadEnumByPath(String path) {
-        path = path.replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+        path = FileUtil.replaceSplit(path);
         String target = path.substring(0, path.indexOf('/'));
         return UploadFileEnum.valueOf(target.toUpperCase());
     }
@@ -353,7 +355,7 @@ public class FileStoreUtil {
             stringJoiner.add(SystemConstant.getNanoId()).add(format);
 
             jsonObject = new JSONObject();
-            String dirName = stringJoiner.toString().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+            String dirName = FileUtil.replaceSplit(stringJoiner.toString());
             if (oss || (!oss && dictionaryConfig.fssPrivateDomain().getConfig().startsWith(SystemConstant.START_PARENT))) {//上传至oss
                 this.ossUpload(dirName, file.getInputStream(), md5, type.getFssType());
                 jsonObject.put(SystemConstant.TYPE, oss ? SystemConstant.OSS : SystemConstant.LOCAL);

+ 29 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/FileUtil.java

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.common.util;
 
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.slf4j.Logger;
@@ -219,7 +220,7 @@ public class FileUtil {
                 ZipEntry entry = (ZipEntry) entries.nextElement();
 
                 // Linux中需要替换掉路径的反斜杠
-                String entryName = (File.separator + entry.getName()).replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+                String entryName = replaceSplit((File.separator + entry.getName()));
 
                 String filePath = targetDir.getAbsolutePath() + entryName;
                 File target = new File(filePath);
@@ -610,4 +611,31 @@ public class FileUtil {
             throw new RuntimeException(e);
         }
     }
+
+    /**
+     * 将路径中的双"//"替换成单"/"
+     *
+     * @param path 文件路径
+     * @return string
+     */
+    public static String replaceSplit(String path) {
+        return path.replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+    }
+
+    public static String md5File(File file) {
+        try {
+            return md5File(new FileInputStream(file));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public static String md5File(InputStream inputStream) {
+        try {
+            return DigestUtils.md5Hex(inputStream);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
 }

+ 4 - 4
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkArbitrateHistoryServiceImpl.java

@@ -10,8 +10,8 @@ import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.mark.MarkArbitrateStatus;
 import com.qmth.teachcloud.common.enums.mark.MarkMode;
+import com.qmth.teachcloud.common.service.FileUploadService;
 import com.qmth.teachcloud.common.service.SysUserService;
-import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkArbitrateDto;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkArbitrateMarkerDto;
@@ -61,7 +61,7 @@ public class MarkArbitrateHistoryServiceImpl extends ServiceImpl<MarkArbitrateHi
     @Resource
     private TaskService taskService;
     @Resource
-    private TeachcloudCommonService teachcloudCommonService;
+    private FileUploadService fileUploadService;
     @Resource
     private MarkService markService;
     @Resource
@@ -146,10 +146,10 @@ public class MarkArbitrateHistoryServiceImpl extends ServiceImpl<MarkArbitrateHi
             markArbitrateSettingDto.setUserLoginName(sysUser.getLoginName());
             markArbitrateSettingDto.setUserName(sysUser.getRealName());
             if (StringUtils.isNotBlank(markPaper.getPaperFilePath())) {
-                markArbitrateSettingDto.setPaperUrl(teachcloudCommonService.filePreview(markPaper.getPaperFilePath()));
+                markArbitrateSettingDto.setPaperUrl(fileUploadService.filePreview(markPaper.getPaperFilePath()));
             }
             if (StringUtils.isNotBlank(markPaper.getAnswerFilePath())) {
-                markArbitrateSettingDto.setAnswerUrl(teachcloudCommonService.filePreview(markPaper.getAnswerFilePath()));
+                markArbitrateSettingDto.setAnswerUrl(fileUploadService.filePreview(markPaper.getAnswerFilePath()));
             }
         }
         return markArbitrateSettingDto;

+ 10 - 23
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/utils/FileStoreUtils.java

@@ -3,13 +3,14 @@ package com.qmth.teachcloud.mark.utils;
 import com.alibaba.fastjson.JSON;
 import com.qmth.boot.core.fss.service.FileService;
 import com.qmth.boot.core.fss.store.FileStore;
+import com.qmth.teachcloud.common.bean.vo.FilePathVo;
 import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.domain.FssDomain;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.LocalCatalogEnum;
 import com.qmth.teachcloud.common.enums.UploadFileEnum;
-import com.qmth.teachcloud.common.bean.vo.FilePathVo;
+import com.qmth.teachcloud.common.util.FileUtil;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FilenameUtils;
@@ -48,7 +49,7 @@ public class FileStoreUtils {
      * @throws Exception 异常
      */
     public void copyInputStreamToFile(InputStream inputStream, File finalFile, String md5, LocalCatalogEnum catalogType) throws Exception {
-        String dirName = finalFile.getPath().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+        String dirName = FileUtil.replaceSplit(finalFile.getPath());
         this.localUpload(dirName, inputStream, md5, catalogType);
     }
 
@@ -217,7 +218,7 @@ public class FileStoreUtils {
      * @return 类型
      */
     public UploadFileEnum getUploadEnumByPath(String path) {
-        path = path.replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+        path = FileUtil.replaceSplit(path);
         String target = path.substring(0, path.indexOf('/'));
         return UploadFileEnum.valueOf(target.toUpperCase());
     }
@@ -306,19 +307,17 @@ public class FileStoreUtils {
         FilePathVo filePathVo = JSON.parseObject(path, FilePathVo.class);
         String type = filePathVo.getType();
         String filePath = filePathVo.getPath();
-        UploadFileEnum uploadFileEnum = UploadFileEnum.valueOf(filePathVo.getUploadType());
-        FssDomain fssDomain = getFssDomain(uploadFileEnum.getFssType());
+        FssDomain fssDomain = getFssDomain(filePathVo.getUploadType().getFssType());
         if (Objects.equals(type, SystemConstant.LOCAL)) {
             if (filePath.contains(fssDomain.getServer())) {
                 url = filePath.substring(filePath.indexOf(fssDomain.getServer()), filePath.length());
             } else {
-                url = getPrivateUrl(filePath, uploadFileEnum.getFssType());
+                url = getPrivateUrl(filePath, filePathVo.getUploadType().getFssType());
             }
         } else {
-            url = getPrivateUrl(filePath, uploadFileEnum.getFssType());
+            url = getPrivateUrl(filePath, filePathVo.getUploadType().getFssType());
         }
-        url = url.replaceAll("\\\\", SystemConstant.ORG_SPLIT);
-        return url;
+        return FileUtil.replaceSplit(url);
     }
 
     /**
@@ -362,7 +361,7 @@ public class FileStoreUtils {
             stringJoiner.add(fssDomain.getConfig()).add(File.separator);
         }
         stringJoiner.add(path);
-        return escapeFileName(stringJoiner.toString());
+        return FileUtil.replaceSplit(stringJoiner.toString());
     }
 
     /**
@@ -389,18 +388,6 @@ public class FileStoreUtils {
         } else {
             stringJoiner.add(fileName);
         }
-        return escapeFileName(stringJoiner.toString());
-    }
-
-    /**
-     * 处理路径中"\\"
-     *
-     * @param fileName 文件名称
-     */
-    private String escapeFileName(String fileName) {
-        if (StringUtils.isBlank(fileName)) {
-            return null;
-        }
-        return fileName.replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+        return FileUtil.replaceSplit(stringJoiner.toString());
     }
 }

+ 1 - 1
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/ReportCommonServiceImpl.java

@@ -775,7 +775,7 @@ public class ReportCommonServiceImpl implements ReportCommonService {
             stringJoiner.add(SystemConstant.getNanoId()).add(format);
 
             JSONObject jsonObject = new JSONObject();
-            String dirName = stringJoiner.toString().replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+            String dirName = FileUtil.replaceSplit(stringJoiner.toString());
             if (oss || (!oss && dictionaryConfig.fssPrivateDomain().getConfig().startsWith(SystemConstant.START_PARENT))) {//上传至oss\
                 fileStoreUtil.ossUpload(dirName, file.getInputStream(), md5, type.getFssType());
                 jsonObject.put(SystemConstant.TYPE, oss ? SystemConstant.OSS : SystemConstant.LOCAL);

+ 1 - 1
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/BasicDatasourceController.java

@@ -1611,7 +1611,7 @@ public class BasicDatasourceController {
     private Map<String, String> disposeTeacherInfo(String teacherInfo) {
         StringBuilder teacherName = new StringBuilder();
         StringBuilder teacherCode = new StringBuilder();
-        teacherInfo = teacherInfo.trim().replaceAll(";", ";").replaceAll("\\\\", SystemConstant.ORG_SPLIT);
+        teacherInfo = FileUtil.replaceSplit(teacherInfo.trim().replaceAll(";", ";"));
         String[] teacherInfoArr = teacherInfo.split(";");
         for (String teacher : teacherInfoArr) {
             String cellName = "";