|
|
@@ -4,13 +4,21 @@ 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
|
|
|
@@ -24,6 +32,8 @@ public class DataAnalysisServiceImpl implements DataAnalysisService {
|
|
|
private EvalExamInfoDao evalExamInfoDao;
|
|
|
@Autowired
|
|
|
private CompetencyTreeDao competencyTreeDao;
|
|
|
+ @Autowired
|
|
|
+ private QuestionDao questionDao;
|
|
|
|
|
|
@Override
|
|
|
public CompetencyTree getTreeById(int student_id){
|
|
|
@@ -32,12 +42,56 @@ public class DataAnalysisServiceImpl implements DataAnalysisService {
|
|
|
|
|
|
@Override
|
|
|
public CompetencyTree getTreeAfterExam(int exam_id){
|
|
|
- //TODO 记得写test测试查询方法是否有效(findById只能接受Sring?)
|
|
|
+ //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();
|
|
|
+ //得到学生所有题目的得分
|
|
|
+ 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);
|
|
|
+ //根据competency找大分类
|
|
|
+ for(KSDScore ksdScore : subTree){
|
|
|
+ if(ksdScore.getCompetency() == question.getCompetency()){
|
|
|
+// Double treeScore = competencyTree.getTreeScore();
|
|
|
+ List<KSScore> subKS = ksdScore.getKSScore();
|
|
|
+ //在对应的competency下进行下一步小分类
|
|
|
+ //修改K-S的分数
|
|
|
+ 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() == disposition){
|
|
|
+ Double score = percent + dScore.getScore();
|
|
|
+ dScore.setScore(score);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //处理完考试中的每个问题后,更新能力树
|
|
|
+ competencyTreeDao.save(competencyTree);
|
|
|
|
|
|
- return null;
|
|
|
+ return competencyTree;
|
|
|
}
|
|
|
}
|