xiaofei 6 месяцев назад
Родитель
Сommit
5fbbcb1bec

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

@@ -73,7 +73,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
     @Resource
     private ExamTaskDetailService examTaskDetailService;
     @Resource
-    private ExamTaskService examTaskService;
+    private SysUserService sysUserService;
     @Resource
     private BasicAttachmentService basicAttachmentService;
     @Resource
@@ -436,7 +436,6 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
 
     @Override
     public void downloadCard(HttpServletResponse response, String id) {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         String rootPath = null;
         try {
             // 题卡详细信息
@@ -493,6 +492,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
             }
 
             String zipFileName = examCard.getTitle() + SystemConstant.ZIP_PREFIX;
+            SysUser sysUser = sysUserService.getById(ServletUtil.getRequestUserId());
             FileUtil.downloadEncryptZip(response, downloadPathFile, zipFileName, new String(Base64Util.decode(sysUser.getPassword())));
         } catch (Exception e) {
             e.printStackTrace();

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

@@ -351,7 +351,10 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             } else if ("examTime".equals(fieldsDto.getCode())) {
                 cell.setCellValue("10:00-12:00");
                 cell.setCellStyle(exampleStyle);
-            } else {
+            } else if("studentCode".equals(fieldsDto.getCode())){
+                cell.setCellValue("20240101");
+                cell.setCellStyle(exampleStyle);
+            }else {
                 cell.setCellValue("测试" + fieldsNameList.get(i).getName());
                 cell.setCellStyle(exampleStyle);
             }

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

@@ -1013,7 +1013,6 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 
     @Override
     public void paperDownload(HttpServletResponse response, Long examTaskId) {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         ExamTaskDetailPdfDownloadDto examTaskDetailPdfDownloadDto = examTaskDetailService.findPdfDownload(examTaskId);
         Optional.ofNullable(examTaskDetailPdfDownloadDto).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("数据异常"));
 
@@ -1079,6 +1078,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 }
             }
             String zipFileName = downloadPathFile.getName() + SystemConstant.ZIP_PREFIX;
