|
|
@@ -3,12 +3,12 @@ package cn.seecoder.data.server.service.Impl;
|
|
|
|
|
|
import cn.seecoder.bok.client.SeecoderBokClient;
|
|
|
import cn.seecoder.bok.common.vo.QuestionVO;
|
|
|
-import cn.seecoder.data.server.dto.knowledge.KnowledgeNodeDTO;
|
|
|
import cn.seecoder.data.server.repository.GeneralRecordRepository;
|
|
|
-import cn.seecoder.data.server.repository.KnowledgeRepository;
|
|
|
+import cn.seecoder.data.server.repository.knowledge.KnowledgeRepository;
|
|
|
import cn.seecoder.data.server.service.GeneralService;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import cn.seecoder.data.server.vo.knowledge.KnowledgePointVO;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
@@ -30,7 +30,7 @@ public class GeneralServiceImpl implements GeneralService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public KnowledgeNodeDTO getTreeNode(int userId) {
|
|
|
+ public KnowledgePointVO getTreeNode(int userId) {
|
|
|
List generalScoreList = generalRecordRepository.getByUserIdMaxScore(userId);
|
|
|
ArrayList<String> questionIds = new ArrayList<>();
|
|
|
ArrayList<Double> scores = new ArrayList<>();
|
|
|
@@ -43,7 +43,7 @@ public class GeneralServiceImpl implements GeneralService {
|
|
|
}
|
|
|
SeecoderBokClient seecoderBokClient = new SeecoderBokClient("http://bok.seec.seecoder.cn");
|
|
|
List<QuestionVO> questionVOS = seecoderBokClient.getQuestionListByIds(questionIds);
|
|
|
- ArrayList<KnowledgeNodeDTO> knowledgeNodeDTOS = new ArrayList<>();
|
|
|
+ ArrayList<KnowledgePointVO> knowledgePointVOS = new ArrayList<KnowledgePointVO>();
|
|
|
ArrayList<String> knowledgeName = new ArrayList<>();
|
|
|
double[] weights = {1,1,1,1.1,1.2};
|
|
|
for(int i=0;i<questionVOS.size();i++){
|
|
|
@@ -53,41 +53,41 @@ public class GeneralServiceImpl implements GeneralService {
|
|
|
for (String knowledge : knowledgeList) {
|
|
|
if(knowledgeName.contains(knowledge)){
|
|
|
int index = knowledgeName.indexOf(knowledge);
|
|
|
- KnowledgeNodeDTO knowledgeNodeDTO = knowledgeNodeDTOS.get(index);
|
|
|
+ KnowledgePointVO knowledgePointVO = knowledgePointVOS.get(index);
|
|
|
if(questionVO.getWeight()==null || questionVO.getWeight()==0){
|
|
|
- knowledgeNodeDTO.setScoreGotten(knowledgeNodeDTO.getScoreGotten()+scores.get(i));
|
|
|
- knowledgeNodeDTO.setScoreTotal(knowledgeNodeDTO.getScoreTotal()+scoresTotal.get(i));
|
|
|
- knowledgeNodeDTO.setQuestionsNumDone(knowledgeNodeDTO.getQuestionsNumDone()+1);
|
|
|
+ knowledgePointVO.setScoreGotten(knowledgePointVO.getScoreGotten()+scores.get(i));
|
|
|
+ knowledgePointVO.setScoreTotal(knowledgePointVO.getScoreTotal()+scoresTotal.get(i));
|
|
|
+ knowledgePointVO.setQuestionsNumDone(knowledgePointVO.getQuestionsNumDone()+1);
|
|
|
}
|
|
|
else{
|
|
|
- knowledgeNodeDTO.setScoreGotten(knowledgeNodeDTO.getScoreGotten()+scores.get(i)*weights[questionVO.getWeight()]);
|
|
|
- knowledgeNodeDTO.setScoreTotal(knowledgeNodeDTO.getScoreTotal()+scoresTotal.get(i));
|
|
|
- knowledgeNodeDTO.setQuestionsNumDone(knowledgeNodeDTO.getQuestionsNumDone()+1);
|
|
|
+ knowledgePointVO.setScoreGotten(knowledgePointVO.getScoreGotten()+scores.get(i)*weights[questionVO.getWeight()]);
|
|
|
+ knowledgePointVO.setScoreTotal(knowledgePointVO.getScoreTotal()+scoresTotal.get(i));
|
|
|
+ knowledgePointVO.setQuestionsNumDone(knowledgePointVO.getQuestionsNumDone()+1);
|
|
|
}
|
|
|
}
|
|
|
else{
|
|
|
knowledgeName.add(knowledge);
|
|
|
if(questionVO.getWeight()!=null && questionVO.getWeight()!=0)
|
|
|
- knowledgeNodeDTOS.add(new KnowledgeNodeDTO(knowledge,scores.get(i)*weights[questionVO.getWeight()]
|
|
|
+ knowledgePointVOS.add(new KnowledgePointVO(knowledge,scores.get(i)*weights[questionVO.getWeight()]
|
|
|
,scoresTotal.get(i),1,0,null));
|
|
|
else
|
|
|
- knowledgeNodeDTOS.add(new KnowledgeNodeDTO(knowledge,scores.get(i)
|
|
|
+ knowledgePointVOS.add(new KnowledgePointVO(knowledge,scores.get(i)
|
|
|
,scoresTotal.get(i),1,0,null));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- for(int i=0;i<knowledgeNodeDTOS.size();i++){
|
|
|
- KnowledgeNodeDTO knowledgeNodeDTO = knowledgeNodeDTOS.get(i);
|
|
|
+ for(int i=0;i<knowledgePointVOS.size();i++){
|
|
|
+ KnowledgePointVO knowledgePointVO = knowledgePointVOS.get(i);
|
|
|
ArrayList<String> knowledgeIds = new ArrayList<>();
|
|
|
- knowledgeIds.add(knowledgeNodeDTO.getKnowledge());
|
|
|
+ knowledgeIds.add(knowledgePointVO.getKnowledge());
|
|
|
long questionNum = seecoderBokClient.getQuestionList(null,null,knowledgeIds,null).getTotalElements();
|
|
|
- knowledgeNodeDTO.setQuestionsNumTotal(questionNum);
|
|
|
+ knowledgePointVO.setQuestionsNumTotal(questionNum);
|
|
|
}
|
|
|
- KnowledgeNodeDTO root = new KnowledgeNodeDTO("SE",0,0,0,0,null);
|
|
|
+ KnowledgePointVO root = new KnowledgePointVO("SE",0,0,0,0,null);
|
|
|
root.setName("Software Engineering");
|
|
|
- for(int i=0;i<knowledgeNodeDTOS.size();i++){
|
|
|
- KnowledgeNodeDTO node = knowledgeNodeDTOS.get(i);
|
|
|
+ for(int i=0;i<knowledgePointVOS.size();i++){
|
|
|
+ KnowledgePointVO node = knowledgePointVOS.get(i);
|
|
|
String[] tempNodes = node.getKnowledge().split("\\.");
|
|
|
boolean newNode = false;
|
|
|
if(tempNodes.length>0){
|
|
|
@@ -96,10 +96,10 @@ public class GeneralServiceImpl implements GeneralService {
|
|
|
}
|
|
|
else{
|
|
|
int deep = 0;
|
|
|
- KnowledgeNodeDTO target = root;
|
|
|
+ KnowledgePointVO target = root;
|
|
|
String prefix = "";
|
|
|
while (tempNodes.length>deep){
|
|
|
- ArrayList<String> abbreviations = getAbbreviationOnDTO(target.getKnowledgeNodeDTOs());
|
|
|
+ ArrayList<String> abbreviations = getAbbreviationOnVO(target.getKnowledgePointVOs());
|
|
|
String knowledgeAbb;
|
|
|
if(!newNode)
|
|
|
addstatistics(target,node);
|
|
|
@@ -108,19 +108,17 @@ public class GeneralServiceImpl implements GeneralService {
|
|
|
else
|
|
|
knowledgeAbb = prefix + "." + tempNodes[deep];
|
|
|
if(abbreviations.contains(knowledgeAbb))
|
|
|
- target = target.getKnowledgeNodeDTOs().get(abbreviations.indexOf(knowledgeAbb));
|
|
|
+ target = target.getKnowledgePointVOs().get(abbreviations.indexOf(knowledgeAbb));
|
|
|
else{
|
|
|
newNode = true;
|
|
|
- KnowledgeNodeDTO temp = new KnowledgeNodeDTO(knowledgeAbb, node.getScoreGotten(), node.getScoreTotal(),
|
|
|
+ KnowledgePointVO temp = new KnowledgePointVO(knowledgeAbb, node.getScoreGotten(), node.getScoreTotal(),
|
|
|
node.getQuestionsNumDone(), node.getQuestionsNumTotal(), null);
|
|
|
- if(knowledgeRepository.findByAbbreviation(knowledgeAbb).size()>0) {
|
|
|
- temp.setName(knowledgeRepository.findByAbbreviation(knowledgeAbb).get(0).getName());
|
|
|
- }
|
|
|
- ArrayList<KnowledgeNodeDTO> know = (ArrayList<KnowledgeNodeDTO>) target.getKnowledgeNodeDTOs();
|
|
|
+ temp.setName(knowledgeRepository.findByAbbreviation(knowledgeAbb).getName());
|
|
|
+ ArrayList<KnowledgePointVO> know = (ArrayList<KnowledgePointVO>) target.getKnowledgePointVOs();
|
|
|
if(know == null)
|
|
|
know = new ArrayList<>();
|
|
|
know.add(temp);
|
|
|
- target.setKnowledgeNodeDTOs(know);
|
|
|
+ target.setKnowledgePointVOs(know);
|
|
|
target = temp;
|
|
|
}
|
|
|
prefix = knowledgeAbb;
|
|
|
@@ -133,27 +131,27 @@ public class GeneralServiceImpl implements GeneralService {
|
|
|
return root;
|
|
|
}
|
|
|
|
|
|
- public ArrayList<String> getAbbreviationOnDTO(List<KnowledgeNodeDTO> knowledgeNodeDTOS){
|
|
|
+ public ArrayList<String> getAbbreviationOnVO(List<KnowledgePointVO> knowledgePointVOS){
|
|
|
ArrayList<String> arrayList= new ArrayList<>();
|
|
|
- if(knowledgeNodeDTOS!=null && knowledgeNodeDTOS.size()>0) {
|
|
|
- for (KnowledgeNodeDTO knowledgeNodeDTO : knowledgeNodeDTOS)
|
|
|
- arrayList.add(knowledgeNodeDTO.getKnowledge());
|
|
|
+ if(knowledgePointVOS!=null && knowledgePointVOS.size()>0) {
|
|
|
+ for (KnowledgePointVO knowledgePointVO : knowledgePointVOS)
|
|
|
+ arrayList.add(knowledgePointVO.getKnowledge());
|
|
|
}
|
|
|
return arrayList;
|
|
|
}
|
|
|
|
|
|
- public void addstatistics(KnowledgeNodeDTO target,KnowledgeNodeDTO adder){
|
|
|
+ public void addstatistics(KnowledgePointVO target,KnowledgePointVO adder){
|
|
|
target.setScoreGotten(target.getScoreGotten()+adder.getScoreGotten());
|
|
|
target.setScoreTotal(target.getScoreTotal()+adder.getScoreTotal());
|
|
|
target.setQuestionsNumDone(target.getQuestionsNumDone()+adder.getQuestionsNumDone());
|
|
|
target.setQuestionsNumTotal(target.getQuestionsNumTotal()+adder.getQuestionsNumTotal());
|
|
|
}
|
|
|
|
|
|
- public void getCoverAndCorretRates(KnowledgeNodeDTO root){
|
|
|
+ public void getCoverAndCorretRates(KnowledgePointVO root){
|
|
|
root.setCoverageRate(root.getQuestionsNumDone()/ root.getQuestionsNumTotal());
|
|
|
root.setCorrectRate(root.getScoreGotten()/root.getScoreTotal());
|
|
|
- if(root.getKnowledgeNodeDTOs()!=null && root.getKnowledgeNodeDTOs().size()>0){
|
|
|
- for(KnowledgeNodeDTO temp : root.getKnowledgeNodeDTOs())
|
|
|
+ if(root.getKnowledgePointVOs()!=null && root.getKnowledgePointVOs().size()>0){
|
|
|
+ for(KnowledgePointVO temp : root.getKnowledgePointVOs())
|
|
|
getCoverAndCorretRates(temp);
|
|
|
}
|
|
|
}
|