Przeglądaj źródła

feat: 完成返回学生可视化结果的功能

181250114 4 lat temu
rodzic
commit
3a30b48c8f

+ 62 - 5
src/main/java/com/seecoder/dataanalysis/analysis/impl/EvalDataAnalysisServiceImpl.java

@@ -5,10 +5,7 @@ import com.seecoder.dataanalysis.data.dao.competency.CompetencyTreeDao;
 import com.seecoder.dataanalysis.data.dao.eval.EvalExamInfoDao;
 import com.seecoder.dataanalysis.data.dao.eval.EvalExamInfoDao;
 import com.seecoder.dataanalysis.data.dao.eval.EvalExamRecordDao;
 import com.seecoder.dataanalysis.data.dao.eval.EvalExamRecordDao;
 import com.seecoder.dataanalysis.data.dao.eval.QuestionDao;
 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.competency.*;
 import com.seecoder.dataanalysis.data.entity.eval.EvalExamInfo;
 import com.seecoder.dataanalysis.data.entity.eval.EvalExamInfo;
 import com.seecoder.dataanalysis.data.entity.eval.EvalExamRecord;
 import com.seecoder.dataanalysis.data.entity.eval.EvalExamRecord;
 import com.seecoder.dataanalysis.data.entity.eval.Question;
 import com.seecoder.dataanalysis.data.entity.eval.Question;
@@ -37,8 +34,68 @@ public class EvalDataAnalysisServiceImpl implements EvalDataAnalysisService {
     @Override
     @Override
     public CompetencyTree getTreeById(int userId){
     public CompetencyTree getTreeById(int userId){
         //TODO 和ModelTree进行合并,空值补0,返回可以用于可视化的结果
         //TODO 和ModelTree进行合并,空值补0,返回可以用于可视化的结果
+        Competencies competencies = new Competencies();
+        CompetencyTree modelTree = new CompetencyTree(competencies);
 
 
-        return null;
+        Optional<CompetencyTree> result = competencyTreeDao.findById(userId);
+        if(!result.isPresent()){
+            System.out.println("该学生的能力树不存在");
+        }
+
+        CompetencyTree competencyTree = competencyTreeDao.findById(userId).get();
+        modelTree.setTreeScore(competencyTree.getTreeScore());
+
+        List<KSDScore> modelKSD = modelTree.getSubCompetencyTree();
+        List<KSDScore> tarKSD = competencyTree.getSubCompetencyTree();
+
+        for(KSDScore ksdScore : tarKSD){
+            String tarCom = ksdScore.getCompetency();
+            List<KSScore> tarKS = ksdScore.getKSScore();
+            List<DScore> tarD = ksdScore.getDScore();
+
+            //找到对应的KSD树,开始进行KS和D的匹配
+            for(KSDScore KSDModel : modelKSD){
+                if(KSDModel.getCompetency().equals(tarCom)){
+                    KSDModel.setTotalScore(ksdScore.getTotalScore());
+                    //进行KS的匹配
+                    List<KSScore> modelKS = KSDModel.getKSScore();
+                    for(KSScore ksScore : tarKS){
+                        String tarSub = ksScore.getKnowledge();
+                        List<Double> tarSkillScore = ksScore.getSkillsAndScore();
+
+                        for(KSScore KSModel : modelKS){
+                            if(KSModel.getKnowledge().equals(tarSub)){
+                                List<Double> after = KSModel.getSkillsAndScore();
+                                for(int i=0;i<tarSkillScore.size();i++){
+                                    after.set(i,tarSkillScore.get(i));
+                                }
+                                KSModel.setSkillsAndScore(after);
+                                break;
+                            }
+                        }
+                    }
+                    KSDModel.setKSScore(modelKS);
+                    //进行D的匹配
+                    List<DScore> modelD = KSDModel.getDScore();
+                    for(DScore dScore : tarD){
+                        String tarName = dScore.getName();
+
+                        for(DScore DModel : modelD){
+                            if(DModel.getName().equals(tarName)){
+                                DModel.setScore(dScore.getScore());
+                                break;
+                            }
+                        }
+                    }
+                    KSDModel.setDScore(modelD);
+                    break;
+                }
+            }
+        }
+
+        modelTree.setSubCompetencyTree(modelKSD);
+
+        return modelTree;
     }
     }
 
 
     @Override
     @Override