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<PaperClassesVM> PaperClasses(@PathVariable Integer paperId) {
|
PaperClassesVM vm = new PaperClassesVM();
|
List<ExamPaperClasses> examPaperClassesList = examPaperService.getExamPaperClassesByPaperId(paperId);
|
List<ClassAvgItem> classAvg = new ArrayList<>(examPaperClassesList.size());
|
List<ClassesScoreItem> classesScore = new ArrayList<>(examPaperClassesList.size());
|
vm.setClassAvg(classAvg);
|
vm.setClassesScore(classesScore);
|
examPaperClassesList.stream().forEach(epc -> {
|
PaperClassesRequest paperClassesRequest = new PaperClassesRequest(epc.getExamPaperId(), epc.getClassesId());
|
List<ExamPaperAnswer> 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);
|
}
|
|
|
}
|