|
@@ -479,47 +479,70 @@ public class PaperResultService {
|
|
|
|
|
|
List<ScoreSegment> scoreSegments = scoreSegmentService.findBySubjectId(paper.getSubjectId());
|
|
|
String subject = subjectService.get(paper.getSubjectId()).getName();
|
|
|
+ logger.info("subject is {}", subject);
|
|
|
String abilityScore = result.getAbilityScore();
|
|
|
Map<String, Double> scores = ObjectUtil.json2Map(abilityScore);
|
|
|
+ logger.info("scores is {}", scores);
|
|
|
|
|
|
List<Integer> collects = convertQuestion(result.getCollectQuestion());
|
|
|
+ logger.info("correct questions {}", collects);
|
|
|
|
|
|
- Map<String, Set<Integer>> tagNumbers = tagNumbers(paper);
|
|
|
+
|
|
|
|
|
|
- Map<String, Integer> tagKeep = tagKeep(collects, tagNumbers);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
List<SubjectKnowledge> knowledge = knowledgeService.list(paper.getSubjectId(), paper.getGrade());
|
|
|
|
|
|
-
|
|
|
- Map<String, Set<String>> abilityKnowledge = new LinkedHashMap<>();
|
|
|
- knowledge.forEach(k -> {
|
|
|
- String[] abilityCodes = k.getAbilityCodes().split(",");
|
|
|
- for (String abilityCode : abilityCodes) {
|
|
|
- Set<String> ks = abilityKnowledge.getOrDefault(abilityCode, new HashSet<>());
|
|
|
- ks.add(k.getCode());
|
|
|
- abilityKnowledge.put(abilityCode, ks);
|
|
|
- }
|
|
|
+ List<AbilityScore> abilityScores = abilityScoreService.listBy(paper.getId());
|
|
|
+ Map<String, List<AbilityScore>> group = abilityScoreService.groupByAbilityCode(abilityScores);
|
|
|
+
|
|
|
+
|
|
|
+ Map<String, Set<Integer>> abilityNumber = new LinkedHashMap<>();
|
|
|
+ group.forEach((abilityCode, list) -> {
|
|
|
+ Set<Integer> ks = abilityNumber.getOrDefault(abilityCode, new HashSet<>());
|
|
|
+ ks.addAll(list.stream().map(AbilityScore::getNumber).collect(Collectors.toSet()));
|
|
|
+ abilityNumber.put(abilityCode, ks);
|
|
|
});
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ logger.info("abilityNumber is {}", abilityNumber);
|
|
|
|
|
|
Map<String, String> abilities = subjectAbilityService.map(paper.getSubjectId());
|
|
|
+ logger.info("abilities is {}", abilities);
|
|
|
Map<String, AbilityEvaluateVo> evaluates = new LinkedHashMap<>();
|
|
|
- for (Map.Entry<String, Set<String>> entry : abilityKnowledge.entrySet()) {
|
|
|
+ for (Map.Entry<String, Set<Integer>> entry : abilityNumber.entrySet()) {
|
|
|
String code = entry.getKey();
|
|
|
AbilityEvaluateVo vo = new AbilityEvaluateVo();
|
|
|
vo.setAbilityCode(code);
|
|
|
- vo.setScore(scores.getOrDefault(code, 0D));
|
|
|
+ vo.setAbility(abilities.get(code));
|
|
|
+ vo.setScore(scores.getOrDefault(vo.getAbility(), 0D));
|
|
|
|
|
|
ScoreSegment scoreSegment = scoreSegmentService.getLevel(vo.getScore(), scoreSegments, abilities.get(code), subject);
|
|
|
vo.setEvaluate(scoreSegment.getEvaluate());
|
|
|
vo.setExplain(scoreSegment.getExplanation());
|
|
|
-
|
|
|
- Set<String> ks = entry.getValue();
|
|
|
+
|
|
|
+ Set<Integer> ks = entry.getValue();
|
|
|
+ logger.info("abilityCode is {}, number are {}", code, ks);
|
|
|
List<Integer> keep = new ArrayList<>();
|
|
|
+
|
|
|
+ ks.forEach(k -> {
|
|
|
+ keep.add(collects.contains(k) ? Constants.KNOWLEDGE_MASTER : Constants.KNOWLEDGE_NOT_MASTER);
|
|
|
+ });
|
|
|
|
|
|
- ks.forEach(k -> keep.add(tagKeep.getOrDefault(k, 0)));
|
|
|
+
|
|
|
vo.setKeep(keep);
|
|
|
evaluates.put(abilities.get(code), vo);
|
|
|
}
|
|
|
+ result.setAbilityEvaluateVo(evaluates);
|
|
|
return ObjectUtil.object2Json(evaluates);
|
|
|
}
|
|
|
|