每日总结

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);
}

}
屏幕截图 2026-01-06 003823

posted @ 2025-11-25 19:03  李蕊lr  阅读(1)  评论(0)    收藏  举报