|
|
@@ -12,6 +12,7 @@ import cn.seecoder.data.server.repository.knowledge.PositionWeightRepository;
|
|
|
import cn.seecoder.data.server.service.KnowledgeService;
|
|
|
import cn.seecoder.data.server.vo.knowledge.KnowledgePointVO;
|
|
|
import cn.seecoder.data.server.vo.knowledge.KnowledgeVO;
|
|
|
+import org.checkerframework.checker.units.qual.A;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
@@ -86,6 +87,13 @@ public class KnowledgeServiceImpl implements KnowledgeService {
|
|
|
String tempLevel = prefix + knowledgeLevel[j];
|
|
|
if(!getAbbOnVO(upNode.getKnowledgePointVOs()).contains(tempLevel)){
|
|
|
nodeToAdd = new KnowledgePointVO(tempLevel,knowledgeInfo.getName(),0,0,0,0,0,0,0,null);
|
|
|
+ if(j+1==knowledgeLevel.length) {
|
|
|
+ SeecoderBokClient seecoderBokClient = new SeecoderBokClient("http://bok.seec.seecoder.cn");
|
|
|
+ ArrayList<String> knowledgeIds = new ArrayList<>();
|
|
|
+ knowledgeIds.add(tempLevel);
|
|
|
+ long questionNum = seecoderBokClient.getQuestionList(null, null, knowledgeIds, null).getTotalElements();
|
|
|
+ nodeToAdd.setQuestionsNumTotal(questionNum);
|
|
|
+ }
|
|
|
if(knowledgeRepository.findByAbbreviation(tempLevel).getIsleaf()==1)
|
|
|
nodeToAdd.setLeafWeight(positionWeight.getWeight());
|
|
|
else{
|
|
|
@@ -106,6 +114,7 @@ public class KnowledgeServiceImpl implements KnowledgeService {
|
|
|
prefix = tempLevel;
|
|
|
}
|
|
|
}
|
|
|
+ getQuestionTotal(root);
|
|
|
return root;
|
|
|
}
|
|
|
|
|
|
@@ -121,25 +130,67 @@ public class KnowledgeServiceImpl implements KnowledgeService {
|
|
|
for(int i=0;i<generalRecordDaos.size();i++) {
|
|
|
Object[] cells = (Object[]) generalRecordDaos.get(i);
|
|
|
questionIds.add((String)cells[0]);
|
|
|
- scores.add((Double) (cells[1]));
|
|
|
+ scores.add(Double.valueOf(cells[1].toString()));
|
|
|
scoresTotal.add(Double.valueOf(generalRecordRepository.getByQuestionId((String)cells[0]).get(0).getScoreTotal()));
|
|
|
}
|
|
|
SeecoderBokClient seecoderBokClient = new SeecoderBokClient("http://bok.seec.seecoder.cn");
|
|
|
List<QuestionVO> questionVOS = seecoderBokClient.getQuestionListByIds(questionIds);
|
|
|
- return null;
|
|
|
+ for(int i=0;i<questionVOS.size();i++){
|
|
|
+ QuestionVO questionInfo = questionVOS.get(i);
|
|
|
+ List<String> knowledges = questionInfo.getKnowledgeId();
|
|
|
+ if(knowledges!=null)
|
|
|
+ for(String knowledge : knowledges){
|
|
|
+ if(abbs.contains(knowledge) && knowledgeRepository.findByAbbreviation(knowledge).getIsleaf()==1 && !knowledge.equals("SE"))
|
|
|
+ addScoreToNode(root,scores.get(i),scoresTotal.get(i),questionInfo,knowledge,1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return root;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private KnowledgePointVO addScoreToNode(KnowledgePointVO root, Double score, Double scoreTotal, QuestionVO questionInfo,String knowledege,int deep) {
|
|
|
+ String[] nodeKnowledge = knowledege.split("\\.");
|
|
|
+ String now = nodeKnowledge[0];
|
|
|
+ for(int i=1;i<deep && i<nodeKnowledge.length;i++)
|
|
|
+ now = now + "." + nodeKnowledge[i];
|
|
|
+ if(root.getLeafWeight()==0){
|
|
|
+ KnowledgePointVO nextNode = root.getKnowledgePointVOs().get(getAbbOnVO(root.getKnowledgePointVOs()).indexOf(now));
|
|
|
+ KnowledgePointVO leafNode = addScoreToNode(nextNode,score,scoreTotal,questionInfo,knowledege,deep+1);
|
|
|
+ root.setQuestionsNumDone(root.getQuestionsNumDone()+1);
|
|
|
+ root.setScoreGotten(root.getScoreGotten()+leafNode.getScoreGotten());
|
|
|
+ root.setScoreTotal(root.getScoreTotal()+leafNode.getScoreTotal());
|
|
|
+ if(root.getScoreTotal()!=0)
|
|
|
+ root.setCorrectRate(root.getScoreGotten()/root.getScoreTotal());
|
|
|
+ if(root.getQuestionsNumTotal()!=0)
|
|
|
+ root.setCoverageRate(root.getQuestionsNumDone()/root.getQuestionsNumTotal());
|
|
|
+ return leafNode;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ root.setQuestionsNumDone(root.getQuestionsNumDone()+1);
|
|
|
+ root.setScoreGotten(score*root.getLeafWeight());
|
|
|
+ root.setScoreTotal(scoreTotal*root.getLeafWeight());
|
|
|
+ if(root.getScoreTotal()!=0)
|
|
|
+ root.setCorrectRate(root.getScoreGotten()/root.getScoreTotal());
|
|
|
+ if(root.getQuestionsNumTotal()!=0)
|
|
|
+ root.setCoverageRate(root.getQuestionsNumDone()/root.getQuestionsNumTotal());
|
|
|
+ return root;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private double getQuestionTotal(KnowledgePointVO root) {
|
|
|
+ if(root.getQuestionsNumTotal()!=0)
|
|
|
+ return root.getQuestionsNumTotal();
|
|
|
+ else{
|
|
|
+ double num = 0;
|
|
|
+ if(root.getKnowledgePointVOs()!=null){
|
|
|
+ for(KnowledgePointVO knowledgePointVO : root.getKnowledgePointVOs())
|
|
|
+ num = num + getQuestionTotal(knowledgePointVO);
|
|
|
+ root.setQuestionsNumTotal(num);
|
|
|
+ }
|
|
|
+ return num;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-// private void isleaf(KnowledgePointVO root) {
|
|
|
-// KnowledgeDao knowledgeDao = knowledgeRepository.findByAbbreviation(root.getKnowledge());
|
|
|
-// if(root.getKnowledgePointVOs()==null)
|
|
|
-// knowledgeDao.setIsleaf(1);
|
|
|
-// else{
|
|
|
-// knowledgeDao.setIsleaf(0);
|
|
|
-// for(KnowledgePointVO child : root.getKnowledgePointVOs())
|
|
|
-// isleaf(child);
|
|
|
-// }
|
|
|
-// knowledgeRepository.save(knowledgeDao);
|
|
|
-// }
|
|
|
|
|
|
public ArrayList<String> getAbbOnVO(List<KnowledgePointVO> knowledgePointVOS){
|
|
|
ArrayList<String> arrayList= new ArrayList<>();
|
|
|
@@ -151,7 +202,10 @@ public class KnowledgeServiceImpl implements KnowledgeService {
|
|
|
}
|
|
|
|
|
|
public void getLeafAbbOnNode(KnowledgePointVO knowledgePointVO,ArrayList<String> ans){
|
|
|
- ans.add(knowledgePointVO.getKnowledge());
|
|
|
-
|
|
|
+ if(knowledgePointVO.getKnowledgePointVOs()==null)
|
|
|
+ ans.add(knowledgePointVO.getKnowledge());
|
|
|
+ else
|
|
|
+ for(KnowledgePointVO child : knowledgePointVO.getKnowledgePointVOs())
|
|
|
+ getLeafAbbOnNode(child,ans);
|
|
|
}
|
|
|
}
|