Эх сурвалжийг харах

3.4.4 update-20250310,sql优化

xiaofei 3 сар өмнө
parent
commit
f542ddc796

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

@@ -288,3 +288,5 @@ WHERE id=1193;
 ALTER TABLE `mark_paper` ADD INDEX `index3` (`status` ASC, `upload_count` ASC);
 
 ALTER TABLE `mark_student` ADD INDEX `index7` (`subjective_status` ASC);
+ALTER TABLE `mark_user_paper` ADD INDEX `index1` (`exam_id` ASC, `paper_number` ASC, `user_id` ASC);
+ALTER TABLE `mark_user_paper` ADD COLUMN `marked_question_id` BIGINT(20) NULL COMMENT '正在阅卷的题目ID' AFTER `mode`;

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

@@ -116,7 +116,7 @@ public class MarkController extends BaseController {
                                 @RequestParam QuestionModel questionModel) {
         SysUser user = (SysUser) ServletUtil.getRequestUser();
         userService.updateUiSetting(user.getId(), StringEscapeUtils.unescapeHtml(StringUtils.trimToNull(uiSetting)));
-        markUserPaperService.updateMode(examId, paperNumber, user.getId(), mode, questionModel);
+        markUserPaperService.update(examId, paperNumber, user.getId(), mode, questionModel, null);
         return ResultUtil.ok(true);
     }
 

+ 15 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/mark/MarkStatusDto.java

@@ -43,14 +43,20 @@ public class MarkStatusDto {
      */
     @JsonSerialize(using = ToStringSerializer.class)
     private Long questionId;
+    /**
+     * 正在证券的题目ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long markedQuestionId;
 
     public MarkStatusDto() {
     }
 
-    public MarkStatusDto(MarkQuestion markQuestion) {
+    public MarkStatusDto(MarkQuestion markQuestion, Long markedQuestionId) {
         this.mainNumber = markQuestion.getMainNumber();
         this.subNumber = markQuestion.getSubNumber();
         this.questionId = markQuestion.getId();
+        this.markedQuestionId = markedQuestionId;
     }
 
     public int getTotalCount() {
@@ -124,4 +130,12 @@ public class MarkStatusDto {
     public void setQuestionId(Long questionId) {
         this.questionId = questionId;
     }
+
+    public Long getMarkedQuestionId() {
+        return markedQuestionId;
+    }
+
+    public void setMarkedQuestionId(Long markedQuestionId) {
+        this.markedQuestionId = markedQuestionId;
+    }
 }

+ 12 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkUserPaper.java

@@ -41,6 +41,9 @@ public class MarkUserPaper implements Serializable {
     @ApiModelProperty(value = "评卷模式(SINGLE:单题阅,MULTI:多题阅)")
     private QuestionModel questionModel;
 
+    @ApiModelProperty(value = "正在评卷的题目ID")
+    private Long markedQuestionId;
+
     public MarkUserPaper() {
     }
 
@@ -96,6 +99,14 @@ public class MarkUserPaper implements Serializable {
         this.questionModel = questionModel;
     }
 
+    public Long getMarkedQuestionId() {
+        return markedQuestionId;
+    }
+
+    public void setMarkedQuestionId(Long markedQuestionId) {
+        this.markedQuestionId = markedQuestionId;
+    }
+
     @Override
     public String toString() {
         return "MarkUserPaper{" +
@@ -105,6 +116,7 @@ public class MarkUserPaper implements Serializable {
             ", userId=" + userId +
             ", mode=" + mode +
             ", questionModel=" + questionModel +
+            ", markedQuestionId=" + markedQuestionId +
         "}";
     }
 }

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

@@ -36,7 +36,7 @@ public interface MarkTaskMapper extends BaseMapper<MarkTask> {
     List<MarkTask> findUnMarked(@Param("page") Page<MarkTask> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber,
                                 @Param("userId") Long userId);
 
-    List<MarkTask> findUnMarkedFilterClass(@Param("page") Page<MarkTask> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("userId") Long userId, @Param("classMark") Boolean classMark);
+    List<MarkTask> findUnMarkedFilterClass(@Param("page") Page<MarkTask> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("userId") Long userId, @Param("questionId") Long questionId, @Param("classMark") Boolean classMark);
 
     List<MarkTask> listByExamIdAndPaperNumberAndQuestionIdAndUserIdAndClassName(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("questionId") Long questionId, @Param("userId") Long userId, @Param("className") String className);
 

+ 9 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/params/MarkResult.java

@@ -12,6 +12,7 @@ public class MarkResult {
      * 考生编号
      */
     private Long studentId;
+    private Long markedQuestionId;
 
     /**
      * 总分
@@ -33,6 +34,14 @@ public class MarkResult {
         this.studentId = studentId;
     }
 
+    public Long getMarkedQuestionId() {
+        return markedQuestionId;
+    }
+
+    public void setMarkedQuestionId(Long markedQuestionId) {
+        this.markedQuestionId = markedQuestionId;
+    }
+
     public double getMarkerScore() {
         return markerScore;
     }

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

@@ -63,7 +63,7 @@ public interface MarkTaskService extends IService<MarkTask> {
 
     List<MarkTask> findUnMarked(Page<MarkTask> page, Long examId, String paperNumber, Long userId);
 
-    List<MarkTask> findUnMarkedFilterClass(Page<MarkTask> page, Long examId, String paperNumber, Long userId, Boolean classMark);
+    List<MarkTask> findUnMarkedFilterClass(Page<MarkTask> page, Long examId, String paperNumber, Long userId, Long questionId, Boolean classMark);
 
     int countByIdAndStatus(Long studentId, MarkTaskStatus status);
 

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

@@ -5,6 +5,8 @@ import com.qmth.teachcloud.mark.entity.MarkUserPaper;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.teachcloud.mark.enums.QuestionModel;
 
+import java.util.List;
+
 /**
  * <p>
  * 试卷评卷员设置 服务类
@@ -15,7 +17,9 @@ import com.qmth.teachcloud.mark.enums.QuestionModel;
  */
 public interface MarkUserPaperService extends IService<MarkUserPaper> {
 
+    List<MarkUserPaper> listByExamIdAndPaperNumberAndUserId(Long examId, String paperNumber, Long userId);
     MarkUserPaper getByExamIdAndPaperNumberAndUserId(Long examId, String paperNumber, Long userId);
 
-    void updateMode(Long examId, String paperNumber, Long userId, MarkMode mode, QuestionModel questionModel);
+    void update(Long examId, String paperNumber, Long userId, MarkMode mode, QuestionModel questionModel, Long markedQuestionId);
+
 }

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

@@ -172,7 +172,7 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
             lambda.set(MarkPaper::getSheetConfig, markPaper.getSheetConfig());
         }
         // 更新评卷员模式
