فهرست منبع

Merge branch 'master' of http://gogs.seec.seecoder.cn/LiXueSong/DataAnalysis

sky 5 سال پیش
والد
کامیت
9558b5134d

+ 5 - 0
seec-data-server/pom.xml

@@ -50,6 +50,11 @@
 			<artifactId>spring-boot-starter-test</artifactId>
 			<scope>test</scope>
 		</dependency>
+		<dependency>
+			<groupId>de.siegmar</groupId>
+			<artifactId>fastcsv</artifactId>
+			<version>1.0.3</version>
+		</dependency>
 		<dependency>
 			<groupId>mysql</groupId>
 			<artifactId>mysql-connector-java</artifactId>

+ 4 - 0
seec-data-server/src/main/java/cn/seecoder/data/server/controller/KnowledgeController.java

@@ -80,4 +80,8 @@ public class KnowledgeController {
         return knowledgeService.getKnowledgeWeekCount(userId);
     }
 
+    @RequestMapping("/FAHP-score/{position}/{userId}")
+    public Double getFAHPScoreOnPosition(@PathVariable("position") String position,@PathVariable("userId") int userId){
+        return knowledgeService.getFAHPScoreOnPosition(position,userId);
+    }
 }

+ 9 - 1
seec-data-server/src/main/java/cn/seecoder/data/server/service/Impl/AnalysisServiceImpl.java

@@ -1,8 +1,17 @@
 package cn.seecoder.data.server.service.Impl;
 
+import cn.hutool.core.text.csv.CsvData;
+import cn.hutool.core.text.csv.CsvReader;
+import cn.hutool.core.text.csv.CsvRow;
+import cn.seecoder.data.server.repository.GeneralRecordRepository;
 import cn.seecoder.data.server.service.*;
 import org.springframework.stereotype.Service;
 
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
 import java.time.LocalDateTime;
 import java.util.HashMap;
 import java.util.Map;
@@ -83,7 +92,6 @@ public class AnalysisServiceImpl implements AnalysisService {
     }
 
 
-
 //    @Autowired
 //    private GeneralRecordRepository generalRecordRepository;
 //

+ 52 - 0
seec-data-server/src/main/java/cn/seecoder/data/server/service/Impl/KnowledgeServiceImpl.java

@@ -1,5 +1,8 @@
 package cn.seecoder.data.server.service.Impl;
 
+import cn.hutool.core.text.csv.CsvData;
+import cn.hutool.core.text.csv.CsvReader;
+import cn.hutool.core.text.csv.CsvRow;
 import cn.seecoder.bok.client.SeecoderBokClient;
 import cn.seecoder.bok.common.vo.InteractionVO;
 import cn.seecoder.bok.common.vo.QuestionVO;
@@ -18,6 +21,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.io.File;
+import java.nio.charset.StandardCharsets;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -237,6 +242,53 @@ public class KnowledgeServiceImpl implements KnowledgeService {
         return score;
     }
 
