From dcaea52b2c0778ec4f929f60752cc6baf37b5a50 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期五, 29 三月 2024 13:50:43 +0800 Subject: [PATCH] 题目导出 --- src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java | 61 +++++++++++++++++++++++++++--- 1 files changed, 55 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java b/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java index 3614c69..12cad20 100644 --- a/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java +++ b/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java @@ -18,9 +18,7 @@ import com.mindskip.xzs.domain.enums.QuestionTypeEnum; import com.mindskip.xzs.domain.question.QuestionItemObject; import com.mindskip.xzs.domain.question.QuestionObject; -import com.mindskip.xzs.excel.CurrencyDataListener; -import com.mindskip.xzs.excel.FixedMergeCellStrategy; -import com.mindskip.xzs.excel.SelectExcel; +import com.mindskip.xzs.excel.*; import com.mindskip.xzs.repository.DepartmentMapper; import com.mindskip.xzs.repository.SubjectMapper; import com.mindskip.xzs.service.*; @@ -30,6 +28,7 @@ import com.mindskip.xzs.viewmodel.admin.education.SubjectPageRequestVM; import com.mindskip.xzs.viewmodel.admin.question.*; import com.github.pagehelper.PageInfo; +import com.mindskip.xzs.vo.QuestionExportVO; import com.mindskip.xzs.vo.QuestionImportVO; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.DataValidationHelper; @@ -44,6 +43,7 @@ import javax.validation.Valid; import java.io.IOException; import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; import java.net.URLEncoder; import java.util.*; import java.util.function.Consumer; @@ -194,16 +194,65 @@ .doWrite(data); } - @PostMapping("/question/export") - public void importQuestion(QuestionPageRequestVM query, HttpServletResponse response) throws IOException { + @GetMapping("/question/export") + public void importQuestion(QuestionExportVO query, HttpServletResponse response) throws IOException { + query.formartTime(); // 鏌ヨ瀵煎嚭鏁版嵁 List<QuestionImportVO> exportData = questionService.export(query); + // 鏋勫缓鏁版嵁 + List<QuestionImportVO> exportList = new ArrayList<>(exportData.size() * 4); + // 琛屽悎骞惰鍒� + List<RowItem> mergeRowList = new ArrayList<>(exportData.size()); + int j = 2; + for (QuestionImportVO data : exportData) { + QuestionObject questionContent = JSON.parseObject(data.getQuestionContent(), QuestionObject.class); + + RowItem rowItem = new RowItem(); + rowItem.setStart(j); + int end = j + questionContent.getQuestionItemObjects().size() - 1; + rowItem.setEnd(end); + mergeRowList.add(rowItem); + j = end + 1; + int i = 0; + for (QuestionItemObject option : questionContent.getQuestionItemObjects()) { + if (i == 0) { + QuestionImportVO master = new QuestionImportVO(); + BeanUtils.copyProperties(data, master); + if (org.springframework.util.StringUtils.hasText(data.getQuestionType())) { + master.setQuestionType(QuestionTypeEnum.fromCode(Integer.valueOf(data.getQuestionType())).getName()); + } + master.setOptionName(option.getPrefix()); + master.setOptionValue(option.getContent()); + master.setTitle(questionContent.getTitleContent()); + master.setAnalyze(questionContent.getAnalyze()); + master.setSubjectName(data.getSubjectList().stream().collect(Collectors.joining("銆�"))); + master.setCorrect(data.getCorrect().replaceAll(",", "銆�")); + BigDecimal score = BigDecimal.valueOf(master.getScore()); + master.setScore(score.divide(BigDecimal.TEN).intValue()); + exportList.add(master); + } else { + QuestionImportVO optionItem = new QuestionImportVO(); + optionItem.setOptionName(option.getPrefix()); + optionItem.setOptionValue(option.getContent()); + exportList.add(optionItem); + } + i++; + } + } response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴 String fileName = URLEncoder.encode("棰樼洰瀵煎嚭鏁版嵁", "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); - EasyExcel.write(response.getOutputStream(), QuestionImportVO.class).sheet("棰樼洰瀵煎嚭鏁版嵁").doWrite(exportData); + + // 鏌ュ嚭鎵�鏈夌殑璇剧洰锛坋xcel涓嬫媺鏁版嵁锛� + List<Subject> subjects = subjectMapper.allSubject(); + List<String> subjectNameList = subjects.stream().map(Subject::getName).collect(Collectors.toList()); + EasyExcel.write(response.getOutputStream(), QuestionImportVO.class) + .sheet("棰樼洰瀵煎嚭鏁版嵁") + .registerWriteHandler(new SelectExcel(subjectNameList)) + .registerWriteHandler(new DynamicMergeCellStrategy(mergeRowList, Arrays.asList(0, 1, 2, 5, 6, 7, 8))) + .doWrite(exportList); } /** -- Gitblit v1.8.0