|
@@ -1,17 +1,20 @@
|
|
package cn.com.qmth.stmms.admin.thread;
|
|
package cn.com.qmth.stmms.admin.thread;
|
|
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
|
|
import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
|
|
import cn.com.qmth.stmms.biz.exam.service.InspectedService;
|
|
import cn.com.qmth.stmms.biz.exam.service.InspectedService;
|
|
import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
|
|
import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
|
|
import cn.com.qmth.stmms.biz.exam.service.MarkerService;
|
|
import cn.com.qmth.stmms.biz.exam.service.MarkerService;
|
|
import cn.com.qmth.stmms.biz.lock.LockService;
|
|
import cn.com.qmth.stmms.biz.lock.LockService;
|
|
import cn.com.qmth.stmms.biz.mark.service.MarkService;
|
|
import cn.com.qmth.stmms.biz.mark.service.MarkService;
|
|
import cn.com.qmth.stmms.common.enums.LockType;
|
|
import cn.com.qmth.stmms.common.enums.LockType;
|
|
|
|
+import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
|
|
|
|
|
|
public class SubjectiveCalculateThread implements Runnable {
|
|
public class SubjectiveCalculateThread implements Runnable {
|
|
|
|
|
|
@@ -33,11 +36,11 @@ public class SubjectiveCalculateThread implements Runnable {
|
|
|
|
|
|
private String subjectCode;
|
|
private String subjectCode;
|
|
|
|
|
|
- private List<Integer> studentList;
|
|
|
|
|
|
+ private ExamStudentService studentService;
|
|
|
|
|
|
- public SubjectiveCalculateThread(Integer examId, String subjectCode, List<Integer> studentList,
|
|
|
|
|
|
+ public SubjectiveCalculateThread(Integer examId, String subjectCode,
|
|
MarkService markService, LockService lockService, ExamQuestionService questionService,
|
|
MarkService markService, LockService lockService, ExamQuestionService questionService,
|
|
- MarkGroupService groupService, MarkerService markerService, InspectedService inspectedService) {
|
|
|
|
|
|
+ MarkGroupService groupService, MarkerService markerService, InspectedService inspectedService,ExamStudentService studentService) {
|
|
this.markService = markService;
|
|
this.markService = markService;
|
|
this.lockService = lockService;
|
|
this.lockService = lockService;
|
|
this.questionService = questionService;
|
|
this.questionService = questionService;
|
|
@@ -46,11 +49,12 @@ public class SubjectiveCalculateThread implements Runnable {
|
|
this.inspectedService = inspectedService;
|
|
this.inspectedService = inspectedService;
|
|
this.examId = examId;
|
|
this.examId = examId;
|
|
this.subjectCode = subjectCode;
|
|
this.subjectCode = subjectCode;
|
|
- this.studentList = studentList;
|
|
|
|
|
|
+ this.studentService = studentService;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void run() {
|
|
public void run() {
|
|
|
|
+ List<Integer> lockedStudentList=new ArrayList<>();
|
|
try {
|
|
try {
|
|
lockService.waitlock(LockType.SCORE_CALCULATE, examId, subjectCode);
|
|
lockService.waitlock(LockType.SCORE_CALCULATE, examId, subjectCode);
|
|
lockService.waitlock(LockType.EXAM_SUBJECT, examId, subjectCode);
|
|
lockService.waitlock(LockType.EXAM_SUBJECT, examId, subjectCode);
|
|
@@ -61,15 +65,18 @@ public class SubjectiveCalculateThread implements Runnable {
|
|
subjectCode, false);
|
|
subjectCode, false);
|
|
// 考生整体状态与总分更新
|
|
// 考生整体状态与总分更新
|
|
long groupCount = groupService.countByExamAndSubject(examId, subjectCode);
|
|
long groupCount = groupService.countByExamAndSubject(examId, subjectCode);
|
|
|
|
+ List<Integer> studentList = studentService.findIdByExamIdAndSubjectCodeAndSubjectiveStatus(examId, subjectCode,
|
|
|
|
+ SubjectiveStatus.UNMARK, SubjectiveStatus.MARKED);
|
|
for (Integer studentId : studentList) {
|
|
for (Integer studentId : studentList) {
|
|
lockService.waitlock(LockType.STUDENT, studentId);
|
|
lockService.waitlock(LockType.STUDENT, studentId);
|
|
|
|
+ lockedStudentList.add(studentId);
|
|
markService.checkStudentSubjective(studentId, groupCount, unGroupQuestionCount);
|
|
markService.checkStudentSubjective(studentId, groupCount, unGroupQuestionCount);
|
|
}
|
|
}
|
|
inspectedService.cancelBySubject(examId, subjectCode);
|
|
inspectedService.cancelBySubject(examId, subjectCode);
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
log.error("SubjectiveCalculateThread error", e);
|
|
log.error("SubjectiveCalculateThread error", e);
|
|
} finally {
|
|
} finally {
|
|
- for (Integer studentId : studentList) {
|
|
|
|
|
|
+ for (Integer studentId : lockedStudentList) {
|
|
lockService.unlock(LockType.STUDENT, studentId);
|
|
lockService.unlock(LockType.STUDENT, studentId);
|
|
}
|
|
}
|
|
lockService.unlock(LockType.EXAM_SUBJECT, examId, subjectCode);
|
|
lockService.unlock(LockType.EXAM_SUBJECT, examId, subjectCode);
|