浏览代码

3.4.4 update-20250325,bug修改

xiaofei 3 月之前
父节点
当前提交
4b43923c76

+ 6 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ConditionServiceImpl.java

@@ -23,6 +23,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 
@@ -66,6 +67,9 @@ public class ConditionServiceImpl implements ConditionService {
 
     @Override
     public List<BasicExam> listExam(Long semesterId, ExamCategoryEnum category, Boolean enable, ExamModelEnum model) {
+        Long currentPrivilegeId = ServletUtil.getCurrentPrivilegeId();
+        // 以下菜单不显示模式4
+        List<Long> privilegeIds = Arrays.asList(39l, 40l, 41l, 42l, 43l, 44l, 45l, 47l);
         QueryWrapper<BasicExam> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(BasicExam::getSemesterId, semesterId);
         if (Objects.nonNull(category)) {
@@ -76,6 +80,8 @@ public class ConditionServiceImpl implements ConditionService {
         }
         if (Objects.nonNull(model)) {
             queryWrapper.lambda().eq(BasicExam::getExamModel, model);
+        } else if (privilegeIds.contains(currentPrivilegeId)) {
+            queryWrapper.lambda().ne(BasicExam::getExamModel, ExamModelEnum.MODEL4);
         }
         queryWrapper.lambda().orderByDesc(BasicExam::getCreateTime);
         return basicExamService.list(queryWrapper);

+ 1 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/ConditionController.java

@@ -12,6 +12,7 @@ import com.qmth.teachcloud.common.enums.ExamCategoryEnum;
 import com.qmth.teachcloud.common.enums.ExamModelEnum;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.mark.service.ScanConditionService;
 import com.qmth.teachcloud.obe.service.ObeConditionService;
 import io.swagger.annotations.*;

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

@@ -684,7 +684,7 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
 
                 // 待仲裁数量
                 int arbitrateCount = markArbitrateHistoryService.waitArbitrateCount(examId, paperNumber, null, Arrays.asList(markGroupClassProgressDto.getClassName()));
-                markGroupClassProgressDto.setMarkerCount(totalMarkUserList.size());
+                markGroupClassProgressDto.setMarkerCount(Math.toIntExact(totalMarkUserList.stream().map(m -> m.getUserId()).distinct().count()));
                 markGroupClassProgressDto.setTaskCount(totalMarkTaskList.size());
                 markGroupClassProgressDto.setMarkedCount(markTaskService.markedCount(totalMarkTaskList));
                 markGroupClassProgressDto.setLeftCount(markGroupClassProgressDto.getTaskCount() - markGroupClassProgressDto.getMarkedCount());
@@ -698,7 +698,6 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
 
     @Override
     public List<MarkClassDetailDto> detailGroupClassProgress(Long examId, String paperNumber, String className) {
-        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
         List<MarkQuestion> markQuestionList = this.listByExamIdAndPaperNumberAndObjective(examId, paperNumber, false);
         List<MarkClassDetailDto> markClassDetailDtoList = new ArrayList<>();
         for (MarkQuestion markQuestion : markQuestionList) {
@@ -709,8 +708,6 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
             totalMarkTaskList.addAll(markTaskService.listByExamIdAndPaperNumberAndQuestionIdAndUserIdAndClassName(examId, paperNumber, questionId, null, className));
             totalMarkUserList.addAll(markUserQuestionService.listGroupUserByExamIdAndPaperNumberAndQuestionIdAndClassName(examId, paperNumber, questionId, className));
 
-            // 待仲裁数量
-            int arbitrateCount = markArbitrateHistoryService.waitArbitrateCount(examId, paperNumber, questionId, Arrays.asList(className));
             markClassDetailDto.setQuestionNumber(markQuestion.getQuestionNumber());
             markClassDetailDto.setTaskCount(totalMarkTaskList.size());
             markClassDetailDto.setMarkedCount(markTaskService.markedCount(totalMarkTaskList));

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

@@ -409,7 +409,7 @@ public class MarkServiceImpl implements MarkService {
     @Override
     public void buildMarkTask(MarkPaper markPaper) {
         try {
-            if(markPaper.getPaperNumber().equals("1017")){
+            if (markPaper.getPaperNumber().equals("1017")) {
                 System.out.println(1);
             }
             lockService.watch(LockType.EXAM_SUBJECT, markPaper.getExamId(), markPaper.getPaperNumber());
@@ -868,6 +868,7 @@ public class MarkServiceImpl implements MarkService {
                 markTaskService.updateHeaderResult(markStudent.getExamId(), markStudent.getPaperNumber(),
                         result.getQuestionId(), markStudent.getId(), userId, result.getMarkerScore(), result.getMarkerTrackList(), result.getMarkerTagList(), currentTime, MarkTaskStatus.MARKED);
                 updateMarkedCount(markStudent.getExamId(), markStudent.getPaperNumber(), result.getQuestionId());
+                resetStudentStatus(markStudent.getId());
                 markStudentService.updateCheckInfo(markStudent.getId(), userId);
                 checkStudentQuestion(markStudent.getId(), markQuestionService.getById(result.getQuestionId()), result.getMarkerScore());
             } catch (ApiException e) {
@@ -876,7 +877,6 @@ public class MarkServiceImpl implements MarkService {
                 lockService.unwatch(LockType.QUESTION, result.getQuestionId());
             }
         }
-        resetStudentStatus(markStudent.getId());
     }
 
     private void updateMarkSubjectScore(MarkStudent markStudent, MarkResultQuestion resultQuestion, Long userId) {
@@ -1170,8 +1170,7 @@ public class MarkServiceImpl implements MarkService {
                             resetStudentStatus(task.getStudentId());
                             count++;
                         }
-                    }
-                    if (markResultQuestion.getMarkerScore() <= markQuestion.getTotalScore()) {//阅卷分是否小于等于该组总分
+                    } else if (markResultQuestion.getMarkerScore() <= markQuestion.getTotalScore()) {//阅卷分是否小于等于该组总分
                         if (submitTask(task, userId, markQuestion, markResultQuestion)) {
                             updateMarkedCount(markUserQuestion.getExamId(), markUserQuestion.getPaperNumber(), markUserQuestion.getQuestionId());
                             count++;
@@ -1198,8 +1197,8 @@ public class MarkServiceImpl implements MarkService {
                 MarkProblemStatus.WAITING);
         if (history == null) {
             history = new MarkProblemHistory();
+            history.setId(SystemConstant.getDbUuid());
         }
-        history.setId(SystemConstant.getDbUuid());
         history.setExamId(task.getExamId());
         history.setSecretNumber(task.getSecretNumber());
         history.setStudentCode(task.getStudentCode());
@@ -1214,7 +1213,7 @@ public class MarkServiceImpl implements MarkService {
         history.setCreateTime(System.currentTimeMillis());
         history.setStatus(MarkProblemStatus.WAITING);
         history.setUserId(userId);
-        markProblemHistoryService.save(history);
+        markProblemHistoryService.saveOrUpdate(history);
     }
 
     private boolean submitTask(MarkTask task, Long userId, MarkQuestion markQuestion, MarkResultQuestion result) {

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

@@ -290,7 +290,7 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
     public boolean updateProblemResult(Long taskId, Long userId, Long now, int spent) {
         UpdateWrapper<MarkTask> updateWrapper = new UpdateWrapper<>();
         updateWrapper.lambda().eq(MarkTask::getId, taskId)
-                .in(MarkTask::getStatus, Arrays.asList(MarkTaskStatus.WAITING, MarkTaskStatus.REJECTED, MarkTaskStatus.MARKED))
+                .in(MarkTask::getStatus, Arrays.asList(MarkTaskStatus.WAITING, MarkTaskStatus.REJECTED, MarkTaskStatus.MARKED, MarkTaskStatus.PROBLEM))
                 .set(MarkTask::getStatus, MarkTaskStatus.PROBLEM)
                 .set(MarkTask::getUserId, userId)
                 .set(MarkTask::getMarkerScore, 0)

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

@@ -25,6 +25,9 @@ import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 @Service
 public class TaskServiceImpl implements TaskService {
@@ -272,9 +275,11 @@ public class TaskServiceImpl implements TaskService {
         String paperNumber = markStudent.getPaperNumber();
         List<TaskQuestion> taskQuestions = new ArrayList<>();
         List<MarkQuestion> sList = markQuestionService.listByExamIdAndPaperNumberAndObjective(examId, paperNumber, false);
+        Map<Long, MarkQuestion> questionMap = sList.stream().collect(Collectors.toMap(MarkQuestion::getId, Function.identity()));
         List<MarkSubjectiveScore> scoreList = markSubjectiveScoreService.listByStudentId(markStudent.getId());
         for (int i = 0; i < scoreList.size(); i++) {
-            MarkQuestion question = sList.get(i);
+            MarkSubjectiveScore markSubjectiveScore = scoreList.get(i);
+            MarkQuestion question = questionMap.get(markSubjectiveScore.getQuestionId());
             TaskQuestion step = buildStep(question);
             // 管理员复核时,默认全部为自己评
             step.setSelfMark(true);

+ 1 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/utils/CardParseUtils.java

@@ -2,7 +2,6 @@ package com.qmth.teachcloud.mark.utils;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.qmth.teachcloud.common.bean.dto.mark.PictureConfig;
 import com.qmth.teachcloud.common.entity.MarkQuestion;
 import com.qmth.teachcloud.common.enums.QuestionType;
 import com.qmth.teachcloud.mark.bean.vo.parseCard.*;
@@ -169,7 +168,7 @@ public class CardParseUtils {
             }
 
             Double elasticRate = 0.01;
-            if (prevConfig.getMainNumber().equals(item.getMainNumber())
+            if (((prevConfig.getQuestionType().equals("4") && prevConfig.getMainNumber().equals(item.getMainNumber())) || (!prevConfig.getQuestionType().equals("4") && prevConfig.getQuestionNumber().equals(item.getQuestionNumber())))
                     && prevConfig.getI() == item.getI() &&
                     prevConfig.getY() + prevConfig.getH() + elasticRate >= item.getY() &&
                     prevConfig.getW().equals(item.getW()) &&