Bladeren bron

3.4.4 update-20250312,sql优化

xiaofei 3 maanden geleden
bovenliggende
commit
5424eacecd
23 gewijzigde bestanden met toevoegingen van 158 en 150 verwijderingen
  1. 1 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  2. 5 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  3. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintFinishServiceImpl.java
  4. 2 0
      distributed-print/install/mysql/upgrade/3.4.4.sql
  5. 12 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkStudent.java
  6. 2 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkArbitrateHistoryMapper.java
  7. 5 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkProblemHistoryMapper.java
  8. 2 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkStudentMapper.java
  9. 2 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkTaskMapper.java
  10. 2 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkArbitrateHistoryService.java
  11. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkProblemHistoryService.java
  12. 1 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkStudentService.java
  13. 2 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkTaskService.java
  14. 2 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkArbitrateHistoryServiceImpl.java
  15. 2 6
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkProblemHistoryServiceImpl.java
  16. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkQuestionServiceImpl.java
  17. 20 13
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java
  18. 5 4
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java
  19. 4 3
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkTaskServiceImpl.java
  20. 14 23
      teachcloud-mark/src/main/resources/mapper/MarkArbitrateHistoryMapper.xml
  21. 22 0
      teachcloud-mark/src/main/resources/mapper/MarkProblemHistoryMapper.xml
  22. 13 21
      teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml
  23. 37 61
      teachcloud-mark/src/main/resources/mapper/MarkTaskMapper.xml

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

@@ -1142,6 +1142,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
                     examStudent.setPaperNumber(s.getPaperNumber());
                     examStudent.setCoursePaperId(s.getCoursePaperId());
                     examStudent.setBasicStudentId(s.getId());
+                    examStudent.setTeachClazzName(s.getTeachClassName());
                     examStudent.setStudentCode(s.getStudentCode());
                     examStudent.setCreateId(createId);
                     examStudent.setCreateTime(System.currentTimeMillis());

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

