From 27730ddd32d18ea2df5273cab7f1eacc54dccc44 Mon Sep 17 00:00:00 2001 From: Mlxa0324 Date: Tue, 8 Nov 2022 15:45:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B5=84=E6=BA=90=E6=8B=B7=E8=B4=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TeacherOpenCourseMergeCourseInfoDao.java | 3 +- ...acherOpenCourseMergeCourseInfoService.java | 119 +++++++++++++----- .../jlw/teacherOpenCourseMergeCourseInfo.md | 4 +- 3 files changed, 92 insertions(+), 34 deletions(-) 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 27d4e126..46a2a105 100644 --- a/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeCourseInfoDao.java +++ b/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeCourseInfoDao.java @@ -46,8 +46,7 @@ public interface TeacherOpenCourseMergeCourseInfoDao extends BaseMapper batchUpdateArrayListSomeMergeId(CopyOnWriteArrayList copyToList) { + public Map batchUpdateArrayListSomeMergeId(List copyToList, + // 不能为空,但是可以传递empty的Map + @NotNull(message = "初始化ID对不能为空!") Map initIdPair) { - ConcurrentHashMap idPair = new ConcurrentHashMap<>(); + Map idPair = new HashMap<>(initIdPair); - // 遍历所有节点 - copyToList.stream().parallel().forEach(item -> { - // 先判断必要的条件不能为空!才能继续进行下面的重置ID操作 - Assert.notNull(item.getTeacherOpenCourseMergeCourseInfoId(), "开课课程ID不能为空!"); + // 查找列表中所有的ID + Set mergeCourseInfoIdSet = copyToList.stream() + .map(TeacherOpenCourseMergeCourseInfo::getTeacherOpenCourseMergeCourseInfoId).collect(toSet()); - // 查找是否有子节点 - CopyOnWriteArrayList filterMatchList = copyToList.stream() - .filter(ref -> item.getTeacherOpenCourseMergeCourseInfoId().equals(ref.getCourseInfoParentId())) - .collect(Collectors.toCollection(CopyOnWriteArrayList::new)); + for (Long oldId : mergeCourseInfoIdSet) { + // 只取第一次ID对,后面加进来的丢弃 + if (!idPair.containsKey(oldId)) { + idPair.put(oldId, snowflake.nextId()); + } + } - Long newId = snowflake.nextId(); - // 存储ID对 - idPair.put(item.getTeacherOpenCourseMergeCourseInfoId(), newId); - // 重置父节点的ID - item.setTeacherOpenCourseMergeCourseInfoId(newId); - // 重置子节点的父辈ID - filterMatchList.forEach(e -> { - e.setCourseInfoParentId(newId); - }); - }); + // 替换ID和父类ID + updateSpecifyMergeCourseInfoIdTargetList(copyToList, idPair); return idPair; } @@ -590,6 +585,64 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService courseInfoList, + @NotEmpty(message = "ID对不能为空!") Map someIdPair) { + for (CourseInfo courseInfo : courseInfoList) { + someIdPair.forEach((oldId, newId) -> { + if(courseInfo.getCourseInfoId().equals(oldId)) { + courseInfo.setCourseInfoId(newId); + } + if(courseInfo.getCourseInfoParentId().equals(oldId)) { + courseInfo.setCourseInfoParentId(newId); + } + }); + } + } + + /** + * 修改章节点的父类ID字段 + * + * @param courseInfoList 系统课程列表 + * @param someIdPair 一些修改前修改后的ID对(指定一些修改的ID对) + */ + public void updateSpecifyMergeCourseInfoIdTargetList(List courseInfoList, + @NotEmpty(message = "ID对不能为空!") Map someIdPair) { + for (TeacherOpenCourseMergeCourseInfo courseInfo : courseInfoList) { + someIdPair.forEach((oldId, newId) -> { + if(courseInfo.getTeacherOpenCourseMergeCourseInfoId().equals(oldId)) { + courseInfo.setTeacherOpenCourseMergeCourseInfoId(newId); + } + if(courseInfo.getCourseInfoParentId().equals(oldId)) { + courseInfo.setCourseInfoParentId(newId); + } + }); + } + } + + /** * 教师端-导入课程章节操作,逻辑拆分 * @@ -605,7 +658,11 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService { @@ -614,8 +671,8 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService chapterList = courseInfoService.getCourseResources(courseInfoId); - // 将课程本身添加进集合 - chapterList.add(currentCourseInfo); + // 全部归类到教师开课时候,创建的开课课程ID下。支持一对多个系统课程的拷贝 + idPair.put(currentCourseInfo.getCourseInfoId(), openCourseTargetInfo.getTeacherOpenCourseMergeCourseInfoId()); // 先根据ID清楚现有的课程章节小节这个表 String delCourseInfoIds = chapterList.stream().map(CourseInfo::getCourseInfoId).collect(CollectorUtil.joining(",")); deleteTeacherOpenCourseMergeCourseInfo(delCourseInfoIds); @@ -631,8 +688,8 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService(copyToList); - idPair.putAll(batchUpdateArrayListSomeMergeId((CopyOnWriteArrayList)copyToList)); + // 最右侧的idPair 可以理解成是初始化的Map。Map特性Key是唯一的。 + idPair.putAll(batchUpdateArrayListSomeMergeId(copyToList, idPair)); // 批量插入 teacherOpenCourseMergeCourseInfoDao.insertBatch(copyToList); @@ -659,7 +716,7 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService { // 获取这个课程章节下的所有的子章节信息 - List chapterList = courseInfoService.getChapterList(courseInfoId); + List chapterList = courseInfoService.getCourseResources(courseInfoId); HashSet courseInfos = CollectionUtil.newHashSet(chapterList); // 如果课程章节没查到记录,则下面的资源也没必要执行,资源依赖课程章节 @@ -758,14 +815,14 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService 1 limit 1 getTreeLocalCacheByTeacherOpenCourseId