xiaofei 7 місяців тому
батько
коміт
2409463c06

+ 22 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ExamTaskApplyPram.java

@@ -45,6 +45,12 @@ public class ExamTaskApplyPram extends BaseEntity implements Serializable {
     @TableField(exist = false)
     private Long customFlowId;
 
+    @ApiModelProperty(value = "附件")
+    private String paperConfirmAttachmentIds;
+
+    @ApiModelProperty(value = "附件说明")
+    private String remark;
+
     @ApiModelProperty(value = "版本号")
     @TableField(exist = false)
     private Integer version;
@@ -104,4 +110,20 @@ public class ExamTaskApplyPram extends BaseEntity implements Serializable {
     public void setVersion(Integer version) {
         this.version = version;
     }
+
+    public String getPaperConfirmAttachmentIds() {
+        return paperConfirmAttachmentIds;
+    }
+
+    public void setPaperConfirmAttachmentIds(String paperConfirmAttachmentIds) {
+        this.paperConfirmAttachmentIds = paperConfirmAttachmentIds;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
 }

+ 27 - 14
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -872,15 +872,14 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         }
 //        }
 
-        UpdateWrapper<ExamTask> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.lambda()
-                .set(ExamTask::getStatus, ExamStatusEnum.SUBMIT)
-                .set(ExamTask::getOpenAb, examTaskApplyPram.getOpenAb())
-                .set(ExamTask::getUpdateId, sysUser.getId())
-                .set(ExamTask::getUpdateTime, System.currentTimeMillis())
-                .set(ExamTask::getExamTaskContent, examTaskApplyPram.getExamTaskContent())
-                .eq(ExamTask::getId, examTask.getId());
-        this.update(updateWrapper);
+        examTask.setStatus(ExamStatusEnum.SUBMIT);
+        examTask.setOpenAb(examTaskApplyPram.getOpenAb());
+        examTask.setPaperConfirmAttachmentIds(examTaskApplyPram.getPaperConfirmAttachmentIds());
+        examTask.setRemark(examTaskApplyPram.getRemark());
+        examTask.setUpdateId(sysUser.getId());
+        examTask.setUpdateTime(System.currentTimeMillis());
+        examTask.setExamTaskContent(examTaskApplyPram.getExamTaskContent());
+        this.updateById(examTask);
 
         examTaskDetailService.deleteByExamTaskId(examTaskApplyPram.getExamTaskId());
         // 新建试卷
@@ -909,8 +908,15 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 
             String paperAttachmentIds = examTaskDetail.getPaperAttachmentIds();
             List<PaperInfoVo> paperInfoVoList = ExamTaskUtil.parsePaperAttachmentPath(paperAttachmentIds);
+            List<Long> cardIds = paperInfoVoList.stream().filter(m -> StringUtils.isNotBlank(m.getCardId())).map(m -> Long.parseLong(m.getCardId())).collect(Collectors.toList());
+            for (Long cardId : cardIds) {
+                ExamCard examCard = examCardService.getById(cardId);
+                if(!examTask.getOpenAb().equals(examCard.getOpenAb())){
+                    throw ExceptionResultEnum.ERROR.exception(examTask.getOpenAb() && !examCard.getOpenAb() ? "命题任务开启了AB卷,请选择AB卷题卡或者编辑题卡开启AB卷": "命题任务未开启了AB卷,请选择单题卡或者编辑题卡关闭AB卷");
+                }
+            }
             // 将题卡更新为已绑定
-            examCardService.updateUsedById(paperInfoVoList.stream().filter(m -> StringUtils.isNotBlank(m.getCardId())).map(m -> Long.parseLong(m.getCardId())).collect(Collectors.toList()));
+            examCardService.updateUsedById(cardIds);
             // 更新题库试卷表
             for (PaperInfoVo paperInfoVo : paperInfoVoList) {
                 if (StringUtils.isNotBlank(paperInfoVo.getUuid())) {
@@ -990,8 +996,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     public ExamTaskDetailCardDto applyGetOne(Long examTaskId, String source) {
         ExamTaskDetailCardDto detailCardDto = this.baseMapper.applyGetOne(examTaskId, source);
         if (detailCardDto != null) {
-            ExamTask examTask = examTaskService.getById(examTaskId);
-            BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamId(examTask.getExamId());
+            BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamId(Long.valueOf(detailCardDto.getExamId()));
             if (basicPrintConfig != null) {
                 detailCardDto.setPrintContent(basicPrintConfig.getPrintContent());
                 detailCardDto.setReview(basicPrintConfig.getReview());
@@ -1297,8 +1302,16 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 
                 String paperAttachmentIds = examTaskDetail.getPaperAttachmentIds();
                 List<PaperInfoVo> paperInfoVoList = ExamTaskUtil.parsePaperAttachmentPath(paperAttachmentIds);
+
+                List<Long> cardIds = paperInfoVoList.stream().filter(m -> StringUtils.isNotBlank(m.getCardId())).map(m -> Long.parseLong(m.getCardId())).collect(Collectors.toList());
+                for (Long cardId : cardIds) {
+                    ExamCard examCard = examCardService.getById(cardId);
+                    if(examTask.getOpenAb().equals(examCard.getOpenAb())){
+                        throw ExceptionResultEnum.ERROR.exception(examTask.getOpenAb() && !examCard.getOpenAb() ? "命题任务开启了AB卷,请选择AB卷题卡或者编辑题卡开启AB卷": "命题任务未开启了AB卷,请选择单题卡或者编辑题卡关闭AB卷");
+                    }
+                }
                 // 将题卡更新为已绑定
-                examCardService.updateUsedById(paperInfoVoList.stream().filter(m -> StringUtils.isNotBlank(m.getCardId())).map(m -> Long.parseLong(m.getCardId())).collect(Collectors.toList()));
+                examCardService.updateUsedById(cardIds);
                 // 更新题库试卷表
                 for (PaperInfoVo paperInfoVo : paperInfoVoList) {
                     if (StringUtils.isNotBlank(paperInfoVo.getUuid())) {
@@ -1413,7 +1426,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                         if (basicStudentIdUserMap.containsKey(i)) {
                             BasicExamStudent basicExamStudent = basicExamStudentService.getById(i);
                             if (basicExamStudent != null) {
-//                                throw ExceptionResultEnum.ERROR.exception("教学班[" + basicExamStudent.getTeachClassName() + "]内有考生已被[" + basicStudentIdUserMap.get(i) + "]选择");
+                                throw ExceptionResultEnum.ERROR.exception("教学班[" + basicExamStudent.getTeachClassName() + "]内有考生已被[" + basicStudentIdUserMap.get(i) + "]选择");
                             }
                         }
                     });

+ 3 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/ImportLogicServiceImpl.java

@@ -817,6 +817,9 @@ public class ImportLogicServiceImpl implements ImportLogicService {
                     for (Map.Entry<String, String> entry : m.entrySet()) {
                         // 必填字段
                         if (requiredMap.containsKey(entry.getKey())) {
+                            if(entry.getValue() == null){
+                                continue;
+                            }
                             EnumResult enumResult = requiredMap.get(entry.getKey());
                             try {
                                 Field declaredField = aClass.getDeclaredField(enumResult.getCode());

+ 2 - 0
distributed-print/install/mysql/upgrade/3.4.2.sql

@@ -142,3 +142,5 @@ ALTER TABLE `t_b_task` CHANGE COLUMN `paper_number` `paper_number` VARCHAR(100)
 ALTER TABLE `t_sync_exam_student_score` CHANGE COLUMN `paper_number` `paper_number` VARCHAR(100) NULL DEFAULT NULL COMMENT '试卷编号' ;
 
 ALTER TABLE `exam_card` ADD COLUMN `open_ab` TINYINT(1) NULL DEFAULT 0 COMMENT '是否AB卷(AB卷题卡)' AFTER `page_size`;
+
+update mark_paper set paper_file_path = concat('[',paper_file_path, ']') where paper_file_path is not null;

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanAnswerController.java

@@ -78,7 +78,6 @@ public class ScanAnswerController extends BaseController {
     @ApiOperation(value = "查询答题卡扫描详情")
     @RequestMapping(value = "query", method = RequestMethod.POST)
     public Result query(@Validated AnswerQueryDomain query) {
-        System.out.println(JSON.toJSONString(query));
         return ResultUtil.ok(markStudentService.query(query));
     }
 

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

@@ -95,7 +95,7 @@ public class StartRunning implements CommandLineRunner {
         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);
+//        quartzService.addJob(UpdateMarkerQualityJob.class, JobEnum.UPDATE_MARKER_QUALITY.name(), JobEnum.UPDATE_MARKER_QUALITY.getGroupName(), "0 */1 * * * ?", qualityJobMap);
         log.info("服务器启动时执行,更新评卷员质量监控指标定时任务 end");
 
         // 每1分钟一次
@@ -103,7 +103,7 @@ public class StartRunning implements CommandLineRunner {
         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);
+//        quartzService.addJob(BuildMarkTaskJob.class, JobEnum.BUILD_MARK_TASK.name(), JobEnum.BUILD_MARK_TASK.getGroupName(), "0 */1 * * * ?", buildMarkTaskJobMap);
         log.info("服务器启动时执行,评卷任务生成定时任务 end");
 
         // 每1分钟一次
@@ -111,7 +111,7 @@ public class StartRunning implements CommandLineRunner {
         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);
+//        quartzService.addJob(InitMarkDataJob.class, JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA.getGroupName(), "0 */1 * * * ?", initMarkDataJobMap);
         log.info("服务器启动时执行,初始化阅卷数据定时任务 end");
 
         // 每10分钟一次
@@ -119,7 +119,7 @@ public class StartRunning implements CommandLineRunner {
         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);
+//        quartzService.addJob(ClearTimeoutTaskJob.class, JobEnum.CLEAR_TIMEOUT_TASK.name(), JobEnum.CLEAR_TIMEOUT_TASK.getGroupName(), "0 0/1 6-23 * * ?", clearTimeoutTaskJobMap);
         log.info("服务器启动时执行,清空过期任务定时任务 end");
 
         // 每2分钟一次
@@ -127,7 +127,7 @@ public class StartRunning implements CommandLineRunner {
         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);
+//        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");

+ 8 - 7
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/scananswer/AnswerQueryDomain.java

@@ -7,6 +7,7 @@ import javax.validation.constraints.NotNull;
 import com.qmth.teachcloud.common.enums.ScanStatus;
 import com.qmth.teachcloud.mark.enums.PaperTypeCheckStatus;
 import com.qmth.teachcloud.mark.utils.PagerQuery;
+import com.sun.org.apache.xpath.internal.operations.Bool;
 import io.swagger.annotations.ApiModelProperty;
 
 public class AnswerQueryDomain extends PagerQuery {
@@ -54,12 +55,12 @@ public class AnswerQueryDomain extends PagerQuery {
 	private String markPaperStatus;
 	private Boolean missScan;
 	private String studentCodeOrName;
-	@ApiModelProperty("试卷编号")
+	@ApiModelProperty("卷型")
 	private String paperType;
 	@ApiModelProperty("卷型检查类型")
 	private PaperTypeCheckStatus paperTypeCheckStatus;
-	@ApiModelProperty("违纪类型(识别违纪:OMR_BREACH,人工指定违纪:MANUAL_BREACH)")
-	private String breachStatus;
+	@ApiModelProperty("识别违纪")
+	private Boolean omrBreach;
 	public Long getExamId() {
 		return examId;
 	}
@@ -241,11 +242,11 @@ public class AnswerQueryDomain extends PagerQuery {
 		this.paperTypeCheckStatus = paperTypeCheckStatus;
 	}
 
-	public String getBreachStatus() {
-		return breachStatus;
+	public Boolean getOmrBreach() {
+		return omrBreach;
 	}
 
-	public void setBreachStatus(String breachStatus) {
-		this.breachStatus = breachStatus;
+	public void setOmrBreach(Boolean omrBreach) {
+		this.omrBreach = omrBreach;
 	}
 }

+ 17 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkDocumentServiceImpl.java

@@ -74,7 +74,18 @@ public class MarkDocumentServiceImpl extends ServiceImpl<MarkDocumentMapper, Mar
         List<MarkDocument> list = this.list(queryWrapper);
         list.sort(Comparator.comparingInt(d -> d.getType().getValue()));
         for (MarkDocument d : list) {
-            d.setFilePath(teachcloudCommonService.filePreview(d.getFilePath()));
+            //
+            if(DocumentType.PAPER.equals(d.getType())){
+                List<String> urlList = new ArrayList<>();
+                if(StringUtils.isNotBlank(d.getFilePath())){
+                    for (String s : JSON.parseArray(d.getFilePath(), String.class)) {
+                        urlList.add(teachcloudCommonService.filePreview(s));
+                    }
+                    d.setFilePath(JSON.toJSONString(urlList));
+                }
+            } else{
+                d.setFilePath(teachcloudCommonService.filePreview(d.getFilePath()));
+            }
         }
         return list;
     }
@@ -186,7 +197,11 @@ public class MarkDocumentServiceImpl extends ServiceImpl<MarkDocumentMapper, Mar
             }
             if (documentType.equals(DocumentType.PAPER)) {
                 if (StringUtils.isNotBlank(markPaper.getPaperFilePath())) {
-                    markDocument.setFileCount(1);
+                    List<String> urlList = new ArrayList<>();
+                    if(StringUtils.isNotBlank(markPaper.getPaperFilePath())){
+                        urlList = JSON.parseArray(markPaper.getPaperFilePath(), String.class);
+                    }
+                    markDocument.setFileCount(urlList.size());
                     markDocument.setFilePath(markPaper.getPaperFilePath());
                 }
             } else if (documentType.equals(DocumentType.ANSWER)) {

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

@@ -1109,7 +1109,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
     public UpdateTimeVo confirm(Long examId, String coursePaperId, String studentCode, Boolean omrAbsent) {
         MarkStudent student = findByExamIdAndCoursePaperIdAndStudentCode(examId, coursePaperId, studentCode);
         LambdaUpdateWrapper<MarkStudent> lw = new LambdaUpdateWrapper<>();
-        lw.set(MarkStudent::getOmrAbsentChecked, omrAbsent);
+        lw.set(MarkStudent::getOmrAbsentChecked, true);
         if (omrAbsent) {
             lw.set(MarkStudent::getObjectiveScore, null);
             lw.set(MarkStudent::getObjectiveScoreList, null);

+ 3 - 9
teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml

@@ -295,7 +295,6 @@
         <if test="query.examRoom != null and query.examRoom !=''">
             and bes.exam_room=#{query.examRoom}
         </if>
-
         <if test="query.absentSuspect != null">
             and t.absent_suspect=#{query.absentSuspect}
         </if>
@@ -327,18 +326,13 @@
             and (t.student_code=#{query.studentCodeOrName} or bes.student_name=#{query.studentCodeOrName})
         </if>
         <if test="query.paperType != null and query.paperType != ''">
-            and t.paper_type=#{query.paperType}
+            and ifnull(t.paper_type, '#') = #{query.paperType}
         </if>
         <if test="query.paperTypeCheckStatus != null">
             and t.paper_type_check_status=#{query.paperTypeCheckStatus}
         </if>
-        <if test="query.breachStatus != null">
-            <if test="query.breachStatus == 'OMR_BREACH'">
-                t.omr_breach = true
-            </if>
-            <if test="query.breachStatus == 'MANUAL_BREACH'">
-                t.is_breach = true
-            </if>
+        <if test="query.omrBreach != null">
+            and t.omr_breach = #{query.omrBreach}
         </if>
         <if test="dpr != null and dpr.requestUserId != null">
             AND t.create_id = #{dpr.requestUserId}

+ 10 - 7
teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java

@@ -41,10 +41,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -92,10 +89,16 @@ public class PrintFinishServiceImpl implements PrintFinishService {
             if (markPaper == null) {
                 MarkPaper insertMarkPaper = new MarkPaper(dto.getExamId(), dto.getCourseId(), dto.getPaperNumber(), dto.getCoursePaperId(), dto.getCreateId(), dto.getSerialNumber(), dto.getPaperType());
                 if (CollectionUtils.isNotEmpty(paperInfoVos)) {
-                    BasicAttachment basicAttachment = basicAttachmentService.getById(paperInfoVos.get(0).getAttachmentId());
-                    if (basicAttachment != null) {
-                        insertMarkPaper.setPaperFilePath(basicAttachment.getPath());
+                    // 按AB排序
+                    paperInfoVos.sort(Comparator.comparing(PaperInfoVo::getName));
+                    List<String> urlList = new ArrayList<>();
+                    for (PaperInfoVo paperInfoVo : paperInfoVos) {
+                        BasicAttachment basicAttachment = basicAttachmentService.getById(paperInfoVo.getAttachmentId());
+                        if (basicAttachment != null) {
+                            urlList.add(basicAttachment.getPath());
+                        }
                     }
+                    insertMarkPaper.setPaperFilePath(JSON.toJSONString(urlList));
                 }
                 markPaperService.save(insertMarkPaper);
             }