diff --git a/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeCourseInfoDao.java b/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeCourseInfoDao.java
index d62ea61d..592d1ffe 100644
--- a/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeCourseInfoDao.java
+++ b/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeCourseInfoDao.java
@@ -88,4 +88,17 @@ public interface TeacherOpenCourseMergeCourseInfoDao extends BaseMapper<TeacherO
      */
     @Update
     void deleteMergeCourseInfoByTeacherOpenCourseIds(String teacherOpenCourseIds);
+
+    /**
+     * 通过开课ID获取课程节点信息
+     * @param teacherOpenCourseId
+     * @return
+     */
+    @Cacheable(value = "teacherOpenCourseMergeCourseInfoDao.getCourseInfoNodeByTeacherOpenCourseId", unless = "#result != null")
+    default TeacherOpenCourseMergeCourseInfo getCourseInfoNodeByTeacherOpenCourseId(@NotNull Long teacherOpenCourseId) {
+        return createLambdaQuery().andEq(TeacherOpenCourseMergeCourseInfo::getTeacherOpenCourseId, teacherOpenCourseId)
+                .andEq(TeacherOpenCourseMergeCourseInfo::getCourseInfoStatus, 1)
+                .andIsNull(TeacherOpenCourseMergeCourseInfo::getCourseInfoParentId)
+                .unique();
+    }
 }
diff --git a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeCourseInfoService.java b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeCourseInfoService.java
index 0f5782a4..b1465d11 100644
--- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeCourseInfoService.java
+++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeCourseInfoService.java
@@ -161,9 +161,9 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
             for (String id : ids.split(",")) {
                 List<TeacherOpenCourseMergeCourseInfo> courseResources = getCourseResources(Long.valueOf(id));
                 // TODO 这里要优化
-                List<TeacherOpenCourseMergeCourseInfo> courseResources2 = getCourseResourcesByList(Long.valueOf(id));
-
-                int a = 1/0;
+//                List<TeacherOpenCourseMergeCourseInfo> courseResources2 = getCourseResourcesByList(Long.valueOf(id));
+//
+//                int a = 1/0;
 
                 // 只匹配章节
                 Set<Long> idSet = courseResources.stream().filter(item -> Integer.valueOf(2).equals(item.getCourseInfoType()))
@@ -930,7 +930,7 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
      * @return
      */
     public List<TeacherOpenCourseMergeCourseInfo> getCourseResourcesByList(@NotNull Long teacherOpenCourseMergeCourseInfoId){
-        ArrayList<TeacherOpenCourseMergeCourseInfo> result = new ArrayList<>();
+        List<TeacherOpenCourseMergeCourseInfo> result = new CopyOnWriteArrayList<>();
         getCourseResourcesByList(teacherOpenCourseMergeCourseInfoDao.getAllWithCache(), teacherOpenCourseMergeCourseInfoId, result);
         return result;
     }
@@ -944,7 +944,7 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
      * @return
      */
     public List<TeacherOpenCourseMergeCourseInfo> getCourseResourcesByList(@NotNull Long teacherOpenCourseMergeCourseInfoId, @NotNull Long teacherOpenCourseId){
-        ArrayList<TeacherOpenCourseMergeCourseInfo> result = new ArrayList<>();
+        List<TeacherOpenCourseMergeCourseInfo> result = new CopyOnWriteArrayList<>();
         getCourseResourcesByList(teacherOpenCourseMergeCourseInfoDao.getAllWithCacheWithTeacherOpenCourseId(teacherOpenCourseId), teacherOpenCourseMergeCourseInfoId, result);
         return result;
     }
@@ -963,20 +963,15 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
     public void getCourseResourcesByList(@NotNull Collection<TeacherOpenCourseMergeCourseInfo> courseInfoList,
                                          @NotNull Long filterTeacherOpenCourseMergeCourseInfoId,
                                          Collection<TeacherOpenCourseMergeCourseInfo> result){
-        Iterator<TeacherOpenCourseMergeCourseInfo> iterator = courseInfoList.iterator();
-        while (iterator.hasNext()) {
-            TeacherOpenCourseMergeCourseInfo courseInfo = iterator.next();
-
+        for (TeacherOpenCourseMergeCourseInfo courseInfo : courseInfoList) {
             // 先处理掉一些不合规的数据。防止死循环,过滤掉父类ID是他自己的情况
             if(courseInfo.getCourseInfoParentId() == null
                     || courseInfo.getCourseInfoParentId().equals(courseInfo.getTeacherOpenCourseMergeCourseInfoId())) {
-                iterator.remove();
                 continue;
             }
             // 处理关系
             if(courseInfo.getCourseInfoParentId().equals(filterTeacherOpenCourseMergeCourseInfoId)) {
                 result.add(courseInfo);
-                iterator.remove();
                 getCourseResourcesByList(courseInfoList, courseInfo.getTeacherOpenCourseMergeCourseInfoId(), result);
             }
         }
diff --git a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseQuestionSettingService.java b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseQuestionSettingService.java
index 8095c62b..c3c9caf3 100644
--- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseQuestionSettingService.java
+++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseQuestionSettingService.java
@@ -1,6 +1,7 @@
 package com.ibeetl.jlw.service;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.ConcurrentHashSet;
 import cn.hutool.core.lang.Assert;
 import cn.hutool.core.lang.func.Func1;
 import cn.hutool.core.util.ObjectUtil;
@@ -562,7 +563,7 @@ public class TeacherOpenCourseQuestionSettingService extends CoreBaseService<Tea
                 .filter(item -> Integer.valueOf(2).equals(item.getCourseInfoType())).collect(Collectors.toSet());
 
         // 章下面所有小节,包含章节点
-        Set<TeacherOpenCourseMergeCourseInfo> result = new HashSet<>(12);
+        Set<TeacherOpenCourseMergeCourseInfo> result = new ConcurrentHashSet<>(12);
         for (TeacherOpenCourseMergeCourseInfo chapter : chapterSet) {
             result.clear();
             Long teacherOpenCourseMergeCourseInfoId = chapter.getTeacherOpenCourseMergeCourseInfoId();