From 247cb86585a1d1894596ed18a6c93efecb992946 Mon Sep 17 00:00:00 2001 From: luohairen <3399054449@qq.com> Date: 星期四, 14 十一月 2024 10:34:27 +0800 Subject: [PATCH] 班级成绩图表分析 --- src/main/resources/mapper/ExamPaperScoreMapper.xml | 17 +++++ src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperInfoVO.java | 38 ++++++++++++ src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreMapper.java | 3 + src/main/java/com/ycl/jxkg/service/ExamPaperScoreService.java | 6 + src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java | 34 +++++++++- src/main/java/com/ycl/jxkg/controller/admin/ExamPaperScoreController.java | 7 +- src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ClassExamScoreInfoVO.java | 18 ++++++ 7 files changed, 113 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/ycl/jxkg/controller/admin/ExamPaperScoreController.java b/src/main/java/com/ycl/jxkg/controller/admin/ExamPaperScoreController.java index db45e61..dd9e10d 100644 --- a/src/main/java/com/ycl/jxkg/controller/admin/ExamPaperScoreController.java +++ b/src/main/java/com/ycl/jxkg/controller/admin/ExamPaperScoreController.java @@ -7,6 +7,7 @@ import com.ycl.jxkg.domain.entity.ExamPaperScore; import com.ycl.jxkg.domain.entity.User; import com.ycl.jxkg.domain.vo.PaperFixQuestionVO; +import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperInfoVO; import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperMarkNavbarVO; import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperScoreVO; import com.ycl.jxkg.domain.vo.admin.paper.ExamPaperAnswerPageRequestVO; @@ -71,9 +72,9 @@ return Result.ok(examPaperScoreVO); } - @PostMapping("/queryMaxAndMinScore/{id}") - public Result queryMaxAndMinScore(@PathVariable Integer id) { - return examPaperScoreService.queryMaxAndMinScore(id); + @PostMapping("/getExamPaperInfo/{id}") + public Result<ExamPaperInfoVO> getExamPaperInfo(@PathVariable Integer id) { + return examPaperScoreService.getExamPaperInfo(id); } } diff --git a/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ClassExamScoreInfoVO.java b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ClassExamScoreInfoVO.java new file mode 100644 index 0000000..697e857 --- /dev/null +++ b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ClassExamScoreInfoVO.java @@ -0,0 +1,18 @@ +package com.ycl.jxkg.domain.vo.admin.exam; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ClassExamScoreInfoVO { + private Integer userId; + private String realName; + private String examName; + private BigDecimal totalScore; + private Integer lackUserCount; +} diff --git a/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperInfoVO.java b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperInfoVO.java new file mode 100644 index 0000000..4c1f55c --- /dev/null +++ b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperInfoVO.java @@ -0,0 +1,38 @@ +package com.ycl.jxkg.domain.vo.admin.exam; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ExamPaperInfoVO { + /** + * 搴旇�冧汉鏁� + */ + private Integer totalUserCount; + /** + * 缂鸿�冧汉鏁� + */ + private Integer lackUserCount; + /** + * 鏈�楂樺垎 + */ + private BigDecimal highestScore; + /** + * 鏈�浣庡垎 + */ + private BigDecimal lowestScore; + /** + * 鐝骇瀛﹀憳鍚嶇О + */ + private List<String> userNames; + /** + * 瀛﹀憳鑰冭瘯鎴愮哗 + */ + private List<BigDecimal> userScores; +} diff --git a/src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreMapper.java b/src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreMapper.java index 2ae7fd4..395f370 100644 --- a/src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreMapper.java +++ b/src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreMapper.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ycl.jxkg.domain.entity.ExamPaperScore; import com.ycl.jxkg.domain.other.KeyValue; +import com.ycl.jxkg.domain.vo.admin.exam.ClassExamScoreInfoVO; import com.ycl.jxkg.domain.vo.admin.paper.ExamPaperAnswerPageRequestVO; import com.ycl.jxkg.domain.vo.admin.paper.UserAnswerPageRequestVO; import com.ycl.jxkg.domain.vo.student.exampaper.ExamPaperAnswerPageResponseVO; @@ -41,4 +42,6 @@ ExamPaperScore checkWrong(@Valid CheckWrongVO model); + + List<ClassExamScoreInfoVO> getClassExamScoreInfo(Integer id); } diff --git a/src/main/java/com/ycl/jxkg/service/ExamPaperScoreService.java b/src/main/java/com/ycl/jxkg/service/ExamPaperScoreService.java index 188f4d9..0872d76 100644 --- a/src/main/java/com/ycl/jxkg/service/ExamPaperScoreService.java +++ b/src/main/java/com/ycl/jxkg/service/ExamPaperScoreService.java @@ -6,6 +6,7 @@ import com.ycl.jxkg.domain.ExamPaperAnswerInfo; import com.ycl.jxkg.domain.entity.ExamPaperScore; import com.ycl.jxkg.domain.entity.User; +import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperInfoVO; import com.ycl.jxkg.domain.vo.admin.paper.ExamPaperAnswerPageRequestVO; import com.ycl.jxkg.domain.vo.admin.paper.UserAnswerPageRequestVO; import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitVO; @@ -79,10 +80,11 @@ */ PageInfo<UserAnswerPageResponseVO> pageUser(UserAnswerPageRequestVO model); + /** - * 鏈�楂樻渶浣庡垎 + * 鑰冭瘯璇︽儏 * @param id 鏌ヨ鏉′欢 * @return */ - Result queryMaxAndMinScore(Integer id); + Result<ExamPaperInfoVO> getExamPaperInfo(Integer id); } diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java index 06049e7..58608cf 100644 --- a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java +++ b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java @@ -8,6 +8,8 @@ import com.ycl.jxkg.domain.ExamPaperAnswerInfo; import com.ycl.jxkg.domain.entity.*; import com.ycl.jxkg.domain.other.KeyValue; +import com.ycl.jxkg.domain.vo.admin.exam.ClassExamScoreInfoVO; +import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperInfoVO; import com.ycl.jxkg.domain.vo.admin.paper.ExamPaperAnswerPageRequestVO; import com.ycl.jxkg.domain.vo.admin.paper.UserAnswerPageRequestVO; import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitItemVO; @@ -31,6 +33,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -296,21 +299,42 @@ examPaperScoreMapper.pageUser(model)); } + + @Override - public Result queryMaxAndMinScore(Integer id) { - List<ExamPaperScore> list = new ArrayList<>(); + public Result<ExamPaperInfoVO> getExamPaperInfo(Integer id) { + ExamPaperInfoVO result = new ExamPaperInfoVO(); + // 鏌ヨ鑰冭瘯淇℃伅 + ExamPaperAnswerPageRequestVO model = new ExamPaperAnswerPageRequestVO(); + model.setExamId(id); + // 鏈�楂樺垎銆佹渶浣庡垎 ExamPaperScore max = examPaperScoreMapper.selectOne(new LambdaQueryWrapper<>(ExamPaperScore.class) .eq(ExamPaperScore::getExamId, id) .orderByDesc(ExamPaperScore::getTotalScore) .last("limit 1")); - list.add(max); if (null != max) { + result.setHighestScore(max.getTotalScore()); ExamPaperScore min = examPaperScoreMapper.selectOne(new LambdaQueryWrapper<>(ExamPaperScore.class) .eq(ExamPaperScore::getExamId, id) .orderByAsc(ExamPaperScore::getTotalScore) .last("limit 1")); - list.add(min); + // 鍒ゆ柇max鍜宮in鏄惁涓哄悓涓�鏉℃暟鎹� + if (null != min && !max.getId().equals(min.getId())) { + result.setLowestScore(min.getTotalScore()); + }else { + result.setLowestScore(BigDecimal.valueOf(0)); + } + }else { + result.setHighestScore(BigDecimal.valueOf(0)); + result.setLowestScore(BigDecimal.valueOf(0)); } - return Result.ok(list); + // 鏌ヨ鐝骇瀛﹀憳鍚嶇О鍙婅�冭瘯鎴愮哗 + List<ClassExamScoreInfoVO> info = examPaperScoreMapper.getClassExamScoreInfo(id); + result.setTotalUserCount(info.size()); + ClassExamScoreInfoVO classExamScoreInfoVO = info.get(0); + result.setLackUserCount(classExamScoreInfoVO.getLackUserCount()); + result.setUserNames(info.stream().map(item -> item.getRealName()).collect(Collectors.toList())); + result.setUserScores(info.stream().map(item -> item.getTotalScore()).collect(Collectors.toList())); + return Result.ok(result); } } diff --git a/src/main/resources/mapper/ExamPaperScoreMapper.xml b/src/main/resources/mapper/ExamPaperScoreMapper.xml index ab1d0fa..3c6aff2 100644 --- a/src/main/resources/mapper/ExamPaperScoreMapper.xml +++ b/src/main/resources/mapper/ExamPaperScoreMapper.xml @@ -21,6 +21,7 @@ <result column="paper_content" property="paperContent"/> <result column="navbar" property="navbar"/> </resultMap> + <sql id="Base_Column_List"> id, exam_id, @@ -191,4 +192,20 @@ AND pc.questionId = #{questionId} </where> </select> + + <select id="getClassExamScoreInfo" resultType="com.ycl.jxkg.domain.vo.admin.exam.ClassExamScoreInfoVO"> + SELECT + u.id AS user_id, + u.real_name, + (select exam_name from t_exam e WHERE e.id = #{id}) AS exam_name, + COALESCE(eps.total_score,0.00) AS total_score, + COUNT(CASE WHEN eps.id IS NULL THEN 1 END) OVER () AS lackUserCount + FROM t_user u + LEFT JOIN t_classes_user cu ON cu.user_id = u.id + LEFT JOIN t_exam_paper_score eps ON eps.user_id = u.id and eps.exam_id = #{id} + WHERE + cu.deleted = 0 + and teacher = 0 + and cu.classes_id = (select classes_id from t_exam e WHERE e.id = #{id}) + </select> </mapper> -- Gitblit v1.8.0