-        markUserPaperService.updateMode(markPaper.getExamId(), markPaper.getPaperNumber(), null, MarkMode.UNLIMITED.equals(markPaper.getMarkMode()) ? MarkMode.TRACK : markPaper.getMarkMode(), null);
+        markUserPaperService.update(markPaper.getExamId(), markPaper.getPaperNumber(), null, MarkMode.UNLIMITED.equals(markPaper.getMarkMode()) ? MarkMode.TRACK : markPaper.getMarkMode(), null, null);
         this.update(updateWrapper);
     }
 
@@ -214,7 +214,7 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
                     .eq(MarkPaper::getExamId, markPaperSettingList.getExamId())
                     .eq(MarkPaper::getPaperNumber, markPaperSettingList.getPaperNumber());
             // 更新评卷员模式
-            markUserPaperService.updateMode(markPaperSettingList.getExamId(), markPaperSettingList.getPaperNumber(), null, MarkMode.UNLIMITED.equals(config.getMarkMode()) ? MarkMode.TRACK : config.getMarkMode(), null);
+            markUserPaperService.update(markPaperSettingList.getExamId(), markPaperSettingList.getPaperNumber(), null, MarkMode.UNLIMITED.equals(config.getMarkMode()) ? MarkMode.TRACK : config.getMarkMode(), null, null);
             this.update(updateWrapper);
         }
     }

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

