xiaofei 1 سال پیش
والد
کامیت
e014994f51

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

@@ -44,7 +44,7 @@ public class MarkPaperController {
     /**
      * 结束阅卷
      */
-    @ApiOperation(value = "结束阅卷")
+    @ApiOperation(value = "结束/开始阅卷")
     @RequestMapping(value = "/finish", method = RequestMethod.POST)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EDIT)
     public Result finish(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,

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

@@ -76,6 +76,8 @@ public interface MarkStudentService extends IService<MarkStudent> {
 
     boolean saveUploadStudent(MarkStudent student);
 
+     void calculateObjectiveScore(MarkStudent student);
+
     void updateStudentAndPaper(SysUser user, Long studentId, List<ScanStudentPaper> studentPaperList);
 
     StudentVo findOne(StudentQuery query);

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

@@ -51,6 +51,7 @@ public interface MarkTaskService extends IService<MarkTask> {
 	int countByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber);
 
 	int countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndStatusIn(Long examId, String paperNumber, Integer groupNumber, Long userId, MarkTaskStatus... status);
+	int countProblemByExamIdAndPaperNumberAndGroupNumberAndStatusIn(Long examId, String paperNumber, Integer groupNumber, MarkTaskStatus... status);
 
     void deleteByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber);
 

+ 30 - 24
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperServiceImpl.java

@@ -110,25 +110,39 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
     public Boolean finishPaper(Long examId, List<String> paperNumbers, MarkPaperStatus status) {
         for (String paperNumber : paperNumbers) {
             MarkPaper markPaper = this.getByExamIdAndPaperNumber(examId, paperNumber);
-            String courseInfo = String.format("%s[%s],试卷编号%s,", markPaper.getCourseName(), markPaper.getCourseCode(), markPaper.getPaperNumber());
-            // 主观题是否全部分组
-            List<MarkQuestion> markQuestionObjectiveList = markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, null, true);
-            if (CollectionUtils.isNotEmpty(markQuestionObjectiveList)) {
-                if (markQuestionObjectiveList.stream().filter(m -> StringUtils.isBlank(m.getAnswer())).count() > 0) {
-                    throw ExceptionResultEnum.ERROR.exception(courseInfo + "客观题标答未设置,无法结束评卷");
+            if (MarkPaperStatus.FINISH.equals(status)) {
+                String courseInfo = String.format("%s[%s],试卷编号%s,", markPaper.getCourseName(), markPaper.getCourseCode(), markPaper.getPaperNumber());
+                // 主观题是否全部分组
+                List<MarkQuestion> markQuestionObjectiveList = markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, null, true);
+                if (CollectionUtils.isNotEmpty(markQuestionObjectiveList)) {
+                    if (markQuestionObjectiveList.stream().filter(m -> StringUtils.isBlank(m.getAnswer())).count() > 0) {
+                        throw ExceptionResultEnum.ERROR.exception(courseInfo + "客观题标答未设置,无法结束评卷");
+                    }
                 }
-            }
 
-            // 主观题是否全部分组
-            List<MarkQuestion> markQuestionSubjectiveList = markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, null, false);
-            // 没有主观题,不校验考生评卷
-            if (CollectionUtils.isNotEmpty(markQuestionSubjectiveList)) {
-                if (markQuestionSubjectiveList.stream().filter(m -> m.getGroupNumber() == null).count() > 0) {
-                    throw ExceptionResultEnum.ERROR.exception(courseInfo + "主观题未全部分组,无法结束评卷");
+                // 主观题是否全部分组
+                List<MarkQuestion> markQuestionSubjectiveList = markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, null, false);
+                // 没有主观题,不校验考生评卷
+                if (CollectionUtils.isNotEmpty(markQuestionSubjectiveList)) {
+                    if (markQuestionSubjectiveList.stream().filter(m -> m.getGroupNumber() == null).count() > 0) {
+                        throw ExceptionResultEnum.ERROR.exception(courseInfo + "主观题未全部分组,无法结束评卷");
+                    }
+                    // 未缺考、未违约且已上传图片的考生全部评完
+                    if (markStudentService.countUnmarkByExamIdAndPaperNumber(examId, paperNumber) > 0) {
+                        throw ExceptionResultEnum.ERROR.exception(courseInfo + "考生未全部评完,无法结束评卷");
+                    }
                 }
-                // 未缺考、未违约且已上传图片的考生全部评完
-                if (markStudentService.countUnmarkByExamIdAndPaperNumber(examId, paperNumber) > 0) {
-                    throw ExceptionResultEnum.ERROR.exception(courseInfo + "考生未全部评完,无法结束评卷");
+
+                // 结束评卷时,客观题统分
+                List<MarkStudent> markStudentList = markStudentService.listByExamIdAndCoursePaperId(examId, markPaper.getCoursePaperId());
+                for (MarkStudent markStudent : markStudentList) {
+                    markStudentService.calculateObjectiveScore(markStudent);
+                    UpdateWrapper<MarkStudent> objectiveUpdateWrapper = new UpdateWrapper<>();
+                    objectiveUpdateWrapper.lambda().set(MarkStudent::getObjectiveScore, markStudent.getObjectiveScore())
+                            .set(MarkStudent::getObjectiveScoreList, markStudent.getObjectiveScoreList())
+                            .eq(MarkStudent::getId, markStudent.getId());
+                    markStudentService.update(objectiveUpdateWrapper);
+
                 }
             }
 
@@ -137,14 +151,6 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
                     .eq(MarkPaper::getExamId, examId)
                     .eq(MarkPaper::getPaperNumber, paperNumber);
             this.update(updateWrapper);
-
-            // 结束评卷时,客观题统分
-            if (MarkPaperStatus.FINISH.equals(status)) {
-                List<MarkStudent> markStudentList = markStudentService.listByExamIdAndCoursePaperId(examId, markPaper.getCoursePaperId());
-                for (MarkStudent markStudent : markStudentList) {
-                    markStudentService.saveUploadStudent(markStudent);
-                }
-            }
         }
 
         return true;

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

@@ -737,8 +737,8 @@ public class MarkServiceImpl implements MarkService {
                 markUserGroup.getGroupNumber(), Arrays.asList(MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED)));
         dto.setPersonCount(markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndStatusIn(examId,
                 paperNumber, groupNumber, userId, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED));
-        dto.setProblemCount(markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndStatusIn(examId,
-                paperNumber, groupNumber, userId, MarkTaskStatus.PROBLEM));
+        dto.setProblemCount(markTaskService.countProblemByExamIdAndPaperNumberAndGroupNumberAndStatusIn(examId,
+                paperNumber, groupNumber, MarkTaskStatus.PROBLEM));
         dto.setTotalCount(markTaskService.countByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, groupNumber));
         return dto;
     }

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

