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