|
|
|
@ -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.collection.CollectionUtil;
|
|
|
|
|
import cn.hutool.core.lang.Assert;
|
|
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
|
|
import cn.hutool.core.stream.CollectorUtil;
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
|
@ -10,6 +11,7 @@ import cn.hutool.extra.spring.SpringUtil;
|
|
|
|
|
import cn.jlw.util.ToolUtils;
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
import com.google.common.base.Optional;
|
|
|
|
|
import com.google.common.cache.CacheLoader;
|
|
|
|
|
import com.google.common.cache.LoadingCache;
|
|
|
|
|
import com.ibeetl.admin.core.entity.CoreUser;
|
|
|
|
@ -88,12 +90,12 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
|
|
|
|
|
/**
|
|
|
|
|
* 针对 {@link #getTreeLocalCacheByTeacherOpenCourseId} 的缓存
|
|
|
|
|
*/
|
|
|
|
|
private final LoadingCache<Long, TeacherOpenCourseMergeCourseInfoTree> treeLocalCache
|
|
|
|
|
private final LoadingCache<Long, Optional<TeacherOpenCourseMergeCourseInfoTree>> treeLocalCache
|
|
|
|
|
= CacheUtils.buildAsyncReloadingCache(Duration.ofHours(1L), // 过期时间 1 小时
|
|
|
|
|
new CacheLoader<Long, TeacherOpenCourseMergeCourseInfoTree>() {
|
|
|
|
|
new CacheLoader<Long, Optional<TeacherOpenCourseMergeCourseInfoTree>>() {
|
|
|
|
|
@Override
|
|
|
|
|
public TeacherOpenCourseMergeCourseInfoTree load(Long teacherOpenCourseId) {
|
|
|
|
|
return teacherOpenCourseMergeCourseInfoDao.getValueByTeacherOpenCourseId(teacherOpenCourseId);
|
|
|
|
|
public Optional<TeacherOpenCourseMergeCourseInfoTree> load(Long teacherOpenCourseId) {
|
|
|
|
|
return Optional.fromNullable(teacherOpenCourseMergeCourseInfoDao.getValueByTeacherOpenCourseId(teacherOpenCourseId));
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
@ -468,6 +470,11 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
|
|
|
|
|
public void copyFromCourseInfo(@NotEmpty(message = "系统课程ID不能为空!") Set<Long> courseInfoIds,
|
|
|
|
|
@NotNull(message = "开课ID不能为空!") final Long teacherOpenCourseId) {
|
|
|
|
|
|
|
|
|
|
// 查询是否绑定过课程
|
|
|
|
|
boolean notExists = teacherOpenCourseMergeCourseInfoDao.isNotExistsByTeacherOpenCourseId(teacherOpenCourseId);
|
|
|
|
|
|
|
|
|
|
Assert.isTrue(notExists, "已绑定过课程,请先重置!");
|
|
|
|
|
|
|
|
|
|
// 开启并行处理
|
|
|
|
|
courseInfoIds.stream().parallel().forEach(courseInfoId -> {
|
|
|
|
|
// 当前的课程信息
|
|
|
|
@ -557,6 +564,8 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
|
|
|
|
|
Map<String, DeleteResourcesBy> beansOfType = SpringUtil.getBeansOfType(DeleteResourcesBy.class);
|
|
|
|
|
// 调用子类实现
|
|
|
|
|
beansOfType.forEach((beanName, bean) -> bean.deleteByTeacherOpenCourseId(teacherOpenCourseId));
|
|
|
|
|
// 清理缓存
|
|
|
|
|
invalidateAllCleanUpCourseInfoTreeLocalCache();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -581,7 +590,7 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
|
|
|
|
|
*/
|
|
|
|
|
public TeacherOpenCourseMergeCourseInfoTree getTreeLocalCacheByTeacherOpenCourseId(
|
|
|
|
|
@NotNull(message = "开课ID不能为空!") final Long teacherOpenCourseId) {
|
|
|
|
|
return treeLocalCache.getUnchecked(teacherOpenCourseId);
|
|
|
|
|
return treeLocalCache.getUnchecked(teacherOpenCourseId).orNull();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|