Browse Source

KnowledgeMatter实体增加options字段,用于保存该题目中的一些选项包含相同的通用问题

4228306 5 years ago
parent
commit
e76ea1b2bd

+ 10 - 0
src/main/java/edu/math/diagnosis/entity/KnowledgeMatter.java

@@ -34,6 +34,8 @@ public class KnowledgeMatter {
     @Column(nullable = false)
     private Date updatetime;
 
+    private String options;
+
     public Long getId() {
         return id;
     }
@@ -121,4 +123,12 @@ public class KnowledgeMatter {
     public void setUpdatetime(Date updatetime) {
         this.updatetime = updatetime;
     }
+
+    public String getOptions() {
+        return options;
+    }
+
+    public void setOptions(String options) {
+        this.options = options;
+    }
 }

+ 7 - 4
src/main/java/edu/math/diagnosis/service/MatterService.java

@@ -78,9 +78,12 @@ public class MatterService {
         return commonMatterRepo.existsByName(name);
     }
 
-    public KnowledgeMatter addKnowledge(String name, String code, String commonMatter, String mistakeMatter, String baseMatter, Long subjectId, String grade,Integer nubmer) {
+    public KnowledgeMatter addKnowledge(String name, String code, String commonMatter, String mistakeMatter, String baseMatter, Long subjectId, String grade, Integer number, String option) {
         if (existKnowledge(name, subjectId, grade)) {
-            return null;
+            KnowledgeMatter matter = knowledgeMatterRepo.findByNameAndSubjectIdAndGrade(name, subjectId, grade);
+            //更新选项编号
+            matter.setOptions(matter.getOptions() + "," + option);
+            return knowledgeMatterRepo.save(matter);
         }
         KnowledgeMatter matter = new KnowledgeMatter();
         matter.setName(name);
@@ -90,7 +93,7 @@ public class MatterService {
         matter.setBaseMatter(baseMatter);
         matter.setSubjectId(subjectId);
         matter.setGrade(grade);
-        matter.setNumber(nubmer);
+        matter.setNumber(number);
         return knowledgeMatterRepo.save(matter);
     }
 
@@ -111,7 +114,7 @@ public class MatterService {
             String knowledge = vo.getKnowledgeMatter();
             addMistake(mistake, CodeUtil.generate(4, CodeUtil.LOWER_ALPHA), base);
             addCommon(common, CodeUtil.generate(4, CodeUtil.LOWER_ALPHA), mistake, base);
-            addKnowledge(knowledge, CodeUtil.generate(4, CodeUtil.LOWER_ALPHA), common, mistake, base, vo.getSubjectId(), vo.getGrade(),vo.getNumber());
+            addKnowledge(knowledge, CodeUtil.generate(4, CodeUtil.LOWER_ALPHA), common, mistake, base, vo.getSubjectId(), vo.getGrade(), vo.getNumber(), vo.getOption());
         }
     }
 

+ 48 - 26
src/main/java/edu/math/diagnosis/service/PaperResultService.java

@@ -82,8 +82,8 @@ public class PaperResultService {
             if (a == null || StringUtils.isBlank(a.getOptions())) {
                 continue;
             }
-            //检测答案的对错,此处进行全匹配,全对上该题目才正确
-            if (ans.equalsIgnoreCase(a.getOptions())) {
+            //检测答案的对错,如果答案为空或者全部对上该题目正确
+            if (q.getCorrectNum() == 0 || ans.equalsIgnoreCase(a.getOptions())) {
                 collectQuestion.add(q.getNumber());
                 String jsonScore = q.getJsonScore();
                 Map<String, Double> qData = ObjectUtil.json2Object(jsonScore, Map.class);
@@ -98,6 +98,9 @@ public class PaperResultService {
         //对的选项进行升序排序
         collectQuestion.sort(Integer::compareTo);
         result.setCollectQuestion(StringUtils.join(collectQuestion, ","));
+        //错误选项
+        List<Integer> wrongQuestions = generateWrongQuestion(paper, collectQuestion);
+        result.setWrongQuestion(StringUtils.join(wrongQuestions, ","));
         result.setJsonScore(ObjectUtil.object2Json(pData));
         //转换分数为百分制
         double totalScore = paper.getTotalScore();
@@ -148,7 +151,8 @@ public class PaperResultService {
         //第二部分 学科能力
         r.setChapterAbility(chapterAbility(r, paper));
         r.setAbilityEvaluate(abilityEvaluate(r, paper));
-        questionMatter(r, paper);
+        r.setCommonMatters(commonMatters(r, paper));
+        r.setMistakeMatters(mistakeMatters(r,paper));
 
 //        paperResultRepo.save(r);
     }
@@ -171,7 +175,7 @@ public class PaperResultService {
 //        List<QuestionOption> options = questions.stream().map(Question::getOptions).flatMap(Collection::stream).collect(Collectors.toList());
 //        questions.forEach(q -> tags.put(q.getId(), q.getTag()));
 
-        List<Integer> collects = convertCollectQuestion(result.getCollectQuestion());
+        List<Integer> collects = convertQuestion(result.getCollectQuestion());
 
         //Map<tag,Set<number>> 知识点与题目对应
         Map<String, Set<Integer>> tagNumbers = tagNumbers(paper);
@@ -211,7 +215,7 @@ public class PaperResultService {
     public String abilityScore(PaperResult result, Paper paper) {
 
         Map<String, String> abilityCodes = subjectAbilityService.map(paper.getSubjectId());
-        List<Integer> collectQuestion = convertCollectQuestion(result.getCollectQuestion());
+        List<Integer> collectQuestion = convertQuestion(result.getCollectQuestion());
         //各能力分数 Map<code,Set<number>> 能力与题目编号
 //        Map<String, Set<Integer>> codeNumber = new HashMap<>();
 
@@ -270,7 +274,7 @@ public class PaperResultService {
         List<SubjectKnowledge> knowledge = knowledgeService.list(subjectId, grade);
         //根据章节分组 Map<chapter,...>
         Map<String, List<SubjectKnowledge>> group = knowledge.stream().collect(Collectors.groupingBy(SubjectKnowledge::getChapter));
-        List<Integer> collects = convertCollectQuestion(result.getCollectQuestion());
+        List<Integer> collects = convertQuestion(result.getCollectQuestion());
 
         //Map<tag,Set<number>> 知识点与题目对应
         Map<String, Set<Integer>> tagNumbers = tagNumbers(paper);
@@ -305,7 +309,7 @@ public class PaperResultService {
         List<SubjectKnowledge> knowledge = knowledgeService.list(paper.getSubjectId(), paper.getGrade());
         //根据章节分组 Map<chapter,List<SubjectKnowledge>>
         Map<String, List<SubjectKnowledge>> group = knowledge.stream().collect(Collectors.groupingBy(SubjectKnowledge::getChapter));
-        List<Integer> collects = convertCollectQuestion(result.getCollectQuestion());
+        List<Integer> collects = convertQuestion(result.getCollectQuestion());
         //Map<tag,Set<number>> 知识点与题目对应
         Map<String, Set<Integer>> tagNumbers = tagNumbers(paper);
         //Map<tag,keep> 每个知识点的掌握情况
@@ -353,7 +357,7 @@ public class PaperResultService {
         });
 
 
-        List<Integer> collects = convertCollectQuestion(result.getCollectQuestion());
+        List<Integer> collects = convertQuestion(result.getCollectQuestion());
 
         //Map<tag,Set<number>> 知识点与题目对应
         Map<String, Set<Integer>> tagNumbers = tagNumbers(paper);
@@ -380,12 +384,7 @@ public class PaperResultService {
     }
 
 
-    private List<Integer> convertCollectQuestion(String collectQuestion) {
-        //获取答对的题目
-        String[] collect = collectQuestion.split(",");
-        //转换成整型
-        return Arrays.stream(collect).map(Integer::valueOf).collect(Collectors.toList());
-    }
+
 
     private Map<String, Set<Integer>> tagNumbers(Paper paper) {
         Map<String, Set<Integer>> tagNumbers = new LinkedHashMap<>();
@@ -476,7 +475,7 @@ public class PaperResultService {
         //根据章节分组 Map<chapter,List<SubjectKnowledge>>
 //        Map<String, List<SubjectKnowledge>> group = knowledge.stream().collect(Collectors.groupingBy(SubjectKnowledge::getChapter));
 
-        List<Integer> collects = convertCollectQuestion(result.getCollectQuestion());
+        List<Integer> collects = convertQuestion(result.getCollectQuestion());
         //Map<tag,Set<number>> 知识点与题目对应
         Map<String, Set<Integer>> tagNumbers = tagNumbers(paper);
         //Map<tag,keep> 每个知识点的掌握情况
@@ -488,7 +487,7 @@ public class PaperResultService {
             vo.setChapter(k.getChapter());
             vo.setKnowledgeCode(k.getCode());
 //            vo.setKnowledgeContent(k.getContent());
-            // 设置知识点掌握程度
+            // 设置知识点掌握程度
             vo.setKeep(tagKeep.getOrDefault(k.getCode(), 0));
             vo.setAbilityCodes(k.getAbilityCodes());
             vos.add(vo);
@@ -516,7 +515,7 @@ public class PaperResultService {
         String abilityScore = result.getAbilityScore();
         Map<String, Double> scores = ObjectUtil.json2Map(abilityScore);
 
-        List<Integer> collects = convertCollectQuestion(result.getCollectQuestion());
+        List<Integer> collects = convertQuestion(result.getCollectQuestion());
         //Map<tag,Set<number>> 知识点与题目对应
         Map<String, Set<Integer>> tagNumbers = tagNumbers(paper);
         //Map<tag,keep> 每个知识点的掌握情况
@@ -541,7 +540,7 @@ public class PaperResultService {
             String code = entry.getKey();
             AbilityEvaluateVo vo = new AbilityEvaluateVo();
             vo.setAbilityCode(code);
-            vo.setScore(scores.getOrDefault(code,0D));
+            vo.setScore(scores.getOrDefault(code, 0D));
 
             ScoreSegment scoreSegment = scoreSegmentService.getLevel(vo.getScore(), scoreSegments, abilities.get(code), subject);
             vo.setEvaluate(scoreSegment.getEvaluate());
@@ -550,23 +549,40 @@ public class PaperResultService {
             Set<String> ks = entry.getValue();
             List<Integer> keep = new ArrayList<>();
             //未掌握的为0
-            ks.forEach(k -> keep.add(tagKeep.getOrDefault(k,0)));
+            ks.forEach(k -> keep.add(tagKeep.getOrDefault(k, 0)));
             vo.setKeep(keep);
             evaluates.put(abilities.get(code), vo);
         }
         return ObjectUtil.object2Json(evaluates);
     }
 
+
     /**
-     * 该问题在所有题目中的占比,比如10个错题,8个有粗心大意,则粗心大意占比为80
+     * 题目暴露的问题 该问题在所有题目中的占比,比如10个错题,8个有粗心大意,则粗心大意占比为80
+     * 左边两列
      * {
      * "知识记忆不牢":{
      * "percent":88.88,
      * "wrong":[1,2,3]
      * }
      * }
-     *
-     * 该问题在所有题目中的占比,比如10个错题,8个有基础不好,则基础不好占比为80
+     */
+    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();
+
+        }
+//        matters.stream()
+        List<Integer> wrongs = convertQuestion(result.getWrongQuestion());
+
+        return "{}";
+    }
+
+    /**
+     * 家长误以为的问题 该问题在所有题目中的占比,比如10个错题,8个有基础不好,则基础不好占比为80
+     * 右边两列
      * {
      * "基础不好":{
      * "commonMatter":"知识记忆不牢,学习动力问题",
@@ -576,13 +592,19 @@ public class PaperResultService {
      * }
      * }
      */
-    public void questionMatter(PaperResult result, Paper paper) {
-        List<Integer> collects = convertCollectQuestion(result.getCollectQuestion());
-        List<Integer> wrongs = convertWrongQuestion(paper, collects);
+    public String mistakeMatters(PaperResult result, Paper paper) {
 
+        return "{}";
+    }
+
+    private List<Integer> convertQuestion(String questionNumbers) {
+        //获取答对的题目
+        String[] collect = questionNumbers.split(",");
+        //转换成整型
+        return Arrays.stream(collect).map(Integer::valueOf).collect(Collectors.toList());
     }
 
-    private List<Integer> convertWrongQuestion(Paper paper, List<Integer> collects) {
+    private List<Integer> generateWrongQuestion(Paper paper, List<Integer> collects) {
         return paper.getQuestions().stream().map(Question::getNumber).filter(q -> !collects.contains(q)).collect(Collectors.toList());
     }