+    @Override
+    public Double getFAHPScoreOnPosition(String position,int userId) {
+        File file = new File(".\\seec-data-server\\src\\main\\java\\cn\\seecoder\\data\\server\\utils\\FAHPmatrix\\"+position+".csv");
+        CsvReader csvReader = new CsvReader();
+        csvReader.setContainsHeader(true);
+        CsvData csv = csvReader.read(file, StandardCharsets.UTF_8);
+        HashMap<String,Double> FAHPdata= new HashMap<>();
+        double div = 0;
+        double score = 0;
+        for (CsvRow row : csv.getRows())
+            div = div + Double.valueOf(row.get(1));
+        for (CsvRow row : csv.getRows())
+            FAHPdata.put(row.get(0),Double.valueOf(row.get(1))/div);
+
+//        List records = generalRecordRepository.getByUserIdMaxScore(userId);
+//        List<String> questionIds = new ArrayList<>();
+//        for(Object record : records){
+//            Object[] cells = (Object[]) record;
+//            questionIds.add((String) cells[0]);
+//        }
+//        List<QuestionVO> questionVOS = new ArrayList<>();
+//        List<String> knowledgeName = new ArrayList<>();
+//        for(int i=0;i<questionIds.size();i=i+10)
+//            questionVOS.addAll(seecoderBokClient.getQuestionListByIds(questionIds.subList(i,i+10>questionIds.size()?questionIds.size():i+10)));
+//        questionVOS.stream().map(a->a.getKnowledgeId()).forEach(ids->{
+//            if(ids!=null) {
+//                ids.stream().forEach(id -> {
+//                    knowledgeName.add(knowledgeRepository.findByAbbreviation(id).getName());
+//                });
+//            }
+//        });
+        KnowledgePointVO root = getTreeByPositionAndUser(position,userId);
+        score = calScore(root,FAHPdata);
+        return score;
+    }
+
+    private double calScore(KnowledgePointVO root,Map<String,Double> data){
+        double score = 0.0;
+        if(data.containsKey(root.getName()))
+            score = score + data.get(root.getName())*root.getScore();
+        else if(root.getKnowledgePointVOs()!=null){
+            for(KnowledgePointVO node : root.getKnowledgePointVOs())
+                score = score + calScore(node,data);
+        }
+        return score;
+    }
+
     private KnowledgePointVO addScoreToNode(KnowledgePointVO root, Double score, Double scoreTotal, QuestionVO questionInfo,String knowledege,int deep) {
         String[] nodeKnowledge = knowledege.split("\\.");
         double[] questionWeight = {1,1,1,1.05,1.1};

+ 6 - 0
seec-data-server/src/main/java/cn/seecoder/data/server/service/KnowledgeService.java

@@ -41,4 +41,10 @@ public interface KnowledgeService {
      */
     public double getBokInteractionScore(int userId);
 
+    /**
+     * 通过FAHP获取职业评价
+     * @param position
+     * @return
+     */
+    public Double getFAHPScoreOnPosition(String position,int userId);
 }

+ 8 - 0
seec-data-server/src/main/java/cn/seecoder/data/server/utils/FAHPmatrix/前端开发工程师.csv

@@ -0,0 +1,8 @@
+Label,Weight
+程序设计基础,0.1714
+数据结构和数据表示,0.1595
+面向对象的设计,0.1452
+数据库基础知识,0.1381
+网络通信基础,0.1381
+计算机组织,0.1238
+调试工具和技巧,0.1238

+ 6 - 8
seec-data-server/src/test/java/cn/seecoder/data/server/service/Impl/AnalysisServiceImplTest.java

@@ -3,6 +3,8 @@ package cn.seecoder.data.server.service.Impl;
 import cn.seecoder.data.server.domain.GeneralRecordDao;
 import cn.seecoder.data.server.repository.GeneralRecordRepository;
 import cn.seecoder.data.server.repository.knowledge.KnowledgeRepository;
+import cn.seecoder.data.server.service.AnalysisService;
+import org.checkerframework.checker.units.qual.A;
 import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,7 +18,6 @@ import java.util.List;
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @Rollback(value = false)
-@SpringBootTest
 class AnalysisServiceImplTest {
 
     @Autowired
@@ -25,14 +26,11 @@ class AnalysisServiceImplTest {
     @Autowired
     KnowledgeRepository knowledgeRepository;
 
+    @Autowired
+    AnalysisService analysisService;
+
     @Test
     void dataTest(){
-        List<GeneralRecordDao> generalRecordDaos = generalRecordRepository.findAll();
-        for(int i=0;i<generalRecordDaos.size();i=i+100){
-            GeneralRecordDao g1 = generalRecordDaos.get(i);
-            g1.setId(null);
-            g1.setCreateTime(LocalDateTime.now());
-            generalRecordRepository.save(g1);
-        }
+
     }
 }