update 调整算法

develop
hhb@hotmail.com 2 months ago
parent 523de5aed6
commit 8ec3179cbb

@ -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<String, Object>() {{
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<String, List<Double>> points,
Map<String, Double> knowledgeTotalScore) {
// 记录每个知识点的考试次数
// 记录每个知识点在所有考试中的平均分总和及考试次数
Map<String, Double> knowledgeTotalAverage = new HashMap<>();
Map<String, Integer> 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<List<String>> knowledgeList = knowledgeMap.get(examResult.getExamId());
List<Double> point = points.get(examResult.getExamId());
if (knowledgeList == null) continue;
List<Double> pointList = points.get(examResult.getExamId());
if (knowledgeList == null || pointList == null) continue;
// 检查 studentScores 是否为空或越界
// 获取学生的得分列表
List<List<Double>> studentScores = examResult.getStudentScores();
if (studentIndex >= studentScores.size() || studentScores.get(studentIndex) == null) {
continue;
}
// 获取当前学生的成绩列表
if (studentIndex >= studentScores.size() || studentScores.get(studentIndex) == null) continue;
List<Double> studentScoreList = studentScores.get(studentIndex);
// 确保知识列表、分数列表和学生成绩列表的大小一致
if (knowledgeList.size() != point.size() || knowledgeList.size() != studentScoreList.size()) {
continue;
}
// 确保数据一致性
if (knowledgeList.size() != studentScoreList.size()) continue;
// 遍历每道题的得分和知识点
// 记录当前考试中每个知识点的总得分和题目数量
Map<String, Double> currentExamKnowledgeTotal = new HashMap<>();
Map<String, Integer> 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);
// 累加当前考试中该知识点的总得分和题目数量
currentExamKnowledgeTotal.merge(knowledge, score, Double::sum);
currentExamKnowledgeCount.merge(knowledge, 1, Integer::sum);
}
// 累加知识点总分
knowledgeTotalScore.put(knowledge, knowledgeTotalScore.getOrDefault(knowledge, 0.0) + studentScore);
// 计算当前考试中每个知识点的平均分,并累加到总平均分
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<String, Double> knowledgeAverageScore = new HashMap<>();
for (Map.Entry<String, Double> 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());
}

@ -72,7 +72,7 @@ public interface AppraiseRecordRepository extends CosmosRepository<AppraiseRecor
/**
* ,
*/
@Query("select c.id as recordId, c.name as targetName, c.avatar, c.classId,c.className, n.id as recordNodeId, c.targetId, c.targetType, n.creator, n.createTime, n.appraiseNode.name as appraiseName, n.appraiseNode.isPraise, n.device from Student as c join n in c.nodes where " +
@Query("select c.id as recordId, c.name as targetName, c.avatar, c.classId,c.className, n.id as recordNodeId, c.targetId, c.targetType, n.creator, n.createTime, n.appraiseNode.name as appraiseName, n.appraiseNode.isPraise, n.device ,n.appraiseNode.path from Student as c join n in c.nodes where " +
"c.code = @code and " +
"c.academicYearId = @academicYearId and " +
"(IS_NULL(@startTime) or n.createTime >= @startTime) and " +

Loading…
Cancel
Save