From d4daa1ea31db6fd421c0e86bab178a9f3b512141 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期一, 23 九月 2024 18:02:54 +0800 Subject: [PATCH] 使用新导入 --- src/main/java/com/mindskip/xzs/service/QuestionService.java | 12 + src/main/java/com/mindskip/xzs/repository/QuestionMapper.java | 12 + src/main/resources/mapper/QuestionMapper.xml | 23 ++ src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java | 8 src/main/java/com/mindskip/xzs/vo/QuestionImportVO.java | 20 + src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java | 431 ++++++++++++++++++++++++++++------------------- src/main/java/com/mindskip/xzs/vo/QuestionSubjectVO.java | 16 + 7 files changed, 330 insertions(+), 192 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 9d623ea..e8879cd 100644 --- a/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java +++ b/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java @@ -7,13 +7,17 @@ import com.mindskip.xzs.base.RestResponse; import com.mindskip.xzs.base.SystemCode; import com.mindskip.xzs.domain.Question; +import com.mindskip.xzs.domain.QuestionSubject; import com.mindskip.xzs.domain.Subject; import com.mindskip.xzs.domain.TextContent; import com.mindskip.xzs.domain.enums.QuestionSourceEnum; +import com.mindskip.xzs.domain.enums.QuestionStatusEnum; 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.domain.vo.DeptQuestionVO; +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; @@ -28,18 +32,20 @@ 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.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; +import java.math.BigDecimal; import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; +import java.util.*; +import java.util.function.Consumer; import java.util.stream.Collectors; @RestController("AdminQuestionController") @@ -78,7 +84,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())); // 鏌ヨ棰樼洰鎵�灞為儴闂� @@ -150,8 +156,28 @@ // 鏋勫缓妯℃澘鏍蜂緥鏁版嵁 List<QuestionImportVO> data = new ArrayList<>(4); - EasyExcel.write(response.getOutputStream(), QuestionExportData.class) + QuestionImportVO questionImportVO = new QuestionImportVO(); + questionImportVO.setQuestionType("鍗曢�夐"); + questionImportVO.setDifficult(2); + questionImportVO.setCorrect("B"); + questionImportVO.setScore("2"); + questionImportVO.setSubjectName("娴嬭瘯璇剧洰"); + questionImportVO.setAnalyze("B鏄鐨�"); + questionImportVO.setTitle("杩欐槸涓�閬撴祴璇曢鐩紝浣跨敤璇ユā鏉胯鍒犻櫎鎴栨浛鎹㈣繖閬撻"); + questionImportVO.setOptionA("閫夋垜"); + questionImportVO.setOptionB("閫夋垜"); + questionImportVO.setOptionC("閫夋垜"); + questionImportVO.setOptionD("閫夋垜"); + data.add(questionImportVO); + + // 鏌ュ嚭鎵�鏈夌殑璇剧洰锛坋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 FixedMergeCellStrategy(2, 4, Arrays.asList(1, 2, 3, 6, 7, 8, 9))) .doWrite(data); } @@ -222,191 +248,233 @@ * @param file * @throws IOException */ -// @PostMapping("/question/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()) { -// // 璇ラ鐨勯�夐」 -// 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++; -// } -// i += next; -// -// // 淇濆瓨棰樼洰鍐呭 -// 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()); -// textContentService.insert(textContent); -// -// // 淇濆瓨棰樼洰淇℃伅 -// // 璁剧疆棰樺瀷 -// question.setQuestionType(QuestionTypeEnum.get(excelQuestion.getQuestionType())); -// // 绛旀(澶氶�夐渶瑕佺敤,鍒嗗壊淇濆瓨瀛楃涓插埌鏁版嵁搴�) -// String[] corrects = excelQuestion.getCorrect().split(SPLIT); -// if (corrects.length > 1) { -// question.setCorrect(Arrays.asList(corrects).stream().collect(Collectors.joining(","))); -// } else { -// question.setCorrect(excelQuestion.getCorrect()); -// } -// -// // 闅惧害 -// question.setDifficult(excelQuestion.getDifficult()); -// // 鍒嗘暟 -// 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.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; -// }).collect(Collectors.toList()); -// } -// 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 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()); + @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++) { - List<QuestionEditRequestVM> list = QuestionClassConvert.INSTANCE.QuestionEditVOListToQuestionEditRequestVMList(questionEditVOS); + // 棰樼洰瀹炰綋 + Question question = new Question(); + // 璇诲彇鐨勯鐩� + QuestionImportVO excelQuestion = data.get(i); - List<QuestionEditItemVM> questionEditItemVMS = new ArrayList<>(); - QuestionEditItemVM questionEditItemVM = new QuestionEditItemVM(); + // 鍒ゆ柇棰樺共鏄惁閲嶅锛岄噸澶嶄笉娣诲姞 + Integer questionId = questionService.countQuestionByTitle(excelQuestion.getTitle()); + if (Objects.isNull(questionId)) { + // 璇ラ鐨勯�夐」 + List<QuestionItemObject> options = new ArrayList<>(4); + // 閫夐」鍐呭 + QuestionItemObject optionA = new QuestionItemObject(); + optionA.setPrefix("A"); + optionA.setContent(excelQuestion.getOptionA()); + options.add(optionA); - //缁勮棰樼洰 - for (QuestionEditRequestVM vm : list) { - // 鍒ゆ柇棰樺共鏄惁閲嶅锛岄噸澶嶄笉娣诲姞 - Integer num = questionService.countQuestionByTitle(vm.getTitle()); - if (num > 0) { - continue; + 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); + } + 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()); + textContentService.insert(textContent); + + // 淇濆瓨棰樼洰淇℃伅 + // 璁剧疆棰樺瀷 + question.setQuestionType(QuestionTypeEnum.get(excelQuestion.getQuestionType())); + // 绛旀(澶氶�夐渶瑕佺敤,鍒嗗壊淇濆瓨瀛楃涓插埌鏁版嵁搴�) + String[] corrects = excelQuestion.getCorrect().split(SPLIT); + if (corrects.length > 1) { + question.setCorrect(Arrays.asList(corrects).stream().collect(Collectors.joining(","))); + } else { + question.setCorrect(excelQuestion.getCorrect()); + } + + // 闅惧害 + 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.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() + .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 { + // 鏌ュ嚭鎵�鏈夌殑璇剧洰 + 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() + .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); + } + } } - 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(); - } + }; + EasyExcel.read(file.getInputStream(), QuestionImportVO.class, new CurrencyDataListener(consumer)).sheet("妯℃澘").doRead(); return RestResponse.ok(); } + +// @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<QuestionExportData> exportData = questionService.exportData(query); + List<QuestionImportVO> exportData = questionService.exportData(query); // 澶勭悊瀹屽杽鏁版嵁 exportData.stream().forEach(question -> { - if (StringUtils.isNotBlank(question.getContent())) { - QuestionObject questionContent = JSON.parseObject(question.getContent(), QuestionObject.class); + if (StringUtils.isNotBlank(question.getQuestionContent())) { + QuestionObject questionContent = JSON.parseObject(question.getQuestionContent(), QuestionObject.class); // 璁剧疆閫夐」 for (QuestionItemObject option : questionContent.getQuestionItemObjects()) { String optionContent = option.getContent(); @@ -420,11 +488,12 @@ question.setOptionD(optionContent); } } + question.setScore(BigDecimal.valueOf(Double.valueOf(question.getScore())).divide(BigDecimal.TEN).toString()); // 璁剧疆棰樺共銆佽В鏋� question.setAnalyze(questionContent.getAnalyze()); question.setTitle(questionContent.getTitleContent()); // 璁剧疆璇剧洰 - question.setSubject(question.getSubjectList().stream().collect(Collectors.joining(","))); + question.setSubjectName(question.getSubjectList().stream().collect(Collectors.joining(","))); // 璁剧疆棰樺瀷 question.setQuestionType(QuestionTypeEnum.fromCode(Integer.valueOf(question.getQuestionType())).getName()); } @@ -435,9 +504,15 @@ String fileName = URLEncoder.encode("棰樼洰瀵煎嚭鏁版嵁", "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + // 鏌ュ嚭鎵�鏈夌殑璇剧洰锛坋xcel涓嬫媺鏁版嵁锛� - EasyExcel.write(response.getOutputStream(), QuestionExportData.class) + 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); } } diff --git a/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java b/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java index 4dfc6e4..0cda39f 100644 --- a/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java +++ b/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java @@ -10,6 +10,7 @@ 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.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -37,7 +38,7 @@ * @param query * @return */ - List<QuestionExportData> exportData(@Param("query") QuestionExportVO query); + List<QuestionImportVO> exportData(@Param("query") QuestionExportVO query); List<QuestionImportVO> export(@Param("query") QuestionExportVO query); @@ -54,4 +55,13 @@ * @return */ Integer countQuestionByTitle(@Param("title") String title); + + /** + * 棰樺共銆佽鐩浉鍚岀殑鏁伴噺 + * + * @param title + * @param subjectId + * @return + */ + List<QuestionSubjectVO> countQuestionByTitleAndSubject(@Param("title") String title, @Param("subjectId") Integer subjectId); } diff --git a/src/main/java/com/mindskip/xzs/service/QuestionService.java b/src/main/java/com/mindskip/xzs/service/QuestionService.java index f4ea773..61f2904 100644 --- a/src/main/java/com/mindskip/xzs/service/QuestionService.java +++ b/src/main/java/com/mindskip/xzs/service/QuestionService.java @@ -12,6 +12,7 @@ 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.ibatis.annotations.Param; import java.util.List; @@ -51,7 +52,7 @@ * @param query * @return */ - List<QuestionExportData> exportData(QuestionExportVO query); + List<QuestionImportVO> exportData(QuestionExportVO query); PageInfo<QuestionPageStudentResponseVM> selectQuestion(QuestionPageStudentRequestVM model); @@ -68,4 +69,13 @@ * @return */ Integer countQuestionByTitle(String title); + + /** + * 鏍规嵁棰樺共鍜岃鐩煡鎵炬槸鍚﹀瓨鍦ㄨ棰� + * + * @param title + * @param subjectId + * @return + */ + List<QuestionSubjectVO> countQuestionByTitleAndSubject(String title, Integer subjectId); } diff --git a/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java index c86f205..956e398 100644 --- a/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java +++ b/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java @@ -35,6 +35,7 @@ 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 lombok.RequiredArgsConstructor; import org.modelmapper.ModelMapper; import org.springframework.beans.factory.annotation.Autowired; @@ -301,7 +302,7 @@ } @Override - public List<QuestionExportData> exportData(QuestionExportVO query) { + public List<QuestionImportVO> exportData(QuestionExportVO query) { return questionMapper.exportData(query); } @@ -349,6 +350,11 @@ return questionMapper.countQuestionByTitle(title); } + @Override + public List<QuestionSubjectVO> countQuestionByTitleAndSubject(String title, Integer subjectId) { + return questionMapper.countQuestionByTitleAndSubject(title, subjectId); + } + /** * 澶勭悊棰樼洰鍐呭JSON * diff --git a/src/main/java/com/mindskip/xzs/vo/QuestionImportVO.java b/src/main/java/com/mindskip/xzs/vo/QuestionImportVO.java index 4c6035e..121bbcc 100644 --- a/src/main/java/com/mindskip/xzs/vo/QuestionImportVO.java +++ b/src/main/java/com/mindskip/xzs/vo/QuestionImportVO.java @@ -24,7 +24,7 @@ @ExcelProperty("棰樼洰绫诲瀷") private String questionType; - @ExcelProperty("璇剧洰(澶氫釜鐢ㄣ�侀殧寮�)") + @ExcelProperty("璇剧洰(澶氫釜鐢�,闅斿紑)") private String subjectName; @ExcelIgnore @@ -43,13 +43,19 @@ private String questionContent; // 閫夐」鍐呭 - @ExcelProperty({"棰樼洰閫夐」", "閫夐」"}) - private String optionName; + @ExcelProperty("閫夐」A") + private String optionA; - @ExcelProperty({"棰樼洰閫夐」", "閫夐」鍊�"}) - private String optionValue; + @ExcelProperty("閫夐」B") + private String optionB; - @ExcelProperty("绛旀(澶氫釜鐢ㄣ�侀殧寮�)") + @ExcelProperty("閫夐」C") + private String optionC; + + @ExcelProperty("閫夐」D") + private String optionD; + + @ExcelProperty("绛旀(澶氫釜鐢�,闅斿紑)") private String correct; // 瑙f瀽 @@ -59,7 +65,7 @@ // 棰樼洰鍒嗘暟 @ExcelProperty("棰樼洰鍒嗘暟") - private Integer score; + private String score; // 棰樼洰闅惧害 @ExcelProperty("棰樼洰闅惧害") diff --git a/src/main/java/com/mindskip/xzs/vo/QuestionSubjectVO.java b/src/main/java/com/mindskip/xzs/vo/QuestionSubjectVO.java new file mode 100644 index 0000000..05aee2a --- /dev/null +++ b/src/main/java/com/mindskip/xzs/vo/QuestionSubjectVO.java @@ -0,0 +1,16 @@ +package com.mindskip.xzs.vo; + +import lombok.Data; + +/** + * @author锛歺p + * @date锛�2024/9/23 14:24 + */ +@Data +public class QuestionSubjectVO { + + private Integer subjectId; + + private Integer questionId; + +} diff --git a/src/main/resources/mapper/QuestionMapper.xml b/src/main/resources/mapper/QuestionMapper.xml index 5207f9b..94c2295 100644 --- a/src/main/resources/mapper/QuestionMapper.xml +++ b/src/main/resources/mapper/QuestionMapper.xml @@ -273,6 +273,8 @@ DISTINCT q.id, q.question_type, + q.score, + q.difficult, q.correct, ttc.content FROM @@ -289,12 +291,14 @@ </where> </select> - <resultMap id="exportDataMap" type="com.mindskip.xzs.vo.QuestionExportData"> + <resultMap id="exportDataMap" type="com.mindskip.xzs.vo.QuestionImportVO"> <result column="question_type" property="questionType"/> <result column="title" property="title"/> <result column="analyze" property="analyze"/> - <result column="content" property="content"/> - <result column="correct" property="answer"/> + <result column="content" property="questionContent"/> + <result column="correct" property="correct"/> + <result column="score" property="score"/> + <result column="difficult" property="difficult"/> <collection property="subjectList" column="id" ofType="string" select="selectSubjects"/> </resultMap> @@ -375,11 +379,22 @@ <select id="countQuestionByTitle" resultType="integer"> SELECT - COUNT(q.id) + DISTINCT q.id FROM t_question q INNER JOIN t_text_content d on q.info_text_content_id = d.id WHERE JSON_VALUE(d.content, '$.titleContent') = #{title} AND q.deleted = 0 </select> + <select id="countQuestionByTitleAndSubject" resultType="com.mindskip.xzs.vo.QuestionSubjectVO"> + SELECT + s.subject_id, s.question_id + FROM + t_question q + INNER JOIN t_text_content d on q.info_text_content_id = d.id + INNER JOIN t_question_subject s ON q.id = s.question_id + WHERE + JSON_VALUE(d.content, '$.titleContent') = #{title} AND s.subject_id = #{subjectId} AND q.deleted = 0 + </select> + </mapper> -- Gitblit v1.8.0