deason 2 vuotta sitten
vanhempi
commit
ac9f7fc738

+ 27 - 15
src/main/java/cn/com/qmth/examcloud/tool/service/export_student_answer_and_score_detail/ExportStudentAnswerAndScoreDetailTask.java

@@ -9,14 +9,11 @@ import cn.com.qmth.examcloud.tool.utils.*;
 import cn.com.qmth.examcloud.tool.vo.Pager;
 import cn.com.qmth.examcloud.tool.vo.User;
 import com.alibaba.excel.EasyExcel;
-import com.alibaba.excel.write.handler.SheetWriteHandler;
-import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
-import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.JsonNode;
+import com.google.common.collect.Lists;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.poi.ss.usermodel.Sheet;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -92,16 +89,32 @@ public class ExportStudentAnswerAndScoreDetailTask {
 
         //todo
 
-        final String dataFilePath = tempDir + "/" + examId + "_" + course.getCourseCode() + ".xlsx";
-        File dataFile = new File(sysProperty.getDataDir() + "/" + dataFilePath);
+        List<List<Object>> excelRows = new ArrayList<>();
+        for (ExamStudentScoreVO vo : examStudentScoreList) {
+            List<Object> rowValues = Lists.newArrayList(
+                    vo.getOrgName(),
+                    vo.getCourseCode(),
+                    vo.getCourseName(),
+                    vo.getCourseLevel(),
+                    vo.getIsAbsent(),
+                    vo.getIdentityNumber(),
+                    vo.getStudentCode(),
+                    vo.getStudentName(),
+                    vo.getGrade(),
+                    vo.getSpecialtyName(),
+                    vo.getObjectiveScore(),
+                    vo.getSubjectiveScore(),
+                    vo.getFinalExamScore());
+            excelRows.add(rowValues);
+        }
 
-        EasyExcel.write(dataFile, ExamStudentScoreVO.class).registerWriteHandler(new SheetWriteHandler() {
-            @Override
-            public void afterSheetCreate(WriteWorkbookHolder workbookHolder, WriteSheetHolder sheetHolder) {
-                Sheet sheet = sheetHolder.getSheet();
-                sheet.createFreezePane(1, 1);
-            }
-        }).sheet().doWrite(examStudentScoreList);
+        List<String> excelHeaders = Lists.newArrayList("学习中心", "课程代码", "课程名称", "课程层次", "是否缺考", "身份证号", "学号", "姓名", "年级", "专业", "客观总分", "主观总分", "总分");
+        final String filePath = sysProperty.getDataDir() + "/" + tempDir + "/" + examId + "_" + course.getCourseCode() + ".xlsx";
+        EasyExcel.write(filePath)
+                .head(ExcelHelper.buildHeaders(excelHeaders))
+                .registerWriteHandler(ExcelHelper.sheetStrategy())
+                .registerWriteHandler(ExcelHelper.styleStrategy())
+                .sheet().doWrite(excelRows);
     }
 
     /**
@@ -111,7 +124,7 @@ public class ExportStudentAnswerAndScoreDetailTask {
         Map<String, Object> params = new HashMap<>();
         params.put("examId", examId);
         params.put("courseId", courseId);
-        params.put("pageSize", 2);
+        params.put("pageSize", 500);
 
         Map<String, String> headers = new HashMap<>();
         headers.put("key", key);
@@ -141,7 +154,6 @@ public class ExportStudentAnswerAndScoreDetailTask {
         return all;
     }
 
-
     /**
      * 获取考试相关的课程列表
      */

+ 70 - 0
src/main/java/cn/com/qmth/examcloud/tool/utils/ExcelHelper.java

@@ -0,0 +1,70 @@
+package cn.com.qmth.examcloud.tool.utils;
+
+import com.alibaba.excel.write.handler.SheetWriteHandler;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
+import com.alibaba.excel.write.metadata.style.WriteCellStyle;
+import com.alibaba.excel.write.metadata.style.WriteFont;
+import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.*;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class ExcelHelper {
+
+    public static List<List<String>> buildHeaders(List<String> headers) {
+        return buildHeaders(null, headers);
+    }
+
+    public static List<List<String>> buildHeaders(String title, List<String> headers) {
+        List<List<String>> fullHeaders = new ArrayList<>();
+        for (String header : headers) {
+            if (StringUtils.isNotEmpty(title)) {
+                // 主标题
+                fullHeaders.add(Arrays.asList(title, header));
+                continue;
+            }
+            fullHeaders.add(Arrays.asList(header));
+        }
+        return fullHeaders;
+    }
+
+    public static SheetWriteHandler sheetStrategy() {
+        return new SheetWriteHandler() {
+            @Override
+            public void afterSheetCreate(WriteWorkbookHolder workbookHolder, WriteSheetHolder sheetHolder) {
+                Sheet sheet = sheetHolder.getSheet();
+                sheet.createFreezePane(0, 1);// 固定首行
+                sheet.setDefaultColumnWidth(20);
+            }
+        };
+    }
+
+    public static HorizontalCellStyleStrategy styleStrategy() {
+        WriteCellStyle headStyle = new WriteCellStyle();
+        headStyle.setFillForegroundColor(IndexedColors.LIGHT_GREEN.getIndex());
+        headStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
+        headStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        headStyle.setBorderLeft(BorderStyle.THIN);
+        headStyle.setBorderRight(BorderStyle.THIN);
+        headStyle.setBorderBottom(BorderStyle.THIN);
+        headStyle.setBorderTop(BorderStyle.THIN);
+        headStyle.setWrapped(false);// 是否换行
+        WriteFont headFont = new WriteFont();
+        headFont.setFontHeightInPoints((short) 9);
+        headFont.setFontName("宋体");
+        headStyle.setWriteFont(headFont);
+
+        WriteCellStyle contentStyle = new WriteCellStyle();
+        WriteFont contentFont = new WriteFont();
+        contentFont.setFontHeightInPoints((short) 9);
+        contentFont.setFontName("宋体");
+        contentStyle.setWriteFont(contentFont);
+
+        return new HorizontalCellStyleStrategy(headStyle, contentStyle);
+    }
+
+}