|
@@ -1,19 +1,5 @@
|
|
|
package cn.com.qmth.stmms.biz.mark.service.Impl;
|
|
|
|
|
|
-import java.util.Date;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-
|
|
|
-import org.slf4j.Logger;
|
|
|
-import org.slf4j.LoggerFactory;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.beans.factory.annotation.Value;
|
|
|
-import org.springframework.scheduling.annotation.Scheduled;
|
|
|
-import org.springframework.stereotype.Component;
|
|
|
-
|
|
|
-import cn.com.qmth.stmms.biz.campus.model.Campus;
|
|
|
-import cn.com.qmth.stmms.biz.campus.service.CampusService;
|
|
|
import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
|
|
|
import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
|
|
|
import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
|
|
@@ -28,6 +14,15 @@ import cn.com.qmth.stmms.biz.utils.FormalTaskUtil;
|
|
|
import cn.com.qmth.stmms.biz.utils.TrialTaskUtil;
|
|
|
import cn.com.qmth.stmms.common.enums.LockType;
|
|
|
import cn.com.qmth.stmms.common.enums.MarkStatus;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.scheduling.annotation.Scheduled;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
|
|
|
/**
|
|
|
* 与评卷相关的所有定时任务
|
|
@@ -39,9 +34,6 @@ public class MarkCronService {
|
|
|
|
|
|
protected static final Logger log = LoggerFactory.getLogger(MarkCronService.class);
|
|
|
|
|
|
- @Autowired
|
|
|
- private CampusService campusService;
|
|
|
-
|
|
|
@Autowired
|
|
|
private ExamStudentService studentService;
|
|
|
|
|
@@ -98,10 +90,9 @@ public class MarkCronService {
|
|
|
public void buildLibrary() {
|
|
|
log.info("start auto-create library");
|
|
|
try {
|
|
|
- Map<String, Campus> campusMap = new HashMap<>();
|
|
|
List<Integer> examIds = groupService.findExamIdByStatus(MarkStatus.TRIAL, MarkStatus.FORMAL);
|
|
|
for (Integer examId : examIds) {
|
|
|
- buildLibraryByExam(examId, campusMap);
|
|
|
+ buildLibraryByExam(examId);
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
log.error("auto-create library error", e);
|
|
@@ -132,11 +123,11 @@ public class MarkCronService {
|
|
|
// 获取主观题总分大于0的科目
|
|
|
List<ExamSubject> subjects = subjectService.list(examId, 0);
|
|
|
for (ExamSubject subject : subjects) {
|
|
|
- List<MarkGroup> groups = groupService.findByExamAndSubjectAndStatus(examId, subject.getCode(),
|
|
|
- MarkStatus.FORMAL);
|
|
|
+ List<MarkGroup> groups = groupService
|
|
|
+ .findByExamAndSubjectAndStatus(examId, subject.getCode(), MarkStatus.FORMAL);
|
|
|
for (MarkGroup markGroup : groups) {
|
|
|
- List<Marker> markers = markerService.findByExamAndSubjectAndGroup(examId, subject.getCode(),
|
|
|
- markGroup.getNumber());
|
|
|
+ List<Marker> markers = markerService
|
|
|
+ .findByExamAndSubjectAndGroup(examId, subject.getCode(), markGroup.getNumber());
|
|
|
for (Marker marker : markers) {
|
|
|
try {
|
|
|
if (markService.needUpdateQuality(marker, markerActiveExpireMinute)) {
|
|
@@ -151,13 +142,13 @@ public class MarkCronService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void buildLibraryByExam(Integer examId, Map<String, Campus> campusMap) {
|
|
|
+ private void buildLibraryByExam(Integer examId) {
|
|
|
// 获取主观题总分大于0的科目
|
|
|
List<ExamSubject> subjects = subjectService.listSubjectiveScore(examId, 0d);
|
|
|
for (ExamSubject subject : subjects) {
|
|
|
// 清除缺考考生和违纪考生
|
|
|
- List<ExamStudent> list = studentService.findAbsentOrBreachLibraryStudent(subject.getExamId(),
|
|
|
- subject.getCode());
|
|
|
+ List<ExamStudent> list = studentService
|
|
|
+ .findAbsentOrBreachLibraryStudent(subject.getExamId(), subject.getCode());
|
|
|
if (list != null) {
|
|
|
for (ExamStudent student : list) {
|
|
|
try {
|
|
@@ -172,59 +163,54 @@ public class MarkCronService {
|
|
|
}
|
|
|
// 处理正常考生
|
|
|
// 生成试评任务
|
|
|
- List<MarkGroup> groups = groupService.findByExamAndSubjectAndStatus(subject.getExamId(), subject.getCode(),
|
|
|
- MarkStatus.TRIAL);
|
|
|
+ List<MarkGroup> groups = groupService
|
|
|
+ .findByExamAndSubjectAndStatus(subject.getExamId(), subject.getCode(), MarkStatus.TRIAL);
|
|
|
for (MarkGroup group : groups) {
|
|
|
- buildTrialLibrary(campusMap, group);
|
|
|
+ buildTrialLibrary(group);
|
|
|
}
|
|
|
// 生成正评任务
|
|
|
// 试评状态的分组也提前生成
|
|
|
- groups = groupService.findByExamAndSubjectAndStatus(subject.getExamId(), subject.getCode(),
|
|
|
- MarkStatus.FORMAL, MarkStatus.TRIAL);
|
|
|
+ groups = groupService
|
|
|
+ .findByExamAndSubjectAndStatus(subject.getExamId(), subject.getCode(), MarkStatus.FORMAL,
|
|
|
+ MarkStatus.TRIAL);
|
|
|
for (MarkGroup group : groups) {
|
|
|
- buildFormalLibrary(subject, campusMap, group);
|
|
|
+ buildFormalLibrary(subject, group);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void buildFormalLibrary(ExamSubject subject, Map<String, Campus> campusMap, MarkGroup group) {
|
|
|
+ private void buildFormalLibrary(ExamSubject subject, MarkGroup group) {
|
|
|
Date lastBuildTime = group.getBuildTime();
|
|
|
int count = 0;
|
|
|
- ExamStudent student = studentService.findUnLibraryStudent(group.getExamId(), group.getSubjectCode(),
|
|
|
- group.getNumber(), lastBuildTime);
|
|
|
+ ExamStudent student = studentService
|
|
|
+ .findUnLibraryStudent(group.getExamId(), group.getSubjectCode(), group.getNumber(), lastBuildTime);
|
|
|
while (student != null) {
|
|
|
- // 补充学习中心集合
|
|
|
- Campus campus = getCampus(student, campusMap);
|
|
|
- if (campus == null) {
|
|
|
- log.error("campus unexist for student id=" + student.getId());
|
|
|
- continue;
|
|
|
- }
|
|
|
// 尝试构造评卷任务
|
|
|
try {
|
|
|
lockService.watch(LockType.GROUP, group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
lockService.watch(LockType.STUDENT, student.getId());
|
|
|
// 上锁后重复验证分组状态
|
|
|
- if (!groupService.validateStatus(group.getExamId(), group.getSubjectCode(), group.getNumber(),
|
|
|
- MarkStatus.FORMAL, MarkStatus.TRIAL)) {
|
|
|
+ if (!groupService
|
|
|
+ .validateStatus(group.getExamId(), group.getSubjectCode(), group.getNumber(), MarkStatus.FORMAL,
|
|
|
+ MarkStatus.TRIAL)) {
|
|
|
break;
|
|
|
}
|
|
|
// 上锁后重复验证考生状态
|
|
|
if (studentService.validateStatus(student.getId())) {
|
|
|
- markService.buildFormalLibrary(student, campus, group, subject);
|
|
|
+ markService.buildFormalLibrary(student, group, subject);
|
|
|
lastBuildTime = student.getUploadTime();
|
|
|
count++;
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
- log.error(
|
|
|
- "build formal library error for studentId=" + student.getId() + ", groupNumber="
|
|
|
- + group.getNumber(), e);
|
|
|
+ log.error("build formal library error for studentId=" + student.getId() + ", groupNumber=" + group
|
|
|
+ .getNumber(), e);
|
|
|
} finally {
|
|
|
lockService.unwatch(LockType.STUDENT, student.getId());
|
|
|
lockService.unwatch(LockType.GROUP, group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
}
|
|
|
// 取下一个考生
|
|
|
- student = studentService.findUnLibraryStudent(group.getExamId(), group.getSubjectCode(), group.getNumber(),
|
|
|
- lastBuildTime);
|
|
|
+ student = studentService
|
|
|
+ .findUnLibraryStudent(group.getExamId(), group.getSubjectCode(), group.getNumber(), lastBuildTime);
|
|
|
}
|
|
|
// 有新任务创建,同时正评状态,此时才需要更新任务数量
|
|
|
if (count > 0) {
|
|
@@ -236,20 +222,14 @@ public class MarkCronService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void buildTrialLibrary(Map<String, Campus> campusMap, MarkGroup group) {
|
|
|
+ private void buildTrialLibrary(MarkGroup group) {
|
|
|
while (group.getTrialCount() > group.getLibraryCount()) {
|
|
|
// 随机取一个未生成试评任务的考生
|
|
|
- ExamStudent student = studentService.randomUnTrialStudent(group.getExamId(), group.getSubjectCode(),
|
|
|
- group.getNumber());
|
|
|
+ ExamStudent student = studentService
|
|
|
+ .randomUnTrialStudent(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
if (student == null) {
|
|
|
return;
|
|
|
}
|
|
|
- // 补充学习中心集合
|
|
|
- Campus campus = getCampus(student, campusMap);
|
|
|
- if (campus == null) {
|
|
|
- log.error("campus unexist for student id=" + student.getId());
|
|
|
- continue;
|
|
|
- }
|
|
|
// 尝试构造试评任务
|
|
|
try {
|
|
|
lockService.watch(LockType.GROUP, group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
@@ -261,14 +241,13 @@ public class MarkCronService {
|
|
|
}
|
|
|
// 上锁后重复验证考生状态
|
|
|
if (studentService.validateStatus(student.getId())) {
|
|
|
- markService.buildTrialLibrary(student, campus, group);
|
|
|
+ markService.buildTrialLibrary(student, group);
|
|
|
markService.updateLibraryCount(group);
|
|
|
markService.updateMarkedCount(group);
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
- log.error(
|
|
|
- "build trial library error for studentId=" + student.getId() + ", groupNumber="
|
|
|
- + group.getNumber(), e);
|
|
|
+ log.error("build trial library error for studentId=" + student.getId() + ", groupNumber=" + group
|
|
|
+ .getNumber(), e);
|
|
|
} finally {
|
|
|
lockService.unwatch(LockType.STUDENT, student.getId());
|
|
|
lockService.unwatch(LockType.GROUP, group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
@@ -276,15 +255,4 @@ public class MarkCronService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private Campus getCampus(ExamStudent student, Map<String, Campus> campusMap) {
|
|
|
- // 补充学习中心集合
|
|
|
- Campus campus = campusMap.get(student.getSchoolId() + "_" + student.getCampusName());
|
|
|
- if (campus == null) {
|
|
|
- campus = campusService.findBySchoolAndName(student.getSchoolId(), student.getCampusName());
|
|
|
- if (campus != null) {
|
|
|
- campusMap.put(student.getSchoolId() + "_" + student.getCampusName(), campus);
|
|
|
- }
|
|
|
- }
|
|
|
- return campus;
|
|
|
- }
|
|
|
}
|