From 24fd92d92b1da73361a6873f31e969af78aeeee8 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期四, 28 十一月 2024 11:57:50 +0800
Subject: [PATCH] 导入题目时,如果课目不存在自动创建

---
 src/main/java/com/mindskip/xzs/excel/SelectExcel.java                   |   12 +++---
 src/main/resources/mapper/SubjectMapper.xml                             |    5 ++
 src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java |   47 +++++++++++++----------
 src/main/java/com/mindskip/xzs/repository/SubjectMapper.java            |    9 ++++
 4 files changed, 47 insertions(+), 26 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 e8879cd..56dbf2f 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java
@@ -2,6 +2,7 @@
 
 import com.alibaba.excel.EasyExcel;
 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;
@@ -330,18 +331,22 @@
                     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;
-                    }
+                    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 = targetSubject.stream()
+                    questionSubjectsList = subjects.stream()
                             .filter(subject -> {
                                 // 鍘婚噸棰樼洰锛氶骞�+璇剧洰鐩稿悓鎵嶇畻鍚屼竴棰�
                                 List<QuestionSubjectVO> lists = questionService.countQuestionByTitleAndSubject(excelQuestion.getTitle(), subject.getId());
@@ -359,18 +364,20 @@
                         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;
-                    }
+                    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 = targetSubject.stream()
+                    questionSubjectsList = subjects.stream()
                             .filter(subject -> {
                                 // 鍘婚噸棰樼洰锛氶骞�+璇剧洰鐩稿悓鎵嶇畻鍚屼竴棰�
                                 List<QuestionSubjectVO> lists = questionService.countQuestionByTitleAndSubject(excelQuestion.getTitle(), subject.getId());
diff --git a/src/main/java/com/mindskip/xzs/excel/SelectExcel.java b/src/main/java/com/mindskip/xzs/excel/SelectExcel.java
index 70e36d2..07d185b 100644
--- a/src/main/java/com/mindskip/xzs/excel/SelectExcel.java
+++ b/src/main/java/com/mindskip/xzs/excel/SelectExcel.java
@@ -58,12 +58,12 @@
         DataValidation subjectValidation = dataValidationHelper.createValidation(subjectConstraint, subjectTypeRange);
         sheet.addValidationData(subjectValidation);
 
-        // 璁剧疆閫夐」涓嬫媺鑼冨洿锛岀4鍒楋紝1500琛屽唴
-        CellRangeAddressList optionRange = new CellRangeAddressList(2, 1500, 3, 3);
-        // 娣诲姞閫夐」涓嬫媺
-        DataValidationConstraint optionConstraint = dataValidationHelper.createExplicitListConstraint(optionList);
-        DataValidation optionValidation = dataValidationHelper.createValidation(optionConstraint, optionRange);
-        sheet.addValidationData(optionValidation);
+//        // 璁剧疆閫夐」涓嬫媺鑼冨洿锛岀4鍒楋紝1500琛屽唴
+//        CellRangeAddressList optionRange = new CellRangeAddressList(2, 1500, 3, 3);
+//        // 娣诲姞閫夐」涓嬫媺
+//        DataValidationConstraint optionConstraint = dataValidationHelper.createExplicitListConstraint(optionList);
+//        DataValidation optionValidation = dataValidationHelper.createValidation(optionConstraint, optionRange);
+//        sheet.addValidationData(optionValidation);
 
         // 璁剧疆閫夐」涓嬫媺鑼冨洿锛岀4鍒楋紝1500琛屽唴
         CellRangeAddressList answerRange = new CellRangeAddressList(2, 1500, 5, 5);
diff --git a/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java b/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java
index bd374bd..4b195e4 100644
--- a/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java
@@ -41,4 +41,13 @@
      * @return
      */
     Subject selectByName(@Param("id") Integer id, @Param("name") String name);
+
+
+    /**
+     * 鍚嶇О鏌ヨ鏄惁瀛樺湪
+     *
+     * @param name
+     * @return
+     */
+    Subject getByName(@Param("name") String name);
 }
diff --git a/src/main/resources/mapper/SubjectMapper.xml b/src/main/resources/mapper/SubjectMapper.xml
index 7c75ea3..ee0a8b0 100644
--- a/src/main/resources/mapper/SubjectMapper.xml
+++ b/src/main/resources/mapper/SubjectMapper.xml
@@ -149,6 +149,11 @@
     </select>
 
 
+    <select id="getByName" resultType="com.mindskip.xzs.domain.Subject">
+        SELECT * FROM t_subject WHERE name = #{name} AND deleted = 0
+    </select>
+
+
     <select id="page" resultMap="BaseResultMap"
             parameterType="com.mindskip.xzs.viewmodel.admin.education.SubjectPageRequestVM">
         SELECT

--
Gitblit v1.8.0