Procházet zdrojové kódy

完成每人作答时间导出,需转置

4228306 před 5 roky
rodič
revize
a908029f1b

+ 48 - 4
src/main/java/com/yaoxiang/diagnosis/controller/TestController.java

@@ -7,10 +7,7 @@ import com.yaoxiang.diagnosis.entity.Paper;
 import com.yaoxiang.diagnosis.entity.PaperCommit;
 import com.yaoxiang.diagnosis.file.FileService;
 import com.yaoxiang.diagnosis.entity.Question;
-import com.yaoxiang.diagnosis.model.AnswerContrast;
-import com.yaoxiang.diagnosis.model.AuthUser;
-import com.yaoxiang.diagnosis.model.OptionPercentVo;
-import com.yaoxiang.diagnosis.model.Result;
+import com.yaoxiang.diagnosis.model.*;
 import com.yaoxiang.diagnosis.service.CommitService;
 import com.yaoxiang.diagnosis.service.PaperService;
 import com.yaoxiang.diagnosis.service.SpecialKnowledgeService;
@@ -169,6 +166,32 @@ public class TestController {
         response.getOutputStream().write(data);
     }
 
+    @GetMapping("useTimePercent")
+    @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 useTimePercent(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 = calc2(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<>();
@@ -222,6 +245,27 @@ public class TestController {
         return ExportUtil.export1(vos);
     }
 
+    public byte[] calc2(List<PaperCommit> list, Paper p) {
+        //Map<uid,Map<number,time>>
+        Map<Long, Map<Integer, Long>> userMap = new LinkedHashMap<>();
+        for (PaperCommit commit : list) {
+            Map<Integer, Long> map = new LinkedHashMap<>();
+            for (int i = 1; i <= p.getQuestionNum(); i++) {
+                map.put(i, 0L);
+            }
+            String jsonAnswer = commit.getJsonAns();
+            List<AnswerContrast> contrasts = convertAnswerContrast(jsonAnswer);
+            for (AnswerContrast contrast : contrasts) {
+                long useTime = contrast.getUseTime();
+                map.put(contrast.getNumber(), useTime);
+            }
+            userMap.put(commit.getUid(), map);
+        }
+        logger.info(userMap.toString());
+        return ExportUtil.export2(p.getQuestionNum(), userMap);
+    }
+
+
     private List<AnswerContrast> convertAnswerContrast(String json) {
         return ObjectUtil.getGson().fromJson(json, new TypeToken<List<AnswerContrast>>() {
         }.getType());

+ 39 - 4
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 io.swagger.models.auth.In;
 import org.apache.poi.xssf.usermodel.XSSFCell;
 import org.apache.poi.xssf.usermodel.XSSFRow;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
@@ -9,8 +10,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
 public class ExportUtil {
 
@@ -52,12 +52,12 @@ public class ExportUtil {
             XSSFCell cell7 = row.createCell(7);
             cell7.setCellValue(vo.getAnswer());
         }
-        ByteArrayOutputStream os =new ByteArrayOutputStream();
+        ByteArrayOutputStream os = new ByteArrayOutputStream();
         try {
             workbook.write(os);
         } catch (IOException e) {
             e.printStackTrace();
-        }finally {
+        } finally {
             try {
                 workbook.close();
             } catch (IOException e) {
@@ -66,4 +66,39 @@ public class ExportUtil {
         }
         return os.toByteArray();
     }
+
+    public static byte[] export2(int rows, Map<Long, Map<Integer, Long>> userMap) {
+//        Map<Map<Integer, Long>, Long> transform = new LinkedHashMap<>();
+//        for (Map.Entry<Long, Map<Integer, Long>> entry : userMap.entrySet()) {
+//            transform.put(entry.getValue(), entry.getKey());
+//        }
+        XSSFWorkbook workbook = new XSSFWorkbook();
+        XSSFSheet sheet = workbook.createSheet();
+        XSSFRow row = sheet.createRow(0);
+        row.createCell(0).setCellValue("Number");
+        for (int i = 1; i <= rows; i++) {
+            XSSFCell cell = row.createCell(i);
+            cell.setCellValue(i);
+//            sheet.createRow(i);
+        }
+//        for (Map.Entry<Map<Integer, Long>, Long> entry:transform.entrySet()){
+//            Map<>
+//        }
+        Collection<Map<Integer, Long>> values = userMap.values();
+        int i = 1;
+        for (Map<Integer, Long> map : values) {
+            row = sheet.createRow(i);
+            row.createCell(0).setCellValue(i++);
+            for (Map.Entry<Integer, Long> entry : map.entrySet()) {
+                row.createCell(entry.getKey()).setCellValue(entry.getValue());
+            }
+        }
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        try {
+            workbook.write(bos);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return bos.toByteArray();
+    }
 }