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 f6524e8c..27d4e126 100644 --- a/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeCourseInfoDao.java +++ b/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeCourseInfoDao.java @@ -44,7 +44,7 @@ public interface TeacherOpenCourseMergeCourseInfoDao extends BaseMapper TreeCache = new ConcurrentHashMap<>(); @@ -99,7 +107,7 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService>() { @Override public Optional load(Long teacherOpenCourseId) { - return Optional.fromNullable(teacherOpenCourseMergeCourseInfoDao.getValueByTeacherOpenCourseId(teacherOpenCourseId)); + return Optional.fromNullable(teacherOpenCourseMergeCourseInfoDao.getTreeLocalCacheByTeacherOpenCourseId(teacherOpenCourseId)); } }); @@ -464,13 +472,81 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService copyToList, Long parentId) { + public void batchUpdateSomeMergeId(List copyToList, + final Long parentId, ConcurrentHashMap idPair) { + + // 转换成线程安全的集合,来并行操作。 + List safeList = new CopyOnWriteArrayList<>(copyToList); + + // 先判断必要的条件不能为空!才能继续进行下面的重置ID操作 + safeList.stream().parallel().forEach(item -> { + Assert.notNull(item.getTeacherOpenCourseMergeCourseInfoId(), "开课课程ID不能为空!"); + Assert.notNull(item.getCourseInfoParentId(), "开课课程上级ID不能为空!"); + + Long newId = defaultIfNull(parentId, snowflake.nextId()); + item.setTeacherOpenCourseMergeCourseInfoId(newId); + // 存储ID对 + idPair.put(item.getTeacherOpenCourseMergeCourseInfoId(), newId); + batchUpdateSomeMergeId(item.getChildren(), snowflake.nextId(), idPair); + }); + } + + + public void batchUpdateArrayListSomeMergeId(List copyToList, + final Long parentId, ConcurrentHashMap idPair) { + + // 转换成线程安全的集合,来并行操作。 + // TODO 未完待续。 + CopyOnWriteArrayList onWriteArrayList = toCopyOnWriteArrayList(copyToList); + Iterator iterator = onWriteArrayList.stream().parallel().iterator(); + List reference = onWriteArrayList.stream().parallel().collect(Collectors.toList()); + iterator.forEachRemaining(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()); + Long newId = defaultIfNull(parentId, snowflake.nextId()); + item.setTeacherOpenCourseMergeCourseInfoId(newId); + // 存储ID对 + idPair.put(item.getTeacherOpenCourseMergeCourseInfoId(), newId); + iterator.remove(); + }); + } + + /** + * 树型集合转一维集合 + * 带对象转换 + * + * @param copyToList 树型集合 + * @param result 结果集 + * @return + */ + public void treeListConvertArrayList(List copyToList, + CopyOnWriteArrayList result) { + // 启用并行操作,使用线程安全的集合用来保存 + copyToList.stream().parallel().forEach(item -> { + result.add(BeanUtil.copyProperties(item, TeacherOpenCourseMergeCourseInfo.class)); + treeListConvertArrayList(item.getChildren(), result); + }); } /** @@ -672,7 +748,7 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService