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

3.4.5 update-20250417,新功能开发

xiaofei 2 сар өмнө
parent
commit
d5affed91f

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

@@ -109,16 +109,20 @@ public class MarkArbitrateHistoryServiceImpl extends ServiceImpl<MarkArbitrateHi
         for (MarkTask markTask : markTaskList) {
             MarkArbitrateMarkerDto markArbitrateMarkerDto = new MarkArbitrateMarkerDto();
             MarkUserQuestion markUserGroup = markUserQuestionService.getByExamIdAndPaperNumberAndQuestionIdAndUserId(markTask.getExamId(), markTask.getPaperNumber(), markTask.getQuestionId(), markTask.getUserId());
+            SysUser sysUser;
             if (markUserGroup != null) {
                 markArbitrateMarkerDto.setUserId(markTask.getUserId());
-                SysUser sysUser = sysUserService.getById(markTask.getUserId());
-                if (sysUser != null) {
-                    markArbitrateMarkerDto.setUserLoginName(sysUser.getLoginName());
-                    markArbitrateMarkerDto.setUserName(sysUser.getRealName());
-                }
-                markArbitrateMarkerDto.setMarkTime(markTask.getMarkerTime());
-                markArbitrateMarkerDto.setTotalScore(markTask.getMarkerScore());
+                sysUser = sysUserService.getById(markTask.getUserId());
+            } else {
+                // ai评卷,无真实评卷员
+                sysUser = sysUserService.getByUserId(markTask.getUserId());
+            }
+            if (sysUser != null) {
+                markArbitrateMarkerDto.setUserLoginName(sysUser.getLoginName());
+                markArbitrateMarkerDto.setUserName(sysUser.getRealName());
             }
+            markArbitrateMarkerDto.setMarkTime(markTask.getMarkerTime());
+            markArbitrateMarkerDto.setTotalScore(markTask.getMarkerScore());
             markArbitrateMarkerDtoList.add(markArbitrateMarkerDto);
         }
         return markArbitrateMarkerDtoList;

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

@@ -944,6 +944,8 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
         boolean isExist = markAiQuestionParamService.existMarkAiQuestionPointOrLevel(examId, paperNumber, questionId);
         UpdateWrapper<MarkQuestion> updateWrapper = new UpdateWrapper<>();
         updateWrapper.lambda().set(MarkQuestion::getAiMark, isExist && !MarkPaperAiMark.NONE.equals(markPaper.getAiMark()) ? markPaper.getAiMark() : MarkPaperAiMark.NONE)
+                .set(MarkQuestion::getDoubleRate, isExist && MarkPaperAiMark.MAN_MACHINE.equals(markPaper.getAiMark()) ? 100 : 0)
+                .set(MarkQuestion::getScorePolicy, isExist && MarkPaperAiMark.MAN_MACHINE.equals(markPaper.getAiMark()) ? ScorePolicy.AVG : null)
                 .eq(MarkQuestion::getId, questionId);
         this.update(updateWrapper);
     }

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

@@ -514,7 +514,7 @@ public class MarkServiceImpl implements MarkService {
             for (MarkQuestion markQuestion : markQuestionList) {
                 // 生成正评任务
                 buildFormalTask(markQuestion);
-                if (markQuestion.getDoubleRate() != null && markQuestion.getDoubleRate() > 0) {
+                if (markQuestion.getDoubleRate() != null && markQuestion.getDoubleRate() > 0 && markQuestion.getArbitrateThreshold() > 0) {
                     // 补双评任务
                     fillFormalTask(markQuestion);
                 }
@@ -711,6 +711,14 @@ public class MarkServiceImpl implements MarkService {
                         this.updateMarkedCount(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
                         this.updatePersonTask(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
                     }
+
+                    for (MarkTask markTask : taskList) {
+                        Long studentId = markTask.getStudentId();
+                        markSubjectiveScoreService.deleteByStudentIdAndQuestionId(studentId, markQuestion.getId());
+                        lockService.waitlock(LockType.STUDENT, markTask.getStudentId());
+                        markStudentService.updateSubjectiveStatusAndScore(studentId, SubjectiveStatus.UNMARK);
+                        lockService.unlock(LockType.STUDENT, markTask.getStudentId());
+                    }
                 }
                 studentList = markStudentService.listUnMarkTaskStudent(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId(), pageSize);
             }
@@ -1582,15 +1590,15 @@ public class MarkServiceImpl implements MarkService {
             List<MarkTask> markTasks = null;
             int pageNumber = 1;
             do {
-                Set<Long> questions = new HashSet<>(Arrays.asList(questionId));
+//                Set<Long> questions = new HashSet<>(Arrays.asList(questionId));
                 markTasks = markTaskService.findAiUnMarked(new Page<>(pageNumber, 20), examId, paperNumber, questionId);
                 if (markTasks.isEmpty() || !markQuestion.getEnableAi()) {
                     break;
                 }
                 for (MarkTask t : markTasks) {
-                    if (this.applyTask(examId, paperNumber, t.getStudentId(), aiUser.getId(), questions, Arrays.asList(t.getId()))) {
-                        continue;
-                    }
+//                    if (this.applyTask(examId, paperNumber, t.getStudentId(), aiUser.getId(), questions, Arrays.asList(t.getId()))) {
+//                        continue;
+//                    }
                     // 考生作答
                     try {
                         long startTime = System.currentTimeMillis();
@@ -1693,7 +1701,6 @@ public class MarkServiceImpl implements MarkService {
             int finalI = i + 1;
             MarkOcrStudentQuestion markOcrStudentQuestion = markOcrStudentQuestions.stream().filter(m -> m.getNumber().equals(finalI)).findFirst().get();
 
-
             int offsetX = 0, offsetY = 0;
             for (int j = 0; j < doubles.length; j++) {
                 int picX = (int) (markOcrStudentQuestion.getImageWidth() * markConfigItem.getX());
@@ -1707,7 +1714,8 @@ public class MarkServiceImpl implements MarkService {
                 } else {
                     offsetX = offsetX + stepXAdd;
                 }
-                if (offsetX > picX + picW) {
+                // -50,防止太靠边出界
+                if (offsetX > picX + picW - 50) {
                     if (offsetY > picY + picH) {
                         continue;
                     } else {