Преглед на файлове

3.4.5 update-20250410,新功能开发

xiaofei преди 2 месеца
родител
ревизия
2306919d05

+ 3 - 1
distributed-print/install/mysql/upgrade/3.4.5.sql

@@ -54,4 +54,6 @@ CREATE TABLE `mark_ai_question_level` (
                                           `max_score` double NOT NULL COMMENT '最大分值',
                                           `max_score` double NOT NULL COMMENT '最大分值',
                                           `answer` varchar(1000) NOT NULL COMMENT '标答',
                                           `answer` varchar(1000) NOT NULL COMMENT '标答',
                                           PRIMARY KEY (`id`)
                                           PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI评卷得分明细表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI评卷得分明细表';
+
+ALTER TABLE `mark_question` ADD COLUMN `person_task` TINYINT(1) NULL DEFAULT 1 COMMENT '是否有人评任务' AFTER `ai_mark`;

+ 11 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/MarkQuestion.java

@@ -120,6 +120,9 @@ public class MarkQuestion extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "AI评卷")
     @ApiModelProperty(value = "AI评卷")
     private MarkPaperAiMark aiMark;
     private MarkPaperAiMark aiMark;
 
 
+    @ApiModelProperty(value = "是否有人评任务")
+    private Boolean personTask;
+
     @TableField(exist = false)
     @TableField(exist = false)
     private double markScore;
     private double markScore;
 
 
@@ -333,6 +336,14 @@ public class MarkQuestion extends BaseEntity implements Serializable {
         this.aiMark = aiMark;
         this.aiMark = aiMark;
     }
     }
 
 
+    public Boolean getPersonTask() {
+        return personTask;
+    }
+
+    public void setPersonTask(Boolean personTask) {
+        this.personTask = personTask;
+    }
+
     public double getMarkScore() {
     public double getMarkScore() {
         return markScore;
         return markScore;
     }
     }

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

