Przeglądaj źródła

3.4.5 20250614 实施过程中bug修复

xiaofei 1 tydzień temu
rodzic
commit
e7838dc0a1

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

@@ -137,6 +137,8 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     @Resource
     @Resource
     private ScanAnswerCardService scanAnswerCardService;
     private ScanAnswerCardService scanAnswerCardService;
     @Resource
     @Resource
+    private ScanAnswerCardQuestionService scanAnswerCardQuestionService;
+    @Resource
     private MarkUserQuestionService markUserQuestionService;
     private MarkUserQuestionService markUserQuestionService;
     @Resource
     @Resource
     private MarkUserClassService markUserClassService;
     private MarkUserClassService markUserClassService;
@@ -792,6 +794,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
                         markQuestionService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
                         markQuestionService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
                         markQuestionAnswerService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
                         markQuestionAnswerService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
                         scanAnswerCardService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
                         scanAnswerCardService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
+                        scanAnswerCardQuestionService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
                         markUserQuestionService.deleteByExamIdAndPaperNumberAndQuestionId(examDetail.getExamId(), examDetailCourse.getPaperNumber(), null);
                         markUserQuestionService.deleteByExamIdAndPaperNumberAndQuestionId(examDetail.getExamId(), examDetailCourse.getPaperNumber(), null);
                         markUserClassService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
                         markUserClassService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
                     } else {
                     } else {

+ 3 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkTaskMapper.java

@@ -45,7 +45,9 @@ public interface MarkTaskMapper extends BaseMapper<MarkTask> {
 
 
     int countByExamIdAndPaperNumberAndQuestionIdAndAndClassNameStatusIn(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("questionId") Long questionId, @Param("classNames") List<String> classNames, @Param("statusList") MarkTaskStatus[] statusList);
     int countByExamIdAndPaperNumberAndQuestionIdAndAndClassNameStatusIn(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("questionId") Long questionId, @Param("classNames") List<String> classNames, @Param("statusList") MarkTaskStatus[] statusList);
 
 
-    int countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("userId") Long userId, @Param("classNames") List<String> classNames, @Param("questionIds") List<Long> questionIds, @Param("statusList") MarkTaskStatus[] statusList, @Param("questionSize") Integer questionSize);
+    int countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("classNames") List<String> classNames, @Param("questionIds") List<Long> questionIds, @Param("statusList") MarkTaskStatus[] statusList, @Param("questionSize") Integer questionSize);
+    int countPersonByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("userId") Long userId, @Param("classNames") List<String> classNames, @Param("questionIds") List<Long> questionIds, @Param("statusList") MarkTaskStatus[] statusList);
+
 
 
     IPage<MarkTaskDto> pageMarkTask(@Param("page") Page<Object> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("questionId") Long questionId, @Param("loginName") String loginName, @Param("status") MarkTaskStatus status, @Param("studentCode") String studentCode, @Param("secretNumber") String secretNumber, @Param("teachClassName") String teachClassName, @Param("subScore") Double subScore, @Param("aiMarked") Boolean aiMarked);
     IPage<MarkTaskDto> pageMarkTask(@Param("page") Page<Object> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("questionId") Long questionId, @Param("loginName") String loginName, @Param("status") MarkTaskStatus status, @Param("studentCode") String studentCode, @Param("secretNumber") String secretNumber, @Param("teachClassName") String teachClassName, @Param("subScore") Double subScore, @Param("aiMarked") Boolean aiMarked);
 
 

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

