Răsfoiți Sursa

数据处理 异常:答案异常分数处理

caozixuan 4 ani în urmă
părinte
comite
0dfc43a72f

+ 68 - 0
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/BasicDatasourceController.java

@@ -1086,6 +1086,74 @@ public class BasicDatasourceController {
         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));
+    }
+
 
 
     /**