From c836bbe1334993ddef70d71195204f2e35026f4d Mon Sep 17 00:00:00 2001
From: yaodan <1421553879@qq.com>
Date: Sun, 30 Apr 2023 18:09:07 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AE=B0=E5=BD=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../TeacherOpenCourseHandsOnService.java      |  4 +-
 ...acherOpenCourseMergeCourseInfoService.java |  6 +-
 ...enCourseMergeResourcesQuestionService.java | 64 +++++++++----------
 ...ourseMergeResourcesQuestionController.java |  3 +-
 4 files changed, 39 insertions(+), 38 deletions(-)

diff --git a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseHandsOnService.java b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseHandsOnService.java
index 4eece74f..3e9461af 100644
--- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseHandsOnService.java
+++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseHandsOnService.java
@@ -485,7 +485,9 @@ public class TeacherOpenCourseHandsOnService extends CoreBaseService<TeacherOpen
      */
     public void copySystemHandsToOpenCourse(@NotNull(message = "开课ID不能为空!") Long teacherOpenCourseId,
                                             @NotNull(message = "课程ID不能为空!") Long courseInfoId,
-                                            @Nullable Map<Long, Long> courseInfoIdPair) {
+                                            @Nullable Map<Long, Long> courseInfoIdPair,
+                                            @Nullable Map<Long, Long> resourcesQuestionIdPair
+                                            ) {
 
         Date now = new Date();
         CoreUser currentUser = getUser();
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 0cbcb2f3..b0458a0e 100644
--- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeCourseInfoService.java
+++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeCourseInfoService.java
@@ -807,8 +807,8 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
 
             // 如果课程章节没查到记录,则下面的资源也没必要执行,资源依赖课程章节
             if (ObjectUtil.isNotEmpty(courseInfos)) {
-                // 拷贝系统题目库到教师开课
-                teacherOpenCourseMergeResourcesQuestionService.copySystemQuestionToOpenCourse(teacherOpenCourseId, courseInfos, courseInfoIdPair);
+                // 拷贝系统题目库到教师开课,并返回新旧题目ID的映射关系
+                Map<Long, Long> resourcesQuestionIdPair = teacherOpenCourseMergeResourcesQuestionService.copySystemQuestionToOpenCourse(teacherOpenCourseId, courseInfos, courseInfoIdPair);
                 // 取出来所有的课程章、节的ID。大于等于2,就是章和他的子节点.从系统题目表抽取
 //                teacherOpenCourseQuestionSettingService.copySystemQuestionChapterTestQuestionToOpenCourse(teacherOpenCourseId, courseInfos, courseInfoIdPair);
                 // 从开课题库中抽取章节练习题
@@ -816,7 +816,7 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
                 // 拷贝系统资源库到教师开课
                 teacherOpenCourseMergeResourcesInfoService.copySystemResourcesInfoToOpenCourse(teacherOpenCourseId, courseInfos, courseInfoIdPair);
 
-                teacherOpenCourseHandsOnService.copySystemHandsToOpenCourse(teacherOpenCourseId, courseInfoId, courseInfoIdPair);
+                teacherOpenCourseHandsOnService.copySystemHandsToOpenCourse(teacherOpenCourseId, courseInfoId, courseInfoIdPair,resourcesQuestionIdPair);
 
             }
         });
diff --git a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeResourcesQuestionService.java b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeResourcesQuestionService.java
index bb50dc40..f73c7c12 100644
--- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeResourcesQuestionService.java
+++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeResourcesQuestionService.java
@@ -3,6 +3,7 @@ package com.ibeetl.jlw.service;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.copier.CopyOptions;
 import cn.hutool.core.lang.Assert;
+import cn.hutool.core.lang.Snowflake;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.EnumUtil;
 import cn.hutool.core.util.NumberUtil;
@@ -81,6 +82,8 @@ public class TeacherOpenCourseMergeResourcesQuestionService extends CoreBaseServ
     @Autowired
     private ResourcesQuestionSnapshotService resourcesQuestionSnapshotService;
 
