|
@@ -1,18 +1,17 @@
|
|
|
package cn.com.qmth.stmms.biz.mark.service.Impl;
|
|
|
|
|
|
-import cn.com.qmth.stmms.biz.exam.dao.*;
|
|
|
-import cn.com.qmth.stmms.biz.exam.model.*;
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.*;
|
|
|
-import cn.com.qmth.stmms.biz.lock.LockService;
|
|
|
-import cn.com.qmth.stmms.biz.mark.dao.*;
|
|
|
-import cn.com.qmth.stmms.biz.mark.model.*;
|
|
|
-import cn.com.qmth.stmms.biz.mark.query.MarkLibrarySearchQuery;
|
|
|
-import cn.com.qmth.stmms.biz.mark.service.MarkService;
|
|
|
-import cn.com.qmth.stmms.biz.utils.ScoreItem;
|
|
|
-import cn.com.qmth.stmms.biz.utils.TaskLock;
|
|
|
-import cn.com.qmth.stmms.biz.utils.TaskLockUtil;
|
|
|
-import cn.com.qmth.stmms.common.enums.*;
|
|
|
-import cn.com.qmth.stmms.common.utils.BigDecimalUtils;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.text.DecimalFormat;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Iterator;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Map.Entry;
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
+
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
@@ -21,11 +20,64 @@ import org.springframework.data.domain.Sort;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import java.math.BigDecimal;
|
|
|
-import java.text.DecimalFormat;
|
|
|
-import java.util.*;
|
|
|
-import java.util.Map.Entry;
|
|
|
-import java.util.concurrent.ConcurrentHashMap;
|
|
|
+import cn.com.qmth.stmms.biz.exam.dao.MarkGroupDao;
|
|
|
+import cn.com.qmth.stmms.biz.exam.dao.MarkGroupStudentDao;
|
|
|
+import cn.com.qmth.stmms.biz.exam.dao.MarkerDao;
|
|
|
+import cn.com.qmth.stmms.biz.exam.dao.SelectiveStudentDao;
|
|
|
+import cn.com.qmth.stmms.biz.exam.dao.SubjectiveScoreDao;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
|
|
|
+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;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.MarkGroupStudent;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.Marker;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.SelectiveGroup;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.SelectiveStudent;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.SubjectiveScore;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
|
|
|
+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.lock.LockService;
|
|
|
+import cn.com.qmth.stmms.biz.mark.dao.ArbitrateHistoryDao;
|
|
|
+import cn.com.qmth.stmms.biz.mark.dao.HeaderTagDao;
|
|
|
+import cn.com.qmth.stmms.biz.mark.dao.HeaderTrackDao;
|
|
|
+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;
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.ArbitrateHistory;
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.HeaderTrack;
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
|
|
|
+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;
|
|
|
+import cn.com.qmth.stmms.biz.mark.service.MarkService;
|
|
|
+import cn.com.qmth.stmms.biz.utils.ScoreItem;
|
|
|
+import cn.com.qmth.stmms.biz.utils.TaskLock;
|
|
|
+import cn.com.qmth.stmms.biz.utils.TaskLockUtil;
|
|
|
+import cn.com.qmth.stmms.common.enums.HistoryStatus;
|
|
|
+import cn.com.qmth.stmms.common.enums.LibraryStatus;
|
|
|
+import cn.com.qmth.stmms.common.enums.LockType;
|
|
|
+import cn.com.qmth.stmms.common.enums.MarkStatus;
|
|
|
+import cn.com.qmth.stmms.common.enums.ObjectiveStatus;
|
|
|
+import cn.com.qmth.stmms.common.enums.ScorePolicy;
|
|
|
+import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
|
|
|
+import cn.com.qmth.stmms.common.enums.ThirdPolicy;
|
|
|
+import cn.com.qmth.stmms.common.utils.BigDecimalUtils;
|
|
|
|
|
|
/**
|
|
|
* 与评卷相关的所有修改操作(非传播性的新增操作除外),全部汇总到这里进行集中控制
|
|
@@ -81,6 +133,12 @@ public class MarkServiceImpl implements MarkService {
|
|
|
@Autowired
|
|
|
private TrialTagDao trialTagDao;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private HeaderTagDao headerTagDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private HeaderTrackDao headerTrackDao;
|
|
|
+
|
|
|
@Autowired
|
|
|
private ProblemHistoryDao problemHistoryDao;
|
|
|
|
|
@@ -113,7 +171,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 某个评卷分组已申请的评卷任务数量
|
|
|
*
|
|
|
- * @param group - 评卷分组
|
|
|
+ * @param group
|
|
|
+ * - 评卷分组
|
|
|
* @return int
|
|
|
*/
|
|
|
@Override
|
|
@@ -129,7 +188,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 某个评卷员已申请的评卷任务数量
|
|
|
*
|
|
|
- * @param marker - 评卷员
|
|
|
+ * @param marker
|
|
|
+ * - 评卷员
|
|
|
* @return int
|
|
|
*/
|
|
|
@Override
|
|
@@ -159,7 +219,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 某个评卷员已完成的评卷任务数量
|
|
|
*
|
|
|
- * @param marker - 评卷员
|
|
|
+ * @param marker
|
|
|
+ * - 评卷员
|
|
|
* @return long
|
|
|
*/
|
|
|
@Override
|
|
@@ -172,8 +233,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
if (group.getStatus() == MarkStatus.TRIAL) {
|
|
|
return trialLibraryDao.countByMarkerId(marker.getId());
|
|
|
} else {
|
|
|
- return libraryDao.countByMarkerAndStatus(marker.getId(), LibraryStatus.MARKED, LibraryStatus.ARBITRATED,
|
|
|
- LibraryStatus.INSPECTED);
|
|
|
+ return libraryDao.countByMarkerAndStatus(marker.getId(), LibraryStatus.MARKED,
|
|
|
+ LibraryStatus.ARBITRATED, LibraryStatus.INSPECTED);
|
|
|
}
|
|
|
}
|
|
|
return 0;
|
|
@@ -182,7 +243,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 释放某个评卷分组的锁定任务
|
|
|
*
|
|
|
- * @param group - 评卷分组
|
|
|
+ * @param group
|
|
|
+ * - 评卷分组
|
|
|
*/
|
|
|
@Override
|
|
|
public void releaseByGroup(MarkGroup group) {
|
|
@@ -193,7 +255,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 重置某个评卷分组的所有评卷任务
|
|
|
*
|
|
|
- * @param group - 评卷分组
|
|
|
+ * @param group
|
|
|
+ * - 评卷分组
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional
|
|
@@ -204,7 +267,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 删除某个评卷分组
|
|
|
*
|
|
|
- * @param group - 评卷分组
|
|
|
+ * @param group
|
|
|
+ * - 评卷分组
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional
|
|
@@ -219,6 +283,9 @@ public class MarkServiceImpl implements MarkService {
|
|
|
trackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
group.getNumber());
|
|
|
specialTagDao.deleteByExamAndSubjectAndGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
+ headerTrackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
+ group.getNumber());
|
|
|
+ headerTagDao.deleteByExamAndSubjectAndGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
arbitrateDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
group.getNumber());
|
|
|
problemHistoryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
@@ -231,9 +298,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
markerDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
group.getNumber());
|
|
|
// 小题数据
|
|
|
- questionService
|
|
|
- .resetByExamIdAndSubjectCodeAndObjectiveAndGroupNumber(group.getExamId(), group.getSubjectCode(), false,
|
|
|
- group.getNumber());
|
|
|
+ questionService.resetByExamIdAndSubjectCodeAndObjectiveAndGroupNumber(group.getExamId(),
|
|
|
+ group.getSubjectCode(), false, group.getNumber());
|
|
|
// 考生分组状态与得分明细
|
|
|
groupStudentDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
group.getNumber());
|
|
@@ -244,9 +310,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
releaseByGroup(group);
|
|
|
groupDao.delete(group);
|
|
|
// 未分组的题目
|
|
|
- long unGroupQuestionCount = questionService
|
|
|
- .countByExamIdAndSubjectAndObjectiveAndGroupNumberIsNull(group.getExamId(), group.getSubjectCode(),
|
|
|
- false);
|
|
|
+ long unGroupQuestionCount = questionService.countByExamIdAndSubjectAndObjectiveAndGroupNumberIsNull(
|
|
|
+ group.getExamId(), group.getSubjectCode(), false);
|
|
|
// 考生整体状态与总分更新
|
|
|
long groupCount = groupDao.countByExamIdAndSubjectCode(group.getExamId(), group.getSubjectCode());
|
|
|
if (groupCount == 0 || unGroupQuestionCount > 0) {
|
|
@@ -256,9 +321,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// group.getSubjectCode());
|
|
|
inspectHistoryService.deleteByExamIdAndSubjectCode(group.getExamId(), group.getSubjectCode());
|
|
|
} else {
|
|
|
- List<Integer> studentList = studentService
|
|
|
- .findIdByExamIdAndSubjectCodeAndSubjectiveStatus(group.getExamId(), group.getSubjectCode(),
|
|
|
- SubjectiveStatus.UNMARK, SubjectiveStatus.MARKED);
|
|
|
+ List<Integer> studentList = studentService.findIdByExamIdAndSubjectCodeAndSubjectiveStatus(
|
|
|
+ group.getExamId(), group.getSubjectCode(), SubjectiveStatus.UNMARK, SubjectiveStatus.MARKED);
|
|
|
for (Integer studentId : studentList) {
|
|
|
checkStudentSubjective(studentId, groupCount, unGroupQuestionCount);
|
|
|
}
|
|
@@ -268,15 +332,15 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 修改某个评卷分组给分步骤,并重置评卷任务
|
|
|
*
|
|
|
- * @param group - 评卷分组
|
|
|
+ * @param group
|
|
|
+ * - 评卷分组
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public void updateGroup(MarkGroup group, List<ExamQuestion> questionList, ScorePolicy policy, ThirdPolicy third,
|
|
|
boolean selective) {
|
|
|
- List<ExamQuestion> old = questionService
|
|
|
- .findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(), group.getSubjectCode(), false,
|
|
|
- group.getNumber());
|
|
|
+ List<ExamQuestion> old = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(),
|
|
|
+ group.getSubjectCode(), false, group.getNumber());
|
|
|
for (ExamQuestion question : old) {
|
|
|
question.setGroupNumber(null);
|
|
|
questionService.saveAndFlush(question);
|
|
@@ -309,8 +373,10 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 评卷员申请领取某个正式评卷任务
|
|
|
*
|
|
|
- * @param library - 正评任务
|
|
|
- * @param marker - 评卷员
|
|
|
+ * @param library
|
|
|
+ * - 正评任务
|
|
|
+ * @param marker
|
|
|
+ * - 评卷员
|
|
|
*/
|
|
|
@Override
|
|
|
public boolean applyLibrary(MarkLibrary library, Marker marker) {
|
|
@@ -333,8 +399,10 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 评卷员申请领取某个试评评卷任务
|
|
|
*
|
|
|
- * @param library - 试评任务
|
|
|
- * @param marker - 评卷员
|
|
|
+ * @param library
|
|
|
+ * - 试评任务
|
|
|
+ * @param marker
|
|
|
+ * - 评卷员
|
|
|
* @return boolean
|
|
|
*/
|
|
|
@Override
|
|
@@ -346,8 +414,10 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 评卷员是否已领取了某个正式评卷任务
|
|
|
*
|
|
|
- * @param library - 正评任务
|
|
|
- * @param marker - 评卷员
|
|
|
+ * @param library
|
|
|
+ * - 正评任务
|
|
|
+ * @param marker
|
|
|
+ * - 评卷员
|
|
|
* @return boolean
|
|
|
*/
|
|
|
@Override
|
|
@@ -359,8 +429,10 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 评卷员是否已领取了某个试评评卷任务
|
|
|
*
|
|
|
- * @param library - 试评任务
|
|
|
- * @param marker - 评卷员
|
|
|
+ * @param library
|
|
|
+ * - 试评任务
|
|
|
+ * @param marker
|
|
|
+ * - 评卷员
|
|
|
* @return boolean
|
|
|
*/
|
|
|
@Override
|
|
@@ -372,8 +444,10 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 释放某个评卷员已完成的评卷任务
|
|
|
*
|
|
|
- * @param result - 评卷结果
|
|
|
- * @param marker - 评卷员
|
|
|
+ * @param result
|
|
|
+ * - 评卷结果
|
|
|
+ * @param marker
|
|
|
+ * - 评卷员
|
|
|
*/
|
|
|
@Override
|
|
|
public void releaseTask(SubmitResult result, Marker marker) {
|
|
@@ -391,7 +465,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 释放某个评卷员的所有锁定任务
|
|
|
*
|
|
|
- * @param marker - 评卷员
|
|
|
+ * @param marker
|
|
|
+ * - 评卷员
|
|
|
*/
|
|
|
@Override
|
|
|
public void releaseByMarker(Marker marker) {
|
|
@@ -404,7 +479,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 重置某个评卷员
|
|
|
*
|
|
|
- * @param marker - 评卷员
|
|
|
+ * @param marker
|
|
|
+ * - 评卷员
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional
|
|
@@ -448,8 +524,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
for (MarkLibrary library : list) {
|
|
|
trackDao.deleteByLibraryId(library.getId());
|
|
|
specialTagDao.deleteByLibraryId(library.getId());
|
|
|
- libraryDao
|
|
|
- .resetById(library.getId(), null, null, null, null, LibraryStatus.WAITING, library.getStatus());
|
|
|
+ libraryDao.resetById(library.getId(), null, null, null, null, LibraryStatus.WAITING,
|
|
|
+ library.getStatus());
|
|
|
lockService.waitlock(LockType.STUDENT, library.getStudentId());
|
|
|
updateStudentGroupStatus(library.getStudentId(), library.getExamId(), library.getSubjectCode(),
|
|
|
library.getGroupNumber(), SubjectiveStatus.UNMARK);
|
|
@@ -469,7 +545,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 根据考生删除评卷任务
|
|
|
*
|
|
|
- * @param student - 考生
|
|
|
+ * @param student
|
|
|
+ * - 考生
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional
|
|
@@ -477,6 +554,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// 正评相关数据
|
|
|
trackDao.deleteByStudentId(student.getId());
|
|
|
specialTagDao.deleteByStudentId(student.getId());
|
|
|
+ headerTagDao.deleteByStudentId(student.getId());
|
|
|
+ headerTrackDao.deleteByPkStudentId(student.getId());
|
|
|
arbitrateDao.deleteByStudentId(student.getId());
|
|
|
problemHistoryDao.deleteByStudentId(student.getId());
|
|
|
libraryDao.deleteByStudentId(student.getId());
|
|
@@ -498,8 +577,10 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 评卷员提交评卷任务
|
|
|
*
|
|
|
- * @param result - 评卷结果
|
|
|
- * @param marker - 评卷员
|
|
|
+ * @param result
|
|
|
+ * - 评卷结果
|
|
|
+ * @param marker
|
|
|
+ * - 评卷员
|
|
|
* @return boolean
|
|
|
*/
|
|
|
@Override
|
|
@@ -507,8 +588,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
public SubmitResult submitTask(MarkResult result, Marker marker) {
|
|
|
// 判断评卷分组是否存在/评卷是否结束
|
|
|
MarkGroup group = groupDao.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
|
|
|
- if (group == null || group.getStatus() == MarkStatus.FINISH || !group.getStatus().toString()
|
|
|
- .equals(result.getStatusValue())) {
|
|
|
+ if (group == null || group.getStatus() == MarkStatus.FINISH
|
|
|
+ || !group.getStatus().toString().equals(result.getStatusValue())) {
|
|
|
return SubmitResult.faile();
|
|
|
}
|
|
|
|
|
@@ -516,8 +597,9 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// 根据评卷状态选择读取不同的评卷任务
|
|
|
if (group.getStatus() == MarkStatus.FORMAL) {
|
|
|
MarkLibrary library = libraryDao.findOne(result.getLibraryId());
|
|
|
- if (library != null && library.getExamId().equals(group.getExamId()) && library.getSubjectCode()
|
|
|
- .equals(group.getSubjectCode()) && library.getGroupNumber().equals(group.getNumber())) {
|
|
|
+ if (library != null && library.getExamId().equals(group.getExamId())
|
|
|
+ && library.getSubjectCode().equals(group.getSubjectCode())
|
|
|
+ && library.getGroupNumber().equals(group.getNumber())) {
|
|
|
// 问题卷
|
|
|
if (result.isProblem()) {
|
|
|
// 状态更新
|
|
@@ -543,11 +625,12 @@ public class MarkServiceImpl implements MarkService {
|
|
|
}
|
|
|
} else if (group.getStatus() == MarkStatus.TRIAL) {
|
|
|
TrialLibrary library = trialLibraryDao.findOne(result.getLibraryId());
|
|
|
- if (library != null && library.getExamId().equals(group.getExamId()) && library.getSubjectCode()
|
|
|
- .equals(group.getSubjectCode()) && library.getGroupNumber().equals(group.getNumber())
|
|
|
+ if (library != null && library.getExamId().equals(group.getExamId())
|
|
|
+ && library.getSubjectCode().equals(group.getSubjectCode())
|
|
|
+ && library.getGroupNumber().equals(group.getNumber())
|
|
|
&& result.getMarkerScore() <= group.getTotalScore()) {
|
|
|
- if ((library.getMarkerId() == null && !hasApplied(library, marker)) || (library.getMarkerId() != null
|
|
|
- && !library.getMarkerId().equals(marker.getId()))) {
|
|
|
+ if ((library.getMarkerId() == null && !hasApplied(library, marker))
|
|
|
+ || (library.getMarkerId() != null && !library.getMarkerId().equals(marker.getId()))) {
|
|
|
return SubmitResult.faile();
|
|
|
}
|
|
|
library.setMarkerId(marker.getId());
|
|
@@ -600,10 +683,14 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 评卷员提交某个正评任务
|
|
|
*
|
|
|
- * @param library - 正评任务
|
|
|
- * @param marker - 评卷员
|
|
|
- * @param group - 评卷分组
|
|
|
- * @param result - 评卷结果
|
|
|
+ * @param library
|
|
|
+ * - 正评任务
|
|
|
+ * @param marker
|
|
|
+ * - 评卷员
|
|
|
+ * @param group
|
|
|
+ * - 评卷分组
|
|
|
+ * @param result
|
|
|
+ * - 评卷结果
|
|
|
*/
|
|
|
private boolean submitLibrary(MarkLibrary library, Marker marker, MarkGroup group, MarkResult result) {
|
|
|
// 非本人领取的待评任务
|
|
@@ -612,13 +699,13 @@ public class MarkServiceImpl implements MarkService {
|
|
|
return false;
|
|
|
}
|
|
|
// 非本人的回评任务
|
|
|
- if ((library.getStatus() == LibraryStatus.MARKED || library.getStatus() == LibraryStatus.INSPECTED) && !library
|
|
|
- .getMarkerId().equals(marker.getId())) {
|
|
|
+ if ((library.getStatus() == LibraryStatus.MARKED || library.getStatus() == LibraryStatus.INSPECTED)
|
|
|
+ && !library.getMarkerId().equals(marker.getId())) {
|
|
|
return false;
|
|
|
}
|
|
|
// 是否多评情况下已处理过该考生评卷任务
|
|
|
- if (libraryDao.countByStudentIdAndMarkerIdAndIdNotEqual(library.getStudentId(), marker.getId(), library.getId())
|
|
|
- > 0) {
|
|
|
+ if (libraryDao
|
|
|
+ .countByStudentIdAndMarkerIdAndIdNotEqual(library.getStudentId(), marker.getId(), library.getId()) > 0) {
|
|
|
return false;
|
|
|
}
|
|
|
// 未选做
|
|
@@ -630,10 +717,9 @@ 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, null, null, LibraryStatus.WAITING,
|
|
|
- LibraryStatus.MARKED, LibraryStatus.INSPECTED, LibraryStatus.REJECTED) == 0) {
|
|
|
+ if (libraryDao.updateMarkerResult(library.getId(), LibraryStatus.MARKED, marker.getId(),
|
|
|
+ result.getMarkerScore(), result.getScoreList(), now, result.getSpent(), null, null, null,
|
|
|
+ LibraryStatus.WAITING, LibraryStatus.MARKED, LibraryStatus.INSPECTED, LibraryStatus.REJECTED) == 0) {
|
|
|
// 条件不符更新失败,直接返回
|
|
|
return false;
|
|
|
}
|
|
@@ -659,9 +745,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
ArbitrateHistory history = null;
|
|
|
if (group.getArbitrateThreshold() != null && group.getArbitrateThreshold() > 0) {
|
|
|
// 多评模式
|
|
|
- List<MarkLibrary> list = libraryDao
|
|
|
- .findByStudentIdAndGroupNumberAndStatus(library.getStudentId(), library.getGroupNumber(),
|
|
|
- LibraryStatus.MARKED, LibraryStatus.INSPECTED);
|
|
|
+ List<MarkLibrary> list = libraryDao.findByStudentIdAndGroupNumberAndStatus(library.getStudentId(),
|
|
|
+ library.getGroupNumber(), LibraryStatus.MARKED, LibraryStatus.INSPECTED);
|
|
|
for (MarkLibrary other : list) {
|
|
|
// 本评卷任务或组长已打分,则跳过该任务
|
|
|
if (other.getId().equals(library.getId()) || other.getHeaderScore() != null) {
|
|
@@ -672,9 +757,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
continue;
|
|
|
}
|
|
|
// 其中一个有分另一个未选做 直接进入仲裁
|
|
|
- if ((other.getMarkerScore() != UN_SELECTIVE_SCORE && result.getMarkerScore() == UN_SELECTIVE_SCORE) || (
|
|
|
- other.getMarkerScore() == UN_SELECTIVE_SCORE
|
|
|
- && result.getMarkerScore() != UN_SELECTIVE_SCORE)) {
|
|
|
+ if ((other.getMarkerScore() != UN_SELECTIVE_SCORE && result.getMarkerScore() == UN_SELECTIVE_SCORE)
|
|
|
+ || (other.getMarkerScore() == UN_SELECTIVE_SCORE && result.getMarkerScore() != UN_SELECTIVE_SCORE)) {
|
|
|
history = buildArbitrateHistory(library, now);
|
|
|
break;
|
|
|
}
|
|
@@ -682,13 +766,12 @@ public class MarkServiceImpl implements MarkService {
|
|
|
if (Math.abs(other.getMarkerScore() - result.getMarkerScore()) > group.getArbitrateThreshold()) {
|
|
|
// 开启三评
|
|
|
if (group.getThirdPolicy().equals(ThirdPolicy.LOW_DIFF_HIGH_AVG)) {
|
|
|
- if (libraryDao.countByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber())
|
|
|
- == 2) {
|
|
|
+ if (libraryDao.countByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber()) == 2) {
|
|
|
buildThirdLibrary(library, group);
|
|
|
} else {
|
|
|
// 两两比较,触发仲裁
|
|
|
- List<MarkLibrary> libraries = libraryDao
|
|
|
- .findByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber());
|
|
|
+ List<MarkLibrary> libraries = libraryDao.findByStudentIdAndGroupNumber(
|
|
|
+ library.getStudentId(), library.getGroupNumber());
|
|
|
history = buildArbitrateHistory(libraries, group.getArbitrateThreshold(), now);
|
|
|
}
|
|
|
} else {
|
|
@@ -769,7 +852,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
* 管理员/组长打回某个评卷任务<br>
|
|
|
* isRest为true时重置该评卷任务
|
|
|
*
|
|
|
- * @param library - 正评任务
|
|
|
+ * @param library
|
|
|
+ * - 正评任务
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional
|
|
@@ -782,9 +866,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
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 (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);
|
|
@@ -798,9 +881,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// 开启三评时,打回1,2任务则删除第3条任务
|
|
|
long count = libraryDao.countByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber());
|
|
|
if (library.getTaskNumber() != 3 && count == 3) {
|
|
|
- MarkLibrary third = libraryDao
|
|
|
- .findByStudentIdAndGroupNumberAndTaskNumber(library.getStudentId(), library.getGroupNumber(),
|
|
|
- 3);
|
|
|
+ MarkLibrary third = libraryDao.findByStudentIdAndGroupNumberAndTaskNumber(library.getStudentId(),
|
|
|
+ library.getGroupNumber(), 3);
|
|
|
trackDao.deleteByLibraryId(third.getId());
|
|
|
specialTagDao.deleteByLibraryId(third.getId());
|
|
|
problemHistoryDao.deleteByLibraryId(third.getId());
|
|
@@ -817,7 +899,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 管理员/组长重置某个试评任务
|
|
|
*
|
|
|
- * @param library - 试评任务
|
|
|
+ * @param library
|
|
|
+ * - 试评任务
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional
|
|
@@ -835,12 +918,37 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 管理员/组长处理仲裁卷
|
|
|
*
|
|
|
- * @param history - 仲裁卷
|
|
|
+ * @param history
|
|
|
+ * - 仲裁卷
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional
|
|
|
- public void processArbitrate(ArbitrateHistory history) {
|
|
|
+ public void processArbitrate(MarkResult result, Integer userId) {
|
|
|
+ ArbitrateHistory history = arbitrateDao.findOne(result.getLibraryId());
|
|
|
+ history.setUserId(userId);
|
|
|
+ history.setTotalScore(result.isUnselective() ? UN_SELECTIVE_SCORE : result.getMarkerScore());
|
|
|
+ history.setScoreList(result.isUnselective() ? null : result.getScoreList());
|
|
|
+ history.setStatus(HistoryStatus.MARKED);
|
|
|
+ history.setUpdateTime(new Date());
|
|
|
if (arbitrateDao.exists(history.getId())) {
|
|
|
+ // 保存阅卷轨迹
|
|
|
+ int unansweredCount = 0;
|
|
|
+ if (result.getTrackList() != null && !result.isUnselective()) {
|
|
|
+ headerTrackDao.deleteByPkStudentIdAndGroupNumber(history.getStudentId(), history.getGroupNumber());
|
|
|
+ List<HeaderTrack> tracks = result.getTrackList(history);
|
|
|
+ for (HeaderTrack t : tracks) {
|
|
|
+ headerTrackDao.saveAndFlush(t);
|
|
|
+ if (t.isUnanswered()) {
|
|
|
+ unansweredCount++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ history.setUnansweredCount(unansweredCount);
|
|
|
+ }
|
|
|
+ // 保存特殊标记
|
|
|
+ if (result.getSpecialTagList() != null && !result.isUnselective()) {
|
|
|
+ headerTagDao.deleteByStudentIdAndGroupNumber(history.getStudentId(), history.getGroupNumber());
|
|
|
+ headerTagDao.save(result.getHeaderTagList(history));
|
|
|
+ }
|
|
|
arbitrateDao.saveAndFlush(history);
|
|
|
libraryDao.updateHeaderResult(history.getStudentId(), history.getGroupNumber(), history.getUserId(),
|
|
|
history.getTotalScore(), history.getScoreList(), history.getUpdateTime(), LibraryStatus.ARBITRATED);
|
|
@@ -927,8 +1035,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
boolean lessSelective = false;
|
|
|
boolean mutiSelective = false;
|
|
|
ExamStudent student = studentService.findById(studentId);
|
|
|
- Map<Integer, List<SelectiveGroup>> indexMap = selectiveGroupService
|
|
|
- .findGroupByExamIdAndSubjectCode(student.getExamId(), student.getSubjectCode());
|
|
|
+ Map<Integer, List<SelectiveGroup>> indexMap = selectiveGroupService.findGroupByExamIdAndSubjectCode(
|
|
|
+ student.getExamId(), student.getSubjectCode());
|
|
|
for (Integer index : indexMap.keySet()) {
|
|
|
// 循环选做题组
|
|
|
List<SelectiveGroup> indexGroup = indexMap.get(index);
|
|
@@ -1056,9 +1164,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// 有非完成状态的评卷任务,直接返回
|
|
|
return false;
|
|
|
}
|
|
|
- double markerScore = library.getStatus() == LibraryStatus.ARBITRATED ?
|
|
|
- library.getHeaderScore() :
|
|
|
- library.getMarkerScore();
|
|
|
+ double markerScore = library.getStatus() == LibraryStatus.ARBITRATED ? library.getHeaderScore() : library
|
|
|
+ .getMarkerScore();
|
|
|
if (markerScore == UN_SELECTIVE_SCORE) {
|
|
|
selectiveAll = true;
|
|
|
}
|
|
@@ -1078,12 +1185,12 @@ public class MarkServiceImpl implements MarkService {
|
|
|
}
|
|
|
return -1;
|
|
|
});
|
|
|
- Double score1 =
|
|
|
- list.get(0).getHeaderScore() != null ? list.get(0).getHeaderScore() : list.get(0).getMarkerScore();
|
|
|
- Double score2 =
|
|
|
- list.get(1).getHeaderScore() != null ? list.get(1).getHeaderScore() : list.get(1).getMarkerScore();
|
|
|
- Double score3 =
|
|
|
- list.get(2).getHeaderScore() != null ? list.get(2).getHeaderScore() : list.get(2).getMarkerScore();
|
|
|
+ Double score1 = list.get(0).getHeaderScore() != null ? list.get(0).getHeaderScore() : list.get(0)
|
|
|
+ .getMarkerScore();
|
|
|
+ Double score2 = list.get(1).getHeaderScore() != null ? list.get(1).getHeaderScore() : list.get(1)
|
|
|
+ .getMarkerScore();
|
|
|
+ Double score3 = list.get(2).getHeaderScore() != null ? list.get(2).getHeaderScore() : list.get(2)
|
|
|
+ .getMarkerScore();
|
|
|
if ((score3 - score2) <= (score2 - score1)) {
|
|
|
list.remove(0);
|
|
|
} else {
|
|
@@ -1155,7 +1262,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 更新某个评卷分组已评任务数量
|
|
|
*
|
|
|
- * @param group - 评卷分组
|
|
|
+ * @param group
|
|
|
+ * - 评卷分组
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional
|
|
@@ -1163,8 +1271,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
if (group.getStatus() == MarkStatus.FORMAL || group.getStatus() == MarkStatus.FINISH) {
|
|
|
groupDao.updateMarkedCount(group.getExamId(), group.getSubjectCode(), group.getNumber(), (int) libraryDao
|
|
|
.countByExamIdAndSubjectCodeAndGroupNumberAndStatus(group.getExamId(), group.getSubjectCode(),
|
|
|
- group.getNumber(), LibraryStatus.MARKED, LibraryStatus.ARBITRATED,
|
|
|
- LibraryStatus.INSPECTED));
|
|
|
+ group.getNumber(), LibraryStatus.MARKED, LibraryStatus.ARBITRATED, LibraryStatus.INSPECTED));
|
|
|
} else if (group.getStatus() == MarkStatus.TRIAL) {
|
|
|
groupDao.updateMarkedCount(group.getExamId(), group.getSubjectCode(), group.getNumber(),
|
|
|
(int) trialLibraryDao.countMarked(group.getExamId(), group.getSubjectCode(), group.getNumber()));
|
|
@@ -1174,21 +1281,20 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 更新某个评卷分组评卷任务总量
|
|
|
*
|
|
|
- * @param group - 评卷分组
|
|
|
+ * @param group
|
|
|
+ * - 评卷分组
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public void updateLibraryCount(MarkGroup group) {
|
|
|
if (group.getStatus() == MarkStatus.FORMAL || group.getStatus() == MarkStatus.FINISH) {
|
|
|
- group.setLibraryCount((int) libraryDao
|
|
|
- .countByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
- group.getNumber()));
|
|
|
+ group.setLibraryCount((int) libraryDao.countByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(),
|
|
|
+ group.getSubjectCode(), group.getNumber()));
|
|
|
groupDao.updateLibraryCount(group.getExamId(), group.getSubjectCode(), group.getNumber(),
|
|
|
group.getLibraryCount());
|
|
|
} else if (group.getStatus() == MarkStatus.TRIAL) {
|
|
|
- group.setLibraryCount((int) trialLibraryDao
|
|
|
- .countByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
- group.getNumber()));
|
|
|
+ group.setLibraryCount((int) trialLibraryDao.countByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(),
|
|
|
+ group.getSubjectCode(), group.getNumber()));
|
|
|
groupDao.updateLibraryCount(group.getExamId(), group.getSubjectCode(), group.getNumber(),
|
|
|
group.getLibraryCount());
|
|
|
}
|
|
@@ -1197,8 +1303,10 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 更新某个科目所有评卷分组评卷任务数量
|
|
|
*
|
|
|
- * @param examId - 考试ID
|
|
|
- * @param subjectCode - 科目代码
|
|
|
+ * @param examId
|
|
|
+ * - 考试ID
|
|
|
+ * @param subjectCode
|
|
|
+ * - 科目代码
|
|
|
*/
|
|
|
@Transactional
|
|
|
@Override
|
|
@@ -1213,8 +1321,10 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 根据考生、学习中心、评卷分组构造试评评卷任务
|
|
|
*
|
|
|
- * @param student - 考生
|
|
|
- * @param group - 评卷分组
|
|
|
+ * @param student
|
|
|
+ * - 考生
|
|
|
+ * @param group
|
|
|
+ * - 评卷分组
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional
|
|
@@ -1243,22 +1353,25 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 重置评卷分组的连带操作
|
|
|
*
|
|
|
- * @param group - 评卷分组
|
|
|
+ * @param group
|
|
|
+ * - 评卷分组
|
|
|
*/
|
|
|
private void resetGroup(MarkGroup group) {
|
|
|
if (group.getStatus() == MarkStatus.FORMAL) {
|
|
|
trackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
group.getNumber());
|
|
|
specialTagDao.deleteByExamAndSubjectAndGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
+ headerTagDao.deleteByExamAndSubjectAndGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
+ headerTrackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
+ group.getNumber());
|
|
|
arbitrateDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
group.getNumber());
|
|
|
problemHistoryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
group.getNumber());
|
|
|
libraryDao.resetByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
group.getNumber(), LibraryStatus.WAITING);
|
|
|
- libraryDao
|
|
|
- .deleteByExamIdAndSubjectCodeAndGroupNumberAndTaskNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
- group.getNumber(), 3);
|
|
|
+ libraryDao.deleteByExamIdAndSubjectCodeAndGroupNumberAndTaskNumber(group.getExamId(),
|
|
|
+ group.getSubjectCode(), group.getNumber(), 3);
|
|
|
markerDao.resetByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
group.getNumber());
|
|
|
resetStudentGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
@@ -1275,7 +1388,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 计算并更新指定评卷员的评卷质量指标
|
|
|
*
|
|
|
- * @param marker - 评卷员
|
|
|
+ * @param marker
|
|
|
+ * - 评卷员
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional
|
|
@@ -1294,9 +1408,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
if (library.getStatus() == LibraryStatus.MARKED || library.getStatus() == LibraryStatus.INSPECTED) {
|
|
|
validCount++;
|
|
|
}
|
|
|
- double score = library.getMarkerScore() != null && library.getMarkerScore() != UN_SELECTIVE_SCORE ?
|
|
|
- library.getMarkerScore() :
|
|
|
- 0;
|
|
|
+ double score = library.getMarkerScore() != null && library.getMarkerScore() != UN_SELECTIVE_SCORE ? library
|
|
|
+ .getMarkerScore() : 0;
|
|
|
int spent = library.getMarkerSpent() != null ? library.getMarkerSpent() : 0;
|
|
|
|
|
|
sumScore += score;
|
|
@@ -1363,9 +1476,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
updateStudentGroupScore(library.getStudentId(), group.getExamId(), group.getSubjectCode(), group,
|
|
|
library.getMarkerScore(), library.getScoreList());
|
|
|
// 未分组的题目
|
|
|
- long unGroupQuestionCount = questionService
|
|
|
- .countByExamIdAndSubjectAndObjectiveAndGroupNumberIsNull(group.getExamId(), group.getSubjectCode(),
|
|
|
- false);
|
|
|
+ long unGroupQuestionCount = questionService.countByExamIdAndSubjectAndObjectiveAndGroupNumberIsNull(
|
|
|
+ group.getExamId(), group.getSubjectCode(), false);
|
|
|
long groupCount = groupDao.countByExamIdAndSubjectCode(group.getExamId(), group.getSubjectCode());
|
|
|
checkStudentSubjective(library.getStudentId(), groupCount, unGroupQuestionCount);
|
|
|
}
|
|
@@ -1383,9 +1495,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
updateStudentGroupScore(studentId, group.getExamId(), group.getSubjectCode(), group, group.getMarkScore(),
|
|
|
group.getMarkScoreDetail());
|
|
|
// 未分组的题目
|
|
|
- long unGroupQuestionCount = questionService
|
|
|
- .countByExamIdAndSubjectAndObjectiveAndGroupNumberIsNull(group.getExamId(), group.getSubjectCode(),
|
|
|
- false);
|
|
|
+ long unGroupQuestionCount = questionService.countByExamIdAndSubjectAndObjectiveAndGroupNumberIsNull(
|
|
|
+ group.getExamId(), group.getSubjectCode(), false);
|
|
|
long groupCount = groupDao.countByExamIdAndSubjectCode(group.getExamId(), group.getSubjectCode());
|
|
|
checkStudentSubjective(studentId, groupCount, unGroupQuestionCount);
|
|
|
} else {
|
|
@@ -1422,9 +1533,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
scoreDao.deleteByExamIdAndSubjectCodeAndGroupNumber(examId, subjectCode, groupNumber);
|
|
|
rejectHistoryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(examId, subjectCode, groupNumber);
|
|
|
selectiveStudentDao.deleteByExamIdAndSubjectCode(examId, subjectCode);
|
|
|
- studentService
|
|
|
- .updateSubjectiveStatusAndScoreAndInspectorId(examId, subjectCode, SubjectiveStatus.UNMARK, 0, null,
|
|
|
- null, null);
|
|
|
+ studentService.updateSubjectiveStatusAndScoreAndInspectorId(examId, subjectCode, SubjectiveStatus.UNMARK, 0,
|
|
|
+ null, null, null);
|
|
|
inspectHistoryService.deleteByExamIdAndSubjectCode(examId, subjectCode);
|
|
|
}
|
|
|
|
|
@@ -1442,10 +1552,10 @@ public class MarkServiceImpl implements MarkService {
|
|
|
private void updateStudentGroupScore(Integer studentId, Integer examId, String subjectCode, MarkGroup group,
|
|
|
double score, List<ScoreItem> scoreList) {
|
|
|
// scoreDao.deleteByStudentIdAndGroupNumber(studentId, groupNumber);
|
|
|
- List<ExamQuestion> questions = questionService
|
|
|
- .findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode, false, group.getNumber());
|
|
|
- List<SubjectiveScore> subjectiveScores = scoreService
|
|
|
- .findByStudentIdAndGroupNumber(studentId, group.getNumber());
|
|
|
+ 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;
|
|
@@ -1473,12 +1583,12 @@ public class MarkServiceImpl implements MarkService {
|
|
|
ss.setUncalculate(true);
|
|
|
}
|
|
|
if (group.getArbitrateThreshold() != null && group.getArbitrateThreshold() > 0) {
|
|
|
- ss.setUnansweredCount(0);
|
|
|
+ ss.setUnansweredCount(headerTrackDao.countByStudentIdAndQuestionNumberAndUnanswered(studentId,
|
|
|
+ question.getQuestionNumber(), true));
|
|
|
} else {
|
|
|
if (MarkStatus.TRIAL.equals(group.getStatus())) {
|
|
|
- ss.setUnansweredCount(trialTrackDao
|
|
|
- .countByStudentIdAndQuestionNumberAndUnanswered(studentId, question.getQuestionNumber(),
|
|
|
- true));
|
|
|
+ ss.setUnansweredCount(trialTrackDao.countByStudentIdAndQuestionNumberAndUnanswered(studentId,
|
|
|
+ question.getQuestionNumber(), true));
|
|
|
} else {
|
|
|
ss.setUnansweredCount(trackDao.countByStudentIdAndQuestionNumberAndUnanswered(studentId,
|
|
|
question.getQuestionNumber(), true));
|
|
@@ -1552,9 +1662,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
Date now = new Date();
|
|
|
for (Integer groupNumber : map.keySet()) {
|
|
|
List<MarkLibrary> list = libraryDao.findByStudentIdAndGroupNumber(student.getId(), groupNumber);
|
|
|
- List<ExamQuestion> questions = questionService
|
|
|
- .findByExamAndSubjectAndObjectiveAndGroupNumber(student.getExamId(), student.getSubjectCode(),
|
|
|
- false, groupNumber);
|
|
|
+ List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
|
|
|
+ student.getExamId(), student.getSubjectCode(), false, groupNumber);
|
|
|
List<MarkStepDTO> qList = map.get(groupNumber);
|
|
|
MarkGroup group = groupDao.findOne(student.getExamId(), student.getSubjectCode(), groupNumber);
|
|
|
int count = 0;
|
|
@@ -1580,22 +1689,24 @@ public class MarkServiceImpl implements MarkService {
|
|
|
rejectHistoryDao.save(history);
|
|
|
trackDao.deleteByLibraryId(library.getId());
|
|
|
specialTagDao.deleteByLibraryId(library.getId());
|
|
|
+ headerTagDao.deleteByStudentIdAndGroupNumber(library.getStudentId(), groupNumber);
|
|
|
+ headerTrackDao.deleteByPkStudentIdAndGroupNumber(library.getStudentId(), groupNumber);
|
|
|
arbitrateDao.deleteByStudentIdAndGroupNumber(student.getId(), groupNumber);
|
|
|
count++;
|
|
|
continue;
|
|
|
}
|
|
|
- if (library.getStatus().equals(LibraryStatus.MARKED) || library.getStatus()
|
|
|
- .equals(LibraryStatus.INSPECTED)) {
|
|
|
+ if (library.getStatus().equals(LibraryStatus.MARKED)
|
|
|
+ || library.getStatus().equals(LibraryStatus.INSPECTED)) {
|
|
|
List<ScoreItem> sList = library.getScoreList();
|
|
|
for (MarkStepDTO markStepDTO : qList) {
|
|
|
- trackDao.deleteByLibraryIdAndQuestionNumber(library.getId(),
|
|
|
- markStepDTO.getMainNumber() + "." + markStepDTO.getSubNumber());
|
|
|
+ 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() && markStepDTO.getSubNumber()
|
|
|
- .equals(question.getSubNumber())) {
|
|
|
+ if (markStepDTO.getMainNumber() == question.getMainNumber()
|
|
|
+ && markStepDTO.getSubNumber().equals(question.getSubNumber())) {
|
|
|
sList.remove(i);
|
|
|
sList.add(i, new ScoreItem(false));
|
|
|
}
|
|
@@ -1613,10 +1724,9 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// markerScoreList.append(",");
|
|
|
// }
|
|
|
}
|
|
|
- if (libraryDao
|
|
|
- .updateMarkerResult(library.getId(), LibraryStatus.REJECTED, library.getMarkerId(), null,
|
|
|
- StringUtils.join(markerScoreList, ","), null, null, reason, userId, now,
|
|
|
- LibraryStatus.MARKED, LibraryStatus.INSPECTED) == 1) {
|
|
|
+ if (libraryDao.updateMarkerResult(library.getId(), LibraryStatus.REJECTED, library.getMarkerId(),
|
|
|
+ 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);
|
|
@@ -1627,9 +1737,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
if (count > 0) {
|
|
|
updateMarkedCount(group);
|
|
|
resetStudentGroup(student.getId(), student.getExamId(), student.getSubjectCode(), groupNumber);
|
|
|
- studentService
|
|
|
- .updateSubjectiveStatusAndTimeAndInspectorId(student.getId(), SubjectiveStatus.UNMARK, null,
|
|
|
- null);
|
|
|
+ studentService.updateSubjectiveStatusAndTimeAndInspectorId(student.getId(), SubjectiveStatus.UNMARK,
|
|
|
+ null, null);
|
|
|
}
|
|
|
}
|
|
|
return true;
|
|
@@ -1642,8 +1751,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
return false;
|
|
|
}
|
|
|
for (ExamQuestion question : list) {
|
|
|
- SelectiveGroup selectiveGroup = selectiveGroupService
|
|
|
- .findOne(question.getExamId(), question.getSubjectCode(), question.getMainNumber());
|
|
|
+ SelectiveGroup selectiveGroup = selectiveGroupService.findOne(question.getExamId(),
|
|
|
+ question.getSubjectCode(), question.getMainNumber());
|
|
|
if (selectiveGroup != null) {
|
|
|
continue;
|
|
|
}
|
|
@@ -1654,9 +1763,9 @@ public class MarkServiceImpl implements MarkService {
|
|
|
String subjectCode = question.getSubjectCode();
|
|
|
boolean objective = question.isObjective();
|
|
|
ExamSubject subject = subjectService.find(examId, subjectCode);
|
|
|
- double totalScore = objective ?
|
|
|
- BigDecimalUtils.sub(subject.getObjectiveScore(), question.getTotalScore()) :
|
|
|
- BigDecimalUtils.sub(subject.getSubjectiveScore(), question.getTotalScore());
|
|
|
+ double totalScore = objective ? BigDecimalUtils.sub(subject.getObjectiveScore(),
|
|
|
+ question.getTotalScore()) : BigDecimalUtils.sub(subject.getSubjectiveScore(),
|
|
|
+ question.getTotalScore());
|
|
|
questionService.deleteById(question.getId());
|
|
|
if (objective) {
|
|
|
examService.updateObjectiveStatus(examId, ObjectiveStatus.WAITING);
|
|
@@ -1673,9 +1782,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// subjectCode);
|
|
|
inspectHistoryService.deleteByExamIdAndSubjectCode(examId, subjectCode);
|
|
|
} else {
|
|
|
- List<Integer> studentList = studentService
|
|
|
- .findIdByExamIdAndSubjectCodeAndSubjectiveStatus(examId, subjectCode,
|
|
|
- SubjectiveStatus.UNMARK, SubjectiveStatus.MARKED);
|
|
|
+ List<Integer> studentList = studentService.findIdByExamIdAndSubjectCodeAndSubjectiveStatus(
|
|
|
+ examId, subjectCode, SubjectiveStatus.UNMARK, SubjectiveStatus.MARKED);
|
|
|
for (Integer studentId : studentList) {
|
|
|
checkStudentSubjective(studentId, groupCount, unGroupQuestionCount);
|
|
|
}
|
|
@@ -1690,9 +1798,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public boolean rejectLibrary(MarkLibrary library, MarkStepDTO[] questionList, Integer userId, String reason) {
|
|
|
- List<ExamQuestion> questions = questionService
|
|
|
- .findByExamAndSubjectAndObjectiveAndGroupNumber(library.getExamId(), library.getSubjectCode(), false,
|
|
|
- library.getGroupNumber());
|
|
|
+ List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
|
|
|
+ library.getExamId(), library.getSubjectCode(), false, library.getGroupNumber());
|
|
|
if (questionList.length == questions.size()) {
|
|
|
return rejectLibrary(library, userId, reason, false);
|
|
|
}
|
|
@@ -1707,14 +1814,14 @@ public class MarkServiceImpl implements MarkService {
|
|
|
Date now = new Date();
|
|
|
List<ScoreItem> sList = library.getScoreList();
|
|
|
for (MarkStepDTO markStepDTO : questionList) {
|
|
|
- trackDao.deleteByLibraryIdAndQuestionNumber(library.getId(),
|
|
|
- markStepDTO.getMainNumber() + "." + markStepDTO.getSubNumber());
|
|
|
+ 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() && markStepDTO.getSubNumber()
|
|
|
- .equals(question.getSubNumber())) {
|
|
|
+ if (markStepDTO.getMainNumber() == question.getMainNumber()
|
|
|
+ && markStepDTO.getSubNumber().equals(question.getSubNumber())) {
|
|
|
sList.remove(i);
|
|
|
sList.add(i, new ScoreItem(false));
|
|
|
}
|
|
@@ -1744,9 +1851,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// 开启三评时,打回1,2任务则删除第3条任务
|
|
|
long count = libraryDao.countByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber());
|
|
|
if (library.getTaskNumber() != 3 && count == 3) {
|
|
|
- MarkLibrary third = libraryDao
|
|
|
- .findByStudentIdAndGroupNumberAndTaskNumber(library.getStudentId(), library.getGroupNumber(),
|
|
|
- 3);
|
|
|
+ MarkLibrary third = libraryDao.findByStudentIdAndGroupNumberAndTaskNumber(library.getStudentId(),
|
|
|
+ library.getGroupNumber(), 3);
|
|
|
trackDao.deleteByLibraryId(third.getId());
|
|
|
specialTagDao.deleteByLibraryId(third.getId());
|
|
|
problemHistoryDao.deleteByLibraryId(third.getId());
|