Ver Fonte

feat: 增加能力树初始化功能

181250114 há 4 anos atrás
pai
commit
eac151ee73

+ 105 - 0
src/main/java/com/seecoder/dataanalysis/data/entity/competency/Competencies.java

@@ -0,0 +1,105 @@
+package com.seecoder.dataanalysis.data.entity.competency;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 所有的能力以及子分支(模拟传入的参数)
+ */
+@AllArgsConstructor
+@Accessors(chain = true)
+@Data
+public class Competencies{
+
+    /**
+     * 能力名称
+     */
+    List<String> competency;
+
+    /**
+     * 能力子分支
+     */
+    List<String[]> sub_competency;
+
+    /**
+     * 预先指定的disposition
+     */
+    List<String> dispositions;
+
+    public Competencies(){
+        List<String> competencyNameList = new ArrayList<>();
+        List<String[]> subCom = new ArrayList<>();
+
+        String[] sub1 = new String[]{"软件设计基础","软件体系结构","软件设计符号","软件设计策略与方法","软件设计的关键问题","软件设计工具"};
+        competencyNameList.add("软件设计");
+        subCom.add(sub1);
+
+        String[] sub2 = new String[]{"软件构造基础","管理软件构造","软件构造-实际考虑","构造技术","软件构造工具"};
+        competencyNameList.add("软件构造");
+        subCom.add(sub2);
+
+        String[] sub3 = new String[]{"软件维护基础","软件维护关键问题","维护过程","维护技术","软件维护工具"};
+        competencyNameList.add("软件维护");
+        subCom.add(sub3);
+
+        String[] sub4 = new String[]{"软件配置管理过程的管理","软甲配置标识","软件配置控制","软件配置状态核定","软件配置审计","软件发布管理与交付","软件配置管理工具"};
+        competencyNameList.add("软件配置管理");
+        subCom.add(sub4);
+
+        String[] sub5 = new String[]{"初始化和范围定义","软件项目规划","软件项目执行","审查和评估","结束","软件工程测量","软件工程管理工具"};
+        competencyNameList.add("软件工程管理");
+        subCom.add(sub5);
+
+        String[] sub6 = new String[]{"软件过程定义","软件生命周期","软件过程的评估和改进","软件度量","软件工程过程工具"};
+        competencyNameList.add("软件工程过程");
+        subCom.add(sub6);
+
+        String[] sub7 = new String[]{"建模方法","模型类型","模型分析","软件工程方法"};
+        competencyNameList.add("软件工程模型与方法");
+        subCom.add(sub7);
+
+        String[] sub8 = new String[]{"需求验证","软件需求-实际考虑","软件需求工具","软件需求基础","需求过程","需求捕获","需求分析","需求规约"};
+        competencyNameList.add("软件需求");
+        subCom.add(sub8);
+
+        String[] sub9 = new String[]{"测试相关测量","测试过程","软件测试工具","软件测试基础","测试级别","测试技术"};
+        competencyNameList.add("软件测试");
+        subCom.add(sub9);
+
+        String[] sub10 = new String[]{"软件质量基础","软件质量管理过程","软件质量-实际考虑","软件质量工具"};
+        competencyNameList.add("软件质量");
+        subCom.add(sub10);
+
+        String[] sub11 = new String[]{"职业技能","团队动力与心理学","沟通技巧"};
+        competencyNameList.add("软件工程职业实践");
+        subCom.add(sub11);
+
+        String[] sub12 = new String[]{"软件工程经济学基础","生命周期经济学","风险与不确定性","经济分析方法","软件工程经济学-实际考虑"};
+        competencyNameList.add("软件工程经济学");
+        subCom.add(sub12);
+
+        String[] sub13 = new String[]{"问题求解技巧","抽象化","程序设计基础","编程语言基础知识","调试工具和技巧","数据结构和数据表示","算法及其复杂性","系统的基本概念","计算机组织","编译基础","操作系统基础","数据库基础知识","网络通信基础","并行和分布式计算","基本用户的人因素","基础开发者的人因素","安全软件开发和维护"};
+        competencyNameList.add("计算基础");
+        subCom.add(sub13);
+
+        String[] sub14 = new String[]{"集合、关系、函数","逻辑基础","证明技巧","计数基础","图和数","离散概率","有限状态机","文法","数值精度、准确性、误差","数论","代数结构"};
+        competencyNameList.add("数学基础");
+        subCom.add(sub14);
+
+        String[] sub15 = new String[]{"实证方法与实验技术","统计分析","测量","工程设计","建模、仿真与原型","标准","根本原因"};
+        competencyNameList.add("工程基础");
+        subCom.add(sub15);
+
+        String[] dis = new String[]{"细心","专注度","热情","责任心"};
+        List<String> disList = Arrays.asList(dis);
+
+        this.competency = competencyNameList;
+        this.sub_competency = subCom;
+        this.dispositions = disList;
+    }
+}

+ 73 - 2
src/main/java/com/seecoder/dataanalysis/data/entity/competency/CompetencyTree.java

