From 47cd9ecc0eff38ffe6b3b794b2bf197e958f4403 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期三, 14 五月 2025 15:50:57 +0800 Subject: [PATCH] bug:学员有状态不能修改问题 --- src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java | 563 ++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 369 insertions(+), 194 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 faa4c6c..3eb5a3a 100644 --- a/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java +++ b/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java @@ -1,14 +1,12 @@ package com.mindskip.xzs.controller.admin; import com.alibaba.excel.EasyExcel; -import com.alibaba.excel.enums.CellExtraTypeEnum; -import com.alibaba.excel.metadata.data.HyperlinkData; -import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.github.pagehelper.PageInfo; import com.mindskip.xzs.base.BaseApiController; import com.mindskip.xzs.base.RestResponse; import com.mindskip.xzs.base.SystemCode; -import com.mindskip.xzs.context.WebContext; import com.mindskip.xzs.domain.Question; import com.mindskip.xzs.domain.QuestionSubject; import com.mindskip.xzs.domain.Subject; @@ -19,23 +17,24 @@ import com.mindskip.xzs.domain.question.QuestionItemObject; import com.mindskip.xzs.domain.question.QuestionObject; import com.mindskip.xzs.domain.vo.DeptQuestionVO; -import com.mindskip.xzs.excel.*; +import com.mindskip.xzs.excel.CurrencyDataListener; +import com.mindskip.xzs.excel.SelectExcel; import com.mindskip.xzs.repository.DepartmentMapper; import com.mindskip.xzs.repository.DeptQuestionMapper; import com.mindskip.xzs.repository.SubjectMapper; -import com.mindskip.xzs.service.*; +import com.mindskip.xzs.service.QuestionService; +import com.mindskip.xzs.service.QuestionSubjectService; +import com.mindskip.xzs.service.TextContentService; import com.mindskip.xzs.utility.*; import com.mindskip.xzs.utility.convert.QuestionClassConvert; import com.mindskip.xzs.utility.excel.ExcelUtils; 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.QuestionExportData; import com.mindskip.xzs.vo.QuestionExportVO; import com.mindskip.xzs.vo.QuestionImportVO; +import com.mindskip.xzs.vo.QuestionSubjectVO; import org.apache.commons.lang3.StringUtils; -import org.apache.poi.ss.usermodel.DataValidationHelper; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; @@ -44,7 +43,6 @@ import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; -import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.net.URLEncoder; import java.util.*; @@ -62,7 +60,7 @@ private final QuestionSubjectService questionSubjectService; private final DeptQuestionMapper deptQuestionMapper; - private static final String SPLIT = "銆�"; + private static final String SPLIT = ","; public QuestionController(QuestionService questionService, TextContentService textContentService, SubjectMapper subjectMapper, DepartmentMapper departmentMapper, QuestionSubjectService questionSubjectService, DeptQuestionMapper deptQuestionMapper) { this.questionService = questionService; @@ -87,7 +85,7 @@ vm.setQuestionSubjects(questionSubjectService.getQuestion(vm.getId()).stream().map(e -> { SubjectPageRequestVM subjectPageRequestVM = new SubjectPageRequestVM(); subjectPageRequestVM.setId(e.getSubjectId()); - e.setSubName(subjectMapper.page(subjectPageRequestVM).get(0).getName()); + e.setSubName(subjectMapper.page(subjectPageRequestVM).stream().map(Subject::getName).collect(Collectors.joining(SPLIT))); return e; }).collect(Collectors.toList())); // 鏌ヨ棰樼洰鎵�灞為儴闂� @@ -163,28 +161,15 @@ questionImportVO.setQuestionType("鍗曢�夐"); questionImportVO.setDifficult(2); questionImportVO.setCorrect("B"); - questionImportVO.setScore(2); + questionImportVO.setScore("2"); questionImportVO.setSubjectName("娴嬭瘯璇剧洰"); questionImportVO.setAnalyze("B鏄鐨�"); questionImportVO.setTitle("杩欐槸涓�閬撴祴璇曢鐩紝浣跨敤璇ユā鏉胯鍒犻櫎鎴栨浛鎹㈣繖閬撻"); - questionImportVO.setOptionName("A"); - questionImportVO.setOptionValue("閫夋垜"); + questionImportVO.setOptionA("閫夋垜"); + questionImportVO.setOptionB("閫夋垜"); + questionImportVO.setOptionC("閫夋垜"); + questionImportVO.setOptionD("閫夋垜"); data.add(questionImportVO); - - QuestionImportVO questionImportVO1 = new QuestionImportVO(); - questionImportVO1.setOptionName("B"); - questionImportVO1.setOptionValue("閫塀"); - data.add(questionImportVO1); - - QuestionImportVO questionImportVO2 = new QuestionImportVO(); - questionImportVO2.setOptionName("C"); - questionImportVO2.setOptionValue("閫塁"); - data.add(questionImportVO2); - - QuestionImportVO questionImportVO3 = new QuestionImportVO(); - questionImportVO3.setOptionName("D"); - questionImportVO3.setOptionValue("閫塂"); - data.add(questionImportVO3); // 鏌ュ嚭鎵�鏈夌殑璇剧洰锛坋xcel涓嬫媺鏁版嵁锛� List<Subject> subjects = subjectMapper.allSubject(new ArrayList<>(), Boolean.TRUE); @@ -193,69 +178,69 @@ EasyExcel.write(response.getOutputStream(), QuestionImportVO.class) .sheet("妯℃澘") .registerWriteHandler(new SelectExcel(subjectNameList)) - .registerWriteHandler(new FixedMergeCellStrategy(2, 4, Arrays.asList(0, 1, 2, 5, 6, 7, 8))) +// .registerWriteHandler(new FixedMergeCellStrategy(2, 4, Arrays.asList(1, 2, 3, 6, 7, 8, 9))) .doWrite(data); } - @PostMapping("/question/export") - public void exportQuestion(@RequestBody QuestionExportVO query, HttpServletResponse response) throws IOException { - // 鏌ヨ瀵煎嚭鏁版嵁 - 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"); - - // 鏌ュ嚭鎵�鏈夌殑璇剧洰锛坋xcel涓嬫媺鏁版嵁锛� - List<Subject> subjects = subjectMapper.allSubject(new ArrayList<>(), Boolean.TRUE); - 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); - } +// @PostMapping("/question/export") +// public void exportQuestion(@RequestBody QuestionExportVO query, HttpServletResponse response) throws IOException { +// // 鏌ヨ瀵煎嚭鏁版嵁 +// 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"); +// +// // 鏌ュ嚭鎵�鏈夌殑璇剧洰锛坋xcel涓嬫媺鏁版嵁锛� +// List<Subject> subjects = subjectMapper.allSubject(new ArrayList<>(), Boolean.TRUE); +// 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); +// } /** * 棰樼洰瀵煎叆 @@ -264,45 +249,47 @@ * @param file * @throws IOException */ - @PostMapping("/question/import") + @PostMapping("/import") @Transactional(rollbackFor = Exception.class) public RestResponse importQuestion(@RequestPart("file") MultipartFile file) throws IOException { Consumer<List<QuestionImportVO>> consumer = (data) -> { // 棰樼洰鐨勮鐩俊鎭� List<QuestionSubject> questionSubjectsList = new ArrayList<>(48); for (int i = 0; i < data.size(); i++) { + // 棰樼洰瀹炰綋 Question question = new Question(); // 璇诲彇鐨勯鐩� QuestionImportVO excelQuestion = data.get(i); - // 濡傛灉鏄涓�鏉″畬鏁存暟鎹紝閭d箞缁х画寰�鍚庤鍙栭�夐」鍐呭 - if (excelQuestion.master()) { + // 鍒ゆ柇棰樺共鏄惁閲嶅锛岄噸澶嶄笉娣诲姞 + Integer questionId = questionService.countQuestionByTitle(excelQuestion.getTitle()); + if (Objects.isNull(questionId)) { // 璇ラ鐨勯�夐」 List<QuestionItemObject> options = new ArrayList<>(4); // 閫夐」鍐呭 - QuestionItemObject option = new QuestionItemObject(); - option.setPrefix(excelQuestion.getOptionName()); - option.setContent(excelQuestion.getOptionValue()); - options.add(option); - int next = 1; - // 缁х画寰�鍚庤閫夐」 - while (Boolean.TRUE) { - // 鍒ゆ柇鏄惁鏄渶鍚庝竴鏉� - if (next + i == data.size()) { - break; - } - QuestionImportVO nextQuestion = data.get(next + i); - if (nextQuestion.master()) { - break; - } - QuestionItemObject nextOption = new QuestionItemObject(); - nextOption.setPrefix(nextQuestion.getOptionName()); - nextOption.setContent(nextQuestion.getOptionValue()); - options.add(nextOption); - next++; + QuestionItemObject optionA = new QuestionItemObject(); + optionA.setPrefix("A"); + optionA.setContent(excelQuestion.getOptionA()); + options.add(optionA); + + QuestionItemObject optionB = new QuestionItemObject(); + optionB.setPrefix("B"); + optionB.setContent(excelQuestion.getOptionB()); + options.add(optionB); + + if (StringUtils.isNotBlank(excelQuestion.getOptionC())) { + QuestionItemObject optionC = new QuestionItemObject(); + optionC.setPrefix("C"); + optionC.setContent(excelQuestion.getOptionC()); + options.add(optionC); } - i += next; + if (StringUtils.isNotBlank(excelQuestion.getOptionD())) { + QuestionItemObject optionD = new QuestionItemObject(); + optionD.setPrefix("D"); + optionD.setContent(excelQuestion.getOptionD()); + options.add(optionD); + } // 淇濆瓨棰樼洰鍐呭 QuestionObject questionObject = new QuestionObject(); @@ -319,18 +306,24 @@ // 淇濆瓨棰樼洰淇℃伅 // 璁剧疆棰樺瀷 question.setQuestionType(QuestionTypeEnum.get(excelQuestion.getQuestionType())); + // 绛旀鍘绘帀绌烘牸 + String rightAnswer = excelQuestion.getCorrect().replaceAll("\\s+", ""); // 绛旀(澶氶�夐渶瑕佺敤,鍒嗗壊淇濆瓨瀛楃涓插埌鏁版嵁搴�) - String[] corrects = excelQuestion.getCorrect().split(SPLIT); + String[] corrects = rightAnswer.split(SPLIT); if (corrects.length > 1) { question.setCorrect(Arrays.asList(corrects).stream().collect(Collectors.joining(","))); } else { - question.setCorrect(excelQuestion.getCorrect()); + question.setCorrect(rightAnswer); } // 闅惧害 question.setDifficult(excelQuestion.getDifficult()); // 鍒嗘暟 - question.setScore(ExamUtil.scoreFromVM(String.valueOf(excelQuestion.getScore()))); + if (StringUtils.isBlank(excelQuestion.getScore())) { + question.setScore(ExamUtil.scoreFromVM(QuestionSourceEnum.fromType(question.getQuestionType()) + "")); + } else { + question.setScore(ExamUtil.scoreFromVM(String.valueOf(excelQuestion.getScore()))); + } // 鍒涘缓浜� question.setCreateUser(1); question.setStatus(QuestionStatusEnum.OK.getCode()); @@ -340,93 +333,275 @@ questionService.insert(question); - // 鏌ュ嚭鎵�鏈夌殑璇剧洰 - List<Subject> subjects = subjectMapper.allSubject(new ArrayList<>(), Boolean.TRUE); + List<String> subjectNames = Arrays.asList(excelQuestion.getSubjectName().split(SPLIT)); - List<Subject> targetSubject = subjects.stream() - .filter(subject -> subjectNames.contains(subject.getName())) - .collect(Collectors.toList()); - if (CollectionUtils.isEmpty(targetSubject)) { - // todo 璁板綍杩欎釜閿欒 - continue; - } - // 鏋勫缓璇剧洰-棰樼洰淇℃伅 - questionSubjectsList = targetSubject.stream().map(subject -> { - QuestionSubject questionSubject = new QuestionSubject(); - questionSubject.setQuestionId(question.getId()); - questionSubject.setSubjectId(subject.getId()); - questionSubject.setDeleted(0); - return questionSubject; + List<Subject> subjects = subjectNames.stream().map(name -> { + // 鍒ゆ柇璇剧洰鏄惁瀛樺湪浜庢暟鎹簱锛屽鏋滀笉瀛樺湪鍒欒嚜鍔ㄦ柊澧炶鐩� + Subject byName = subjectMapper.getByName(name); + if (Objects.isNull(byName)) { + byName = new Subject(); + byName.setName(name); + byName.setDeleted(false); + subjectMapper.insert(byName); + } + return byName; }).collect(Collectors.toList()); + + // 鏋勫缓璇剧洰-棰樼洰淇℃伅 + questionSubjectsList = subjects.stream() + .filter(subject -> { + // 鍘婚噸棰樼洰锛氶骞�+璇剧洰鐩稿悓鎵嶇畻鍚屼竴棰� + List<QuestionSubjectVO> lists = questionService.countQuestionByTitleAndSubject(excelQuestion.getTitle(), subject.getId()); + return 0 == lists.size(); + }) + .map(subject -> { + QuestionSubject questionSubject = new QuestionSubject(); + questionSubject.setQuestionId(question.getId()); + questionSubject.setSubjectId(subject.getId()); + questionSubject.setDeleted(0); + return questionSubject; + }).collect(Collectors.toList()); + // 鎵归噺淇濆瓨棰樼洰-璇剧洰淇℃伅 + if (! CollectionUtils.isEmpty(questionSubjectsList)) { + questionSubjectService.saves(questionSubjectsList); + } + } else { + question.setId(questionId); + this.updateQuestion(question, excelQuestion); + List<String> subjectNames = Arrays.asList(excelQuestion.getSubjectName().split(SPLIT)); + List<Subject> subjects = subjectNames.stream().map(name -> { + // 鍒ゆ柇璇剧洰鏄惁瀛樺湪浜庢暟鎹簱锛屽鏋滀笉瀛樺湪鍒欒嚜鍔ㄦ柊澧炶鐩� + Subject byName = subjectMapper.getByName(name); + if (Objects.isNull(byName)) { + byName = new Subject(); + byName.setName(name); + byName.setDeleted(false); + subjectMapper.insert(byName); + } + return byName; + }).collect(Collectors.toList()); + // 鏋勫缓璇剧洰-棰樼洰淇℃伅 + questionSubjectsList = subjects.stream() + .filter(subject -> { + // 鍘婚噸棰樼洰锛氶骞�+璇剧洰鐩稿悓鎵嶇畻鍚屼竴棰�(棰樺共鐩稿悓锛氫絾鏈夋柊澧炵殑璇剧洰鏃舵墠鍋氫繚瀛�) + List<QuestionSubjectVO> lists = questionService.countQuestionByTitleAndSubject(excelQuestion.getTitle(), subject.getId()); + return 0 == lists.size(); + }) + .map(subject -> { + QuestionSubject questionSubject = new QuestionSubject(); + questionSubject.setQuestionId(questionId); + questionSubject.setSubjectId(subject.getId()); + questionSubject.setDeleted(0); + return questionSubject; + }).collect(Collectors.toList()); + // 鎵归噺淇濆瓨棰樼洰-璇剧洰淇℃伅 + if (! CollectionUtils.isEmpty(questionSubjectsList)) { + questionSubjectService.saves(questionSubjectsList); + } } - System.out.println(question); } - // 鎵归噺淇濆瓨棰樼洰-璇剧洰淇℃伅 - if (! CollectionUtils.isEmpty(questionSubjectsList)) { - questionSubjectService.saves(questionSubjectsList); - } + + }; EasyExcel.read(file.getInputStream(), QuestionImportVO.class, new CurrencyDataListener(consumer)).sheet("妯℃澘").doRead(); return RestResponse.ok(); } - @PostMapping("/import") - public RestResponse importUser(@RequestPart("file") MultipartFile file) throws Exception { - List<QuestionEditVO> questionEditVOS = ExcelUtils.readMultipartFile(file, QuestionEditVO.class) - .stream().map(e -> { - e.setQuestionType(QuestionTypeEnum.get(e.getType())); -// e.setSubjectId(subjectMapper.getName(e.getSbNames()).getId()); -// e.setGradeLevel(departmentMapper.getName(e.getDepartment()).getId()); - return e; - }).collect(Collectors.toList()); + /** + * 瀵煎叆鏃讹紝濡傛灉棰樺共閲嶅锛岄偅涔堟洿鏂伴鐩俊鎭紙璇ユ柟娉曚笉浼氭洿鏂伴鐩殑棰樺簱淇℃伅锛� + * + * @param question + * @param excelQuestion + */ + private void updateQuestion(Question question, QuestionImportVO excelQuestion) { + Question question1 = questionService.selectById(question.getId()); + // 璇ラ鐨勯�夐」 + List<QuestionItemObject> options = new ArrayList<>(4); + // 閫夐」鍐呭 + QuestionItemObject optionA = new QuestionItemObject(); + optionA.setPrefix("A"); + optionA.setContent(excelQuestion.getOptionA()); + options.add(optionA); - List<QuestionEditRequestVM> list = QuestionClassConvert.INSTANCE.QuestionEditVOListToQuestionEditRequestVMList(questionEditVOS); + QuestionItemObject optionB = new QuestionItemObject(); + optionB.setPrefix("B"); + optionB.setContent(excelQuestion.getOptionB()); + options.add(optionB); - List<QuestionEditItemVM> questionEditItemVMS = new ArrayList<>(); - QuestionEditItemVM questionEditItemVM = new QuestionEditItemVM(); - - //缁勮棰樼洰 - for (QuestionEditRequestVM vm : list) { - questionEditItemVM.setPrefix("A"); - questionEditItemVM.setContent(vm.getA()); - - questionEditItemVMS.add(questionEditItemVM); - questionEditItemVM = new QuestionEditItemVM(); - questionEditItemVM.setPrefix("B"); - questionEditItemVM.setContent(vm.getB()); - questionEditItemVMS.add(questionEditItemVM); - if(!"".equals(vm.getC()) && vm.getC()!=null){ - questionEditItemVM = new QuestionEditItemVM(); - questionEditItemVM.setPrefix("C"); - questionEditItemVM.setContent(vm.getC()); - questionEditItemVMS.add(questionEditItemVM); - } - if(!"".equals(vm.getD()) && vm.getD()!=null){ - questionEditItemVM = new QuestionEditItemVM(); - questionEditItemVM.setPrefix("D"); - questionEditItemVM.setContent(vm.getD()); - questionEditItemVMS.add(questionEditItemVM); - } - vm.setItems(questionEditItemVMS); - List<String> str = Arrays.asList(vm.getCorrect().split(",")); - - List<Subject> subjectList = subjectMapper.getNames(vm.getSbNames().split(",")); - - Integer[] arr =subjectList.stream() - .map(Subject::getId).toArray(Integer[]::new); - - vm.setSubjectIds(arr); - //澶氶�� - if (str.size() > 1) { - vm.setCorrectArray(str); - vm.setCorrect(null); - } - vm.setScore(QuestionSourceEnum.fromType(vm.getQuestionType()).toString()); - vm.setDifficult(4); - - questionService.insertFullQuestion(vm, getCurrentUser().getId()); - questionEditItemVMS.clear(); + if (StringUtils.isNotBlank(excelQuestion.getOptionC())) { + QuestionItemObject optionC = new QuestionItemObject(); + optionC.setPrefix("C"); + optionC.setContent(excelQuestion.getOptionC()); + options.add(optionC); } - return RestResponse.ok(); + if (StringUtils.isNotBlank(excelQuestion.getOptionD())) { + QuestionItemObject optionD = new QuestionItemObject(); + optionD.setPrefix("D"); + optionD.setContent(excelQuestion.getOptionD()); + options.add(optionD); + } + + // 鏇存柊棰樼洰鍐呭 + QuestionObject questionObject = new QuestionObject(); + questionObject.setQuestionItemObjects(options); + questionObject.setAnalyze(excelQuestion.getAnalyze()); + questionObject.setTitleContent(excelQuestion.getTitle()); + questionObject.setCorrect(excelQuestion.getCorrect()); + + TextContent textContent = new TextContent(); + textContent.setContent(JSON.toJSONString(questionObject)); + textContent.setCreateTime(new Date()); + textContent.setId(question1.getInfoTextContentId()); + textContentService.updateByIdFilter(textContent); + + // 淇濆瓨棰樼洰淇℃伅 + // 璁剧疆棰樺瀷 + question.setQuestionType(QuestionTypeEnum.get(excelQuestion.getQuestionType())); + // 绛旀鍘绘帀绌烘牸 + String rightAnswer = excelQuestion.getCorrect().replaceAll("\\s+", ""); + // 绛旀(澶氶�夐渶瑕佺敤,鍒嗗壊淇濆瓨瀛楃涓插埌鏁版嵁搴�) + String[] corrects = rightAnswer.split(SPLIT); + if (corrects.length > 1) { + question.setCorrect(Arrays.asList(corrects).stream().collect(Collectors.joining(","))); + } else { + question.setCorrect(rightAnswer); + } + + // 闅惧害 + question.setDifficult(excelQuestion.getDifficult()); + // 鍒嗘暟 + if (StringUtils.isBlank(excelQuestion.getScore())) { + question.setScore(ExamUtil.scoreFromVM(QuestionSourceEnum.fromType(question.getQuestionType()) + "")); + } else { + question.setScore(ExamUtil.scoreFromVM(String.valueOf(excelQuestion.getScore()))); + } + // 鍒涘缓浜� + question.setCreateUser(1); + question.setStatus(QuestionStatusEnum.OK.getCode()); + question.setCreateTime(new Date()); + question.setDeleted(Boolean.FALSE); +// question.setInfoTextContentId(textContent.getId()); + questionService.updateByIdFilter(question); + + } + +// @PostMapping("/import") +// public RestResponse importQuestion(@RequestPart("file") MultipartFile file) throws Exception { +// List<QuestionEditVO> questionEditVOS = ExcelUtils.readMultipartFile(file, QuestionEditVO.class) +// .stream().map(e -> { +// e.setQuestionType(QuestionTypeEnum.get(e.getType())); +//// e.setSubjectId(subjectMapper.getName(e.getSbNames()).getId()); +//// e.setGradeLevel(departmentMapper.getName(e.getDepartment()).getId()); +// return e; +// }).collect(Collectors.toList()); +// +// List<QuestionEditRequestVM> list = QuestionClassConvert.INSTANCE.QuestionEditVOListToQuestionEditRequestVMList(questionEditVOS); +// +// List<QuestionEditItemVM> questionEditItemVMS = new ArrayList<>(); +// QuestionEditItemVM questionEditItemVM = new QuestionEditItemVM(); +// +// //缁勮棰樼洰 +// for (QuestionEditRequestVM vm : list) { +// // 鍒ゆ柇棰樺共鏄惁閲嶅锛岄噸澶嶄笉娣诲姞 +// Integer num = questionService.countQuestionByTitle(vm.getTitle()); +// if (num > 0) { +// continue; +// } +// +// questionEditItemVM.setPrefix("A"); +// questionEditItemVM.setContent(vm.getA()); +// +// questionEditItemVMS.add(questionEditItemVM); +// questionEditItemVM = new QuestionEditItemVM(); +// questionEditItemVM.setPrefix("B"); +// questionEditItemVM.setContent(vm.getB()); +// questionEditItemVMS.add(questionEditItemVM); +// if(!"".equals(vm.getC()) && vm.getC()!=null){ +// questionEditItemVM = new QuestionEditItemVM(); +// questionEditItemVM.setPrefix("C"); +// questionEditItemVM.setContent(vm.getC()); +// questionEditItemVMS.add(questionEditItemVM); +// } +// if(!"".equals(vm.getD()) && vm.getD()!=null){ +// questionEditItemVM = new QuestionEditItemVM(); +// questionEditItemVM.setPrefix("D"); +// questionEditItemVM.setContent(vm.getD()); +// questionEditItemVMS.add(questionEditItemVM); +// } +// vm.setItems(questionEditItemVMS); +// // 娓呯┖鍓嶅悗鐨勯�楀彿锛屼互鍏嶅悗缁綔绛斿垽鏂负閿欒 +// String s = vm.getCorrect().replaceAll("^,+|,+$", ""); +// if (Objects.equals(s, "姝g‘")) s = "A"; +// if (Objects.equals(s, "閿欒")) s = "B"; +// vm.setCorrect(s); +// List<String> str = Arrays.asList(s.split(SPLIT)); +// +// List<Subject> subjectList = subjectMapper.getNames(vm.getSbNames().split(SPLIT)); +// +// Integer[] arr =subjectList.stream() +// .map(Subject::getId).toArray(Integer[]::new); +// +// vm.setSubjectIds(arr); +// //澶氶�� +// if (str.size() > 1) { +// vm.setCorrectArray(str); +// vm.setCorrect(null); +// } +// vm.setScore(QuestionSourceEnum.fromType(vm.getQuestionType()).toString()); +// vm.setDifficult(4); +// +// questionService.insertFullQuestion(vm, getCurrentUser().getId()); +// questionEditItemVMS.clear(); +// } +// return RestResponse.ok(); +// } + + @PostMapping("/question/export") + public void exportQuestion(@RequestBody QuestionExportVO query, HttpServletResponse response) throws IOException { + // 鏌ヨ瀵煎嚭鏁版嵁 + List<QuestionImportVO> exportData = questionService.exportData(query); + // 澶勭悊瀹屽杽鏁版嵁 + exportData.stream().forEach(question -> { + if (StringUtils.isNotBlank(question.getQuestionContent())) { + QuestionObject questionContent = JSON.parseObject(question.getQuestionContent(), QuestionObject.class); + // 璁剧疆閫夐」 + for (QuestionItemObject option : questionContent.getQuestionItemObjects()) { + String optionContent = option.getContent(); + if ("A".equals(option.getPrefix())) { + question.setOptionA(optionContent); + } else if ("B".equals(option.getPrefix())) { + question.setOptionB(optionContent); + } else if ("C".equals(option.getPrefix())) { + question.setOptionC(optionContent); + } else if ("D".equals(option.getPrefix())) { + question.setOptionD(optionContent); + } + } + question.setScore(BigDecimal.valueOf(Double.valueOf(question.getScore())).divide(BigDecimal.TEN).toString()); + // 璁剧疆棰樺共銆佽В鏋� + question.setAnalyze(questionContent.getAnalyze()); + question.setTitle(questionContent.getTitleContent()); + // 璁剧疆璇剧洰 + question.setSubjectName(question.getSubjectList().stream().collect(Collectors.joining(","))); + // 璁剧疆棰樺瀷 + question.setQuestionType(QuestionTypeEnum.fromCode(Integer.valueOf(question.getQuestionType())).getName()); + } + }); + 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"); + + + // 鏌ュ嚭鎵�鏈夌殑璇剧洰锛坋xcel涓嬫媺鏁版嵁锛� + List<Subject> subjects = subjectMapper.allSubject(new ArrayList<>(), Boolean.TRUE); + List<String> subjectNameList = subjects.stream().map(Subject::getName).collect(Collectors.toList()); + + // 鏌ュ嚭鎵�鏈夌殑璇剧洰锛坋xcel涓嬫媺鏁版嵁锛� + EasyExcel.write(response.getOutputStream(), QuestionImportVO.class) + .sheet("棰樼洰瀵煎嚭鏁版嵁") + .registerWriteHandler(new SelectExcel(subjectNameList)) + .doWrite(exportData); } } -- Gitblit v1.8.0