xiangpei
2024-03-28 0f431b52e0936456bd165d9553761bfd8a5a0517
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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);
    }
 
 
}