Browse Source

完成commonMatter方法和mistakeMatter方法

4228306 5 năm trước cách đây
mục cha
commit
96664df683

+ 50 - 0
src/main/java/edu/math/diagnosis/model/CommonMatterVo.java

@@ -0,0 +1,50 @@
+package edu.math.diagnosis.model;
+
+public class CommonMatterVo {
+
+    private String commonMatter;
+    private String mistakeMatter;
+    private Double percent;
+    private boolean study;
+    private boolean emotion;
+
+    public String getCommonMatter() {
+        return commonMatter;
+    }
+
+    public void setCommonMatter(String commonMatter) {
+        this.commonMatter = commonMatter;
+    }
+
+    public String getMistakeMatter() {
+        return mistakeMatter;
+    }
+
+    public void setMistakeMatter(String mistakeMatter) {
+        this.mistakeMatter = mistakeMatter;
+    }
+
+    public Double getPercent() {
+        return percent;
+    }
+
+    public void setPercent(Double percent) {
+        this.percent = percent;
+    }
+
+    public boolean isStudy() {
+        return study;
+    }
+
+    public void setStudy(boolean study) {
+        this.study = study;
+    }
+
+    public boolean isEmotion() {
+        return emotion;
+    }
+
+    public void setEmotion(boolean emotion) {
+        this.emotion = emotion;
+    }
+}

+ 36 - 0
src/main/java/edu/math/diagnosis/model/MistakeMatterVo.java

@@ -0,0 +1,36 @@
+package edu.math.diagnosis.model;
+
+import java.util.List;
+
+public class MistakeMatterVo {
+
+    private String mistakeMatter;
+
+    private List<Integer> wrongs;
+
+    private Double percent;
+
+    public String getMistakeMatter() {
+        return mistakeMatter;
+    }
+
+    public void setMistakeMatter(String mistakeMatter) {
+        this.mistakeMatter = mistakeMatter;
+    }
+
+    public List<Integer> getWrongs() {
+        return wrongs;
+    }
+
+    public void setWrongs(List<Integer> wrongs) {
+        this.wrongs = wrongs;
+    }
+
+    public Double getPercent() {
+        return percent;
+    }
+
+    public void setPercent(Double percent) {
+        this.percent = percent;
+    }
+}

+ 65 - 22
src/main/java/edu/math/diagnosis/service/PaperResultService.java

@@ -152,7 +152,7 @@ public class PaperResultService {
         r.setChapterAbility(chapterAbility(r, paper));
         r.setAbilityEvaluate(abilityEvaluate(r, paper));
         r.setCommonMatters(commonMatters(r, paper));
-        r.setMistakeMatters(mistakeMatters(r,paper));
+        r.setMistakeMatters(mistakeMatters(r, paper));
 
 //        paperResultRepo.save(r);
     }
@@ -384,8 +384,6 @@ public class PaperResultService {
     }
 
 
