|
@@ -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) {
|