package com.seecoder.dataanalysis.analysis.impl; import com.seecoder.dataanalysis.analysis.DataAnalysisService; import com.seecoder.dataanalysis.data.dao.competency.CompetencyTreeDao; import com.seecoder.dataanalysis.data.dao.eval.EvalExamInfoDao; import com.seecoder.dataanalysis.data.dao.eval.EvalExamRecordDao; import com.seecoder.dataanalysis.data.dao.eval.QuestionDao; import com.seecoder.dataanalysis.data.entity.competency.CompetencyTree; import com.seecoder.dataanalysis.data.entity.competency.DScore; import com.seecoder.dataanalysis.data.entity.competency.KSDScore; import com.seecoder.dataanalysis.data.entity.competency.KSScore; import com.seecoder.dataanalysis.data.entity.eval.EvalExamInfo; import com.seecoder.dataanalysis.data.entity.eval.EvalExamRecord; import com.seecoder.dataanalysis.data.entity.eval.Question; import com.seecoder.dataanalysis.vo.EvalExamRecordDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; /** * @author Peng Yiyan * @since 2022/02/03 */ @Service public class DataAnalysisServiceImpl implements DataAnalysisService { @Autowired private EvalExamRecordDao evalExamRecordDao; @Autowired private EvalExamInfoDao evalExamInfoDao; @Autowired private CompetencyTreeDao competencyTreeDao; @Autowired private QuestionDao questionDao; @Override public CompetencyTree getTreeById(int student_id){ return null; } @Override public CompetencyTree getTreeAfterExam(int exam_id){ //TODO 测试检查 EvalExamRecord evalExamRecord = evalExamRecordDao.findById(exam_id).get(); EvalExamInfo evalExamInfo = evalExamInfoDao.findById(exam_id).get(); CompetencyTree competencyTree = competencyTreeDao.findByStudentId(evalExamRecord.getStudentId()); //数据取完,开始进行KSD分析和入库 List subTree = competencyTree.getSubCompetencyTree(); Integer difficulty = evalExamInfo.getDifficulty(); String disposition = evalExamInfo.getDisposition(); Double tree_Score = competencyTree.getTreeScore(); //得到学生所有题目的得分 Map studentScores = evalExamRecord.getErrorQuestions(); Map questionAndScore = evalExamInfo.getQuestionAndScore(); for(Map.Entry entry : studentScores.entrySet()){ String questionId = entry.getKey(); Question question = questionDao.findById(questionId).get(); //在能力树中加成的部分 = 学生得分 * 试卷难度 Double percent = difficulty * studentScores.get(questionId); tree_Score += percent; //根据competency找大分类 for(KSDScore ksdScore : subTree){ if(ksdScore.getCompetency().equals(question.getCompetency())){ //增加该能力子树的分数 Double total_score = ksdScore.getTotalScore(); total_score += percent; ksdScore.setTotalScore(total_score); //在对应的competency下进行下一步小分类 //修改K-S的分数 List subKS = ksdScore.getKSScore(); for(KSScore ksScore : subKS){ if(ksScore.getKnowledge() == question.getKsScore().getKnowledge()){ List Skills = ksScore.getSkillsAndScore(); for(int i=0;i subD = ksdScore.getDScore(); //修改Disposition的分数 for(DScore dScore : subD){ if(dScore.getName().equals(disposition)){ Double score = percent + dScore.getScore(); dScore.setScore(score); break; } } } } } //处理完考试中的每个问题后,更新能力树 competencyTree.setTreeScore(tree_Score); competencyTreeDao.save(competencyTree); return competencyTree; } }