@@ -38,6 +38,8 @@ public interface MarkService {
 
 
     void updateMarkedCount(Long examId, String paperNumber, Long questionId);
     void updateMarkedCount(Long examId, String paperNumber, Long questionId);
 
 
+    void updatePersonTask(Long examId, String paperNumber, Long questionId);
+
     boolean rejectMarkTask(MarkProblemHistory markProblemHistory, MarkTask markTask, Long userId);
     boolean rejectMarkTask(MarkProblemHistory markProblemHistory, MarkTask markTask, Long userId);
 
 
     String getGroupKey(MarkQuestion markQuestion);
     String getGroupKey(MarkQuestion markQuestion);

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

@@ -12,6 +12,7 @@ import com.qmth.teachcloud.common.bean.dto.mark.ObjectiveAnswerDto;
 import com.qmth.teachcloud.common.bean.dto.mark.PictureConfig;
 import com.qmth.teachcloud.common.bean.dto.mark.PictureConfig;
 import com.qmth.teachcloud.common.bean.params.mark.group.QuestionPictureConfigParams;
 import com.qmth.teachcloud.common.bean.params.mark.group.QuestionPictureConfigParams;
 import com.qmth.teachcloud.common.bean.result.ExcelResult;
 import com.qmth.teachcloud.common.bean.result.ExcelResult;
+import com.qmth.teachcloud.common.bean.sync.ExamTaskDataVo;
 import com.qmth.teachcloud.common.bean.vo.FilePathVo;
 import com.qmth.teachcloud.common.bean.vo.FilePathVo;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.MarkQuestion;
 import com.qmth.teachcloud.common.entity.MarkQuestion;
@@ -37,6 +38,7 @@ import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.mark.entity.MarkQuestionAnswer;
 import com.qmth.teachcloud.mark.entity.MarkQuestionAnswer;
 import com.qmth.teachcloud.mark.entity.MarkTask;
 import com.qmth.teachcloud.mark.entity.MarkTask;
 import com.qmth.teachcloud.mark.entity.MarkUserQuestion;
 import com.qmth.teachcloud.mark.entity.MarkUserQuestion;
+import com.qmth.teachcloud.mark.enums.ExamType;
 import com.qmth.teachcloud.mark.enums.LockType;
 import com.qmth.teachcloud.mark.enums.LockType;
 import com.qmth.teachcloud.mark.enums.MarkTaskStatus;
 import com.qmth.teachcloud.mark.enums.MarkTaskStatus;
 import com.qmth.teachcloud.mark.lock.LockService;
 import com.qmth.teachcloud.mark.lock.LockService;

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

@@ -1,6 +1,8 @@
 package com.qmth.teachcloud.mark.service.impl;
 package com.qmth.teachcloud.mark.service.impl;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -100,6 +102,8 @@ public class MarkServiceImpl implements MarkService {
     private MarkRejectHistoryService markRejectHistoryService;
     private MarkRejectHistoryService markRejectHistoryService;
     @Resource
     @Resource
     private BasicOperationLogService basicOperationLogService;
     private BasicOperationLogService basicOperationLogService;
+    @Resource
+    private MarkAiQuestionParamService markAiQuestionParamService;
 
 
     /**
     /**
      * 释放某个评卷员的考生
      * 释放某个评卷员的考生
@@ -214,6 +218,21 @@ public class MarkServiceImpl implements MarkService {
         markQuestionService.updateMarkedCount(questionId, count);
         markQuestionService.updateMarkedCount(questionId, count);
     }
     }
 
 
+    @Override
+    public void updatePersonTask(Long examId, String paperNumber, Long questionId) {
+        QueryWrapper<MarkTask> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(MarkTask::getExamId, examId)
+                .eq(MarkTask::getPaperNumber, paperNumber)
+                .eq(MarkTask::getQuestionId, questionId)
+                .last(" limit 1");
+        MarkTask markTask = markTaskService.getOne(queryWrapper);
+
+        UpdateWrapper<MarkQuestion> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(MarkQuestion::getPersonTask, markTask != null)
+                .eq(MarkQuestion::getId, questionId);
+        markQuestionService.update(updateWrapper);
+    }
+
     @Override
     @Override
     public boolean rejectMarkTask(MarkProblemHistory markProblemHistory, MarkTask markTask, Long userId) {
     public boolean rejectMarkTask(MarkProblemHistory markProblemHistory, MarkTask markTask, Long userId) {
         MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(markTask.getExamId(), markTask.getPaperNumber());
         MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(markTask.getExamId(), markTask.getPaperNumber());
@@ -455,6 +474,9 @@ public class MarkServiceImpl implements MarkService {
             // 处理正常考生
             // 处理正常考生
             List<MarkQuestion> markQuestionList = markQuestionService.listByExamIdAndPaperNumberAndObjective(markPaper.getExamId(), markPaper.getPaperNumber(), false);
             List<MarkQuestion> markQuestionList = markQuestionService.listByExamIdAndPaperNumberAndObjective(markPaper.getExamId(), markPaper.getPaperNumber(), false);
             for (MarkQuestion markQuestion : markQuestionList) {
             for (MarkQuestion markQuestion : markQuestionList) {
+                if (!MarkPaperAiMark.NONE.equals(markQuestion.getAiMark()) && !markAiQuestionParamService.existMarkAiQuestionScoreOrLevel(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId())) {
+                    continue;
+                }
                 // 生成正评任务
                 // 生成正评任务
                 buildFormalTask(markQuestion);
                 buildFormalTask(markQuestion);
                 if (markQuestion.getDoubleRate() != null && markQuestion.getDoubleRate() > 0) {
                 if (markQuestion.getDoubleRate() != null && markQuestion.getDoubleRate() > 0) {
@@ -502,6 +524,7 @@ public class MarkServiceImpl implements MarkService {
                     markTask.setStudentCode(student.getStudentCode());
                     markTask.setStudentCode(student.getStudentCode());
                     markTask.setSecretNumber(student.getSecretNumber());
                     markTask.setSecretNumber(student.getSecretNumber());
                     markTask.setTaskNumber(1);
                     markTask.setTaskNumber(1);
+                    markTask.setAiMarked(getAiMarked(markQuestion, markTask.getTaskNumber()));
                     markTask.setStatus(MarkTaskStatus.WAITING);
                     markTask.setStatus(MarkTaskStatus.WAITING);
                     taskList.add(markTask);
                     taskList.add(markTask);
                     // 开启双评时需要判断是否生成第二份评卷任务
                     // 开启双评时需要判断是否生成第二份评卷任务
@@ -533,6 +556,7 @@ public class MarkServiceImpl implements MarkService {
                             markTask.setStudentCode(student.getStudentCode());
                             markTask.setStudentCode(student.getStudentCode());
                             markTask.setSecretNumber(student.getSecretNumber());
                             markTask.setSecretNumber(student.getSecretNumber());
                             markTask.setTaskNumber(2);
                             markTask.setTaskNumber(2);
+                            markTask.setAiMarked(getAiMarked(markQuestion, markTask.getTaskNumber()));
                             markTask.setStatus(MarkTaskStatus.WAITING);
                             markTask.setStatus(MarkTaskStatus.WAITING);
                             taskList.add(markTask);
                             taskList.add(markTask);
                             doubleCount++;
                             doubleCount++;
@@ -550,6 +574,7 @@ public class MarkServiceImpl implements MarkService {
                     if (MarkPaperStatus.FORMAL.equals(markPaper.getStatus())) {
                     if (MarkPaperStatus.FORMAL.equals(markPaper.getStatus())) {
                         this.updateMarkTaskCount(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
                         this.updateMarkTaskCount(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
                         this.updateMarkedCount(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
                         this.updateMarkedCount(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
+                        this.updatePersonTask(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
                     }
                     }
                 }
                 }
                 studentList = markStudentService.listUnMarkTaskStudent(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId(), pageSize);
                 studentList = markStudentService.listUnMarkTaskStudent(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId(), pageSize);
@@ -566,6 +591,16 @@ public class MarkServiceImpl implements MarkService {
         }
         }
     }
     }
 
 
+    private Boolean getAiMarked(MarkQuestion markQuestion, Integer taskNumber) {
+        if (MarkPaperAiMark.NONE.equals(markQuestion.getAiMark())) {
+            return false;
+        } else if (MarkPaperAiMark.AI_ONLY.equals(markQuestion.getAiMark()) || MarkPaperAiMark.MAN_MACHINE.equals(markQuestion.getAiMark())) {
+            return taskNumber == 1;
+        } else {
+            return false;
+        }
+    }
+
     private void fillFormalTask(MarkQuestion markQuestion) {
     private void fillFormalTask(MarkQuestion markQuestion) {
         int pageSize = 100;
         int pageSize = 100;
         try {
         try {
@@ -617,6 +652,7 @@ public class MarkServiceImpl implements MarkService {
                             markTask.setStudentCode(student.getStudentCode());
                             markTask.setStudentCode(student.getStudentCode());
                             markTask.setSecretNumber(student.getSecretNumber());
                             markTask.setSecretNumber(student.getSecretNumber());
                             markTask.setTaskNumber(2);
                             markTask.setTaskNumber(2);
+                            markTask.setAiMarked(getAiMarked(markQuestion, markTask.getTaskNumber()));
                             markTask.setStatus(MarkTaskStatus.WAITING);
                             markTask.setStatus(MarkTaskStatus.WAITING);
                             taskList.add(markTask);
                             taskList.add(markTask);
                             doubleCount++;
                             doubleCount++;
@@ -634,6 +670,7 @@ public class MarkServiceImpl implements MarkService {
                     if (MarkPaperStatus.FORMAL.equals(markPaper.getStatus())) {
                     if (MarkPaperStatus.FORMAL.equals(markPaper.getStatus())) {
                         this.updateMarkTaskCount(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
                         this.updateMarkTaskCount(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
                         this.updateMarkedCount(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
                         this.updateMarkedCount(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
+                        this.updatePersonTask(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
                     }
                     }
                 }
                 }
                 studentList = markStudentService.listUnMarkTaskStudent(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId(), pageSize);
                 studentList = markStudentService.listUnMarkTaskStudent(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId(), pageSize);
@@ -672,8 +709,9 @@ public class MarkServiceImpl implements MarkService {
     public void updateGroupAllCount(Long examId, String paperNumber) {
     public void updateGroupAllCount(Long examId, String paperNumber) {
         List<MarkQuestion> markQuestionList = markQuestionService.listByExamIdAndPaperNumberAndObjective(examId, paperNumber, false);
         List<MarkQuestion> markQuestionList = markQuestionService.listByExamIdAndPaperNumberAndObjective(examId, paperNumber, false);
         for (MarkQuestion markQuestion : markQuestionList) {
         for (MarkQuestion markQuestion : markQuestionList) {
-            updateMarkedCount(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
-            updateMarkTaskCount(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
+            this.updateMarkedCount(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
+            this.updateMarkTaskCount(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
+            this.updatePersonTask(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
         }
         }
     }
     }
 
 

+ 1 - 0
teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml

@@ -1036,6 +1036,7 @@
           AND EXISTS (SELECT 1
           AND EXISTS (SELECT 1
                      FROM mark_task mt
                      FROM mark_task mt
                      WHERE mt.user_id IS NULL
                      WHERE mt.user_id IS NULL
+                        AND mt.ai_marked = false
                     <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=",">

+ 1 - 0
teachcloud-mark/src/main/resources/mapper/MarkTaskMapper.xml

@@ -204,6 +204,7 @@
         AND mt.paper_number = #{paperNumber}
         AND mt.paper_number = #{paperNumber}
         AND mt.question_id = #{questionId}
         AND mt.question_id = #{questionId}
         AND mt.user_id is null
         AND mt.user_id is null
+        AND mt.ai_marked = false
         AND (mt.status='WAITING' or mt.status='REJECTED')
         AND (mt.status='WAITING' or mt.status='REJECTED')
 		AND NOT EXISTS ( 
 		AND NOT EXISTS ( 
 			SELECT t.id 
 			SELECT t.id 

+ 2 - 2
teachcloud-mark/src/main/resources/mapper/MarkUserQuestionMapper.xml

@@ -56,7 +56,7 @@
             <if test="paperNumber != null and paperNumber != ''">
             <if test="paperNumber != null and paperNumber != ''">
                 and mq.paper_number = #{paperNumber}
                 and mq.paper_number = #{paperNumber}
             </if>
             </if>
-            and muq.user_id = #{userId} and mq.task_count > 0
+            and muq.user_id = #{userId} and mq.task_count > 0 and mq.person_task = true
             <if test="status != null and status != ''">
             <if test="status != null and status != ''">
                 and exists (select 1 from mark_paper mp where mp.exam_id = mq.exam_id and mp.paper_number = mq.paper_number and mp.status = #{status})
                 and exists (select 1 from mark_paper mp where mp.exam_id = mq.exam_id and mp.paper_number = mq.paper_number and mp.status = #{status})
             </if>
             </if>
@@ -180,7 +180,7 @@
         JOIN
         JOIN
         basic_semester bs ON be.semester_id = bs.id and bs.enable = true
         basic_semester bs ON be.semester_id = bs.id and bs.enable = true
         <where>
         <where>
-            and muq.user_id = #{userId} and mq.task_count > 0
+            and muq.user_id = #{userId} and mq.task_count > 0 and mq.person_task = true
             <if test="status != null and status != ''">
             <if test="status != null and status != ''">
                 and exists (select 1 from mark_paper mp where mp.exam_id = mq.exam_id and mp.paper_number = mq.paper_number and mp.status = #{status})
                 and exists (select 1 from mark_paper mp where mp.exam_id = mq.exam_id and mp.paper_number = mq.paper_number and mp.status = #{status})
             </if>
             </if>