Browse Source

add. 文档管理批量下载

caozixuan 10 months ago
parent
commit
b0a0ab3c10

+ 4 - 0
distributed-print-business/src/main/resources/db/log/脚本-caozx.sql

@@ -7,3 +7,7 @@ INSERT INTO `sys_config` (`id`, `school_id`, `org_id`, `config_key`, `config_nam
 -- 2024-08-22
 INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('3057', '总量分析', '/api/admin/mark/archive/score/list/export', 'URL', '487', '3', 'AUTH', '1', '1', '1');
 INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, related, enable, default_auth, front_display) VALUES ('3058', '总量分析', 'aggregateAnalysis', 'BUTTON', '487', '3', 'AUTH', '3057', '1', '0', '1');
+
+-- 2024-08-26
+INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('3059', '文档管理-批量下载', '/api/admin/mark/archive/document/download_batch', 'URL', '577', '7', 'AUTH', '1', '1', '1');
+UPDATE sys_privilege SET related = '466,467,494,544,585,586,587,588,3059' WHERE (id = '582');

+ 5 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkDocumentController.java

@@ -121,12 +121,15 @@ public class MarkDocumentController {
         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);
+        }
     }
 
     @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,
+    @OperationLogDetail(operationType = OperationTypeEnum.EXPORT, detail = "文档下载操作,考试id:{{examId}}, 试卷编号;{{paperNumber}}")
+    public void download(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
             @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber, HttpServletResponse response) {
         markDocumentService.downloadBatch(examId, paperNumber, response);
     }

+ 68 - 68
distributed-print/src/main/java/com/qmth/distributed/print/start/StartRunning.java

@@ -51,84 +51,84 @@ public class StartRunning implements CommandLineRunner {
         log.info("服务器启动时执行,机器心跳 end");
 
         log.info("服务器启动时执行,任务到期提醒定时任务 start");
-        Map expireJobMap = new HashMap();
-        expireJobMap.computeIfAbsent("name", v -> SendSmsExpireJob.class.getName());
+//        Map expireJobMap = new HashMap();
+//        expireJobMap.computeIfAbsent("name", v -> SendSmsExpireJob.class.getName());
         quartzService.deleteJob(JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.name(), JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.getGroupName());
-        // 每天15点定时任务
-        quartzService.addJob(SendSmsExpireJob.class, JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.name(), JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.getGroupName(), "0 0 15 * * ?", expireJobMap);
-        log.info("服务器启动时执行,任务到期提醒定时任务 end");
-
-        log.info("服务器启动时执行,任务逾期提醒定时任务 start");
-        Map orverdueJobMap = new HashMap();
-        orverdueJobMap.computeIfAbsent("name", v -> SendSmsOverdueJob.class.getName());
+//        // 每天15点定时任务
+//        quartzService.addJob(SendSmsExpireJob.class, JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.name(), JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.getGroupName(), "0 0 15 * * ?", expireJobMap);
+//        log.info("服务器启动时执行,任务到期提醒定时任务 end");
+//
+//        log.info("服务器启动时执行,任务逾期提醒定时任务 start");
+//        Map orverdueJobMap = new HashMap();
+//        orverdueJobMap.computeIfAbsent("name", v -> SendSmsOverdueJob.class.getName());
         quartzService.deleteJob(JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.name(), JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.getGroupName());
-        // 每天9点定时任务
-        quartzService.addJob(SendSmsOverdueJob.class, JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.name(), JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.getGroupName(), "0 0 9 * * ?", orverdueJobMap);
-        log.info("服务器启动时执行,任务逾期提醒定时任务 end");
-
-        log.info("服务器启动时执行,短信发送失败重发定时任务 start");
-        Map rensendJobMap = new HashMap();
-        rensendJobMap.computeIfAbsent("name", v -> ResendSmsJob.class.getName());
+//        // 每天9点定时任务
+//        quartzService.addJob(SendSmsOverdueJob.class, JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.name(), JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.getGroupName(), "0 0 9 * * ?", orverdueJobMap);
+//        log.info("服务器启动时执行,任务逾期提醒定时任务 end");
+//
+//        log.info("服务器启动时执行,短信发送失败重发定时任务 start");
+//        Map rensendJobMap = new HashMap();
+//        rensendJobMap.computeIfAbsent("name", v -> ResendSmsJob.class.getName());
         quartzService.deleteJob(JobEnum.SMS_NOTICE_TASK_RESEND_JOB.name(), JobEnum.SMS_NOTICE_TASK_RESEND_JOB.getGroupName());
-        // 每隔1小时定时任务
-        quartzService.addJob(ResendSmsJob.class, JobEnum.SMS_NOTICE_TASK_RESEND_JOB.name(), JobEnum.SMS_NOTICE_TASK_RESEND_JOB.getGroupName(), "0 0/30 * * * ?", rensendJobMap);
-        log.info("服务器启动时执行,短信发送失败重发定时任务 end");
-
-        log.info("服务器启动时执行,MQ信息同步定时任务 start");
-        Map redisMqJobMap = new HashMap();
-        redisMqJobMap.computeIfAbsent("name", v -> RedisMqSyncJob.class.getName());
+//        // 每隔1小时定时任务
+//        quartzService.addJob(ResendSmsJob.class, JobEnum.SMS_NOTICE_TASK_RESEND_JOB.name(), JobEnum.SMS_NOTICE_TASK_RESEND_JOB.getGroupName(), "0 0/30 * * * ?", rensendJobMap);
+//        log.info("服务器启动时执行,短信发送失败重发定时任务 end");
+//
+//        log.info("服务器启动时执行,MQ信息同步定时任务 start");
+//        Map redisMqJobMap = new HashMap();
+//        redisMqJobMap.computeIfAbsent("name", v -> RedisMqSyncJob.class.getName());
         quartzService.deleteJob(JobEnum.REDIS_MQ_JOB.name(), JobEnum.REDIS_MQ_JOB.getGroupName());
-        // 每分钟定时任务
-        quartzService.addJob(RedisMqSyncJob.class, JobEnum.REDIS_MQ_JOB.name(), JobEnum.REDIS_MQ_JOB.getGroupName(), "0 0/1 * * * ?", redisMqJobMap);
-        log.info("服务器启动时执行,MQ信息同步定时任务 end");
-
-        // 每天0点开始,每2小时一次
-        log.info("服务器启动时执行,自动统分定时任务 start");
-        Map reunifyJobMap = new HashMap();
-        reunifyJobMap.computeIfAbsent("name", v -> SubjectCalculateJob.class.getName());
+//        // 每分钟定时任务
+//        quartzService.addJob(RedisMqSyncJob.class, JobEnum.REDIS_MQ_JOB.name(), JobEnum.REDIS_MQ_JOB.getGroupName(), "0 0/1 * * * ?", redisMqJobMap);
+//        log.info("服务器启动时执行,MQ信息同步定时任务 end");
+//
+//        // 每天0点开始,每2小时一次
+//        log.info("服务器启动时执行,自动统分定时任务 start");
+//        Map reunifyJobMap = new HashMap();
+//        reunifyJobMap.computeIfAbsent("name", v -> SubjectCalculateJob.class.getName());
         quartzService.deleteJob(JobEnum.SYNC_REUNIFY_JOB.name(), JobEnum.SYNC_REUNIFY_JOB.getGroupName());
-        quartzService.addJob(SubjectCalculateJob.class, JobEnum.SYNC_REUNIFY_JOB.name(), JobEnum.SYNC_REUNIFY_JOB.getGroupName(), "0 0 0/2 * * ?", reunifyJobMap);
-        log.info("服务器启动时执行,自动统分定时任务 end");
-
-        // 每1分钟一次
-        log.info("服务器启动时执行,更新评卷员质量监控指标定时任务 start");
-        Map qualityJobMap = new HashMap();
-        qualityJobMap.computeIfAbsent("name", v -> UpdateMarkerQualityJob.class.getName());
+//        quartzService.addJob(SubjectCalculateJob.class, JobEnum.SYNC_REUNIFY_JOB.name(), JobEnum.SYNC_REUNIFY_JOB.getGroupName(), "0 0 0/2 * * ?", reunifyJobMap);
+//        log.info("服务器启动时执行,自动统分定时任务 end");
+//
+//        // 每1分钟一次
+//        log.info("服务器启动时执行,更新评卷员质量监控指标定时任务 start");
+//        Map qualityJobMap = new HashMap();
+//        qualityJobMap.computeIfAbsent("name", v -> UpdateMarkerQualityJob.class.getName());
         quartzService.deleteJob(JobEnum.UPDATE_MARKER_QUALITY.name(), JobEnum.UPDATE_MARKER_QUALITY.getGroupName());
-        quartzService.addJob(UpdateMarkerQualityJob.class, JobEnum.UPDATE_MARKER_QUALITY.name(), JobEnum.UPDATE_MARKER_QUALITY.getGroupName(), "0 */1 * * * ?", qualityJobMap);
-        log.info("服务器启动时执行,更新评卷员质量监控指标定时任务 end");
-
-        // 每1分钟一次
-        log.info("服务器启动时执行,评卷任务生成定时任务 start");
-        Map buildMarkTaskJobMap = new HashMap();
-        buildMarkTaskJobMap.computeIfAbsent("name", v -> BuildMarkTaskJob.class.getName());
+//        quartzService.addJob(UpdateMarkerQualityJob.class, JobEnum.UPDATE_MARKER_QUALITY.name(), JobEnum.UPDATE_MARKER_QUALITY.getGroupName(), "0 */1 * * * ?", qualityJobMap);
+//        log.info("服务器启动时执行,更新评卷员质量监控指标定时任务 end");
+//
+//        // 每1分钟一次
+//        log.info("服务器启动时执行,评卷任务生成定时任务 start");
+//        Map buildMarkTaskJobMap = new HashMap();
+//        buildMarkTaskJobMap.computeIfAbsent("name", v -> BuildMarkTaskJob.class.getName());
         quartzService.deleteJob(JobEnum.BUILD_MARK_TASK.name(), JobEnum.BUILD_MARK_TASK.getGroupName());
-        quartzService.addJob(BuildMarkTaskJob.class, JobEnum.BUILD_MARK_TASK.name(), JobEnum.BUILD_MARK_TASK.getGroupName(), "0 */1 * * * ?", buildMarkTaskJobMap);
-        log.info("服务器启动时执行,评卷任务生成定时任务 end");
-
-        // 每1分钟一次
-        log.info("服务器启动时执行,初始化阅卷数据定时任务 start");
-        Map initMarkDataJobMap = new HashMap();
-        initMarkDataJobMap.computeIfAbsent("name", v -> InitMarkDataJob.class.getName());
+//        quartzService.addJob(BuildMarkTaskJob.class, JobEnum.BUILD_MARK_TASK.name(), JobEnum.BUILD_MARK_TASK.getGroupName(), "0 */1 * * * ?", buildMarkTaskJobMap);
+//        log.info("服务器启动时执行,评卷任务生成定时任务 end");
+//
+//        // 每1分钟一次
+//        log.info("服务器启动时执行,初始化阅卷数据定时任务 start");
+//        Map initMarkDataJobMap = new HashMap();
+//        initMarkDataJobMap.computeIfAbsent("name", v -> InitMarkDataJob.class.getName());
         quartzService.deleteJob(JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA.getGroupName());
-        quartzService.addJob(InitMarkDataJob.class, JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA.getGroupName(), "0 */1 * * * ?", initMarkDataJobMap);
-        log.info("服务器启动时执行,初始化阅卷数据定时任务 end");
-
-        // 每10分钟一次
-        log.info("服务器启动时执行,清空过期任务定时任务 start");
-        Map clearTimeoutTaskJobMap = new HashMap();
-        clearTimeoutTaskJobMap.computeIfAbsent("name", v -> ClearTimeoutTaskJob.class.getName());
+//        quartzService.addJob(InitMarkDataJob.class, JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA.getGroupName(), "0 */1 * * * ?", initMarkDataJobMap);
+//        log.info("服务器启动时执行,初始化阅卷数据定时任务 end");
+//
+//        // 每10分钟一次
+//        log.info("服务器启动时执行,清空过期任务定时任务 start");
+//        Map clearTimeoutTaskJobMap = new HashMap();
+//        clearTimeoutTaskJobMap.computeIfAbsent("name", v -> ClearTimeoutTaskJob.class.getName());
         quartzService.deleteJob(JobEnum.CLEAR_TIMEOUT_TASK.name(), JobEnum.CLEAR_TIMEOUT_TASK.getGroupName());
-        quartzService.addJob(ClearTimeoutTaskJob.class, JobEnum.CLEAR_TIMEOUT_TASK.name(), JobEnum.CLEAR_TIMEOUT_TASK.getGroupName(), "0 0/1 6-23 * * ?", clearTimeoutTaskJobMap);
-        log.info("服务器启动时执行,清空过期任务定时任务 end");
-
-        // 每2分钟一次
-        log.info("服务器启动时执行,PDF生成定时任务 start");
-        Map createPdfJobMap = new HashMap();
-        createPdfJobMap.computeIfAbsent("name", v -> CreatePdfTaskJob.class.getName());
+//        quartzService.addJob(ClearTimeoutTaskJob.class, JobEnum.CLEAR_TIMEOUT_TASK.name(), JobEnum.CLEAR_TIMEOUT_TASK.getGroupName(), "0 0/1 6-23 * * ?", clearTimeoutTaskJobMap);
+//        log.info("服务器启动时执行,清空过期任务定时任务 end");
+//
+//        // 每2分钟一次
+//        log.info("服务器启动时执行,PDF生成定时任务 start");
+//        Map createPdfJobMap = new HashMap();
+//        createPdfJobMap.computeIfAbsent("name", v -> CreatePdfTaskJob.class.getName());
         quartzService.deleteJob(JobEnum.CREATE_PDF_JOB.name(), JobEnum.CREATE_PDF_JOB.getGroupName());
-        quartzService.addJob(CreatePdfTaskJob.class, JobEnum.CREATE_PDF_JOB.name(), JobEnum.CREATE_PDF_JOB.getGroupName(), "0 0/2 * * * ?", createPdfJobMap);
-        log.info("服务器启动时执行,PDF生成定时任务 end");
+//        quartzService.addJob(CreatePdfTaskJob.class, JobEnum.CREATE_PDF_JOB.name(), JobEnum.CREATE_PDF_JOB.getGroupName(), "0 0/2 * * * ?", createPdfJobMap);
+//        log.info("服务器启动时执行,PDF生成定时任务 end");
 
         log.info("服务器启动时执行 end");
     }

+ 6 - 10
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkDocumentServiceImpl.java

@@ -221,11 +221,12 @@ public class MarkDocumentServiceImpl extends ServiceImpl<MarkDocumentMapper, Mar
 
     @Override
     public void downloadBatch(Long examId, String paperNumber, HttpServletResponse response) {
-        List<MarkDocument> documentList = this.listByExamIdAndPaperNumber(examId, paperNumber);
+        List<MarkDocument> documentList = this.list(
+                new QueryWrapper<MarkDocument>().lambda().eq(MarkDocument::getExamId, examId)
+                        .eq(MarkDocument::getPaperNumber, 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);
@@ -233,7 +234,7 @@ public class MarkDocumentServiceImpl extends ServiceImpl<MarkDocumentMapper, Mar
             for (int i = 0; i < documentList.size(); i++) {
                 MarkDocument markDocument = documentList.get(i);
                 String path = markDocument.getFilePath();
-                String name = i + '-' + markDocument.getName();
+                String name = (i + 1) + "-" + markDocument.getName();
                 DocumentType documentType = markDocument.getType();
 
                 switch (documentType) {
@@ -271,7 +272,6 @@ public class MarkDocumentServiceImpl extends ServiceImpl<MarkDocumentMapper, Mar
                     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("试卷不存在");
@@ -283,15 +283,11 @@ public class MarkDocumentServiceImpl extends ServiceImpl<MarkDocumentMapper, Mar
                     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());
+                            filePath = tempFile.getPath() + File.separator + FilenameUtils.getName(filePathVo.getPath());
                             File scanPackageFile = fileUploadService.downloadFile(scanPackage.getPath(), filePath);
-                            writer.write(scanPackageFile, scanPackageFile.getName());
+                            writer.write(scanPackageFile, name, scanPackageFile.getName());
                             scanPackageFile.delete();
                         }
                     }