ソースを参照

完成各章节知识点掌握情况及所指向问题列表的接口

4228306 6 年 前
コミット
c9d2516798

+ 9 - 0
src/main/java/edu/math/diagnosis/dao/PaperCountRepo.java

@@ -0,0 +1,9 @@
+package edu.math.diagnosis.dao;
+
+import edu.math.diagnosis.entity.PaperCount;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface PaperCountRepo extends JpaRepository<PaperCount, Long> {
+
+    PaperCount findByPid(Long pid);
+}

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

@@ -20,6 +20,8 @@ public class KnowledgeMatter {
     private String grade;
 
     private Long subjectId;
+    @ApiModelProperty("题号")
+    private Integer number;
 
     private String commonMatter;
     private String mistakeMatter;
@@ -72,6 +74,14 @@ public class KnowledgeMatter {
         this.subjectId = subjectId;
     }
 
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+
     public String getCommonMatter() {
         return commonMatter;
     }

+ 23 - 0
src/main/java/edu/math/diagnosis/entity/PaperAndMatter.java

@@ -0,0 +1,23 @@
+package edu.math.diagnosis.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+//@Entity
+public class PaperAndMatter {
+
+//    @Id
+//    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    private Long subjectId;
+    private String grade;
+    private String number;
+    private String knowledgeMatter;
+    private String commonMatter;
+
+
+
+}

+ 11 - 0
src/main/java/edu/math/diagnosis/entity/Question.java

@@ -111,6 +111,9 @@ public class Question {
     @Transient
     private Integer usetime;
 
+//    @ApiModelProperty("题目暴露的问题 以,隔开")
+//    private String matter;
+
     public Long getId() {
         return id;
     }
@@ -311,4 +314,12 @@ public class Question {
     public void setJsonScore(String jsonScore) {
         this.jsonScore = jsonScore;
     }
+
+//    public String getMatter() {
+//        return matter;
+//    }
+//
+//    public void setMatter(String matter) {
+//        this.matter = matter;
+//    }
 }

+ 3 - 3
src/main/java/edu/math/diagnosis/model/KnowledgeKeepVo.java

@@ -5,7 +5,7 @@ public class KnowledgeKeepVo {
     private String chapter;
     private Integer number;
     private String knowledgeName;
-    private String keep;
+    private Integer keep;
     private String matter;
 
     public String getChapter() {
@@ -32,11 +32,11 @@ public class KnowledgeKeepVo {
         this.knowledgeName = knowledgeName;
     }
 
-    public String getKeep() {
+    public Integer getKeep() {
         return keep;
     }
 
-    public void setKeep(String keep) {
+    public void setKeep(Integer keep) {
         this.keep = keep;
     }
 

+ 9 - 0
src/main/java/edu/math/diagnosis/service/CommitService.java

@@ -41,6 +41,8 @@ public class CommitService {
     private UserService userService;
     @Resource
     private PaperResultService paperResultService;
+    @Resource
+    private PaperCountService paperCountService;
 
     private static final Logger logger = LoggerFactory.getLogger(CommitService.class);
 
@@ -142,6 +144,13 @@ public class CommitService {
         return Result.fail("考试结果解析失败");
     }
 
+    private boolean updateAvgCommitTime(Long pid,List<Answer> answers){
+        PaperCount count = paperCountService.findByPid(pid);
+        //TODO updateAvgCommitTime
+        return false;
+    }
+
+
     public List<PaperCommit> listPaperCommit(Long pid, String name, Long startTime, Long endTime) {
         //TODO 增加时间区间查询,待优化查询
         if (pid == null && StringUtils.isBlank(name)) {

+ 7 - 0
src/main/java/edu/math/diagnosis/service/KnowledgeService.java

@@ -6,6 +6,8 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 public class KnowledgeService {
@@ -24,4 +26,9 @@ public class KnowledgeService {
     public List<SubjectKnowledge> list(Long subjectId, String grade) {
         return subjectKnowledgeRepo.findBySubjectIdAndGrade(subjectId, grade);
     }
+
+    public Map<String, SubjectKnowledge> map(Long subjectId, String grade) {
+        List<SubjectKnowledge> list = list(subjectId, grade);
+        return list.stream().collect(Collectors.toMap(SubjectKnowledge::getCode, k -> k));
+    }
 }

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

@@ -17,7 +17,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 @Service
@@ -31,6 +30,8 @@ public class MatterService {
     private CommonMatterRepo commonMatterRepo;
     @Resource
     private KnowledgeMatterRepo knowledgeMatterRepo;
+    @Resource
+    private QuestionService questionService;
 
     public BaseMatter addBase(String name, String code) {
         if (existBase(name)) {
@@ -77,7 +78,7 @@ public class MatterService {
         return commonMatterRepo.existsByName(name);
     }
 
-    public KnowledgeMatter addKnowledge(String name, String code, String commonMatter, String mistakeMatter, String baseMatter, Long subjectId, String grade) {
+    public KnowledgeMatter addKnowledge(String name, String code, String commonMatter, String mistakeMatter, String baseMatter, Long subjectId, String grade,Integer nubmer) {
         if (existKnowledge(name, subjectId, grade)) {
             return null;
         }
@@ -89,6 +90,7 @@ public class MatterService {
         matter.setBaseMatter(baseMatter);
         matter.setSubjectId(subjectId);
         matter.setGrade(grade);
+        matter.setNumber(nubmer);
         return knowledgeMatterRepo.save(matter);
     }
 
@@ -107,9 +109,9 @@ public class MatterService {
             String mistake = vo.getMistakeMatter();
             String common = vo.getCommonMatter();
             String knowledge = vo.getKnowledgeMatter();
-            addMistake(mistake, CodeUtil.generate(4, CodeUtil.ALPHA), base);
-            addCommon(common, CodeUtil.generate(4, CodeUtil.ALPHA), mistake, base);
-            addKnowledge(knowledge, CodeUtil.generate(4, CodeUtil.ALPHA), common, mistake, base, vo.getSubjectId(), vo.getGrade());
+            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());
         }
     }
 

+ 18 - 0
src/main/java/edu/math/diagnosis/service/PaperCountService.java

@@ -0,0 +1,18 @@
+package edu.math.diagnosis.service;
+
+import edu.math.diagnosis.dao.PaperCountRepo;
+import edu.math.diagnosis.entity.PaperCount;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+@Service
+public class PaperCountService {
+
+    @Resource
+    private PaperCountRepo paperCountRepo;
+
+     public PaperCount findByPid(Long pid){
+
+     }
+}

+ 40 - 2
src/main/java/edu/math/diagnosis/service/PaperResultService.java

@@ -38,6 +38,8 @@ public class PaperResultService {
     private SubjectAbilityService subjectAbilityService;
     @Resource
     private ChapterService chapterService;
+    @Resource
+    private MatterService matterService;
 
     private static final Logger logger = LoggerFactory.getLogger(PaperResultService.class);
 
@@ -290,10 +292,45 @@ public class PaperResultService {
     }
 
     public Map<String, List<KnowledgeKeepVo>> knowledgeKeepStatus(PaperResult result, Paper paper) {
-        Map<String,List<KnowledgeKeepVo>> knowledgeKeepStatus = new LinkedHashMap<>();
+        //Map<chapter,List<KnowledgeKeepVo>>
+        Map<String, List<KnowledgeKeepVo>> knowledgeKeepStatus = new LinkedHashMap<>();
+        List<KnowledgeMatter> matters = matterService.list(paper.getSubjectId(), paper.getGrade());
+        Map<String, String> chapter = chapterService.map(paper.getSubjectId());
+        //Map<number,List<KnowledgeMatter>>以题目编号对知识点问题进行分组
+        Map<Integer, List<KnowledgeMatter>> group = matters.stream().collect(Collectors.groupingBy(KnowledgeMatter::getNumber));
+
+        //Map<number,Set<matter>> 题目对应的所有问题
+        Map<Integer, Set<String>> numberMatter = new HashMap<>();
+        group.forEach((number, list) -> {
+            Set<String> matter = list.stream().map(KnowledgeMatter::getCommonMatter).collect(Collectors.toSet());
+            numberMatter.put(number, matter);
+        });
 
 
-        return null;
+        List<Integer> collects = convertCollectQuestion(result.getCollectQuestion());
+
+        //Map<tag,Set<number>> 知识点与题目对应
+        Map<String, Set<Integer>> tagNumbers = tagNumbers(paper);
+        //Map<tag,keep> 每个知识点的掌握情况
+        Map<String, Integer> tagKeep = tagKeep(collects, tagNumbers);
+
+        //Map<tag,SubjectKnowledge> 知识点列表
+        Map<String, SubjectKnowledge> tagKnowledge = knowledgeService.map(paper.getSubjectId(), paper.getGrade());
+
+        List<KnowledgeKeepVo> vos = new ArrayList<>();
+        tagKnowledge.forEach((tag, k) -> {
+            KnowledgeKeepVo vo = new KnowledgeKeepVo();
+            vo.setChapter(chapter.get(k.getChapter()));
+            vo.setKeep(tagKeep.getOrDefault(tag, 0));
+            vo.setKnowledgeName(k.getContent());
+            Set<Integer> number = tagNumbers.getOrDefault(tag, new HashSet<>());
+            Set<String> matter = new HashSet<>();
+            //去重
+            number.forEach(n -> matter.addAll(numberMatter.get(n)));
+            vo.setMatter(StringUtils.join(matter, ","));
+            vos.add(vo);
+        });
+        return vos.stream().collect(Collectors.groupingBy(KnowledgeKeepVo::getChapter));
     }
 
 
@@ -330,4 +367,5 @@ public class PaperResultService {
         }
         return tagKeep;
     }
+
 }

+ 7 - 0
src/main/java/edu/math/diagnosis/service/QuestionService.java

@@ -141,4 +141,11 @@ public class QuestionService {
         return question;
     }
 
+    public boolean update(Question question) {
+        if (question == null || !questionRepo.existsById(question.getId())) {
+            return false;
+        }
+        return questionRepo.save(question) != null;
+    }
+
 }