|
@@ -15,6 +15,7 @@ import cn.com.qmth.stmms.biz.utils.TaskLock;
|
|
import cn.com.qmth.stmms.biz.utils.TaskLockUtil;
|
|
import cn.com.qmth.stmms.biz.utils.TaskLockUtil;
|
|
import cn.com.qmth.stmms.common.enums.*;
|
|
import cn.com.qmth.stmms.common.enums.*;
|
|
import cn.com.qmth.stmms.common.utils.BigDecimalUtils;
|
|
import cn.com.qmth.stmms.common.utils.BigDecimalUtils;
|
|
|
|
+
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -94,7 +95,8 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 某个评卷分组已申请的评卷任务数量
|
|
* 某个评卷分组已申请的评卷任务数量
|
|
*
|
|
*
|
|
- * @param group - 评卷分组
|
|
|
|
|
|
+ * @param group
|
|
|
|
+ * - 评卷分组
|
|
* @return int
|
|
* @return int
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@@ -110,7 +112,8 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 某个评卷员已申请的评卷任务数量
|
|
* 某个评卷员已申请的评卷任务数量
|
|
*
|
|
*
|
|
- * @param marker - 评卷员
|
|
|
|
|
|
+ * @param marker
|
|
|
|
+ * - 评卷员
|
|
* @return int
|
|
* @return int
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@@ -140,7 +143,8 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 某个评卷员已完成的评卷任务数量
|
|
* 某个评卷员已完成的评卷任务数量
|
|
*
|
|
*
|
|
- * @param marker - 评卷员
|
|
|
|
|
|
+ * @param marker
|
|
|
|
+ * - 评卷员
|
|
* @return long
|
|
* @return long
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@@ -153,8 +157,8 @@ public class MarkServiceImpl implements MarkService {
|
|
if (group.getStatus() == MarkStatus.TRIAL) {
|
|
if (group.getStatus() == MarkStatus.TRIAL) {
|
|
return trialLibraryDao.countByMarkerId(marker.getId());
|
|
return trialLibraryDao.countByMarkerId(marker.getId());
|
|
} else {
|
|
} 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;
|
|
return 0;
|
|
@@ -163,7 +167,8 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 释放某个评卷分组的锁定任务
|
|
* 释放某个评卷分组的锁定任务
|
|
*
|
|
*
|
|
- * @param group - 评卷分组
|
|
|
|
|
|
+ * @param group
|
|
|
|
+ * - 评卷分组
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public void releaseByGroup(MarkGroup group) {
|
|
public void releaseByGroup(MarkGroup group) {
|
|
@@ -174,7 +179,8 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 重置某个评卷分组的所有评卷任务
|
|
* 重置某个评卷分组的所有评卷任务
|
|
*
|
|
*
|
|
- * @param group - 评卷分组
|
|
|
|
|
|
+ * @param group
|
|
|
|
+ * - 评卷分组
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
@@ -185,7 +191,8 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 删除某个评卷分组
|
|
* 删除某个评卷分组
|
|
*
|
|
*
|
|
- * @param group - 评卷分组
|
|
|
|
|
|
+ * @param group
|
|
|
|
+ * - 评卷分组
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
@@ -210,9 +217,8 @@ public class MarkServiceImpl implements MarkService {
|
|
markerDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
markerDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
group.getNumber());
|
|
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(),
|
|
groupStudentDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
group.getNumber());
|
|
group.getNumber());
|
|
@@ -222,9 +228,8 @@ public class MarkServiceImpl implements MarkService {
|
|
releaseByGroup(group);
|
|
releaseByGroup(group);
|
|
groupDao.delete(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());
|
|
long groupCount = groupDao.countByExamIdAndSubjectCode(group.getExamId(), group.getSubjectCode());
|
|
if (groupCount == 0 || unGroupQuestionCount > 0) {
|
|
if (groupCount == 0 || unGroupQuestionCount > 0) {
|
|
@@ -232,9 +237,9 @@ public class MarkServiceImpl implements MarkService {
|
|
SubjectiveStatus.UNMARK, 0, null, null, null);
|
|
SubjectiveStatus.UNMARK, 0, null, null, null);
|
|
subjectService.updateTrialCount(group.getExamId(), group.getSubjectCode(), 0);
|
|
subjectService.updateTrialCount(group.getExamId(), group.getSubjectCode(), 0);
|
|
} else {
|
|
} else {
|
|
- List<Integer> studentList = studentService
|
|
|
|
- .findIdByExamIdAndSubjectCodeAndSubjectiveStatus(group.getExamId(), group.getSubjectCode(),
|
|
|
|
- SubjectiveStatus.UNMARK, SubjectiveStatus.MARKED, SubjectiveStatus.INSPECTED);
|
|
|
|
|
|
+ List<Integer> studentList = studentService.findIdByExamIdAndSubjectCodeAndSubjectiveStatus(
|
|
|
|
+ group.getExamId(), group.getSubjectCode(), SubjectiveStatus.UNMARK, SubjectiveStatus.MARKED,
|
|
|
|
+ SubjectiveStatus.INSPECTED);
|
|
for (Integer studentId : studentList) {
|
|
for (Integer studentId : studentList) {
|
|
checkStudentSubjective(studentId, groupCount, unGroupQuestionCount);
|
|
checkStudentSubjective(studentId, groupCount, unGroupQuestionCount);
|
|
}
|
|
}
|
|
@@ -244,15 +249,15 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 修改某个评卷分组给分步骤,并重置评卷任务
|
|
* 修改某个评卷分组给分步骤,并重置评卷任务
|
|
*
|
|
*
|
|
- * @param group - 评卷分组
|
|
|
|
|
|
+ * @param group
|
|
|
|
+ * - 评卷分组
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
public void updateGroup(MarkGroup group, List<ExamQuestion> questionList, ScorePolicy policy, ThirdPolicy third,
|
|
public void updateGroup(MarkGroup group, List<ExamQuestion> questionList, ScorePolicy policy, ThirdPolicy third,
|
|
boolean selective) {
|
|
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) {
|
|
for (ExamQuestion question : old) {
|
|
question.setGroupNumber(null);
|
|
question.setGroupNumber(null);
|
|
questionService.saveAndFlush(question);
|
|
questionService.saveAndFlush(question);
|
|
@@ -285,8 +290,10 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 评卷员申请领取某个正式评卷任务
|
|
* 评卷员申请领取某个正式评卷任务
|
|
*
|
|
*
|
|
- * @param library - 正评任务
|
|
|
|
- * @param marker - 评卷员
|
|
|
|
|
|
+ * @param library
|
|
|
|
+ * - 正评任务
|
|
|
|
+ * @param marker
|
|
|
|
+ * - 评卷员
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public boolean applyLibrary(MarkLibrary library, Marker marker) {
|
|
public boolean applyLibrary(MarkLibrary library, Marker marker) {
|
|
@@ -309,8 +316,10 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 评卷员申请领取某个试评评卷任务
|
|
* 评卷员申请领取某个试评评卷任务
|
|
*
|
|
*
|
|
- * @param library - 试评任务
|
|
|
|
- * @param marker - 评卷员
|
|
|
|
|
|
+ * @param library
|
|
|
|
+ * - 试评任务
|
|
|
|
+ * @param marker
|
|
|
|
+ * - 评卷员
|
|
* @return boolean
|
|
* @return boolean
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@@ -322,8 +331,10 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 评卷员是否已领取了某个正式评卷任务
|
|
* 评卷员是否已领取了某个正式评卷任务
|
|
*
|
|
*
|
|
- * @param library - 正评任务
|
|
|
|
- * @param marker - 评卷员
|
|
|
|
|
|
+ * @param library
|
|
|
|
+ * - 正评任务
|
|
|
|
+ * @param marker
|
|
|
|
+ * - 评卷员
|
|
* @return boolean
|
|
* @return boolean
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@@ -335,8 +346,10 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 评卷员是否已领取了某个试评评卷任务
|
|
* 评卷员是否已领取了某个试评评卷任务
|
|
*
|
|
*
|
|
- * @param library - 试评任务
|
|
|
|
- * @param marker - 评卷员
|
|
|
|
|
|
+ * @param library
|
|
|
|
+ * - 试评任务
|
|
|
|
+ * @param marker
|
|
|
|
+ * - 评卷员
|
|
* @return boolean
|
|
* @return boolean
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@@ -348,8 +361,10 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 释放某个评卷员已完成的评卷任务
|
|
* 释放某个评卷员已完成的评卷任务
|
|
*
|
|
*
|
|
- * @param result - 评卷结果
|
|
|
|
- * @param marker - 评卷员
|
|
|
|
|
|
+ * @param result
|
|
|
|
+ * - 评卷结果
|
|
|
|
+ * @param marker
|
|
|
|
+ * - 评卷员
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public void releaseTask(SubmitResult result, Marker marker) {
|
|
public void releaseTask(SubmitResult result, Marker marker) {
|
|
@@ -367,7 +382,8 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 释放某个评卷员的所有锁定任务
|
|
* 释放某个评卷员的所有锁定任务
|
|
*
|
|
*
|
|
- * @param marker - 评卷员
|
|
|
|
|
|
+ * @param marker
|
|
|
|
+ * - 评卷员
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public void releaseByMarker(Marker marker) {
|
|
public void releaseByMarker(Marker marker) {
|
|
@@ -380,7 +396,8 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 重置某个评卷员
|
|
* 重置某个评卷员
|
|
*
|
|
*
|
|
- * @param marker - 评卷员
|
|
|
|
|
|
+ * @param marker
|
|
|
|
+ * - 评卷员
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
@@ -442,7 +459,8 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 根据考生删除评卷任务
|
|
* 根据考生删除评卷任务
|
|
*
|
|
*
|
|
- * @param student - 考生
|
|
|
|
|
|
+ * @param student
|
|
|
|
+ * - 考生
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
@@ -466,8 +484,10 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 评卷员提交评卷任务
|
|
* 评卷员提交评卷任务
|
|
*
|
|
*
|
|
- * @param result - 评卷结果
|
|
|
|
- * @param marker - 评卷员
|
|
|
|
|
|
+ * @param result
|
|
|
|
+ * - 评卷结果
|
|
|
|
+ * @param marker
|
|
|
|
+ * - 评卷员
|
|
* @return boolean
|
|
* @return boolean
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@@ -475,8 +495,8 @@ public class MarkServiceImpl implements MarkService {
|
|
public SubmitResult submitTask(MarkResult result, Marker marker) {
|
|
public SubmitResult submitTask(MarkResult result, Marker marker) {
|
|
// 判断评卷分组是否存在/评卷是否结束
|
|
// 判断评卷分组是否存在/评卷是否结束
|
|
MarkGroup group = groupDao.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
|
|
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();
|
|
return SubmitResult.faile();
|
|
}
|
|
}
|
|
|
|
|
|
@@ -484,8 +504,9 @@ public class MarkServiceImpl implements MarkService {
|
|
// 根据评卷状态选择读取不同的评卷任务
|
|
// 根据评卷状态选择读取不同的评卷任务
|
|
if (group.getStatus() == MarkStatus.FORMAL) {
|
|
if (group.getStatus() == MarkStatus.FORMAL) {
|
|
MarkLibrary library = libraryDao.findOne(result.getLibraryId());
|
|
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()) {
|
|
if (result.isProblem()) {
|
|
// 状态更新
|
|
// 状态更新
|
|
@@ -511,11 +532,12 @@ public class MarkServiceImpl implements MarkService {
|
|
}
|
|
}
|
|
} else if (group.getStatus() == MarkStatus.TRIAL) {
|
|
} else if (group.getStatus() == MarkStatus.TRIAL) {
|
|
TrialLibrary library = trialLibraryDao.findOne(result.getLibraryId());
|
|
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()) {
|
|
&& 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();
|
|
return SubmitResult.faile();
|
|
}
|
|
}
|
|
library.setMarkerId(marker.getId());
|
|
library.setMarkerId(marker.getId());
|
|
@@ -529,11 +551,11 @@ public class MarkServiceImpl implements MarkService {
|
|
}
|
|
}
|
|
library.setMarkerScore(result.getMarkerScore());
|
|
library.setMarkerScore(result.getMarkerScore());
|
|
library.setMarkerScoreList(result.getScoreList());
|
|
library.setMarkerScoreList(result.getScoreList());
|
|
- library = trialLibraryDao.save(library);
|
|
|
|
if (result.getTrackList() != null && !result.isUnselective()) {
|
|
if (result.getTrackList() != null && !result.isUnselective()) {
|
|
trialTrackDao.deleteByLibraryIdAndMarkerId(library.getId(), library.getMarkerId());
|
|
trialTrackDao.deleteByLibraryIdAndMarkerId(library.getId(), library.getMarkerId());
|
|
trialTrackDao.save(result.getTrackList(library));
|
|
trialTrackDao.save(result.getTrackList(library));
|
|
}
|
|
}
|
|
|
|
+ library = trialLibraryDao.save(library);
|
|
if (result.getSpecialTagList() != null && !result.isUnselective()) {
|
|
if (result.getSpecialTagList() != null && !result.isUnselective()) {
|
|
trialTagDao.deleteByLibraryIdAndMarkerId(library.getId(), library.getMarkerId());
|
|
trialTagDao.deleteByLibraryIdAndMarkerId(library.getId(), library.getMarkerId());
|
|
trialTagDao.save(result.getTagList(library));
|
|
trialTagDao.save(result.getTagList(library));
|
|
@@ -568,10 +590,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) {
|
|
private boolean submitLibrary(MarkLibrary library, Marker marker, MarkGroup group, MarkResult result) {
|
|
// 非本人领取的待评任务
|
|
// 非本人领取的待评任务
|
|
@@ -580,13 +606,13 @@ public class MarkServiceImpl implements MarkService {
|
|
return false;
|
|
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;
|
|
return false;
|
|
}
|
|
}
|
|
// 是否多评情况下已处理过该考生评卷任务
|
|
// 是否多评情况下已处理过该考生评卷任务
|
|
- if (libraryDao.countByStudentIdAndMarkerIdAndIdNotEqual(library.getStudentId(), marker.getId(), library.getId())
|
|
|
|
- > 0) {
|
|
|
|
|
|
+ if (libraryDao
|
|
|
|
+ .countByStudentIdAndMarkerIdAndIdNotEqual(library.getStudentId(), marker.getId(), library.getId()) > 0) {
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
// 未选做
|
|
// 未选做
|
|
@@ -598,20 +624,25 @@ public class MarkServiceImpl implements MarkService {
|
|
}
|
|
}
|
|
// 尝试提交评卷结果
|
|
// 尝试提交评卷结果
|
|
Date now = new Date();
|
|
Date now = new Date();
|
|
- if (libraryDao
|
|
|
|
- .updateMarkerResult(library.getId(), LibraryStatus.MARKED, marker.getId(), result.getMarkerScore(),
|
|
|
|
- result.getScoreList(), now, result.getSpent(), 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(), LibraryStatus.WAITING,
|
|
|
|
+ LibraryStatus.MARKED, LibraryStatus.INSPECTED, LibraryStatus.REJECTED) == 0) {
|
|
// 条件不符更新失败,直接返回
|
|
// 条件不符更新失败,直接返回
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
// 保存阅卷轨迹
|
|
// 保存阅卷轨迹
|
|
|
|
+ int unansweredCount = 0;
|
|
if (result.getTrackList() != null && !result.isUnselective()) {
|
|
if (result.getTrackList() != null && !result.isUnselective()) {
|
|
trackDao.deleteByLibraryId(library.getId());
|
|
trackDao.deleteByLibraryId(library.getId());
|
|
List<MarkTrack> tracks = result.getTrackList(library, marker);
|
|
List<MarkTrack> tracks = result.getTrackList(library, marker);
|
|
for (MarkTrack markTrack : tracks) {
|
|
for (MarkTrack markTrack : tracks) {
|
|
trackDao.saveAndFlush(markTrack);
|
|
trackDao.saveAndFlush(markTrack);
|
|
|
|
+ if (markTrack.isUnanswered()) {
|
|
|
|
+ unansweredCount++;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+ library.setUnansweredCount(unansweredCount);
|
|
|
|
+ libraryDao.saveAndFlush(library);
|
|
}
|
|
}
|
|
// 保存特殊标记
|
|
// 保存特殊标记
|
|
if (result.getSpecialTagList() != null && !result.isUnselective()) {
|
|
if (result.getSpecialTagList() != null && !result.isUnselective()) {
|
|
@@ -622,9 +653,8 @@ public class MarkServiceImpl implements MarkService {
|
|
ArbitrateHistory history = null;
|
|
ArbitrateHistory history = null;
|
|
if (group.getArbitrateThreshold() != null && group.getArbitrateThreshold() > 0) {
|
|
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) {
|
|
for (MarkLibrary other : list) {
|
|
// 本评卷任务或组长已打分,则跳过该任务
|
|
// 本评卷任务或组长已打分,则跳过该任务
|
|
if (other.getId().equals(library.getId()) || other.getHeaderScore() != null) {
|
|
if (other.getId().equals(library.getId()) || other.getHeaderScore() != null) {
|
|
@@ -635,9 +665,8 @@ public class MarkServiceImpl implements MarkService {
|
|
continue;
|
|
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);
|
|
history = buildArbitrateHistory(library, now);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -645,13 +674,12 @@ public class MarkServiceImpl implements MarkService {
|
|
if (Math.abs(other.getMarkerScore() - result.getMarkerScore()) > group.getArbitrateThreshold()) {
|
|
if (Math.abs(other.getMarkerScore() - result.getMarkerScore()) > group.getArbitrateThreshold()) {
|
|
// 开启三评
|
|
// 开启三评
|
|
if (group.getThirdPolicy().equals(ThirdPolicy.LOW_DIFF_HIGH_AVG)) {
|
|
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);
|
|
buildThirdLibrary(library, group);
|
|
} else {
|
|
} 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);
|
|
history = buildArbitrateHistory(libraries, group.getArbitrateThreshold(), now);
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
@@ -732,7 +760,8 @@ public class MarkServiceImpl implements MarkService {
|
|
* 管理员/组长打回某个评卷任务<br>
|
|
* 管理员/组长打回某个评卷任务<br>
|
|
* isRest为true时重置该评卷任务
|
|
* isRest为true时重置该评卷任务
|
|
*
|
|
*
|
|
- * @param library - 正评任务
|
|
|
|
|
|
+ * @param library
|
|
|
|
+ * - 正评任务
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
@@ -747,14 +776,13 @@ public class MarkServiceImpl implements MarkService {
|
|
specialTagDao.deleteByLibraryId(library.getId());
|
|
specialTagDao.deleteByLibraryId(library.getId());
|
|
resetStudentGroup(library.getStudentId(), library.getExamId(), library.getSubjectCode(),
|
|
resetStudentGroup(library.getStudentId(), library.getExamId(), library.getSubjectCode(),
|
|
library.getGroupNumber());
|
|
library.getGroupNumber());
|
|
- problemHistoryDao
|
|
|
|
- .resetByLibraryId(library.getId(), HistoryStatus.WAITING, userId, HistoryStatus.BACK, new Date());
|
|
|
|
|
|
+ problemHistoryDao.resetByLibraryId(library.getId(), HistoryStatus.WAITING, userId, HistoryStatus.BACK,
|
|
|
|
+ new Date());
|
|
// 开启三评时,打回1,2任务则删除第3条任务
|
|
// 开启三评时,打回1,2任务则删除第3条任务
|
|
long count = libraryDao.countByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber());
|
|
long count = libraryDao.countByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber());
|
|
if (library.getTaskNumber() != 3 && count == 3) {
|
|
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());
|
|
trackDao.deleteByLibraryId(third.getId());
|
|
specialTagDao.deleteByLibraryId(third.getId());
|
|
specialTagDao.deleteByLibraryId(third.getId());
|
|
problemHistoryDao.deleteByLibraryId(third.getId());
|
|
problemHistoryDao.deleteByLibraryId(third.getId());
|
|
@@ -771,7 +799,8 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 管理员/组长重置某个试评任务
|
|
* 管理员/组长重置某个试评任务
|
|
*
|
|
*
|
|
- * @param library - 试评任务
|
|
|
|
|
|
+ * @param library
|
|
|
|
+ * - 试评任务
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
@@ -789,7 +818,8 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 管理员/组长处理仲裁卷
|
|
* 管理员/组长处理仲裁卷
|
|
*
|
|
*
|
|
- * @param history - 仲裁卷
|
|
|
|
|
|
+ * @param history
|
|
|
|
+ * - 仲裁卷
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
@@ -873,8 +903,8 @@ public class MarkServiceImpl implements MarkService {
|
|
}
|
|
}
|
|
// 计算选做题分数
|
|
// 计算选做题分数
|
|
ExamStudent student = studentService.findById(studentId);
|
|
ExamStudent student = studentService.findById(studentId);
|
|
- List<SelectiveGroup> selectiveGroups = selectiveGroupService
|
|
|
|
- .findByExamIdAndSubjectCode(student.getExamId(), student.getSubjectCode());
|
|
|
|
|
|
+ List<SelectiveGroup> selectiveGroups = selectiveGroupService.findByExamIdAndSubjectCode(student.getExamId(),
|
|
|
|
+ student.getSubjectCode());
|
|
|
|
|
|
List<Double> selectiveList = new ArrayList<Double>();
|
|
List<Double> selectiveList = new ArrayList<Double>();
|
|
Integer selectiveCount = 0;
|
|
Integer selectiveCount = 0;
|
|
@@ -920,9 +950,8 @@ public class MarkServiceImpl implements MarkService {
|
|
// 有非完成状态的评卷任务,直接返回
|
|
// 有非完成状态的评卷任务,直接返回
|
|
return false;
|
|
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) {
|
|
if (markerScore == UN_SELECTIVE_SCORE) {
|
|
selectiveAll = true;
|
|
selectiveAll = true;
|
|
}
|
|
}
|
|
@@ -942,12 +971,12 @@ public class MarkServiceImpl implements MarkService {
|
|
}
|
|
}
|
|
return -1;
|
|
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)) {
|
|
if ((score3 - score2) <= (score2 - score1)) {
|
|
list.remove(0);
|
|
list.remove(0);
|
|
} else {
|
|
} else {
|
|
@@ -1019,7 +1048,8 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 更新某个评卷分组已评任务数量
|
|
* 更新某个评卷分组已评任务数量
|
|
*
|
|
*
|
|
- * @param group - 评卷分组
|
|
|
|
|
|
+ * @param group
|
|
|
|
+ * - 评卷分组
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
@@ -1027,8 +1057,7 @@ public class MarkServiceImpl implements MarkService {
|
|
if (group.getStatus() == MarkStatus.FORMAL || group.getStatus() == MarkStatus.FINISH) {
|
|
if (group.getStatus() == MarkStatus.FORMAL || group.getStatus() == MarkStatus.FINISH) {
|
|
groupDao.updateMarkedCount(group.getExamId(), group.getSubjectCode(), group.getNumber(), (int) libraryDao
|
|
groupDao.updateMarkedCount(group.getExamId(), group.getSubjectCode(), group.getNumber(), (int) libraryDao
|
|
.countByExamIdAndSubjectCodeAndGroupNumberAndStatus(group.getExamId(), group.getSubjectCode(),
|
|
.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) {
|
|
} else if (group.getStatus() == MarkStatus.TRIAL) {
|
|
groupDao.updateMarkedCount(group.getExamId(), group.getSubjectCode(), group.getNumber(),
|
|
groupDao.updateMarkedCount(group.getExamId(), group.getSubjectCode(), group.getNumber(),
|
|
(int) trialLibraryDao.countMarked(group.getExamId(), group.getSubjectCode(), group.getNumber()));
|
|
(int) trialLibraryDao.countMarked(group.getExamId(), group.getSubjectCode(), group.getNumber()));
|
|
@@ -1038,21 +1067,20 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 更新某个评卷分组评卷任务总量
|
|
* 更新某个评卷分组评卷任务总量
|
|
*
|
|
*
|
|
- * @param group - 评卷分组
|
|
|
|
|
|
+ * @param group
|
|
|
|
+ * - 评卷分组
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
public void updateLibraryCount(MarkGroup group) {
|
|
public void updateLibraryCount(MarkGroup group) {
|
|
if (group.getStatus() == MarkStatus.FORMAL || group.getStatus() == MarkStatus.FINISH) {
|
|
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(),
|
|
groupDao.updateLibraryCount(group.getExamId(), group.getSubjectCode(), group.getNumber(),
|
|
group.getLibraryCount());
|
|
group.getLibraryCount());
|
|
} else if (group.getStatus() == MarkStatus.TRIAL) {
|
|
} 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(),
|
|
groupDao.updateLibraryCount(group.getExamId(), group.getSubjectCode(), group.getNumber(),
|
|
group.getLibraryCount());
|
|
group.getLibraryCount());
|
|
}
|
|
}
|
|
@@ -1061,8 +1089,10 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 更新某个科目所有评卷分组评卷任务数量
|
|
* 更新某个科目所有评卷分组评卷任务数量
|
|
*
|
|
*
|
|
- * @param examId - 考试ID
|
|
|
|
- * @param subjectCode - 科目代码
|
|
|
|
|
|
+ * @param examId
|
|
|
|
+ * - 考试ID
|
|
|
|
+ * @param subjectCode
|
|
|
|
+ * - 科目代码
|
|
*/
|
|
*/
|
|
@Transactional
|
|
@Transactional
|
|
@Override
|
|
@Override
|
|
@@ -1077,9 +1107,12 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 根据考生、学习中心、评卷分组构造正式评卷任务
|
|
* 根据考生、学习中心、评卷分组构造正式评卷任务
|
|
*
|
|
*
|
|
- * @param student - 考生
|
|
|
|
- * @param group - 评卷分组
|
|
|
|
- * @param subject - 科目
|
|
|
|
|
|
+ * @param student
|
|
|
|
+ * - 考生
|
|
|
|
+ * @param group
|
|
|
|
+ * - 评卷分组
|
|
|
|
+ * @param subject
|
|
|
|
+ * - 科目
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
@@ -1105,15 +1138,14 @@ public class MarkServiceImpl implements MarkService {
|
|
} else {
|
|
} else {
|
|
double studentCount = subject.getUploadCount();
|
|
double studentCount = subject.getUploadCount();
|
|
double libraryCount = group.getLibraryCount();
|
|
double libraryCount = group.getLibraryCount();
|
|
- double doubleCount = libraryDao
|
|
|
|
- .countByExamIdAndSubjectCodeAndGroupNumberAndTaskNumber(group.getExamId(),
|
|
|
|
- group.getSubjectCode(), group.getNumber(), 2);
|
|
|
|
|
|
+ double doubleCount = libraryDao.countByExamIdAndSubjectCodeAndGroupNumberAndTaskNumber(
|
|
|
|
+ group.getExamId(), group.getSubjectCode(), group.getNumber(), 2);
|
|
int expectCount = (int) (studentCount * group.getDoubleRate());
|
|
int expectCount = (int) (studentCount * group.getDoubleRate());
|
|
// 随机数判断加入当前已经生成双评任务的比例加权
|
|
// 随机数判断加入当前已经生成双评任务的比例加权
|
|
// 实际双评任务数小于理论生成数 &&(剩余未生成双评的考生数量小于剩余应生成的数量||随机比例)
|
|
// 实际双评任务数小于理论生成数 &&(剩余未生成双评的考生数量小于剩余应生成的数量||随机比例)
|
|
- needDouble = doubleCount < expectCount && (
|
|
|
|
- (studentCount - libraryCount + doubleCount) <= (expectCount - doubleCount)
|
|
|
|
- || Math.random() < group.getDoubleRate() + 0.1);
|
|
|
|
|
|
+ needDouble = doubleCount < expectCount
|
|
|
|
+ && ((studentCount - libraryCount + doubleCount) <= (expectCount - doubleCount) || Math
|
|
|
|
+ .random() < group.getDoubleRate() + 0.1);
|
|
}
|
|
}
|
|
if (needDouble) {
|
|
if (needDouble) {
|
|
library = new MarkLibrary();
|
|
library = new MarkLibrary();
|
|
@@ -1138,8 +1170,10 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 根据考生、学习中心、评卷分组构造试评评卷任务
|
|
* 根据考生、学习中心、评卷分组构造试评评卷任务
|
|
*
|
|
*
|
|
- * @param student - 考生
|
|
|
|
- * @param group - 评卷分组
|
|
|
|
|
|
+ * @param student
|
|
|
|
+ * - 考生
|
|
|
|
+ * @param group
|
|
|
|
+ * - 评卷分组
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
@@ -1168,7 +1202,8 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 重置评卷分组的连带操作
|
|
* 重置评卷分组的连带操作
|
|
*
|
|
*
|
|
- * @param group - 评卷分组
|
|
|
|
|
|
+ * @param group
|
|
|
|
+ * - 评卷分组
|
|
*/
|
|
*/
|
|
private void resetGroup(MarkGroup group) {
|
|
private void resetGroup(MarkGroup group) {
|
|
if (group.getStatus() == MarkStatus.FORMAL) {
|
|
if (group.getStatus() == MarkStatus.FORMAL) {
|
|
@@ -1181,9 +1216,8 @@ public class MarkServiceImpl implements MarkService {
|
|
group.getNumber());
|
|
group.getNumber());
|
|
libraryDao.resetByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
libraryDao.resetByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
group.getNumber(), LibraryStatus.WAITING);
|
|
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(),
|
|
markerDao.resetByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
group.getNumber());
|
|
group.getNumber());
|
|
resetStudentGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
resetStudentGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
@@ -1200,7 +1234,8 @@ public class MarkServiceImpl implements MarkService {
|
|
/**
|
|
/**
|
|
* 计算并更新指定评卷员的评卷质量指标
|
|
* 计算并更新指定评卷员的评卷质量指标
|
|
*
|
|
*
|
|
- * @param marker - 评卷员
|
|
|
|
|
|
+ * @param marker
|
|
|
|
+ * - 评卷员
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
@@ -1282,12 +1317,11 @@ public class MarkServiceImpl implements MarkService {
|
|
private void checkStudentTrial(TrialLibrary library, MarkGroup group) {
|
|
private void checkStudentTrial(TrialLibrary library, MarkGroup group) {
|
|
updateStudentGroupStatus(library.getStudentId(), group.getExamId(), group.getSubjectCode(), group.getNumber(),
|
|
updateStudentGroupStatus(library.getStudentId(), group.getExamId(), group.getSubjectCode(), group.getNumber(),
|
|
SubjectiveStatus.MARKED);
|
|
SubjectiveStatus.MARKED);
|
|
- updateStudentGroupScore(library.getStudentId(), group.getExamId(), group.getSubjectCode(), group.getNumber(),
|
|
|
|
|
|
+ updateStudentGroupScore(library.getStudentId(), group.getExamId(), group.getSubjectCode(), group,
|
|
library.getMarkerScore(), library.getScoreList());
|
|
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());
|
|
long groupCount = groupDao.countByExamIdAndSubjectCode(group.getExamId(), group.getSubjectCode());
|
|
checkStudentSubjective(library.getStudentId(), groupCount, unGroupQuestionCount);
|
|
checkStudentSubjective(library.getStudentId(), groupCount, unGroupQuestionCount);
|
|
}
|
|
}
|
|
@@ -1302,12 +1336,11 @@ public class MarkServiceImpl implements MarkService {
|
|
if (calculateGroup(group, studentId)) {
|
|
if (calculateGroup(group, studentId)) {
|
|
updateStudentGroupStatus(studentId, group.getExamId(), group.getSubjectCode(), group.getNumber(),
|
|
updateStudentGroupStatus(studentId, group.getExamId(), group.getSubjectCode(), group.getNumber(),
|
|
SubjectiveStatus.MARKED);
|
|
SubjectiveStatus.MARKED);
|
|
- updateStudentGroupScore(studentId, group.getExamId(), group.getSubjectCode(), group.getNumber(),
|
|
|
|
- group.getMarkScore(), group.getMarkScoreDetail());
|
|
|
|
|
|
+ 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());
|
|
long groupCount = groupDao.countByExamIdAndSubjectCode(group.getExamId(), group.getSubjectCode());
|
|
checkStudentSubjective(studentId, groupCount, unGroupQuestionCount);
|
|
checkStudentSubjective(studentId, groupCount, unGroupQuestionCount);
|
|
} else {
|
|
} else {
|
|
@@ -1342,9 +1375,8 @@ public class MarkServiceImpl implements MarkService {
|
|
groupStudentDao.updateStatusByExamIdAndSubjectCodeAndGroupNumber(examId, subjectCode, groupNumber,
|
|
groupStudentDao.updateStatusByExamIdAndSubjectCodeAndGroupNumber(examId, subjectCode, groupNumber,
|
|
SubjectiveStatus.UNMARK);
|
|
SubjectiveStatus.UNMARK);
|
|
scoreDao.deleteByExamIdAndSubjectCodeAndGroupNumber(examId, subjectCode, groupNumber);
|
|
scoreDao.deleteByExamIdAndSubjectCodeAndGroupNumber(examId, subjectCode, groupNumber);
|
|
- studentService
|
|
|
|
- .updateSubjectiveStatusAndScoreAndInspectorId(examId, subjectCode, SubjectiveStatus.UNMARK, 0, null,
|
|
|
|
- null, null);
|
|
|
|
|
|
+ studentService.updateSubjectiveStatusAndScoreAndInspectorId(examId, subjectCode, SubjectiveStatus.UNMARK, 0,
|
|
|
|
+ null, null, null);
|
|
}
|
|
}
|
|
|
|
|
|
private void updateStudentGroupStatus(Integer studentId, Integer examId, String subjectCode, Integer groupNumber,
|
|
private void updateStudentGroupStatus(Integer studentId, Integer examId, String subjectCode, Integer groupNumber,
|
|
@@ -1358,18 +1390,18 @@ public class MarkServiceImpl implements MarkService {
|
|
groupStudentDao.saveAndFlush(gs);
|
|
groupStudentDao.saveAndFlush(gs);
|
|
}
|
|
}
|
|
|
|
|
|
- private void updateStudentGroupScore(Integer studentId, Integer examId, String subjectCode, Integer groupNumber,
|
|
|
|
|
|
+ private void updateStudentGroupScore(Integer studentId, Integer examId, String subjectCode, MarkGroup group,
|
|
double score, List<ScoreItem> scoreList) {
|
|
double score, List<ScoreItem> scoreList) {
|
|
// scoreDao.deleteByStudentIdAndGroupNumber(studentId, groupNumber);
|
|
// scoreDao.deleteByStudentIdAndGroupNumber(studentId, groupNumber);
|
|
- List<ExamQuestion> questions = questionService
|
|
|
|
- .findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode, false, groupNumber);
|
|
|
|
|
|
+ List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
|
|
|
|
+ subjectCode, false, group.getNumber());
|
|
for (int i = 0; i < questions.size(); i++) {
|
|
for (int i = 0; i < questions.size(); i++) {
|
|
ExamQuestion question = questions.get(i);
|
|
ExamQuestion question = questions.get(i);
|
|
SubjectiveScore ss = new SubjectiveScore();
|
|
SubjectiveScore ss = new SubjectiveScore();
|
|
ss.setStudentId(studentId);
|
|
ss.setStudentId(studentId);
|
|
ss.setExamId(examId);
|
|
ss.setExamId(examId);
|
|
ss.setSubjectCode(subjectCode);
|
|
ss.setSubjectCode(subjectCode);
|
|
- ss.setGroupNumber(groupNumber);
|
|
|
|
|
|
+ ss.setGroupNumber(group.getNumber());
|
|
ss.setGroupScore(score);
|
|
ss.setGroupScore(score);
|
|
ss.setMainNumber(question.getMainNumber());
|
|
ss.setMainNumber(question.getMainNumber());
|
|
ss.setSubNumber(question.getSubNumber());
|
|
ss.setSubNumber(question.getSubNumber());
|
|
@@ -1381,6 +1413,17 @@ public class MarkServiceImpl implements MarkService {
|
|
ss.setScore(score);
|
|
ss.setScore(score);
|
|
ss.setMainScore(score);
|
|
ss.setMainScore(score);
|
|
}
|
|
}
|
|
|
|
+ if (group.getArbitrateThreshold() > 0) {
|
|
|
|
+ ss.setUnansweredCount(0);
|
|
|
|
+ } else {
|
|
|
|
+ if (MarkStatus.TRIAL.equals(group.getStatus())) {
|
|
|
|
+ ss.setUnansweredCount(trialTrackDao.countByStudentIdAndQuestionNumberAndUnanswered(studentId,
|
|
|
|
+ question.getQuestionNumber(), true));
|
|
|
|
+ } else {
|
|
|
|
+ ss.setUnansweredCount(trackDao.countByStudentIdAndQuestionNumberAndUnanswered(studentId,
|
|
|
|
+ question.getQuestionNumber(), true));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
scoreDao.saveAndFlush(ss);
|
|
scoreDao.saveAndFlush(ss);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -1413,8 +1456,8 @@ public class MarkServiceImpl implements MarkService {
|
|
if (count > 0) {
|
|
if (count > 0) {
|
|
updateMarkedCount(group);
|
|
updateMarkedCount(group);
|
|
resetStudentGroup(student.getId(), group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
resetStudentGroup(student.getId(), group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
- studentService
|
|
|
|
- .updateSubjectiveStatusAndTimeAndInspectorId(student.getId(), SubjectiveStatus.UNMARK, null, null);
|
|
|
|
|
|
+ studentService.updateSubjectiveStatusAndTimeAndInspectorId(student.getId(), SubjectiveStatus.UNMARK, null,
|
|
|
|
+ null);
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
return false;
|
|
@@ -1441,9 +1484,8 @@ public class MarkServiceImpl implements MarkService {
|
|
}
|
|
}
|
|
for (Integer groupNumber : map.keySet()) {
|
|
for (Integer groupNumber : map.keySet()) {
|
|
List<MarkLibrary> list = libraryDao.findByStudentIdAndGroupNumber(student.getId(), groupNumber);
|
|
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);
|
|
List<MarkStepDTO> qList = map.get(groupNumber);
|
|
MarkGroup group = groupDao.findOne(student.getExamId(), student.getSubjectCode(), groupNumber);
|
|
MarkGroup group = groupDao.findOne(student.getExamId(), student.getSubjectCode(), groupNumber);
|
|
int count = 0;
|
|
int count = 0;
|
|
@@ -1466,16 +1508,16 @@ public class MarkServiceImpl implements MarkService {
|
|
count++;
|
|
count++;
|
|
continue;
|
|
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();
|
|
List<ScoreItem> sList = library.getScoreList();
|
|
for (MarkStepDTO markStepDTO : qList) {
|
|
for (MarkStepDTO markStepDTO : qList) {
|
|
- trackDao.deleteByLibraryIdAndQuestionNumber(library.getId(),
|
|
|
|
- markStepDTO.getMainNumber() + "." + markStepDTO.getSubNumber());
|
|
|
|
|
|
+ trackDao.deleteByLibraryIdAndQuestionNumber(library.getId(), markStepDTO.getMainNumber() + "."
|
|
|
|
+ + markStepDTO.getSubNumber());
|
|
for (int i = 0; i < questions.size(); i++) {
|
|
for (int i = 0; i < questions.size(); i++) {
|
|
ExamQuestion question = questions.get(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.remove(i);
|
|
sList.add(i, new ScoreItem(false));
|
|
sList.add(i, new ScoreItem(false));
|
|
}
|
|
}
|
|
@@ -1504,9 +1546,8 @@ public class MarkServiceImpl implements MarkService {
|
|
if (count > 0) {
|
|
if (count > 0) {
|
|
updateMarkedCount(group);
|
|
updateMarkedCount(group);
|
|
resetStudentGroup(student.getId(), student.getExamId(), student.getSubjectCode(), groupNumber);
|
|
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;
|
|
return true;
|
|
@@ -1515,8 +1556,8 @@ public class MarkServiceImpl implements MarkService {
|
|
@Transactional
|
|
@Transactional
|
|
@Override
|
|
@Override
|
|
public boolean deleteByQuestion(ExamQuestion question) {
|
|
public boolean deleteByQuestion(ExamQuestion question) {
|
|
- SelectiveGroup selectiveGroup = selectiveGroupService
|
|
|
|
- .findOne(question.getExamId(), question.getSubjectCode(), question.getMainNumber());
|
|
|
|
|
|
+ SelectiveGroup selectiveGroup = selectiveGroupService.findOne(question.getExamId(), question.getSubjectCode(),
|
|
|
|
+ question.getMainNumber());
|
|
if (selectiveGroup != null) {
|
|
if (selectiveGroup != null) {
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
@@ -1527,26 +1568,23 @@ public class MarkServiceImpl implements MarkService {
|
|
String subjectCode = question.getSubjectCode();
|
|
String subjectCode = question.getSubjectCode();
|
|
boolean objective = question.isObjective();
|
|
boolean objective = question.isObjective();
|
|
ExamSubject subject = subjectService.find(examId, subjectCode);
|
|
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());
|
|
questionService.deleteById(question.getId());
|
|
if (objective) {
|
|
if (objective) {
|
|
examService.updateObjectiveStatus(examId, ObjectiveStatus.WAITING);
|
|
examService.updateObjectiveStatus(examId, ObjectiveStatus.WAITING);
|
|
} else {
|
|
} else {
|
|
// 未分组的题目
|
|
// 未分组的题目
|
|
- long unGroupQuestionCount = questionService
|
|
|
|
- .countByExamIdAndSubjectAndObjectiveAndGroupNumberIsNull(examId, subjectCode, false);
|
|
|
|
|
|
+ long unGroupQuestionCount = questionService.countByExamIdAndSubjectAndObjectiveAndGroupNumberIsNull(
|
|
|
|
+ examId, subjectCode, false);
|
|
// 考生整体状态与总分更新
|
|
// 考生整体状态与总分更新
|
|
long groupCount = groupDao.countByExamIdAndSubjectCode(examId, subjectCode);
|
|
long groupCount = groupDao.countByExamIdAndSubjectCode(examId, subjectCode);
|
|
if (groupCount == 0 || unGroupQuestionCount > 0) {
|
|
if (groupCount == 0 || unGroupQuestionCount > 0) {
|
|
- studentService
|
|
|
|
- .updateSubjectiveStatusAndScoreAndInspectorId(examId, subjectCode, SubjectiveStatus.UNMARK,
|
|
|
|
- 0, null, null, null);
|
|
|
|
|
|
+ studentService.updateSubjectiveStatusAndScoreAndInspectorId(examId, subjectCode,
|
|
|
|
+ SubjectiveStatus.UNMARK, 0, null, null, null);
|
|
} else {
|
|
} else {
|
|
- List<Integer> studentList = studentService
|
|
|
|
- .findIdByExamIdAndSubjectCodeAndSubjectiveStatus(examId, subjectCode,
|
|
|
|
- SubjectiveStatus.UNMARK, SubjectiveStatus.MARKED, SubjectiveStatus.INSPECTED);
|
|
|
|
|
|
+ List<Integer> studentList = studentService.findIdByExamIdAndSubjectCodeAndSubjectiveStatus(examId,
|
|
|
|
+ subjectCode, SubjectiveStatus.UNMARK, SubjectiveStatus.MARKED, SubjectiveStatus.INSPECTED);
|
|
for (Integer studentId : studentList) {
|
|
for (Integer studentId : studentList) {
|
|
checkStudentSubjective(studentId, groupCount, unGroupQuestionCount);
|
|
checkStudentSubjective(studentId, groupCount, unGroupQuestionCount);
|
|
}
|
|
}
|
|
@@ -1560,9 +1598,8 @@ public class MarkServiceImpl implements MarkService {
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
public boolean rejectLibrary(MarkLibrary library, MarkStepDTO[] questionList, Integer userId) {
|
|
public boolean rejectLibrary(MarkLibrary library, MarkStepDTO[] questionList, Integer userId) {
|
|
- 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()) {
|
|
if (questionList.length == questions.size()) {
|
|
return rejectLibrary(library, userId, false);
|
|
return rejectLibrary(library, userId, false);
|
|
}
|
|
}
|
|
@@ -1572,12 +1609,12 @@ public class MarkServiceImpl implements MarkService {
|
|
}
|
|
}
|
|
List<ScoreItem> sList = library.getScoreList();
|
|
List<ScoreItem> sList = library.getScoreList();
|
|
for (MarkStepDTO markStepDTO : questionList) {
|
|
for (MarkStepDTO markStepDTO : questionList) {
|
|
- trackDao.deleteByLibraryIdAndQuestionNumber(library.getId(),
|
|
|
|
- markStepDTO.getMainNumber() + "." + markStepDTO.getSubNumber());
|
|
|
|
|
|
+ trackDao.deleteByLibraryIdAndQuestionNumber(library.getId(), markStepDTO.getMainNumber() + "."
|
|
|
|
+ + markStepDTO.getSubNumber());
|
|
for (int i = 0; i < questions.size(); i++) {
|
|
for (int i = 0; i < questions.size(); i++) {
|
|
ExamQuestion question = questions.get(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.remove(i);
|
|
sList.add(i, new ScoreItem(false));
|
|
sList.add(i, new ScoreItem(false));
|
|
}
|
|
}
|
|
@@ -1599,14 +1636,13 @@ public class MarkServiceImpl implements MarkService {
|
|
markerScoreList.toString(), null, null, LibraryStatus.MARKED, LibraryStatus.INSPECTED) == 1) {
|
|
markerScoreList.toString(), null, null, LibraryStatus.MARKED, LibraryStatus.INSPECTED) == 1) {
|
|
resetStudentGroup(library.getStudentId(), library.getExamId(), library.getSubjectCode(),
|
|
resetStudentGroup(library.getStudentId(), library.getExamId(), library.getSubjectCode(),
|
|
library.getGroupNumber());
|
|
library.getGroupNumber());
|
|
- problemHistoryDao
|
|
|
|
- .resetByLibraryId(library.getId(), HistoryStatus.WAITING, userId, HistoryStatus.BACK, new Date());
|
|
|
|
|
|
+ problemHistoryDao.resetByLibraryId(library.getId(), HistoryStatus.WAITING, userId, HistoryStatus.BACK,
|
|
|
|
+ new Date());
|
|
// 开启三评时,打回1,2任务则删除第3条任务
|
|
// 开启三评时,打回1,2任务则删除第3条任务
|
|
long count = libraryDao.countByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber());
|
|
long count = libraryDao.countByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber());
|
|
if (library.getTaskNumber() != 3 && count == 3) {
|
|
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());
|
|
trackDao.deleteByLibraryId(third.getId());
|
|
specialTagDao.deleteByLibraryId(third.getId());
|
|
specialTagDao.deleteByLibraryId(third.getId());
|
|
problemHistoryDao.deleteByLibraryId(third.getId());
|
|
problemHistoryDao.deleteByLibraryId(third.getId());
|