@@ -700,9 +700,10 @@ public class MarkServiceImpl implements MarkService {
             if (questionId != null) {
                 markUserQuestionList = markUserQuestionList.stream().filter(m -> m.getQuestionId().equals(questionId)).collect(Collectors.toList());
             }
+            MarkUserPaper markUserPaper = markUserPaperService.getByExamIdAndPaperNumberAndUserId(examId, paperNumber, userId);
             MarkStatusDto dto;
             for (MarkUserQuestion question : markUserQuestionList) {
-                dto = new MarkStatusDto(markQuestionService.getById(question.getQuestionId()));
+                dto = new MarkStatusDto(markQuestionService.getById(question.getQuestionId()), markUserPaper.getMarkedQuestionId());
                 List<Long> questionIds = Arrays.asList(question.getQuestionId());
                 dtoList.add(getDto(dto, examId, paperNumber, userId, classNames, questionIds));
             }
@@ -873,7 +874,7 @@ public class MarkServiceImpl implements MarkService {
         while (task == null) {
             if (questionModel.equals(QuestionModel.SINGLE)) {
                 Set<Long> questions = new HashSet<>(Arrays.asList(questionId));
-                List<MarkTask> list = markTaskService.findUnMarkedFilterClass(new Page<>(pageNumber, 20), examId, paperNumber, userId, markPaper.getClassMark());
+                List<MarkTask> list = markTaskService.findUnMarkedFilterClass(new Page<>(pageNumber, 20), examId, paperNumber, userId, questionId, markPaper.getClassMark());
                 if (list.isEmpty()) {
                     break;
                 }
@@ -1079,6 +1080,8 @@ public class MarkServiceImpl implements MarkService {
             }
         }
         if (CollectionUtils.size(result.getQuestionList()) == count) {
+            // 更新当前正在阅卷的questionId
+            markUserPaperService.update(examId, paperNumber, userId, null, null, result.getMarkedQuestionId());
             return SubmitResult.success(result.getStudentId());
         } else {
             return SubmitResult.faile();

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

@@ -252,8 +252,8 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
     }
 
     @Override
-    public List<MarkTask> findUnMarkedFilterClass(Page<MarkTask> page, Long examId, String paperNumber, Long userId, Boolean classMark) {
-        return this.baseMapper.findUnMarkedFilterClass(page, examId, paperNumber, userId, classMark);
+    public List<MarkTask> findUnMarkedFilterClass(Page<MarkTask> page, Long examId, String paperNumber, Long userId, Long questionId, Boolean classMark) {
+        return this.baseMapper.findUnMarkedFilterClass(page, examId, paperNumber, userId, questionId, classMark);
     }
 
     @Override

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

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.mark.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.Update;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.qmth.teachcloud.common.enums.mark.MarkMode;
 import com.qmth.teachcloud.mark.entity.MarkUserPaper;
@@ -11,6 +12,8 @@ import com.qmth.teachcloud.mark.service.MarkUserPaperService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 试卷评卷员设置 服务实现类
@@ -23,6 +26,14 @@ import org.springframework.stereotype.Service;
 public class MarkUserPaperServiceImpl extends ServiceImpl<MarkUserPaperMapper, MarkUserPaper> implements MarkUserPaperService {
 
     @Override
+    public List<MarkUserPaper> listByExamIdAndPaperNumberAndUserId(Long examId, String paperNumber, Long userId) {
+        QueryWrapper<MarkUserPaper> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(MarkUserPaper::getExamId, examId)
+                .eq(MarkUserPaper::getPaperNumber, paperNumber)
+                .eq(userId != null, MarkUserPaper::getUserId, userId);
+        return this.list(queryWrapper);
+    }
+
     public MarkUserPaper getByExamIdAndPaperNumberAndUserId(Long examId, String paperNumber, Long userId) {
         QueryWrapper<MarkUserPaper> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(MarkUserPaper::getExamId, examId)
@@ -32,7 +43,7 @@ public class MarkUserPaperServiceImpl extends ServiceImpl<MarkUserPaperMapper, M
     }
 
     @Override
-    public void updateMode(Long examId, String paperNumber, Long userId, MarkMode mode, QuestionModel questionModel) {
+    public void update(Long examId, String paperNumber, Long userId, MarkMode mode, QuestionModel questionModel, Long markedQuestionId) {
         MarkUserPaper markUserPaper = this.getByExamIdAndPaperNumberAndUserId(examId, paperNumber, userId);
         if (markUserPaper == null) {
             markUserPaper = new MarkUserPaper(examId, paperNumber, userId);

+ 4 - 14
teachcloud-mark/src/main/resources/mapper/MarkTaskMapper.xml

@@ -179,19 +179,10 @@
             mark_task mt
         <where>
         	mt.exam_id = #{examId}
-		and mt.paper_number = #{paperNumber}
-		and mt.user_id is null
-		and (mt.status='WAITING' or mt.status='REJECTED')
-        AND EXISTS( SELECT
-            1
-            FROM
-            mark_user_question muq
-            WHERE
-            mt.exam_id = muq.exam_id
-            AND mt.paper_Number = muq.paper_number
-            AND mt.question_id = muq.question_id
-            AND muq.user_id = #{userId}
-            AND muq.enable = true)
+        AND mt.paper_number = #{paperNumber}
+        AND mt.question_id = #{questionId}
+        AND mt.user_id is null
+        AND (mt.status='WAITING' or mt.status='REJECTED')
 		AND NOT EXISTS ( 
 			SELECT t.id 
 			FROM
@@ -215,7 +206,6 @@
 			WHERE mt.student_id = s.id
 		)
         </if>
-        order by mt.main_number, mt.sub_number
         </where>
     </select>
     <select id="listByExamIdAndPaperNumberAndQuestionIdAndUserIdAndClassName"