| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- 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<KSDScore> subTree = competencyTree.getSubCompetencyTree();
- Integer difficulty = evalExamInfo.getDifficulty();
- String disposition = evalExamInfo.getDisposition();
- Double tree_Score = competencyTree.getTreeScore();
- //得到学生所有题目的得分
- Map<String, Double> studentScores = evalExamRecord.getErrorQuestions();
- Map<String,Double> questionAndScore = evalExamInfo.getQuestionAndScore();
- for(Map.Entry<String, Double> 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<KSScore> subKS = ksdScore.getKSScore();
- for(KSScore ksScore : subKS){
- if(ksScore.getKnowledge() == question.getKsScore().getKnowledge()){
- List<Double> Skills = ksScore.getSkillsAndScore();
- for(int i=0;i<Skills.size();i++){
- Double score = question.getKsScore().getSkillsAndScore().get(i) * percent + Skills.get(i);
- Skills.set(i,score);
- }
- ksScore.setSkillsAndScore(Skills);
- break;
- }
- }
- List<DScore> 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;
- }
- }
|