|
@@ -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));
|
|
|
|
|
|
|
|
|
}
|
|
@@ -171,7 +175,7 @@ public class PaperResultService {
|
|
|
|
|
|
|
|
|
|
|
|
- List<Integer> collects = convertCollectQuestion(result.getCollectQuestion());
|
|
|
+ List<Integer> collects = convertQuestion(result.getCollectQuestion());
|
|
|
|
|
|
|
|
|
Map<String, Set<Integer>> tagNumbers = tagNumbers(paper);
|
|
@@ -209,49 +213,18 @@ public class PaperResultService {
|
|
|
* }
|
|
|
*/
|
|
|
public String abilityScore(PaperResult result, Paper paper) {
|
|
|
-
|
|
|
- Map<String, String> abilityCodes = subjectAbilityService.map(paper.getSubjectId());
|
|
|
- List<Integer> collectQuestion = convertCollectQuestion(result.getCollectQuestion());
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- Map<String, Double> codeScore = new LinkedHashMap<>();
|
|
|
-
|
|
|
- abilityCodes.keySet().forEach(e -> codeScore.put(e, 0d));
|
|
|
-
|
|
|
- for (Question q : paper.getQuestions()) {
|
|
|
- if (!collectQuestion.contains(q.getNumber())) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- String jsonScore = q.getJsonScore();
|
|
|
- Map<String, Double> scores = ObjectUtil.json2Map(jsonScore);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- for (Map.Entry<String, Double> e : codeScore.entrySet()) {
|
|
|
- e.setValue(e.getValue() + scores.get(e.getKey()));
|
|
|
- }
|
|
|
- }
|
|
|
- ;
|
|
|
-
|
|
|
-
|
|
|
- Map<String, Double> paperJsonScore = ObjectUtil.json2Map(paper.getJsonScore());
|
|
|
- Map<String, Double> d = new HashMap<>();
|
|
|
-
|
|
|
- for (Map.Entry<String, Double> e : codeScore.entrySet()) {
|
|
|
- double s = e.getValue();
|
|
|
-
|
|
|
- double score = NumberUtil.format(10 * s * 100.0 / paperJsonScore.get(e.getKey()));
|
|
|
- d.put(abilityCodes.get(e.getKey()), score);
|
|
|
+ String jsonScore = result.getJsonScore();
|
|
|
+ Map<String, Double> scores = ObjectUtil.json2Map(jsonScore);
|
|
|
+ Map<String, String> ability = subjectAbilityService.map(paper.getSubjectId());
|
|
|
+ Map<String, Double> abilityScores = ObjectUtil.json2Map(paper.getJsonScore());
|
|
|
+ Map<String, Double> ret = new LinkedHashMap<>();
|
|
|
+
|
|
|
+ for (Map.Entry<String, Double> entry : scores.entrySet()) {
|
|
|
+ Double score = abilityScores.getOrDefault(entry.getKey(), 0d);
|
|
|
+ double s = score == 0 ? 0 : NumberUtil.format(10.0 * entry.getValue() / score);
|
|
|
+ ret.put(ability.get(entry.getKey()), s);
|
|
|
}
|
|
|
- return ObjectUtil.object2Json(d);
|
|
|
-
|
|
|
+ return ObjectUtil.object2Json(ret);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -270,7 +243,7 @@ public class PaperResultService {
|
|
|
List<SubjectKnowledge> knowledge = knowledgeService.list(subjectId, grade);
|
|
|
|
|
|
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<String, Set<Integer>> tagNumbers = tagNumbers(paper);
|
|
@@ -305,7 +278,7 @@ public class PaperResultService {
|
|
|
List<SubjectKnowledge> knowledge = knowledgeService.list(paper.getSubjectId(), paper.getGrade());
|
|
|
|
|
|
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<String, Set<Integer>> tagNumbers = tagNumbers(paper);
|
|
|
|
|
@@ -353,7 +326,7 @@ public class PaperResultService {
|
|
|
});
|
|
|
|
|
|
|
|
|
- List<Integer> collects = convertCollectQuestion(result.getCollectQuestion());
|
|
|
+ List<Integer> collects = convertQuestion(result.getCollectQuestion());
|
|
|
|
|
|
|
|
|
Map<String, Set<Integer>> tagNumbers = tagNumbers(paper);
|
|
@@ -380,13 +353,6 @@ 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<>();
|
|
|
paper.getQuestions().forEach(q -> {
|
|
@@ -476,7 +442,7 @@ public class PaperResultService {
|
|
|
|
|
|
|
|
|
|
|
|
- List<Integer> collects = convertCollectQuestion(result.getCollectQuestion());
|
|
|
+ List<Integer> collects = convertQuestion(result.getCollectQuestion());
|
|
|
|
|
|
Map<String, Set<Integer>> tagNumbers = tagNumbers(paper);
|
|
|
|
|
@@ -488,7 +454,7 @@ public class PaperResultService {
|
|
|
vo.setChapter(k.getChapter());
|
|
|
vo.setKnowledgeCode(k.getCode());
|
|
|
|
|
|
-
|
|
|
+
|
|
|
vo.setKeep(tagKeep.getOrDefault(k.getCode(), 0));
|
|
|
vo.setAbilityCodes(k.getAbilityCodes());
|
|
|
vos.add(vo);
|
|
@@ -516,7 +482,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<String, Set<Integer>> tagNumbers = tagNumbers(paper);
|
|
|
|
|
@@ -541,7 +507,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,39 +516,107 @@ public class PaperResultService {
|
|
|
Set<String> ks = entry.getValue();
|
|
|
List<Integer> keep = new ArrayList<>();
|
|
|
|
|
|
- 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
|
|
|
- * {
|
|
|
- * "知识记忆不牢":{
|
|
|
- * "percent":88.88,
|
|
|
- * "wrong":[1,2,3]
|
|
|
- * }
|
|
|
- * }
|
|
|
- *
|
|
|
- * 该问题在所有题目中的占比,比如10个错题,8个有基础不好,则基础不好占比为80
|
|
|
+ * 题目暴露的问题 该问题在所有题目中的占比,比如10个错题,8个有粗心大意,则粗心大意占比为80
|
|
|
+ * 右边两列
|
|
|
* {
|
|
|
- * "基础不好":{
|
|
|
- * "commonMatter":"知识记忆不牢,学习动力问题",
|
|
|
+ * "计算出错":{
|
|
|
+ * "commonMatter":"计算出错",
|
|
|
+ * "mistakeMatter":"粗心大意",
|
|
|
* "percent":88.10,
|
|
|
* "isStudy":true,
|
|
|
* "isEmotion":true
|
|
|
* }
|
|
|
* }
|
|
|
*/
|
|
|
- public void questionMatter(PaperResult result, Paper paper) {
|
|
|
- List<Integer> collects = convertCollectQuestion(result.getCollectQuestion());
|
|
|
- List<Integer> wrongs = convertWrongQuestion(paper, collects);
|
|
|
+ public String commonMatters(PaperResult result, Paper paper) {
|
|
|
+ List<KnowledgeMatter> matters = matterService.list(paper.getSubjectId(), paper.getGrade());
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ Map<String, KnowledgeMatter> matterMap = new HashMap<>();
|
|
|
+ for (KnowledgeMatter matter : matters) {
|
|
|
+ matterMap.putIfAbsent(matter.getCommonMatter(), matter);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ Map<String, List<KnowledgeMatter>> group = matters.stream().collect(Collectors.groupingBy(KnowledgeMatter::getCommonMatter));
|
|
|
+
|
|
|
+ List<Integer> wrongs = convertQuestion(result.getWrongQuestion());
|
|
|
+
|
|
|
+ Map<String, CommonMatterVo> commons = new LinkedHashMap<>();
|
|
|
+ group.forEach((commonMatter, list) -> {
|
|
|
+ List<Integer> numbers = list.stream().map(KnowledgeMatter::getNumber).collect(Collectors.toList());
|
|
|
+
|
|
|
+ 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
|
|
|
+ * 左边两列
|
|
|
+ * {
|
|
|
+ * "知识记忆不牢":{
|
|
|
+ * "percent":88.88,
|
|
|
+ * "wrongs":[1,2,3],
|
|
|
+ * "mistakeMatter":"知识记忆不牢"
|
|
|
+ * }
|
|
|
+ * }
|
|
|
+ */
|
|
|
+ public String mistakeMatters(PaperResult result, Paper paper) {
|
|
|
+ List<KnowledgeMatter> matters = matterService.list(paper.getSubjectId(), paper.getGrade());
|
|
|
+
|
|
|
+ Map<String, List<KnowledgeMatter>> group = matters.stream().collect(Collectors.groupingBy(KnowledgeMatter::getMistakeMatter));
|
|
|
+ List<Integer> wrongs = convertQuestion(result.getWrongQuestion());
|
|
|
+
|
|
|
+ Map<String, MistakeMatterVo> mistakes = new LinkedHashMap<>();
|
|
|
+ group.forEach((mistakeMatter, list) -> {
|
|
|
+ List<Integer> numbers = list.stream().map(KnowledgeMatter::getNumber).collect(Collectors.toList());
|
|
|
+
|
|
|
+ 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) {
|
|
|
+
|
|
|
+ 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());
|
|
|
}
|
|
|
|