Browse Source

完成知识点第3级掌握率统计

4228306 5 years ago
parent
commit
ae5346888e

+ 71 - 6
src/main/java/com/yaoxiang/diagnosis/controller/TestController.java

@@ -4,6 +4,7 @@ import com.google.common.collect.ArrayTable;
 import com.google.common.collect.HashBasedTable;
 import com.google.common.collect.Table;
 import com.google.gson.reflect.TypeToken;
+import com.yaoxiang.diagnosis.config.Constants;
 import com.yaoxiang.diagnosis.dao.OptionRepo;
 import com.yaoxiang.diagnosis.dao.QuestionRepo;
 import com.yaoxiang.diagnosis.entity.*;
@@ -225,6 +226,32 @@ public class TestController {
         response.getOutputStream().write(data);
     }
 
+    @GetMapping("tagMasterLevel3")
+    @ApiOperation("导出试卷每个知识点掌握率")
+    @ApiImplicitParams({@ApiImplicitParam(name = "pid", value = "pid", paramType = "query"),
+            @ApiImplicitParam(name = "startTime", value = "startTime", paramType = "query"),
+            @ApiImplicitParam(name = "endTime", value = "endTime", paramType = "query")})
+    public void tagMasterLevel3(Long pid, HttpServletResponse response,
+                                @RequestParam(defaultValue = "1584107900000") Long startTime,
+                                @RequestParam(required = false) Long endTime) throws IOException {
+        logger.info("start {}", new Date(startTime));
+        if (endTime == null) {
+            endTime = DateUtil.getLastTimeOfDay(new Date()).getTime();
+        }
+        logger.info("end {}", new Date(endTime));
+        List<PaperCommit> list = commitService.listPaperCommit(pid, startTime, endTime);
+        Paper p = paperService.getOnePaper(pid);
+        byte[] data = calc4(list, p);
+        logger.info("commit size {},", list.size());
+//        logger.info("list={}", list);
+//        List<>
+//        HttpHeaders headers = new HttpHeaders();
+//        headers.add("Content-Disposition", "attachment; filename=xxx.xlxs");
+//        headers.add("Content-Type");
+        response.setHeader("Content-Disposition", "attachment;fileName=xxx.xlsx");
+        response.getOutputStream().write(data);
+    }
+
     public byte[] calc1(List<PaperCommit> list, Paper p) {
         //Map<number,Map<option,count>>
         Map<Integer, Map<String, Integer>> mapCount = new LinkedHashMap<>();
@@ -306,12 +333,13 @@ public class TestController {
             List<SpecialKnowledgeVo> vos = new ArrayList<>();
             SpecialResult result = specialReportService.generate(commit.getPid(), commit.getUid(), false);
             List<SpecialKnowledge> knowledges = result.getKnowledges();
-            knowledges.stream().filter(k -> k.getLevel() == 1 || k.getLevel() == 2).forEach(k->{
-                        SpecialKnowledgeVo vo = new SpecialKnowledgeVo();
-                        vo.setContent(k.getContent());
-                        vo.setLevel(k.getLevel());
-                        vo.setMaster(k.getMaster());
-                        vos.add(vo);
+            knowledges.stream().filter(k -> k.getLevel() == 1 || k.getLevel() == 2).forEach(k -> {
+                SpecialKnowledgeVo vo = new SpecialKnowledgeVo();
+                vo.setContent(k.getContent());
+                vo.setLevel(k.getLevel());
+                vo.setMaster(k.getMaster());
+                vo.setMasterStatus(k.getMasterStatus());
+                vos.add(vo);
             });
             lists.add(vos);
         }
@@ -323,6 +351,7 @@ public class TestController {
                 TagMasterVo vo = voMap.getOrDefault(k.getContent(), new TagMasterVo());
                 vo.setContent(k.getContent());
                 vo.setLevel(k.getLevel());
+//                vo.setMasterStatus(k.getMasterStatus());
                 List<Double> masters = vo.getMasters();
                 masters.add(k.getMaster());
                 vo.setMasters(masters);
@@ -333,6 +362,42 @@ public class TestController {
         return ExportUtil.export3(list.size(), voMap.values());
     }
 
+    public byte[] calc4(List<PaperCommit> list, Paper p) {
+        List<List<SpecialKnowledgeVo>> lists = new ArrayList<>();
+//        Table<String, String, Double> table = HashBasedTable.create();
+
+        for (PaperCommit commit : list) {
+            List<SpecialKnowledgeVo> vos = new ArrayList<>();
+            SpecialResult result = specialReportService.generate(commit.getPid(), commit.getUid(), false);
+            List<SpecialKnowledge> knowledges = result.getKnowledges();
+            knowledges.stream().filter(k -> k.getLevel() == 3).forEach(k -> {
+                SpecialKnowledgeVo vo = new SpecialKnowledgeVo();
+                vo.setContent(k.getContent());
+                vo.setLevel(k.getLevel());
+                vo.setMaster(k.getMaster());
+                vo.setMasterStatus(k.getMasterStatus());
+                vos.add(vo);
+            });
+            lists.add(vos);
+        }
+        Map<String, TagMasterVo> voMap = new LinkedHashMap<>();
+        for (List<SpecialKnowledgeVo> knowledges : lists) {
+            for (SpecialKnowledgeVo k : knowledges) {
+                TagMasterVo vo = voMap.getOrDefault(k.getContent(), new TagMasterVo());
+                vo.setContent(k.getContent());
+                vo.setLevel(k.getLevel());
+                boolean master = Constants.SPECIAL_KNOWLEDGE_MASTER.equals(k.getMasterStatus());
+                if (master) {
+                    vo.setMasterNum(vo.getMasterNum() + 1);
+                } else {
+                    vo.setUnmasterNum(vo.getUnmasterNum() + 1);
+                }
+                voMap.put(k.getContent(), vo);
+            }
+        }
+        return ExportUtil.export4(voMap.values());
+    }
+
 
     private List<AnswerContrast> convertAnswerContrast(String json) {
         return ObjectUtil.getGson().fromJson(json, new TypeToken<List<AnswerContrast>>() {

+ 9 - 0
src/main/java/com/yaoxiang/diagnosis/model/SpecialKnowledgeVo.java

@@ -5,6 +5,7 @@ public class SpecialKnowledgeVo {
     private String content;
     private Integer level;
     private Double master;
+    private String masterStatus;
 
     public String getContent() {
         return content;
@@ -29,4 +30,12 @@ public class SpecialKnowledgeVo {
     public void setMaster(Double master) {
         this.master = master;
     }
+
+    public String getMasterStatus() {
+        return masterStatus;
+    }
+
+    public void setMasterStatus(String masterStatus) {
+        this.masterStatus = masterStatus;
+    }
 }

+ 20 - 0
src/main/java/com/yaoxiang/diagnosis/model/TagMasterVo.java

@@ -6,6 +6,8 @@ import java.util.List;
 public class TagMasterVo {
     private String content;
     private Integer level;
+    private Integer masterNum = 0;
+    private Integer unmasterNum = 0;
     private List<Double> masters = new ArrayList<>();
 //    private List<Integer> count;
 
@@ -33,11 +35,29 @@ public class TagMasterVo {
         this.masters = masters;
     }
 
+    public Integer getMasterNum() {
+        return masterNum;
+    }
+
+    public void setMasterNum(Integer masterNum) {
+        this.masterNum = masterNum;
+    }
+
+    public Integer getUnmasterNum() {
+        return unmasterNum;
+    }
+
+    public void setUnmasterNum(Integer unmasterNum) {
+        this.unmasterNum = unmasterNum;
+    }
+
     @Override
     public String toString() {
         return "TagMasterVo{" +
                 "content='" + content + '\'' +
                 ", level=" + level +
+                ", masterNum=" + masterNum +
+                ", unmasterNum=" + unmasterNum +
                 ", masters=" + masters +
                 '}';
     }

+ 29 - 0
src/main/java/com/yaoxiang/diagnosis/util/ExportUtil.java

@@ -131,4 +131,33 @@ public class ExportUtil {
         }
         return bos.toByteArray();
     }
+
+    public static byte[] export4(Collection<TagMasterVo> values) {
+        XSSFWorkbook workbook = new XSSFWorkbook();
+        XSSFSheet sheet = workbook.createSheet();
+        XSSFRow row = sheet.createRow(0);
+        row.createCell(0).setCellValue("Level");
+        row.createCell(1).setCellValue("Tag");
+        row.createCell(2).setCellValue("掌握");
+        row.createCell(3).setCellValue("未掌握");
+        row.createCell(4).setCellValue("掌握百分比");
+        int i = 1;
+        for (TagMasterVo vo : values) {
+            System.out.println(vo);
+            row = sheet.createRow(i++);
+            row.createCell(0).setCellValue(vo.getLevel());
+            row.createCell(1).setCellValue(vo.getContent());
+            row.createCell(2).setCellValue(vo.getMasterNum());
+            row.createCell(3).setCellValue(vo.getUnmasterNum());
+            double rate = vo.getMasterNum() * 100.0 / (vo.getMasterNum() + vo.getUnmasterNum());
+            row.createCell(4).setCellValue(NumberUtil.format(rate));
+        }
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        try {
+            workbook.write(bos);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return bos.toByteArray();
+    }
 }