Browse Source

成绩导出标准版本加入缺考考生

wangliang 2 năm trước cách đây
mục cha
commit
88aceb73b5

+ 0 - 9
themis-business/src/main/java/com/qmth/themis/business/constant/SystemConstant.java

@@ -816,15 +816,6 @@ public class SystemConstant {
         }
         }
     }
     }
 
 
-    /**
-     * 获取全局uuid
-     *
-     * @return
-     */
-    public static String getUuid() {
-        return String.valueOf(UUID.randomUUID()).replaceAll("-", "");
-    }
-
     /**
     /**
      * 获取全局uuid
      * 获取全局uuid
      *
      *

+ 322 - 194
themis-business/src/main/java/com/qmth/themis/business/templete/impl/TaskMarkResultStandardExportTemplete.java

@@ -101,8 +101,7 @@ public class TaskMarkResultStandardExportTemplete implements TaskExportTemplete
         String zipPath = null;
         String zipPath = null;
         File zip = null;
         File zip = null;
         List<File> files = null;
         List<File> files = null;
-        int finalSize = 0;
-        int min = 0, line = 0;
+        int finalSize = 0, min = 0, line = 0;
         try {
         try {
             taskExportCommon.getTxtList()
             taskExportCommon.getTxtList()
                     .add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->开始准备处理导出的成绩标准版数据");
                     .add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->开始准备处理导出的成绩标准版数据");
@@ -204,13 +203,12 @@ public class TaskMarkResultStandardExportTemplete implements TaskExportTemplete
             Map<Long, Map<String, Integer>> paperObjectiveAnswerMap = new HashMap<>();
             Map<Long, Map<String, Integer>> paperObjectiveAnswerMap = new HashMap<>();
             LinkedMultiValueMap<Long, ExcelDto> dynamicExcelHead = new LinkedMultiValueMap<>();
             LinkedMultiValueMap<Long, ExcelDto> dynamicExcelHead = new LinkedMultiValueMap<>();
             LinkedMultiValueMap<Long, MarkResultStandardExportDto> markResultStandardExportDtoLinkedMultiValueMap = new LinkedMultiValueMap<>();
             LinkedMultiValueMap<Long, MarkResultStandardExportDto> markResultStandardExportDtoLinkedMultiValueMap = new LinkedMultiValueMap<>();
+            List<MarkResultStandardExportDto> missMarkResultStandardExportDtoList = new LinkedList<>();
             if (!CollectionUtils.isEmpty(markResultStandardExportDtoList)) {
             if (!CollectionUtils.isEmpty(markResultStandardExportDtoList)) {
-                Long currentPaperId = null;
                 for (MarkResultStandardExportDto m : markResultStandardExportDtoList) {
                 for (MarkResultStandardExportDto m : markResultStandardExportDtoList) {
                     excelDtoMap = new HashMap<>();
                     excelDtoMap = new HashMap<>();
                     Map<String, Integer> objectiveAnswerCacheBeanMap = null;
                     Map<String, Integer> objectiveAnswerCacheBeanMap = null;
                     if (Objects.nonNull(m.getPaperId())) {//处理试卷
                     if (Objects.nonNull(m.getPaperId())) {//处理试卷
-                        currentPaperId = m.getPaperId();
                         if (!paperObjectiveAnswerMap.containsKey(m.getPaperId())) {
                         if (!paperObjectiveAnswerMap.containsKey(m.getPaperId())) {
                             objectiveAnswerCacheBeanMap = teExamPaperService.getPaperStructCacheBean(m.getPaperId());
                             objectiveAnswerCacheBeanMap = teExamPaperService.getPaperStructCacheBean(m.getPaperId());
                             paperObjectiveAnswerMap.put(m.getPaperId(), objectiveAnswerCacheBeanMap);
                             paperObjectiveAnswerMap.put(m.getPaperId(), objectiveAnswerCacheBeanMap);
@@ -232,74 +230,65 @@ public class TaskMarkResultStandardExportTemplete implements TaskExportTemplete
                             objectiveAnswerCacheBeanMap = paperObjectiveAnswerMap.get(m.getPaperId());
                             objectiveAnswerCacheBeanMap = paperObjectiveAnswerMap.get(m.getPaperId());
                         }
                         }
                     } else {
                     } else {
-                        if (Objects.nonNull(currentPaperId)) {//有答题数据的
-                            markResultStandardExportDtoLinkedMultiValueMap.add(currentPaperId, m);
-                            List<MarkResultStandardExportDto> markResultStandardExportDtos = markResultStandardExportDtoLinkedMultiValueMap.get(-1L);
-                            if (!CollectionUtils.isEmpty(markResultStandardExportDtos)) {
-                                for (MarkResultStandardExportDto markResultStandardExportDto : markResultStandardExportDtos) {
-                                    markResultStandardExportDtoLinkedMultiValueMap.add(currentPaperId, markResultStandardExportDto);
-                                }
-                                markResultStandardExportDtoLinkedMultiValueMap.remove(-1L);
-                            }
-                        } else {
-                            markResultStandardExportDtoLinkedMultiValueMap.add(-1L, m);
-                        }
+                        missMarkResultStandardExportDtoList.add(m);
                         continue;
                         continue;
                     }
                     }
-                    QueryWrapper<TOeExamAnswer> tOeExamAnswerQueryWrapper = new QueryWrapper<>();
-                    tOeExamAnswerQueryWrapper.lambda().eq(TOeExamAnswer::getExamRecordId, Long.parseLong(m.getRecordId()));
-                    List<TOeExamAnswer> tOeExamAnswerList = tOeExamAnswerService.list(tOeExamAnswerQueryWrapper);
-                    for (TOeExamAnswer s : tOeExamAnswerList) {
-                        String questionsTitle = String.valueOf(s.getMainNumber());
-                        questionsTitle = Objects.nonNull(s.getSubNumber()) ?
-                                questionsTitle + "_" + s.getSubNumber() :
-                                questionsTitle;
-                        questionsTitle = Objects.nonNull(s.getSubIndex()) ?
-                                questionsTitle + "_" + s.getSubIndex() :
-                                questionsTitle;
-                        if (Objects.nonNull(s.getAnswer())) {
-                            Integer structType = objectiveAnswerCacheBeanMap.get(questionsTitle);
-                            if (Objects.nonNull(structType)) {
-                                String title = QuestionTypeEnum.convertToTitle(structType) + questionsTitle;
-                                String answer = null;
-                                ExcelDto excelAnswerDto = null;
-                                Double score = null;
-                                if (structType.intValue() == 1 || structType.intValue() == 2) {
-                                    String string = s.getAnswer().replace("[", "").replace("]", "")
-                                            .replaceAll(" ", "").replaceAll("\n", "");
-                                    if (Objects.nonNull(string) && !Objects.equals(string, "")) {
-                                        List<String> list = Arrays.asList(string.split(","));
-                                        List<String> answerList = new ArrayList<>();
-                                        for (String s1 : list) {
-                                            answerList.add(AnswerTypeEnum.convertToTitle(s1.toUpperCase()));
+                    if (Objects.nonNull(m.getRecordId())) {//处理考生答案
+                        QueryWrapper<TOeExamAnswer> tOeExamAnswerQueryWrapper = new QueryWrapper<>();
+                        tOeExamAnswerQueryWrapper.lambda().eq(TOeExamAnswer::getExamRecordId, Long.parseLong(m.getRecordId()));
+                        List<TOeExamAnswer> tOeExamAnswerList = tOeExamAnswerService.list(tOeExamAnswerQueryWrapper);
+                        for (TOeExamAnswer s : tOeExamAnswerList) {
+                            String questionsTitle = String.valueOf(s.getMainNumber());
+                            questionsTitle = Objects.nonNull(s.getSubNumber()) ?
+                                    questionsTitle + "_" + s.getSubNumber() :
+                                    questionsTitle;
+                            questionsTitle = Objects.nonNull(s.getSubIndex()) ?
+                                    questionsTitle + "_" + s.getSubIndex() :
+                                    questionsTitle;
+                            if (Objects.nonNull(s.getAnswer())) {
+                                Integer structType = objectiveAnswerCacheBeanMap.get(questionsTitle);
+                                if (Objects.nonNull(structType)) {
+                                    String title = QuestionTypeEnum.convertToTitle(structType) + questionsTitle;
+                                    String answer = null;
+                                    ExcelDto excelAnswerDto = null;
+                                    Double score = null;
+                                    if (structType.intValue() == 1 || structType.intValue() == 2) {
+                                        String string = s.getAnswer().replace("[", "").replace("]", "")
+                                                .replaceAll(" ", "").replaceAll("\n", "");
+                                        if (Objects.nonNull(string) && !Objects.equals(string, "")) {
+                                            List<String> list = Arrays.asList(string.split(","));
+                                            List<String> answerList = new ArrayList<>();
+                                            for (String s1 : list) {
+                                                answerList.add(AnswerTypeEnum.convertToTitle(s1.toUpperCase()));
+                                            }
+                                            answer = answerList.toString();
                                         }
                                         }
-                                        answer = answerList.toString();
+                                        excelAnswerDto = new ExcelDto(title + "作答", answer);
+                                        score = s.getScore();
+                                    } else if (structType.intValue() == 3) {
+                                        answer = AnswerTypeEnum
+                                                .convertToTitle(s.getAnswer().replaceAll("\n", "").toUpperCase());
+                                        excelAnswerDto = new ExcelDto(title + "作答", answer);
+                                        score = s.getScore();
                                     }
                                     }
-                                    excelAnswerDto = new ExcelDto(title + "作答", answer);
-                                    score = s.getScore();
-                                } else if (structType.intValue() == 3) {
-                                    answer = AnswerTypeEnum
-                                            .convertToTitle(s.getAnswer().replaceAll("\n", "").toUpperCase());
-                                    excelAnswerDto = new ExcelDto(title + "作答", answer);
-                                    score = s.getScore();
-                                }
-                                if (Objects.isNull(score) && !CollectionUtils.isEmpty(subjectiveScoreMap)) {
-                                    Map<String, Double> tOeExamAnswerMap = subjectiveScoreMap.get(s.getExamRecordId());
-                                    if (!CollectionUtils.isEmpty(tOeExamAnswerMap) && Objects.nonNull(tOeExamAnswerMap.get(questionsTitle))) {
-                                        score = tOeExamAnswerMap.get(questionsTitle);
+                                    if (Objects.isNull(score) && !CollectionUtils.isEmpty(subjectiveScoreMap)) {
+                                        Map<String, Double> tOeExamAnswerMap = subjectiveScoreMap.get(s.getExamRecordId());
+                                        if (!CollectionUtils.isEmpty(tOeExamAnswerMap) && Objects.nonNull(tOeExamAnswerMap.get(questionsTitle))) {
+                                            score = tOeExamAnswerMap.get(questionsTitle);
+                                        }
                                     }
                                     }
+                                    ExcelDto excelScoreDto = new ExcelDto(title + "得分",
+                                            Objects.nonNull(score) ? String.valueOf(score) : "0");
+                                    List<ExcelDto> excelDtoList = null;
+                                    if (!excelDtoMap.containsKey(m.getExamStudentId())) {
+                                        excelDtoList = new ArrayList<>();
+                                    } else {
+                                        excelDtoList = excelDtoMap.get(m.getExamStudentId());
+                                    }
+                                    excelDtoList.add(excelAnswerDto);
+                                    excelDtoList.add(excelScoreDto);
+                                    excelDtoMap.put(m.getExamStudentId(), excelDtoList);
                                 }
                                 }
-                                ExcelDto excelScoreDto = new ExcelDto(title + "得分",
-                                        Objects.nonNull(score) ? String.valueOf(score) : "0");
-                                List<ExcelDto> excelDtoList = null;
-                                if (!excelDtoMap.containsKey(m.getExamStudentId())) {
-                                    excelDtoList = new ArrayList<>();
-                                } else {
-                                    excelDtoList = excelDtoMap.get(m.getExamStudentId());
-                                }
-                                excelDtoList.add(excelAnswerDto);
-                                excelDtoList.add(excelScoreDto);
-                                excelDtoMap.put(m.getExamStudentId(), excelDtoList);
                             }
                             }
                         }
                         }
                     }
                     }
@@ -325,136 +314,17 @@ public class TaskMarkResultStandardExportTemplete implements TaskExportTemplete
                     .add(String.format("%02d", nowTime.getMonthValue())).add(File.separator)
                     .add(String.format("%02d", nowTime.getMonthValue())).add(File.separator)
                     .add(String.format("%02d", nowTime.getDayOfMonth()));
                     .add(String.format("%02d", nowTime.getDayOfMonth()));
 
 
-            SXSSFWorkbook wb = null;
-            InputStream inputStream = null;
-            ByteArrayOutputStream out = null;
-            //开始根据卷型生成多个excel
-            for (Map.Entry<Long, List<ExcelDto>> entry : dynamicExcelHead.entrySet()) {
-                try {
-                    //创建excel
-                    wb = new SXSSFWorkbook();
-                    Sheet sheet = wb.createSheet("成绩统计标准版");
-                    CellStyle style = wb.createCellStyle();
-                    style.setAlignment(HorizontalAlignment.CENTER); // 水平居中格式
-                    style.setVerticalAlignment(VerticalAlignment.CENTER); //垂直居中
-                    Row row = sheet.createRow(0);
-                    Field[] fields = MarkResultStandardExportDto.class.getDeclaredFields();
-                    int num = 0;
-                    //绘制表头
-                    for (int i = 0; i < fields.length; i++) {
-                        Field field = fields[i];
-                        field.setAccessible(true);
-                        Annotation annotation = field.getAnnotation(ExcelNote.class);
-                        if (Objects.nonNull(annotation)) {
-                            Cell cell = row.createCell(i);
-                            cell.setCellValue(field.getAnnotation(ExcelNote.class).value());
-                            cell.setCellStyle(style);
-                            num = i;
-                        }
-                    }
-                    num++;
-                    Map<String, Integer> position = new LinkedHashMap<>();
-
-                    //动态表头
-                    for (ExcelDto excelDto : entry.getValue()) {
-                        Cell cell = row.createCell(num);
-                        cell.setCellValue(excelDto.getTitle());
-                        cell.setCellStyle(style);
-                        sheet.setColumnWidth(num, 15 * 256);
-                        position.put(excelDto.getTitle(), num);
-                        num++;
-                    }
-                    List<MarkResultStandardExportDto> markResultStandardExportDtoTempList = markResultStandardExportDtoLinkedMultiValueMap.get(entry.getKey());
-                    int rowIndex = 0, cellIndex = 0, max = SystemConstant.MAX_EXPORT_SIZE, size = markResultStandardExportDtoTempList
-                            .size();
-                    if (max >= size) {
-                        max = size;
-                    }
-                    while (max <= size) {
-                        List subList = markResultStandardExportDtoTempList.subList(min, max);
-                        //绘制数据
-                        for (int y = 0; y < subList.size(); y++) {
-                            finalSize++;
-                            line++;
-                            rowIndex++;
-                            MarkResultStandardExportDto markResultStandardExportDto = (MarkResultStandardExportDto) subList
-                                    .get(y);
-                            cellIndex = 0;
-                            Row sxssfRow = sheet.createRow(rowIndex);
-                            for (Field field : fields) {
-                                field.setAccessible(true);
-                                Annotation annotation = field.getAnnotation(ExcelNotExport.class);
-                                if (Objects.isNull(annotation)) {
-                                    Annotation dynamicExport = field.getAnnotation(ExcelDynamicExport.class);
-                                    if (Objects.nonNull(dynamicExport)) {
-                                        Map<Long, List<ExcelDto>> answerExcetDto = markResultStandardExportDto
-                                                .getAnswerExcetDto();
-                                        if (Objects.nonNull(answerExcetDto)) {
-                                            List<ExcelDto> excelDtoList = answerExcetDto
-                                                    .get(markResultStandardExportDto.getExamStudentId());
-                                            if (Objects.nonNull(excelDtoList) && excelDtoList.size() > 0) {
-                                                excelDtoList.forEach(s -> {
-                                                    if (Objects.nonNull(s) && Objects.nonNull(s.getTitle()) && Objects.nonNull(position.get(s.getTitle()))) {
-                                                        taskExportCommon.createExcelCell(sxssfRow, position.get(s.getTitle()),
-                                                                s.getContent(), style);
-                                                    }
-                                                });
-                                            }
-                                        }
-                                    } else {
-                                        taskExportCommon
-                                                .createExcelCell(sxssfRow, cellIndex, field.get(markResultStandardExportDto),
-                                                        style);
-                                        cellIndex++;
-                                    }
-                                }
-                            }
-                        }
-                        map.put("max", max);
-                        map.put("min", min);
-                        map.put("size", size);
-                        map = templeteLogicService.execExportMarkResultSimpleLogic(map);
-                        if (max == size) {
-                            break;
-                        }
-                        min = max;
-                        max += SystemConstant.MAX_EXPORT_SIZE;
-                        if (max >= size) {
-                            max = size;
-                        }
-                    }
-                    //临时缓冲区
-                    out = new ByteArrayOutputStream();
-                    wb.write(out);
-                    byte[] bookByteAry = out.toByteArray();
-                    inputStream = new ByteArrayInputStream(bookByteAry);
-                    StringBuilder stringBuilder = new StringBuilder(excelSj.toString());
-                    File finalFile = new File(stringBuilder.append(File.separator).append(markResultStandardExportDtoTempList.get(0).getPaperId() + "_" + markResultStandardExportDtoTempList.get(0).getPaperName() + "_" + markResultStandardExportDtoTempList.get(0).getCourseName() + "_" + markResultStandardExportDtoTempList.get(0).getCourseCode()).append(SystemConstant.EXCEL_PREFIX).toString());
-                    if (!finalFile.exists()) {
-                        finalFile.getParentFile().mkdirs();
-                        finalFile.createNewFile();
-                    }
-                    FileUtils.copyInputStreamToFile(inputStream, finalFile);
-                    files.add(finalFile);
-                } catch (Exception e) {
-                    log.error("生成excel报错", e);
-                    e.printStackTrace();
-                } finally {
-                    if (Objects.nonNull(wb)) {
-                        wb.dispose();
-                    }
-                    if (Objects.nonNull(inputStream)) {
-                        inputStream.close();
-                    }
-                    if (Objects.nonNull(out)) {
-                        out.flush();
-                        out.close();
-                    }
-                }
-            }
+            map = createExamStudentExcel(dynamicExcelHead, markResultStandardExportDtoLinkedMultiValueMap, map, files, taskExportCommon, excelSj);
+            finalSize = Integer.parseInt(String.valueOf(map.get("finalSize")));
+            min = Integer.parseInt(String.valueOf(map.get("min")));
+            line = Integer.parseInt(String.valueOf(map.get("line")));
+            map = createMissExamStudentExcel(missMarkResultStandardExportDtoList, finalSize, min, line, map, files, taskExportCommon, excelSj);
+            finalSize = Integer.parseInt(String.valueOf(map.get("finalSize")));
+            min = Integer.parseInt(String.valueOf(map.get("min")));
+            line = Integer.parseInt(String.valueOf(map.get("line")));
             if (files.size() > 0) {
             if (files.size() > 0) {
                 StringBuilder stringBuilder = new StringBuilder(excelSj.toString());
                 StringBuilder stringBuilder = new StringBuilder(excelSj.toString());
-                String uuid = SystemConstant.getUuid();
+                String uuid = SystemConstant.getNanoId();
                 StringBuilder zipStringBuilder = new StringBuilder(stringJoiner.toString());
                 StringBuilder zipStringBuilder = new StringBuilder(stringJoiner.toString());
                 zipPath = zipStringBuilder.append(File.separator).append(uuid).toString();
                 zipPath = zipStringBuilder.append(File.separator).append(uuid).toString();
                 zip = new File(stringBuilder.append(File.separator).append(uuid).append(".zip").toString());
                 zip = new File(stringBuilder.append(File.separator).append(uuid).append(".zip").toString());
@@ -483,4 +353,262 @@ public class TaskMarkResultStandardExportTemplete implements TaskExportTemplete
         }
         }
         return ResultUtil.ok(true);
         return ResultUtil.ok(true);
     }
     }
+
+    /**
+     * 创建非缺考考生excel
+     *
+     * @param dynamicExcelHead
+     * @param markResultStandardExportDtoLinkedMultiValueMap
+     * @param map
+     * @param files
+     * @param taskExportCommon
+     * @param excelSj
+     * @return
+     * @throws IOException
+     */
+    public Map<String, Object> createExamStudentExcel(LinkedMultiValueMap<Long, ExcelDto> dynamicExcelHead,
+                                                      LinkedMultiValueMap<Long, MarkResultStandardExportDto> markResultStandardExportDtoLinkedMultiValueMap,
+                                                      Map<String, Object> map, List<File> files,
+                                                      TaskExportCommon taskExportCommon, StringJoiner excelSj) throws IOException {
+        int finalSize = 0, min = 0, line = 0;
+        SXSSFWorkbook wb = null;
+        InputStream inputStream = null;
+        ByteArrayOutputStream out = null;
+        //开始根据卷型生成多个excel
+        for (Map.Entry<Long, List<ExcelDto>> entry : dynamicExcelHead.entrySet()) {
+            try {
+                //创建excel
+                wb = new SXSSFWorkbook();
+                Sheet sheet = wb.createSheet("成绩统计标准版");
+                CellStyle style = wb.createCellStyle();
+                style.setAlignment(HorizontalAlignment.CENTER); // 水平居中格式
+                style.setVerticalAlignment(VerticalAlignment.CENTER); //垂直居中
+                Row row = sheet.createRow(0);
+                Field[] fields = MarkResultStandardExportDto.class.getDeclaredFields();
+                int num = 0;
+                //绘制表头
+                for (int i = 0; i < fields.length; i++) {
+                    Field field = fields[i];
+                    field.setAccessible(true);
+                    Annotation annotation = field.getAnnotation(ExcelNote.class);
+                    if (Objects.nonNull(annotation)) {
+                        Cell cell = row.createCell(i);
+                        cell.setCellValue(field.getAnnotation(ExcelNote.class).value());
+                        cell.setCellStyle(style);
+                        num = i;
+                    }
+                }
+                num++;
+                Map<String, Integer> position = new LinkedHashMap<>();
+
+                //动态表头
+                for (ExcelDto excelDto : entry.getValue()) {
+                    Cell cell = row.createCell(num);
+                    cell.setCellValue(excelDto.getTitle());
+                    cell.setCellStyle(style);
+                    sheet.setColumnWidth(num, 15 * 256);
+                    position.put(excelDto.getTitle(), num);
+                    num++;
+                }
+                List<MarkResultStandardExportDto> markResultStandardExportDtoTempList = markResultStandardExportDtoLinkedMultiValueMap.get(entry.getKey());
+                int rowIndex = 0, cellIndex = 0, max = SystemConstant.MAX_EXPORT_SIZE, size = markResultStandardExportDtoTempList
+                        .size();
+                if (max >= size) {
+                    max = size;
+                }
+                while (max <= size) {
+                    List subList = markResultStandardExportDtoTempList.subList(min, max);
+                    //绘制数据
+                    for (int y = 0; y < subList.size(); y++) {
+                        finalSize++;
+                        line++;
+                        rowIndex++;
+                        MarkResultStandardExportDto markResultStandardExportDto = (MarkResultStandardExportDto) subList.get(y);
+                        cellIndex = 0;
+                        Row sxssfRow = sheet.createRow(rowIndex);
+                        for (Field field : fields) {
+                            field.setAccessible(true);
+                            Annotation annotation = field.getAnnotation(ExcelNotExport.class);
+                            if (Objects.isNull(annotation)) {
+                                Annotation dynamicExport = field.getAnnotation(ExcelDynamicExport.class);
+                                if (Objects.nonNull(dynamicExport)) {
+                                    Map<Long, List<ExcelDto>> answerExcetDto = markResultStandardExportDto
+                                            .getAnswerExcetDto();
+                                    if (Objects.nonNull(answerExcetDto)) {
+                                        List<ExcelDto> excelDtoList = answerExcetDto
+                                                .get(markResultStandardExportDto.getExamStudentId());
+                                        if (Objects.nonNull(excelDtoList) && excelDtoList.size() > 0) {
+                                            excelDtoList.forEach(s -> {
+                                                if (Objects.nonNull(s) && Objects.nonNull(s.getTitle()) && Objects.nonNull(position.get(s.getTitle()))) {
+                                                    taskExportCommon.createExcelCell(sxssfRow, position.get(s.getTitle()), s.getContent(), style);
+                                                }
+                                            });
+                                        }
+                                    }
+                                } else {
+                                    taskExportCommon.createExcelCell(sxssfRow, cellIndex, field.get(markResultStandardExportDto), style);
+                                    cellIndex++;
+                                }
+                            }
+                        }
+                    }
+                    map.put("max", max);
+                    map.put("min", min);
+                    map.put("size", size);
+                    map = templeteLogicService.execExportMarkResultSimpleLogic(map);
+                    if (max == size) {
+                        break;
+                    }
+                    min = max;
+                    max += SystemConstant.MAX_EXPORT_SIZE;
+                    if (max >= size) {
+                        max = size;
+                    }
+                }
+                //临时缓冲区
+                out = new ByteArrayOutputStream();
+                wb.write(out);
+                byte[] bookByteAry = out.toByteArray();
+                inputStream = new ByteArrayInputStream(bookByteAry);
+                StringBuilder stringBuilder = new StringBuilder(excelSj.toString());
+                File finalFile = new File(stringBuilder.append(File.separator).append(markResultStandardExportDtoTempList.get(0).getPaperId() + "_" + markResultStandardExportDtoTempList.get(0).getPaperName() + "_" + markResultStandardExportDtoTempList.get(0).getCourseName() + "_" + markResultStandardExportDtoTempList.get(0).getCourseCode()).append(SystemConstant.EXCEL_PREFIX).toString());
+                if (!finalFile.exists()) {
+                    finalFile.getParentFile().mkdirs();
+                    finalFile.createNewFile();
+                }
+                FileUtils.copyInputStreamToFile(inputStream, finalFile);
+                files.add(finalFile);
+            } catch (Exception e) {
+                log.error("生成excel报错", e);
+                e.printStackTrace();
+            } finally {
+                if (Objects.nonNull(wb)) {
+                    wb.dispose();
+                }
+                if (Objects.nonNull(inputStream)) {
+                    inputStream.close();
+                }
+                if (Objects.nonNull(out)) {
+                    out.flush();
+                    out.close();
+                }
+            }
+        }
+        map.put("finalSize", finalSize);
+        map.put("line", line);
+        return map;
+    }
+
+    /**
+     * 创建缺考考生excel
+     *
+     * @param missMarkResultStandardExportDtoList
+     * @param finalSize
+     * @param min
+     * @param line
+     * @param map
+     * @param files
+     * @param taskExportCommon
+     * @param excelSj
+     * @return
+     * @throws IOException
+     */
+    public Map<String, Object> createMissExamStudentExcel(List<MarkResultStandardExportDto> missMarkResultStandardExportDtoList,
+                                                          int finalSize, int min, int line,
+                                                          Map<String, Object> map, List<File> files,
+                                                          TaskExportCommon taskExportCommon, StringJoiner excelSj) throws IOException {
+        SXSSFWorkbook wb = null;
+        InputStream inputStream = null;
+        ByteArrayOutputStream out = null;
+        //开始生成缺考excel
+        if (!CollectionUtils.isEmpty(missMarkResultStandardExportDtoList)) {
+            try {
+                //创建excel
+                wb = new SXSSFWorkbook();
+                Sheet sheet = wb.createSheet("成绩统计标准版_缺考考生");
+                CellStyle style = wb.createCellStyle();
+                style.setAlignment(HorizontalAlignment.CENTER); // 水平居中格式
+                style.setVerticalAlignment(VerticalAlignment.CENTER); //垂直居中
+                Row row = sheet.createRow(0);
+                Field[] fields = MarkResultStandardExportDto.class.getDeclaredFields();
+                //绘制表头
+                for (int i = 0; i < fields.length; i++) {
+                    Field field = fields[i];
+                    field.setAccessible(true);
+                    Annotation annotation = field.getAnnotation(ExcelNote.class);
+                    if (Objects.nonNull(annotation)) {
+                        Cell cell = row.createCell(i);
+                        cell.setCellValue(field.getAnnotation(ExcelNote.class).value());
+                        cell.setCellStyle(style);
+                    }
+                }
+                int rowIndex = 0, cellIndex = 0, max = SystemConstant.MAX_EXPORT_SIZE, size = missMarkResultStandardExportDtoList.size();
+                if (max >= size) {
+                    max = size;
+                }
+                while (max <= size) {
+                    List subList = missMarkResultStandardExportDtoList.subList(min, max);
+                    //绘制数据
+                    for (int y = 0; y < subList.size(); y++) {
+                        finalSize++;
+                        line++;
+                        rowIndex++;
+                        MarkResultStandardExportDto markResultStandardExportDto = (MarkResultStandardExportDto) subList.get(y);
+                        cellIndex = 0;
+                        Row sxssfRow = sheet.createRow(rowIndex);
+                        for (Field field : fields) {
+                            field.setAccessible(true);
+                            Annotation annotation = field.getAnnotation(ExcelNotExport.class);
+                            if (Objects.isNull(annotation)) {
+                                taskExportCommon.createExcelCell(sxssfRow, cellIndex, field.get(markResultStandardExportDto), style);
+                                cellIndex++;
+                            }
+                        }
+                    }
+                    map.put("max", max);
+                    map.put("min", min);
+                    map.put("size", size);
+                    map = templeteLogicService.execExportMarkResultSimpleLogic(map);
+                    if (max == size) {
+                        break;
+                    }
+                    min = max;
+                    max += SystemConstant.MAX_EXPORT_SIZE;
+                    if (max >= size) {
+                        max = size;
+                    }
+                }
+                //临时缓冲区
+                out = new ByteArrayOutputStream();
+                wb.write(out);
+                byte[] bookByteAry = out.toByteArray();
+                inputStream = new ByteArrayInputStream(bookByteAry);
+                StringBuilder stringBuilder = new StringBuilder(excelSj.toString());
+                File finalFile = new File(stringBuilder.append(File.separator).append(missMarkResultStandardExportDtoList.get(0).getCourseName() + "_" + missMarkResultStandardExportDtoList.get(0).getCourseCode() + "_缺考考生").append(SystemConstant.EXCEL_PREFIX).toString());
+                if (!finalFile.exists()) {
+                    finalFile.getParentFile().mkdirs();
+                    finalFile.createNewFile();
+                }
+                FileUtils.copyInputStreamToFile(inputStream, finalFile);
+                files.add(finalFile);
+            } catch (Exception e) {
+                log.error("生成excel报错", e);
+                e.printStackTrace();
+            } finally {
+                if (Objects.nonNull(wb)) {
+                    wb.dispose();
+                }
+                if (Objects.nonNull(inputStream)) {
+                    inputStream.close();
+                }
+                if (Objects.nonNull(out)) {
+                    out.flush();
+                    out.close();
+                }
+            }
+        }
+        map.put("finalSize", finalSize);
+        map.put("line", line);
+        return map;
+    }
 }
 }