|
@@ -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;
|
|
|
|
+ }
|
|
}
|
|
}
|