package com.mindskip.xzs.controller.teacher; import com.mindskip.xzs.base.BaseApiController; import com.mindskip.xzs.base.RestResponse; import com.mindskip.xzs.domain.ExamPaperAnswer; import com.mindskip.xzs.domain.ExamPaperClasses; import com.mindskip.xzs.domain.User; import com.mindskip.xzs.service.ClassesService; import com.mindskip.xzs.service.ExamPaperAnswerService; import com.mindskip.xzs.service.ExamPaperService; import com.mindskip.xzs.service.UserService; import com.mindskip.xzs.utility.ExamUtil; import com.mindskip.xzs.viewmodel.teacher.analyze.ClassAvgItem; import com.mindskip.xzs.viewmodel.teacher.analyze.ClassesScoreItem; import com.mindskip.xzs.viewmodel.teacher.analyze.PaperClassesRequest; import com.mindskip.xzs.viewmodel.teacher.analyze.PaperClassesVM; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.*; /** * @version 2.2.0 * @description: 试卷数据分析 * Copyright (C), 2020-2021, 武汉思维跳跃科技有限公司 * @date 2021 /9/7 9:45 */ @RestController("TeacherAnalyzeController") @RequestMapping(value = "/api/teacher/analyze") @AllArgsConstructor public class AnalyzeController extends BaseApiController { private final ClassesService classesService; private final ExamPaperService examPaperService; private final ExamPaperAnswerService examPaperAnswerService; private final UserService userService; /** * 试卷成绩分析 * * @param paperId the paper id * @return the rest response */ @PostMapping("/paperClasses/{paperId}") public RestResponse PaperClasses(@PathVariable Integer paperId) { PaperClassesVM vm = new PaperClassesVM(); List examPaperClassesList = examPaperService.getExamPaperClassesByPaperId(paperId); List classAvg = new ArrayList<>(examPaperClassesList.size()); List classesScore = new ArrayList<>(examPaperClassesList.size()); vm.setClassAvg(classAvg); vm.setClassesScore(classesScore); examPaperClassesList.stream().forEach(epc -> { PaperClassesRequest paperClassesRequest = new PaperClassesRequest(epc.getExamPaperId(), epc.getClassesId()); List examPaperAnswers = examPaperAnswerService.classPaper(paperClassesRequest); ClassesScoreItem classesScoreItem = new ClassesScoreItem(); classesScoreItem.setName(epc.getClassesName()); classesScoreItem.setX(new ArrayList<>(examPaperAnswers.size())); classesScoreItem.setY(new ArrayList<>(examPaperAnswers.size())); examPaperAnswers.stream().sorted(Comparator.comparing(ExamPaperAnswer::getUserScore).reversed()).forEach(epa -> { User user = userService.getUserById(epa.getCreateUser()); classesScoreItem.getX().add(user.getUserName()); classesScoreItem.getY().add(ExamUtil.scoreToVM(epa.getUserScore())); }); classesScore.add(classesScoreItem); ClassAvgItem classAvgItem = new ClassAvgItem(); classAvgItem.setName(epc.getClassesName()); int avg = (int) examPaperAnswers.stream().mapToInt(d -> d.getUserScore()).average().orElse(0); classAvgItem.setAvgScore(ExamUtil.scoreToVM(avg)); classAvg.add(classAvgItem); }); return RestResponse.ok(vm); } }