From c7951163fef9f7c9745b3377aff83677291adb44 Mon Sep 17 00:00:00 2001 From: Mlxa0324 Date: Tue, 8 Nov 2022 10:51:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=B7=E8=B4=9D=E7=B3=BB=E7=BB=9F=E8=AF=BE?= =?UTF-8?q?=E7=A8=8B=EF=BC=8C=E9=87=8D=E6=96=B0=E5=88=86=E9=85=8DID?= =?UTF-8?q?=E5=92=8C=E7=88=B6=E8=BE=88ID=E3=80=82=E5=A5=BD=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E4=B8=80=E4=B8=AA=E7=B3=BB=E7=BB=9F=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=EF=BC=8C=E5=8F=AF=E4=BB=A5=E5=88=86=E9=85=8D=E7=BB=99=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E6=95=99=E5=B8=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...acherOpenCourseMergeCourseInfoService.java | 60 +++++++++---------- ...erOpenCourseMergeResourcesInfoService.java | 24 ++++++-- ...enCourseMergeResourcesQuestionService.java | 21 ++++++- ...penCourseMergeResourcesInfoController.java | 2 +- ...ourseMergeResourcesQuestionController.java | 2 +- 5 files changed, 68 insertions(+), 41 deletions(-) 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 93a76926..6feb9a25 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeCourseInfoService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeCourseInfoService.java @@ -51,7 +51,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; import java.util.stream.Collectors; -import static cn.hutool.core.collection.ListUtil.toCopyOnWriteArrayList; import static cn.hutool.core.util.ArrayUtil.join; import static cn.hutool.core.util.ObjectUtil.defaultIfNull; import static com.ibeetl.admin.core.util.ExcelUtil.getCellFormatValue; @@ -509,40 +508,33 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService copyToList, - final Long parentId, ConcurrentHashMap idPair) { - - // 转换成线程安全的集合,来并行操作。 - // TODO 未完待续。 - CopyOnWriteArrayList onWriteArrayList = toCopyOnWriteArrayList(copyToList); - Iterator iterator = onWriteArrayList.stream().parallel().iterator(); - - // 过滤掉第一层,课程节点数据 - List reference = onWriteArrayList.stream() - .parallel().filter(e -> e.getCourseInfoParentId() != null) - .collect(Collectors.toList()); + public Map batchUpdateArrayListSomeMergeId(CopyOnWriteArrayList copyToList) { - iterator.forEachRemaining(item -> { + ConcurrentHashMap idPair = new ConcurrentHashMap<>(); + // 遍历所有节点 + copyToList.stream().parallel().forEach(item -> { // 先判断必要的条件不能为空!才能继续进行下面的重置ID操作 Assert.notNull(item.getTeacherOpenCourseMergeCourseInfoId(), "开课课程ID不能为空!"); - Assert.notNull(item.getCourseInfoParentId(), "开课课程上级ID不能为空!"); - // 查找parentId对应关系 - List filterMatchList = reference.stream() - .filter(ref -> ref.getCourseInfoParentId().equals(item.getTeacherOpenCourseMergeCourseInfoId())) - .collect(Collectors.toList()); + // 查找是否有子节点 + CopyOnWriteArrayList filterMatchList = copyToList.stream() + .filter(ref -> item.getTeacherOpenCourseMergeCourseInfoId().equals(ref.getCourseInfoParentId())) + .collect(Collectors.toCollection(CopyOnWriteArrayList::new)); - Long newId = defaultIfNull(parentId, snowflake.nextId()); - item.setTeacherOpenCourseMergeCourseInfoId(newId); + Long newId = snowflake.nextId(); // 存储ID对 idPair.put(item.getTeacherOpenCourseMergeCourseInfoId(), newId); - iterator.remove(); - batchUpdateArrayListSomeMergeId(filterMatchList, newId, idPair); + // 重置父节点的ID + item.setTeacherOpenCourseMergeCourseInfoId(newId); + // 重置子节点的父辈ID + filterMatchList.forEach(e -> { + e.setCourseInfoParentId(newId); + }); }); + + return idPair; } /** @@ -607,9 +599,10 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService courseInfoIds, + public Map copyFromCourseInfo(@NotEmpty(message = "系统课程ID不能为空!") Set courseInfoIds, @NotNull(message = "开课ID不能为空!") final Long teacherOpenCourseId) { + ConcurrentHashMap idPair = new ConcurrentHashMap<>(); // 查询是否绑定过课程 boolean notExists = teacherOpenCourseMergeCourseInfoDao.isNotExistsByTeacherOpenCourseId(teacherOpenCourseId); @@ -639,13 +632,14 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService idPair = new ConcurrentHashMap<>(); -// batchUpdateArrayListSomeMergeId(copyToList, null, idPair); - System.out.println(idPair); + copyToList = new CopyOnWriteArrayList<>(copyToList); + idPair.putAll(batchUpdateArrayListSomeMergeId((CopyOnWriteArrayList)copyToList)); // 批量插入 teacherOpenCourseMergeCourseInfoDao.insertBatch(copyToList); }); + + return idPair; } /** @@ -661,7 +655,7 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService idPair = copyFromCourseInfo(courseInfoIds, teacherOpenCourseId); // 开启并行处理 courseInfoIds.stream().parallel().forEach(courseInfoId -> { @@ -683,7 +677,7 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService resourcesQuestionIds = resourcesQuestionList.stream().map(ResourcesQuestion::getResourcesQuestionId).collect(toSet()); // 拷贝系统题目库到教师开课 - teacherOpenCourseMergeResourcesQuestionService.copyFromQuestion(resourcesQuestionIds, teacherOpenCourseId); + teacherOpenCourseMergeResourcesQuestionService.copyFromQuestion(resourcesQuestionIds, teacherOpenCourseId, idPair); ResourcesInfoQuery resourcesInfoQuery = new ResourcesInfoQuery(); resourcesInfoQuery.setCourseInfoIds(allCourseInfoIdsJoin); @@ -692,7 +686,7 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService resourcesInfoIds = resourcesInfoList.stream().map(ResourcesInfo::getResourcesInfoId).collect(toSet()); // 拷贝系统资源库到教师开课 - teacherOpenCourseMergeResourcesInfoService.copyFromResourcesInfo(resourcesInfoIds, teacherOpenCourseId); + teacherOpenCourseMergeResourcesInfoService.copyFromResourcesInfo(resourcesInfoIds, teacherOpenCourseId, idPair); }); } @@ -737,7 +731,7 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService values = getValuesByQuery(courseInfoQuery); + List values = getValuesByQueryNotWithPermission(courseInfoQuery); // 根据ID删除数据 Set delIdList = values.stream().map(TeacherOpenCourseMergeCourseInfo::getTeacherOpenCourseMergeCourseInfoId).collect(toSet()); diff --git a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeResourcesInfoService.java b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeResourcesInfoService.java index ba08f109..6c1b776e 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeResourcesInfoService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeResourcesInfoService.java @@ -319,14 +319,16 @@ public class TeacherOpenCourseMergeResourcesInfoService extends CoreBaseService< /** * 教师端-导入资源操作,逻辑拆分 - * + *

* 从系统资源库拉取到教师开课的资源中。 - * @param resourcesInfoIds 资源信息ID集合 - * @param teacherOpenCourseId 开课ID + * + * @param resourcesInfoIds 资源信息ID集合 + * @param teacherOpenCourseId 开课ID + * @param idPair * @return */ public void copyFromResourcesInfo(Set resourcesInfoIds, - @NotNull(message = "开课ID不能为空!") final Long teacherOpenCourseId) { + @NotNull(message = "开课ID不能为空!") final Long teacherOpenCourseId, Map idPair) { if (ObjectUtil.isEmpty(resourcesInfoIds)) { return; } ResourcesInfoQuery resourcesInfoQuery = new ResourcesInfoQuery(); @@ -340,10 +342,24 @@ public class TeacherOpenCourseMergeResourcesInfoService extends CoreBaseService< BeanUtil.copyToList(resourcesInfoList, TeacherOpenCourseMergeResourcesInfo.class, copyOptions); copyToList.forEach(item -> item.setTeacherOpenCourseId(teacherOpenCourseId)); + resetNewId(copyToList, idPair); + // 批量插入资源和开课关联表 insertBatch(copyToList); } + /** + * 重置开课课程ID。需要拿到新旧改变的关系 + * @param copyToList + * @param idPair + */ + public void resetNewId(List copyToList, Map idPair) { + if (ObjectUtil.isEmpty(idPair)) {return;} + copyToList.forEach(item -> { + item.setTeacherOpenCourseMergeCourseInfoId(idPair.get(item.getTeacherOpenCourseMergeCourseInfoId())); + }); + } + /** * 教师端-重置操作之一 * 根据开课ID清空离线资源信息 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 1969e7d5..26bf97c3 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeResourcesQuestionService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeResourcesQuestionService.java @@ -369,16 +369,17 @@ public class TeacherOpenCourseMergeResourcesQuestionService extends CoreBaseServ /** * 从resources_question 表,拷贝数据。类似从模板中,拉取数据 - * + *

* 教师端-导入题目操作,逻辑拆分 * 从系统题目库拉取题目到教师开课的题目中。 * * @param resourcesQuestionIds * @param teacherOpenCourseId + * @param idPair * @return */ public void copyFromQuestion(Set resourcesQuestionIds, - @NotNull(message = "开课ID不能为空!") Long teacherOpenCourseId) { + @NotNull(message = "开课ID不能为空!") Long teacherOpenCourseId, Map idPair) { if (ObjectUtil.isEmpty(resourcesQuestionIds)) { return; } // 题目ID集合 @@ -395,10 +396,14 @@ public class TeacherOpenCourseMergeResourcesQuestionService extends CoreBaseServ List copyToList = BeanUtil.copyToList(resourcesQuestions, TeacherOpenCourseMergeResourcesQuestion.class, copyOptions); + if (ObjectUtil.isEmpty(copyToList)) { return; } // 设置开课ID copyToList.forEach(item -> item.setTeacherOpenCourseId(teacherOpenCourseId)); + // 重置开课课程ID + resetNewId(copyToList, idPair); + // 批量插入 teacherOpenCourseMergeResourcesQuestionDao.insertBatch(copyToList); } @@ -422,6 +427,18 @@ public class TeacherOpenCourseMergeResourcesQuestionService extends CoreBaseServ resetOperationByTeacherOpenCourseId(teacherOpenCourseId); } + /** + * 重置开课课程ID。需要拿到新旧改变的关系 + * @param copyToList + * @param idPair + */ + public void resetNewId(List copyToList, Map idPair) { + if (ObjectUtil.isEmpty(idPair)) {return;} + copyToList.forEach(item -> { + item.setTeacherOpenCourseMergeCourseInfoId(idPair.get(item.getTeacherOpenCourseMergeCourseInfoId())); + }); + } + /** * 根据开课ID获取下面的题目类型和类型下的总题数 * @param teacherOpenCourseId diff --git a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeResourcesInfoController.java b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeResourcesInfoController.java index 34f94a07..d57037a7 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeResourcesInfoController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeResourcesInfoController.java @@ -413,7 +413,7 @@ public class TeacherOpenCourseMergeResourcesInfoController{ */ @PostMapping(API + "/copyFromResourcesInfo.do") public JsonResult copyFromResourcesInfo(Long[] resourcesInfoIds, Long teacherOpenCourseId) { - teacherOpenCourseMergeResourcesInfoService.copyFromResourcesInfo(CollectionUtil.newHashSet(resourcesInfoIds), teacherOpenCourseId); + teacherOpenCourseMergeResourcesInfoService.copyFromResourcesInfo(CollectionUtil.newHashSet(resourcesInfoIds), teacherOpenCourseId, null); return JsonResult.success(); } } 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 c48900d5..a85d24f8 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeResourcesQuestionController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeResourcesQuestionController.java @@ -429,7 +429,7 @@ public class TeacherOpenCourseMergeResourcesQuestionController{ */ @PostMapping(API + "/copyFromQuestion.do") public JsonResult copyFromQuestion(Long[] resourcesQuestionIds, Long teacherOpenCourseId) { - teacherOpenCourseMergeResourcesQuestionService.copyFromQuestion(CollectionUtil.newHashSet(resourcesQuestionIds), teacherOpenCourseId); + teacherOpenCourseMergeResourcesQuestionService.copyFromQuestion(CollectionUtil.newHashSet(resourcesQuestionIds), teacherOpenCourseId, null); return JsonResult.success(); }