@@ -887,7 +887,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         // 新建试卷
         List<ExamTaskDetail> examTaskDetailList = examTaskApplyPram.getExamTaskDetailList();
         if (CollectionUtils.isNotEmpty(examTaskDetailList)) {
-            if (examTaskDetailList.size() % 2 != 0) {
+            if (basicPrintConfig.getTwoPaperEnable() && examTaskDetailList.size() <= 1) {
                 throw ExceptionResultEnum.ERROR.exception("请至少上传2份试卷");
             }
         }
@@ -1226,16 +1226,16 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
 
         ExamTaskSubmitContent examTaskSubmitContent = JSON.parseObject(examTaskSubmitPram.getExamTaskContent(), ExamTaskSubmitContent.class);
+        // 新建命题任务
+        ExamTask examTask = examTaskSubmitContent.getExamTask();
+        BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamId(examTask.getExamId());
 
         if (Objects.nonNull(examTaskSubmitContent) &&
                 CollectionUtils.isNotEmpty(examTaskSubmitContent.getExamTaskDetailList())) {
-            if (examTaskSubmitContent.getExamTaskDetailList().size() % 2 != 0) {
+            if (basicPrintConfig.getTwoPaperEnable() && examTaskSubmitContent.getExamTaskDetailList().size() <= 1) {
                 throw ExceptionResultEnum.ERROR.exception("请至少上传2份试卷");
             }
         }
-        // 新建命题任务
-        ExamTask examTask = examTaskSubmitContent.getExamTask();
-        BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamId(examTask.getExamId());
 
         // 开启了入库审核
         if (basicPrintConfig.getReview()) {

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

@@ -123,7 +123,7 @@ public class PrintFinishServiceImpl implements PrintFinishService {
                         continue;
                     }
                     String paperType = basicCardRule.getExamNumberStyle().equals(ExamNumberStyleEnum.PRINT) || (basicCardRule.getExamNumberStyle().equals(ExamNumberStyleEnum.FILL) && !dto.getOpenAb()) ? examStudent.getPaperType() : null;
-                    MarkStudent student = new MarkStudent(examStudent.getId(), dto.getExamId(), examStudent.getBasicStudentId(), dto.getCourseId(), dto.getPaperNumber(), dto.getCoursePaperId(), dto.getSerialNumber(), paperType, examStudent.getStudentCode(), initExamDetailDto.getPackageCode(), initExamDetailDto.getExamPlace(), initExamDetailDto.getExamRoom(), initExamDetailDto.getExamStartTime(), initExamDetailDto.getExamEndTime(), dto.getCreateId());
+                    MarkStudent student = new MarkStudent(examStudent.getId(), dto.getExamId(), examStudent.getBasicStudentId(), dto.getCourseId(), dto.getPaperNumber(), dto.getCoursePaperId(), dto.getSerialNumber(), paperType, examStudent.getStudentCode(), initExamDetailDto.getPackageCode(), initExamDetailDto.getExamPlace(), initExamDetailDto.getExamRoom(), examStudent.getTeachClazzName(), initExamDetailDto.getExamStartTime(), initExamDetailDto.getExamEndTime(), dto.getCreateId());
                     if (student.getSecretNumber() == null) {
                         student.randomSecretNumber();
                         while (secretNumberSet.contains(student.getSecretNumber())

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

@@ -294,3 +294,5 @@ ALTER TABLE `mark_user_paper` ADD COLUMN `marked_question_id` BIGINT(20) NULL CO
 -- 2025-03-12
 ALTER TABLE teach_course DROP KEY teach_course_unique;
 ALTER TABLE teach_course ADD CONSTRAINT teach_course_unique UNIQUE KEY (school_id,exam_id,course_id,user_id);
+
+ALTER TABLE `mark_student` ADD COLUMN `teach_class_name` VARCHAR(100) NULL COMMENT '教学班' AFTER `exam_room`;

+ 12 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkStudent.java

@@ -89,6 +89,8 @@ public class MarkStudent implements Serializable {
 
     @ApiModelProperty(value = "考场")
     private String examRoom;
+    @ApiModelProperty(value = "教学班")
+    private String teachClassName;
 
     @ApiModelProperty(value = "备注")
     private String remark;
@@ -209,7 +211,7 @@ public class MarkStudent implements Serializable {
     public MarkStudent(Long id, Long examId, Long basicStudentId, Long courseId,
                        String paperNumber, String coursePaperId, Integer serialNumber, String paperType,
                        String studentCode, String packageCode, String examPlace,
-                       String examRoom, Long examStartTime, Long examEndTime, Long createId) {
+                       String examRoom, String teachClassName, Long examStartTime, Long examEndTime, Long createId) {
         this.id = id;
         this.examId = examId;
         this.basicStudentId = basicStudentId;
@@ -222,6 +224,7 @@ public class MarkStudent implements Serializable {
         this.packageCode = packageCode;
         this.examPlace = examPlace;
         this.examRoom = examRoom;
+        this.teachClassName = teachClassName;
         this.sheetCount = 0;
         this.upload = false;
         this.absent = false;
@@ -344,6 +347,14 @@ public class MarkStudent implements Serializable {
         this.examRoom = examRoom;
     }
 
+    public String getTeachClassName() {
+        return teachClassName;
+    }
+
+    public void setTeachClassName(String teachClassName) {
+        this.teachClassName = teachClassName;
+    }
+
     public String getRemark() {
         return remark;
     }

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

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.mark.mapper;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.teachcloud.common.enums.mark.MarkArbitrateStatus;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkArbitrateDto;
 import com.qmth.teachcloud.mark.entity.MarkArbitrateHistory;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -25,5 +26,5 @@ public interface MarkArbitrateHistoryMapper extends BaseMapper<MarkArbitrateHist
 
     List<MarkArbitrateHistory> getHistory(@Param("page") Page<MarkArbitrateHistory> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("questionId") Long questionId, @Param("status") String status, @Param("userId") Long userId);
 
-    Integer waitArbitrateCount(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("questionId") Long questionId, @Param("status") String status, @Param("className") String className);
+    Integer waitArbitrateCount(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("questionId") Long questionId, @Param("status") String status, @Param("classNames") List<String> classNames);
 }

+ 5 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkProblemHistoryMapper.java

@@ -2,11 +2,14 @@ package com.qmth.teachcloud.mark.mapper;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.teachcloud.common.enums.mark.MarkProblemStatus;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkProblemDto;
 import com.qmth.teachcloud.mark.entity.MarkProblemHistory;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * <p>
  * 问题卷历史表 Mapper 接口
@@ -18,4 +21,6 @@ import org.apache.ibatis.annotations.Param;
 public interface MarkProblemHistoryMapper extends BaseMapper<MarkProblemHistory> {
 
     IPage<MarkProblemDto> pageProblem(@Param("page") Page<MarkProblemDto> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("questionId") Long questionId, @Param("problemType") String problemType, @Param("status") String status, @Param("secretNumber") String secretNumber);
+
+    Integer countByExamIdAndPaperNumberAndStatusAndClassNameIn(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("status") MarkProblemStatus status, @Param("classNames") List<String> classNames);
 }

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

@@ -19,6 +19,7 @@ import com.qmth.teachcloud.mark.entity.MarkStudent;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * <p>
@@ -140,7 +141,7 @@ public interface MarkStudentMapper extends BaseMapper<MarkStudent> {
      */
     AbInfoVo findExamTaskPaperTypeOpenStatus(@Param("examId") Long examId, @Param("paperNumber") String paperNumber);
 
-    List<Long> findUnMarked(@Param("page") Page<Long> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("userId") Long userId, @Param("classMark") Boolean classMark);
+    List<Long> findUnMarked(@Param("page") Page<Long> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("questionIds") Set<Long> questionIds, @Param("classNames") List<String> classNames);
 
     /**
      * 根据版本号更新主观题分数

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

@@ -1,6 +1,7 @@
 package com.qmth.teachcloud.mark.mapper;
 
 import java.util.List;
+import java.util.Set;
 
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkTaskDto;
 import com.qmth.teachcloud.mark.enums.MarkTaskStatus;
@@ -36,7 +37,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("questionId") Long questionId, @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("classNames") List<String> classNames);
 
     List<MarkTask> listByExamIdAndPaperNumberAndQuestionIdAndUserIdAndClassName(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("questionId") Long questionId, @Param("userId") Long userId, @Param("className") String className);
 

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

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.mark.service;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.qmth.teachcloud.common.enums.mark.MarkArbitrateStatus;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkArbitrateDto;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkArbitrateMarkerDto;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkArbitrateSettingDto;
@@ -42,8 +43,7 @@ public interface MarkArbitrateHistoryService extends IService<MarkArbitrateHisto
 
     List<Task> getHistory(Long examId, String paperNumber, Long questionId, Integer pageNumber, Integer pageSize);
 
-    Integer waitArbitrateCount(Long examId, String paperNumber, Long questionId, String className);
+    Integer waitArbitrateCount(Long examId, String paperNumber, Long questionId, List<String> classNames);
 
     void deleteByExamIdAndPaperNumberAndQuestionId(Long examId, String paperNumber, Long questionId);
-
 }

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

@@ -30,5 +30,5 @@ public interface MarkProblemHistoryService extends IService<MarkProblemHistory>
 
 	MarkProblemHistory findByTaskIdAndStatus(Long taskId, MarkProblemStatus status);
 
-    Integer countByExamIdAndPaperNumberAndStatus(Long examId, String paperNumber, MarkProblemStatus status);
+    Integer countByExamIdAndPaperNumberAndStatusAndClassNameIn(Long examId, String paperNumber, MarkProblemStatus status, List<String> classNames);
 }

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

@@ -6,7 +6,6 @@ import java.util.Set;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.NotNull;
 
-import com.qmth.teachcloud.common.enums.TaskStatusEnum;
 import org.springframework.web.multipart.MultipartFile;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -267,7 +266,7 @@ public interface MarkStudentService extends IService<MarkStudent> {
 
     UpdateTimeVo add(Long examId, String coursePaperId, String studentCode, String studentName, String paperType, Long basicStudentId);
 
-    List<Long> findUnMarked(Page<Long> page, Long examId, String paperNumber, Long userId, Boolean classMark);
+    List<Long> findUnMarked(Page<Long> page, Long examId, String paperNumber, Set<Long> questionIds, List<String> classNames);
 
     /**
      * 根据版本号更新主观题分数

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

@@ -14,6 +14,7 @@ import com.qmth.teachcloud.mark.params.MarkResultQuestion;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
+import java.util.Set;
 
 /**
  * <p>
@@ -63,7 +64,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, Long questionId, Boolean classMark);
+    List<MarkTask> findUnMarkedFilterClass(Page<MarkTask> page, Long examId, String paperNumber, Long userId, Long questionId, List<String> classNames);
 
     int countByIdAndStatus(Long studentId, MarkTaskStatus status);
 

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

@@ -254,8 +254,8 @@ public class MarkArbitrateHistoryServiceImpl extends ServiceImpl<MarkArbitrateHi
     }
 
     @Override
-    public Integer waitArbitrateCount(Long examId, String paperNumber, Long questionId, String className) {
-        return this.baseMapper.waitArbitrateCount(examId, paperNumber, questionId, MarkArbitrateStatus.WAITING.name(), className);
+    public Integer waitArbitrateCount(Long examId, String paperNumber, Long questionId, List<String> classNames) {
+        return this.baseMapper.waitArbitrateCount(examId, paperNumber, questionId, MarkArbitrateStatus.WAITING.name(), classNames);
     }
 
     @Override

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

@@ -143,11 +143,7 @@ public class MarkProblemHistoryServiceImpl extends ServiceImpl<MarkProblemHistor
     }
 
     @Override
-    public Integer countByExamIdAndPaperNumberAndStatus(Long examId, String paperNumber, MarkProblemStatus status) {
-        QueryWrapper<MarkProblemHistory> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(MarkProblemHistory::getExamId, examId)
-                .eq(MarkProblemHistory::getPaperNumber, paperNumber)
-                .eq(MarkProblemHistory::getStatus, status);
-        return this.count(queryWrapper);
+    public Integer countByExamIdAndPaperNumberAndStatusAndClassNameIn(Long examId, String paperNumber, MarkProblemStatus status, List<String> classNames) {
+        return this.baseMapper.countByExamIdAndPaperNumberAndStatusAndClassNameIn(examId, paperNumber, status, classNames);
     }
 }

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

@@ -706,7 +706,7 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
                 }
 
                 // 待仲裁数量
-                int arbitrateCount = markArbitrateHistoryService.waitArbitrateCount(examId, paperNumber, questionId, markGroupClassProgressDto.getClassName());
+                int arbitrateCount = markArbitrateHistoryService.waitArbitrateCount(examId, paperNumber, questionId, Arrays.asList(markGroupClassProgressDto.getClassName()));
                 markGroupClassProgressDto.setQuestionNumber(markQuestion.getQuestionNumber());
                 markGroupClassProgressDto.setMarkerCount(totalMarkUserList.size());
                 markGroupClassProgressDto.setTaskCount(totalMarkTaskList.size());

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

@@ -207,7 +207,7 @@ public class MarkServiceImpl implements MarkService {
         }
         Long now = System.currentTimeMillis();
         if (markTaskService.resetById(markTask.getId(), null, null, userId, now, MarkTaskStatus.WAITING)) {
-            resetStudentGroup(markTask.getStudentId());
+            resetStudentStatus(markTask.getStudentId());
             markProblemHistoryService.resetByMarkProblemId(markProblemHistory.getId(), MarkProblemStatus.WAITING,
                     userId, MarkProblemStatus.BACK, now);
             updateMarkedCount(markTask.getExamId(), markTask.getPaperNumber(), markTask.getQuestionId());
@@ -217,7 +217,7 @@ public class MarkServiceImpl implements MarkService {
         }
     }
 
-    private void resetStudentGroup(Long studentId) {
+    private void resetStudentStatus(Long studentId) {
 //        markStudentService.updateSubjectiveStatusAndScore(studentId, SubjectiveStatus.UNMARK, null, null);
         markStudentService.updateSubjectiveScoreByVersion(studentId, SubjectiveStatus.UNMARK, null, null, null);
     }
@@ -719,8 +719,7 @@ public class MarkServiceImpl implements MarkService {
 
     private MarkStatusDto getDto(MarkStatusDto dto, Long examId, String paperNumber, Long userId, List<String> classNames, List<Long> questionIds) {
         //待仲裁卷数量
-        dto.setArbitrateCount(markTaskService.countByExamIdAndPaperNumberAndQuestionIdAndAndClassNameStatusIn(examId,
-                paperNumber, null, classNames, MarkTaskStatus.WAIT_ARBITRATE));
+        dto.setArbitrateCount(markArbitrateHistoryService.waitArbitrateCount(examId, paperNumber, null, classNames));
         //总数量
         dto.setTotalCount(markTaskService.countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(examId, paperNumber, null, classNames, questionIds));
         // 未评
@@ -732,8 +731,7 @@ public class MarkServiceImpl implements MarkService {
         dto.setPersonCount(markTaskService.countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(examId, paperNumber, userId, classNames, questionIds, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED,
                 MarkTaskStatus.WAIT_ARBITRATE, MarkTaskStatus.PROBLEM));
         //问题卷数量
-        dto.setProblemCount(markTaskService.countByExamIdAndPaperNumberAndQuestionIdAndAndClassNameStatusIn(examId,
-                paperNumber, null, classNames, MarkTaskStatus.PROBLEM));
+        dto.setProblemCount(markProblemHistoryService.countByExamIdAndPaperNumberAndStatusAndClassNameIn(examId, paperNumber, MarkProblemStatus.WAITING, classNames));
         return dto;
     }
 
@@ -868,13 +866,22 @@ public class MarkServiceImpl implements MarkService {
         if (markUserQuestions.isEmpty()) {
             throw ExceptionResultEnum.ERROR.exception("评卷员未设置评卷题目");
         }
+        List<String> classNames = null;
+        //校验是否有分班阅
+        if (markPaper != null && markPaper.getClassMark() != null && markPaper.getClassMark().booleanValue()) {
+            List<MarkUserClass> markUserClassList = markUserClassService.listByExamIdAndPaperNumberAndUserId(examId, paperNumber, userId);
+            if (CollectionUtils.isNotEmpty(markUserClassList)) {
+                classNames = markUserClassList.stream().map(MarkUserClass::getClassName).collect(Collectors.toList());
+            }
+        }
+
         Task task = null;
         List<Long> studentIds;
         int pageNumber = 1;
         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, questionId, markPaper.getClassMark());
+                List<MarkTask> list = markTaskService.findUnMarkedFilterClass(new Page<>(pageNumber, 20), examId, paperNumber, userId, questionId, classNames);
                 if (list.isEmpty()) {
                     break;
                 }
@@ -886,7 +893,7 @@ public class MarkServiceImpl implements MarkService {
                 }
             } else if (questionModel.equals(QuestionModel.MULTI)) {
                 Set<Long> questions = markUserQuestions.stream().map(MarkUserQuestion::getQuestionId).collect(Collectors.toSet());
-                studentIds = markStudentService.findUnMarked(new Page<>(pageNumber, 20), examId, paperNumber, userId, markPaper.getClassMark());
+                studentIds = markStudentService.findUnMarked(new Page<>(pageNumber, 20), examId, paperNumber, questions, classNames);
                 if (studentIds.isEmpty()) {
                     break;
                 }
@@ -957,8 +964,8 @@ public class MarkServiceImpl implements MarkService {
         if (!lock) {
             return false;
         }
-        taskLock.remove(studentId, userId);
-        return false;
+//        taskLock.remove(studentId, userId);
+        return true;
     }
 
     @Override
@@ -1062,7 +1069,7 @@ public class MarkServiceImpl implements MarkService {
                             saveProblemHistory(markResultQuestion, task, userId);
                             updateMarkedCount(markUserQuestion.getExamId(), markUserQuestion.getPaperNumber(), markUserQuestion.getQuestionId());
                             // 未评完
-                            resetStudentGroup(task.getStudentId());
+                            resetStudentStatus(task.getStudentId());
                             count++;
                         }
                     }
@@ -1159,7 +1166,7 @@ public class MarkServiceImpl implements MarkService {
             // 触发仲裁后续状态更新
             markTaskService.updateStatusByStudentIdAndQuestionId(task.getStudentId(), task.getQuestionId(), MarkTaskStatus.WAIT_ARBITRATE);
             // 未评完
-            resetStudentGroup(task.getStudentId());
+            resetStudentStatus(task.getStudentId());
         } else {
             // 判断当前分组是否已完成评卷
             checkStudentQuestion(task.getStudentId(), markQuestion, result.getMarkerScore());
@@ -1214,7 +1221,7 @@ public class MarkServiceImpl implements MarkService {
             markUserQuestionService.updateRejectCountByExamIdAndPaperNumberAndQuestionIdAndUserId(markTask.getExamId(), markTask.getPaperNumber(), markTask.getQuestionId(), markTask.getUserId());
             markRejectHistoryService.save(history);
             markSubjectiveScoreService.updateRejected(markTask.getStudentId(), markTask.getQuestionId(), true);
-            resetStudentGroup(markTask.getStudentId());
+            resetStudentStatus(markTask.getStudentId());
             updateMarkedCount(markTask.getExamId(), markTask.getPaperNumber(), markTask.getQuestionId());
             return true;
         } else {

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

@@ -2172,7 +2172,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             if (containPaperType && StringUtils.isBlank(basicExamStudent.getPaperType())) {
                 throw ExceptionResultEnum.ERROR.exception("卷型必须");
             } else {
-                markStudent = new MarkStudent(SystemConstant.getDbUuid(), basicExamStudent.getExamId(), basicExamStudent.getId(), basicExamStudent.getCourseId(), basicExamStudent.getPaperNumber(), markPaper.getCoursePaperId(), markPaper.getSerialNumber(), basicExamStudent.getPaperType(), basicExamStudent.getStudentCode(), "", basicExamStudent.getExamPlace(), basicExamStudent.getExamRoom(), basicExamStudent.getExamStartTime(), basicExamStudent.getExamEndTime(), markPaper.getUserId());
+                markStudent = new MarkStudent(SystemConstant.getDbUuid(), basicExamStudent.getExamId(), basicExamStudent.getId(), basicExamStudent.getCourseId(), basicExamStudent.getPaperNumber(), markPaper.getCoursePaperId(), markPaper.getSerialNumber(), basicExamStudent.getPaperType(), basicExamStudent.getStudentCode(), "", basicExamStudent.getExamPlace(), basicExamStudent.getExamRoom(), basicExamStudent.getTeachClassName(), basicExamStudent.getExamStartTime(), basicExamStudent.getExamEndTime(), markPaper.getUserId());
                 if (markStudent.getSecretNumber() == null) {
                     markStudent.randomSecretNumber();
                     while (secretNumberSet.contains(markStudent.getSecretNumber())
@@ -2185,6 +2185,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         } else {
             markStudent.setPaperNumber(basicExamStudent.getPaperNumber());
             markStudent.setPaperType(basicExamStudent.getPaperType());
+            markStudent.setTeachClassName(basicExamStudent.getTeachClassName());
         }
         return markStudent;
     }
@@ -2437,7 +2438,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
     public UpdateTimeVo add(Long examId, String coursePaperId, String studentCode, String studentName, String paperType, Long basicStudentId) {
         SysUser user = (SysUser) ServletUtil.getRequestUser();
         MarkPaper markPaper = markPaperService.getByExamIdAndCoursePaperId(examId, coursePaperId);
-        MarkStudent markStudent = new MarkStudent(SystemConstant.getDbUuid(), examId, basicStudentId, markPaper.getCourseId(), markPaper.getPaperNumber(), coursePaperId, markPaper.getSerialNumber(), paperType, studentCode, "", null, null, null, null, user.getId());
+        MarkStudent markStudent = new MarkStudent(SystemConstant.getDbUuid(), examId, basicStudentId, markPaper.getCourseId(), markPaper.getPaperNumber(), coursePaperId, markPaper.getSerialNumber(), paperType, studentCode, "", null, null, null, null,null, user.getId());
         if (markStudent.getSecretNumber() == null) {
             markStudent.randomSecretNumber();
             while (this.countByExamIdAndSecretNumber(markStudent.getExamId(), markStudent.getSecretNumber()) > 0) {
@@ -2449,8 +2450,8 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
     }
 
     @Override
-    public List<Long> findUnMarked(Page<Long> page, Long examId, String paperNumber, Long userId, Boolean classMark) {
-        return this.baseMapper.findUnMarked(page, examId, paperNumber, userId, classMark);
+    public List<Long> findUnMarked(Page<Long> page, Long examId, String paperNumber, Set<Long> questionIds, List<String> classNames) {
+        return this.baseMapper.findUnMarked(page, examId, paperNumber, questionIds, classNames);
     }
 
     /**

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

@@ -32,6 +32,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Set;
 
 /**
  * <p>
@@ -77,7 +78,7 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
                 record.setPercent("0");
             }
             // 问题卷数量
-            record.setProblemCount(markProblemHistoryService.countByExamIdAndPaperNumberAndStatus(examId, record.getPaperNumber(), MarkProblemStatus.WAITING));
+            record.setProblemCount(markProblemHistoryService.countByExamIdAndPaperNumberAndStatusAndClassNameIn(examId, record.getPaperNumber(), MarkProblemStatus.WAITING, null));
             // 正在评卷数量
             record.setCurrentCount(markQuestionService.countCurrentCountByExamIdAndPaperNumber(examId, record.getPaperNumber()));
         }
@@ -252,8 +253,8 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
     }
 
     @Override
-    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);
+    public List<MarkTask> findUnMarkedFilterClass(Page<MarkTask> page, Long examId, String paperNumber, Long userId, Long questionId, List<String> classNames) {
+        return this.baseMapper.findUnMarkedFilterClass(page, examId, paperNumber, userId, questionId, classNames);
     }
 
     @Override

+ 14 - 23
teachcloud-mark/src/main/resources/mapper/MarkArbitrateHistoryMapper.xml

@@ -96,30 +96,21 @@
         WHERE
             mah.exam_id = #{examId}
           AND mah.paper_number = #{paperNumber}
-          AND mah.question_id = #{questionId}
+          <if test="questionId != null">
+              AND mah.question_id = #{questionId}
+          </if>
           AND mah.status = #{status}
-          <if test="className != null and className != ''">
-              AND EXISTS( SELECT
-              1
-              FROM
-              (SELECT
-              ms.id, ms.exam_id, ms.paper_number, bes.teach_class_name
-              FROM
-              (SELECT
-              *
-              FROM
-              mark_student
-              WHERE
-              exam_id = #{examId} AND paper_number = #{paperNumber}) ms
-              JOIN (SELECT
-              *
-              FROM
-              basic_exam_student
-              WHERE
-              exam_id = #{examId} AND teach_class_name = #{className}) bes ON ms.basic_student_id = bes.id) ms
-              WHERE
-              mah.student_id = ms.id)
+          <if test="classNames != null and classNames.size() > 0">
+              AND EXISTS( SELECT 1
+                          FROM
+                              mark_student
+                          where exam_id = #{examId}
+                            AND paper_number = #{paperNumber}
+                            AND teach_class_name in
+                          <foreach collection="classNames" item="className" separator="," open="(" close=")">
+                              #{className}
+                          </foreach>
+                            AND mah.student_id = ms.id)
           </if>
     </select>
-
 </mapper>

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

@@ -54,5 +54,27 @@
             </if>
         ORDER BY status desc, create_time asc
     </select>
+    <select id="countByExamIdAndPaperNumberAndStatusAndClassNameIn" resultType="java.lang.Integer">
+        SELECT
+        count(1)
+        FROM
+        mark_problem_history mah
+        WHERE
+        mah.exam_id = #{examId}
+        AND mah.paper_number = #{paperNumber}
+        AND mah.status = #{status}
+        <if test="classNames != null and classNames.size() > 0">
+            AND EXISTS( SELECT 1
+            FROM
+            mark_student
+            where exam_id = #{examId}
+            AND paper_number = #{paperNumber}
+            AND teach_class_name in
+            <foreach collection="classNames" item="className" separator="," open="(" close=")">
+                #{className}
+            </foreach>
+            AND mah.student_id = ms.id)
+        </if>
+    </select>
 
 </mapper>

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

@@ -1050,27 +1050,19 @@
           AND EXISTS (SELECT 1
                      FROM mark_task mt
                      WHERE mt.user_id IS NULL
-                        AND m.id = mt.student_id
-                        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))
-        <if test="classMark == true">
-            AND EXISTS (
-            SELECT 1
-            FROM
-            (select * from mark_user_class where exam_id = #{examId} and paper_number = #{paperNumber} and user_id = #{userId}) mc
-            join
-            (select ms.id, bes.teach_class_name from (select * from mark_student where exam_id = #{examId} and paper_number = #{paperNumber}) ms join (select id,teach_class_name from basic_exam_student where exam_id = #{examId}) bes on ms.basic_student_id = bes.id) s on mc.class_name = s.teach_class_name
-            WHERE m.id = s.id
-            )
-        </if>
+                    <if test="questionIds != null and questionIds.size() > 0">
+                        AND mt.question_id in
+                        <foreach collection="questionIds" item="id" open="(" close=")" separator=",">
+                            #{id}
+                        </foreach>
+                    </if>
+                        AND m.id = mt.student_id)
+            <if test="classNames != null and classNames.size() > 0">
+                AND m.teach_class_name IN
+                <foreach collection="classNames" item="className" separator="," open="(" close=")">
+                    #{className}
+                </foreach>
+            </if>
         </where>
     </select>
 

+ 37 - 61
teachcloud-mark/src/main/resources/mapper/MarkTaskMapper.xml

@@ -196,15 +196,15 @@
 			AND t.user_id = #{userId}
 			AND t.marker_score IS NOT NULL
 		)
-        <if test="classMark == true">
-		AND EXISTS (
-			SELECT 1
-			FROM
-			(select * from mark_user_class where exam_id = #{examId} and paper_number = #{paperNumber} and user_id = #{userId}) mc
-                join
-			(select ms.id, bes.teach_class_name from (select * from mark_student where exam_id = #{examId} and paper_number = #{paperNumber}) ms join (select id,teach_class_name from basic_exam_student where exam_id = #{examId}) bes on ms.basic_student_id = bes.id) s on mc.class_name = s.teach_class_name
-			WHERE mt.student_id = s.id
-		)
+        <if test="classNames != null and classNames.size() > 0">
+            AND EXISTS (select 1 from mark_student ms where exam_id = #{examId} and paper_number = #{paperNumber}
+            AND m.teach_class_name IN
+            <foreach collection="classNames" item="className" separator="," open="(" close=")">
+                #{className}
+            </foreach>
+            and mt.student_id = ms.id
+            )
+
         </if>
         </where>
     </select>
@@ -279,58 +279,34 @@
           AND ms.paper_number = #{paperNumber}
           AND EXISTS( SELECT
                           1
-                      FROM
-                          (SELECT
-                               mt.student_id
-                           FROM
-                               mark_task mt
-                           WHERE
-                               mt.exam_id = #{examId}
-                             AND mt.paper_number = #{paperNumber}
-                             <if test="userId !=null">
-                                 AND mt.user_id = #{userId}
-                             </if>
-                            <if test="questionIds != null and questionIds.size() > 0">
-                                AND mt.question_id in
-                                <foreach collection="questionIds" item="id" open="(" close=")" separator=",">
-                                    #{id}
-                                </foreach>
-                            </if>
-                            <if test="statusList != null and statusList.length > 0">
-                                AND mt.status IN
-                                <foreach collection="statusList" item="status" open="(" close=")" separator=",">
-                                    #{status}
-                                </foreach>
-                            </if>
-                            <if test="classNames != null and classNames.size() > 0">
-                             AND EXISTS( SELECT
-                                             1
-                                         FROM
-                                             (SELECT
-                                                  ms.id
-                                              FROM
-                                                  mark_student ms
-                                              WHERE
-                                                  ms.exam_id = #{examId}
-                                                AND ms.paper_number = #{paperNumber}
-                                                AND EXISTS( SELECT
-                                                                1
-                                                            FROM
-                                                                basic_exam_student bes
-                                                            WHERE
-                                                                bes.exam_id = #{examId}
-                                                              AND ms.basic_student_id = bes.id
-                                                              AND bes.teach_class_name IN
-                                                            <foreach collection="classNames" item="className" separator="," open="(" close=")">
-                                                                #{className}
-                                                            </foreach>
-                                                              )) ms
-                                         WHERE
-                                             mt.student_id = ms.id)
-                            </if>
-                           ) t
-                      WHERE
-                          ms.id = t.student_id)
+                       FROM
+                           mark_task mt
+                       WHERE
+                           mt.exam_id = #{examId}
+                         AND mt.paper_number = #{paperNumber}
+                         <if test="userId !=null">
+                             AND mt.user_id = #{userId}
+                         </if>
+                        <if test="questionIds != null and questionIds.size() > 0">
+                            AND mt.question_id in
+                            <foreach collection="questionIds" item="id" open="(" close=")" separator=",">
+                                #{id}
+                            </foreach>
+                        </if>
+                        <if test="statusList != null and statusList.length > 0">
+                            AND mt.status IN
+                            <foreach collection="statusList" item="status" open="(" close=")" separator=",">
+                                #{status}
+                            </foreach>
+                        </if>
+                        AND ms.id = mt.student_id
+                      )
+        <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 id="pageMarkTask" resultType="com.qmth.teachcloud.mark.dto.mark.manage.MarkTaskDto">