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