Pārlūkot izejas kodu

学科分析

ywx
雍文秀 pirms 1 mēnesi
vecāks
revīzija
024bae7e89

+ 2
- 1
smarking/src/main/java/com/xhkjedu/smarking/mapper/stupaper/MsPaperStudentMapper.java Parādīt failu

@@ -3,6 +3,7 @@ package com.xhkjedu.smarking.mapper.stupaper;
3 3
 import com.xhkjedu.base.TkMapper;
4 4
 import com.xhkjedu.smarking.model.exam.MsClassStudent;
5 5
 import com.xhkjedu.smarking.model.paper.MsPaperQtype;
6
+import com.xhkjedu.smarking.model.report.reportstu.MsrStudent;
6 7
 import com.xhkjedu.smarking.model.stupaper.MsPaperStudent;
7 8
 import com.xhkjedu.smarking.model.stupaper.MsPaperStudentScore;
8 9
 import com.xhkjedu.smarking.vo.exam.CStudentVo;
@@ -90,5 +91,5 @@ public interface MsPaperStudentMapper extends TkMapper<MsPaperStudent> {
90 91
     void updateStudentPaperScoreByMpsId(@Param("mpsid") Integer mpsid);
91 92
 
92 93
     //试学生成绩列表
93
-    List<MsPaperStudent> listPaperStudentByExamId(@Param("examid") Integer examid,@Param("mpids") List<Integer> mpids);
94
+    List<MsrStudent> listPaperStudentByExamId(@Param("examid") Integer examid, @Param("mpids") List<Integer> mpids);
94 95
 }

+ 3
- 0
smarking/src/main/java/com/xhkjedu/smarking/model/stupaper/MsPaperStudent.java Parādīt failu

@@ -67,5 +67,8 @@ public class MsPaperStudent extends BaseBean {
67 67
     //试题
68 68
     @Transient
69 69
     List<MsPaperStudentQuestion> questions;
70
+    @Transient
71
+    //得分率
72
+    private Double scorerate;
70 73
 
71 74
 }

+ 58
- 21
smarking/src/main/java/com/xhkjedu/smarking/service/report/reportother/MsrExamService.java Parādīt failu