@@ -10,6 +10,7 @@ import org.springframework.data.mongodb.core.mapping.Document;
 import org.springframework.data.mongodb.core.mapping.Field;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 @Document(collection = "competency_tree")
@@ -42,9 +43,79 @@ public class CompetencyTree {
         this.subCompetencyTree = new ArrayList<>();
     }
 
-    public CompetencyTree initModelTree(){
+    /**
+     * 生成初始化好的能力树,用于可视化结果返回
+     * @return CompetencyTree 初始化好的能力树
+     */
+    public CompetencyTree(Competencies competencies){
         CompetencyTree competencyTree = new CompetencyTree();
-        return null;
+        List<String> comName = competencies.getCompetency();
+        List<String[]> subComName = competencies.getSub_competency();
+        List<String> disName = competencies.getDispositions();
+
+        this.userId = -1;
+        this.treeScore = 0.0;
+//        competencyTree.setUserId(-1);
+//        competencyTree.setTreeScore(0.0);
+        List<KSDScore> ksdScoreList = new ArrayList<>();
+        //为每个大分支新建KSDScore
+        for(int i=0;i<comName.size();i++){
+            KSDScore ksdScore = new KSDScore();
+            String com = comName.get(i);
+            String[] subs = subComName.get(i);
+
+            ksdScore.setCompetency(com);
+            ksdScore.setTotalScore(0.0);
+
+            List<KSScore> ksScoreList = new ArrayList<>();
+            //为每个小分支新建KSScore
+            for(int j=0;j<subs.length;j++){
+                KSScore ksScore = new KSScore();
+                String sub = subs[j];
+                ksScore.setKnowledge(sub);
+                Double[] doubles = new Double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
+                ksScore.setSkillsAndScore(Arrays.asList(doubles));
+
+                ksScoreList.add(ksScore);
+            }
+
+            //为每个大分支新建DScore
+            List<DScore> dScoreList = new ArrayList<>();
+            for(int j=0;j<disName.size();j++){
+                DScore dScore = new DScore();
+                dScore.setName(disName.get(j));
+                dScore.setScore(0.0);
+
+                dScoreList.add(dScore);
+            }
+
+            ksdScore.setKSScore(ksScoreList);
+            ksdScore.setDScore(dScoreList);
+
+            ksdScoreList.add(ksdScore);
+        }
+
+//        competencyTree.setSubCompetencyTree(ksdScoreList);
+        this.subCompetencyTree = ksdScoreList;
+
+    }
+
+    public void display(){
+        System.out.println(this.userId);
+        System.out.println(this.treeScore);
+        for(KSDScore ksdScore : this.subCompetencyTree){
+            System.out.println(ksdScore.getCompetency());
+            System.out.println(ksdScore.getTotalScore());
+            for(KSScore ksScore : ksdScore.getKSScore()){
+                System.out.print(ksScore.getKnowledge()+" ");
+            }
+            System.out.println();
+            for(DScore dScore : ksdScore.getDScore()){
+                System.out.print(dScore.getName()+" ");
+                System.out.println(dScore.getScore());
+            }
+        }
     }
 
 }
+

+ 3 - 3
src/test/java/com/seecoder/dataanalysis/DataAnalysisApplicationTests.java

@@ -60,8 +60,7 @@ class DataAnalysisApplicationTests {
         List<KSDScore> L3 = new ArrayList<>();
         L3.add(ksdScore);
         CompetencyTree competencyTree = new CompetencyTree()
-                .setCompetencyId(1)
-                .setStudentId(1)
+                .setUserId(2)
                 .setSubCompetencyTree(L3);
 
         competencyTreeDao.save(competencyTree);
@@ -83,11 +82,12 @@ class DataAnalysisApplicationTests {
         evalExamInfoDao.save(evalExamInfo);
 
         EvalExamRecord evalExamRecord = new EvalExamRecord()
+                .setRecordId(1)
                 .setExamId(1)
                 .setScore(20.0)
                 .setErrorQuestions(quesScore)
                 .setSubmitTime(new Date())
-                .setStudentId(1);
+                .setUserId(1);
         evalExamRecordDao.save(evalExamRecord);
     }
 

+ 23 - 0
src/test/java/com/seecoder/dataanalysis/eval/impl/EvalDataAnalysisServiceImplTest.java

@@ -0,0 +1,23 @@
+package com.seecoder.dataanalysis.eval.impl;
+
+import com.seecoder.dataanalysis.data.dao.competency.CompetencyTreeDao;
+import com.seecoder.dataanalysis.data.entity.competency.CompetencyTree;
+import com.seecoder.dataanalysis.data.entity.competency.Competencies;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+public class EvalDataAnalysisServiceImplTest {
+
+    @Autowired
+    CompetencyTreeDao competencyTreeDao;
+
+    @Test
+    void testModelTree(){
+        Competencies competencies = new Competencies();
+        CompetencyTree model = new CompetencyTree(competencies);
+        model.display();
+        competencyTreeDao.save(model);
+    }
+}