Browse Source

feat: 增加KSD分析入库功能

181250114 4 năm trước cách đây
mục cha
commit
97e1937dfb

+ 56 - 2
src/main/java/com/seecoder/dataanalysis/analysis/impl/DataAnalysisServiceImpl.java

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