From 8ec3179cbb0a2b208725569468806ff71ab1a3a7 Mon Sep 17 00:00:00 2001 From: "hhb@hotmail.com" Date: Wed, 12 Mar 2025 17:48:37 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E8=B0=83=E6=95=B4=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/LaborEducationServiceImpl.java | 74 ++++++++++--------- .../repository/AppraiseRecordRepository.java | 2 +- 2 files changed, 42 insertions(+), 34 deletions(-) diff --git a/src/main/java/cn/teammodel/controller/admin/service/impl/LaborEducationServiceImpl.java b/src/main/java/cn/teammodel/controller/admin/service/impl/LaborEducationServiceImpl.java index c96c454..e2c8bd4 100644 --- a/src/main/java/cn/teammodel/controller/admin/service/impl/LaborEducationServiceImpl.java +++ b/src/main/java/cn/teammodel/controller/admin/service/impl/LaborEducationServiceImpl.java @@ -311,10 +311,12 @@ public class LaborEducationServiceImpl implements LaborEducationService { */ double finalCount = convertedScore; double finalScore = score / knowledgeBlockCount; + finalScore = Double.parseDouble(String.format("%.2f", finalScore)); + double finalScore1 = finalScore; combinedScores.put(knowledgeBlock, new HashMap() {{ put("count", finalCount); put("objectiveScore", objectiveScore); - put("compositeScore", finalScore); + put("compositeScore", finalScore1); }}); //combinedScores.put(knowledgeBlock, objectiveScore); @@ -741,7 +743,8 @@ public class LaborEducationServiceImpl implements LaborEducationService { Map> points, Map knowledgeTotalScore) { - // 记录每个知识点的考试次数 + // 记录每个知识点在所有考试中的平均分总和及考试次数 + Map knowledgeTotalAverage = new HashMap<>(); Map knowledgeExamCount = new HashMap<>(); // 过滤出当前学生的考试结果 @@ -749,52 +752,57 @@ public class LaborEducationServiceImpl implements LaborEducationService { int studentIndex = examResult.getStudentIds().indexOf(studentId); if (studentIndex == -1) continue; int status = examResult.getStatus().get(studentIndex); - if (status == 1) continue; + if (status == 1) continue; // 跳过无效考试 - // 获取该考试的知识点 + // 获取当前考试的知识点和题目分数 List> knowledgeList = knowledgeMap.get(examResult.getExamId()); - List point = points.get(examResult.getExamId()); - if (knowledgeList == null) continue; + List pointList = points.get(examResult.getExamId()); + if (knowledgeList == null || pointList == null) continue; - // 检查 studentScores 是否为空或越界 + // 获取学生的得分列表 List> studentScores = examResult.getStudentScores(); - if (studentIndex >= studentScores.size() || studentScores.get(studentIndex) == null) { - continue; - } - - // 获取当前学生的成绩列表 + if (studentIndex >= studentScores.size() || studentScores.get(studentIndex) == null) continue; List studentScoreList = studentScores.get(studentIndex); - // 确保知识列表、分数列表和学生成绩列表的大小一致 - if (knowledgeList.size() != point.size() || knowledgeList.size() != studentScoreList.size()) { - continue; - } + // 确保数据一致性 + if (knowledgeList.size() != studentScoreList.size()) continue; + + // 记录当前考试中每个知识点的总得分和题目数量 + Map currentExamKnowledgeTotal = new HashMap<>(); + Map currentExamKnowledgeCount = new HashMap<>(); - // 遍历每道题的得分和知识点 + // 遍历每道题 for (int i = 0; i < studentScoreList.size(); i++) { - String knowledge = knowledgeList.get(i).get(0); // 每题的第一个知识点 - double studentScore = studentScoreList.get(i); // 学生的得分 + String knowledge = knowledgeList.get(i).get(0); // 取第一个知识点 + double score = studentScoreList.get(i); - // 累加知识点总分 - knowledgeTotalScore.put(knowledge, knowledgeTotalScore.getOrDefault(knowledge, 0.0) + studentScore); + // 累加当前考试中该知识点的总得分和题目数量 + currentExamKnowledgeTotal.merge(knowledge, score, Double::sum); + currentExamKnowledgeCount.merge(knowledge, 1, Integer::sum); + } + + // 计算当前考试中每个知识点的平均分,并累加到总平均分 + for (String knowledge : currentExamKnowledgeTotal.keySet()) { + double total = currentExamKnowledgeTotal.get(knowledge); + int count = currentExamKnowledgeCount.get(knowledge); + double average = total / count; // 当前考试内该知识点的平均分 - // 记录该知识点的考试次数 - knowledgeExamCount.put(knowledge, knowledgeExamCount.getOrDefault(knowledge, 0) + 1); + // 将该考试的平均分累加到总平均分中,并增加考试次数 + knowledgeTotalAverage.merge(knowledge, average, Double::sum); + knowledgeExamCount.merge(knowledge, 1, Integer::sum); } } - // 计算每个知识点的平均分 - Map knowledgeAverageScore = new HashMap<>(); - for (Map.Entry entry : knowledgeTotalScore.entrySet()) { - String knowledge = entry.getKey(); - double totalScore = entry.getValue(); - int examCount = knowledgeExamCount.getOrDefault(knowledge, 1); // 避免除零 - double averageScore = totalScore / examCount; - knowledgeAverageScore.put(knowledge, averageScore); + // 计算每个知识点的最终平均分(所有考试平均分的平均) + for (String knowledge : knowledgeTotalAverage.keySet()) { + double totalAverage = knowledgeTotalAverage.get(knowledge); + int examCount = knowledgeExamCount.getOrDefault(knowledge, 1); + double finalAverage = totalAverage / examCount; + knowledgeTotalScore.put(knowledge, finalAverage); } - // 返回知识点平均分 - return knowledgeAverageScore.entrySet().stream() + // 返回知识点平均分对象列表 + return knowledgeTotalScore.entrySet().stream() .map(entry -> new KnowledgeScoreRate(entry.getKey(), entry.getValue())) .collect(Collectors.toList()); } diff --git a/src/main/java/cn/teammodel/repository/AppraiseRecordRepository.java b/src/main/java/cn/teammodel/repository/AppraiseRecordRepository.java index 389461e..5f22bdc 100644 --- a/src/main/java/cn/teammodel/repository/AppraiseRecordRepository.java +++ b/src/main/java/cn/teammodel/repository/AppraiseRecordRepository.java @@ -72,7 +72,7 @@ public interface AppraiseRecordRepository extends CosmosRepository= @startTime) and " +