Răsfoiți Sursa

3.4.2 update-20250102优化成绩报告大题分析

xiaofei 5 luni în urmă
părinte
comite
ce7157d6ee

+ 19 - 10
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -1755,15 +1755,17 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
                             .eq(MarkSubjectiveScore::getPaperNumber, paperNumber).in(MarkSubjectiveScore::getStudentId, studentIdList));
         }
 
+        Map<String, Double> studentMainNumberScoreMap = subjectiveScoreDatasource.stream().collect(Collectors.groupingBy(m -> m.getStudentId() + "-" + m.getMainNumber(), Collectors.summingDouble(n -> n.getScore())));
+
         List<MarkQuestion> objectiveQuestions = questionDatasource.stream().filter(MarkQuestion::getObjective).collect(Collectors.toList());
         for (ArchiveStudentVo studentVo : studentList) {
             List<ScoreItem> scoreItemList = studentVo.getScoreList(true, objectiveQuestions);
 
-            for (String key : mainQuestionMap.keySet()) {
-                String[] arr = key.split("-");
+            for (Map.Entry<String, QuestionVo> entry : mainQuestionMap.entrySet()) {
+                String[] arr = entry.getKey().split("-");
                 int mainNumber = Integer.parseInt(arr[0]);
                 boolean objective = Boolean.parseBoolean(arr[1]);
-                QuestionVo questionVo = mainQuestionMap.get(key);
+                QuestionVo questionVo = entry.getValue();
                 // 考生总数
                 questionVo.setStudentCount(questionVo.getStudentCount() + 1);
                 // 考生在大题得分
@@ -1773,16 +1775,23 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
                     List<ScoreItem> mainScoreItemList = scoreItemList.stream()
                             .filter(e -> Objects.equals(mainNumber, e.getMainNumber())).collect(Collectors.toList());
 
-                    for (ScoreItem scoreItem : mainScoreItemList) {
-                        studentScore = studentScore + scoreItem.getScore();
+//                    for (ScoreItem scoreItem : mainScoreItemList) {
+//                        studentScore = studentScore + scoreItem.getScore();
+//                    }
+                    if (CollectionUtils.isNotEmpty(mainScoreItemList)) {
+                        studentScore = mainScoreItemList.stream().collect(Collectors.summingDouble(m -> m.getScore())).doubleValue();
                     }
                 } else {
                     // 主观题处理
-                    List<MarkSubjectiveScore> subjectiveScoreList = subjectiveScoreDatasource.stream()
-                            .filter(e -> Objects.equals(mainNumber, e.getMainNumber()) && Objects.equals(studentVo.getStudentId(), e.getStudentId())).collect(Collectors.toList());
-
-                    for (MarkSubjectiveScore markSubjectiveScore : subjectiveScoreList) {
-                        studentScore = studentScore + markSubjectiveScore.getScore();
+//                    List<MarkSubjectiveScore> subjectiveScoreList = subjectiveScoreDatasource.stream()
+//                            .filter(e -> Objects.equals(mainNumber, e.getMainNumber()) && Objects.equals(studentVo.getStudentId(), e.getStudentId())).collect(Collectors.toList());
+//
+//                    for (MarkSubjectiveScore markSubjectiveScore : subjectiveScoreList) {
+//                        studentScore = studentScore + markSubjectiveScore.getScore();
+//                    }
+                    String key = studentVo.getStudentId() + "-" + mainNumber;
+                    if (studentMainNumberScoreMap.containsKey(key)) {
+                        studentScore = studentMainNumberScoreMap.get(key).doubleValue();
                     }
                 }
                 // 有得分总数