+    private static final   Snowflake snowflake = new Snowflake();
+
 
     public PageQuery<TeacherOpenCourseMergeResourcesQuestion> queryByCondition(PageQuery query) {
         PageQuery ret = teacherOpenCourseMergeResourcesQuestionDao.queryByCondition(query);
@@ -465,8 +468,8 @@ public class TeacherOpenCourseMergeResourcesQuestionService extends CoreBaseServ
      * @param allCourseInfo       指定的所有课程章节信息
      * @param courseInfoIdPair    拷贝过来的ID段,旧ID和新ID的一个映射关系(非必填)
      */
-    public void copySystemQuestionToOpenCourse(@NotNull(message = "开课ID不能为空!") Long teacherOpenCourseId,
-                                               Collection<CourseInfo> allCourseInfo, @NotNull Map<Long, Long> courseInfoIdPair) {
+    public Map<Long, Long> copySystemQuestionToOpenCourse(@NotNull(message = "开课ID不能为空!") Long teacherOpenCourseId,
+                                                          Collection<CourseInfo> allCourseInfo, @NotNull Map<Long, Long> courseInfoIdPair) {
 
         // 待拷贝的系统课程ID不能为空.才会执行
         if (ObjectUtil.isNotEmpty(allCourseInfo)) {
@@ -480,33 +483,12 @@ public class TeacherOpenCourseMergeResourcesQuestionService extends CoreBaseServ
             // 系统题目库ID集合
             Set<Long> resourcesQuestionIds = resourcesQuestionList.stream().map(ResourcesQuestion::getResourcesQuestionId).collect(toSet());
             // 拷贝系统题目库到教师开课
-            copyFromSystemQuestion(resourcesQuestionIds, teacherOpenCourseId, courseInfoIdPair);
+            return copyFromSystemQuestion(resourcesQuestionIds, teacherOpenCourseId, courseInfoIdPair);
         }
+        return new HashMap<>();
     }
 
-    /**
-     * 根据指定的课程ID和章节ID集合,去从系统题目拷贝到开课题目库
-     *
-     * @param teacherOpenCourseId  开课ID
-     * @param allCourseInfoIdsJoin 指定的所有课程章节ID
-     * @param courseInfoIdPair     拷贝过来的ID段,旧ID和新ID的一个映射关系(非必填)
-     */
-    public void copySystemQuestionToOpenCourse(@NotNull(message = "开课ID不能为空!") Long teacherOpenCourseId,
-                                               String allCourseInfoIdsJoin, @NotNull Map<Long, Long> courseInfoIdPair) {
 
-        // 待拷贝的系统课程ID不能为空.才会执行
-        if (ObjectUtil.isNotEmpty(allCourseInfoIdsJoin)) {
-            ResourcesQuestionQuery resourcesQuestionQuery = new ResourcesQuestionQuery();
-            resourcesQuestionQuery.setCourseInfoIds(allCourseInfoIdsJoin);
-            resourcesQuestionQuery.setQuestionStatus(1);
-            List<ResourcesQuestion> resourcesQuestionList = resourcesQuestionService.getValuesByQuery(resourcesQuestionQuery);
-
-            // 系统题目库ID集合
-            Set<Long> resourcesQuestionIds = resourcesQuestionList.stream().map(ResourcesQuestion::getResourcesQuestionId).collect(toSet());
-            // 拷贝系统题目库到教师开课
-            copyFromSystemQuestion(resourcesQuestionIds, teacherOpenCourseId, courseInfoIdPair);
-        }
-    }
 
     /**
      * 从resources_question 表,拷贝数据。类似从模板中,拉取数据
@@ -519,11 +501,11 @@ public class TeacherOpenCourseMergeResourcesQuestionService extends CoreBaseServ
      * @param courseInfoIdPair
      * @return
      */
-    public void copyFromSystemQuestion(Set<Long> systemResourcesQuestionIds,
-                                       @NotNull(message = "开课ID不能为空!") Long teacherOpenCourseId, Map<Long, Long> courseInfoIdPair) {
+    public Map<Long, Long> copyFromSystemQuestion(Set<Long> systemResourcesQuestionIds,
+                                                  @NotNull(message = "开课ID不能为空!") Long teacherOpenCourseId, Map<Long, Long> courseInfoIdPair) {
 
         if (ObjectUtil.isEmpty(systemResourcesQuestionIds)) {
-            return;
+            return courseInfoIdPair;
         }
         // 题目ID集合
         String ids = join(systemResourcesQuestionIds.toArray(), ",");
@@ -536,11 +518,13 @@ public class TeacherOpenCourseMergeResourcesQuestionService extends CoreBaseServ
         // 转换后的数据暂存
         List<TeacherOpenCourseMergeResourcesQuestion> convertedList = new ArrayList<>();
         // 类转换方法
-        resourcesQuestionConvertToTeacherOpenCourseMergeResourcesQuestion(resourcesQuestions, convertedList, courseInfoIdPair);
+        Map<Long, Long> resourcesQuestionIdPair = resourcesQuestionConvertToTeacherOpenCourseMergeResourcesQuestion(resourcesQuestions, convertedList, courseInfoIdPair);
         // 设置开课ID
         convertedList.forEach(item -> item.setTeacherOpenCourseId(teacherOpenCourseId));
         // 批量插入
         teacherOpenCourseMergeResourcesQuestionDao.insertBatch(convertedList);
+
+        return resourcesQuestionIdPair;
     }
 
     /**
@@ -550,21 +534,37 @@ public class TeacherOpenCourseMergeResourcesQuestionService extends CoreBaseServ
      * @param to
      * @param courseInfoIdPair
      */
-    public void resourcesQuestionConvertToTeacherOpenCourseMergeResourcesQuestion(
+    public Map<Long, Long> resourcesQuestionConvertToTeacherOpenCourseMergeResourcesQuestion(
             @NotNull Collection<ResourcesQuestion> from,
             @NotNull Collection<TeacherOpenCourseMergeResourcesQuestion> to,
             Map<Long, Long> courseInfoIdPair) {
+
+        Map<Long, Long> resourcesQuestionIdPair = new HashMap<>();
         // 拷贝部分字段映射
-        CopyOptions copyOptions = CopyOptions.create().setFieldMapping(MapUtil.of("courseInfoId", "teacherOpenCourseMergeCourseInfoId"));
+        Map<String, String> of = MapUtil.of("courseInfoId", "teacherOpenCourseMergeCourseInfoId");
+        of.put("resourcesQuestionId", "teacherOpenCourseMergeResourcesQuestionId");
+        CopyOptions copyOptions = CopyOptions.create().setFieldMapping(of);
         // 拷贝
         to.addAll(BeanUtil.copyToList(from, TeacherOpenCourseMergeResourcesQuestion.class, copyOptions));
 
+        // 主动更改Id,并记录映射关系
+        for (TeacherOpenCourseMergeResourcesQuestion teacherOpenCourseMergeResourcesQuestion : to) {
+            long newId = snowflake.nextId();
+
+            // 记录映射关系
+            resourcesQuestionIdPair.put(teacherOpenCourseMergeResourcesQuestion.getTeacherOpenCourseMergeResourcesQuestionId(),
+                    newId);
+            teacherOpenCourseMergeResourcesQuestion.setTeacherOpenCourseMergeCourseInfoId(newId);
+        }
+
         if (ObjectUtil.isAllEmpty(to, courseInfoIdPair)) {
-            return;
+            return new HashMap<>();
         }
 
         // 重置开课课程ID
         resetNewId(to, courseInfoIdPair);
+
+        return resourcesQuestionIdPair;
     }
 
     /**
diff --git a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeResourcesQuestionController.java b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeResourcesQuestionController.java
index fb152062..db6fd2dd 100644
--- a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeResourcesQuestionController.java
+++ b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeResourcesQuestionController.java
@@ -466,8 +466,7 @@ public class TeacherOpenCourseMergeResourcesQuestionController extends BaseContr
      */
     @PostMapping(API + "/copyFromQuestion.do")
     public JsonResult copyFromQuestion(Long[] resourcesQuestionIds, Long teacherOpenCourseId) {
-        teacherOpenCourseMergeResourcesQuestionService.copyFromSystemQuestion(CollectionUtil.newHashSet(resourcesQuestionIds), teacherOpenCourseId, null);
-        return JsonResult.success();
+        return JsonResult.success(teacherOpenCourseMergeResourcesQuestionService.copyFromSystemQuestion(CollectionUtil.newHashSet(resourcesQuestionIds), teacherOpenCourseId, null));
     }
 
     /**