@@ -56,8 +56,8 @@ public interface MarkTaskService extends IService<MarkTask> {
 
 
     int countByExamIdAndPaperNumberAndQuestionIdAndAndClassNameStatusIn(Long examId, String paperNumber, Long questionId, List<String> className, MarkTaskStatus... status);
     int countByExamIdAndPaperNumberAndQuestionIdAndAndClassNameStatusIn(Long examId, String paperNumber, Long questionId, List<String> className, MarkTaskStatus... status);
 
 
-    int countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(Long examId, String paperNumber, Long userId, List<String> className, List<Long> questionIds, MarkTaskStatus... status);
-
+    int countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(Long examId, String paperNumber, List<String> className, List<Long> questionIds, MarkTaskStatus... status);
+    int countPersonByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(Long examId, String paperNumber, Long userId, List<String> className, List<Long> questionIds, MarkTaskStatus... status);
     IPage<MarkTask> listPageHistory(Page<Long> page, Long userId, Long examId, String paperNumber, String secretNumber, Double markerScore, MarkTaskStatus... statuses);
     IPage<MarkTask> listPageHistory(Page<Long> page, Long userId, Long examId, String paperNumber, String secretNumber, Double markerScore, MarkTaskStatus... statuses);
 
 
     List<MarkTask> findUnMarked(Page<MarkTask> page, Long examId, String paperNumber, Long userId);
     List<MarkTask> findUnMarked(Page<MarkTask> page, Long examId, String paperNumber, Long userId);

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

@@ -1004,15 +1004,14 @@ public class MarkServiceImpl implements MarkService {
         //待仲裁卷数量
         //待仲裁卷数量
         dto.setArbitrateCount(markArbitrateHistoryService.waitArbitrateCount(examId, paperNumber, null, classNames));
         dto.setArbitrateCount(markArbitrateHistoryService.waitArbitrateCount(examId, paperNumber, null, classNames));
         //总数量
         //总数量
-        dto.setTotalCount(markTaskService.countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(examId, paperNumber, null, classNames, questionIds));
+        dto.setTotalCount(markTaskService.countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(examId, paperNumber, classNames, questionIds));
         // 未评
         // 未评
-        int unmarkCount = markTaskService.countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(examId, paperNumber, null, classNames, questionIds, MarkTaskStatus.WAITING, MarkTaskStatus.WAIT_ARBITRATE, MarkTaskStatus.REJECTED);
+        int unmarkCount = markTaskService.countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(examId, paperNumber, classNames, questionIds, MarkTaskStatus.WAITING, MarkTaskStatus.WAIT_ARBITRATE, MarkTaskStatus.REJECTED);
         dto.setLeftCount(unmarkCount);
         dto.setLeftCount(unmarkCount);
         //总评卷数量(考生数)
         //总评卷数量(考生数)
         dto.setMarkedCount(dto.getTotalCount() == 0 ? 0 : dto.getTotalCount() - unmarkCount);
         dto.setMarkedCount(dto.getTotalCount() == 0 ? 0 : dto.getTotalCount() - unmarkCount);
         //个人评卷数量
         //个人评卷数量
-        dto.setPersonCount(markTaskService.countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(examId, paperNumber, userId, classNames, questionIds, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED,
-                MarkTaskStatus.WAIT_ARBITRATE, MarkTaskStatus.PROBLEM));
+        dto.setPersonCount(markTaskService.countPersonByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(examId, paperNumber, userId, classNames, questionIds, MarkTaskStatus.WAITING, MarkTaskStatus.REJECTED));
         //问题卷数量
         //问题卷数量
         dto.setProblemCount(markProblemHistoryService.countByExamIdAndPaperNumberAndStatusAndClassNameIn(examId, paperNumber, MarkProblemStatus.WAITING, classNames));
         dto.setProblemCount(markProblemHistoryService.countByExamIdAndPaperNumberAndStatusAndClassNameIn(examId, paperNumber, MarkProblemStatus.WAITING, classNames));
         return dto;
         return dto;

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

@@ -272,8 +272,13 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
     }
     }
 
 
     @Override
     @Override
-    public int countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(Long examId, String paperNumber, Long userId, List<String> className, List<Long> questionIds, MarkTaskStatus... status) {
-        return this.baseMapper.countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(examId, paperNumber, userId, className, questionIds, status, CollectionUtils.size(questionIds));
+    public int countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(Long examId, String paperNumber, List<String> className, List<Long> questionIds, MarkTaskStatus... status) {
+        return this.baseMapper.countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(examId, paperNumber, className, questionIds, status, CollectionUtils.size(questionIds));
+    }
+
+    @Override
+    public int countPersonByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(Long examId, String paperNumber, Long userId, List<String> className, List<Long> questionIds, MarkTaskStatus... status) {
+        return this.baseMapper.countPersonByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(examId, paperNumber, userId, className, questionIds, status);
     }
     }
 
 
     @Override
     @Override

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

@@ -105,9 +105,9 @@ public class MarkUserQuestionServiceImpl extends ServiceImpl<MarkUserQuestionMap
             List<MarkQuestion> markQuestionList = this.listSubjectiveQuestionByUserId(record.getExamId(), record.getPaperNumber(), sysUser.getId());
             List<MarkQuestion> markQuestionList = this.listSubjectiveQuestionByUserId(record.getExamId(), record.getPaperNumber(), sysUser.getId());
             List<Long> questionIds = markQuestionList.stream().map(MarkQuestion::getId).collect(Collectors.toList());
             List<Long> questionIds = markQuestionList.stream().map(MarkQuestion::getId).collect(Collectors.toList());
 
 
