From e47903b31d536ade0dd72a4799cca5f058bd7a96 Mon Sep 17 00:00:00 2001 From: "hhb@hotmail.com" Date: Wed, 19 Mar 2025 17:49:52 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E8=B0=83=E6=95=B4=E7=AE=97=E6=B3=95?= =?UTF-8?q?=E5=92=8C=E8=BF=94=E5=9B=9E=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/LaborEducationServiceImpl.java | 169 +++++++---------- .../impl/MoralEducationServiceImpl.java | 179 ++++++++---------- .../cn/teammodel/model/vo/Common/ExamVo.java | 20 ++ .../teammodel/repository/ExamRepository.java | 5 +- .../repository/LessonRecordRepository.java | 2 +- 5 files changed, 170 insertions(+), 205 deletions(-) create mode 100644 src/main/java/cn/teammodel/model/vo/Common/ExamVo.java 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 e49a353..ac44cc5 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 @@ -18,6 +18,7 @@ import cn.teammodel.model.entity.common.ExamClassResult; import cn.teammodel.model.entity.school.ClassInfo; import cn.teammodel.model.entity.school.LessonRecord; import cn.teammodel.model.entity.school.School; +import cn.teammodel.model.vo.Common.ExamVo; import cn.teammodel.model.vo.admin.GradeAndClassVo; import cn.teammodel.model.vo.appraise.RecordVo; import cn.teammodel.repository.*; @@ -146,7 +147,7 @@ public class LaborEducationServiceImpl implements LaborEducationService { } //examIds.add("c26e5766-597f-45b3-91ad-19e76426323b"); //获取所有课程下的课中活动 - List exams = new ArrayList<>(); + List exams = new ArrayList<>(); if (!recordIds.isEmpty()) { exams = examRepository.findExamsByIds(laborDto.getSource(),recordIds); exams = exams.stream() @@ -155,7 +156,17 @@ public class LaborEducationServiceImpl implements LaborEducationService { } Map>> knowledgeMap = new HashMap<>(); Map> point = new HashMap<>(); - for (Exam exam : exams) { + List examIds = new ArrayList<>(); + for (ExamVo exam : exams) { + examIds.add(exam.getId()); + String lessonRecordId = exam.getLessonRecordId(); // 获取 lessonRecordId + Optional recordOptional = records.stream() + .filter(record -> record.getId().equals(lessonRecordId)) + .findFirst(); + if (recordOptional.isPresent()) { + LessonRecord record = recordOptional.get(); + exam.setRecordName(record.getName()); // 设置 recordName + } if (exam.getPapers() != null) { if (exam.getPapers().get(0).getKnowledge() != null) { @@ -164,10 +175,6 @@ public class LaborEducationServiceImpl implements LaborEducationService { } } } - List examIds = new ArrayList<>(); - for (Exam exam : exams) { - examIds.add(exam.getId()); - } List examResults = new ArrayList<>(); if (!examIds.isEmpty()) { examResults = examClassResultRepository.findAll(String.format(PK.CLASS_RESULT, laborDto.getCode()),examIds); @@ -272,21 +279,16 @@ public class LaborEducationServiceImpl implements LaborEducationService { int count = entry.getValue(); // 次数 // 确保 count 不小于0 if (count < 0) { - count = 0; //次数永远不能为负数 + count = 0; } - double maxCount = 50.0; // 最大次数(可根据实际情况调整) + double maxCount = 50.0; // 调整此参数控制分数增长速率 - // 将次数转换为 60-100 的分数(60分基础,额外加分不超过40分) - double convertedScore; - if (count > maxCount) { - convertedScore = 100.0; // 超过最大次数,直接满分 - } else { - // 计算额外加分(占总40分的比例) - double additionalScore = (count / maxCount) * 40; - convertedScore = 60 + additionalScore; - // 保留两位小数 - convertedScore = Double.parseDouble(String.format("%.2f", convertedScore)); - } + // 使用反比例函数计算加分 + double additionalScore = 40.0 * ((double) count / (count + maxCount)); + double convertedScore = 60.0 + additionalScore; + + // 保留两位小数 + convertedScore = Double.parseDouble(String.format("%.2f", convertedScore)); subjectiveTotal += convertedScore; // 获取对应知识块的客观成绩,并转换为基于60分加分的分数 @@ -544,11 +546,18 @@ public class LaborEducationServiceImpl implements LaborEducationService { } } - // 计算父节点的平均得分 + // 计算父节点的平均得分(原始正确率)后,转换为基于60分的加分制 parentNodeScoreRates.replaceAll((parentNodeName, totalScore) -> { int count = parentNodeScoreCount.getOrDefault(parentNodeName, 1); - double averageScore = totalScore / count; - return Math.min(100.0, Math.max(60.0, averageScore)); // 确保得分在60-100之间 + double averageScore = totalScore / count; // 原始正确率(0-100的百分比) + + // 将原始正确率转换为以60分为基础的加分制(正确率 × 40%) + double correctRate = averageScore / 100.0; // 转为0-1的小数 + double convertedScore = 60.0 + (correctRate * 40.0); // 最低60分,最高100分 + + // 确保不超过100分,并保留两位小数 + convertedScore = Math.min(100.0, convertedScore); + return Double.parseDouble(String.format("%.2f", convertedScore)); }); // 初始化所有同层的父节点 @@ -693,18 +702,18 @@ public class LaborEducationServiceImpl implements LaborEducationService { for (Map.Entry entry : scores.entrySet()) { String block = entry.getKey(); int count = entry.getValue(); - double maxCount = 50.0; - // 将次数转换为 60-100 的分数(60分基础,额外加分不超过40分) - double convertedScore; - if (count > maxCount) { - convertedScore = 100.0; // 超过最大次数,直接满分 - } else { - // 计算额外加分(占总40分的比例) - double additionalScore = (count / maxCount) * 40; - convertedScore = 60 + additionalScore; - // 保留两位小数 - convertedScore = Double.parseDouble(String.format("%.2f", convertedScore)); + // 确保 count 不小于0 + if (count < 0) { + count = 0; } + double maxCount = 50.0; // 调整此参数控制分数增长速率 + + // 使用反比例函数计算加分 + double additionalScore = 40.0 * ((double) count / (count + maxCount)); + double convertedScore = 60.0 + additionalScore; + + // 保留两位小数 + convertedScore = Double.parseDouble(String.format("%.2f", convertedScore)); convertedScores.put(block, convertedScore); } @@ -987,18 +996,18 @@ public class LaborEducationServiceImpl implements LaborEducationService { for (Map.Entry entry : scores.entrySet()) { String block = entry.getKey(); int count = entry.getValue(); - double maxCount = 50.0; - // 将次数转换为 60-100 的分数(60分基础,额外加分不超过40分) - double convertedScore; - if (count > maxCount) { - convertedScore = 100.0; // 超过最大次数,直接满分 - } else { - // 计算额外加分(占总40分的比例) - double additionalScore = (count / maxCount) * 40; - convertedScore = 60 + additionalScore; - // 保留两位小数 - convertedScore = Double.parseDouble(String.format("%.2f", convertedScore)); + // 确保 count 不小于0 + if (count < 0) { + count = 0; } + double maxCount = 50.0; // 调整此参数控制分数增长速率 + + // 使用反比例函数计算加分 + double additionalScore = 40.0 * ((double) count / (count + maxCount)); + double convertedScore = 60.0 + additionalScore; + + // 保留两位小数 + convertedScore = Double.parseDouble(String.format("%.2f", convertedScore)); convertedScores.put(block, convertedScore); } subjectiveScores.put(studentId, convertedScores); @@ -1161,106 +1170,66 @@ public class LaborEducationServiceImpl implements LaborEducationService { List period, List gradeAndClassVos) { - // 1. 获取全校所有年级的客观分数 + // 1. 初始化数据结构 Map> gradeScores = new HashMap<>(); Map schoolScores = new HashMap<>(); - - // 获取所有年级的 ID List gradeIds = period.stream() .flatMap(period1 -> period1.getGrades().stream()) .collect(Collectors.toList()); + int totalClassCount = 0; // 新增:全校总班级数统计 - // 2. 获取全校所有学生的主观分数(次数) - List> subjectiveScoresList = calculateScoresWithDetails(res, appraise); - - // 3. 将主观次数转换为0-100分数 - //Map> subjectiveScores = new HashMap<>(); - for (Map studentScore : subjectiveScoresList) { - String studentId = (String) studentScore.get("studentId"); - @SuppressWarnings("unchecked") - Map scores = (Map) studentScore.get("scores"); - Map convertedScores = new HashMap<>(); - - for (Map.Entry entry : scores.entrySet()) { - String block = entry.getKey(); - int count = entry.getValue(); - double maxCount = 50.0; - // 将次数转换为 60-100 的分数(60分基础,额外加分不超过40分) - double convertedScore; - if (count > maxCount) { - convertedScore = 100.0; // 超过最大次数,直接满分 - } else { - // 计算额外加分(占总40分的比例) - double additionalScore = (count / maxCount) * 40; - convertedScore = 60 + additionalScore; - // 保留两位小数 - convertedScore = Double.parseDouble(String.format("%.2f", convertedScore)); - } - convertedScores.put(block, convertedScore); - } - - //subjectiveScores.put(studentId, convertedScores); - } - - // 4. 遍历所有年级 + // 2. 遍历所有年级 int index = 0; for (String gradeId : gradeIds) { - // 调用改造后的方法,返回的 gradeResult 包含列表结构的 gradeScores 和 classScores Map gradeResult = calculateKnowledgeScoreForGrade( String.valueOf(index), examResults, knowledgeMap, appraise, points, res, gradeAndClassVos ); - // 1. 提取年级平均得分(gradeScores) + // 2.1 提取年级平均分 List> adjustedGradeScores = (List>) gradeResult.get("gradeScores"); Map gradeScoresInner = new HashMap<>(); - - // 遍历年级得分列表(通常只有一个元素) for (Map gradeScoreEntry : adjustedGradeScores) { - String gradeName = (String) gradeScoreEntry.get("gradeName"); List> blocks = (List>) gradeScoreEntry.get("blocks"); - - // 将 blocks 转换为 Map for (Map block : blocks) { String nodeName = (String) block.get("name"); Double score = (Double) block.get("score"); gradeScoresInner.put(nodeName, score); } } - - // 保存年级得分 gradeScores.put(gradeId, gradeScoresInner); - // 2. 累加全校得分总和(从 classScores 中提取) + // 2.2 累加全校总分并统计班级数 List> adjustedClassScores = (List>) gradeResult.get("classScores"); - + totalClassCount += adjustedClassScores.size(); // 累加班级数 for (Map classScoreEntry : adjustedClassScores) { List> classBlocks = (List>) classScoreEntry.get("blocks"); - - // 遍历班级的每个评分项 for (Map block : classBlocks) { String nodeName = (String) block.get("name"); Double score = (Double) block.get("score"); schoolScores.put(nodeName, schoolScores.getOrDefault(nodeName, 0.0) + score); } } - index++; } - // 5. 计算全校的平均得分 + // 3. 计算全校平均分 if (gradeIds.size() == 1) { schoolScores.putAll(gradeScores.get(gradeIds.iterator().next())); } else { - // 计算全校的平均得分 for (Map.Entry entry : schoolScores.entrySet()) { String nodeName = entry.getKey(); double totalScore = entry.getValue(); - int totalCount = schoolScores.size(); // 每个年级视为一个单位 - schoolScores.put(nodeName, Double.parseDouble(String.format("%.2f", totalScore / totalCount))); // 保留小数点后两位 + if (totalClassCount == 0) { + schoolScores.put(nodeName, 0.0); + } else { + double average = totalScore / totalClassCount; + average = Double.parseDouble(String.format("%.2f", average)); + schoolScores.put(nodeName, average); + } } } - // 6. 初始化所有同层的父节点 + // 4. 初始化未参与计算的父节点(保持默认0分) for (AppraiseTreeNode node : appraise.getNodes()) { if (node.getName().equals("德育")) { for (AppraiseTreeNode child : node.getChildren()) { @@ -1271,7 +1240,7 @@ public class LaborEducationServiceImpl implements LaborEducationService { } } - // 7. 转换 gradeScores 为新的数据结构 + // 5. 转换数据结构并返回 return getResult(gradeScores, schoolScores); } diff --git a/src/main/java/cn/teammodel/controller/admin/service/impl/MoralEducationServiceImpl.java b/src/main/java/cn/teammodel/controller/admin/service/impl/MoralEducationServiceImpl.java index f2ba49d..2cb7184 100644 --- a/src/main/java/cn/teammodel/controller/admin/service/impl/MoralEducationServiceImpl.java +++ b/src/main/java/cn/teammodel/controller/admin/service/impl/MoralEducationServiceImpl.java @@ -18,6 +18,7 @@ import cn.teammodel.model.entity.common.ExamClassResult; import cn.teammodel.model.entity.school.ClassInfo; import cn.teammodel.model.entity.school.LessonRecord; import cn.teammodel.model.entity.school.School; +import cn.teammodel.model.vo.Common.ExamVo; import cn.teammodel.model.vo.admin.GradeAndClassVo; import cn.teammodel.model.vo.appraise.RecordVo; import cn.teammodel.repository.*; @@ -146,7 +147,7 @@ public class MoralEducationServiceImpl implements MoralEducationService { } //examIds.add("c26e5766-597f-45b3-91ad-19e76426323b"); //获取所有课程下的课中活动 - List exams = new ArrayList<>(); + List exams = new ArrayList<>(); if (!recordIds.isEmpty()) { exams = examRepository.findExamsByIds(laborDto.getSource(),recordIds); exams = exams.stream() @@ -155,7 +156,17 @@ public class MoralEducationServiceImpl implements MoralEducationService { } Map>> knowledgeMap = new HashMap<>(); Map> point = new HashMap<>(); - for (Exam exam : exams) { + List examIds = new ArrayList<>(); + for (ExamVo exam : exams) { + examIds.add(exam.getId()); + String lessonRecordId = exam.getLessonRecordId(); // 获取 lessonRecordId + Optional recordOptional = records.stream() + .filter(record -> record.getId().equals(lessonRecordId)) + .findFirst(); + if (recordOptional.isPresent()) { + LessonRecord record = recordOptional.get(); + exam.setRecordName(record.getName()); // 设置 recordName + } if (exam.getPapers() != null) { if (exam.getPapers().get(0).getKnowledge() != null) { @@ -164,10 +175,6 @@ public class MoralEducationServiceImpl implements MoralEducationService { } } } - List examIds = new ArrayList<>(); - for (Exam exam : exams) { - examIds.add(exam.getId()); - } List examResults = new ArrayList<>(); if (!examIds.isEmpty()) { examResults = examClassResultRepository.findAll(String.format(PK.CLASS_RESULT, laborDto.getCode()),examIds); @@ -272,26 +279,27 @@ public class MoralEducationServiceImpl implements MoralEducationService { int count = entry.getValue(); // 次数 // 确保 count 不小于0 if (count < 0) { - count = 0; //次数永远不能为负数 + count = 0; } - double maxCount = 50.0; // 最大次数(可根据实际情况调整) + double maxCount = 50.0; // 调整此参数控制分数增长速率 - // 将次数转换为 60-100 的分数(60分基础,额外加分不超过40分) - double convertedScore; - if (count > maxCount) { - convertedScore = 100.0; // 超过最大次数,直接满分 - } else { - // 计算额外加分(占总40分的比例) - double additionalScore = (count / maxCount) * 40; - convertedScore = 60 + additionalScore; - // 保留两位小数 - convertedScore = Double.parseDouble(String.format("%.2f", convertedScore)); - } + // 使用反比例函数计算加分 + double additionalScore = 40.0 * ((double) count / (count + maxCount)); + double convertedScore = 60.0 + additionalScore; + + // 保留两位小数 + convertedScore = Double.parseDouble(String.format("%.2f", convertedScore)); subjectiveTotal += convertedScore; - // 获取对应知识块的客观成绩,并确保在60-100之间 + // 获取对应知识块的客观成绩,并转换为基于60分加分的分数 double objectiveScore = knowledgeBlockScores.get(knowledgeBlock); - objectiveScore = Math.max(60.0, Math.min(100.0, objectiveScore)); // 确保60-100分 + // 转换为正确率的小数形式(假设原始分是百分比) + double correctRate = objectiveScore / 100.0; + objectiveScore = 60.0 + correctRate * 40.0; + // 确保不超过100分 + objectiveScore = Math.min(100.0, objectiveScore); + // 保留两位小数 + objectiveScore = Double.parseDouble(String.format("%.2f", objectiveScore)); objectiveTotal += objectiveScore; // 计算综合得分(主观占60%,客观占40%) @@ -538,11 +546,18 @@ public class MoralEducationServiceImpl implements MoralEducationService { } } - // 计算父节点的平均得分 + // 计算父节点的平均得分(原始正确率)后,转换为基于60分的加分制 parentNodeScoreRates.replaceAll((parentNodeName, totalScore) -> { int count = parentNodeScoreCount.getOrDefault(parentNodeName, 1); - double averageScore = totalScore / count; - return Math.min(100.0, Math.max(60.0, averageScore)); // 确保得分在60-100之间 + double averageScore = totalScore / count; // 原始正确率(0-100的百分比) + + // 将原始正确率转换为以60分为基础的加分制(正确率 × 40%) + double correctRate = averageScore / 100.0; // 转为0-1的小数 + double convertedScore = 60.0 + (correctRate * 40.0); // 最低60分,最高100分 + + // 确保不超过100分,并保留两位小数 + convertedScore = Math.min(100.0, convertedScore); + return Double.parseDouble(String.format("%.2f", convertedScore)); }); // 初始化所有同层的父节点 @@ -687,18 +702,18 @@ public class MoralEducationServiceImpl implements MoralEducationService { for (Map.Entry entry : scores.entrySet()) { String block = entry.getKey(); int count = entry.getValue(); - double maxCount = 50.0; - // 将次数转换为 60-100 的分数(60分基础,额外加分不超过40分) - double convertedScore; - if (count > maxCount) { - convertedScore = 100.0; // 超过最大次数,直接满分 - } else { - // 计算额外加分(占总40分的比例) - double additionalScore = (count / maxCount) * 40; - convertedScore = 60 + additionalScore; - // 保留两位小数 - convertedScore = Double.parseDouble(String.format("%.2f", convertedScore)); + // 确保 count 不小于0 + if (count < 0) { + count = 0; } + double maxCount = 50.0; // 调整此参数控制分数增长速率 + + // 使用反比例函数计算加分 + double additionalScore = 40.0 * ((double) count / (count + maxCount)); + double convertedScore = 60.0 + additionalScore; + + // 保留两位小数 + convertedScore = Double.parseDouble(String.format("%.2f", convertedScore)); convertedScores.put(block, convertedScore); } @@ -981,18 +996,18 @@ public class MoralEducationServiceImpl implements MoralEducationService { for (Map.Entry entry : scores.entrySet()) { String block = entry.getKey(); int count = entry.getValue(); - double maxCount = 50.0; - // 将次数转换为 60-100 的分数(60分基础,额外加分不超过40分) - double convertedScore; - if (count > maxCount) { - convertedScore = 100.0; // 超过最大次数,直接满分 - } else { - // 计算额外加分(占总40分的比例) - double additionalScore = (count / maxCount) * 40; - convertedScore = 60 + additionalScore; - // 保留两位小数 - convertedScore = Double.parseDouble(String.format("%.2f", convertedScore)); + // 确保 count 不小于0 + if (count < 0) { + count = 0; } + double maxCount = 50.0; // 调整此参数控制分数增长速率 + + // 使用反比例函数计算加分 + double additionalScore = 40.0 * ((double) count / (count + maxCount)); + double convertedScore = 60.0 + additionalScore; + + // 保留两位小数 + convertedScore = Double.parseDouble(String.format("%.2f", convertedScore)); convertedScores.put(block, convertedScore); } subjectiveScores.put(studentId, convertedScores); @@ -1155,106 +1170,66 @@ public class MoralEducationServiceImpl implements MoralEducationService { List period, List gradeAndClassVos) { - // 1. 获取全校所有年级的客观分数 + // 1. 初始化数据结构 Map> gradeScores = new HashMap<>(); Map schoolScores = new HashMap<>(); - - // 获取所有年级的 ID List gradeIds = period.stream() .flatMap(period1 -> period1.getGrades().stream()) .collect(Collectors.toList()); + int totalClassCount = 0; // 新增:全校总班级数统计 - // 2. 获取全校所有学生的主观分数(次数) - List> subjectiveScoresList = calculateScoresWithDetails(res, appraise); - - // 3. 将主观次数转换为0-100分数 - //Map> subjectiveScores = new HashMap<>(); - for (Map studentScore : subjectiveScoresList) { - String studentId = (String) studentScore.get("studentId"); - @SuppressWarnings("unchecked") - Map scores = (Map) studentScore.get("scores"); - Map convertedScores = new HashMap<>(); - - for (Map.Entry entry : scores.entrySet()) { - String block = entry.getKey(); - int count = entry.getValue(); - double maxCount = 50.0; - // 将次数转换为 60-100 的分数(60分基础,额外加分不超过40分) - double convertedScore; - if (count > maxCount) { - convertedScore = 100.0; // 超过最大次数,直接满分 - } else { - // 计算额外加分(占总40分的比例) - double additionalScore = (count / maxCount) * 40; - convertedScore = 60 + additionalScore; - // 保留两位小数 - convertedScore = Double.parseDouble(String.format("%.2f", convertedScore)); - } - convertedScores.put(block, convertedScore); - } - - //subjectiveScores.put(studentId, convertedScores); - } - - // 4. 遍历所有年级 + // 2. 遍历所有年级 int index = 0; for (String gradeId : gradeIds) { - // 调用改造后的方法,返回的 gradeResult 包含列表结构的 gradeScores 和 classScores Map gradeResult = calculateKnowledgeScoreForGrade( String.valueOf(index), examResults, knowledgeMap, appraise, points, res, gradeAndClassVos ); - // 1. 提取年级平均得分(gradeScores) + // 2.1 提取年级平均分 List> adjustedGradeScores = (List>) gradeResult.get("gradeScores"); Map gradeScoresInner = new HashMap<>(); - - // 遍历年级得分列表(通常只有一个元素) for (Map gradeScoreEntry : adjustedGradeScores) { - String gradeName = (String) gradeScoreEntry.get("gradeName"); List> blocks = (List>) gradeScoreEntry.get("blocks"); - - // 将 blocks 转换为 Map for (Map block : blocks) { String nodeName = (String) block.get("name"); Double score = (Double) block.get("score"); gradeScoresInner.put(nodeName, score); } } - - // 保存年级得分 gradeScores.put(gradeId, gradeScoresInner); - // 2. 累加全校得分总和(从 classScores 中提取) + // 2.2 累加全校总分并统计班级数 List> adjustedClassScores = (List>) gradeResult.get("classScores"); - + totalClassCount += adjustedClassScores.size(); // 累加班级数 for (Map classScoreEntry : adjustedClassScores) { List> classBlocks = (List>) classScoreEntry.get("blocks"); - - // 遍历班级的每个评分项 for (Map block : classBlocks) { String nodeName = (String) block.get("name"); Double score = (Double) block.get("score"); schoolScores.put(nodeName, schoolScores.getOrDefault(nodeName, 0.0) + score); } } - index++; } - // 5. 计算全校的平均得分 + // 3. 计算全校平均分 if (gradeIds.size() == 1) { schoolScores.putAll(gradeScores.get(gradeIds.iterator().next())); } else { - // 计算全校的平均得分 for (Map.Entry entry : schoolScores.entrySet()) { String nodeName = entry.getKey(); double totalScore = entry.getValue(); - int totalCount = schoolScores.size(); // 每个年级视为一个单位 - schoolScores.put(nodeName, Double.parseDouble(String.format("%.2f", totalScore / totalCount))); // 保留小数点后两位 + if (totalClassCount == 0) { + schoolScores.put(nodeName, 0.0); + } else { + double average = totalScore / totalClassCount; + average = Double.parseDouble(String.format("%.2f", average)); + schoolScores.put(nodeName, average); + } } } - // 6. 初始化所有同层的父节点 + // 4. 初始化未参与计算的父节点(保持默认0分) for (AppraiseTreeNode node : appraise.getNodes()) { if (node.getName().equals("劳育")) { for (AppraiseTreeNode child : node.getChildren()) { @@ -1265,7 +1240,7 @@ public class MoralEducationServiceImpl implements MoralEducationService { } } - // 7. 转换 gradeScores 为新的数据结构 + // 5. 转换数据结构并返回 return getResult(gradeScores, schoolScores); } diff --git a/src/main/java/cn/teammodel/model/vo/Common/ExamVo.java b/src/main/java/cn/teammodel/model/vo/Common/ExamVo.java new file mode 100644 index 0000000..b7b89e3 --- /dev/null +++ b/src/main/java/cn/teammodel/model/vo/Common/ExamVo.java @@ -0,0 +1,20 @@ +package cn.teammodel.model.vo.Common; + + +import cn.teammodel.model.entity.common.Exam; +import lombok.Data; + +import java.util.List; +@Data +public class ExamVo { + private String id; + private String name; + private String school; + public int stuCount; + public double average; + public List classes; + public long createTime; + public String recordName; + public List papers; + public String lessonRecordId; +} diff --git a/src/main/java/cn/teammodel/repository/ExamRepository.java b/src/main/java/cn/teammodel/repository/ExamRepository.java index b198155..a84fe83 100644 --- a/src/main/java/cn/teammodel/repository/ExamRepository.java +++ b/src/main/java/cn/teammodel/repository/ExamRepository.java @@ -1,6 +1,7 @@ package cn.teammodel.repository; import cn.teammodel.model.entity.common.Exam; +import cn.teammodel.model.vo.Common.ExamVo; import com.azure.spring.data.cosmos.repository.CosmosRepository; import com.azure.spring.data.cosmos.repository.Query; import org.springframework.data.repository.query.Param; @@ -16,6 +17,6 @@ public interface ExamRepository extends CosmosRepository { List findExamByClassId(String code,String classId,String periodId,String subjectId); @Query("select * from Exam as s where s.code = @code and s.id = @id") List findExamById(@Param("code")String code, @Param("id")String id); - @Query("select s.id,s.name,s.average,s.classes,s.stuCount,s.createTime,s.papers from Exam as s where s.source = @source and s.lessonRecordId in (@ids)") - List findExamsByIds(String source, Collection ids); + @Query("select s.id,s.name,s.average,s.classes,s.stuCount,s.createTime,s.lessonRecordId,s.papers from Exam as s where s.source = @source and s.lessonRecordId in (@ids)") + List findExamsByIds(String source, Collection ids); } diff --git a/src/main/java/cn/teammodel/repository/LessonRecordRepository.java b/src/main/java/cn/teammodel/repository/LessonRecordRepository.java index 39bf6b2..8ed6041 100644 --- a/src/main/java/cn/teammodel/repository/LessonRecordRepository.java +++ b/src/main/java/cn/teammodel/repository/LessonRecordRepository.java @@ -12,7 +12,7 @@ import java.util.List; @Repository public interface LessonRecordRepository extends CosmosRepository { - @Query("select c.id,c.tmdid,c.groupIds,c.startTime,c.clientInteractionCount,c.clientInteractionAverge from LessonRecord as c where " + + @Query("select c.id,c.tmdid,c.name,c.groupIds,c.startTime,c.clientInteractionCount,c.clientInteractionAverge from LessonRecord as c where " + "c.code = @code and " + "(IS_NULL(@startTime) OR c.startTime >= @startTime) and " + "(IS_NULL(@endTime) OR c.startTime <= @endTime) and "+