+            SysUser sysUser = sysUserService.getById(ServletUtil.getRequestUserId());
             FileUtil.downloadEncryptZip(response, downloadPathFile, zipFileName, new String(Base64Util.decode(sysUser.getPassword())));
         } catch (Exception e) {
             throw ExceptionResultEnum.ERROR.exception("文件下载失败");

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

@@ -46,9 +46,9 @@ public class ScanStudentController extends BaseController {
     @PostMapping("absent/update")
     public AbsentManualUpdateVo absentManualUpdate(@ApiParam(name = "考试ID", required = true) @RequestParam Long examId,
             @ApiParam(name = "课程试卷号", required = true) @RequestParam String coursePaperId, @ApiParam(name = "学号", required = true) @RequestParam String studentCode,
-            @ApiParam(name = "状态", required = true) @RequestParam ScanStatus status) {
+            @ApiParam(name = "状态", required = true) @RequestParam Boolean manualAbsent) {
         validMarkPaperForScan(examId, coursePaperId);
-        return markStudentService.absentManualUpdate(examId, coursePaperId, studentCode, status);
+        return markStudentService.absentManualUpdate(examId, coursePaperId, studentCode, manualAbsent);
     }
 
     @ApiOperation(value = "更新漏扫状态")

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

@@ -462,15 +462,15 @@ public class SystemConstant {
     public static final String XLS = "xls";
     public static final String EXAMINATION_DESCRIBE = "说明\n" +
             "1、【学号】必填;\n" +
-            "2、【座位号】必填;\n" +
-            "3、【姓名】必填;\n" +
-            "4、【课程代码】必填,且与命题任务中的课程代码相互对应;\n" +
-            "5、【课程名称】必填,且与命题任务中的课程名称相互对应;\n" +
-            "6、【试卷编号】必填,且与命题任务中的试卷编号相互对应;\n" +
-            "7、【考点】必填;\n" +
-            "8、【考场】必填;\n" +
-            "9、【考试日期】必填,且格式为YYYY-MM-DD。例如2023-01-01;\n" +
-            "10、【考试时间】必填,且格式为HH:mm-HH:mm。例如10:00-12:00;\n" +
+            "2、【姓名】必填;\n" +
+            "3、【课程代码】必填,且与命题任务中的课程代码相互对应;\n" +
+            "4、【课程名称】必填,且与命题任务中的课程名称相互对应;\n" +
+            "5、【试卷编号】非必填,且与命题任务中的试卷编号相互对应;\n" +
+            "6、【考点】非必填;\n" +
+            "7、【考场】非必填;\n" +
+            "8、【考试日期】非必填,且格式为文本格式。例如2023-01-01;\n" +
+            "9、【考试时间】非必填,且格式为文本格式。例如10:00-12:00;\n" +
+            "10、【开课学院】必填;\n" +
             "11、请不要删除此行,也不要删除模板中的任何列。\n" +
             "12、使用前请先删除样例数据。\n";
 

+ 36 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/scananswer/AnswerQueryVo.java

@@ -37,6 +37,7 @@ public class AnswerQueryVo {
 
 	private Boolean omrAbsent;
 	private Boolean omrAbsentChecked;
+	private Boolean manualAbsent;
 
 	private Boolean assigned;
 
@@ -56,6 +57,9 @@ public class AnswerQueryVo {
 	private String paperType;
 
 	private PaperTypeCheckStatus paperTypeCheckStatus;
+	private Boolean missScan;
+	private Boolean omrBreach;
+	private Boolean manualBreach;
 
 	private List<AnswerPaperVo> papers;
 
@@ -187,6 +191,14 @@ public class AnswerQueryVo {
 		this.omrAbsentChecked = omrAbsentChecked;
 	}
 
+	public Boolean getManualAbsent() {
+		return manualAbsent;
+	}
+
+	public void setManualAbsent(Boolean manualAbsent) {
+		this.manualAbsent = manualAbsent;
+	}
+
 	public Boolean getAssigned() {
 		return assigned;
 	}
@@ -282,4 +294,28 @@ public class AnswerQueryVo {
 	public void setPaperTypeCheckStatus(PaperTypeCheckStatus paperTypeCheckStatus) {
 		this.paperTypeCheckStatus = paperTypeCheckStatus;
 	}
+
+	public Boolean getMissScan() {
+		return missScan;
+	}
+
+	public void setMissScan(Boolean missScan) {
+		this.missScan = missScan;
+	}
+
+	public Boolean getOmrBreach() {
+		return omrBreach;
+	}
+
+	public void setOmrBreach(Boolean omrBreach) {
+		this.omrBreach = omrBreach;
+	}
+
+	public Boolean getManualBreach() {
+		return manualBreach;
+	}
+
+	public void setManualBreach(Boolean manualBreach) {
+		this.manualBreach = manualBreach;
+	}
 }

+ 7 - 9
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/student/AbsentManualUpdateVo.java

@@ -5,22 +5,20 @@ import com.qmth.teachcloud.common.enums.ScanStatus;
 public class AbsentManualUpdateVo {
 
     
-    private ScanStatus status;
+    private Boolean manualAbsent;
     
     
     private long updateTime;
 
 
-	public ScanStatus getStatus() {
-		return status;
+	public Boolean getManualAbsent() {
+		return manualAbsent;
 	}
 
-
-	public void setStatus(ScanStatus status) {
-		this.status = status;
+	public void setManualAbsent(Boolean manualAbsent) {
+		this.manualAbsent = manualAbsent;
 	}
 
-
 	public long getUpdateTime() {
 		return updateTime;
 	}
@@ -29,10 +27,10 @@ public class AbsentManualUpdateVo {
 	public void setUpdateTime(long updateTime) {
 		this.updateTime = updateTime;
 	}
-    public static AbsentManualUpdateVo create(ScanStatus st) {
+    public static AbsentManualUpdateVo create(Boolean manualAbsent) {
     	AbsentManualUpdateVo vo = new AbsentManualUpdateVo();
         vo.setUpdateTime(System.currentTimeMillis());
-        vo.setStatus(st);
+        vo.setManualAbsent(manualAbsent);
         return vo;
     }
 

+ 1 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/refix/PageRefixDomain.java

@@ -98,7 +98,7 @@ public class PageRefixDomain {
 //		page.setSheetPath(sheetUri);
 		page.setAbsent(absent);
 		page.setBreach(breach);
-//		page.setPaperType(paperType);
+		page.setPaperType(paperType);
 		page.setQuestion(question);
 		page.setSelective(selective);
 		page.setRecogData(recogData);

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

@@ -154,7 +154,7 @@ public interface MarkStudentService extends IService<MarkStudent> {
 
     long countByExamIdAndPaperNumberAndSerialNumber(Long examId, String paperNumber, Integer serialNumber);
 
-    AbsentManualUpdateVo absentManualUpdate(Long examId, String coursePaperId, String studentCode, ScanStatus status);
+    AbsentManualUpdateVo absentManualUpdate(Long examId, String coursePaperId, String studentCode, Boolean manualAbsent);
 
     UpdateTimeVo confirm(Long examId, String coursePaperId, String studentCode, Boolean omrAbsent);
 

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

@@ -26,10 +26,7 @@ import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.*;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.common.enums.mark.SubjectiveStatus;
-import com.qmth.teachcloud.common.service.BasicCourseService;
-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.service.*;
 import com.qmth.teachcloud.common.util.*;
 import com.qmth.teachcloud.mark.bean.StringResult;
 import com.qmth.teachcloud.mark.bean.UpdateTimeVo;
@@ -96,6 +93,8 @@ import java.util.stream.Collectors;
  */
 @Service
 public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkStudent> implements MarkStudentService {
+    @Resource
+    private SysUserService sysUserService;
 
     @Resource
     private MarkPaperService markPaperService;
@@ -584,30 +583,26 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
                     }
                 } else {
                     // 缺考时,校验缺考检查任务是否做完
-                    if(page.getAbsent().getResult() ) {
-                        if (student.getOmrAbsent() && !student.getOmrAbsentChecked()){
-                            throw ExceptionResultEnum.ERROR.exception("缺考检查任务未完成,不能更新为缺考");
-                        }
-                        // 缺考时,校验人工绑定任务是否做完
-                        if (student.getAssigned() && !student.getAssignConfirmed()) {
-                            throw ExceptionResultEnum.ERROR.exception("人工绑定任务未完成,不能更新为缺考");
-                        }
-                        // 缺考时,校验卷型检查任务是否做完
-                        if (PaperTypeCheckStatus.WAITING.equals(student.getPaperTypeCheckStatus())) {
-                            throw ExceptionResultEnum.ERROR.exception("卷型检查任务未完成,不能更新为缺考");
-                        }
-                        // 缺考时,校验客观题检查任务是否全部做完
-                        if (page.getAbsent() != null && page.getAbsent().getResult()) {
-                            if (scanOmrTaskService.getStudentTaskCount(studentId, OmrTaskStatus.WAITING) > 0) {
-                                throw ExceptionResultEnum.ERROR.exception("客观题检查任务未完成,不能更新为缺考");
-                            }
+                    if (student.getOmrAbsent() && !student.getOmrAbsentChecked()) {
+                        throw ExceptionResultEnum.ERROR.exception("缺考检查任务未完成,不能更新为缺考");
+                    }
+                    // 缺考时,校验人工绑定任务是否做完
+                    if (student.getAssigned() && !student.getAssignConfirmed()) {
+                        throw ExceptionResultEnum.ERROR.exception("人工绑定任务未完成,不能更新为缺考");
+                    }
+                    // 缺考时,校验卷型检查任务是否做完
+                    if (PaperTypeCheckStatus.WAITING.equals(student.getPaperTypeCheckStatus())) {
+                        throw ExceptionResultEnum.ERROR.exception("卷型检查任务未完成,不能更新为缺考");
+                    }
+                    // 缺考时,校验客观题检查任务是否全部做完
+                    if (page.getAbsent() != null && page.getAbsent().getResult()) {
+                        if (scanOmrTaskService.getStudentTaskCount(studentId, OmrTaskStatus.WAITING) > 0) {
+                            throw ExceptionResultEnum.ERROR.exception("客观题检查任务未完成,不能更新为缺考");
                         }
                     }
 
                     // 人工指定后,识别缺考未处理的数据,不再处理,已处理的,不变
-                    if (!student.getOmrAbsentChecked()) {
-                        student.setOmrAbsent(false);
-                    }
+                    student.setOmrAbsent(false);
                     student.setManualAbsent(page.getAbsent() != null && page.getAbsent().getResult());
                 }
                 student.setAbsent(student.getOmrAbsent() || (student.getManualAbsent() != null && student.getManualAbsent()));
@@ -1095,25 +1090,25 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
     @Transactional
     @Override
     public AbsentManualUpdateVo absentManualUpdate(Long examId, String coursePaperId, String studentCode,
-                                                   ScanStatus status) {
+                                                   Boolean manualAbsent) {
         MarkStudent student = findByExamIdAndCoursePaperIdAndStudentCode(examId, coursePaperId, studentCode);
         if (student == null) {
             throw ExceptionResultEnum.ERROR.exception("考生未找到");
         }
-        if (ScanStatus.MANUAL_ABSENT.equals(status) && !ScanStatus.UNEXIST.equals(student.getScanStatus())) {
+        if (manualAbsent && !ScanStatus.UNEXIST.equals(student.getScanStatus())) {
             throw ExceptionResultEnum.ERROR.exception("考生不是未扫描状态");
         }
         LambdaUpdateWrapper<MarkStudent> lw = new LambdaUpdateWrapper<>();
         lw.set(MarkStudent::getScanStatus, ScanStatus.UNEXIST);
-        lw.set(MarkStudent::getManualAbsent, ScanStatus.MANUAL_ABSENT.equals(status));
-        lw.set(MarkStudent::getAbsent, student.getOmrAbsent() || ScanStatus.MANUAL_ABSENT.equals(status));
+        lw.set(MarkStudent::getManualAbsent, manualAbsent);
+        lw.set(MarkStudent::getAbsent, student.getOmrAbsent() || manualAbsent);
         lw.set(MarkStudent::getMissScan, false);
         lw.eq(MarkStudent::getId, student.getId());
         update(lw);
         markPaperService.updateAbsentCount(examId, student.getPaperNumber(),
                 this.countAbsentByExamIdAndPaperNumber(examId, student.getPaperNumber()));
 
-        return AbsentManualUpdateVo.create(status);
+        return AbsentManualUpdateVo.create(manualAbsent);
     }
 
     @Transactional
@@ -1124,6 +1119,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
 
         lw.set(MarkStudent::getOmrAbsentChecked, true);
         lw.set(MarkStudent::getOmrAbsent, omrAbsent);
+        lw.set(MarkStudent::getAbsent, omrAbsent && student.getManualAbsent() != null && student.getManualAbsent());
         if (omrAbsent) {
             lw.set(MarkStudent::getObjectiveScore, null);
             lw.set(MarkStudent::getObjectiveScoreList, null);
@@ -1338,7 +1334,8 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             log.debug("导出Excel结束");
 
             String zipFileName = downloadPathFile.getName() + SystemConstant.ZIP_PREFIX;
-            FileUtil.downloadEncryptZip(response, downloadPathFile, zipFileName, new String(Base64Util.decode(sysUser.getPassword())));
+            SysUser sysUser1 = sysUserService.getById(ServletUtil.getRequestUserId());
+            FileUtil.downloadEncryptZip(response, downloadPathFile, zipFileName, new String(Base64Util.decode(sysUser1.getPassword())));
         } catch (Exception e) {
             throw new RuntimeException(e);
         } finally {

+ 6 - 2
teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml

@@ -347,7 +347,7 @@
             and t.omr_breach = #{query.omrBreach}
         </if>
         <if test="query.manualBreach != null">
-            and t.is_manual_absent = #{query.manualBreach}
+            and t.is_manual_breach = #{query.manualBreach}
         </if>
         <if test="dpr != null and dpr.requestUserId != null">
             AND t.create_id = #{dpr.requestUserId}
@@ -368,6 +368,7 @@
                t.absent_suspect,
                t.omr_absent,
                t.omr_absent_checked,
+               t.is_manual_absent manualAbsent,
                t.assigned,
                t.invalid,
                t.incomplete,
@@ -377,7 +378,10 @@
                t.paper_number coursePaperNumber,
                c.paper_count cardPaperCount,
                t.paper_type paperType,
-               t.paper_type_check_status paperTypeCheckStatus
+               t.paper_type_check_status paperTypeCheckStatus,
+               t.miss_scan missScan,
+               t.omr_breach omrBreach,
+               t.is_manual_breach manualBreach
         from mark_student t
         inner join basic_exam_student bes on t.basic_student_id = bes.id
         left join scan_answer_card c on t.exam_id=c.exam_id and t.card_number=c.number