@@ -51,12 +51,21 @@ public class MsrExamService {
51 51
         if (N_Utils.isListEmpty(subjects)) return;
52 52
         List<MsClass> classes = classMapper.listClassByExamId(examid);//获取考试关联班级
53 53
         List<MsClassStudent> students = classStudentMapper.listStudentByExamId(examid);//获取考试关联学生
54
-        List<Integer> mpids = subjects.stream().map(MsPaper::getMpid).collect(Collectors.toList());
55
-        List<MsPaperStudent> paperStudents = paperStudentMapper.listPaperStudentByExamId(examid, mpids);//试学生成绩列表
54
+        List<Integer> mpids = new ArrayList<>();
55
+        Map<String, Double> paperScoreMap = new HashMap<>();
56
+        for (MsPaper subject : subjects) {
57
+            Integer mpid = subject.getMpid();
58
+            mpids.add(mpid);
59
+            paperScoreMap.put(subject.getSubjectid(), subject.getPscore());
60
+        }
61
+        List<MsrStudent> paperStudents = paperStudentMapper.listPaperStudentByExamId(examid, mpids);//试学生成绩列表
62
+        for (MsrStudent student : paperStudents) {
63
+            student.setScorerate(N_Utils.getDoubleDivideAndMulitiply(student.getStuscore(), paperScoreMap.get(student.getSubjectid())));
64
+        }
56 65
 
57 66
         Integer classnum = N_Utils.obj2Int(classes.stream().map(MsClass::getClassid).distinct().count());
58 67
         Integer totalnum = N_Utils.obj2Int(students.stream().map(MsClassStudent::getStudentid).distinct().count());
59
-        Integer stunum = N_Utils.obj2Int(paperStudents.stream().filter(s -> s.getSstate().equals(2)).map(MsPaperStudent::getStudentid).distinct().count());
68
+        Integer stunum = N_Utils.obj2Int(paperStudents.stream().filter(s -> s.getSstate().equals(2)).map(MsrStudent::getStudentid).distinct().count());
60 69
         Integer missnum = totalnum - stunum;
61 70
         double fullscore = subjects.stream().mapToDouble(MsPaper::getPscore).sum();
62 71
         List<MsrStudent> schoolStudents = new ArrayList<>();//学校学生成绩
@@ -67,22 +76,21 @@ public class MsrExamService {
67 76
         Map<String, Integer> schoolSubStuRank = new HashMap<>();//学校科目学生分数排名
68 77
         Map<String, Integer> classStuRank = new HashMap<>();//班级学生分数排名
69 78
         Map<String, Integer> classSubStuRank = new HashMap<>();//班级科目学生分数排名
70
-        Integer stuzero = exam.getStuzero();
71
-        Map<Integer, List<MsPaperStudent>> schoolCollect = paperStudents.stream().collect(Collectors.groupingBy(MsPaperStudent::getStudentid));
72
-        for (Map.Entry<Integer, List<MsPaperStudent>> entry : schoolCollect.entrySet()) {
79
+        Map<Integer, List<MsrStudent>> schoolCollect = paperStudents.stream().collect(Collectors.groupingBy(MsrStudent::getStudentid));
80
+        for (Map.Entry<Integer, List<MsrStudent>> entry : schoolCollect.entrySet()) {
73 81
             Integer studentid = entry.getKey();
74 82
             MsrStudent cs = new MsrStudent();
75
-            List<MsPaperStudent> list = entry.getValue();
83
+            List<MsrStudent> list = entry.getValue();
76 84
             cs.setClassid(0);
77 85
             cs.setStudentid(studentid);
78
-            cs.setStuscore(list.stream().mapToDouble(MsPaperStudent::getStuscore).sum());
79
-            cs.setSstate(list.stream().max(Comparator.comparing(MsPaperStudent::getSstate)).get().getSstate());
86
+            cs.setStuscore(list.stream().mapToDouble(MsrStudent::getStuscore).sum());
87
+            cs.setSstate(list.stream().max(Comparator.comparing(MsrStudent::getSstate)).get().getSstate());
80 88
             cs.setScorerate(N_Utils.getDoubleDivideAndMulitiply(cs.getStuscore(), fullscore));
81 89
             schoolStudents.add(cs);
82 90
         }
83 91
         List<MsrStudent> paperStudents2 = new ArrayList<>();
84 92
         Map<String, List<MsClassStudent>> sClassStudent = students.stream().collect(Collectors.groupingBy(s -> s.getSubjectid() + "_" + s.getStudentid()));
85
-        for (MsPaperStudent paperStudent : paperStudents) {
93
+        for (MsrStudent paperStudent : paperStudents) {
86 94
             String subjectid = paperStudent.getSubjectid();
87 95
             Integer studentid = paperStudent.getStudentid();
88 96
             Double stuscore = paperStudent.getStuscore();
@@ -125,16 +133,11 @@ public class MsrExamService {
125 133
             }
126 134
         }
127 135
 
128
-        List<MsrStudent> schoolStudents2;//参与统计学生列表
129
-        if (stuzero.equals(0)) {//0分学生不参与统计
130
-            schoolStudents2 = schoolStudents.stream().filter(s -> s.getStuscore() > 0).collect(Collectors.toList());
131
-        } else {
132
-            schoolStudents2 = schoolStudents;
133
-        }
134
-        DoubleSummaryStatistics schoolStatistics = schoolStudents2.stream().filter(s -> s.getStuscore() > 0).mapToDouble(MsrStudent::getStuscore).summaryStatistics();
136
+        List<MsrStudent> schoolStudents2 = schoolStudents.stream().filter(s -> s.getSstate().equals(2)).collect(Collectors.toList());//参与统计学生列表
137
+        DoubleSummaryStatistics schoolStatistics = schoolStudents2.stream().mapToDouble(MsrStudent::getStuscore).summaryStatistics();
135 138
         double schoolStatisticsMax = N_Utils.handleInfinity(schoolStatistics.getMax());
136 139
         //最低分均不包括0分
137
-        double schoolStatisticsMin = N_Utils.handleInfinity(schoolStudents2.stream().filter(s -> s.getStuscore() > 0).mapToDouble(MsrStudent::getStuscore).summaryStatistics().getMin());
140
+        double schoolStatisticsMin = N_Utils.handleInfinity(schoolStatistics.getMin());
138 141
         double schoolStatisticsAverage = N_Utils.formatDouble(schoolStatistics.getAverage(), 2);
139 142
 
140 143
         //总体分析
@@ -151,7 +154,7 @@ public class MsrExamService {
151 154
         msrExamMapper.insert(msrExam);
152 155
 
153 156
         //科目分析
154
-        Map<String, List<MsPaperStudent>> subjectCollect = paperStudents.stream().collect(Collectors.groupingBy(MsPaperStudent::getSubjectid));
157
+        Map<String, List<MsrStudent>> subjectCollect = paperStudents.stream().collect(Collectors.groupingBy(MsrStudent::getSubjectid));
155 158
         List<MsrSubject> msrSubjects = new ArrayList<>();
156 159
         MsrSubject msrSubject = new MsrSubject();
157 160
         msrSubject.setExamid(examid);
@@ -170,8 +173,12 @@ public class MsrExamService {
170 173
         msrSubject.setQfd(MarkingUtil.qfd(scores));
171 174
         List<Double> scoreRates = schoolStudents2.stream().map(MsrStudent::getScorerate).sorted().collect(Collectors.toList());
172 175
         double dfllc = MarkingUtil.sub(scoreRates.get(scoreRates.size() - 1), scoreRates.get(0));
173
-        msrSubject.setDflxdlc(MarkingUtil.div(dfllc, schoolStatisticsAverage));
174 176
         msrSubject.setDfllc(dfllc);
177
+        msrSubject.setDflxdlc(MarkingUtil.div(dfllc, schoolStatisticsAverage));
178
+        msrSubject.setEsscore(MarkingUtil.cynjdf(scores, 0.2));
179
+        msrSubject.setSsscore(MarkingUtil.cynjdf(scores, 0.4));
180
+        msrSubject.setLsscore(MarkingUtil.cynjdf(scores, 0.6));
181
+        msrSubject.setBsscore(MarkingUtil.cynjdf(scores, 0.8));
175 182
         msrSubject.setTotalnum(totalnum);
176 183
         msrSubject.setStunum(stunum);
177 184
         msrSubject.setMissnum(missnum);
@@ -182,7 +189,37 @@ public class MsrExamService {
182 189
             msrSubject.setSubjectid(subject.getSubjectid());
183 190
             msrSubject.setSubjectname(subject.getSubjectname());
184 191
             msrSubject.setFullscore(subject.getPscore());
185
-            List<MsPaperStudent> studentList = subjectCollect.get(subject.getSubjectid());
192
+            List<MsrStudent> studentList = subjectCollect.get(subject.getSubjectid());
193
+            List<MsrStudent> studentList2 = studentList.stream().filter(s -> s.getSstate().equals(2)).collect(Collectors.toList());//参与统计学生列表
194
+            totalnum = studentList.size();
195
+            stunum = studentList2.size();
196
+            missnum = totalnum - stunum;
197
+            msrSubject.setTotalnum(totalnum);
198
+            msrSubject.setStunum(stunum);
199
+            msrSubject.setMissnum(missnum);
200
+            DoubleSummaryStatistics subjectStatistics = studentList2.stream().mapToDouble(MsrStudent::getStuscore).summaryStatistics();
201
+            double subjectStatisticsMax = N_Utils.handleInfinity(subjectStatistics.getMax());
202
+            //最低分均不包括0分
203
+            double subjectStatisticsMin = N_Utils.handleInfinity(subjectStatistics.getMin());
204
+            double subjectStatisticsAverage = N_Utils.formatDouble(subjectStatistics.getAverage(), 2);
205
+            msrSubject.setMaxscore(subjectStatisticsMax);
206
+            msrSubject.setMinscore(subjectStatisticsMin);
207
+            msrSubject.setAvgscore(subjectStatisticsAverage);
208
+            msrSubject.setScorerate(N_Utils.getDoubleDivideAndMulitiply(subjectStatisticsAverage, fullscore));
209
+            scores = studentList2.stream().map(MsrStudent::getStuscore).sorted().collect(Collectors.toList());
210
+            bzc = MarkingUtil.bzc(scores);
211
+            msrSubject.setBzc(bzc);
212
+            msrSubject.setCyxs(N_Utils.getDoubleDivideAndMulitiply(bzc, subjectStatisticsAverage));
213
+            msrSubject.setNd(MarkingUtil.div(subjectStatisticsAverage, fullscore));
214
+            msrSubject.setQfd(MarkingUtil.qfd(scores));
215
+            scoreRates = studentList2.stream().map(MsrStudent::getScorerate).sorted().collect(Collectors.toList());
216
+            dfllc = MarkingUtil.sub(scoreRates.get(scoreRates.size() - 1), scoreRates.get(0));
217
+            msrSubject.setDfllc(dfllc);
218
+            msrSubject.setDflxdlc(MarkingUtil.div(dfllc, subjectStatisticsAverage));
219
+            msrSubject.setEsscore(MarkingUtil.cynjdf(scores, 0.2));
220
+            msrSubject.setSsscore(MarkingUtil.cynjdf(scores, 0.4));
221
+            msrSubject.setLsscore(MarkingUtil.cynjdf(scores, 0.6));
222
+            msrSubject.setBsscore(MarkingUtil.cynjdf(scores, 0.8));
186 223
             msrSubjects.add(msrSubject);
187 224
         }
188 225
 

+ 7
- 0
smarking/src/main/java/com/xhkjedu/smarking/utils/MarkingUtil.java Parādīt failu

@@ -528,5 +528,12 @@ public class MarkingUtil {
528 528
         System.out.println(cjl(50,40));
529 529
     }
530 530
 
531
+    //处于年级20%得分(v=0.2)
532
+    public static Double cynjdf(List<Double> scores, double v) {
533
+        if (N_Utils.isListEmpty(scores)) return 0.0;
534
+        int totalCount = scores.size();
535
+        int topCount = (int) Math.ceil(totalCount * v); // 计算
536
+        return scores.get(totalCount - topCount);
537
+    }
531 538
 
532 539
 }

+ 1
- 1
smarking/src/main/resources/mapper/stupaper/MsPaperStudentMapper.xml Parādīt failu

@@ -255,7 +255,7 @@
255 255
         select * from ms_paper_student where examid=#{examid} and studentid=#{studentid}
256 256
     </select>
257 257
     <!--考试学生成绩列表-->
258
-    <select id="listPaperStudentByExamId" resultType="com.xhkjedu.smarking.model.stupaper.MsPaperStudent">
258
+    <select id="listPaperStudentByExamId" resultType="com.xhkjedu.smarking.model.report.reportstu.MsrStudent">
259 259
         select mpid,subjectid,studentid,stuscore
260 260
         from ms_paper_student where examid=#{examid}
261 261
         <foreach collection="mpids" item="mpid" separator="and mpid in (">

Notiek ielāde…
Atcelt
Saglabāt