|
@@ -25,6 +25,7 @@ import com.qmth.teachcloud.mark.enums.ScorePolicy;
|
|
|
import com.qmth.teachcloud.mark.lock.LockService;
|
|
|
import com.qmth.teachcloud.mark.params.MarkHeaderGroupResult;
|
|
|
import com.qmth.teachcloud.mark.params.MarkResult;
|
|
|
+import com.qmth.teachcloud.mark.params.MarkScoreList;
|
|
|
import com.qmth.teachcloud.mark.service.*;
|
|
|
import com.qmth.teachcloud.mark.utils.BigDecimalUtils;
|
|
|
import com.qmth.teachcloud.mark.utils.TaskLock;
|
|
@@ -41,6 +42,7 @@ import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
public class MarkServiceImpl implements MarkService {
|
|
@@ -366,7 +368,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
updateStudentGroupScore(studentId, group.getExamId(), group.getPaperNumber(), group, group.getMarkScore(),
|
|
|
group.getMarkScoreDetail());
|
|
|
// 未分组的题目
|
|
|
- long unGroupQuestionCount = markQuestionService.countQuestionByExamIdAndPaperNumberAndGroupNumberIsNull(
|
|
|
+ long unGroupQuestionCount = markQuestionService.countByExamIdAndPaperNumberAndObjectiveAndGroupNumberIsNull(
|
|
|
group.getExamId(), group.getPaperNumber(), false);
|
|
|
long groupCount = CollectionUtils
|
|
|
.size(markGroupService.listGroupByExamIdAndPaperNumber(group.getExamId(), group.getPaperNumber()));
|
|
@@ -837,17 +839,16 @@ public class MarkServiceImpl implements MarkService {
|
|
|
markGroup.getPaperNumber(), markGroup.getNumber());
|
|
|
markGroupService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(),
|
|
|
markGroup.getNumber());
|
|
|
+ // 更新MarkPaper中groupStatus
|
|
|
+ updateMarkGroupStatus(markGroup.getExamId(), markGroup.getPaperNumber());
|
|
|
}
|
|
|
|
|
|
- // 更新MarkPaper中groupStatus
|
|
|
- markPaperService.updateGroupStatusByExamIdAndPaperNumber(false, markGroup.getExamId(),
|
|
|
- markGroup.getPaperNumber());
|
|
|
// 未分组的题目
|
|
|
long unGroupQuestionCount = markQuestionService.countByExamIdAndPaperNumberAndObjectiveAndGroupNumberIsNull(
|
|
|
markGroup.getExamId(), markGroup.getPaperNumber(), false);
|
|
|
+
|
|
|
// 考生整体状态与总分更新
|
|
|
- long groupCount = markGroupService.countByExamIdAndPaperNumber(markGroup.getExamId(),
|
|
|
- markGroup.getPaperNumber());
|
|
|
+ long groupCount = markGroupService.countByExamIdAndPaperNumber(markGroup.getExamId(), markGroup.getPaperNumber());
|
|
|
if (groupCount == 0 || unGroupQuestionCount > 0) {
|
|
|
markStudentService.updateSubjectiveStatusAndScore(markGroup.getExamId(), markGroup.getPaperNumber(),
|
|
|
SubjectiveStatus.UNMARK, 0D, null);
|
|
@@ -899,8 +900,11 @@ public class MarkServiceImpl implements MarkService {
|
|
|
lockService.watch(LockType.GROUP, markStudent.getExamId(), markStudent.getPaperNumber(), groupResult.getGroupNumber());
|
|
|
Long currentTime = System.currentTimeMillis();
|
|
|
if (groupResult.getTrackList() != null) {
|
|
|
- markHeaderTrackService.deleteByExamIdAndPaperNumberAndGroupNumberAndStudentId(markStudent.getExamId(),
|
|
|
- markStudent.getPaperNumber(), groupResult.getGroupNumber(), groupResult.getStudentId());
|
|
|
+ for (MarkScoreList scoreList : groupResult.getMarkerScore()) {
|
|
|
+ String questionNumber = scoreList.getMainNumber() + "." + scoreList.getSubNumber();
|
|
|
+ markHeaderTrackService.deleteByExamIdAndPaperNumberAndGroupNumberAndStudentIdAndQuestionNumber(markStudent.getExamId(),
|
|
|
+ markStudent.getPaperNumber(), groupResult.getGroupNumber(), groupResult.getStudentId(), questionNumber);
|
|
|
+ }
|
|
|
List<MarkHeaderTrack> tracks = groupResult.getTrackList(groupResult, markStudent, userId);
|
|
|
markHeaderTrackService.saveOrUpdateBatchByMultiId(tracks);
|
|
|
}
|
|
@@ -910,9 +914,10 @@ public class MarkServiceImpl implements MarkService {
|
|
|
List<MarkHeaderTag> tags = groupResult.getHeaderTagList(groupResult, userId);
|
|
|
markHeaderTagService.saveOrUpdateBatch(tags);
|
|
|
}
|
|
|
+ updateMarkSubjectScore(markStudent, groupResult);
|
|
|
markTaskService.updateHeaderResult(markStudent.getExamId(), markStudent.getPaperNumber(),
|
|
|
groupResult.getGroupNumber(), groupResult.getStudentId(), userId,
|
|
|
- groupResult.getMarkerScore(), groupResult.getScoreList(), currentTime, MarkTaskStatus.MARKED);
|
|
|
+ groupResult.getGroupScore(), groupResult.getScoreList(), currentTime, MarkTaskStatus.MARKED);
|
|
|
updateMarkedCount(markStudent.getExamId(), markStudent.getPaperNumber(), groupResult.getGroupNumber());
|
|
|
markStudentService.updateCheckInfo(markStudent.getId(), userId);
|
|
|
checkStudentGroup(groupResult.getStudentId(),
|
|
@@ -925,11 +930,28 @@ public class MarkServiceImpl implements MarkService {
|
|
|
}
|
|
|
|
|
|
// 未分组的题目
|
|
|
- long unGroupQuestionCount = markQuestionService.countQuestionByExamIdAndPaperNumberAndGroupNumberIsNull(markStudent.getExamId(), markStudent.getPaperNumber(), false);
|
|
|
+ long unGroupQuestionCount = markQuestionService.countByExamIdAndPaperNumberAndObjectiveAndGroupNumberIsNull(markStudent.getExamId(), markStudent.getPaperNumber(), false);
|
|
|
long groupCount = CollectionUtils.size(markGroupService.listGroupByExamIdAndPaperNumber(markStudent.getExamId(), markStudent.getPaperNumber()));
|
|
|
checkStudentSubjective(markStudent.getId(), groupCount, unGroupQuestionCount);
|
|
|
}
|
|
|
|
|
|
+ private void updateMarkSubjectScore(MarkStudent markStudent, MarkHeaderGroupResult groupResult) {
|
|
|
+ List<MarkSubjectiveScore> markSubjectiveScoreList = markSubjectiveScoreService.listByStudentIdAndGroupNumber(markStudent.getId(), groupResult.getGroupNumber());
|
|
|
+ markSubjectiveScoreList.sort(Comparator.comparing(MarkSubjectiveScore::getMainNumber).thenComparingInt(MarkSubjectiveScore::getSubNumber));
|
|
|
+ List<Double> scoreList = new ArrayList<>();
|
|
|
+ for (MarkSubjectiveScore markSubjectiveScore : markSubjectiveScoreList) {
|
|
|
+ List<MarkScoreList> markScoreLists = groupResult.getMarkerScore();
|
|
|
+ Optional<MarkScoreList> optional = markScoreLists.stream().filter(m -> m.getMainNumber().equals(markSubjectiveScore.getMainNumber()) && m.getSubNumber().equals(markSubjectiveScore.getSubNumber())).findFirst();
|
|
|
+ if (optional.isPresent()) {
|
|
|
+ markSubjectiveScore.setScore(optional.get().getScore());
|
|
|
+ }
|
|
|
+ scoreList.add(markSubjectiveScore.getScore());
|
|
|
+ }
|
|
|
+ groupResult.setGroupScore(scoreList.stream().collect(Collectors.summingDouble(x -> x)));
|
|
|
+ groupResult.setScoreList(scoreList.toArray(new Double[]{}));
|
|
|
+ markSubjectiveScoreService.saveOrUpdateBatchByMultiId(markSubjectiveScoreList);
|
|
|
+ }
|
|
|
+
|
|
|
private String getKey(MarkStudent student) {
|
|
|
return student.getExamId() + "_" + student.getPaperNumber();
|
|
|
}
|
|
@@ -1276,4 +1298,11 @@ public class MarkServiceImpl implements MarkService {
|
|
|
return history;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void updateMarkGroupStatus(Long examId, String paperNumber) {
|
|
|
+ // 更新MarkPaper中groupStatus
|
|
|
+ long groupNumberIsNull = markQuestionService.countByExamIdAndPaperNumberAndObjectiveAndGroupNumberIsNull(examId, paperNumber, false);
|
|
|
+ markPaperService.updateGroupStatusByExamIdAndPaperNumber(groupNumberIsNull == 0, examId, paperNumber);
|
|
|
+ }
|
|
|
+
|
|
|
}
|