xiatian hace 11 meses
padre
commit
ce5f709d56

+ 3 - 1
db/am_db.sql

@@ -37,7 +37,9 @@ CREATE TABLE `am_student` (
   `data_status` varchar(255) NOT NULL,
   `err_msg` varchar(2000) COLLATE utf8mb4_bin DEFAULT NULL,
   PRIMARY KEY (`id`),
-  UNIQUE KEY `IDX_STUDENT_01` (`exam_id`, `subject_code`, `student_code`)
+  UNIQUE KEY `IDX_STUDENT_01` (`exam_id`, `subject_code`, `student_code`),
+  KEY `IDX_STUDENT_02` (`student_code`),
+  KEY `IDX_STUDENT_03` (`data_status`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
 
 DROP TABLE IF EXISTS `am_student_score`;

+ 2 - 0
src/main/java/cn/com/qmth/am/service/StudentScoreService.java

@@ -46,4 +46,6 @@ public interface StudentScoreService extends IService<StudentScoreEntity> {
 	List<StudentScoreEntity> findBy(Long examId, String subjectCode, Integer mainNumber, String subNumber,
 			Boolean exZero, Integer count,Integer score);
 
+	List<StudentScoreEntity> findToAiMarking(Long studentId);
+
 }

+ 2 - 0
src/main/java/cn/com/qmth/am/service/StudentService.java

@@ -40,5 +40,7 @@ public interface StudentService  extends IService<StudentEntity> {
 
 	void clear(Long examId, String subjectCode);
 
+	List<StudentEntity> findToMrking();
+
 
 }

+ 10 - 0
src/main/java/cn/com/qmth/am/service/impl/StudentScoreServiceImpl.java

@@ -612,6 +612,16 @@ public class StudentScoreServiceImpl extends ServiceImpl<StudentScoreDao, Studen
 		lw.in(StudentScoreEntity::getScoreStatus, DataStatus.WAITING, DataStatus.FAILED);
 		return this.list(wrapper);
 	}
+	
+	@Override
+	public List<StudentScoreEntity> findToAiMarking(Long studentId) {
+		QueryWrapper<StudentScoreEntity> wrapper = new QueryWrapper<>();
+		LambdaQueryWrapper<StudentScoreEntity> lw = wrapper.lambda();
+		lw.eq(StudentScoreEntity::getStudentId, studentId);
+		lw.eq(StudentScoreEntity::getAnswerStatus, DataStatus.SUCCESS);
+		lw.in(StudentScoreEntity::getScoreStatus, DataStatus.WAITING, DataStatus.FAILED);
+		return this.list(wrapper);
+	}
 
 	@Transactional
 	@Override

+ 8 - 0
src/main/java/cn/com/qmth/am/service/impl/StudentServiceImpl.java

@@ -265,6 +265,14 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
 		lw.in(StudentEntity::getDataStatus, DataStatus.WAITING,DataStatus.FAILED);
 		return this.list(wrapper);
 	}
+	
+	@Override
+	public List<StudentEntity> findToMrking() {
+		QueryWrapper<StudentEntity> wrapper = new QueryWrapper<>();
+		LambdaQueryWrapper<StudentEntity> lw = wrapper.lambda();
+		lw.in(StudentEntity::getDataStatus, DataStatus.WAITING,DataStatus.FAILED,DataStatus.PROCESSING);
+		return this.list(wrapper);
+	}
 
 	@Override
 	public void buildImage(StudentEntity student, Map<Long,QuestionEntity> quetions) {

+ 15 - 6
src/main/java/cn/com/qmth/am/task/AiMarkingJob.java

@@ -10,15 +10,19 @@ import org.springframework.stereotype.Service;
 import com.qmth.boot.core.concurrent.service.ConcurrentService;
 
 import cn.com.qmth.am.config.SysProperty;
+import cn.com.qmth.am.entity.StudentEntity;
 import cn.com.qmth.am.entity.StudentScoreEntity;
 import cn.com.qmth.am.enums.LockType;
 import cn.com.qmth.am.service.StudentScoreService;
+import cn.com.qmth.am.service.StudentService;
 
 @Service
 public class AiMarkingJob {
 	@Autowired
 	private StudentScoreService studentScoreService;
 	@Autowired
+	private StudentService studentService;
+	@Autowired
 	private ConcurrentService concurrentService;
 	@Autowired
 	private SysProperty sysProperty;
@@ -28,8 +32,8 @@ public class AiMarkingJob {
 		if(!sysProperty.getMarkingTaskEnable()) {
 			return;
 		}
-		List<StudentScoreEntity> scores = studentScoreService.findAllToAiMarking();
-		if (CollectionUtils.isEmpty(scores)) {
+		List<StudentEntity> students=studentService.findToMrking();
+		if (CollectionUtils.isEmpty(students)) {
 			return;
 		}
 		boolean lock = concurrentService.getReadWriteLock(LockType.AI_MARKING.name()).writeLock().tryLock();
@@ -37,7 +41,7 @@ public class AiMarkingJob {
 			if (!lock) {
 				return;
 			}
-			this.dispose(scores);
+			this.dispose(students);
 		} finally {
 			if (lock) {
 				concurrentService.getReadWriteLock(LockType.AI_MARKING.name()).writeLock().unlock();
@@ -45,12 +49,17 @@ public class AiMarkingJob {
 		}
 	}
 
-	private void dispose(List<StudentScoreEntity> scores) {
-		for (StudentScoreEntity score : scores) {
+	private void dispose(List<StudentEntity> students) {
+		for (StudentEntity student : students) {
 			if(!sysProperty.getMarkingTaskEnable()) {
 				return;
 			}
-			studentScoreService.aiMarking(score);
+			List<StudentScoreEntity> scores = studentScoreService.findToAiMarking(student.getId());
+			if (CollectionUtils.isNotEmpty(scores)) {
+				for (StudentScoreEntity score : scores) {
+					studentScoreService.aiMarking(score);
+				}
+			}
 		}
 	}