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