|
@@ -578,7 +578,7 @@ 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())
|
|
if (library != null && library.getExamId().equals(group.getExamId())
|
|
&& library.getSubjectCode().equals(group.getSubjectCode())
|
|
&& library.getSubjectCode().equals(group.getSubjectCode())
|
|
@@ -590,22 +590,15 @@ public class MarkServiceImpl implements MarkService {
|
|
}
|
|
}
|
|
library.setMarkerId(marker.getId());
|
|
library.setMarkerId(marker.getId());
|
|
library.setMarkerTime(now);
|
|
library.setMarkerTime(now);
|
|
- // 未选做
|
|
|
|
- if (result.isUnselective() && group.isSelective()) {
|
|
|
|
- result.setMarkerScore(UN_SELECTIVE_SCORE);
|
|
|
|
- result.setScoreList(new Double[0]);
|
|
|
|
- trialTrackDao.deleteByLibraryIdAndMarkerId(library.getId(), library.getMarkerId());
|
|
|
|
- trialTagDao.deleteByLibraryIdAndMarkerId(library.getId(), library.getMarkerId());
|
|
|
|
- }
|
|
|
|
library.setMarkerScore(result.getMarkerScore());
|
|
library.setMarkerScore(result.getMarkerScore());
|
|
library.setMarkerScoreList(result.getScoreList());
|
|
library.setMarkerScoreList(result.getScoreList());
|
|
- if (result.getTrackList() != null && !result.isUnselective()) {
|
|
|
|
- trialTrackDao.deleteByLibraryIdAndMarkerId(library.getId(), library.getMarkerId());
|
|
|
|
|
|
+ trialTrackDao.deleteByLibraryIdAndMarkerId(library.getId(), library.getMarkerId());
|
|
|
|
+ if (result.getTrackList() != null) {
|
|
trialTrackDao.save(result.getTrackList(library));
|
|
trialTrackDao.save(result.getTrackList(library));
|
|
}
|
|
}
|
|
library = trialLibraryDao.save(library);
|
|
library = trialLibraryDao.save(library);
|
|
- if (result.getSpecialTagList() != null && !result.isUnselective()) {
|
|
|
|
- trialTagDao.deleteByLibraryIdAndMarkerId(library.getId(), library.getMarkerId());
|
|
|
|
|
|
+ trialTagDao.deleteByLibraryIdAndMarkerId(library.getId(), library.getMarkerId());
|
|
|
|
+ if (result.getSpecialTagList() != null) {
|
|
trialTagDao.save(result.getTagList(library));
|
|
trialTagDao.save(result.getTagList(library));
|
|
}
|
|
}
|
|
if (!TrialMode.EXCLUSIVE.equals(systemCache.getTrialMode())) {
|
|
if (!TrialMode.EXCLUSIVE.equals(systemCache.getTrialMode())) {
|
|
@@ -667,12 +660,12 @@ public class MarkServiceImpl implements MarkService {
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
// 未选做
|
|
// 未选做
|
|
- if (result.isUnselective() && group.isSelective()) {
|
|
|
|
- result.setMarkerScore(UN_SELECTIVE_SCORE);
|
|
|
|
- result.setScoreList(new Double[0]);
|
|
|
|
- trackDao.deleteByLibraryId(library.getId());
|
|
|
|
- specialTagDao.deleteByLibraryId(library.getId());
|
|
|
|
- }
|
|
|
|
|
|
+ // if (result.isUnselective() && group.isSelective()) {
|
|
|
|
+ // result.setMarkerScore(UN_SELECTIVE_SCORE);
|
|
|
|
+ // result.setScoreList(new Double[0]);
|
|
|
|
+ // trackDao.deleteByLibraryId(library.getId());
|
|
|
|
+ // specialTagDao.deleteByLibraryId(library.getId());
|
|
|
|
+ // }
|
|
// 尝试提交评卷结果
|
|
// 尝试提交评卷结果
|
|
Date now = new Date();
|
|
Date now = new Date();
|
|
if (libraryDao.updateMarkerResult(library.getId(), LibraryStatus.MARKED, marker.getId(),
|
|
if (libraryDao.updateMarkerResult(library.getId(), LibraryStatus.MARKED, marker.getId(),
|
|
@@ -685,10 +678,9 @@ public class MarkServiceImpl implements MarkService {
|
|
inspectedService.cancelByStudent(library.getStudentId());
|
|
inspectedService.cancelByStudent(library.getStudentId());
|
|
// 保存阅卷轨迹
|
|
// 保存阅卷轨迹
|
|
int unansweredCount = 0;
|
|
int unansweredCount = 0;
|
|
- if (result.getTrackList() != null && !result.isUnselective()) {
|
|
|
|
- // trackDao.deleteByLibraryId(library.getId());
|
|
|
|
- List<MarkTrack> oldTracks = trackDao.findByPkLibraryId(library.getId());
|
|
|
|
- trackDao.delete(oldTracks);
|
|
|
|
|
|
+ List<MarkTrack> oldTracks = trackDao.findByPkLibraryId(library.getId());
|
|
|
|
+ trackDao.delete(oldTracks);
|
|
|
|
+ if (result.getTrackList() != null) {
|
|
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);
|
|
@@ -699,8 +691,8 @@ public class MarkServiceImpl implements MarkService {
|
|
libraryDao.updateUnansweredCount(library.getId(), unansweredCount);
|
|
libraryDao.updateUnansweredCount(library.getId(), unansweredCount);
|
|
}
|
|
}
|
|
// 保存特殊标记
|
|
// 保存特殊标记
|
|
- if (result.getSpecialTagList() != null && !result.isUnselective()) {
|
|
|
|
- specialTagDao.deleteByLibraryId(library.getId());
|
|
|
|
|
|
+ specialTagDao.deleteByLibraryId(library.getId());
|
|
|
|
+ if (result.getSpecialTagList() != null) {
|
|
specialTagDao.save(result.getSpecialTagList(library, marker));
|
|
specialTagDao.save(result.getSpecialTagList(library, marker));
|
|
}
|
|
}
|
|
// 判断多评模式下是否需要仲裁
|
|
// 判断多评模式下是否需要仲裁
|
|
@@ -774,7 +766,9 @@ public class MarkServiceImpl implements MarkService {
|
|
if (questionList.size() == list1.size() && list1.size() == list2.length) {
|
|
if (questionList.size() == list1.size() && list1.size() == list2.length) {
|
|
for (int i = 0; i < questionList.size(); i++) {
|
|
for (int i = 0; i < questionList.size(); i++) {
|
|
Double arbitrateThreshold = questionList.get(i).getArbitrateThreshold();
|
|
Double arbitrateThreshold = questionList.get(i).getArbitrateThreshold();
|
|
- if (Math.abs(list1.get(i).getScore() - list2[i]) > arbitrateThreshold) {
|
|
|
|
|
|
+ if ((list1.get(i).getScore() == UN_SELECTIVE_SCORE && list2[i] != UN_SELECTIVE_SCORE)
|
|
|
|
+ || (list1.get(i).getScore() != UN_SELECTIVE_SCORE && list2[i] == UN_SELECTIVE_SCORE)
|
|
|
|
+ || (Math.abs(list1.get(i).getScore() - list2[i]) > arbitrateThreshold)) {
|
|
if (arbitrateIndex == null) {
|
|
if (arbitrateIndex == null) {
|
|
arbitrateIndex = new ArrayList<>();
|
|
arbitrateIndex = new ArrayList<>();
|
|
}
|
|
}
|
|
@@ -939,30 +933,27 @@ public class MarkServiceImpl implements MarkService {
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 管理员/组长处理仲裁卷
|
|
|
|
- *
|
|
|
|
- * - 仲裁卷
|
|
|
|
|
|
+ * 管理员/组长处理仲裁卷 - 仲裁卷
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
public void processArbitrate(MarkResult result, Integer userId) {
|
|
public void processArbitrate(MarkResult result, Integer userId) {
|
|
ArbitrateHistory history = arbitrateDao.findOne(result.getLibraryId());
|
|
ArbitrateHistory history = arbitrateDao.findOne(result.getLibraryId());
|
|
- MarkGroup group = groupDao.findOne(history.getExamId(), history.getSubjectCode(), history.getGroupNumber());
|
|
|
|
List<Double> markerScoreList = new ArrayList<>(Arrays.asList(result.getMarkerScoreList()));
|
|
List<Double> markerScoreList = new ArrayList<>(Arrays.asList(result.getMarkerScoreList()));
|
|
List<Integer> questionIndexList = history.getQuestionIndexList();
|
|
List<Integer> questionIndexList = history.getQuestionIndexList();
|
|
if (!questionIndexList.isEmpty() && markerScoreList.size() != questionIndexList.size()) {
|
|
if (!questionIndexList.isEmpty() && markerScoreList.size() != questionIndexList.size()) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
history.setUserId(userId);
|
|
history.setUserId(userId);
|
|
- history.setTotalScore(result.isUnselective() ? UN_SELECTIVE_SCORE : result.getMarkerScore());
|
|
|
|
- history.setScoreList(result.isUnselective() ? null : result.getScoreList());
|
|
|
|
|
|
+ history.setTotalScore(result.getMarkerScore());
|
|
|
|
+ history.setScoreList(result.getScoreList());
|
|
history.setStatus(HistoryStatus.MARKED);
|
|
history.setStatus(HistoryStatus.MARKED);
|
|
history.setUpdateTime(new Date());
|
|
history.setUpdateTime(new Date());
|
|
if (arbitrateDao.exists(history.getId())) {
|
|
if (arbitrateDao.exists(history.getId())) {
|
|
// 保存阅卷轨迹
|
|
// 保存阅卷轨迹
|
|
int unansweredCount = 0;
|
|
int unansweredCount = 0;
|
|
- if (result.getTrackList() != null && !result.isUnselective()) {
|
|
|
|
- headerTrackDao.deleteByPkStudentIdAndGroupNumber(history.getStudentId(), history.getGroupNumber());
|
|
|
|
|
|
+ headerTrackDao.deleteByPkStudentIdAndGroupNumber(history.getStudentId(), history.getGroupNumber());
|
|
|
|
+ if (result.getTrackList() != null) {
|
|
List<HeaderTrack> tracks = result.getTrackList(history);
|
|
List<HeaderTrack> tracks = result.getTrackList(history);
|
|
for (HeaderTrack t : tracks) {
|
|
for (HeaderTrack t : tracks) {
|
|
headerTrackDao.saveAndFlush(t);
|
|
headerTrackDao.saveAndFlush(t);
|
|
@@ -973,8 +964,8 @@ public class MarkServiceImpl implements MarkService {
|
|
history.setUnansweredCount(unansweredCount);
|
|
history.setUnansweredCount(unansweredCount);
|
|
}
|
|
}
|
|
// 保存特殊标记
|
|
// 保存特殊标记
|
|
- if (result.getSpecialTagList() != null && !result.isUnselective()) {
|
|
|
|
- headerTagDao.deleteByStudentIdAndGroupNumber(history.getStudentId(), history.getGroupNumber());
|
|
|
|
|
|
+ headerTagDao.deleteByStudentIdAndGroupNumber(history.getStudentId(), history.getGroupNumber());
|
|
|
|
+ if (result.getSpecialTagList() != null) {
|
|
headerTagDao.save(result.getHeaderTagList(history));
|
|
headerTagDao.save(result.getHeaderTagList(history));
|
|
}
|
|
}
|
|
List<ExamQuestion> questionList = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
|
|
List<ExamQuestion> questionList = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
|
|
@@ -1086,44 +1077,31 @@ public class MarkServiceImpl implements MarkService {
|
|
boolean notSelective = false;
|
|
boolean notSelective = false;
|
|
Map<Integer, List<SelectiveGroup>> indexMap = selectiveGroupService.findGroupByExamIdAndSubjectCode(examId,
|
|
Map<Integer, List<SelectiveGroup>> indexMap = selectiveGroupService.findGroupByExamIdAndSubjectCode(examId,
|
|
subjectCode);
|
|
subjectCode);
|
|
- for (Integer index : indexMap.keySet()) {
|
|
|
|
|
|
+ for (List<SelectiveGroup> indexGroup : indexMap.values()) {
|
|
// 循环选做题组
|
|
// 循环选做题组
|
|
- List<SelectiveGroup> indexGroup = indexMap.get(index);
|
|
|
|
- Integer selectiveCount = 0;
|
|
|
|
- ScorePolicy policy = null;
|
|
|
|
- Map<Integer, List<SelectiveGroup>> partMap = new HashMap<Integer, List<SelectiveGroup>>();
|
|
|
|
- for (SelectiveGroup selectiveGroup : indexGroup) {
|
|
|
|
- List<SelectiveGroup> partGroup = partMap.get(selectiveGroup.getSelectivePart());
|
|
|
|
- if (partGroup == null) {
|
|
|
|
- partGroup = new ArrayList<SelectiveGroup>();
|
|
|
|
- }
|
|
|
|
- partGroup.add(selectiveGroup);
|
|
|
|
- partMap.put(selectiveGroup.getSelectivePart(), partGroup);
|
|
|
|
- if (selectiveCount == 0) {
|
|
|
|
- selectiveCount = selectiveGroup.getSelectiveCount();
|
|
|
|
- }
|
|
|
|
- if (policy == null) {
|
|
|
|
- policy = selectiveGroup.getScorePolicy();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ Integer selectiveCount = indexGroup.get(0).getSelectiveCount();
|
|
|
|
+ ScorePolicy policy = indexGroup.get(0).getScorePolicy();
|
|
|
|
+ Map<Integer, List<SelectiveGroup>> partMap = indexGroup.stream()
|
|
|
|
+ .collect(Collectors.groupingBy(SelectiveGroup::getSelectivePart));
|
|
List<Double> partScoreList = new ArrayList<Double>();
|
|
List<Double> partScoreList = new ArrayList<Double>();
|
|
Map<Integer, Double> partScoreMap = new HashMap<Integer, Double>();
|
|
Map<Integer, Double> partScoreMap = new HashMap<Integer, Double>();
|
|
|
|
+
|
|
// 循环选做分区
|
|
// 循环选做分区
|
|
for (Integer part : partMap.keySet()) {
|
|
for (Integer part : partMap.keySet()) {
|
|
List<SelectiveGroup> partList = partMap.get(part);
|
|
List<SelectiveGroup> partList = partMap.get(part);
|
|
BigDecimal partScore = BigDecimal.ZERO;
|
|
BigDecimal partScore = BigDecimal.ZERO;
|
|
- boolean unselectivePart = false;
|
|
|
|
|
|
+ boolean unSelectivePart = false;
|
|
for (SelectiveGroup selectiveGroup : partList) {
|
|
for (SelectiveGroup selectiveGroup : partList) {
|
|
double mainScore = scoreMap.get(selectiveGroup.getMainNumber());
|
|
double mainScore = scoreMap.get(selectiveGroup.getMainNumber());
|
|
scoreMap.remove(selectiveGroup.getMainNumber());
|
|
scoreMap.remove(selectiveGroup.getMainNumber());
|
|
- if (mainScore == UN_SELECTIVE_SCORE || unselectivePart) {
|
|
|
|
- unselectivePart = true;
|
|
|
|
|
|
+ if (mainScore == UN_SELECTIVE_SCORE || unSelectivePart) {
|
|
|
|
+ unSelectivePart = true;
|
|
} else {
|
|
} else {
|
|
partScore = partScore.add(BigDecimal.valueOf(mainScore));
|
|
partScore = partScore.add(BigDecimal.valueOf(mainScore));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// 当前part未选做
|
|
// 当前part未选做
|
|
- if (unselectivePart) {
|
|
|
|
|
|
+ if (unSelectivePart) {
|
|
for (SelectiveGroup selectiveGroup : partList) {
|
|
for (SelectiveGroup selectiveGroup : partList) {
|
|
List<SubjectiveScore> mainScoreList = mainScoreMap.get(selectiveGroup.getMainNumber());
|
|
List<SubjectiveScore> mainScoreList = mainScoreMap.get(selectiveGroup.getMainNumber());
|
|
for (SubjectiveScore ss : mainScoreList) {
|
|
for (SubjectiveScore ss : mainScoreList) {
|
|
@@ -1138,6 +1116,8 @@ public class MarkServiceImpl implements MarkService {
|
|
Collections.sort(partScoreList);
|
|
Collections.sort(partScoreList);
|
|
if (policy == null || ScorePolicy.MAX.equals(policy)) {
|
|
if (policy == null || ScorePolicy.MAX.equals(policy)) {
|
|
Collections.reverse(partScoreList);
|
|
Collections.reverse(partScoreList);
|
|
|
|
+ } else if (ScorePolicy.MIN_WITHOUT_ZERO.equals(policy)) {
|
|
|
|
+ partScoreList = partScoreList.stream().filter(s -> s.doubleValue() > 0).collect(Collectors.toList());
|
|
}
|
|
}
|
|
// 计算一个选做题分组得分
|
|
// 计算一个选做题分组得分
|
|
for (int i = 0; i < partScoreList.size(); i++) {
|
|
for (int i = 0; i < partScoreList.size(); i++) {
|
|
@@ -1175,8 +1155,7 @@ public class MarkServiceImpl implements MarkService {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// 统一更新得分详情
|
|
// 统一更新得分详情
|
|
- for (Integer mainNumber : mainScoreMap.keySet()) {
|
|
|
|
- List<SubjectiveScore> mainScoreList = mainScoreMap.get(mainNumber);
|
|
|
|
|
|
+ for (List<SubjectiveScore> mainScoreList : mainScoreMap.values()) {
|
|
for (SubjectiveScore ss : mainScoreList) {
|
|
for (SubjectiveScore ss : mainScoreList) {
|
|
scoreDao.saveAndFlush(ss);
|
|
scoreDao.saveAndFlush(ss);
|
|
}
|
|
}
|
|
@@ -1702,15 +1681,14 @@ public class MarkServiceImpl implements MarkService {
|
|
ss.setGroupScore(score);
|
|
ss.setGroupScore(score);
|
|
ss.setMainNumber(question.getMainNumber());
|
|
ss.setMainNumber(question.getMainNumber());
|
|
ss.setSubNumber(question.getSubNumber());
|
|
ss.setSubNumber(question.getSubNumber());
|
|
- if (score != UN_SELECTIVE_SCORE) {
|
|
|
|
- ScoreItem item = scoreList.get(i);
|
|
|
|
- ss.setScore(item.getScore());
|
|
|
|
- ss.setMainScore(0.0);
|
|
|
|
- ss.setUncalculate(false);
|
|
|
|
- } else {
|
|
|
|
- ss.setScore(score);
|
|
|
|
- ss.setMainScore(score);
|
|
|
|
|
|
+
|
|
|
|
+ ScoreItem item = scoreList.get(i);
|
|
|
|
+ ss.setScore(item.getScore());
|
|
|
|
+ ss.setMainScore(0.0);
|
|
|
|
+ if (item.getScore() == UN_SELECTIVE_SCORE) {
|
|
ss.setUncalculate(true);
|
|
ss.setUncalculate(true);
|
|
|
|
+ } else {
|
|
|
|
+ ss.setUncalculate(false);
|
|
}
|
|
}
|
|
if (group.getArbitrateThreshold() != null && group.getArbitrateThreshold() > 0) {
|
|
if (group.getArbitrateThreshold() != null && group.getArbitrateThreshold() > 0) {
|
|
ss.setUnansweredCount(headerTrackDao.countByStudentIdAndQuestionNumberAndUnanswered(studentId,
|
|
ss.setUnansweredCount(headerTrackDao.countByStudentIdAndQuestionNumberAndUnanswered(studentId,
|
|
@@ -1881,8 +1859,8 @@ public class MarkServiceImpl implements MarkService {
|
|
}
|
|
}
|
|
int examId = list.get(0).getExamId();
|
|
int examId = list.get(0).getExamId();
|
|
String subjectCode = list.get(0).getSubjectCode();
|
|
String subjectCode = list.get(0).getSubjectCode();
|
|
- Boolean containObjective = false;
|
|
|
|
- Boolean containSubjective = false;
|
|
|
|
|
|
+ boolean containObjective = false;
|
|
|
|
+ boolean containSubjective = false;
|
|
for (ExamQuestion question : list) {
|
|
for (ExamQuestion question : list) {
|
|
SelectiveGroup selectiveGroup = selectiveGroupService.findOne(question.getExamId(),
|
|
SelectiveGroup selectiveGroup = selectiveGroupService.findOne(question.getExamId(),
|
|
question.getSubjectCode(), question.getMainNumber());
|
|
question.getSubjectCode(), question.getMainNumber());
|