拷贝系统课程,重新分配ID和父辈ID。好支持一个系统课程,可以分配给多个教师

beetlsql3-dev
Mlxa0324 2 years ago
parent ee47fe1dd0
commit c7951163fe

@ -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<Tea
* IDID
*
* @param copyToList
* @param parentId
* @param 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().filter(e -> e.getCourseInfoParentId() != null)
.collect(Collectors.toList());
public Map<Long, Long> batchUpdateArrayListSomeMergeId(CopyOnWriteArrayList<TeacherOpenCourseMergeCourseInfo> copyToList) {
iterator.forEachRemaining(item -> {
ConcurrentHashMap<Long, Long> idPair = new ConcurrentHashMap<>();
// 遍历所有节点
copyToList.stream().parallel().forEach(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());
// 查找是否有子节点
CopyOnWriteArrayList<TeacherOpenCourseMergeCourseInfo> 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<Tea
* @param teacherOpenCourseId ID
* @return
*/
public void copyFromCourseInfo(@NotEmpty(message = "系统课程ID不能为空") Set<Long> courseInfoIds,
public Map<Long, Long> copyFromCourseInfo(@NotEmpty(message = "系统课程ID不能为空") Set<Long> courseInfoIds,
@NotNull(message = "开课ID不能为空") final Long teacherOpenCourseId) {
ConcurrentHashMap<Long, Long> idPair = new ConcurrentHashMap<>();
// 查询是否绑定过课程
boolean notExists = teacherOpenCourseMergeCourseInfoDao.isNotExistsByTeacherOpenCourseId(teacherOpenCourseId);
@ -639,13 +632,14 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
item.setCourseInfoName(item.getCourseInfoName().replaceAll("&nbsp;", ""));
});
ConcurrentHashMap<Long, Long> 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<Tea
@NotNull(message = "开课ID不能为空") final Long teacherOpenCourseId) {
// 拷贝课程章节
copyFromCourseInfo(courseInfoIds, teacherOpenCourseId);
Map<Long, Long> idPair = copyFromCourseInfo(courseInfoIds, teacherOpenCourseId);
// 开启并行处理
courseInfoIds.stream().parallel().forEach(courseInfoId -> {
@ -683,7 +677,7 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
// 系统题目库ID集合
Set<Long> 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<Tea
// 系统资源库ID集合
Set<Long> 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<Tea
public void deleteTeacherOpenCourseAllRelatedByTeacherOpenCourseId(Long teacherOpenCourseId) {
TeacherOpenCourseMergeCourseInfoQuery courseInfoQuery = new TeacherOpenCourseMergeCourseInfoQuery();
courseInfoQuery.setTeacherOpenCourseId(teacherOpenCourseId);
List<TeacherOpenCourseMergeCourseInfo> values = getValuesByQuery(courseInfoQuery);
List<TeacherOpenCourseMergeCourseInfo> values = getValuesByQueryNotWithPermission(courseInfoQuery);
// 根据ID删除数据
Set<Long> delIdList = values.stream().map(TeacherOpenCourseMergeCourseInfo::getTeacherOpenCourseMergeCourseInfoId).collect(toSet());

@ -319,14 +319,16 @@ public class TeacherOpenCourseMergeResourcesInfoService extends CoreBaseService<
/**
* -
*
* <p>
*
* @param resourcesInfoIds ID
* @param teacherOpenCourseId ID
*
* @param resourcesInfoIds ID
* @param teacherOpenCourseId ID
* @param idPair
* @return
*/
public void copyFromResourcesInfo(Set<Long> resourcesInfoIds,
@NotNull(message = "开课ID不能为空") final Long teacherOpenCourseId) {
@NotNull(message = "开课ID不能为空") final Long teacherOpenCourseId, Map<Long, Long> 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<TeacherOpenCourseMergeResourcesInfo> copyToList, Map<Long, Long> idPair) {
if (ObjectUtil.isEmpty(idPair)) {return;}
copyToList.forEach(item -> {
item.setTeacherOpenCourseMergeCourseInfoId(idPair.get(item.getTeacherOpenCourseMergeCourseInfoId()));
});
}
/**
* -
* ID线

@ -369,16 +369,17 @@ public class TeacherOpenCourseMergeResourcesQuestionService extends CoreBaseServ
/**
* resources_question
*
* <p>
* -
*
*
* @param resourcesQuestionIds
* @param teacherOpenCourseId
* @param idPair
* @return
*/
public void copyFromQuestion(Set<Long> resourcesQuestionIds,
@NotNull(message = "开课ID不能为空") Long teacherOpenCourseId) {
@NotNull(message = "开课ID不能为空") Long teacherOpenCourseId, Map<Long, Long> idPair) {
if (ObjectUtil.isEmpty(resourcesQuestionIds)) { return; }
// 题目ID集合
@ -395,10 +396,14 @@ public class TeacherOpenCourseMergeResourcesQuestionService extends CoreBaseServ
List<TeacherOpenCourseMergeResourcesQuestion> 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<TeacherOpenCourseMergeResourcesQuestion> copyToList, Map<Long, Long> idPair) {
if (ObjectUtil.isEmpty(idPair)) {return;}
copyToList.forEach(item -> {
item.setTeacherOpenCourseMergeCourseInfoId(idPair.get(item.getTeacherOpenCourseMergeCourseInfoId()));
});
}
/**
* ID
* @param teacherOpenCourseId

@ -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();
}
}

@ -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();
}

Loading…
Cancel
Save