ソースを参照

更新成绩统计

Administrator 1 年間 前
コミット
e5b808bbaf

+ 9 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/score/ScoreDataController.java

@@ -200,6 +200,15 @@ public class ScoreDataController extends BaseController {
         return TableDataInfo.build(scoreDataVos);
     }
 
+    /**
+     * 班级总分平均分排名统计折线
+     */
+    @PostMapping("/avgRankZheXian")
+    public Map<String,Object> avgRankZheXian(@RequestBody ScoreData scoreData)
+    {
+        return scoreDataService.classRankZheXian(scoreData);
+    }
+
     /**
      * 班级总分平均分人数统计
      */

+ 48 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/score/ScoreDataServiceImpl.java

@@ -455,6 +455,54 @@ public class ScoreDataServiceImpl implements IScoreDataService {
         return baseMapper.classRank(scoreData);
     }
 
+    /**
+     * 班级总分平均分排名统计折线
+     * @param scoreData
+     * @return
+     */
+    @Override
+    public Map<String, Object> classRankZheXian(ScoreData scoreData) {
+        Map<String, Object> map = new HashMap<>(3);
+
+        //接受考试类型/考试时间/考试班级名称
+        //查询出所有对应班级的考试id和平均分
+        List<ScoreDataVo> scoreDataVos = baseMapper.avgRank(scoreData);
+        if (scoreDataVos != null && scoreDataVos.size() > 0) {
+            long[] scoreIds = scoreDataVos.stream().mapToLong(ScoreDataVo::getScoreId).toArray();
+            //拿着考试id去查询对应学生
+            List<ScoreDataStudentVo> scoreDataStudentVos = scoreDataStudentMapper.selectScoreByScoreIds(scoreIds);
+            List<String> x = new ArrayList<>();
+            List<Integer> y1 = new ArrayList<>();
+            List<Integer> y2 = new ArrayList<>();
+            //判断对应班级的对应学生的总分在班级总分平均分的位置
+            for (ScoreDataVo scoreDataVo : scoreDataVos) {
+                //存放X轴数据
+                x.add(scoreDataVo.getScoreClassName());
+                Long scoreId = scoreDataVo.getScoreId();
+                //班级平均分
+                double avg = scoreDataVo.getAvg();
+                Map<Long, List<ScoreDataStudentVo>> collect = scoreDataStudentVos.stream().collect(Collectors.groupingBy(ScoreDataStudentVo::getScoreId));
+                //获取对应考试的学生集合
+                List<ScoreDataStudentVo> scoreDataStudentVosList = collect.get(scoreId);
+                //进行平均分的判断
+                if (scoreDataStudentVosList != null && scoreDataStudentVosList.size() > 0){
+                    List<ScoreDataStudentVo> scoreDataStudentVosListUp = scoreDataStudentVosList.stream().filter(scoreDataStudent -> scoreDataStudent.getZongfen() >= avg)
+                        .collect(Collectors.toList());
+                    List<ScoreDataStudentVo> scoreDataStudentVosListDown = scoreDataStudentVosList.stream().filter(scoreDataStudent -> scoreDataStudent.getZongfen() < avg)
+                        .collect(Collectors.toList());
+                    scoreDataVo.setUp(scoreDataStudentVosListUp.size());
+                    scoreDataVo.setDown(scoreDataStudentVosListDown.size());
+                    y1.add(scoreDataStudentVosListUp.size());
+                    y2.add(scoreDataStudentVosListDown.size());
+                }
+            }
+            map.put("x",x);
+            map.put("y1",y1);
+            map.put("y2",y2);
+        }
+        return map;
+    }
+
     /**
      * 班级总分平均分人数统计
      */

+ 1 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/score/IScoreDataService.java

@@ -82,6 +82,7 @@ public interface IScoreDataService {
      * 班级总分平均分排名统计
      */
     public List<ScoreDataVo> classRank(ScoreData scoreData);
+    public Map<String,Object> classRankZheXian(ScoreData scoreData);
     /**
      * 班级总分平均分人数统计
      */

+ 4 - 0
ruoyi-modules/ruoyi-system/src/main/resources/mapper/score/ScoreDataStudentMapper.xml

@@ -95,6 +95,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="scoreClassName != null  and scoreClassName != ''"> and d.score_class_name like concat( #{scoreClassName}, '%')</if>
         </where>
         )
+        <where>
+            <if test="scoreDataName != null  and scoreDataName != ''"> and d.score_type = #{scoreType}</if>
+        </where>
         order by s.zongfen  DESC
     </select>
     <select id="xuekeRank" parameterType="org.dromara.system.domain.score.bo.ScoreDataBo" resultMap="ScoreDataDetailResult">
@@ -117,6 +120,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="scoreType != null  and scoreType != ''"> and d.score_type = #{scoreType}</if>
             <if test="scoreTime != null "> and d.score_time = #{scoreTime}</if>
             <if test="scoreId != null "> and d.score_id = #{scoreId}</if>
+            <if test="scoreDataName != null and scoreDataName"> and d.score_data_name = #{scoreDataName}</if>
             <if test="scoreClassName != null  and scoreClassName != ''"> and d.score_class_name like concat( #{scoreClassName}, '%')</if>
         </where>
             ) and dd.xueke=#{xueke} order by dd.score  DESC