Bläddra i källkod

feat: 完成并测试现有能力树和模型树合并产生可视化结果的功能

181250114 4 år sedan
förälder
incheckning
b68826c757

+ 38 - 49
src/main/java/com/seecoder/dataanalysis/analysis/impl/EvalDataAnalysisServiceImpl.java

@@ -4,13 +4,11 @@ import com.seecoder.dataanalysis.analysis.EvalDataAnalysisService;
 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.*;
 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.logic.question.QuestionService;
-import com.sun.xml.internal.bind.v2.TODO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -42,6 +40,7 @@ public class EvalDataAnalysisServiceImpl implements EvalDataAnalysisService {
         Optional<CompetencyTree> result = competencyTreeDao.findById(userId);
         if(!result.isPresent()){
             System.out.println("该学生的能力树不存在");
+            return null;
         }
 
         CompetencyTree competencyTree = competencyTreeDao.findById(userId).get();
@@ -51,56 +50,47 @@ public class EvalDataAnalysisServiceImpl implements EvalDataAnalysisService {
         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;
-//                }
-//            }
-//        }
+        dfsInit(tarKSD,modelKSD);
 
         modelTree.setSubCompetencyTree(modelKSD);
 
         return modelTree;
     }
 
+    void dfsInit(List<KSDScore> tarKSD,List<KSDScore> modelKSD){
+        for(KSDScore ksdScore :tarKSD){
+            String tarCom1 = ksdScore.getCompetency();
+            //寻找在modelTree中对应的部分
+            for(KSDScore ksdModel : modelKSD){
+                if(ksdModel.getCompetency().equals(tarCom1)){
+                    //修改总分数
+                    ksdModel.setTotalScore(ksdScore.getTotalScore());
+                    //修改skills分数
+                    List<Double> after = ksdModel.getSkillsAndScores();
+                    for(int i=0;i<ksdScore.getSkillsAndScores().size();i++){
+                        after.set(i,ksdScore.getSkillsAndScores().get(i));
+                    }
+                    ksdModel.setSkillsAndScores(after);
+                    //修改Disposition分数
+                    if(ksdModel.getDScore()!=null && ksdModel.getDScore().size()>0){
+                        for(DScore dScore :ksdScore.getDScore()){
+                            for(DScore dModel : ksdModel.getDScore()){
+                                if(dScore.getName().equals(dModel.getName())){
+                                    dModel.setScore(dScore.getScore());
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                    //判断子树
+                    if(ksdScore.getChildren()!=null&&ksdScore.getChildren().size()>0){
+                        dfsInit(ksdScore.getChildren(),ksdModel.getChildren());
+                    }
+                }
+            }
+        }
+    }
+
     @Override
     public CompetencyTree getTreeAfterExam(int recordId) {
 
@@ -128,7 +118,6 @@ public class EvalDataAnalysisServiceImpl implements EvalDataAnalysisService {
         //难度由1-5,分别对应1.0, 1.25, 1.5, 1.75, 2.0的得分系数
         Integer difficulty = evalExamInfo.getDifficulty();
         String disposition = evalExamInfo.getDisposition();
-//        System.out.println(competencyTree);
         Double tree_Score = competencyTree.getTreeScore();
         double[] difficulty_percent = new double[]{1.0, 1.25, 1.5, 1.75, 2.0};
         //得到学生所有题目的得分
@@ -185,12 +174,12 @@ public class EvalDataAnalysisServiceImpl implements EvalDataAnalysisService {
         return competencyTree;
     }
 
-    public void dfs(List<KSDScore> sub,String disposition,Integer weight,Double addScore,String pre,String com){
+    void dfs(List<KSDScore> sub,String disposition,Integer weight,Double addScore,String pre,String com){
 //        System.out.println("start: "+com);
         boolean existCom = false;
         KSDScore changeKSD = new KSDScore();
         for (KSDScore ksdScore : sub) {
-            System.out.println(ksdScore.getCompetency());
+//            System.out.println(ksdScore.getCompetency());
             if (ksdScore.getCompetency().equals(pre+com)) {
                 existCom = true;
                 changeKSD = ksdScore;

+ 0 - 9
src/main/java/com/seecoder/dataanalysis/data/dao/eval/QuestionDao.java

@@ -1,9 +0,0 @@
-package com.seecoder.dataanalysis.data.dao.eval;
-
-import com.seecoder.dataanalysis.data.entity.eval.Question;
-import org.springframework.data.mongodb.repository.MongoRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface QuestionDao extends MongoRepository<Question, String> {
-}

+ 4 - 4
src/main/java/com/seecoder/dataanalysis/logic/question/Impl/QuestionServiceImpl.java

@@ -23,7 +23,7 @@ public class QuestionServiceImpl implements QuestionService {
         if(!response.isPresent()){
             System.out.println("不存在该题目");
         }
-        System.out.println(response.get());
+//        System.out.println(response.get());
 //        System.out.println();
         CompleteQuestionVO res = new CompleteQuestionVO();
 //        String[] testArray = new String[]{"SR.RV.RT"};
@@ -32,13 +32,13 @@ public class QuestionServiceImpl implements QuestionService {
 //        System.out.println(res);
 
         Question question = new Question(res);
-        for(String s : question.getCompetencies()) {
-            System.out.println(s);
+//        for(String s : question.getCompetencies()) {
+//            System.out.println(s);
 //            String[] cs = s.split("\\.");
 //            for(String s1 : cs){
 //                System.out.println(s1);
 //            }
-        }
+//        }
         return question;
     }
 }

+ 3 - 5
src/test/java/com/seecoder/dataanalysis/eval/impl/EvalDataAnalysisServiceImplTest.java

@@ -5,7 +5,6 @@ import com.seecoder.dataanalysis.controller.EvalController;
 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.*;
 import com.seecoder.dataanalysis.data.entity.eval.EvalExamInfo;
 import com.seecoder.dataanalysis.data.entity.eval.EvalExamRecord;
@@ -14,7 +13,6 @@ import com.seecoder.dataanalysis.logic.question.QuestionService;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.context.TestComponent;
 
 import java.util.*;
 
@@ -257,9 +255,9 @@ public class EvalDataAnalysisServiceImplTest {
     void testGetTreeById(){
 //        CompetencyTree model = evalDataAnalysisService.getTreeById(2);
         CompetencyTree model = (CompetencyTree)evalController.getTreeById(2).getContent();
-//        model.setUserId(3);
-//        competencyTreeDao.save(model);
-        model.display();
+        model.setUserId(10);
+        competencyTreeDao.save(model);
+        System.out.println(model);
     }
 
     @Test