每日总结
package com.mentalhealth.service;
import com.mentalhealth.entity.AssessmentResult;
import com.mentalhealth.entity.UserTestRecord;
import com.mentalhealth.repository.AssessmentResultRepository;
import com.mentalhealth.repository.UserTestRecordRepository;
import com.mentalhealth.repository.LearningPackageRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class AssessmentService {
private final AssessmentResultRepository assessmentResultRepository;
private final UserTestRecordRepository userTestRecordRepository;
private final LearningPackageRepository learningPackageRepository;
/**
* 生成评估报告
*/
@Transactional
public AssessmentResult generateAssessment(Long testRecordId) {
Optional<UserTestRecord> optionalTestRecord = userTestRecordRepository.findById(testRecordId);
if (!optionalTestRecord.isPresent()) {
throw new RuntimeException("测试记录不存在");
}
UserTestRecord testRecord = optionalTestRecord.get();
// 检查是否已经生成过评估报告
Optional<AssessmentResult> existingAssessment = assessmentResultRepository.findByTestRecordId(testRecordId);
if (existingAssessment.isPresent()) {
return existingAssessment.get();
}
// 计算正确率
double correctRate = (double) testRecord.getCorrectAnswers() / testRecord.getTotalQuestions();
// 生成学习效果评估
String learningEffectiveness = generateLearningEffectiveness(correctRate);
// 生成状态评估
String statusEvaluation = generateStatusEvaluation(correctRate, testRecord.getCompletionTime());
// 生成建议
String recommendations = generateRecommendations(correctRate, testRecord.getLearningPackageId());
// 生成分数分析
String scoreAnalysis = generateScoreAnalysis(correctRate, testRecord.getTotalQuestions(), testRecord.getCorrectAnswers());
// 创建评估结果
AssessmentResult assessmentResult = new AssessmentResult();
assessmentResult.setUserId(testRecord.getUserId());
assessmentResult.setTestRecordId(testRecord.getId());
assessmentResult.setLearningPackageId(testRecord.getLearningPackageId());
assessmentResult.setAssessmentContent(generateAssessmentContent(learningEffectiveness, statusEvaluation, recommendations));
assessmentResult.setLearningEffectiveness(learningEffectiveness);
assessmentResult.setStatusEvaluation(statusEvaluation);
assessmentResult.setRecommendations(recommendations);
assessmentResult.setScoreAnalysis(scoreAnalysis);
return assessmentResultRepository.save(assessmentResult);
}
/**
* 生成学习效果评估
*/
private String generateLearningEffectiveness(double correctRate) {
if (correctRate >= 0.9) {
return "优秀:您对本学习包的知识点掌握非常扎实,已经达到了深入理解和应用的水平。";
} else if (correctRate >= 0.75) {
return "良好:您对本学习包的知识点掌握较好,能够理解并应用大部分内容。";
} else if (correctRate >= 0.6) {
return "及格:您对本学习包的知识点有基本的理解,但还需要进一步巩固。";
} else {
return "需要加强:您对本学习包的知识点掌握不足,建议重新学习相关内容。";
}
}
/**
* 生成状态评估
*/
private String generateStatusEvaluation(double correctRate, Integer completionTime) {
StringBuilder status = new StringBuilder();
if (correctRate >= 0.7) {
status.append("您在学习过程中表现出积极的学习态度和良好的学习能力,");
} else {
status.append("您可能需要调整学习方法或增加学习时间,");
}
if (completionTime != null && completionTime <= 10) {
status.append("答题速度较快,思维敏捷;");
} else if (completionTime != null && completionTime <= 15) {
status.append("答题速度适中,思考较为充分;");
} else {
status.append("答题速度较慢,可能需要更多时间理解问题;");
}
return status.toString();
}
/**
* 生成建议
*/
private String generateRecommendations(double correctRate, Long learningPackageId) {
List<String> recommendations = new ArrayList<>();
if (correctRate < 0.7) {
recommendations.add("建议重新学习本学习包的视频内容,重点关注错题相关的知识点");
} else if (correctRate < 0.9) {
recommendations.add("建议针对薄弱环节进行重点复习,进一步巩固知识点");
} else {
recommendations.add("建议尝试学习更高级的相关内容,拓展知识面");
}
recommendations.add("保持定期学习的习惯,结合实践应用加深理解");
recommendations.add("可以与咨询师进行沟通,获取个性化的学习建议");
recommendations.add("关注自己的心理状态变化,及时调整学习计划");
return String.join("\n", recommendations);
}
/**
* 生成分数分析
*/
private String generateScoreAnalysis(double correctRate, int totalQuestions, int correctAnswers) {
return String.format("本次测试共%d道题,答对%d道题,正确率%.1f%%。" +
"\n\n正确率分布:" +
"\n- 优秀(≥90%%):%.1f%%" +
"\n- 良好(75%%-89%%):%.1f%%" +
"\n- 及格(60%%-74%%):%.1f%%" +
"\n- 不及格(<60%%):%.1f%%",
totalQuestions, correctAnswers, correctRate * 100,
correctRate >= 0.9 ? correctRate * 100 : 0,
correctRate >= 0.75 && correctRate < 0.9 ? correctRate * 100 : 0,
correctRate >= 0.6 && correctRate < 0.75 ? correctRate * 100 : 0,
correctRate < 0.6 ? correctRate * 100 : 0);
}
/**
* 生成完整的评估内容
*/
private String generateAssessmentContent(String learningEffectiveness, String statusEvaluation, String recommendations) {
return "# 心理状态评估报告\n\n" +
"## 1. 学习效果评估\n" + learningEffectiveness + "\n\n" +
"## 2. 状态评估\n" + statusEvaluation + "\n\n" +
"## 3. 建议\n" + recommendations;
}
/**
* 获取用户的评估记录
*/
public List<AssessmentResult> getUserAssessmentResults(Long userId) {
return assessmentResultRepository.findByUserIdOrderByCreateTimeDesc(userId);
}
/**
* 获取用户的学习包评估记录
*/
public List<AssessmentResult> getUserAssessmentResultsByPackage(Long userId, Long learningPackageId) {
return assessmentResultRepository.findByUserIdAndLearningPackageIdOrderByCreateTimeDesc(userId, learningPackageId);
}
/**
* 获取评估结果详情
*/
public Optional<AssessmentResult> getAssessmentResultDetail(Long assessmentId) {
return assessmentResultRepository.findById(assessmentId);
}
/**
* 根据测试记录获取评估结果
*/
public Optional<AssessmentResult> getAssessmentByTestRecord(Long testRecordId) {
return assessmentResultRepository.findByTestRecordId(testRecordId);
}
}



浙公网安备 33010602011771号