Эх сурвалжийг харах

完成专项诊断报告接口生成

feick 5 жил өмнө
parent
commit
48a7fb47cd

+ 2 - 2
src/main/java/com/yaoxiang/diagnosis/entity/SpecialKnowledge.java

@@ -62,11 +62,11 @@ public class SpecialKnowledge {
 
     @Transient
     @ApiModelProperty("该知识点拥有的题目数量")
-    private Integer questionNum;
+    private Integer questionNum = 0;
 
     @Transient
     @ApiModelProperty("该知识点答对的数量")
-    private Integer collectNum;
+    private Integer collectNum = 0;
 
     @Transient
     private SpecialKnowledge parent;

+ 12 - 0
src/main/java/com/yaoxiang/diagnosis/entity/SpecialResult.java

@@ -6,6 +6,7 @@ import org.hibernate.annotations.CreationTimestamp;
 
 import javax.persistence.*;
 import java.util.Date;
+import java.util.List;
 
 @Entity
 @ApiModel("专项诊断结果")
@@ -51,6 +52,9 @@ public class SpecialResult {
     @ApiModelProperty("答错的题目,先判断是否选择,没选择则答错;选择了,答错了算错误,若该题没答案,则不算错误")
     private String wrongQuestion;
 
+    @Transient
+    private List<SpecialKnowledge> knowledges;
+
     public Long getId() {
         return id;
     }
@@ -138,4 +142,12 @@ public class SpecialResult {
     public void setWrongQuestion(String wrongQuestion) {
         this.wrongQuestion = wrongQuestion;
     }
+
+    public List<SpecialKnowledge> getKnowledges() {
+        return knowledges;
+    }
+
+    public void setKnowledges(List<SpecialKnowledge> knowledges) {
+        this.knowledges = knowledges;
+    }
 }

+ 46 - 3
src/main/java/com/yaoxiang/diagnosis/service/SpecialKnowledgeService.java

@@ -1,15 +1,20 @@
 package com.yaoxiang.diagnosis.service;
 
+import com.yaoxiang.diagnosis.config.Constants;
 import com.yaoxiang.diagnosis.dao.SpecialKnowledgeRepo;
 import com.yaoxiang.diagnosis.entity.SpecialKnowledge;
 import com.yaoxiang.diagnosis.model.Result;
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Service
@@ -18,6 +23,8 @@ public class SpecialKnowledgeService {
     @Resource
     private SpecialKnowledgeRepo specialKnowledgeRepo;
 
+    private static final Logger logger = LoggerFactory.getLogger(SpecialKnowledgeService.class);
+
     public boolean add(List<SpecialKnowledge> list) {
         for (SpecialKnowledge knowledge : list) {
             if (knowledge.getParent() != null) {
@@ -60,10 +67,46 @@ public class SpecialKnowledgeService {
 
     }
 
-    public List<SpecialKnowledge> calcCount(List<SpecialKnowledge> list,List<SpecialKnowledge> tree) {
+    public void calcCount(List<SpecialKnowledge> list) {
         Map<Integer,List<SpecialKnowledge>> group = list.stream().collect(Collectors.groupingBy(SpecialKnowledge::getLevel));
+        Map<Long,SpecialKnowledge> knowledgeMap = list.stream().collect(Collectors.toMap(SpecialKnowledge::getId,Function.identity()));
+        int max = group.keySet().stream().max(Comparator.naturalOrder()).orElse(0);
+        if(max ==0){
+            logger.warn("最大层级为0,请检查数据");
+        }
+        for (int i = max; i>1 ;i--){
+            //全是同一级的
+            List<SpecialKnowledge> ss = group.get(i);
+            //找出同一个parentId的
+            Map<Long,List<SpecialKnowledge>> map = ss.stream().collect(Collectors.groupingBy(SpecialKnowledge::getParentId));
+            double rate = 0;
+            for (Map.Entry<Long,List<SpecialKnowledge>> entry:map.entrySet()){
+                int collectCount = 0;
+                int questionNum = 0;
+                List<SpecialKnowledge> specialKnowledges = entry.getValue();
+                for (SpecialKnowledge s:specialKnowledges){
+                    collectCount+= s.getCollectNum();
+                    questionNum += s.getQuestionNum();
+                }
+                //parent 不为null
+                if(specialKnowledges.size() > 0){
+                    SpecialKnowledge parent = knowledgeMap.get(entry.getKey());
+                    parent.setCollectNum(collectCount);
+                    parent.setQuestionNum(questionNum);
+                    //小于等于层级3
+                    if(i <= 3 && questionNum > 0){
+                        double master = collectCount * 1.0 / questionNum;
+                        parent.setMaster(master);
+                        if(master < 0.8){
+                            parent.setMasterLevel(Constants.SPECIAL_KNOWLEDGE_UNMASTER);
+                        }
+                    }
+                }
+            }
 
-        return tree;
-
+            if(i >= 3){
+                ss.forEach(s->s.setChildren(null));
+            }
+        }
     }
 }

+ 6 - 2
src/main/java/com/yaoxiang/diagnosis/service/SpecialReportService.java

@@ -79,9 +79,13 @@ public class SpecialReportService {
         }
 
         List<SpecialKnowledge> tree = specialKnowledgeService.toTree(list);
-        specialKnowledgeService.calcCount(list,tree);
+        //统计结果并且剪枝,剪掉>3的层级
+        specialKnowledgeService.calcCount(list);
+
         logger.info(tree.toString());
-        return null;
+        SpecialResult r = new SpecialResult();
+        r.setKnowledges(tree);
+        return r;
     }
 
     private Integer getCount(List<Question> qs, List<Integer> collects) {