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