Эх сурвалжийг харах

add. 文档管理批量下载

caozixuan 10 сар өмнө
parent
commit
726697fe7c

+ 7 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkArchiveController.java

@@ -22,8 +22,10 @@ import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.net.URLEncoder;
 
 /**
  * <p>
@@ -68,8 +70,11 @@ public class MarkArchiveController {
 
     @ApiOperation(value = "成绩导出")
     @RequestMapping(value = "score/export", method = RequestMethod.POST)
-    public void scoreExport(@Validated ArchiveStudentQuery query, HttpServletResponse response) {
-        markStudentService.scoreExport(query, response);
+    public void scoreExport(@Validated ArchiveStudentQuery query, HttpServletResponse response) throws IOException {
+        response.setHeader("Content-Disposition", "inline;filename=" + URLEncoder.encode("成绩导出", SystemConstant.CHARSET_NAME) + ".xlsx");
+        response.setContentType("application/vnd.ms-excel");
+        ServletOutputStream outputStream = response.getOutputStream();
+        markStudentService.scoreExport(query, outputStream);
     }
 
     @ApiOperation(value = "成绩下载")

+ 36 - 23
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkDocumentController.java

@@ -28,7 +28,10 @@ import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
 
 /**
  * <p>
@@ -42,10 +45,13 @@ public class MarkDocumentController {
 
     @Resource
     private MarkPaperService markPaperService;
+
     @Resource
     private MarkDocumentService markDocumentService;
+
     @Resource
     private MarkStudentService markStudentService;
+
     @Resource
     private ScanPackageService scanPackageService;
 
@@ -58,27 +64,24 @@ public class MarkDocumentController {
     @ApiOperation(value = "文档详情")
     @RequestMapping(value = "/detail", method = RequestMethod.POST)
     public Result detail(@Validated MarkDocumantQuery query) {
-        return ResultUtil.ok(markDocumentService.listByExamIdAndPaperNumber(query.getExamId(),query.getPaperNumber()));
+        return ResultUtil.ok(markDocumentService.listByExamIdAndPaperNumber(query.getExamId(), query.getPaperNumber()));
     }
 
     @ApiOperation(value = "文档上传")
     @RequestMapping(value = "/import", method = RequestMethod.POST)
     @OperationLogDetail(operationType = OperationTypeEnum.ADD, detail = "文档上传操作,文档ID:{{id}}")
-    public Result importFile(@ApiParam(value = "文档ID", required = true) Long id,
-                           @ApiParam(value = "文件md5", required = true) String md5,
-                           @ApiParam(value = "文件", required = true) @RequestParam MultipartFile file) {
+    public Result importFile(@ApiParam(value = "文档ID", required = true) Long id, @ApiParam(value = "文件md5", required = true) String md5,
+            @ApiParam(value = "文件", required = true) @RequestParam MultipartFile file) {
         return ResultUtil.ok(markDocumentService.importById(id, file, md5));
     }
 
     @ApiOperation(value = "文档新建")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     @OperationLogDetail(operationType = OperationTypeEnum.ADD, detail = "文档新建操作,考试ID:{{examId}}、试卷编号:{{paperNumber}}、文档名称:{{documentName}}")
-    public Result save(@ApiParam(value = "考试ID", required = true) Long examId,
-                       @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
-                       @ApiParam(value = "文档名称", required = true) String documentName,
-                       @ApiParam(value = "文件md5", required = true) String md5,
-                       @ApiParam(value = "文件", required = true) @RequestParam MultipartFile file) {
-        return ResultUtil.ok(markDocumentService.save(examId, paperNumber,documentName, file,md5), null);
+    public Result save(@ApiParam(value = "考试ID", required = true) Long examId, @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
+            @ApiParam(value = "文档名称", required = true) String documentName, @ApiParam(value = "文件md5", required = true) String md5,
+            @ApiParam(value = "文件", required = true) @RequestParam MultipartFile file) {
+        return ResultUtil.ok(markDocumentService.save(examId, paperNumber, documentName, file, md5), null);
     }
 
     @ApiOperation(value = "文档删除")
@@ -92,29 +95,39 @@ public class MarkDocumentController {
     @ApiOperation(value = "文档下载")
     @RequestMapping(value = "/download", method = RequestMethod.POST)
     @OperationLogDetail(operationType = OperationTypeEnum.EXPORT, detail = "文档下载操作,文档ID:{{id}}")
-    public void download(@ApiParam(value = "文档ID", required = true) Long id, HttpServletResponse response) {
+    public void download(@ApiParam(value = "文档ID", required = true) Long id, HttpServletResponse response)
+            throws IOException {
         MarkDocument document = markDocumentService.getById(id);
-        if(document==null){
+        if (document == null) {
             throw ExceptionResultEnum.ERROR.exception("文档不存在");
         }
-        if(document.getType().equals(DocumentType.SCORE)){
+        if (document.getType().equals(DocumentType.SCORE)) {
             ArchiveStudentQuery query = new ArchiveStudentQuery();
             query.setExamId(document.getExamId());
             query.setPaperNumber(document.getPaperNumber());
-            markStudentService.scoreExport(query, response);
+            response.setHeader("Content-Disposition",
+                    "inline;filename=" + URLEncoder.encode("成绩导出", SystemConstant.CHARSET_NAME) + ".xlsx");
+            response.setContentType("application/vnd.ms-excel");
+            ServletOutputStream outputStream = response.getOutputStream();
+            markStudentService.scoreExport(query, outputStream);
         }
-        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(document.getExamId(),document.getPaperNumber());
-        if(markPaper==null){
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(document.getExamId(), document.getPaperNumber());
+        if (markPaper == null) {
             throw ExceptionResultEnum.ERROR.exception("试卷不存在");
         }
-        if(document.getType().equals(DocumentType.SHEET)){
-            markStudentService.sheetExport(document.getExamId(),markPaper.getCoursePaperId(),response);
+        if (document.getType().equals(DocumentType.SHEET)) {
+            markStudentService.sheetExport(document.getExamId(), markPaper.getCoursePaperId(), response);
         }
-        if(document.getType().equals(DocumentType.TRACK)){
-            markStudentService.trackExport(document.getExamId(),markPaper.getCoursePaperId(),response);
-        }
-        if(document.getType().equals(DocumentType.SIGN)){
-            scanPackageService.export(markPaper.getExamId(),markPaper.getCoursePaperId(),response);
+        if (document.getType().equals(DocumentType.TRACK)) {
+            markStudentService.trackExport(document.getExamId(), markPaper.getCoursePaperId(), response);
         }
     }
+
+    @ApiOperation(value = "文档管理-批量下载")
+    @RequestMapping(value = "/download_batch", method = RequestMethod.POST)
+    @OperationLogDetail(operationType = OperationTypeEnum.EXPORT, detail = "文档下载操作,考试id:{{id}}, 试卷编号;{{paperNumber}}")
+    public void download(@ApiParam(value = "考试ID", required = true) Long examId,
+            @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber, HttpServletResponse response) {
+        markDocumentService.downloadBatch(examId, paperNumber, response);
+    }
 }

+ 12 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkDocumentService.java

@@ -9,6 +9,8 @@ import org.springframework.web.multipart.MultipartFile;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.teachcloud.mark.entity.MarkDocument;
 
+import javax.servlet.http.HttpServletResponse;
+
 /**
  * <p>
  * 考试科目表 服务类
@@ -18,6 +20,7 @@ import com.qmth.teachcloud.mark.entity.MarkDocument;
  * @since 2023-09-22
  */
 public interface MarkDocumentService extends IService<MarkDocument> {
+
     List<MarkDocument> listByExamIdAndPaperNumber(Long examId, String paperNumber);
 
     String importById(Long id, MultipartFile file, String md5);
@@ -27,4 +30,13 @@ public interface MarkDocumentService extends IService<MarkDocument> {
     String save(Long examId, String paperNumber, String documentName, MultipartFile file, String md5);
 
     void initMarkDocument(BasicExam basicExam, MarkPaper markPaper);
+
+    /**
+     * 文档批量下载
+     *
+     * @param examId      考试id
+     * @param paperNumber 试卷编号
+     * @param response    response
+     */
+    void downloadBatch(Long examId, String paperNumber, HttpServletResponse response);
 }

+ 2 - 4
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkStudentService.java

@@ -1,6 +1,5 @@
 package com.qmth.teachcloud.mark.service;
 
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -8,7 +7,6 @@ import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.entity.BasicExam;
 import com.qmth.teachcloud.common.entity.BasicExamStudent;
 import com.qmth.teachcloud.common.entity.SysUser;
-import com.qmth.teachcloud.common.enums.BasicExamStudentStatusEnum;
 import com.qmth.teachcloud.common.enums.ScanStatus;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.common.enums.mark.SubjectiveStatus;
@@ -35,11 +33,11 @@ import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.mark.entity.MarkStudent;
 import com.qmth.teachcloud.mark.entity.ScanStudentPaper;
 import com.qmth.teachcloud.mark.params.MarkHeaderResult;
-import com.sun.org.apache.xpath.internal.operations.Mult;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.NotNull;
+import java.io.OutputStream;
 import java.util.List;
 import java.util.Set;
 
@@ -161,7 +159,7 @@ public interface MarkStudentService extends IService<MarkStudent> {
 
     IPage<ArchiveStudentVo> studentList(ArchiveStudentQuery query);
 
-    void scoreExport(ArchiveStudentQuery query, HttpServletResponse response);
+    void scoreExport(ArchiveStudentQuery query, OutputStream outputStream);
 
     ScoreReportVo scoreReport(ArchiveStudentQuery query);
 

+ 136 - 41
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkDocumentServiceImpl.java

@@ -1,37 +1,42 @@
 package com.qmth.teachcloud.mark.service.impl;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-import javax.annotation.Resource;
-
-import com.qmth.teachcloud.common.entity.BasicExam;
-import com.qmth.teachcloud.common.enums.ExamModelEnum;
-import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.commons.io.FilenameUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
-
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.boot.core.exception.ParameterException;
+import com.qmth.boot.tools.io.ZipWriter;
+import com.qmth.teachcloud.common.bean.vo.FilePathVo;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.BasicExam;
+import com.qmth.teachcloud.common.enums.ExamModelEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
+import com.qmth.teachcloud.common.service.FileUploadService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
+import com.qmth.teachcloud.mark.bean.archivescore.ArchiveStudentQuery;
 import com.qmth.teachcloud.mark.entity.MarkDocument;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.mark.entity.ScanPackage;
 import com.qmth.teachcloud.mark.enums.DocumentType;
 import com.qmth.teachcloud.mark.mapper.MarkDocumentMapper;
-import com.qmth.teachcloud.mark.service.MarkDocumentService;
-import com.qmth.teachcloud.mark.service.MarkFileService;
-import com.qmth.teachcloud.mark.service.MarkPaperService;
-import com.qmth.teachcloud.mark.service.ScanPackageService;
+import com.qmth.teachcloud.mark.service.*;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Objects;
 
 /**
  * <p>
@@ -43,24 +48,31 @@ import com.qmth.teachcloud.mark.service.ScanPackageService;
  */
 @Service
 public class MarkDocumentServiceImpl extends ServiceImpl<MarkDocumentMapper, MarkDocument> implements MarkDocumentService {
+
     @Resource
     private MarkFileService markFileService;
+
     @Resource
     private TeachcloudCommonService teachcloudCommonService;
+
     @Resource
     private MarkPaperService markPaperService;
+
     @Resource
     private ScanPackageService scanPackageService;
 
+    @Resource
+    private MarkStudentService markStudentService;
+
+    @Resource
+    private FileUploadService fileUploadService;
+
     @Override
     public List<MarkDocument> listByExamIdAndPaperNumber(Long examId, String paperNumber) {
         QueryWrapper<MarkDocument> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(MarkDocument::getExamId, examId)
-                .eq(MarkDocument::getPaperNumber, paperNumber);
+        queryWrapper.lambda().eq(MarkDocument::getExamId, examId).eq(MarkDocument::getPaperNumber, paperNumber);
         List<MarkDocument> list = this.list(queryWrapper);
-        list.sort((d1, d2) -> {
-            return d1.getType().getValue() - d2.getType().getValue();
-        });
+        list.sort(Comparator.comparingInt(d -> d.getType().getValue()));
         for (MarkDocument d : list) {
             d.setFilePath(teachcloudCommonService.filePreview(d.getFilePath()));
         }
@@ -73,10 +85,8 @@ public class MarkDocumentServiceImpl extends ServiceImpl<MarkDocumentMapper, Mar
         if (document == null) {
             throw ExceptionResultEnum.ERROR.exception("文档不存在");
         }
-        if (document.getType().equals(DocumentType.CUSTOM)
-                || document.getType().equals(DocumentType.SYLLABUS)
-                || document.getType().equals(DocumentType.PROCESS_SCORE)
-                || document.getType().equals(DocumentType.PAPER_REPORT)
+        if (document.getType().equals(DocumentType.CUSTOM) || document.getType().equals(DocumentType.SYLLABUS)
+                || document.getType().equals(DocumentType.PROCESS_SCORE) || document.getType().equals(DocumentType.PAPER_REPORT)
                 || document.getType().equals(DocumentType.CHECK_IN)) {
             try {
                 String fileMd5 = DigestUtils.md5Hex(file.getBytes());
@@ -88,11 +98,10 @@ public class MarkDocumentServiceImpl extends ServiceImpl<MarkDocumentMapper, Mar
                 if (document.getType().equals(DocumentType.CUSTOM)) {
                     name = document.getName();
                 }
-                String path = markFileService.uploadDocument(file.getInputStream(),
-                        md5, document.getExamId(), document.getPaperNumber(), String.valueOf(document.getType().getValue()), document.getName(), format);
+                String path = markFileService.uploadDocument(file.getInputStream(), md5, document.getExamId(), document.getPaperNumber(), String.valueOf(document.getType().getValue()), document.getName(),
+                        format);
                 UpdateWrapper<MarkDocument> updateWrapper = new UpdateWrapper<>();
-                updateWrapper.lambda().set(MarkDocument::getFilePath, path)
-                        .set(MarkDocument::getFileCount, 1)
+                updateWrapper.lambda().set(MarkDocument::getFilePath, path).set(MarkDocument::getFileCount, 1)
                         .eq(MarkDocument::getId, id);
                 this.update(updateWrapper);
                 return teachcloudCommonService.filePreview(path);
@@ -124,8 +133,7 @@ public class MarkDocumentServiceImpl extends ServiceImpl<MarkDocumentMapper, Mar
             throw ExceptionResultEnum.ERROR.exception("评卷未结束或试卷不存在");
         }
         QueryWrapper<MarkDocument> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(MarkDocument::getExamId, examId)
-                .eq(MarkDocument::getPaperNumber, paperNumber)
+        queryWrapper.lambda().eq(MarkDocument::getExamId, examId).eq(MarkDocument::getPaperNumber, paperNumber)
                 .eq(MarkDocument::getName, documentName);
         MarkDocument document = this.getOne(queryWrapper);
         if (document != null) {
@@ -150,8 +158,8 @@ public class MarkDocumentServiceImpl extends ServiceImpl<MarkDocumentMapper, Mar
             if (document.getType().equals(DocumentType.CUSTOM)) {
                 name = document.getName();
             }
-            String path = markFileService.uploadDocument(file.getInputStream(),
-                    md5, examId, paperNumber, String.valueOf(document.getType().getValue()), documentName, format);
+            String path = markFileService.uploadDocument(file.getInputStream(), md5, examId, paperNumber,
+                    String.valueOf(document.getType().getValue()), documentName, format);
             document.setFilePath(path);
             this.save(document);
             return teachcloudCommonService.filePreview(path);
@@ -187,19 +195,21 @@ public class MarkDocumentServiceImpl extends ServiceImpl<MarkDocumentMapper, Mar
                     markDocument.setFilePath(markPaper.getAnswerFilePath());
                 }
             } else if (documentType.equals(DocumentType.PAPER_REPORT)) {
-//                    markDocument.setFileCount(1);
+                //                    markDocument.setFileCount(1);
             } else if (documentType.equals(DocumentType.APPROVE_RECORD)) {
-                markDocument.setFileCount(basicExam != null && !ExamModelEnum.MODEL4.equals(basicExam.getExamModel()) ? 1 : 0);
+                markDocument.setFileCount(
+                        basicExam != null && !ExamModelEnum.MODEL4.equals(basicExam.getExamModel()) ? 1 : 0);
             } else if (documentType.equals(DocumentType.SCORE)) {
                 markDocument.setFileCount(1);
             } else if (documentType.equals(DocumentType.SCORE_REPORT)) {
                 markDocument.setFileCount(1);
             } else if (documentType.equals(DocumentType.SHEET)) {
                 markDocument.setFileCount(markPaper.getUploadCount());
-//                } else if (documentType.equals(DocumentType.TRACK)) {
-//                    markDocument.setFileCount(markPaper.getUploadCount());
+                //                } else if (documentType.equals(DocumentType.TRACK)) {
+                //                    markDocument.setFileCount(markPaper.getUploadCount());
             } else if (documentType.equals(DocumentType.SIGN)) {
-                List<ScanPackage> scanPackageList = scanPackageService.listByExamIdAndCoursePaperIdAndPackageCode(markPaper.getExamId(), markPaper.getCoursePaperId(), null);
+                List<ScanPackage> scanPackageList = scanPackageService.listByExamIdAndCoursePaperIdAndPackageCode(
+                        markPaper.getExamId(), markPaper.getCoursePaperId(), null);
                 markDocument.setFileCount(scanPackageList.size());
             } else if (documentType.equals(DocumentType.CHECK_IN)) {
 
@@ -208,4 +218,89 @@ public class MarkDocumentServiceImpl extends ServiceImpl<MarkDocumentMapper, Mar
         }
         this.saveOrUpdateBatch(markDocuments);
     }
+
+    @Override
+    public void downloadBatch(Long examId, String paperNumber, HttpServletResponse response) {
+        List<MarkDocument> documentList = this.listByExamIdAndPaperNumber(examId, paperNumber);
+        try {
+            response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("文档管理.zip", "UTF-8"));
+            ZipWriter writer = ZipWriter.create(response.getOutputStream());
+            ByteArrayOutputStream os = new ByteArrayOutputStream();
+
+            // 本地保存目录
+            File tempFile = SystemConstant.getFileTempParentDirVar(SystemConstant.TEMP_PREFIX);
+            String filePath = "";
+            for (int i = 0; i < documentList.size(); i++) {
+                MarkDocument markDocument = documentList.get(i);
+                String path = markDocument.getFilePath();
+                String name = i + '-' + markDocument.getName();
+                DocumentType documentType = markDocument.getType();
+
+                switch (documentType) {
+                case SYLLABUS:
+                case PROCESS_SCORE:
+                case PAPER:
+                case ANSWER:
+                case PAPER_REPORT:
+                case CHECK_IN:
+                case CUSTOM:
+                    if (SystemConstant.strNotNull(path)) {
+                        FilePathVo filePathVo = JSON.parseObject(path, FilePathVo.class);
+                        String suffix = FilenameUtils.getExtension(filePathVo.getPath());
+                        filePath = tempFile.getPath() + File.separator + name + "." + suffix;
+                        File file = fileUploadService.downloadFile(markDocument.getFilePath(), filePath);
+                        writer.write(file, file.getName());
+                        file.delete();
+                    }
+                    break;
+                case APPROVE_RECORD:
+                case SCORE_REPORT:
+                case SHEET:
+                case TRACK:
+                    break;
+                case SCORE:
+                    ArchiveStudentQuery query = new ArchiveStudentQuery();
+                    query.setExamId(examId);
+                    query.setPaperNumber(paperNumber);
+
+                    filePath = tempFile.getPath() + File.separator + name + SystemConstant.EXCEL_PREFIX;
+                    File file = new File(filePath);
+                    OutputStream outputStream = new FileOutputStream(file);
+                    markStudentService.scoreExport(query, outputStream);
+                    writer.write(file, file.getName());
+                    file.delete();
+                    break;
+                case SIGN:
+                    String signClassifyPath = tempFile.getPath() + File.separator + name;
+                    MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
+                    if (markPaper == null) {
+                        throw ExceptionResultEnum.ERROR.exception("试卷不存在");
+                    }
+                    QueryWrapper<ScanPackage> wrapper = new QueryWrapper<>();
+                    LambdaQueryWrapper<ScanPackage> lw = wrapper.lambda();
+                    lw.eq(ScanPackage::getExamId, examId);
+                    lw.eq(ScanPackage::getCoursePaperId, markPaper.getCoursePaperId());
+                    lw.orderByAsc(ScanPackage::getPackageNo);
+                    List<ScanPackage> scanPackageList = scanPackageService.list(wrapper);
+                    if (CollectionUtils.isNotEmpty(scanPackageList)) {
+                        File signClassifyFile = new File(signClassifyPath);
+                        if (!signClassifyFile.exists()) {
+                            signClassifyFile.mkdirs();
+                        }
+                        for (ScanPackage scanPackage : scanPackageList) {
+                            FilePathVo filePathVo = JSON.parseObject(scanPackage.getPath(), FilePathVo.class);
+                            filePath = signClassifyFile.getPath() + File.separator + FilenameUtils.getName(filePathVo.getPath());
+                            File scanPackageFile = fileUploadService.downloadFile(scanPackage.getPath(), filePath);
+                            writer.write(scanPackageFile, scanPackageFile.getName());
+                            scanPackageFile.delete();
+                        }
+                    }
+                }
+            }
+            writer.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new ParameterException("文件下载失败", e);
+        }
+    }
 }

+ 2 - 5
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -1139,7 +1139,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
     }
 
     @Override
-    public void scoreExport(ArchiveStudentQuery query, HttpServletResponse response) {
+    public void scoreExport(ArchiveStudentQuery query, OutputStream outputStream) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         //生成表头
         String[] columnName = new String[]{"学生姓名", "学号", "学院", "教学班", "行政班", "课程代码", "课程名称", "状态", "客观分", "主观分", "成绩"};
@@ -1179,14 +1179,11 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             for (ScoreItem item : s.getScoreList(false, sQuestionList)) {
                 valueList.add(item.getScore().toString());
             }
-            String[] columnValue = valueList.toArray(new String[valueList.size()]);
+            String[] columnValue = valueList.toArray(new String[0]);
             columnValues.add(columnValue);
         }
         try {
             log.debug("导出Excel开始...");
-            response.setHeader("Content-Disposition", "inline;filename=" + URLEncoder.encode("成绩导出", SystemConstant.CHARSET_NAME) + ".xlsx");
-            response.setContentType("application/vnd.ms-excel");
-            ServletOutputStream outputStream = response.getOutputStream();
             ExcelWriter writer = ExcelWriter.create(ExcelType.XLSX);
             writer.writeDataArrays("成绩导出", null, columnNames, columnValues.listIterator());
             writer.output(outputStream);