From 6f58f2cb4ab7d8717cfc8995142ba62f2be09af1 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期二, 02 七月 2024 15:58:10 +0800
Subject: [PATCH] 题目导入完善
---
src/main/java/com/mindskip/xzs/service/QuestionService.java | 7 +
src/main/java/com/mindskip/xzs/repository/QuestionMapper.java | 9 +
src/main/resources/mapper/QuestionMapper.xml | 9 +
src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java | 21 ++-
src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java | 225 +++++++++++++++++++++++---------------------
5 files changed, 153 insertions(+), 118 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 6c0bb5c..ef605d1 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java
@@ -63,7 +63,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;
@@ -237,114 +237,114 @@
* @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("/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 importUser(@RequestPart("file") MultipartFile file) throws Exception {
+ 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()));
@@ -360,6 +360,12 @@
//缁勮棰樼洰
for (QuestionEditRequestVM vm : list) {
+ // 鍒ゆ柇棰樺共鏄惁閲嶅锛岄噸澶嶄笉娣诲姞
+ Integer num = questionService.countQuestionByTitle(vm.getTitle());
+ if (num > 0) {
+ continue;
+ }
+
questionEditItemVM.setPrefix("A");
questionEditItemVM.setContent(vm.getA());
@@ -381,9 +387,10 @@
questionEditItemVMS.add(questionEditItemVM);
}
vm.setItems(questionEditItemVMS);
- List<String> str = Arrays.asList(vm.getCorrect().split(","));
+ // 娓呯┖鍓嶅悗鐨勯�楀彿锛屼互鍏嶅悗缁綔绛斿垽鏂负閿欒
+ List<String> str = Arrays.asList(vm.getCorrect().replaceAll("^,+|,+$", "").split(SPLIT));
- List<Subject> subjectList = subjectMapper.getNames(vm.getSbNames().split(","));
+ List<Subject> subjectList = subjectMapper.getNames(vm.getSbNames().split(SPLIT));
Integer[] arr =subjectList.stream()
.map(Subject::getId).toArray(Integer[]::new);
diff --git a/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java b/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java
index 854d04c..a839f5a 100644
--- a/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java
@@ -46,6 +46,11 @@
QuestionVO getAnswer(Integer id);
-
-
+ /**
+ * 鏌ユ妱棰樺共绗﹀悎鐨勯鐩暟閲�
+ *
+ * @param title
+ * @return
+ */
+ Integer countQuestionByTitle(@Param("title") String title);
}
diff --git a/src/main/java/com/mindskip/xzs/service/QuestionService.java b/src/main/java/com/mindskip/xzs/service/QuestionService.java
index 7532cdc..f4ea773 100644
--- a/src/main/java/com/mindskip/xzs/service/QuestionService.java
+++ b/src/main/java/com/mindskip/xzs/service/QuestionService.java
@@ -61,4 +61,11 @@
/** 鑾峰彇棰樼洰绛旀銆佽В鏋� */
RestResponse getAnswer(Integer id);
+ /**
+ * 鏌ユ壘鏄惁宸茬粡瀛樺湪棰樺共鐩稿悓鐨勯
+ *
+ * @param title
+ * @return
+ */
+ Integer countQuestionByTitle(String title);
}
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 1edf777..c86f205 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java
@@ -104,14 +104,16 @@
questionMapper.insertSelective(question);
// 棰樼洰鎵�灞為儴闂ㄦ彃鍏�
- List<DeptQuestion> deptQuestions = model.getDeptIds().stream().map(deptId -> {
- DeptQuestion deptQuestion = new DeptQuestion();
- deptQuestion.setQuestionId(question.getId());
- deptQuestion.setDeptId(deptId);
- return deptQuestion;
- }).collect(Collectors.toList());
if (! CollectionUtils.isEmpty(model.getDeptIds())) {
- deptQuestionMapper.add(deptQuestions);
+ List<DeptQuestion> deptQuestions = model.getDeptIds().stream().map(deptId -> {
+ DeptQuestion deptQuestion = new DeptQuestion();
+ deptQuestion.setQuestionId(question.getId());
+ deptQuestion.setDeptId(deptId);
+ return deptQuestion;
+ }).collect(Collectors.toList());
+ if (! CollectionUtils.isEmpty(model.getDeptIds())) {
+ deptQuestionMapper.add(deptQuestions);
+ }
}
//鎵归噺娣诲姞
@@ -342,6 +344,11 @@
return RestResponse.ok(null);
}
+ @Override
+ public Integer countQuestionByTitle(String title) {
+ return questionMapper.countQuestionByTitle(title);
+ }
+
/**
* 澶勭悊棰樼洰鍐呭JSON
*
diff --git a/src/main/resources/mapper/QuestionMapper.xml b/src/main/resources/mapper/QuestionMapper.xml
index 4129fa3..6796d90 100644
--- a/src/main/resources/mapper/QuestionMapper.xml
+++ b/src/main/resources/mapper/QuestionMapper.xml
@@ -373,4 +373,13 @@
INNER JOIN t_text_content ttc ON tq.info_text_content_id = ttc.id AND tq.id = #{id} AND tq.deleted = 0
</select>
+ <select id="countQuestionByTitle" resultType="integer">
+ SELECT
+ COUNT(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>
+
</mapper>
--
Gitblit v1.8.0