-
-
     private Map<String, Set<Integer>> tagNumbers(Paper paper) {
         Map<String, Set<Integer>> tagNumbers = new LinkedHashMap<>();
         paper.getQuestions().forEach(q -> {
@@ -559,42 +557,87 @@ public class PaperResultService {
 
     /**
      * 题目暴露的问题 该问题在所有题目中的占比,比如10个错题,8个有粗心大意,则粗心大意占比为80
-     * 边两列
+     * 边两列
      * {
-     * "知识记忆不牢":{
-     * "percent":88.88,
-     * "wrong":[1,2,3]
+     * "计算出错":{
+     * "commonMatter":"计算出错",
+     * "mistakeMatter":"粗心大意",
+     * "percent":88.10,
+     * "isStudy":true,
+     * "isEmotion":true
      * }
      * }
      */
     public String commonMatters(PaperResult result, Paper paper) {
-        List<KnowledgeMatter> matters = matterService.list(paper.getSubjectId(),paper.getGrade());
-        Map<String,List<KnowledgeMatter>> group = new LinkedHashMap<>();
-        for (KnowledgeMatter matter:matters){
-            String commonMatter = matter.getCommonMatter();
+        List<KnowledgeMatter> matters = matterService.list(paper.getSubjectId(), paper.getGrade());
 
+//        Map<String, KnowledgeMatter> matterMap = matters.stream().collect(Collectors.toMap(KnowledgeMatter::getCommonMatter, k -> k));
+        //对于一个CommonMatter来说,它的mistakeMatter和baseMatter都是确定的
+        Map<String, KnowledgeMatter> matterMap = new HashMap<>();
+        for (KnowledgeMatter matter : matters) {
+            matterMap.putIfAbsent(matter.getCommonMatter(), matter);
         }
-//        matters.stream()
-        List<Integer> wrongs = convertQuestion(result.getWrongQuestion());
 
-        return "{}";
+        //Map<commonMatter,List<KnowledgeMatter>>
+        Map<String, List<KnowledgeMatter>> group = matters.stream().collect(Collectors.groupingBy(KnowledgeMatter::getCommonMatter));
+
+        List<Integer> wrongs = convertQuestion(result.getWrongQuestion());
+        //Map<commonMatter,CommonMatterVo>
+        Map<String, CommonMatterVo> commons = new LinkedHashMap<>();
+        group.forEach((commonMatter, list) -> {
+            List<Integer> numbers = list.stream().map(KnowledgeMatter::getNumber).collect(Collectors.toList());
+            //该commonMatter的题目数量
+            int num = numbers.size();
+            //取交集
+            numbers.retainAll(wrongs);
+            int wrong = numbers.size();
+            double percent = num == 0 ? 100 : NumberUtil.format(100.0 * (num - wrong) / num);
+            CommonMatterVo vo = new CommonMatterVo();
+
+            KnowledgeMatter sample = matterMap.get(commonMatter);
+            vo.setMistakeMatter(sample.getMistakeMatter());
+            vo.setStudy(sample.getBaseMatter().contains(Constants.MATTER_STUDY));
+            vo.setEmotion(sample.getBaseMatter().contains(Constants.MATTER_EMOTION));
+            vo.setCommonMatter(commonMatter);
+            vo.setPercent(percent);
+            commons.put(commonMatter, vo);
+        });
+        return ObjectUtil.object2Json(commons);
     }
 
     /**
      * 家长误以为的问题 该问题在所有题目中的占比,比如10个错题,8个有基础不好,则基础不好占比为80
-     * 右边两列
+     * 边两列
      * {
-     * "基础不好":{
-     * "commonMatter":"知识记忆不牢,学习动力问题",
-     * "percent":88.10,
-     * "isStudy":true,
-     * "isEmotion":true
+     * "知识记忆不牢":{
+     * "percent":88.88,
+     * "wrongs":[1,2,3],
+     * "mistakeMatter":"知识记忆不牢"
      * }
      * }
      */
     public String mistakeMatters(PaperResult result, Paper paper) {
-
-        return "{}";
+        List<KnowledgeMatter> matters = matterService.list(paper.getSubjectId(), paper.getGrade());
+        //Map<mistakeMatter,List<KnowledgeMatter> 以mistakeMatter进行分组
+        Map<String, List<KnowledgeMatter>> group = matters.stream().collect(Collectors.groupingBy(KnowledgeMatter::getMistakeMatter));
+        List<Integer> wrongs = convertQuestion(result.getWrongQuestion());
+        //Map<mistakeMatter,MistakeMatterVo>
+        Map<String, MistakeMatterVo> mistakes = new LinkedHashMap<>();
+        group.forEach((mistakeMatter, list) -> {
+            List<Integer> numbers = list.stream().map(KnowledgeMatter::getNumber).collect(Collectors.toList());
+            //该commonMatter的题目数量
+            int num = numbers.size();
+            //取交集
+            numbers.retainAll(wrongs);
+            int wrong = numbers.size();
+            double percent = num == 0 ? 100 : NumberUtil.format(100.0 * (num - wrong) / num);
+            MistakeMatterVo vo = new MistakeMatterVo();
+            vo.setMistakeMatter(mistakeMatter);
+            vo.setWrongs(numbers);
+            vo.setPercent(percent);
+            mistakes.put(mistakeMatter, vo);
+        });
+        return ObjectUtil.object2Json(mistakes);
     }
 
     private List<Integer> convertQuestion(String questionNumbers) {