Procházet zdrojové kódy

完成每人第1、2级知识点掌握率

4228306 před 5 roky
rodič
revize
22620c751a

+ 2 - 2
src/main/java/com/yaoxiang/diagnosis/controller/SpecialReportController.java

@@ -25,13 +25,13 @@ public class SpecialReportController {
     @GetMapping("/generate")
     @ApiOperation("学生端 生成专项诊断第一页知识点报告 ")
     public SpecialResult generate(Long pid, Long uid) {
-        return specialReportService.generate(pid, uid);
+        return specialReportService.generate(pid, uid,true);
     }
 
     @GetMapping("/generate1")
     @ApiOperation("管理端 生成专项诊断第一页知识点报告")
     public SpecialResult generate(Long resultId) {
-        return specialReportService.generate(resultId);
+        return specialReportService.generate(resultId,true);
     }
 
     @GetMapping("/generateMind")

+ 67 - 3
src/main/java/com/yaoxiang/diagnosis/controller/TestController.java

@@ -1,22 +1,25 @@
 package com.yaoxiang.diagnosis.controller;
 
+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.dao.OptionRepo;
 import com.yaoxiang.diagnosis.dao.QuestionRepo;
-import com.yaoxiang.diagnosis.entity.Paper;
-import com.yaoxiang.diagnosis.entity.PaperCommit;
+import com.yaoxiang.diagnosis.entity.*;
 import com.yaoxiang.diagnosis.file.FileService;
-import com.yaoxiang.diagnosis.entity.Question;
 import com.yaoxiang.diagnosis.model.*;
 import com.yaoxiang.diagnosis.service.CommitService;
 import com.yaoxiang.diagnosis.service.PaperService;
 import com.yaoxiang.diagnosis.service.SpecialKnowledgeService;
+import com.yaoxiang.diagnosis.service.SpecialReportService;
 import com.yaoxiang.diagnosis.util.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.formula.functions.T;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.http.HttpHeaders;
@@ -30,6 +33,7 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.stream.Collectors;
 
 /**
  * @AUTHOR: DaiFengWen
@@ -53,6 +57,9 @@ public class TestController {
     @Resource
     private PaperService paperService;
 
+    @Resource
+    private SpecialReportService specialReportService;
+
     private AtomicLong visitCount = new AtomicLong();
 
     private static final Logger logger = LoggerFactory.getLogger(TestController.class);
@@ -192,6 +199,32 @@ public class TestController {
         response.getOutputStream().write(data);
     }
 
+    @GetMapping("tagMaster")
+    @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 tagMaster(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 = calc3(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<>();
@@ -265,6 +298,37 @@ public class TestController {
         return ExportUtil.export2(p.getQuestionNum(), userMap);
     }
 
+    public byte[] calc3(List<PaperCommit> list, Paper p) {
+        List<SpecialResult> list1 = new ArrayList<>();
+//        Table<String, String, Double> table = HashBasedTable.create();
+
+        for (PaperCommit commit : list) {
+            SpecialResult result = specialReportService.generate(commit.getPid(), commit.getUid(), false);
+            result.setKnowledges(result.getKnowledges().stream().filter(k -> k.getLevel() == 1 || k.getLevel() == 2).collect(Collectors.toList()));
+            logger.info("result knowledges size is {}", result.getKnowledges().size());
+            list1.add(result);
+        }
+//        List<TagMasterVo>vos = new ArrayList<>();
+
+        Map<String, TagMasterVo> voMap = new LinkedHashMap<>();
+        for (SpecialResult result : list1) {
+            List<SpecialKnowledge> knowledges = result.getKnowledges();
+            for (SpecialKnowledge k : knowledges) {
+                TagMasterVo vo = voMap.getOrDefault(k.getContent(), new TagMasterVo());
+                vo.setContent(k.getContent());
+                vo.setLevel(k.getLevel());
+                List<Double> masters = vo.getMasters();
+                if (masters == null) {
+                    masters = new ArrayList<>();
+                }
+                masters.add(k.getMaster());
+                vo.setMasters(masters);
+                voMap.put(k.getContent(), vo);
+            }
+        }
+        return ExportUtil.export3(list.size(),voMap.values());
+    }
+
 
     private List<AnswerContrast> convertAnswerContrast(String json) {
         return ObjectUtil.getGson().fromJson(json, new TypeToken<List<AnswerContrast>>() {

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

@@ -0,0 +1,34 @@
+package com.yaoxiang.diagnosis.model;
+
+import java.util.List;
+
+public class TagMasterVo {
+    private String content;
+    private Integer level;
+    private List<Double> masters;
+//    private List<Integer> count;
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getLevel() {
+        return level;
+    }
+
+    public void setLevel(Integer level) {
+        this.level = level;
+    }
+
+    public List<Double> getMasters() {
+        return masters;
+    }
+
+    public void setMasters(List<Double> masters) {
+        this.masters = masters;
+    }
+}

+ 20 - 10
src/main/java/com/yaoxiang/diagnosis/service/SpecialReportService.java

@@ -39,7 +39,7 @@ public class SpecialReportService {
 
     private static final Logger logger = LoggerFactory.getLogger(SpecialReportService.class);
 
-    public SpecialResult generate(Long pid, Long uid) {
+    public SpecialResult generate(Long pid, Long uid, boolean toTree) {
         logger.info("正在生成专项诊断报告");
         Paper paper = paperService.getOnePaper(pid);
         if (paper == null) {
@@ -51,10 +51,10 @@ public class SpecialReportService {
             logger.error("用户未提交 pid={},uid={}", pid, uid);
             return null;
         }
-        return generate(commit, paper);
+        return generate(commit, paper, toTree);
     }
 
-    public SpecialResult generate(Long resultId) {
+    public SpecialResult generate(Long resultId, boolean toTree) {
         logger.info("正在生成专项诊断报告");
         PaperResult result = paperResultService.get(resultId);
         if (result == null) {
@@ -71,10 +71,11 @@ public class SpecialReportService {
             logger.error("用户未提交 pid={},uid={}", result.getPid(), result.getUid());
             return null;
         }
-        return generate(commit, paper);
+        return generate(commit, paper, true);
     }
 
-    public SpecialResult generate(PaperCommit commit, Paper paper) {
+
+    public SpecialResult generate(PaperCommit commit, Paper paper, boolean toTree) {
         PaperResult result = paperResultService.findByPidAndUid(commit.getPid(), commit.getUid()).get(0);
         List<SpecialKnowledge> list = specialKnowledgeService.listByPid(paper.getId());
 
@@ -121,18 +122,27 @@ public class SpecialReportService {
             specialKnowledgeService.calcComplex(list);
         }
         //统计结果并且剪枝,剪掉>3的层级
-        List<SpecialKnowledge> tree = specialKnowledgeService.toTree(list);
+        return toTree(result, list, paper, toTree);
+    }
+
+    private SpecialResult toTree(PaperResult result, List<SpecialKnowledge> list, Paper paper, boolean toTree) {
+        //统计结果并且剪枝,剪掉>3的层级
 
-        logger.info(tree.toString());
         SpecialResult r = new SpecialResult();
         r.setCode(paper.getCode());
-        r.setCollectQuestion(collect);
+        r.setCollectQuestion(result.getCollectQuestion());
         r.setWrongQuestion(result.getWrongQuestion());
         r.setScore(result.getScore());
         r.setTotalScore(result.getTotalScore());
         r.setPid(result.getPid());
         r.setUid(result.getUid());
-        r.setKnowledges(tree);
+        if (toTree) {
+            List<SpecialKnowledge> tree = specialKnowledgeService.toTree(list);
+            logger.info(tree.toString());
+            r.setKnowledges(tree);
+        } else {
+            r.setKnowledges(list);
+        }
         return r;
     }
 
@@ -229,7 +239,7 @@ public class SpecialReportService {
                     }
                 }
             }
-            Set<Integer> nums = stepNumbers.getOrDefault(mind.getStep(),new HashSet<>());
+            Set<Integer> nums = stepNumbers.getOrDefault(mind.getStep(), new HashSet<>());
             nums.addAll(numbers);
             stepNumbers.put(mind.getStep(), nums);
             //设置这个问题有没有错误

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

@@ -1,6 +1,7 @@
 package com.yaoxiang.diagnosis.util;
 
 import com.yaoxiang.diagnosis.model.OptionPercentVo;
+import com.yaoxiang.diagnosis.model.TagMasterVo;
 import io.swagger.models.auth.In;
 import org.apache.poi.xssf.usermodel.XSSFCell;
 import org.apache.poi.xssf.usermodel.XSSFRow;
@@ -101,4 +102,32 @@ public class ExportUtil {
         }
         return bos.toByteArray();
     }
+
+    public static byte[] export3(int col, 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");
+        for (int i = 2; i <= col; i++) {
+            row.createCell(i).setCellValue(i - 1);
+        }
+        int i = 1;
+        for (TagMasterVo vo : values) {
+            row = sheet.createRow(i++);
+            row.createCell(0).setCellValue(vo.getLevel());
+            row.createCell(1).setCellValue(vo.getContent());
+            int j = 2;
+            for (Double d : vo.getMasters()) {
+                row.createCell(j++).setCellValue(d);
+            }
+        }
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        try {
+            workbook.write(bos);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return bos.toByteArray();
+    }
 }