|
@@ -1,5 +1,6 @@
|
|
|
package cn.com.qmth.stmms.biz.mark.service.Impl;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Collections;
|
|
|
import java.util.Comparator;
|
|
@@ -54,9 +55,8 @@ import cn.com.qmth.stmms.common.enums.ThirdPolicy;
|
|
|
|
|
|
/**
|
|
|
* 与评卷相关的所有修改操作(非传播性的新增操作除外),全部汇总到这里进行集中控制
|
|
|
- *
|
|
|
- * @author luoshi
|
|
|
*
|
|
|
+ * @author luoshi
|
|
|
*/
|
|
|
@Service("markService")
|
|
|
public class MarkServiceImpl implements MarkService {
|
|
@@ -113,7 +113,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 某个大题已申请的评卷任务数量
|
|
|
- *
|
|
|
+ *
|
|
|
* @param group
|
|
|
* @return
|
|
|
*/
|
|
@@ -130,7 +130,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 某个评卷员已申请的评卷任务数量
|
|
|
- *
|
|
|
+ *
|
|
|
* @param marker
|
|
|
* @param status
|
|
|
* @return
|
|
@@ -153,7 +153,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 某个评卷员已完成的评卷任务数量
|
|
|
- *
|
|
|
+ *
|
|
|
* @param marker
|
|
|
* @param status
|
|
|
* @return
|
|
@@ -168,8 +168,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
if (group.getStatus() == MarkStatus.TRIAL) {
|
|
|
return trialHistoryDao.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;
|
|
@@ -177,7 +177,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 释放某个大题的锁定任务
|
|
|
- *
|
|
|
+ *
|
|
|
* @param group
|
|
|
*/
|
|
|
@Override
|
|
@@ -191,7 +191,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 重置某个大题的所有评卷任务
|
|
|
- *
|
|
|
+ *
|
|
|
* @param group
|
|
|
*/
|
|
|
@Override
|
|
@@ -202,56 +202,48 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 删除某个大题
|
|
|
- *
|
|
|
+ *
|
|
|
* @param group
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public void deleteGroup(MarkGroup group) {
|
|
|
// 试评相关数据
|
|
|
- trialTrackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
- group.getNumber());
|
|
|
+ trialTrackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
trialTagDao.deleteByExamAndSubjectAndGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
- trialHistoryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
- group.getNumber());
|
|
|
- trialLibraryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
- group.getNumber());
|
|
|
+ trialHistoryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
+ trialLibraryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
// 正评相关数据
|
|
|
- trackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
- group.getNumber());
|
|
|
+ trackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
specialTagDao.deleteByExamAndSubjectAndGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
- arbitrateDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
- group.getNumber());
|
|
|
- problemHistoryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
- group.getNumber());
|
|
|
- libraryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
- group.getNumber());
|
|
|
+ arbitrateDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
+ problemHistoryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
+ libraryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
// 评卷员数据
|
|
|
- markerDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
- group.getNumber());
|
|
|
+ markerDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
// 小题数据
|
|
|
- questionDao.deleteByExamIdAndSubjectCodeAndObjectiveAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
- false, group.getNumber());
|
|
|
+ questionDao.deleteByExamIdAndSubjectCodeAndObjectiveAndGroupNumber(group.getExamId(), group.getSubjectCode(), false,
|
|
|
+ group.getNumber());
|
|
|
|
|
|
releaseByGroup(group);
|
|
|
groupDao.delete(group);
|
|
|
// 科目总分
|
|
|
- subjectService.updateScore(group.getExamId(), group.getSubjectCode(), false,
|
|
|
- sumTotalScore(group.getExamId(), group.getSubjectCode()));
|
|
|
+ subjectService
|
|
|
+ .updateScore(group.getExamId(), group.getSubjectCode(), false, sumTotalScore(group.getExamId(), group.getSubjectCode()));
|
|
|
// 需要重新统分
|
|
|
examService.updateNeedCalculate(group.getExamId(), true);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 修改某个大题给分步骤,并重置评卷任务
|
|
|
- *
|
|
|
+ *
|
|
|
* @param group
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public void updateGroup(MarkGroup group, List<ExamQuestion> questionList, ScorePolicy policy, ThirdPolicy third) {
|
|
|
- questionDao.deleteByExamIdAndSubjectCodeAndObjectiveAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
- false, group.getNumber());
|
|
|
+ questionDao.deleteByExamIdAndSubjectCodeAndObjectiveAndGroupNumber(group.getExamId(), group.getSubjectCode(), false,
|
|
|
+ group.getNumber());
|
|
|
double totalScore = 0d;
|
|
|
for (ExamQuestion question : questionList) {
|
|
|
totalScore += question.getTotalScore();
|
|
@@ -261,14 +253,14 @@ public class MarkServiceImpl implements MarkService {
|
|
|
groupDao.updateTotalScore(group.getExamId(), group.getSubjectCode(), group.getNumber(), totalScore);
|
|
|
groupDao.updateScorePolicy(group.getExamId(), group.getSubjectCode(), group.getNumber(), policy);
|
|
|
groupDao.updateThirdPolicy(group.getExamId(), group.getSubjectCode(), group.getNumber(), third);
|
|
|
- subjectService.updateScore(group.getExamId(), group.getSubjectCode(), false,
|
|
|
- sumTotalScore(group.getExamId(), group.getSubjectCode()));
|
|
|
+ subjectService
|
|
|
+ .updateScore(group.getExamId(), group.getSubjectCode(), false, sumTotalScore(group.getExamId(), group.getSubjectCode()));
|
|
|
resetGroup(group);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 评卷员申请领取某个正式评卷任务
|
|
|
- *
|
|
|
+ *
|
|
|
* @param library
|
|
|
* @param marker
|
|
|
*/
|
|
@@ -285,7 +277,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 评卷员申请领取某个试评评卷任务
|
|
|
- *
|
|
|
+ *
|
|
|
* @param library
|
|
|
* @param marker
|
|
|
*/
|
|
@@ -296,7 +288,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 评卷员是否已领取了某个正式评卷任务
|
|
|
- *
|
|
|
+ *
|
|
|
* @param library
|
|
|
* @param marker
|
|
|
* @return
|
|
@@ -308,7 +300,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 评卷员是否已领取了某个试评评卷任务
|
|
|
- *
|
|
|
+ *
|
|
|
* @param library
|
|
|
* @param marker
|
|
|
* @return
|
|
@@ -320,7 +312,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 释放某个评卷员已领取的正评任务
|
|
|
- *
|
|
|
+ *
|
|
|
* @param library
|
|
|
* @param marker
|
|
|
*/
|
|
@@ -331,7 +323,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 释放某个评卷员已领取的试评任务
|
|
|
- *
|
|
|
+ *
|
|
|
* @param library
|
|
|
* @param marker
|
|
|
*/
|
|
@@ -342,7 +334,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 释放某个评卷员的所有锁定任务
|
|
|
- *
|
|
|
+ *
|
|
|
* @param marker
|
|
|
* @param group
|
|
|
*/
|
|
@@ -354,7 +346,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 重置某个评卷员
|
|
|
- *
|
|
|
+ *
|
|
|
* @param marker
|
|
|
*/
|
|
|
@Override
|
|
@@ -366,12 +358,10 @@ public class MarkServiceImpl implements MarkService {
|
|
|
}
|
|
|
if (group.getStatus() == MarkStatus.FORMAL) {
|
|
|
// 仲裁和等待仲裁的任务不被重置
|
|
|
- trackDao.deleteByMarkerId(marker.getId(), LibraryStatus.ARBITRATED, LibraryStatus.WAIT_ARBITRATE,
|
|
|
- LibraryStatus.PROBLEM);
|
|
|
- specialTagDao.deleteByMarkerId(marker.getId(), LibraryStatus.ARBITRATED, LibraryStatus.WAIT_ARBITRATE,
|
|
|
+ trackDao.deleteByMarkerId(marker.getId(), LibraryStatus.ARBITRATED, LibraryStatus.WAIT_ARBITRATE, LibraryStatus.PROBLEM);
|
|
|
+ specialTagDao.deleteByMarkerId(marker.getId(), LibraryStatus.ARBITRATED, LibraryStatus.WAIT_ARBITRATE, LibraryStatus.PROBLEM);
|
|
|
+ libraryDao.resetByMarkerId(marker.getId(), LibraryStatus.WAITING, LibraryStatus.ARBITRATED, LibraryStatus.WAIT_ARBITRATE,
|
|
|
LibraryStatus.PROBLEM);
|
|
|
- libraryDao.resetByMarkerId(marker.getId(), LibraryStatus.WAITING, LibraryStatus.ARBITRATED,
|
|
|
- LibraryStatus.WAIT_ARBITRATE, LibraryStatus.PROBLEM);
|
|
|
markerDao.resetById(marker.getId());
|
|
|
} else if (group.getStatus() == MarkStatus.TRIAL) {
|
|
|
trialTagDao.deleteByMarkerId(marker.getId());
|
|
@@ -384,7 +374,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 根据考生ID删除评卷任务
|
|
|
- *
|
|
|
+ *
|
|
|
* @param studentId
|
|
|
*/
|
|
|
@Override
|
|
@@ -407,7 +397,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 评卷员提交评卷任务
|
|
|
- *
|
|
|
+ *
|
|
|
* @param task
|
|
|
* @param marker
|
|
|
* @return
|
|
@@ -417,8 +407,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
public boolean submitTask(MarkResult result, Marker marker) {
|
|
|
// 判断大题是否存在/评卷是否结束
|
|
|
MarkGroup group = groupDao.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
|
|
|
- if (group == null || group.getStatus() == MarkStatus.FINISH
|
|
|
- || group.getStatus().getValue() != result.getStatusValue()) {
|
|
|
+ if (group == null || group.getStatus() == MarkStatus.FINISH || group.getStatus().getValue() != result.getStatusValue()) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
@@ -439,17 +428,16 @@ public class MarkServiceImpl implements MarkService {
|
|
|
problemHistoryService.save(history);
|
|
|
// 状态更新
|
|
|
Date now = new Date();
|
|
|
- if (libraryDao.updateProblemResult(library.getId(), LibraryStatus.PROBLEM, marker.getId(), now,
|
|
|
- result.getSpent(), LibraryStatus.WAITING, LibraryStatus.MARKED, LibraryStatus.INSPECTED) == 0) {
|
|
|
+ if (libraryDao.updateProblemResult(library.getId(), LibraryStatus.PROBLEM, marker.getId(), now, result.getSpent(),
|
|
|
+ LibraryStatus.WAITING, LibraryStatus.MARKED, LibraryStatus.INSPECTED) == 0) {
|
|
|
updateMarkedCount(group);
|
|
|
releaseLibrary(library, marker);
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
- if (library != null && library.getExamId().equals(group.getExamId())
|
|
|
- && library.getSubjectCode().equals(group.getSubjectCode())
|
|
|
- && library.getGroupNumber().equals(group.getNumber())
|
|
|
- && result.getTotalScore() <= group.getTotalScore() && StringUtils.isNotBlank(result.getScoreList())) {
|
|
|
+ if (library != null && library.getExamId().equals(group.getExamId()) && library.getSubjectCode().equals(group.getSubjectCode())
|
|
|
+ && library.getGroupNumber().equals(group.getNumber()) && result.getTotalScore() <= group.getTotalScore() && StringUtils
|
|
|
+ .isNotBlank(result.getScoreList())) {
|
|
|
if (submitLibrary(library, marker, group, result)) {
|
|
|
updateMarkedCount(group);
|
|
|
releaseLibrary(library, marker);
|
|
@@ -458,10 +446,9 @@ 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())
|
|
|
- && result.getTotalScore() <= group.getTotalScore() && StringUtils.isNotBlank(result.getScoreList())) {
|
|
|
+ if (library != null && library.getExamId().equals(group.getExamId()) && library.getSubjectCode().equals(group.getSubjectCode())
|
|
|
+ && library.getGroupNumber().equals(group.getNumber()) && result.getTotalScore() <= group.getTotalScore() && StringUtils
|
|
|
+ .isNotBlank(result.getScoreList())) {
|
|
|
TrialHistory history = new TrialHistory();
|
|
|
history.setExamId(library.getExamId());
|
|
|
history.setSubjectCode(library.getSubjectCode());
|
|
@@ -493,7 +480,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 评卷员提交某个正评任务
|
|
|
- *
|
|
|
+ *
|
|
|
* @param library
|
|
|
* @param marker
|
|
|
* @param trackMap
|
|
@@ -505,20 +492,19 @@ 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(), library.getMarkerId(),
|
|
|
- library.getId()) > 0) {
|
|
|
+ if (libraryDao.countByStudentIdAndMarkerIdAndIdNotEqual(library.getStudentId(), library.getMarkerId(), library.getId()) > 0) {
|
|
|
return false;
|
|
|
}
|
|
|
// 尝试提交评卷结果
|
|
|
Date now = new Date();
|
|
|
- if (libraryDao.updateMarkerResult(library.getId(), LibraryStatus.MARKED, marker.getId(),
|
|
|
- result.getTotalScore(), result.getScoreList(), now, result.getSpent(), LibraryStatus.WAITING,
|
|
|
- LibraryStatus.MARKED, LibraryStatus.INSPECTED) == 0) {
|
|
|
+ if (libraryDao
|
|
|
+ .updateMarkerResult(library.getId(), LibraryStatus.MARKED, marker.getId(), result.getTotalScore(), result.getScoreList(),
|
|
|
+ now, result.getSpent(), LibraryStatus.WAITING, LibraryStatus.MARKED, LibraryStatus.INSPECTED) == 0) {
|
|
|
// 条件不符更新失败,直接返回
|
|
|
return false;
|
|
|
}
|
|
@@ -538,8 +524,9 @@ 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) {
|
|
|
// 本评卷任务或组长已打分,则跳过该任务
|
|
@@ -553,8 +540,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
buildThirdLibrary(library, group);
|
|
|
} else {
|
|
|
// 两两比较,触发仲裁
|
|
|
- List<MarkLibrary> libraries = libraryDao.findByStudentIdAndGroupNumber(
|
|
|
- library.getStudentId(), library.getGroupNumber());
|
|
|
+ List<MarkLibrary> libraries = libraryDao
|
|
|
+ .findByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber());
|
|
|
history = getArbitrate(libraries, group.getArbitrateThreshold(), now);
|
|
|
}
|
|
|
} else {
|
|
@@ -569,8 +556,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// 保存仲裁记录
|
|
|
arbitrateDao.save(history);
|
|
|
// 触发仲裁后续状态更新
|
|
|
- libraryDao.updateByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber(),
|
|
|
- LibraryStatus.WAIT_ARBITRATE);
|
|
|
+ libraryDao.updateByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber(), LibraryStatus.WAIT_ARBITRATE);
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
@@ -627,7 +613,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 管理员/组长打回某个评卷任务<br>
|
|
|
* 暂时不用到BACKED状态,直接等同于重置该评卷任务
|
|
|
- *
|
|
|
+ *
|
|
|
* @param library
|
|
|
*/
|
|
|
@Override
|
|
@@ -637,8 +623,9 @@ public class MarkServiceImpl implements MarkService {
|
|
|
if (group.getStatus() == MarkStatus.FINISH) {
|
|
|
return false;
|
|
|
}
|
|
|
- if (libraryDao.resetById(library.getId(), LibraryStatus.WAITING, LibraryStatus.MARKED, LibraryStatus.INSPECTED,
|
|
|
- LibraryStatus.PROBLEM) > 0) {
|
|
|
+ if (libraryDao
|
|
|
+ .resetById(library.getId(), LibraryStatus.WAITING, LibraryStatus.MARKED, LibraryStatus.INSPECTED, LibraryStatus.PROBLEM)
|
|
|
+ > 0) {
|
|
|
trackDao.deleteByLibraryId(library.getId());
|
|
|
specialTagDao.deleteByLibraryId(library.getId());
|
|
|
updateMarkedCount(library.getExamId(), library.getSubjectCode(), library.getGroupNumber());
|
|
@@ -651,7 +638,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 管理员/组长重置某个试评任务
|
|
|
- *
|
|
|
+ *
|
|
|
* @param library
|
|
|
*/
|
|
|
@Override
|
|
@@ -669,7 +656,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 管理员/组长处理仲裁卷
|
|
|
- *
|
|
|
+ *
|
|
|
* @param history
|
|
|
*/
|
|
|
@Override
|
|
@@ -677,8 +664,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
public void processArbitrate(ArbitrateHistory history) {
|
|
|
if (arbitrateDao.exists(history.getId())) {
|
|
|
arbitrateDao.saveAndFlush(history);
|
|
|
- libraryDao.updateHeaderResult(history.getStudentId(), history.getGroupNumber(), history.getUserId(),
|
|
|
- history.getTotalScore(), history.getScoreList(), history.getUpdateTime(), LibraryStatus.ARBITRATED);
|
|
|
+ libraryDao.updateHeaderResult(history.getStudentId(), history.getGroupNumber(), history.getUserId(), history.getTotalScore(),
|
|
|
+ history.getScoreList(), history.getUpdateTime(), LibraryStatus.ARBITRATED);
|
|
|
updateMarkedCount(history.getExamId(), history.getSubjectCode(), history.getGroupNumber());
|
|
|
scoreCalculate(studentService.findById(history.getStudentId()),
|
|
|
groupDao.findByExamIdAndSubjectCode(history.getExamId(), history.getSubjectCode()));
|
|
@@ -687,7 +674,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 对某个考生某个科目进行主观题统分
|
|
|
- *
|
|
|
+ *
|
|
|
* @param examId
|
|
|
* @param subjectCode
|
|
|
* @param studentId
|
|
@@ -716,8 +703,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// 全部评完,更新考生主观题得分
|
|
|
student.setSubjectiveScore(totalScore);
|
|
|
student.setScoreList(scoreList, false);
|
|
|
- studentService.updateSubjectiveScore(student.getId(), student.getSubjectiveScore(),
|
|
|
- student.getSubjectiveScoreList());
|
|
|
+ studentService.updateSubjectiveScore(student.getId(), student.getSubjectiveScore(), student.getSubjectiveScoreList());
|
|
|
}
|
|
|
|
|
|
private boolean calculateGroup(MarkGroup group, Integer studentId) {
|
|
@@ -752,12 +738,9 @@ 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 {
|
|
@@ -829,7 +812,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 更新某个大题已评任务数量
|
|
|
- *
|
|
|
+ *
|
|
|
* @param group
|
|
|
*/
|
|
|
@Override
|
|
@@ -837,8 +820,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
public void updateMarkedCount(MarkGroup group) {
|
|
|
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));
|
|
|
+ .countByExamIdAndSubjectCodeAndGroupNumberAndStatus(group.getExamId(), group.getSubjectCode(), 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()));
|
|
@@ -847,28 +830,26 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 更新某个大题评卷任务总量
|
|
|
- *
|
|
|
+ *
|
|
|
* @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()));
|
|
|
- groupDao.updateLibraryCount(group.getExamId(), group.getSubjectCode(), group.getNumber(),
|
|
|
- group.getLibraryCount());
|
|
|
+ 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()));
|
|
|
- groupDao.updateLibraryCount(group.getExamId(), group.getSubjectCode(), group.getNumber(),
|
|
|
- group.getLibraryCount());
|
|
|
+ group.setLibraryCount((int) trialLibraryDao
|
|
|
+ .countByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(), group.getNumber()));
|
|
|
+ groupDao.updateLibraryCount(group.getExamId(), group.getSubjectCode(), group.getNumber(), group.getLibraryCount());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 更新某个科目所有大题评卷任务数量
|
|
|
- *
|
|
|
+ *
|
|
|
* @param examId
|
|
|
* @param subjectCode
|
|
|
* @param groupNumber
|
|
@@ -885,7 +866,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 根据考生、学习中心、大题构造正式评卷任务
|
|
|
- *
|
|
|
+ *
|
|
|
* @param student
|
|
|
* @param campus
|
|
|
* @param group
|
|
@@ -914,13 +895,13 @@ public class MarkServiceImpl implements MarkService {
|
|
|
} else {
|
|
|
double studentCount = subject.getUploadCount();
|
|
|
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());
|
|
|
// 随机数判断加入当前已经生成双评任务的比例加权
|
|
|
- needDouble = doubleCount < expectCount
|
|
|
- && ((studentCount - libraryCount + doubleCount) <= (expectCount - doubleCount) || Math
|
|
|
- .random() < group.getDoubleRate());
|
|
|
+ needDouble = doubleCount < expectCount && ((studentCount - libraryCount + doubleCount) <= (expectCount - doubleCount)
|
|
|
+ || Math.random() < group.getDoubleRate());
|
|
|
}
|
|
|
if (needDouble) {
|
|
|
library = new MarkLibrary();
|
|
@@ -942,7 +923,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 根据考生、学习中心、大题构造试评评卷任务
|
|
|
- *
|
|
|
+ *
|
|
|
* @param student
|
|
|
* @param campus
|
|
|
* @param group
|
|
@@ -966,7 +947,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
/**
|
|
|
* 领取正式评卷任务时,用来区分的唯一标识<br/>
|
|
|
* 多评时同一个考生的多份任务不能被同一位评卷员领取
|
|
|
- *
|
|
|
+ *
|
|
|
* @param library
|
|
|
* @return
|
|
|
*/
|
|
@@ -976,7 +957,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 领取试评评卷任务时,用来区分的唯一标识
|
|
|
- *
|
|
|
+ *
|
|
|
* @param library
|
|
|
* @return
|
|
|
*/
|
|
@@ -986,30 +967,24 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 重置评卷分组的连带操作
|
|
|
- *
|
|
|
+ *
|
|
|
* @param group
|
|
|
*/
|
|
|
private void resetGroup(MarkGroup group) {
|
|
|
if (group.getStatus() == MarkStatus.FORMAL) {
|
|
|
- trackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
- group.getNumber());
|
|
|
+ trackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
specialTagDao.deleteByExamAndSubjectAndGroup(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);
|
|
|
- markerDao.resetByExamIdAndSubjectCodeAndGroupNumber(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);
|
|
|
+ markerDao.resetByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
} else if (group.getStatus() == MarkStatus.TRIAL) {
|
|
|
- trialTrackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
- group.getNumber());
|
|
|
+ trialTrackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
trialTagDao.deleteByExamAndSubjectAndGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
- trialHistoryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
|
|
|
- group.getNumber());
|
|
|
+ trialHistoryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
}
|
|
|
updateLibraryCount(group);
|
|
|
groupDao.resetCount(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
@@ -1018,7 +993,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
/**
|
|
|
* 计算并更新指定评卷员的评卷质量指标
|
|
|
- *
|
|
|
+ *
|
|
|
* @param marker
|
|
|
*/
|
|
|
@Override
|
|
@@ -1028,11 +1003,12 @@ public class MarkServiceImpl implements MarkService {
|
|
|
int finishCount = 0;
|
|
|
int validCount = 0;
|
|
|
double sumScore = 0;
|
|
|
- double tempScore = 0;
|
|
|
+ double sumScore2 = 0;
|
|
|
double avgScore = 0;
|
|
|
double stdevScore = 0;
|
|
|
- int sumSpent = 0;
|
|
|
+ double sumSpent = 0;
|
|
|
double avgSpent = 0;
|
|
|
+ BigDecimal bd = BigDecimal.ZERO;
|
|
|
for (MarkLibrary library : list) {
|
|
|
finishCount++;
|
|
|
if (library.getStatus() == LibraryStatus.MARKED || library.getStatus() == LibraryStatus.INSPECTED) {
|
|
@@ -1042,16 +1018,13 @@ public class MarkServiceImpl implements MarkService {
|
|
|
int spent = library.getMarkerSpent() != null ? library.getMarkerSpent() : 0;
|
|
|
|
|
|
sumScore += score;
|
|
|
+ sumScore2 += Math.pow(score, 2);
|
|
|
sumSpent += spent;
|
|
|
if (finishCount > 0) {
|
|
|
avgScore = sumScore / finishCount;
|
|
|
avgSpent = sumSpent / finishCount;
|
|
|
// 递归法计算标准差
|
|
|
- if (finishCount - 1 != 0) {
|
|
|
- tempScore = tempScore + 1.0 * (finishCount - 1) / finishCount * (score - avgScore)
|
|
|
- * (score - avgScore);
|
|
|
- stdevScore = Math.sqrt(tempScore / (finishCount - 1));
|
|
|
- }
|
|
|
+ stdevScore = Math.sqrt(sumScore2 / finishCount - Math.pow(sumScore / finishCount, 2));
|
|
|
}
|
|
|
}
|
|
|
markerDao.updateQualityById(marker.getId(), finishCount, validCount, avgSpent / 1000, avgScore, stdevScore);
|