xiaofei před 7 měsíci
rodič
revize
b3e16bcc97

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

@@ -864,7 +864,6 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         }
         }
 
 
         Map<String, Object> map = new HashMap<>();
         Map<String, Object> map = new HashMap<>();
-//        if (ExamStatusEnum.SUBMIT.name().equals(examTaskDetail.getOperateType()) && examTask.getReview()) {
         // 审核一级
         // 审核一级
         Task task = taskService.createTaskQuery().processInstanceId(String.valueOf(examTask.getFlowId())).singleResult();
         Task task = taskService.createTaskQuery().processInstanceId(String.valueOf(examTask.getFlowId())).singleResult();
         if (Objects.nonNull(task)) {
         if (Objects.nonNull(task)) {
@@ -875,7 +874,6 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             map = activitiService.taskApprove(map);
             map = activitiService.taskApprove(map);
             map.put(SystemConstant.SEND_FLOW_MQ, true);
             map.put(SystemConstant.SEND_FLOW_MQ, true);
         }
         }
-//        }
 
 
         examTask.setStatus(ExamStatusEnum.SUBMIT);
         examTask.setStatus(ExamStatusEnum.SUBMIT);
         examTask.setOpenAb(examTaskApplyPram.getOpenAb());
         examTask.setOpenAb(examTaskApplyPram.getOpenAb());
@@ -1764,6 +1762,8 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             }
             }
             result.addAll(examTaskStudentObjectResultMap.values());
             result.addAll(examTaskStudentObjectResultMap.values());
         }
         }
+        // 按教学班排序
+        result.sort(Comparator.comparing(ExamTaskStudentObjectResult::getTeachClassName));
         return result;
         return result;
     }
     }
 
 

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

