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