luohairen
2024-11-14 247cb86585a1d1894596ed18a6c93efecb992946
班级成绩图表分析
5个文件已修改
2个文件已添加
123 ■■■■■ 已修改文件
src/main/java/com/ycl/jxkg/controller/admin/ExamPaperScoreController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ClassExamScoreInfoVO.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperInfoVO.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/service/ExamPaperScoreService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/ExamPaperScoreMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
    }
}
src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ClassExamScoreInfoVO.java
New file
@@ -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;
}
src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperInfoVO.java
New file
@@ -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;
}
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);
}
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);
}
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和min是否为同一条数据
            if (null != min && !max.getId().equals(min.getId())) {
                result.setLowestScore(min.getTotalScore());
            }else {
                result.setLowestScore(BigDecimal.valueOf(0));
        }
        return Result.ok(list);
        }else {
            result.setHighestScore(BigDecimal.valueOf(0));
            result.setLowestScore(BigDecimal.valueOf(0));
        }
        // 查询班级学员名称及考试成绩
        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);
    }
}
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>