DataAnalysisServiceImpl.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package com.seecoder.dataanalysis.analysis.impl;
  2. import com.seecoder.dataanalysis.analysis.DataAnalysisService;
  3. import com.seecoder.dataanalysis.data.dao.competency.CompetencyTreeDao;
  4. import com.seecoder.dataanalysis.data.dao.eval.EvalExamInfoDao;
  5. import com.seecoder.dataanalysis.data.dao.eval.EvalExamRecordDao;
  6. import com.seecoder.dataanalysis.data.dao.eval.QuestionDao;
  7. import com.seecoder.dataanalysis.data.entity.competency.CompetencyTree;
  8. import com.seecoder.dataanalysis.data.entity.competency.DScore;
  9. import com.seecoder.dataanalysis.data.entity.competency.KSDScore;
  10. import com.seecoder.dataanalysis.data.entity.competency.KSScore;
  11. import com.seecoder.dataanalysis.data.entity.eval.EvalExamInfo;
  12. import com.seecoder.dataanalysis.data.entity.eval.EvalExamRecord;
  13. import com.seecoder.dataanalysis.data.entity.eval.Question;
  14. import com.seecoder.dataanalysis.vo.EvalExamRecordDTO;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Service;
  17. import java.util.List;
  18. import java.util.Map;
  19. /**
  20. * @author Peng Yiyan
  21. * @since 2022/02/03
  22. */
  23. @Service
  24. public class DataAnalysisServiceImpl implements DataAnalysisService {
  25. @Autowired
  26. private EvalExamRecordDao evalExamRecordDao;
  27. @Autowired
  28. private EvalExamInfoDao evalExamInfoDao;
  29. @Autowired
  30. private CompetencyTreeDao competencyTreeDao;
  31. @Autowired
  32. private QuestionDao questionDao;
  33. @Override
  34. public CompetencyTree getTreeById(int student_id){
  35. return null;
  36. }
  37. @Override
  38. public CompetencyTree getTreeAfterExam(int exam_id){
  39. //TODO 测试检查
  40. EvalExamRecord evalExamRecord = evalExamRecordDao.findById(exam_id).get();
  41. EvalExamInfo evalExamInfo = evalExamInfoDao.findById(exam_id).get();
  42. CompetencyTree competencyTree = competencyTreeDao.findByStudentId(evalExamRecord.getStudentId());
  43. //数据取完,开始进行KSD分析和入库
  44. List<KSDScore> subTree = competencyTree.getSubCompetencyTree();
  45. Integer difficulty = evalExamInfo.getDifficulty();
  46. String disposition = evalExamInfo.getDisposition();
  47. Double tree_Score = competencyTree.getTreeScore();
  48. //得到学生所有题目的得分
  49. Map<String, Double> studentScores = evalExamRecord.getErrorQuestions();
  50. Map<String,Double> questionAndScore = evalExamInfo.getQuestionAndScore();
  51. for(Map.Entry<String, Double> entry : studentScores.entrySet()){
  52. String questionId = entry.getKey();
  53. Question question = questionDao.findById(questionId).get();
  54. //在能力树中加成的部分 = 学生得分 * 试卷难度
  55. Double percent = difficulty * studentScores.get(questionId);
  56. tree_Score += percent;
  57. //根据competency找大分类
  58. for(KSDScore ksdScore : subTree){
  59. if(ksdScore.getCompetency().equals(question.getCompetency())){
  60. //增加该能力子树的分数
  61. Double total_score = ksdScore.getTotalScore();
  62. total_score += percent;
  63. ksdScore.setTotalScore(total_score);
  64. //在对应的competency下进行下一步小分类
  65. //修改K-S的分数
  66. List<KSScore> subKS = ksdScore.getKSScore();
  67. for(KSScore ksScore : subKS){
  68. if(ksScore.getKnowledge() == question.getKsScore().getKnowledge()){
  69. List<Double> Skills = ksScore.getSkillsAndScore();
  70. for(int i=0;i<Skills.size();i++){
  71. Double score = question.getKsScore().getSkillsAndScore().get(i) * percent + Skills.get(i);
  72. Skills.set(i,score);
  73. }
  74. ksScore.setSkillsAndScore(Skills);
  75. break;
  76. }
  77. }
  78. List<DScore> subD = ksdScore.getDScore();
  79. //修改Disposition的分数
  80. for(DScore dScore : subD){
  81. if(dScore.getName().equals(disposition)){
  82. Double score = percent + dScore.getScore();
  83. dScore.setScore(score);
  84. break;
  85. }
  86. }
  87. }
  88. }
  89. }
  90. //处理完考试中的每个问题后,更新能力树
  91. competencyTree.setTreeScore(tree_Score);
  92. competencyTreeDao.save(competencyTree);
  93. return competencyTree;
  94. }
  95. }