beetlsql3-dev
Mlxa0324 2 years ago
parent 43b7e981ed
commit 814a1eddb7

@ -44,7 +44,7 @@ public interface TeacherOpenCourseMergeCourseInfoDao extends BaseMapper<TeacherO
* @param teacherOpenCourseId
* @return
*/
TeacherOpenCourseMergeCourseInfoTree getValueByTeacherOpenCourseId(@NotNull(message = "开课ID不能为空") Long teacherOpenCourseId);
TeacherOpenCourseMergeCourseInfoTree getTreeLocalCacheByTeacherOpenCourseId(@NotNull(message = "开课ID不能为空") Long teacherOpenCourseId);
/**
* ID
*
@ -52,7 +52,7 @@ public interface TeacherOpenCourseMergeCourseInfoDao extends BaseMapper<TeacherO
* @param teacherOpenCourseId
* @return
*/
TeacherOpenCourseMergeCourseInfo getTreeLocalCacheByTeacherOpenCourseId(@NotNull(message = "开课ID不能为空") Long teacherOpenCourseId);
TeacherOpenCourseMergeCourseInfo getValueByTeacherOpenCourseId(@NotNull(message = "开课ID不能为空") Long teacherOpenCourseId);
/**
* ID

@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.stream.CollectorUtil;
import cn.hutool.core.util.ObjectUtil;
@ -47,8 +48,12 @@ import java.io.*;
import java.time.Duration;
import java.util.*;
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;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toSet;
@ -87,6 +92,9 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
@Lazy
private TeacherOpenCourseMergeCourseInfoService teacherOpenCourseMergeCourseInfoService;
// 这里简单使用一个雪花算法来生成新的开课课程ID
private static Snowflake snowflake = new Snowflake();
//树结构缓存
private Map<Long,TeacherOpenCourseMergeCourseInfo> TreeCache = new ConcurrentHashMap<>();
@ -99,7 +107,7 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
new CacheLoader<Long, Optional<TeacherOpenCourseMergeCourseInfoTree>>() {
@Override
public Optional<TeacherOpenCourseMergeCourseInfoTree> load(Long teacherOpenCourseId) {
return Optional.fromNullable(teacherOpenCourseMergeCourseInfoDao.getValueByTeacherOpenCourseId(teacherOpenCourseId));
return Optional.fromNullable(teacherOpenCourseMergeCourseInfoDao.getTreeLocalCacheByTeacherOpenCourseId(teacherOpenCourseId));
}
});
@ -464,13 +472,81 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
}
/**
*
* {@link TeacherOpenCourseMergeCourseInfo#getTeacherOpenCourseMergeCourseInfoId()}
* {@link TeacherOpenCourseMergeCourseInfo#getCourseInfoParentId()}
* ID
*
* TeacherOpenCourseMergeCourseInfoIDparentId
* IDID
* @param copyToList
* @param parentId
*
* @param copyToList
* @param parentId ID
* @param idPair IDIDID
* @return IDIDID
*/
public void batchUpdateSomeMergeId(List<TeacherOpenCourseMergeCourseInfo> copyToList, Long parentId) {
public void batchUpdateSomeMergeId(List<TeacherOpenCourseMergeCourseInfoTree> copyToList,
final Long parentId, ConcurrentHashMap<Long, Long> idPair) {
// 转换成线程安全的集合,来并行操作。
List<TeacherOpenCourseMergeCourseInfoTree> 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<TeacherOpenCourseMergeCourseInfo> copyToList,
final Long parentId, ConcurrentHashMap<Long, Long> idPair) {
// 转换成线程安全的集合,来并行操作。
// TODO 未完待续。
CopyOnWriteArrayList<TeacherOpenCourseMergeCourseInfo> onWriteArrayList = toCopyOnWriteArrayList(copyToList);
Iterator<TeacherOpenCourseMergeCourseInfo> iterator = onWriteArrayList.stream().parallel().iterator();
List<TeacherOpenCourseMergeCourseInfo> reference = onWriteArrayList.stream().parallel().collect(Collectors.toList());
iterator.forEachRemaining(item -> {
// 先判断必要的条件不能为空才能继续进行下面的重置ID操作
Assert.notNull(item.getTeacherOpenCourseMergeCourseInfoId(), "开课课程ID不能为空");
Assert.notNull(item.getCourseInfoParentId(), "开课课程上级ID不能为空");
// 查找parentId对应关系
List<TeacherOpenCourseMergeCourseInfo> 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<TeacherOpenCourseMergeCourseInfoTree> copyToList,
CopyOnWriteArrayList<TeacherOpenCourseMergeCourseInfo> 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<Tea
public TeacherOpenCourseMergeCourseInfo getTreeByTeacherOpenCourseId(
@NotNull(message = "开课ID不能为空") final Long teacherOpenCourseId) {
TeacherOpenCourseMergeCourseInfo treeLocalCacheByTeacherOpenCourseId =
teacherOpenCourseMergeCourseInfoDao.getTreeLocalCacheByTeacherOpenCourseId(teacherOpenCourseId);
teacherOpenCourseMergeCourseInfoDao.getValueByTeacherOpenCourseId(teacherOpenCourseId);
if (ObjectUtil.isEmpty(treeLocalCacheByTeacherOpenCourseId)) {
return null;

Loading…
Cancel
Save