@@ -237,9 +237,9 @@ public class OpenApiServiceImpl implements OpenApiService {
             examStudentScore.setTeacherName(gradeBatchStudentClazz.getTeacherName());
             examStudentScore.setTeacherName(gradeBatchStudentClazz.getTeacherName());
             examStudentScore.setTeacherCode(gradeBatchStudentClazz.getTeacherNumber());
             examStudentScore.setTeacherCode(gradeBatchStudentClazz.getTeacherNumber());
             int status = 1;
             int status = 1;
-            if (e.getAbsent() || e.getManualAbsent() || e.getOmrAbsent()) {
+            if (e.getAbsent() || (e.getManualAbsent() != null && e.getManualAbsent()) || e.getOmrAbsent()) {
                 status = 2;
                 status = 2;
-            } else if (e.getBreach() || e.getManualBreach() || e.getOmrBreach()) {
+            } else if (e.getBreach() || (e.getManualBreach() != null && e.getManualBreach()) || e.getOmrBreach()) {
                 status = 3;
                 status = 3;
             }
             }
             examStudentScore.setStatus(status);
             examStudentScore.setStatus(status);

+ 7 - 1
distributed-print/install/mysql/upgrade/3.4.2.sql

@@ -178,4 +178,10 @@ ALTER TABLE t_c_paper_struct ADD CONSTRAINT t_c_paper_struct_unique UNIQUE KEY (
 ALTER TABLE t_c_final_score DROP KEY t_c_final_score_unique;
 ALTER TABLE t_c_final_score DROP KEY t_c_final_score_unique;
 ALTER TABLE t_c_final_score ADD CONSTRAINT t_c_final_score_unique UNIQUE KEY (culture_program_id,exam_id,course_id,paper_number,student_code);
 ALTER TABLE t_c_final_score ADD CONSTRAINT t_c_final_score_unique UNIQUE KEY (culture_program_id,exam_id,course_id,paper_number,student_code);
 ALTER TABLE t_c_usual_score DROP KEY t_c_usual_score_unique;
 ALTER TABLE t_c_usual_score DROP KEY t_c_usual_score_unique;
-ALTER TABLE t_c_usual_score ADD CONSTRAINT t_c_usual_score_unique UNIQUE KEY (culture_program_id,exam_id,course_id,paper_number,student_code);
+ALTER TABLE t_c_usual_score ADD CONSTRAINT t_c_usual_score_unique UNIQUE KEY (culture_program_id,exam_id,course_id,paper_number,student_code);
+
+update mark_student set is_manual_absent = 1, scan_status = 'UNEXIST' where scan_status = 'MANUAL_ABSENT';
+
+ALTER TABLE `mark_student`
+    CHANGE COLUMN `is_manual_absent` `is_manual_absent` TINYINT(4) NULL DEFAULT NULL COMMENT '是否人工指定缺考' ,
+    CHANGE COLUMN `is_manual_breach` `is_manual_breach` TINYINT(1) NULL DEFAULT NULL COMMENT '人工指定缺考' ;

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/UploadFileEnum.java

@@ -39,7 +39,7 @@ public enum UploadFileEnum {
     /**
     /**
      * 阅卷考生题卡原图(path:{uploadType}/{examId}/{coursePaperId}/{studentCode}/时间戳-{pageIndex}.jpg)
      * 阅卷考生题卡原图(path:{uploadType}/{examId}/{coursePaperId}/{studentCode}/时间戳-{pageIndex}.jpg)
      */
      */
-    SHEET("sheet", "private", "%s/%d/%s/%s/%d-%d.%s"),
+    SHEET("sheet", "private", "%s/%d/%s/%d/%s/%d-%d.%s"),
     /**
     /**
      * 卡格式文件(path:{uploadType}/{examId}/{coursePaperId}/{number}.json)
      * 卡格式文件(path:{uploadType}/{examId}/{coursePaperId}/{number}.json)
      */
      */

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

@@ -15,7 +15,7 @@ public interface MarkFileService {
 	 String uploadSheet(InputStream ins, String md5, Long examId, Long batchId, String coursePaperId,String studentCode, Integer paperNumber,
 	 String uploadSheet(InputStream ins, String md5, Long examId, Long batchId, String coursePaperId,String studentCode, Integer paperNumber,
 	            Integer pageIndex);
 	            Integer pageIndex);
 
 
-	String getSheetUri(Long examId, String coursePaperId, String studentCode, Integer paperNumber, Integer pageIndex);
+	String getSheetUri(Long examId, String coursePaperId, Long batchId, String studentCode, Integer paperNumber, Integer pageIndex);
 
 
 	String getPackageUri(Long examId, String coursePaperId, String packageCode, Integer packageNo);
 	String getPackageUri(Long examId, String coursePaperId, String packageCode, Integer packageNo);
 
 

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

@@ -213,8 +213,6 @@ public interface MarkStudentService extends IService<MarkStudent> {
 
 
     MarkStudent assembleByBasicExamStudent(BasicExamStudent basicExamStudent, MarkPaper markPaper, Set<String> secretNumberSet);
     MarkStudent assembleByBasicExamStudent(BasicExamStudent basicExamStudent, MarkPaper markPaper, Set<String> secretNumberSet);
 
 
-    void deleteByExamIdAndPaperNumberAndStudentCode(Long examId, String paperNumber, String studentCode);
-
     void deleteByBasicStudentId(List<Long> basicExamStudentIds);
     void deleteByBasicStudentId(List<Long> basicExamStudentIds);
 
 
     Integer maxCardNumber(Long examId, String paperNumber);
     Integer maxCardNumber(Long examId, String paperNumber);

+ 3 - 3
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkFileServiceImpl.java

@@ -68,7 +68,7 @@ public class MarkFileServiceImpl implements MarkFileService {
     @Override
     @Override
     public String uploadSheet(InputStream in, String md5, Long examId, Long batchId, String coursePaperId,
     public String uploadSheet(InputStream in, String md5, Long examId, Long batchId, String coursePaperId,
                               String studentCode, Integer paperNumber, Integer pageIndex) {
                               String studentCode, Integer paperNumber, Integer pageIndex) {
-        String path = getSheetUri(examId, coursePaperId, studentCode, paperNumber, pageIndex);
+        String path = getSheetUri(examId, coursePaperId, batchId, studentCode, paperNumber, pageIndex);
         try {
         try {
             return fileStoreUtils.uploadFile(in, md5, UploadFileEnum.SHEET, path);
             return fileStoreUtils.uploadFile(in, md5, UploadFileEnum.SHEET, path);
         } catch (RuntimeException e) {
         } catch (RuntimeException e) {
@@ -86,8 +86,8 @@ public class MarkFileServiceImpl implements MarkFileService {
     }
     }
 
 
     @Override
     @Override
-    public String getSheetUri(Long examId, String coursePaperId, String studentCode, Integer paperNumber, Integer pageIndex) {
-        return UploadFileEnum.SHEET.getPath(UploadFileEnum.SHEET.getTitle(), examId, coursePaperId, studentCode, paperNumber, pageIndex, FormatType.JPG.name().toLowerCase());
+    public String getSheetUri(Long examId, String coursePaperId, Long batchId, String studentCode, Integer paperNumber, Integer pageIndex) {
+        return UploadFileEnum.SHEET.getPath(UploadFileEnum.SHEET.getTitle(), examId, coursePaperId, batchId, studentCode, paperNumber, pageIndex, FormatType.JPG.name().toLowerCase());
     }
     }
 
 
     @Override
     @Override

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

@@ -1171,7 +1171,7 @@ public class MarkServiceImpl implements MarkService {
 
 
     private void calculate(MarkStudent student) {
     private void calculate(MarkStudent student) {
         // 未上传、缺考的考生不统分
         // 未上传、缺考的考生不统分
-        if (!student.getUpload() || student.getAbsent() || student.getOmrAbsent() || student.getManualAbsent()) {
+        if (!student.getUpload() || student.getAbsent() || student.getOmrAbsent() || (student.getManualAbsent() != null && student.getManualAbsent())) {
             return;
             return;
         }
         }
         try {
         try {

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

@@ -502,6 +502,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         markStudent.setExamId(examId);
         markStudent.setExamId(examId);
         markStudent.setCourseId(courseId);
         markStudent.setCourseId(courseId);
         markStudent.setCoursePaperId(coursePaperId);
         markStudent.setCoursePaperId(coursePaperId);
+        markStudent.setScanStatus(ScanStatus.SCANNED);
         markStudent.setPaperTypeCheckStatus(status);
         markStudent.setPaperTypeCheckStatus(status);
         return baseMapper.selectCountByQuery(markStudent, dpr);
         return baseMapper.selectCountByQuery(markStudent, dpr);
     }
     }
@@ -586,8 +587,8 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
                     student.setManualAbsent(page.getAbsent() != null && page.getAbsent().getResult());
                     student.setManualAbsent(page.getAbsent() != null && page.getAbsent().getResult());
                     student.setManualBreach(page.getBreach() != null && page.getBreach().getResult());
                     student.setManualBreach(page.getBreach() != null && page.getBreach().getResult());
                 }
                 }
-                student.setAbsent(student.getOmrAbsent() || student.getManualAbsent());
-                student.setBreach(student.getOmrBreach() || student.getManualBreach());
+                student.setAbsent(student.getOmrAbsent() || (student.getManualAbsent() != null && student.getManualAbsent()));
+                student.setBreach(student.getOmrBreach() || (student.getManualBreach() != null && student.getManualBreach()));
 
 
                 // 根据卷型识别结果更新考生卷型,如果卷型识别结果异常则添加到卷型检查中
                 // 根据卷型识别结果更新考生卷型,如果卷型识别结果异常则添加到卷型检查中
                 StringResult paperTypeResult = page.getPaperType();
                 StringResult paperTypeResult = page.getPaperType();
@@ -739,7 +740,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             studentObjectiveDetailDto.setSubjectiveScore(
             studentObjectiveDetailDto.setSubjectiveScore(
                     markStudent.getSubjectiveScore() != null ? markStudent.getSubjectiveScore() : 0);
                     markStudent.getSubjectiveScore() != null ? markStudent.getSubjectiveScore() : 0);
             studentObjectiveDetailDto.setUpload(markStudent.getUpload());
             studentObjectiveDetailDto.setUpload(markStudent.getUpload());
-            studentObjectiveDetailDto.setAbsent(markStudent.getAbsent() || markStudent.getManualAbsent() || markStudent.getOmrAbsent());
+            studentObjectiveDetailDto.setAbsent(markStudent.getAbsent() || (markStudent.getManualAbsent() != null && markStudent.getManualAbsent()) || markStudent.getOmrAbsent());
             studentObjectiveDetailDto.setSheetUrls(this.buildSheetUrls(studentId));
             studentObjectiveDetailDto.setSheetUrls(this.buildSheetUrls(studentId));
 
 
             List<MarkQuestionAnswerVo> questions = markQuestionService.listQuestionAnswerByExamIdAndPaperNumberAndPaperType(
             List<MarkQuestionAnswerVo> questions = markQuestionService.listQuestionAnswerByExamIdAndPaperNumberAndPaperType(
@@ -845,7 +846,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
     @Override
     @Override
     public void calculateObjectiveScore(MarkStudent student) {
     public void calculateObjectiveScore(MarkStudent student) {
         // 缺考状态不统分(人工指定缺考、识别缺考)
         // 缺考状态不统分(人工指定缺考、识别缺考)
-        if (!student.getManualAbsent() && !student.getAbsent() && !student.getOmrAbsent()) {
+        if ((student.getManualAbsent() != null && !student.getManualAbsent()) && !student.getAbsent() && !student.getOmrAbsent()) {
             ScoreCalculateUtil util = ScoreCalculateUtil.instance(student);
             ScoreCalculateUtil util = ScoreCalculateUtil.instance(student);
             ScoreInfo info = util.calculate(markQuestionService.listQuestionAnswerByExamIdAndPaperNumberAndPaperType(
             ScoreInfo info = util.calculate(markQuestionService.listQuestionAnswerByExamIdAndPaperNumberAndPaperType(
                     student.getExamId(), student.getPaperNumber(), student.getPaperType(), true), null);
                     student.getExamId(), student.getPaperNumber(), student.getPaperType(), true), null);
@@ -1412,7 +1413,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             lambdaQueryWrapper.eq(MarkStudent::getSubjectiveStatus, status);
             lambdaQueryWrapper.eq(MarkStudent::getSubjectiveStatus, status);
         }
         }
         lambdaQueryWrapper.eq(MarkStudent::getUpload, true).eq(MarkStudent::getAbsent, false)
         lambdaQueryWrapper.eq(MarkStudent::getUpload, true).eq(MarkStudent::getAbsent, false)
-                .eq(MarkStudent::getManualAbsent, false).eq(MarkStudent::getOmrAbsent, false);
+                .and(m->m.eq(MarkStudent::getManualAbsent, false).or().isNull(MarkStudent::getManualAbsent)).eq(MarkStudent::getOmrAbsent, false);
         return this.count(queryWrapper);
         return this.count(queryWrapper);
     }
     }
 
 
@@ -2032,15 +2033,6 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         return markStudent;
         return markStudent;
     }
     }
 
 
-    @Override
-    public void deleteByExamIdAndPaperNumberAndStudentCode(Long examId, String paperNumber, String studentCode) {
-        UpdateWrapper<MarkStudent> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.lambda().eq(MarkStudent::getExamId, examId)
-                .eq(MarkStudent::getPaperNumber, paperNumber)
-                .eq(MarkStudent::getStudentCode, studentCode);
-        this.remove(updateWrapper);
-    }
-
     @Override
     @Override
     public void deleteByBasicStudentId(List<Long> basicExamStudentIds) {
     public void deleteByBasicStudentId(List<Long> basicExamStudentIds) {
         List<MarkStudent> markStudentList = this.listByBasicStudentIds(basicExamStudentIds);
         List<MarkStudent> markStudentList = this.listByBasicStudentIds(basicExamStudentIds);

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

@@ -96,7 +96,7 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
         // 所有客观题空白
         // 所有客观题空白
         boolean allObjectiveBlank = isAllBlank(paperIds);
         boolean allObjectiveBlank = isAllBlank(paperIds);
         // 非缺考,空白卷需要进客观题检查(2024-11-11 add)
         // 非缺考,空白卷需要进客观题检查(2024-11-11 add)
-        if ((student.getAbsent() || student.getManualAbsent() || student.getOmrAbsent()) && allObjectiveBlank) {
+        if ((student.getAbsent() || (student.getManualAbsent()!= null && student.getManualAbsent()) || student.getOmrAbsent()) && allObjectiveBlank) {
             return null;
             return null;
         }
         }
         List<OmrTaskDto> retList = new ArrayList<>();
         List<OmrTaskDto> retList = new ArrayList<>();