@@ -286,7 +286,8 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         this.saveOrUpdate(student);
 
         // 更新课程表中上传人数
-        updateMarkPaperUploadCount(student.getExamId(), student.getPaperNumber());
+        markPaperService.updateUploadCount(student.getExamId(), student.getPaperNumber(),
+                this.countUploadedByExamIdAndPaperNumber(student.getExamId(), student.getPaperNumber()));
         if (updateOmrTask) {
             // 清除识别对照任务
             scanOmrTaskService.deleteByStudentId(student.getExamId(), student.getId());
@@ -295,20 +296,6 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         }
     }
 
-    private void updateMarkPaperUploadCount(Long examId, String paperNumber) {
-        QueryWrapper<MarkStudent> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(MarkStudent::getExamId, examId)
-                .eq(MarkStudent::getPaperNumber, paperNumber)
-                .eq(MarkStudent::getUpload, true);
-        int count = this.count(queryWrapper);
-
-        UpdateWrapper<MarkPaper> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.lambda().set(MarkPaper::getUploadCount, count)
-                .eq(MarkPaper::getExamId, examId)
-                .eq(MarkPaper::getPaperNumber, paperNumber);
-        markPaperService.update(updateWrapper);
-    }
-
     private MarkStudent updateStudentSheetInfo(MarkStudent student, List<ScanStudentPaper> studentPaperList) {
         List<FilePathVo> filePathVoList = new ArrayList<>();
         for (ScanStudentPaper scanStudentPaper : studentPaperList) {
@@ -473,9 +460,9 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         return success;
     }
 
-    private void calculateObjectiveScore(MarkStudent student) {
+    @Override
+    public void calculateObjectiveScore(MarkStudent student) {
         ScoreCalculateUtil util = ScoreCalculateUtil.instance(student);
-
         ScoreInfo info = util.calculate(markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(
                 student.getExamId(), student.getPaperNumber(), null, true), null);
         student.setObjectiveScore(info.getObjectiveScore());

+ 10 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkTaskServiceImpl.java

@@ -221,6 +221,16 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
         return this.count(queryWrapper);
     }
 
+    @Override
+    public int countProblemByExamIdAndPaperNumberAndGroupNumberAndStatusIn(Long examId, String paperNumber, Integer groupNumber, MarkTaskStatus... status) {
+        QueryWrapper<MarkTask> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(MarkTask::getExamId, examId)
+                .eq(MarkTask::getPaperNumber, paperNumber)
+                .eq(MarkTask::getGroupNumber, groupNumber)
+                .in(MarkTask::getStatus, Arrays.asList(status));
+        return this.count(queryWrapper);
+    }
+
     @Override
     public void deleteByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber) {
         UpdateWrapper<MarkTask> updateWrapper = new UpdateWrapper<>();

+ 1 - 0
teachcloud-mark/src/main/resources/mapper/MarkProblemHistoryMapper.xml

@@ -52,6 +52,7 @@
             <if test="secretNumber != null and secretNumber != ''">
                 AND secret_number = #{secretNumber}
             </if>
+        ORDER BY
     </select>
 
 </mapper>

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

@@ -269,7 +269,7 @@
         sum(case when s.objective_score+s.subjective_score >=t.excellent_score then 1 else 0 end) excellentCount
         FROM mark_student s 
         WHERE
-            s.exam_id = #{req.examId} and s.paper_number = #{req.paperNumber} 
+            s.exam_id = #{examId} and s.paper_number = #{paperNumber}
     </select>
     <select id="getCountByScoreRange" resultType="int">
         SELECT 
@@ -292,7 +292,7 @@
         sum(case when s.objective_score+s.subjective_score >=t.excellent_score then 1 else 0 end) excellentCount
         FROM mark_student s
         WHERE
-            s.exam_id = #{req.examId} and s.paper_number = #{req.paperNumber}
+            s.exam_id = #{examId} and s.paper_number = #{paperNumber}
         group by s.college
     </select>
     <select id="classData" resultType="com.qmth.teachcloud.mark.bean.archivescore.ClassVo">
@@ -307,7 +307,7 @@
         sum(case when s.objective_score+s.subjective_score >=t.excellent_score then 1 else 0 end) excellentCount
         FROM mark_student s
         WHERE
-            s.exam_id = #{req.examId} and s.paper_number = #{req.paperNumber}
+            s.exam_id = #{examId} and s.paper_number = #{paperNumber}
         group by s.class_name
     </select>
     <select id="teacher" resultType="com.qmth.teachcloud.mark.bean.archivescore.TeacherVo">
@@ -322,7 +322,7 @@
         sum(case when s.objective_score+s.subjective_score >=t.excellent_score then 1 else 0 end) excellentCount
         FROM mark_student s
         WHERE
-            s.exam_id = #{req.examId} and s.paper_number = #{req.paperNumber}
+            s.exam_id = #{examId} and s.paper_number = #{paperNumber}
         group by s.teacher
     </select>
     <select id="findOne" resultType="com.qmth.teachcloud.mark.bean.student.StudentVo"
@@ -360,7 +360,7 @@
             sum(case when s.objective_score+s.subjective_score >=t.excellent_score then 1 else 0 end) excellentCount
         FROM mark_student s
         WHERE
-            s.exam_id = #{req.examId} and s.paper_number = #{req.paperNumber}
+            s.exam_id = #{examId} and s.paper_number = #{paperNumber}
         group by s.teacher, s.class_name
     </select>
 </mapper>

+ 1 - 1
teachcloud-mark/src/main/resources/mapper/MarkSubjectiveScoreMapper.xml

@@ -26,7 +26,7 @@
         left join mark_question t on t.exam_id=s.exam_id and t.paper_number=s.paper_number 
         and t.main_number=s.main_number and t.sub_number=s.sub_number
         WHERE
-            s.exam_id = #{req.examId} and s.paper_number = #{req.paperNumber} 
+            s.exam_id = #{examId} and s.paper_number = #{paperNumber}
         group by t.main_title  title,t.main_number,t.sub_number,t.total_score
         order by t.main_number,t.sub_number
     </select>