|
@@ -1086,6 +1086,74 @@ public class BasicDatasourceController {
|
|
return ResultUtil.ok(Collections.singletonMap(SystemConstant.SUCCESS, true));
|
|
return ResultUtil.ok(Collections.singletonMap(SystemConstant.SUCCESS, true));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @ApiOperation(value = "异常答案/分数处理(先处理异常后赋分)")
|
|
|
|
+ @RequestMapping(value = "/exception_answer/score_dispose", method = RequestMethod.POST)
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
+ @ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
|
|
|
|
+ public Result exceptionAnswerScoreDispose(@RequestParam Long schoolId, @RequestParam String examId, @RequestParam String courseCode,@RequestParam String numberType,@RequestParam String mainNumber,@RequestParam String subNumber,@RequestParam String answer,@RequestParam BigDecimal score) {
|
|
|
|
+
|
|
|
|
+ TBPaper tbPaper = tbPaperService.getOne(new QueryWrapper<TBPaper>().lambda().eq(TBPaper::getCourseCode,courseCode).eq(TBPaper::getExamId,examId));
|
|
|
|
+ Long paperId = tbPaper.getId();
|
|
|
|
+ List<TBExamRecord> tbExamRecordList = tbExamRecordService.list(new QueryWrapper<TBExamRecord>().lambda().eq(TBExamRecord::getExamId,examId).eq(TBExamRecord::getPaperId,paperId));
|
|
|
|
+ List<Long> examRecordIdList = tbExamRecordList.stream().map(TBExamRecord::getId).distinct().collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ // 要改分的作答记录
|
|
|
|
+ List<TBAnswer> tbAnswerList = tbAnswerService.list(new QueryWrapper<TBAnswer>().lambda()
|
|
|
|
+ .in(TBAnswer::getExamRecordId,examRecordIdList)
|
|
|
|
+ .eq(TBAnswer::getNumberType,numberType)
|
|
|
|
+ .eq(TBAnswer::getMainNumber,mainNumber)
|
|
|
|
+ .eq(TBAnswer::getSubNumber,subNumber)
|
|
|
|
+ .eq(TBAnswer::getAnswer,answer));
|
|
|
|
+
|
|
|
|
+ List<TBExamRecord> willUpdateRecordList = new ArrayList<>();
|
|
|
|
+ for (TBAnswer tbAnswer : tbAnswerList) {
|
|
|
|
+ // 对该考生 详细作答记录的得分修改
|
|
|
|
+ BigDecimal orgScore = tbAnswer.getScore();
|
|
|
|
+ BigDecimal scoreGap = score.subtract(orgScore);
|
|
|
|
+ tbAnswer.setScore(score);
|
|
|
|
+
|
|
|
|
+ // 对该考生 总体考试成绩的得分修改
|
|
|
|
+ TBExamRecord tbExamRecord = tbExamRecordList.stream().filter(e -> e.getId().equals(tbAnswer.getExamRecordId())).collect(Collectors.toList()).get(0);
|
|
|
|
+ BigDecimal totalScore = tbExamRecord.getTotalScore();
|
|
|
|
+ if (numberType.equals("客观题")){
|
|
|
|
+ BigDecimal objectiveScore = tbExamRecord.getObjectiveScore();
|
|
|
|
+ objectiveScore = objectiveScore.add(scoreGap);
|
|
|
|
+ tbExamRecord.setObjectiveScore(objectiveScore);
|
|
|
|
+ }else if (numberType.equals("主观题")){
|
|
|
|
+ BigDecimal subjectiveScore = tbExamRecord.getSubjectiveScore();
|
|
|
|
+ subjectiveScore = subjectiveScore.add(scoreGap);
|
|
|
|
+ tbExamRecord.setSubjectiveScore(subjectiveScore);
|
|
|
|
+ }else {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("题目类型有误");
|
|
|
|
+ }
|
|
|
|
+ totalScore = totalScore.add(scoreGap);
|
|
|
|
+ tbExamRecord.setTotalScore(totalScore);
|
|
|
|
+ willUpdateRecordList.add(tbExamRecord);
|
|
|
|
+ }
|
|
|
|
+ // 成绩更新操作
|
|
|
|
+ tbAnswerService.updateBatchById(tbAnswerList);
|
|
|
|
+ tbExamRecordService.updateBatchById(willUpdateRecordList);
|
|
|
|
+
|
|
|
|
+ // 成绩核对
|
|
|
|
+ List<TBExamRecord> verifyExamRecordList = tbExamRecordService.list(new QueryWrapper<TBExamRecord>().lambda().eq(TBExamRecord::getExamId,examId).eq(TBExamRecord::getPaperId,paperId));
|
|
|
|
+ for (TBExamRecord verifyRecord : verifyExamRecordList) {
|
|
|
|
+ BigDecimal totalScore = verifyRecord.getTotalScore();
|
|
|
|
+ Long examRecordId = verifyRecord.getId();
|
|
|
|
+ List<TBAnswer> oneStudentAnswer = tbAnswerService.list(new QueryWrapper<TBAnswer>().lambda().eq(TBAnswer::getExamRecordId,examRecordId));
|
|
|
|
+ if (oneStudentAnswer.size() == 0 && totalScore.compareTo(BigDecimal.ZERO) != 0){
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("计算数据异常");
|
|
|
|
+ } else {
|
|
|
|
+ double scoreSum = oneStudentAnswer.stream().collect(Collectors.summarizingDouble(e -> e.getScore().doubleValue())).getSum();
|
|
|
|
+ if (totalScore.compareTo(BigDecimal.valueOf(scoreSum)) != 0){
|
|
|
|
+ System.out.println("考试总分 : " + totalScore + ",作答总分 : " + scoreSum);
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("考试总分和作答总分不一致");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return ResultUtil.ok(Collections.singletonMap(SystemConstant.SUCCESS, true));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|