|
@@ -414,8 +414,7 @@ public class MarkServiceImpl implements MarkService {
|
|
if (library != null && library.getExamId().equals(group.getExamId())
|
|
if (library != null && library.getExamId().equals(group.getExamId())
|
|
&& library.getSubjectCode().equals(group.getSubjectCode())
|
|
&& library.getSubjectCode().equals(group.getSubjectCode())
|
|
&& library.getGroupNumber().equals(group.getNumber())
|
|
&& library.getGroupNumber().equals(group.getNumber())
|
|
- && result.getTotalScore() <= group.getTotalScore()
|
|
|
|
- && StringUtils.isNotBlank(result.getScoreList())) {
|
|
|
|
|
|
+ && result.getTotalScore() <= group.getTotalScore() && StringUtils.isNotBlank(result.getScoreList())) {
|
|
if (submitLibrary(library, marker, group, result)) {
|
|
if (submitLibrary(library, marker, group, result)) {
|
|
updateMarkedCount(group);
|
|
updateMarkedCount(group);
|
|
releaseLibrary(library, marker);
|
|
releaseLibrary(library, marker);
|
|
@@ -427,8 +426,7 @@ public class MarkServiceImpl implements MarkService {
|
|
if (library != null && library.getExamId().equals(group.getExamId())
|
|
if (library != null && library.getExamId().equals(group.getExamId())
|
|
&& library.getSubjectCode().equals(group.getSubjectCode())
|
|
&& library.getSubjectCode().equals(group.getSubjectCode())
|
|
&& library.getGroupNumber().equals(group.getNumber())
|
|
&& library.getGroupNumber().equals(group.getNumber())
|
|
- && result.getTotalScore() <= group.getTotalScore()
|
|
|
|
- && StringUtils.isNotBlank(result.getScoreList())) {
|
|
|
|
|
|
+ && result.getTotalScore() <= group.getTotalScore() && StringUtils.isNotBlank(result.getScoreList())) {
|
|
TrialHistory history = new TrialHistory();
|
|
TrialHistory history = new TrialHistory();
|
|
history.setExamId(library.getExamId());
|
|
history.setExamId(library.getExamId());
|
|
history.setSubjectCode(library.getSubjectCode());
|
|
history.setSubjectCode(library.getSubjectCode());
|
|
@@ -472,7 +470,8 @@ 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;
|
|
}
|
|
}
|
|
// 是否多评情况下已处理过该考生评卷任务
|
|
// 是否多评情况下已处理过该考生评卷任务
|
|
@@ -482,16 +481,16 @@ public class MarkServiceImpl implements MarkService {
|
|
}
|
|
}
|
|
// 尝试提交评卷结果
|
|
// 尝试提交评卷结果
|
|
Date now = new Date();
|
|
Date now = new Date();
|
|
- if (libraryDao.updateMarkerResult(library.getId(), LibraryStatus.MARKED, marker.getId(), result.getTotalScore(),
|
|
|
|
- result.getScoreList(), now, result.getSpent(), null, LibraryStatus.WAITING,
|
|
|
|
- LibraryStatus.MARKED,LibraryStatus.INSPECTED) == 0) {
|
|
|
|
|
|
+ if (libraryDao.updateMarkerResult(library.getId(), LibraryStatus.MARKED, marker.getId(),
|
|
|
|
+ result.getTotalScore(), result.getScoreList(), now, result.getSpent(), null, LibraryStatus.WAITING,
|
|
|
|
+ LibraryStatus.MARKED, LibraryStatus.INSPECTED) == 0) {
|
|
// 条件不符更新失败,直接返回
|
|
// 条件不符更新失败,直接返回
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
// 保存阅卷轨迹
|
|
// 保存阅卷轨迹
|
|
if (result.getTrackList() != null) {
|
|
if (result.getTrackList() != null) {
|
|
trackDao.deleteByLibraryId(library.getId());
|
|
trackDao.deleteByLibraryId(library.getId());
|
|
- for(MarkTrack t :result.getTrackList(library, marker)){
|
|
|
|
|
|
+ for (MarkTrack t : result.getTrackList(library, marker)) {
|
|
trackDao.saveAndFlush(t);
|
|
trackDao.saveAndFlush(t);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -511,19 +510,18 @@ public class MarkServiceImpl implements MarkService {
|
|
// 本评卷任务或组长已打分,则跳过该任务
|
|
// 本评卷任务或组长已打分,则跳过该任务
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
- //分差超过阀值,
|
|
|
|
|
|
+ // 分差超过阀值,
|
|
if (Math.abs(other.getMarkerScore() - result.getTotalScore()) > group.getArbitrateThreshold()) {
|
|
if (Math.abs(other.getMarkerScore() - result.getTotalScore()) > group.getArbitrateThreshold()) {
|
|
- //开启三评
|
|
|
|
- if(group.getThirdPolicy().equals(ThirdPolicy.LOW_DIFF_HIGH_AVG)){
|
|
|
|
- if(libraryDao.countByStudentIdAndGroupNumber(library.getStudentId(),
|
|
|
|
- library.getGroupNumber())==2){
|
|
|
|
- buildThirdLibrary(library,group);
|
|
|
|
- }else{
|
|
|
|
- //两两比较,触发仲裁
|
|
|
|
- history = getArbitrate(list,group.getArbitrateThreshold(), now);
|
|
|
|
|
|
+ // 开启三评
|
|
|
|
+ if (group.getThirdPolicy().equals(ThirdPolicy.LOW_DIFF_HIGH_AVG)) {
|
|
|
|
+ if (libraryDao.countByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber()) == 2) {
|
|
|
|
+ buildThirdLibrary(library, group);
|
|
|
|
+ } else {
|
|
|
|
+ // 两两比较,触发仲裁
|
|
|
|
+ history = getArbitrate(list, group.getArbitrateThreshold(), now);
|
|
}
|
|
}
|
|
- }else{
|
|
|
|
- //未开启三评,触发仲裁
|
|
|
|
|
|
+ } else {
|
|
|
|
+ // 未开启三评,触发仲裁
|
|
history = getArbitrate(library, now);
|
|
history = getArbitrate(library, now);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -540,26 +538,25 @@ public class MarkServiceImpl implements MarkService {
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
- private ArbitrateHistory getArbitrate(List<MarkLibrary> list,Double arbitrateThreshold, Date now) {
|
|
|
|
|
|
+ private ArbitrateHistory getArbitrate(List<MarkLibrary> list, Double arbitrateThreshold, Date now) {
|
|
int count = 0;
|
|
int count = 0;
|
|
for (int i = 0; i < list.size(); i++) {
|
|
for (int i = 0; i < list.size(); i++) {
|
|
- int next = i +1;
|
|
|
|
- if(next == list.size()){
|
|
|
|
|
|
+ int next = i + 1;
|
|
|
|
+ if (next == list.size()) {
|
|
next = 0;
|
|
next = 0;
|
|
}
|
|
}
|
|
if (Math.abs(list.get(i).getMarkerScore() - list.get(next).getMarkerScore()) > arbitrateThreshold) {
|
|
if (Math.abs(list.get(i).getMarkerScore() - list.get(next).getMarkerScore()) > arbitrateThreshold) {
|
|
- count ++;
|
|
|
|
|
|
+ count++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- if(count == list.size()){
|
|
|
|
- return getArbitrate(list.get(0),now);
|
|
|
|
|
|
+ if (count == list.size()) {
|
|
|
|
+ return getArbitrate(list.get(0), now);
|
|
}
|
|
}
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
private ArbitrateHistory getArbitrate(MarkLibrary library, Date now) {
|
|
private ArbitrateHistory getArbitrate(MarkLibrary library, Date now) {
|
|
- ArbitrateHistory history;
|
|
|
|
- history = new ArbitrateHistory();
|
|
|
|
|
|
+ ArbitrateHistory history = new ArbitrateHistory();
|
|
history.setExamId(library.getExamId());
|
|
history.setExamId(library.getExamId());
|
|
history.setSubjectCode(library.getSubjectCode());
|
|
history.setSubjectCode(library.getSubjectCode());
|
|
history.setGroupNumber(library.getGroupNumber());
|
|
history.setGroupNumber(library.getGroupNumber());
|
|
@@ -593,7 +590,7 @@ public class MarkServiceImpl implements MarkService {
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
public boolean backLibrary(MarkLibrary library) {
|
|
public boolean backLibrary(MarkLibrary library) {
|
|
- if (libraryDao.resetById(library.getId(), LibraryStatus.WAITING, LibraryStatus.MARKED,LibraryStatus.INSPECTED) > 0) {
|
|
|
|
|
|
+ if (libraryDao.resetById(library.getId(), LibraryStatus.WAITING, LibraryStatus.MARKED, LibraryStatus.INSPECTED) > 0) {
|
|
trackDao.deleteByLibraryId(library.getId());
|
|
trackDao.deleteByLibraryId(library.getId());
|
|
specialTagDao.deleteByLibraryId(library.getId());
|
|
specialTagDao.deleteByLibraryId(library.getId());
|
|
updateMarkedCount(library.getExamId(), library.getSubjectCode(), library.getGroupNumber());
|
|
updateMarkedCount(library.getExamId(), library.getSubjectCode(), library.getGroupNumber());
|
|
@@ -685,29 +682,35 @@ public class MarkServiceImpl implements MarkService {
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
for (MarkLibrary library : list) {
|
|
for (MarkLibrary library : list) {
|
|
- if (library.getStatus() != LibraryStatus.MARKED && library.getStatus() != LibraryStatus.INSPECTED && library.getStatus() != LibraryStatus.ARBITRATED) {
|
|
|
|
|
|
+ if (library.getStatus() != LibraryStatus.MARKED && library.getStatus() != LibraryStatus.INSPECTED
|
|
|
|
+ && library.getStatus() != LibraryStatus.ARBITRATED) {
|
|
// 有非完成状态的评卷任务,直接返回
|
|
// 有非完成状态的评卷任务,直接返回
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// 开启三评
|
|
// 开启三评
|
|
- if(ThirdPolicy.LOW_DIFF_HIGH_AVG.equals(group.getThirdPolicy()) && list.size()==3){
|
|
|
|
-// Collections.sort(list, Comparator.comparing(MarkLibrary::getMarkerScore));
|
|
|
|
|
|
+ if (ThirdPolicy.LOW_DIFF_HIGH_AVG.equals(group.getThirdPolicy()) && list.size() == 3) {
|
|
|
|
+ // Collections.sort(list,
|
|
|
|
+ // Comparator.comparing(MarkLibrary::getMarkerScore));
|
|
Collections.sort(list, new Comparator<MarkLibrary>() {
|
|
Collections.sort(list, new Comparator<MarkLibrary>() {
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public int compare(MarkLibrary o1, MarkLibrary o2) {
|
|
public int compare(MarkLibrary o1, MarkLibrary o2) {
|
|
- if (o1.getMarkerScore()-o2.getMarkerScore() > 0) {
|
|
|
|
|
|
+ if (o1.getMarkerScore() - o2.getMarkerScore() > 0) {
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
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();
|
|
|
|
- if((score3-score2)>=(score2-score1)){
|
|
|
|
|
|
+ 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);
|
|
list.remove(0);
|
|
- }else{
|
|
|
|
|
|
+ } else {
|
|
list.remove(2);
|
|
list.remove(2);
|
|
}
|
|
}
|
|
policy = ScorePolicy.AVG;
|
|
policy = ScorePolicy.AVG;
|
|
@@ -783,9 +786,9 @@ public class MarkServiceImpl implements MarkService {
|
|
@Transactional
|
|
@Transactional
|
|
public void updateMarkedCount(MarkGroup group) {
|
|
public void updateMarkedCount(MarkGroup group) {
|
|
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.countByExamIdAndSubjectCodeAndGroupNumberAndStatus(group.getExamId(),
|
|
|
|
- group.getSubjectCode(), group.getNumber(), LibraryStatus.MARKED, LibraryStatus.ARBITRATED,LibraryStatus.INSPECTED));
|
|
|
|
|
|
+ groupDao.updateMarkedCount(group.getExamId(), group.getSubjectCode(), group.getNumber(), (int) libraryDao
|
|
|
|
+ .countByExamIdAndSubjectCodeAndGroupNumberAndStatus(group.getExamId(), group.getSubjectCode(),
|
|
|
|
+ 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()));
|
|
@@ -866,8 +869,8 @@ public class MarkServiceImpl implements MarkService {
|
|
int expectCount = (int) (studentCount * group.getDoubleRate());
|
|
int expectCount = (int) (studentCount * group.getDoubleRate());
|
|
// 随机数判断加入当前已经生成双评任务的比例加权
|
|
// 随机数判断加入当前已经生成双评任务的比例加权
|
|
needDouble = doubleCount < expectCount
|
|
needDouble = doubleCount < expectCount
|
|
- && ((studentCount - libraryCount + doubleCount) <= (expectCount - doubleCount)
|
|
|
|
- || Math.random() < group.getDoubleRate());
|
|
|
|
|
|
+ && ((studentCount - libraryCount + doubleCount) <= (expectCount - doubleCount) || Math
|
|
|
|
+ .random() < group.getDoubleRate());
|
|
}
|
|
}
|
|
if (needDouble) {
|
|
if (needDouble) {
|
|
library = new MarkLibrary();
|
|
library = new MarkLibrary();
|
|
@@ -977,7 +980,7 @@ public class MarkServiceImpl implements MarkService {
|
|
double avgSpent = 0;
|
|
double avgSpent = 0;
|
|
for (MarkLibrary library : list) {
|
|
for (MarkLibrary library : list) {
|
|
finishCount++;
|
|
finishCount++;
|
|
- if (library.getStatus() == LibraryStatus.MARKED||library.getStatus() == LibraryStatus.INSPECTED) {
|
|
|
|
|
|
+ if (library.getStatus() == LibraryStatus.MARKED || library.getStatus() == LibraryStatus.INSPECTED) {
|
|
validCount++;
|
|
validCount++;
|
|
}
|
|
}
|
|
double score = library.getMarkerScore() != null ? library.getMarkerScore() : 0;
|
|
double score = library.getMarkerScore() != null ? library.getMarkerScore() : 0;
|
|
@@ -990,8 +993,8 @@ public class MarkServiceImpl implements MarkService {
|
|
avgSpent = sumSpent / finishCount;
|
|
avgSpent = sumSpent / finishCount;
|
|
// 递归法计算标准差
|
|
// 递归法计算标准差
|
|
if (finishCount - 1 != 0) {
|
|
if (finishCount - 1 != 0) {
|
|
- tempScore = tempScore
|
|
|
|
- + 1.0 * (finishCount - 1) / finishCount * (score - avgScore) * (score - avgScore);
|
|
|
|
|
|
+ tempScore = tempScore + 1.0 * (finishCount - 1) / finishCount * (score - avgScore)
|
|
|
|
+ * (score - avgScore);
|
|
stdevScore = Math.sqrt(tempScore / (finishCount - 1));
|
|
stdevScore = Math.sqrt(tempScore / (finishCount - 1));
|
|
}
|
|
}
|
|
}
|
|
}
|