|
@@ -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
|
|