Просмотр исходного кода

修改掌握率计算的bug,将master<0.8改成master<80

4228306 5 лет назад
Родитель
Сommit
2a414e2957

+ 18 - 6
src/main/java/com/yaoxiang/diagnosis/service/SpecialKnowledgeService.java

@@ -49,7 +49,7 @@ public class SpecialKnowledgeService {
         return specialKnowledgeRepo.findBySubjectId(subjectId);
     }
 
-    public List<SpecialKnowledge> listByPid(Long pid){
+    public List<SpecialKnowledge> listByPid(Long pid) {
         return specialKnowledgeRepo.findByPid(pid);
     }
 
@@ -75,22 +75,34 @@ public class SpecialKnowledgeService {
     }
 
     public void calcCount(List<SpecialKnowledge> list) {
+        logger.info("specialKnowledge size = {}", list.size());
+        //根据知识点所在层级分组
         Map<Integer, List<SpecialKnowledge>> group = list.stream().collect(Collectors.groupingBy(SpecialKnowledge::getLevel));
+        //将list根据Id变成map
         Map<Long, SpecialKnowledge> knowledgeMap = list.stream().collect(Collectors.toMap(SpecialKnowledge::getId, Function.identity()));
+        //找出最大层级
         int max = group.keySet().stream().max(Comparator.naturalOrder()).orElse(0);
+//        Map<Long,>
+        //根据同一个parentId的进行分组
+//        Map<Long, List<SpecialKnowledge>> parentMap = list.stream().filter(k->k.getParentId() != null)
+//                .collect(Collectors.groupingBy(SpecialKnowledge::getParentId));
+
         if (max == 0) {
             logger.error("最大层级为0,请检查数据");
+            return;
         }
         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));
+            Map<Long, List<SpecialKnowledge>> parentMap = ss.stream().filter(k -> k.getParentId() != null)
+                    .collect(Collectors.groupingBy(SpecialKnowledge::getParentId));
+
             double rate = 0;
-            for (Map.Entry<Long, List<SpecialKnowledge>> entry : map.entrySet()) {
+            for (Map.Entry<Long, List<SpecialKnowledge>> entry : parentMap.entrySet()) {
                 int collectCount = 0;
                 int questionNum = 0;
                 List<SpecialKnowledge> specialKnowledges = entry.getValue();
+                //如果有值,说明已经统计过了
                 for (SpecialKnowledge s : specialKnowledges) {
                     collectCount += s.getCollectNum();
                     questionNum += s.getQuestionNum();
@@ -104,9 +116,9 @@ public class SpecialKnowledgeService {
                     if (i <= 4 && questionNum > 0) {
                         double master = collectCount * 100.0 / questionNum;
                         logger.info("parent content={},level={},master={},masterStatus={}",
-                                parent.getContent(),parent.getLevel(),parent.getMaster(),parent.getMasterStatus());
+                                parent.getContent(), parent.getLevel(), parent.getMaster(), parent.getMasterStatus());
                         parent.setMaster(NumberUtil.format(master));
-                        if (master < 0.8) {
+                        if (master < 80) {
                             parent.setMasterStatus(Constants.SPECIAL_KNOWLEDGE_UNMASTER);
                         }
                     }

+ 11 - 3
src/main/java/com/yaoxiang/diagnosis/service/SpecialReportService.java

@@ -1,7 +1,9 @@
 package com.yaoxiang.diagnosis.service;
 
+import com.yaoxiang.diagnosis.config.Constants;
 import com.yaoxiang.diagnosis.entity.*;
 import com.yaoxiang.diagnosis.util.CommonUtil;
+import com.yaoxiang.diagnosis.util.NumberUtil;
 import io.swagger.models.auth.In;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -139,11 +141,17 @@ public class SpecialReportService {
             knowledge.setQuestionNum(number.size());
             number.retainAll(collects);
             knowledge.setCollectNum(number.size());
-
+            if(knowledge.getQuestionNum() > 0) {
+                double master = knowledge.getCollectNum() * 100.0 / knowledge.getQuestionNum();
+                knowledge.setMaster(NumberUtil.format(master));
+                if (master < 80) {
+                    knowledge.setMasterStatus(Constants.SPECIAL_KNOWLEDGE_UNMASTER);
+                }
+            }
         }
-        List<SpecialKnowledge> tree = specialKnowledgeService.toTree(list);
-        //统计结果并且剪枝,剪掉>3的层级
         specialKnowledgeService.calcCount(list);
+        //统计结果并且剪枝,剪掉>3的层级
+        List<SpecialKnowledge> tree = specialKnowledgeService.toTree(list);
 
         logger.info(tree.toString());
         SpecialResult r = new SpecialResult();