Pārlūkot izejas kodu

准备从excel导入matter

4228306 5 gadi atpakaļ
vecāks
revīzija
b6a3573210

BIN
doc/报告生成数据.xlsx


+ 13 - 1
src/main/java/edu/math/diagnosis/controller/ExcelController.java

@@ -1,6 +1,7 @@
 package edu.math.diagnosis.controller;
 
 import edu.math.diagnosis.entity.SubjectKnowledge;
+import edu.math.diagnosis.model.MatterVo;
 import edu.math.diagnosis.model.Result;
 import edu.math.diagnosis.service.KnowledgeService;
 import edu.math.diagnosis.word.KnowledgeUtil;
@@ -29,8 +30,19 @@ public class ExcelController {
                                   @RequestParam(defaultValue = "6Y") String grade,
                                   @RequestBody MultipartFile file) throws Exception {
         byte[] data = file.getBytes();
-        List<SubjectKnowledge> list = KnowledgeUtil.getFromExcel(subjectId, grade, data);
+        List<SubjectKnowledge> list = KnowledgeUtil.importKnowledge(subjectId, grade, data);
         knowledgeService.addAll(list);
         return Result.ok(list);
     }
+
+    @PostMapping("/uploadMatter")
+    public Result uploadMatter(@RequestParam(defaultValue = "2") Long subjectId,
+                                  @RequestParam(defaultValue = "6Y") String grade,
+                                  @RequestBody MultipartFile file) throws Exception {
+        byte[] data = file.getBytes();
+        List<MatterVo> list = KnowledgeUtil.importMatter(subjectId, grade, data);
+//        knowledgeService.addAll(list);
+        return Result.ok(list);
+    }
+
 }

+ 7 - 0
src/main/java/edu/math/diagnosis/dao/BaseMatterRepo.java

@@ -0,0 +1,7 @@
+package edu.math.diagnosis.dao;
+
+import edu.math.diagnosis.entity.BaseMatter;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface BaseMatterRepo  extends JpaRepository<BaseMatter, Long> {
+}

+ 11 - 0
src/main/java/edu/math/diagnosis/dao/ChapterRepo.java

@@ -0,0 +1,11 @@
+package edu.math.diagnosis.dao;
+
+import edu.math.diagnosis.entity.Chapter;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface ChapterRepo extends JpaRepository<Chapter, Long> {
+
+    List<Chapter> findAllBySubjectId(Long subjectId);
+}

+ 7 - 0
src/main/java/edu/math/diagnosis/dao/CommonMatterRepo.java

@@ -0,0 +1,7 @@
+package edu.math.diagnosis.dao;
+
+import edu.math.diagnosis.entity.CommonMatter;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface CommonMatterRepo extends JpaRepository<CommonMatter,Long> {
+}

+ 11 - 0
src/main/java/edu/math/diagnosis/dao/KnowledgeMatterRepo.java

@@ -0,0 +1,11 @@
+package edu.math.diagnosis.dao;
+
+import edu.math.diagnosis.entity.KnowledgeMatter;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface KnowledgeMatterRepo extends JpaRepository<KnowledgeMatter,Long> {
+
+    List<KnowledgeMatter> findAllBySubjectIdAndGrade(Long subjectId,String grade);
+}

+ 7 - 0
src/main/java/edu/math/diagnosis/dao/MistakeMatterRepo.java

@@ -0,0 +1,7 @@
+package edu.math.diagnosis.dao;
+
+import edu.math.diagnosis.entity.MistakeMatter;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface MistakeMatterRepo extends JpaRepository<MistakeMatter,Long> {
+}

+ 6 - 6
src/main/java/edu/math/diagnosis/entity/BaseMatter.java