-            int taskCount = markTaskService.countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(record.getExamId(), record.getPaperNumber(), null, classNames, questionIds);
+            int taskCount = markTaskService.countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(record.getExamId(), record.getPaperNumber(), classNames, questionIds);
             record.setTaskCount(taskCount);
             record.setTaskCount(taskCount);
-            int unMarkedCount = markTaskService.countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(record.getExamId(), record.getPaperNumber(), null, classNames, questionIds, MarkTaskStatus.WAITING, MarkTaskStatus.WAIT_ARBITRATE, MarkTaskStatus.REJECTED, MarkTaskStatus.PROBLEM);
+            int unMarkedCount = markTaskService.countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(record.getExamId(), record.getPaperNumber(), classNames, questionIds, MarkTaskStatus.WAITING, MarkTaskStatus.WAIT_ARBITRATE, MarkTaskStatus.REJECTED, MarkTaskStatus.PROBLEM);
             record.setLeftCount(unMarkedCount);
             record.setLeftCount(unMarkedCount);
             record.setMarkedCount(taskCount == 0 ? 0 : taskCount - unMarkedCount);
             record.setMarkedCount(taskCount == 0 ? 0 : taskCount - unMarkedCount);
             // 评卷进度
             // 评卷进度

+ 46 - 7
teachcloud-mark/src/main/resources/mapper/MarkTaskMapper.xml

@@ -339,9 +339,6 @@
                        WHERE
                        WHERE
                            mt.exam_id = #{examId}
                            mt.exam_id = #{examId}
                          AND mt.paper_number = #{paperNumber}
                          AND mt.paper_number = #{paperNumber}
-                         <if test="userId !=null">
-                             AND mt.user_id = #{userId}
-                         </if>
                         <if test="questionIds != null and questionIds.size() > 0">
                         <if test="questionIds != null and questionIds.size() > 0">
                             AND mt.question_id in
                             AND mt.question_id in
                             <foreach collection="questionIds" item="id" open="(" close=")" separator=",">
                             <foreach collection="questionIds" item="id" open="(" close=")" separator=",">
@@ -355,9 +352,6 @@
                             </foreach>
                             </foreach>
                         </if>
                         </if>
                         AND ms.id = mt.student_id
                         AND ms.id = mt.student_id
-                       <if test="userId != null">
-                       group by mt.student_id having count(1) = #{questionSize}
-                       </if>
                       )
                       )
         <if test="classNames != null and classNames.size() > 0">
         <if test="classNames != null and classNames.size() > 0">
             AND ms.teach_class_name IN
             AND ms.teach_class_name IN
@@ -365,7 +359,52 @@
                 #{className}
                 #{className}
             </foreach>
             </foreach>
         </if>
         </if>
-
+    </select>
+    <select id="countPersonByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn" resultType="java.lang.Integer">
+        SELECT
+        COUNT(1)
+        FROM
+        mark_student ms
+        WHERE
+        ms.exam_id = #{examId}
+        AND ms.paper_number = #{paperNumber}
+        AND EXISTS( SELECT
+        1
+        FROM
+        (SELECT
+        mt.student_id,
+        SUM(CASE
+        WHEN mt.status IN (
+        <if test="statusList != null and statusList.length > 0">
+            <foreach collection="statusList" item="status" separator=",">
+                #{status}
+            </foreach>
+        </if>
+        ) THEN 1
+        ELSE 0
+        END) unmarkCount
+        FROM
+        mark_task mt
+        WHERE
+        mt.exam_id = #{examId}
+        AND mt.paper_number = #{paperNumber}
+        AND (mt.user_id = #{userId} or mt.user_id is null)
+        <if test="questionIds != null and questionIds.size() > 0">
+            AND mt.question_id in
+            <foreach collection="questionIds" item="id" open="(" close=")" separator=",">
+                #{id}
+            </foreach>
+        </if>
+        GROUP BY mt.student_id) t
+        WHERE
+        ms.id = t.student_id
+        AND t.unmarkCount = 0)
+        <if test="classNames != null and classNames.size() > 0">
+            AND ms.teach_class_name IN
+            <foreach collection="classNames" item="className" separator="," open="(" close=")">
+                #{className}
+            </foreach>
+        </if>
     </select>
     </select>
     <select id="pageMarkTask" resultType="com.qmth.teachcloud.mark.dto.mark.manage.MarkTaskDto">
     <select id="pageMarkTask" resultType="com.qmth.teachcloud.mark.dto.mark.manage.MarkTaskDto">
         SELECT
         SELECT