From 7cacd5c831bb4583c83ce25702543acfd53d4531 Mon Sep 17 00:00:00 2001
From: Mlxa0324 <mlx950324@163.com>
Date: Sun, 26 Feb 2023 22:27:14 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E9=9A=8F=E6=9C=BA?=
 =?UTF-8?q?=E6=8A=BD=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ...herOpenCourseMergeResourcesQuestionDao.java |  7 +------
 .../ResourcesQuestionSnapshotService.java      | 18 +++++++++++++++++-
 .../teacherOpenCourseMergeResourcesQuestion.md | 15 ++++++++-------
 3 files changed, 26 insertions(+), 14 deletions(-)

diff --git a/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeResourcesQuestionDao.java b/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeResourcesQuestionDao.java
index d0f0960e..fe2d98c3 100644
--- a/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeResourcesQuestionDao.java
+++ b/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeResourcesQuestionDao.java
@@ -6,7 +6,6 @@ import com.ibeetl.jlw.entity.vo.QuestionTypeCountVO;
 import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeResourcesQuestionQuery;
 import org.beetl.sql.core.engine.PageQuery;
 import org.beetl.sql.mapper.BaseMapper;
-import org.beetl.sql.mapper.annotation.Param;
 import org.beetl.sql.mapper.annotation.SqlResource;
 import org.beetl.sql.mapper.annotation.Update;
 import org.springframework.stereotype.Component;
@@ -45,13 +44,9 @@ public interface TeacherOpenCourseMergeResourcesQuestionDao extends BaseMapper<T
      * 根据题型和数量,随机取离线题库。通过开课的题目快照表和题目配置表
      * 这里用章节练习的原因是:开课中的题库,是实时同步到章节练习中的,删除或者上下架,也都会同步的。
      * @param questionSettingDTO
-     * @param teacherOpenCourseId   开课ID
-     * @param questionSettingId     题目配置ID
      * @return
      */
-    List<TeacherOpenCourseMergeResourcesQuestion> getRandomMergeResourcesQuestionListByChapterTestQuestion(QuestionSettingDTO questionSettingDTO,
-                                                                                                           @Param("teacherOpenCourseId") Long teacherOpenCourseId,
-                                                                                                           @Param("questionSettingId") Long questionSettingId);
+    <T extends QuestionSettingDTO> List<TeacherOpenCourseMergeResourcesQuestion> getRandomMergeResourcesQuestionListByChapterTestQuestion(T questionSettingDTO);
 
     /**
      * 根据开课ID获取下面的题目类型和类型下的总题数
diff --git a/web/src/main/java/com/ibeetl/jlw/service/ResourcesQuestionSnapshotService.java b/web/src/main/java/com/ibeetl/jlw/service/ResourcesQuestionSnapshotService.java
index 2dfbf9aa..e4d27832 100644
--- a/web/src/main/java/com/ibeetl/jlw/service/ResourcesQuestionSnapshotService.java
+++ b/web/src/main/java/com/ibeetl/jlw/service/ResourcesQuestionSnapshotService.java
@@ -22,6 +22,7 @@ import com.ibeetl.jlw.enums.GlobalUpStatusEnum;
 import com.ibeetl.jlw.enums.QuestionLogAddTypeEnum;
 import com.ibeetl.jlw.web.query.ResourcesQuestionSnapshotQuery;
 import com.ibeetl.jlw.web.query.TeacherOpenCourseQuestionSettingQuery;
+import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.assertj.core.util.Lists;
@@ -420,10 +421,16 @@ public class ResourcesQuestionSnapshotService extends CoreBaseService<ResourcesQ
         List<ResourcesQuestionSnapshot> result = new ArrayList<>();
 
         for (QuestionSettingDTO questionSettingOption : questionSettingOptions) {
+
+            // 数据放在实体类扩展中
+            QuestionSettingDTOExtend settingExtend = BeanUtil.copyProperties(questionSettingOption, QuestionSettingDTOExtend.class);
+            settingExtend.setQuestionSettingId(questionSettingId);
+            settingExtend.setTeacherOpenCourseId(null);
+
             // 根据配置随机出题。这里直接设置题目的分值。
             List<TeacherOpenCourseMergeResourcesQuestion> randomMergeResourcesQuestionList =
                     teacherOpenCourseMergeResourcesQuestionDao
-                            .getRandomMergeResourcesQuestionListByChapterTestQuestion(questionSettingOption, null, questionSettingId);
+                            .getRandomMergeResourcesQuestionListByChapterTestQuestion(settingExtend);
 
             setRQNewCourseInfoId(randomMergeResourcesQuestionList, courseInfoIdPair);
 
@@ -432,6 +439,15 @@ public class ResourcesQuestionSnapshotService extends CoreBaseService<ResourcesQ
         }
         return result;
     }
+
+    @Data
+    protected class QuestionSettingDTOExtend extends QuestionSettingDTO {
+
+        private Long questionSettingId;
+        private Long teacherOpenCourseId;
+
+    }
+
     /**
      * 根据题目类型配置。从系统题库获取
      * 获取题目快照列表。并配置题目配置ID
diff --git a/web/src/main/resources/sql/jlw/teacherOpenCourseMergeResourcesQuestion.md b/web/src/main/resources/sql/jlw/teacherOpenCourseMergeResourcesQuestion.md
index 2a6a969d..ded61dc6 100644
--- a/web/src/main/resources/sql/jlw/teacherOpenCourseMergeResourcesQuestion.md
+++ b/web/src/main/resources/sql/jlw/teacherOpenCourseMergeResourcesQuestion.md
@@ -782,22 +782,24 @@ getRandomMergeResourcesQuestionListByChapterTestQuestion
       b.org_id
       FROM
       resources_question_snapshot a,
-      teacher_open_course_question_setting b
+      teacher_open_course_question_setting b,
+      teacher_open_course_merge_resources_question c
       WHERE
       1
       AND a.teacher_open_course_question_setting_id = a.teacher_open_course_question_setting_id
-      AND question_status = 1
+      AND a.teacher_open_course_merge_resources_question_id = c.teacher_open_course_merge_resources_question_id
+      AND c.teacher_open_course_id = b.teacher_open_course_id
+      AND a.question_status = 1
+      AND c.question_status = 1
       @if(!isEmpty(teacherOpenCourseId)){
       AND b.teacher_open_course_id = #teacherOpenCourseId#
       @}
       @if(!isEmpty(questionSettingId)){
       AND b.teacher_open_course_id 
-            @// 保证至少会返回一个值,默认返回-1
-         = (select ifnull(max(teacher_open_course_id), '-1') from teacher_open_course_question_setting 
+         in (select teacher_open_course_id from teacher_open_course_question_setting 
             where  1 
             and teacher_open_course_question_setting_id = #questionSettingId# 
-            and teacher_open_course_question_setting_status = 1 
-            limit 1)
+            and teacher_open_course_question_setting_status = 1 )
       @}
       @// 如果都为空,则不返回数据,比较保守些
       @if(isEmpty(questionSettingId) && isEmpty(teacherOpenCourseId)){
@@ -807,7 +809,6 @@ getRandomMergeResourcesQuestionListByChapterTestQuestion
       AND b.teacher_open_course_question_setting_type = 'CHAPTER_EXERCISE'
   ) t
   where 1=1
-  and t.question_status = 1
   @// 题目ID优先级高
   @if(!isEmpty(resourcesQuestionIdPlural)) {
   and find_in_set(t.teacher_open_course_merge_resources_question_id, #resourcesQuestionIdPlural#)