@@ -12,8 +12,8 @@ public class BaseMatter {
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
     @Column(nullable = false)
-    private Long name;
-    private Long code;
+    private String name;
+    private String code;
 
     public Long getId() {
         return id;
@@ -23,19 +23,19 @@ public class BaseMatter {
         this.id = id;
     }
 
-    public Long getName() {
+    public String getName() {
         return name;
     }
 
-    public void setName(Long name) {
+    public void setName(String name) {
         this.name = name;
     }
 
-    public Long getCode() {
+    public String getCode() {
         return code;
     }
 
-    public void setCode(Long code) {
+    public void setCode(String code) {
         this.code = code;
     }
 }

+ 2 - 0
src/main/java/edu/math/diagnosis/entity/Chapter.java

@@ -2,11 +2,13 @@ package edu.math.diagnosis.entity;
 
 import io.swagger.annotations.ApiModel;
 
+import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 
 @ApiModel("章节")
+@Entity
 public class Chapter {
 
     @Id

+ 1 - 1
src/main/java/edu/math/diagnosis/entity/CommonMatter.java

@@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModel;
 import javax.persistence.*;
 
 @Entity
-@ApiModel("通用问题")
+@ApiModel("通用/题目问题")
 public class CommonMatter {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)

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

@@ -9,7 +9,7 @@ import javax.persistence.*;
 import java.util.Date;
 
 @Entity
-@ApiModel("知识点问题")
+@ApiModel("知识点/选项问题")
 public class KnowledgeMatter {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)

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

@@ -0,0 +1,50 @@
+package edu.math.diagnosis.model;
+
+public class KnowledgeKeepVo {
+
+    private String chapter;
+    private Integer number;
+    private String knowledgeName;
+    private String keep;
+    private String matter;
+
+    public String getChapter() {
+        return chapter;
+    }
+
+    public void setChapter(String chapter) {
+        this.chapter = chapter;
+    }
+
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+
+    public String getKnowledgeName() {
+        return knowledgeName;
+    }
+
+    public void setKnowledgeName(String knowledgeName) {
+        this.knowledgeName = knowledgeName;
+    }
+
+    public String getKeep() {
+        return keep;
+    }
+
+    public void setKeep(String keep) {
+        this.keep = keep;
+    }
+
+    public String getMatter() {
+        return matter;
+    }
+
+    public void setMatter(String matter) {
+        this.matter = matter;
+    }
+}

+ 101 - 0
src/main/java/edu/math/diagnosis/model/MatterVo.java

@@ -0,0 +1,101 @@
+package edu.math.diagnosis.model;
+
+public class MatterVo {
+
+    private Long subjectId;
+    private String grade;
+    private Integer number;
+    private String option;
+    private String knowledgeMatter;
+    private String commonMatter;
+    private String mistakeMatter;
+    private Boolean studyMatter;
+    private Boolean emotionMatter;
+
+    public Long getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Long subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getGrade() {
+        return grade;
+    }
+
+    public void setGrade(String grade) {
+        this.grade = grade;
+    }
+
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+
+    public String getOption() {
+        return option;
+    }
+
+    public void setOption(String option) {
+        this.option = option;
+    }
+
+    public String getKnowledgeMatter() {
+        return knowledgeMatter;
+    }
+
+    public void setKnowledgeMatter(String knowledgeMatter) {
+        this.knowledgeMatter = knowledgeMatter;
+    }
+
+    public String getCommonMatter() {
+        return commonMatter;
+    }
+
+    public void setCommonMatter(String commonMatter) {
+        this.commonMatter = commonMatter;
+    }
+
+    public String getMistakeMatter() {
+        return mistakeMatter;
+    }
+
+    public void setMistakeMatter(String mistakeMatter) {
+        this.mistakeMatter = mistakeMatter;
+    }
+
+    public Boolean getStudyMatter() {
+        return studyMatter;
+    }
+
+    public void setStudyMatter(Boolean studyMatter) {
+        this.studyMatter = studyMatter;
+    }
+
+    public Boolean getEmotionMatter() {
+        return emotionMatter;
+    }
+
+    public void setEmotionMatter(Boolean emotionMatter) {
+        this.emotionMatter = emotionMatter;
+    }
+
+    @Override
+    public String toString() {
+        return "MatterVo{" +
+                "subjectId=" + subjectId +
+                ", grade='" + grade + '\'' +
+                ", number=" + number +
+                ", option='" + option + '\'' +
+                ", knowledgeMatter='" + knowledgeMatter + '\'' +
+                ", commonMatter='" + commonMatter + '\'' +
+                ", mistakeMatter='" + mistakeMatter + '\'' +
+                ", studyMatter=" + studyMatter +
+                ", emotionMatter=" + emotionMatter +
+                '}';
+    }
+}

+ 27 - 0
src/main/java/edu/math/diagnosis/service/ChapterService.java

@@ -0,0 +1,27 @@
+package edu.math.diagnosis.service;
+
+import edu.math.diagnosis.dao.ChapterRepo;
+import edu.math.diagnosis.entity.Chapter;
+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 ChapterService {
+
+    @Resource
+    private ChapterRepo chapterRepo;
+
+    public List<Chapter> list(Long subjectId) {
+        return chapterRepo.findAllBySubjectId(subjectId);
+    }
+
+    public Map<String,String> map(Long subjectId){
+        List<Chapter> chapters = list(subjectId);
+        // Map<code,Name>
+        return chapters.stream().collect(Collectors.toMap(Chapter::getChapter,Chapter::getName));
+    }
+}

+ 69 - 0
src/main/java/edu/math/diagnosis/service/MatterService.java

@@ -0,0 +1,69 @@
+package edu.math.diagnosis.service;
+
+import edu.math.diagnosis.dao.BaseMatterRepo;
+import edu.math.diagnosis.dao.CommonMatterRepo;
+import edu.math.diagnosis.dao.KnowledgeMatterRepo;
+import edu.math.diagnosis.dao.MistakeMatterRepo;
+import edu.math.diagnosis.entity.BaseMatter;
+import edu.math.diagnosis.entity.CommonMatter;
+import edu.math.diagnosis.entity.KnowledgeMatter;
+import edu.math.diagnosis.entity.MistakeMatter;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class MatterService {
+
+    @Resource
+    private BaseMatterRepo baseMatterRepo;
+    @Resource
+    private MistakeMatterRepo mistakeMatterRepo;
+    @Resource
+    private CommonMatterRepo commonMatterRepo;
+    @Resource
+    private KnowledgeMatterRepo knowledgeMatterRepo;
+
+    public BaseMatter addBase(String name, String code) {
+        BaseMatter matter = new BaseMatter();
+        matter.setName(name);
+        matter.setCode(code);
+        return baseMatterRepo.save(matter);
+    }
+
+    public MistakeMatter addMistake(String name, String code, String baseMatter) {
+        MistakeMatter matter = new MistakeMatter();
+        matter.setName(name);
+        matter.setCode(code);
+        matter.setBaseMatter(baseMatter);
+        return mistakeMatterRepo.save(matter);
+    }
+
+    public CommonMatter addCommon(String name, String code, String mistakeMatter, String baseMatter) {
+        CommonMatter matter = new CommonMatter();
+        matter.setName(name);
+        matter.setCode(code);
+        matter.setMistakeMatter(mistakeMatter);
+        matter.setBaseMatter(baseMatter);
+        return commonMatterRepo.save(matter);
+    }
+
+    public KnowledgeMatter addKnowledge(String name, String code, String commonMatter, String mistakeMatter, String baseMatter, Long subjectId, String grade) {
+        KnowledgeMatter matter = new KnowledgeMatter();
+        matter.setName(name);
+        matter.setCode(code);
+        matter.setCommonMatter(commonMatter);
+        matter.setMistakeMatter(mistakeMatter);
+        matter.setBaseMatter(baseMatter);
+        matter.setSubjectId(subjectId);
+        matter.setGrade(grade);
+        return knowledgeMatterRepo.save(matter);
+    }
+
+    public List<KnowledgeMatter> list(Long subjectId, String grade) {
+        return knowledgeMatterRepo.findAllBySubjectIdAndGrade(subjectId, grade);
+    }
+
+
+}

+ 31 - 4
src/main/java/edu/math/diagnosis/service/PaperResultService.java

@@ -5,6 +5,7 @@ import edu.math.diagnosis.dao.PaperCommitRepo;
 import edu.math.diagnosis.dao.PaperResultRepo;
 import edu.math.diagnosis.entity.*;
 import edu.math.diagnosis.model.Answer;
+import edu.math.diagnosis.model.KnowledgeKeepVo;
 import edu.math.diagnosis.model.Result;
 import edu.math.diagnosis.util.NumberUtil;
 import edu.math.diagnosis.util.ObjectUtil;
@@ -35,6 +36,8 @@ public class PaperResultService {
     private AbilityScoreService abilityScoreService;
     @Resource
     private SubjectAbilityService subjectAbilityService;
+    @Resource
+    private ChapterService chapterService;
 
     private static final Logger logger = LoggerFactory.getLogger(PaperResultService.class);
 
@@ -255,18 +258,42 @@ public class PaperResultService {
         return ObjectUtil.object2Json(keepStatus);
     }
 
-    public String chapterKeepRate(PaperResult result,Paper paper){
-        Map<String,Double> chapterKeepRate = new LinkedHashMap<>();
+    public String chapterKeepRate(PaperResult result, Paper paper) {
+        //Map<chapter,rate> 章节掌握率
+        Map<String, Double> chapterKeepRate = new LinkedHashMap<>();
+
+        //Map<chapter,name> 章节
+        Map<String, String> chapterName = chapterService.map(paper.getSubjectId());
+
         List<SubjectKnowledge> knowledge = knowledgeService.list(paper.getSubjectId(), paper.getGrade());
-        //根据章节分组 Map<chapter,...>
+        //根据章节分组 Map<chapter,List<SubjectKnowledge>>
         Map<String, List<SubjectKnowledge>> group = knowledge.stream().collect(Collectors.groupingBy(SubjectKnowledge::getChapter));
         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);
+        group.forEach((chapter, list) -> {
+            int knowledgeSize = list.size();
+            int keepCount = 0;
+            for (SubjectKnowledge k : list) {
+                int keep = tagKeep.getOrDefault(k.getCode(), 0);
+                if (keep == Constants.KNOWLEDGE_MASTER) {
+                    keepCount++;
+                }
+            }
+            //计算章节掌握百分比
+            double rate = knowledgeSize == 0 ? 0 : NumberUtil.format(keepCount * 100.0 / knowledgeSize);
+            chapterKeepRate.put(chapterName.get(chapter), rate);
+        });
+        return ObjectUtil.object2Json(chapterKeepRate);
+    }
+
+    public Map<String, List<KnowledgeKeepVo>> knowledgeKeepStatus(PaperResult result, Paper paper) {
+        Map<String,List<KnowledgeKeepVo>> knowledgeKeepStatus = new LinkedHashMap<>();
+
 
-        return "{}";
+        return null;
     }
 
 

+ 2 - 4
src/main/java/edu/math/diagnosis/service/SubjectAbilityService.java

@@ -8,6 +8,7 @@ import javax.annotation.Resource;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 public class SubjectAbilityService {
@@ -25,10 +26,7 @@ public class SubjectAbilityService {
 
     public Map<String, String> map(Long subjectId) {
         List<SubjectAbility> abilities = list(subjectId);
-
         // Map<code,Name>
-        Map<String, String> code = new HashMap<>();
-        abilities.forEach(a -> code.put(a.getCode(), a.getName()));
-        return code;
+        return abilities.stream().collect(Collectors.toMap(SubjectAbility::getCode, SubjectAbility::getName));
     }
 }

+ 24 - 2
src/main/java/edu/math/diagnosis/word/KnowledgeUtil.java

@@ -1,6 +1,7 @@
 package edu.math.diagnosis.word;
 
 import edu.math.diagnosis.entity.SubjectKnowledge;
+import edu.math.diagnosis.model.MatterVo;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.xssf.usermodel.XSSFRow;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
@@ -17,12 +18,13 @@ public class KnowledgeUtil {
     public static final int START_COLUMN = 2;
     public static final int END_COLUMN = 100;
 
-    public static List<SubjectKnowledge> getFromExcel(Long subjectId, String grade, byte[] data) throws Exception {
+    public static List<SubjectKnowledge> importKnowledge(Long subjectId, String grade, byte[] data) throws Exception {
         XSSFWorkbook book = new XSSFWorkbook(new ByteArrayInputStream(data));
-        XSSFSheet sheet = book.getSheetAt(1);
+        XSSFSheet sheet = book.getSheet("知识点与能力对应关系");
         //TODO 读取优化
         String[] codes = {"A1", "A2", "A3", "A4", "A5", "A6"};
         List<SubjectKnowledge> result = new ArrayList<>();
+        //numRow从0计数
         for (int numRow = 2; numRow <= sheet.getLastRowNum(); numRow++) {
             XSSFRow xRow = sheet.getRow(numRow);
             //4 9
@@ -50,4 +52,24 @@ public class KnowledgeUtil {
         return result;
     }
 
+    public static List<MatterVo> importMatter(Long subjectId, String grade, byte[] data) throws Exception {
+        XSSFWorkbook book = new XSSFWorkbook(new ByteArrayInputStream(data));
+        XSSFSheet sheet = book.getSheet("题目对应问题");
+        List<MatterVo> result = new ArrayList<>();
+        for (int numRow = 2; numRow < sheet.getLastRowNum(); numRow++) {
+            XSSFRow xRow = sheet.getRow(numRow);
+//            xRow.getCell(1).setCellValue((float) (numRow + 3) / 5);
+            MatterVo vo = new MatterVo();
+            vo.setNumber((numRow + 3) / 5);
+            vo.setOption(xRow.getCell(2).getStringCellValue());
+            vo.setKnowledgeMatter(xRow.getCell(3).getStringCellValue());
+            vo.setCommonMatter(xRow.getCell(4).getStringCellValue());
+            vo.setMistakeMatter(xRow.getCell(5).getStringCellValue());
+            vo.setEmotionMatter(xRow.getCell(6).getBooleanCellValue());
+            vo.setStudyMatter(xRow.getCell(7).getBooleanCellValue());
+            result.add(vo);
+        }
+        System.out.println(result);
+        return result;
+    }
 }