|
@@ -148,4 +148,125 @@ public class SpecialKnowledgeService {
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
+
|
|
|
+ public void calcComplex(List<SpecialKnowledge> list) {
|
|
|
+ int max = list.stream().map(SpecialKnowledge::getLevel).max(Comparator.naturalOrder()).orElse(0);
|
|
|
+ if (max == 0) {
|
|
|
+ logger.error("最大层级为0,请检查数据");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Map<Long, SpecialKnowledge> mapper = list.stream().collect(Collectors.toMap(SpecialKnowledge::getId, Function.identity()));
|
|
|
+ List<SpecialKnowledge> ks = list.stream().filter(s -> s.getLevel() == max).collect(Collectors.toList());
|
|
|
+ Map<Long, List<SpecialKnowledge>> parentMap = ks.stream().collect(Collectors.groupingBy(SpecialKnowledge::getParentId));
|
|
|
+ for (Map.Entry<Long, List<SpecialKnowledge>> entry : parentMap.entrySet()) {
|
|
|
+ List<SpecialKnowledge> s = entry.getValue();
|
|
|
+ SpecialKnowledge parent = mapper.get(entry.getKey());
|
|
|
+
|
|
|
+ SpecialKnowledge know = null, under = null, usage = null;
|
|
|
+ for (SpecialKnowledge k : s) {
|
|
|
+ switch (k.getContent()) {
|
|
|
+ case Constants.SPECIAL_MASTER_STATUS_KNOW:
|
|
|
+ know = k;
|
|
|
+ break;
|
|
|
+ case Constants.SPECIAL_MASTER_STATUS_UNDERSTAND:
|
|
|
+ under = k;
|
|
|
+ break;
|
|
|
+ case Constants.SPECIAL_MASTER_STATUS_USAGE:
|
|
|
+ usage = k;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ int weight = calcWeight(know, under, usage,parent);
|
|
|
+ logger.info("当前知识点为parent={}", parent);
|
|
|
+ switch (weight) {
|
|
|
+ case 0:
|
|
|
+ logger.error("unexpected error,当前知识点没有考试题");
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ logger.info("当前知识点只考了认识");
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ logger.info("当前知识点考了理解和应用");
|
|
|
+ if (usage.getMaster() >= 50) {
|
|
|
+ parent.setMasterLevel("应用");
|
|
|
+ if (parent.getMaster() >= 75) {
|
|
|
+ parent.setMasterStatus("green");
|
|
|
+ } else {
|
|
|
+ parent.setMasterStatus("yellow");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (under.getMaster() >= 50) {
|
|
|
+ parent.setMasterLevel("理解");
|
|
|
+ int collect = under.getCollectNum() + know.getCollectNum();
|
|
|
+ int questionNum = under.getQuestionNum() + know.getQuestionNum();
|
|
|
+ if (questionNum == 0) {
|
|
|
+ logger.error("unexpected error,题目数量为0,认识和理解未考题目");
|
|
|
+ }
|
|
|
+ double master = collect * 100.0 / questionNum;
|
|
|
+ if (master >= 75) {
|
|
|
+ parent.setMasterStatus("yellow");
|
|
|
+ } else {
|
|
|
+ parent.setMasterStatus("red");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+
|
|
|
+ parent.setMasterLevel("理解");
|
|
|
+ parent.setMasterStatus("red");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ logger.info("当前知识点考了所有题目");
|
|
|
+ if (usage.getMaster() >= 50) {
|
|
|
+ parent.setMasterLevel("应用");
|
|
|
+ if (parent.getMaster() >= 75) {
|
|
|
+ parent.setMasterStatus("green");
|
|
|
+ } else {
|
|
|
+ parent.setMasterStatus("yellow");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (under.getMaster() >= 50) {
|
|
|
+ parent.setMasterLevel("理解");
|
|
|
+ int collect = under.getCollectNum() + know.getCollectNum();
|
|
|
+ int questionNum = under.getQuestionNum() + know.getQuestionNum();
|
|
|
+ if (questionNum == 0) {
|
|
|
+ logger.error("unexpected error,题目数量为0,认识和理解未考题目");
|
|
|
+ }
|
|
|
+ double master = collect * 100.0 / questionNum;
|
|
|
+ if (master >= 75) {
|
|
|
+ parent.setMasterStatus("yellow");
|
|
|
+ } else {
|
|
|
+ parent.setMasterStatus("red");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ parent.setMasterLevel("认识");
|
|
|
+ if (know.getMaster() >= 75) {
|
|
|
+ parent.setMasterStatus("yellow");
|
|
|
+ } else {
|
|
|
+ parent.setMasterStatus("red");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private int calcWeight(SpecialKnowledge know, SpecialKnowledge under, SpecialKnowledge usage,SpecialKnowledge parent) {
|
|
|
+ int a = 1, b = 2, c = 4;
|
|
|
+ if (know == null || StringUtils.isBlank(know.getQids())) {
|
|
|
+ a = 0;
|
|
|
+ logger.warn("未找到认识层级,parent={}", parent.getContent());
|
|
|
+ }
|
|
|
+ if (under == null || StringUtils.isBlank(under.getQids())) {
|
|
|
+ b = 0;
|
|
|
+ logger.warn("未找到理解层级,parent={}", parent.getContent());
|
|
|
+ }
|
|
|
+ if (usage == null || StringUtils.isBlank(usage.getQids())) {
|
|
|
+ c = 0;
|
|
|
+ logger.warn("未找到应用层级,parent={}", parent.getContent());
|
|
|
+ }
|
|
|
+ return a + b + c;
|
|
|
+ }
|
|
|
}
|