|
@@ -41,11 +41,13 @@ import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
|
|
|
import cn.com.qmth.stmms.biz.exam.service.InspectHistoryService;
|
|
|
import cn.com.qmth.stmms.biz.exam.service.MarkerService;
|
|
|
import cn.com.qmth.stmms.biz.exam.service.SelectiveGroupService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.SubjectiveScoreService;
|
|
|
import cn.com.qmth.stmms.biz.mark.dao.ArbitrateHistoryDao;
|
|
|
import cn.com.qmth.stmms.biz.mark.dao.MarkLibraryDao;
|
|
|
import cn.com.qmth.stmms.biz.mark.dao.MarkSpecialTagDao;
|
|
|
import cn.com.qmth.stmms.biz.mark.dao.MarkTrackDao;
|
|
|
import cn.com.qmth.stmms.biz.mark.dao.ProblemHistoryDao;
|
|
|
+import cn.com.qmth.stmms.biz.mark.dao.RejectHistoryDao;
|
|
|
import cn.com.qmth.stmms.biz.mark.dao.TrialLibraryDao;
|
|
|
import cn.com.qmth.stmms.biz.mark.dao.TrialTagDao;
|
|
|
import cn.com.qmth.stmms.biz.mark.dao.TrialTrackDao;
|
|
@@ -55,6 +57,7 @@ import cn.com.qmth.stmms.biz.mark.model.MarkResult;
|
|
|
import cn.com.qmth.stmms.biz.mark.model.MarkStepDTO;
|
|
|
import cn.com.qmth.stmms.biz.mark.model.MarkTrack;
|
|
|
import cn.com.qmth.stmms.biz.mark.model.ProblemHistory;
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.RejectHistory;
|
|
|
import cn.com.qmth.stmms.biz.mark.model.SubmitResult;
|
|
|
import cn.com.qmth.stmms.biz.mark.model.TrialLibrary;
|
|
|
import cn.com.qmth.stmms.biz.mark.query.MarkLibrarySearchQuery;
|
|
@@ -143,6 +146,12 @@ public class MarkServiceImpl implements MarkService {
|
|
|
@Autowired
|
|
|
private InspectHistoryService inspectHistoryService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private RejectHistoryDao rejectHistoryDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SubjectiveScoreService scoreService;
|
|
|
+
|
|
|
private Map<Integer, Long> markerLastUpdateTime = new ConcurrentHashMap<>();
|
|
|
|
|
|
/**
|
|
@@ -264,6 +273,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
group.getNumber());
|
|
|
problemHistoryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
group.getNumber());
|
|
|
+ rejectHistoryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
+ group.getNumber());
|
|
|
libraryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
group.getNumber());
|
|
|
// 评卷员数据
|
|
@@ -289,7 +300,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
if (groupCount == 0 || unGroupQuestionCount > 0) {
|
|
|
studentService.updateSubjectiveStatusAndScoreAndInspectorId(group.getExamId(), group.getSubjectCode(),
|
|
|
SubjectiveStatus.UNMARK, 0, null, null, null);
|
|
|
- //studentService.resetSubjectiveStatusAndScoreWithoutTrial(group.getExamId(), group.getSubjectCode());
|
|
|
+ // studentService.resetSubjectiveStatusAndScoreWithoutTrial(group.getExamId(),
|
|
|
+ // group.getSubjectCode());
|
|
|
inspectHistoryService.deleteByExamIdAndSubjectCode(group.getExamId(), group.getSubjectCode());
|
|
|
} else {
|
|
|
List<Integer> studentList = studentService.findIdByExamIdAndSubjectCodeAndSubjectiveStatus(
|
|
@@ -496,7 +508,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
for (MarkLibrary library : list) {
|
|
|
trackDao.deleteByLibraryId(library.getId());
|
|
|
specialTagDao.deleteByLibraryId(library.getId());
|
|
|
- libraryDao.resetById(library.getId(), null, null, LibraryStatus.WAITING, library.getStatus());
|
|
|
+ libraryDao.resetById(library.getId(), null, null, null, null, LibraryStatus.WAITING,
|
|
|
+ library.getStatus());
|
|
|
updateStudentGroupStatus(library.getStudentId(), library.getExamId(), library.getSubjectCode(),
|
|
|
library.getGroupNumber(), SubjectiveStatus.UNMARK);
|
|
|
studentService.updateSubjectiveStatusAndScore(library.getStudentId(), SubjectiveStatus.UNMARK, 0, null);
|
|
@@ -537,6 +550,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
updateAllCount(student.getExamId(), student.getSubjectCode());
|
|
|
// 复核记录
|
|
|
inspectHistoryService.deleteByStudentId(student.getId());
|
|
|
+ // 打回记录
|
|
|
+ rejectHistoryDao.deleteByStudentId(student.getId());
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -599,7 +614,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
return SubmitResult.faile();
|
|
|
}
|
|
|
library.setMarkerId(marker.getId());
|
|
|
- library.setMarkerTime(new Date());
|
|
|
+ library.setMarkerTime(now);
|
|
|
// 未选做
|
|
|
if (result.isUnselective() && group.isSelective()) {
|
|
|
result.setMarkerScore(UN_SELECTIVE_SCORE);
|
|
@@ -683,8 +698,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// 尝试提交评卷结果
|
|
|
Date now = new Date();
|
|
|
if (libraryDao.updateMarkerResult(library.getId(), LibraryStatus.MARKED, marker.getId(),
|
|
|
- result.getMarkerScore(), result.getScoreList(), now, result.getSpent(), null, LibraryStatus.WAITING,
|
|
|
- LibraryStatus.MARKED, LibraryStatus.INSPECTED, LibraryStatus.REJECTED) == 0) {
|
|
|
+ result.getMarkerScore(), result.getScoreList(), now, result.getSpent(), null, null, null,
|
|
|
+ LibraryStatus.WAITING, LibraryStatus.MARKED, LibraryStatus.INSPECTED, LibraryStatus.REJECTED) == 0) {
|
|
|
// 条件不符更新失败,直接返回
|
|
|
return false;
|
|
|
}
|
|
@@ -827,18 +842,22 @@ public class MarkServiceImpl implements MarkService {
|
|
|
if (group.getStatus() == MarkStatus.FINISH) {
|
|
|
return false;
|
|
|
}
|
|
|
- if (libraryDao.resetById(library.getId(), null, reason,
|
|
|
- isRest ? LibraryStatus.WAITING : LibraryStatus.REJECTED, LibraryStatus.MARKED, LibraryStatus.PROBLEM,
|
|
|
- LibraryStatus.INSPECTED) > 0) {
|
|
|
+ RejectHistory history = new RejectHistory(library);
|
|
|
+ history.setUserId(userId);
|
|
|
+ history.setReason(reason);
|
|
|
+ Date now = new Date();
|
|
|
+ if (libraryDao.resetById(library.getId(), null, reason, userId, now, isRest ? LibraryStatus.WAITING
|
|
|
+ : LibraryStatus.REJECTED, LibraryStatus.MARKED, LibraryStatus.PROBLEM, LibraryStatus.INSPECTED) > 0) {
|
|
|
if (!isRest) {
|
|
|
markerService.updateRejectCountById(library.getMarkerId());
|
|
|
+ rejectHistoryDao.save(history);
|
|
|
}
|
|
|
trackDao.deleteByLibraryId(library.getId());
|
|
|
specialTagDao.deleteByLibraryId(library.getId());
|
|
|
+ scoreDao.updateRejected(library.getStudentId(), library.getGroupNumber(), true);
|
|
|
resetStudentGroup(library.getStudentId(), library.getExamId(), library.getSubjectCode(),
|
|
|
library.getGroupNumber());
|
|
|
- problemHistoryDao.resetByLibraryId(library.getId(), HistoryStatus.WAITING, userId, HistoryStatus.BACK,
|
|
|
- new Date());
|
|
|
+ problemHistoryDao.resetByLibraryId(library.getId(), HistoryStatus.WAITING, userId, HistoryStatus.BACK, now);
|
|
|
// 开启三评时,打回1,2任务则删除第3条任务
|
|
|
long count = libraryDao.countByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber());
|
|
|
if (library.getTaskNumber() != 3 && count == 3) {
|
|
@@ -1512,7 +1531,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
*/
|
|
|
private void resetStudentGroup(Integer studentId, Integer examId, String subjectCode, Integer groupNumber) {
|
|
|
updateStudentGroupStatus(studentId, examId, subjectCode, groupNumber, SubjectiveStatus.UNMARK);
|
|
|
- scoreDao.deleteByStudentIdAndGroupNumber(studentId, groupNumber);
|
|
|
+ // scoreDao.deleteByStudentIdAndGroupNumber(studentId, groupNumber);
|
|
|
studentService.updateSubjectiveStatusAndScore(studentId, SubjectiveStatus.UNMARK, 0, null);
|
|
|
}
|
|
|
|
|
@@ -1527,6 +1546,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
groupStudentDao.updateStatusByExamIdAndSubjectCodeAndGroupNumber(examId, subjectCode, groupNumber,
|
|
|
SubjectiveStatus.UNMARK);
|
|
|
scoreDao.deleteByExamIdAndSubjectCodeAndGroupNumber(examId, subjectCode, groupNumber);
|
|
|
+ rejectHistoryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(examId, subjectCode, groupNumber);
|
|
|
selectiveStudentDao.deleteByExamIdAndSubjectCode(examId, subjectCode);
|
|
|
studentService.updateSubjectiveStatusAndScoreAndInspectorId(examId, subjectCode, SubjectiveStatus.UNMARK, 0,
|
|
|
null, null, null);
|
|
@@ -1549,9 +1569,17 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// scoreDao.deleteByStudentIdAndGroupNumber(studentId, groupNumber);
|
|
|
List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
|
|
|
subjectCode, false, group.getNumber());
|
|
|
+ List<SubjectiveScore> subjectiveScores = scoreService.findByStudentIdAndGroupNumber(studentId,
|
|
|
+ group.getNumber());
|
|
|
for (int i = 0; i < questions.size(); i++) {
|
|
|
ExamQuestion question = questions.get(i);
|
|
|
- SubjectiveScore ss = new SubjectiveScore();
|
|
|
+ SubjectiveScore ss;
|
|
|
+ if (!subjectiveScores.isEmpty() && subjectiveScores.size() == questions.size()) {
|
|
|
+ ss = subjectiveScores.get(i);
|
|
|
+ } else {
|
|
|
+ ss = new SubjectiveScore();
|
|
|
+ ss.setRejected(false);
|
|
|
+ }
|
|
|
ss.setStudentId(studentId);
|
|
|
ss.setExamId(examId);
|
|
|
ss.setSubjectCode(subjectCode);
|
|
@@ -1645,6 +1673,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
+ Date now = new Date();
|
|
|
for (Integer groupNumber : map.keySet()) {
|
|
|
List<MarkLibrary> list = libraryDao.findByStudentIdAndGroupNumber(student.getId(), groupNumber);
|
|
|
List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
|
|
@@ -1661,11 +1690,17 @@ public class MarkServiceImpl implements MarkService {
|
|
|
count++;
|
|
|
continue;
|
|
|
}
|
|
|
+ RejectHistory history = new RejectHistory(library);
|
|
|
+ history.setUserId(userId);
|
|
|
+ history.setReason(reason);
|
|
|
+
|
|
|
if (library.getStatus().equals(LibraryStatus.ARBITRATED) || qList.size() == questions.size()) {
|
|
|
// 仲裁任务直接重置 或者该分组下所有分数被打回也重置
|
|
|
markerService.updateRejectCountById(library.getMarkerId());
|
|
|
- libraryDao.resetById(library.getId(), null, reason, LibraryStatus.REJECTED, LibraryStatus.MARKED,
|
|
|
- LibraryStatus.PROBLEM, LibraryStatus.INSPECTED, LibraryStatus.ARBITRATED);
|
|
|
+ libraryDao.resetById(library.getId(), null, reason, userId, now, LibraryStatus.REJECTED,
|
|
|
+ LibraryStatus.MARKED, LibraryStatus.PROBLEM, LibraryStatus.INSPECTED,
|
|
|
+ LibraryStatus.ARBITRATED);
|
|
|
+ rejectHistoryDao.save(history);
|
|
|
trackDao.deleteByLibraryId(library.getId());
|
|
|
specialTagDao.deleteByLibraryId(library.getId());
|
|
|
arbitrateDao.deleteByStudentIdAndGroupNumber(student.getId(), groupNumber);
|
|
@@ -1678,6 +1713,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
for (MarkStepDTO markStepDTO : qList) {
|
|
|
trackDao.deleteByLibraryIdAndQuestionNumber(library.getId(), markStepDTO.getMainNumber() + "."
|
|
|
+ markStepDTO.getSubNumber());
|
|
|
+ scoreDao.updateRejected(library.getStudentId(), markStepDTO.getMainNumber(),
|
|
|
+ markStepDTO.getSubNumber(), true);
|
|
|
for (int i = 0; i < questions.size(); i++) {
|
|
|
ExamQuestion question = questions.get(i);
|
|
|
if (markStepDTO.getMainNumber() == question.getMainNumber()
|
|
@@ -1700,9 +1737,11 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// }
|
|
|
}
|
|
|
if (libraryDao.updateMarkerResult(library.getId(), LibraryStatus.REJECTED, library.getMarkerId(),
|
|
|
- null, StringUtils.join(markerScoreList, ","), null, null, reason, LibraryStatus.MARKED,
|
|
|
- LibraryStatus.INSPECTED) == 1) {
|
|
|
+ null, StringUtils.join(markerScoreList, ","), null, null, reason, userId, now,
|
|
|
+ LibraryStatus.MARKED, LibraryStatus.INSPECTED) == 1) {
|
|
|
markerService.updateRejectCountById(library.getMarkerId());
|
|
|
+ history.setRejectScoreList(StringUtils.join(markerScoreList, ","));
|
|
|
+ rejectHistoryDao.save(history);
|
|
|
count++;
|
|
|
}
|
|
|
}
|
|
@@ -1746,7 +1785,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
if (groupCount == 0 || unGroupQuestionCount > 0) {
|
|
|
studentService.updateSubjectiveStatusAndScoreAndInspectorId(examId, subjectCode,
|
|
|
SubjectiveStatus.UNMARK, 0, null, null, null);
|
|
|
- //studentService.resetSubjectiveStatusAndScoreWithoutTrial(examId, subjectCode);
|
|
|
+ // studentService.resetSubjectiveStatusAndScoreWithoutTrial(examId,
|
|
|
+ // subjectCode);
|
|
|
inspectHistoryService.deleteByExamIdAndSubjectCode(examId, subjectCode);
|
|
|
} else {
|
|
|
List<Integer> studentList = studentService.findIdByExamIdAndSubjectCodeAndSubjectiveStatus(examId,
|
|
@@ -1773,10 +1813,17 @@ public class MarkServiceImpl implements MarkService {
|
|
|
if (group.getStatus() == MarkStatus.FINISH) {
|
|
|
return false;
|
|
|
}
|
|
|
+ RejectHistory history = new RejectHistory(library);
|
|
|
+ history.setUserId(userId);
|
|
|
+ history.setReason(reason);
|
|
|
+
|
|
|
+ Date now = new Date();
|
|
|
List<ScoreItem> sList = library.getScoreList();
|
|
|
for (MarkStepDTO markStepDTO : questionList) {
|
|
|
trackDao.deleteByLibraryIdAndQuestionNumber(library.getId(), markStepDTO.getMainNumber() + "."
|
|
|
+ markStepDTO.getSubNumber());
|
|
|
+ scoreDao.updateRejected(library.getStudentId(), markStepDTO.getMainNumber(), markStepDTO.getSubNumber(),
|
|
|
+ true);
|
|
|
for (int i = 0; i < questions.size(); i++) {
|
|
|
ExamQuestion question = questions.get(i);
|
|
|
if (markStepDTO.getMainNumber() == question.getMainNumber()
|
|
@@ -1799,13 +1846,14 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// }
|
|
|
}
|
|
|
if (libraryDao.updateMarkerResult(library.getId(), LibraryStatus.REJECTED, library.getMarkerId(), null,
|
|
|
- StringUtils.join(markerScoreList, ","), null, null, reason, LibraryStatus.MARKED,
|
|
|
+ StringUtils.join(markerScoreList, ","), null, null, reason, userId, now, LibraryStatus.MARKED,
|
|
|
LibraryStatus.INSPECTED) == 1) {
|
|
|
markerService.updateRejectCountById(library.getMarkerId());
|
|
|
+ history.setRejectScoreList(StringUtils.join(markerScoreList, ","));
|
|
|
+ rejectHistoryDao.save(history);
|
|
|
resetStudentGroup(library.getStudentId(), library.getExamId(), library.getSubjectCode(),
|
|
|
library.getGroupNumber());
|
|
|
- problemHistoryDao.resetByLibraryId(library.getId(), HistoryStatus.WAITING, userId, HistoryStatus.BACK,
|
|
|
- new Date());
|
|
|
+ problemHistoryDao.resetByLibraryId(library.getId(), HistoryStatus.WAITING, userId, HistoryStatus.BACK, now);
|
|
|
// 开启三评时,打回1,2任务则删除第3条任务
|
|
|
long count = libraryDao.countByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber());
|
|
|
if (library.getTaskNumber() != 3 && count == 3) {
|