拷贝系统课程,重新分配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.concurrent.CopyOnWriteArrayList;
import java.util.stream.Collectors; 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.ArrayUtil.join;
import static cn.hutool.core.util.ObjectUtil.defaultIfNull; import static cn.hutool.core.util.ObjectUtil.defaultIfNull;
import static com.ibeetl.admin.core.util.ExcelUtil.getCellFormatValue; import static com.ibeetl.admin.core.util.ExcelUtil.getCellFormatValue;
@ -509,40 +508,33 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
* IDID * IDID
* *
* @param copyToList * @param copyToList
* @param parentId
* @param idPair
*/ */
public void batchUpdateArrayListSomeMergeId(List<TeacherOpenCourseMergeCourseInfo> copyToList, public Map<Long, Long> batchUpdateArrayListSomeMergeId(CopyOnWriteArrayList<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());
iterator.forEachRemaining(item -> { ConcurrentHashMap<Long, Long> idPair = new ConcurrentHashMap<>();
// 遍历所有节点
copyToList.stream().parallel().forEach(item -> {
// 先判断必要的条件不能为空才能继续进行下面的重置ID操作 // 先判断必要的条件不能为空才能继续进行下面的重置ID操作
Assert.notNull(item.getTeacherOpenCourseMergeCourseInfoId(), "开课课程ID不能为空"); Assert.notNull(item.getTeacherOpenCourseMergeCourseInfoId(), "开课课程ID不能为空");
Assert.notNull(item.getCourseInfoParentId(), "开课课程上级ID不能为空");
// 查找parentId对应关系 // 查找是否有子节点
List<TeacherOpenCourseMergeCourseInfo> filterMatchList = reference.stream() CopyOnWriteArrayList<TeacherOpenCourseMergeCourseInfo> filterMatchList = copyToList.stream()
.filter(ref -> ref.getCourseInfoParentId().equals(item.getTeacherOpenCourseMergeCourseInfoId())) .filter(ref -> item.getTeacherOpenCourseMergeCourseInfoId().equals(ref.getCourseInfoParentId()))
.collect(Collectors.toList()); .collect(Collectors.toCollection(CopyOnWriteArrayList::new));
Long newId = defaultIfNull(parentId, snowflake.nextId()); Long newId = snowflake.nextId();
item.setTeacherOpenCourseMergeCourseInfoId(newId);
// 存储ID对 // 存储ID对
idPair.put(item.getTeacherOpenCourseMergeCourseInfoId(), newId); idPair.put(item.getTeacherOpenCourseMergeCourseInfoId(), newId);
iterator.remove(); // 重置父节点的ID
batchUpdateArrayListSomeMergeId(filterMatchList, newId, idPair); 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 * @param teacherOpenCourseId ID
* @return * @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) { @NotNull(message = "开课ID不能为空") final Long teacherOpenCourseId) {
ConcurrentHashMap<Long, Long> idPair = new ConcurrentHashMap<>();
// 查询是否绑定过课程 // 查询是否绑定过课程
boolean notExists = teacherOpenCourseMergeCourseInfoDao.isNotExistsByTeacherOpenCourseId(teacherOpenCourseId); boolean notExists = teacherOpenCourseMergeCourseInfoDao.isNotExistsByTeacherOpenCourseId(teacherOpenCourseId);
@ -639,13 +632,14 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
item.setCourseInfoName(item.getCourseInfoName().replaceAll("&nbsp;", "")); item.setCourseInfoName(item.getCourseInfoName().replaceAll("&nbsp;", ""));
}); });
ConcurrentHashMap<Long, Long> idPair = new ConcurrentHashMap<>(); copyToList = new CopyOnWriteArrayList<>(copyToList);
// batchUpdateArrayListSomeMergeId(copyToList, null, idPair); idPair.putAll(batchUpdateArrayListSomeMergeId((CopyOnWriteArrayList)copyToList));
System.out.println(idPair);
// 批量插入 // 批量插入
teacherOpenCourseMergeCourseInfoDao.insertBatch(copyToList); teacherOpenCourseMergeCourseInfoDao.insertBatch(copyToList);
}); });
return idPair;
} }
/** /**
@ -661,7 +655,7 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
@NotNull(message = "开课ID不能为空") final Long teacherOpenCourseId) { @NotNull(message = "开课ID不能为空") final Long teacherOpenCourseId) {
// 拷贝课程章节 // 拷贝课程章节
copyFromCourseInfo(courseInfoIds, teacherOpenCourseId); Map<Long, Long> idPair = copyFromCourseInfo(courseInfoIds, teacherOpenCourseId);
// 开启并行处理 // 开启并行处理
courseInfoIds.stream().parallel().forEach(courseInfoId -> { courseInfoIds.stream().parallel().forEach(courseInfoId -> {
@ -683,7 +677,7 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
// 系统题目库ID集合 // 系统题目库ID集合
Set<Long> resourcesQuestionIds = resourcesQuestionList.stream().map(ResourcesQuestion::getResourcesQuestionId).collect(toSet()); Set<Long> resourcesQuestionIds = resourcesQuestionList.stream().map(ResourcesQuestion::getResourcesQuestionId).collect(toSet());
// 拷贝系统题目库到教师开课 // 拷贝系统题目库到教师开课
teacherOpenCourseMergeResourcesQuestionService.copyFromQuestion(resourcesQuestionIds, teacherOpenCourseId); teacherOpenCourseMergeResourcesQuestionService.copyFromQuestion(resourcesQuestionIds, teacherOpenCourseId, idPair);
ResourcesInfoQuery resourcesInfoQuery = new ResourcesInfoQuery(); ResourcesInfoQuery resourcesInfoQuery = new ResourcesInfoQuery();
resourcesInfoQuery.setCourseInfoIds(allCourseInfoIdsJoin); resourcesInfoQuery.setCourseInfoIds(allCourseInfoIdsJoin);
@ -692,7 +686,7 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
// 系统资源库ID集合 // 系统资源库ID集合
Set<Long> resourcesInfoIds = resourcesInfoList.stream().map(ResourcesInfo::getResourcesInfoId).collect(toSet()); 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) { public void deleteTeacherOpenCourseAllRelatedByTeacherOpenCourseId(Long teacherOpenCourseId) {
TeacherOpenCourseMergeCourseInfoQuery courseInfoQuery = new TeacherOpenCourseMergeCourseInfoQuery(); TeacherOpenCourseMergeCourseInfoQuery courseInfoQuery = new TeacherOpenCourseMergeCourseInfoQuery();
courseInfoQuery.setTeacherOpenCourseId(teacherOpenCourseId); courseInfoQuery.setTeacherOpenCourseId(teacherOpenCourseId);
List<TeacherOpenCourseMergeCourseInfo> values = getValuesByQuery(courseInfoQuery); List<TeacherOpenCourseMergeCourseInfo> values = getValuesByQueryNotWithPermission(courseInfoQuery);
// 根据ID删除数据 // 根据ID删除数据
Set<Long> delIdList = values.stream().map(TeacherOpenCourseMergeCourseInfo::getTeacherOpenCourseMergeCourseInfoId).collect(toSet()); 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 * @return
*/ */
public void copyFromResourcesInfo(Set<Long> resourcesInfoIds, 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; } if (ObjectUtil.isEmpty(resourcesInfoIds)) { return; }
ResourcesInfoQuery resourcesInfoQuery = new ResourcesInfoQuery(); ResourcesInfoQuery resourcesInfoQuery = new ResourcesInfoQuery();
@ -340,10 +342,24 @@ public class TeacherOpenCourseMergeResourcesInfoService extends CoreBaseService<
BeanUtil.copyToList(resourcesInfoList, TeacherOpenCourseMergeResourcesInfo.class, copyOptions); BeanUtil.copyToList(resourcesInfoList, TeacherOpenCourseMergeResourcesInfo.class, copyOptions);
copyToList.forEach(item -> item.setTeacherOpenCourseId(teacherOpenCourseId)); copyToList.forEach(item -> item.setTeacherOpenCourseId(teacherOpenCourseId));
resetNewId(copyToList, idPair);
// 批量插入资源和开课关联表 // 批量插入资源和开课关联表
insertBatch(copyToList); 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线 * ID线

@ -369,16 +369,17 @@ public class TeacherOpenCourseMergeResourcesQuestionService extends CoreBaseServ
/** /**
* resources_question * resources_question
* * <p>
* - * -
* *
* *
* @param resourcesQuestionIds * @param resourcesQuestionIds
* @param teacherOpenCourseId * @param teacherOpenCourseId
* @param idPair
* @return * @return
*/ */
public void copyFromQuestion(Set<Long> resourcesQuestionIds, 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; } if (ObjectUtil.isEmpty(resourcesQuestionIds)) { return; }
// 题目ID集合 // 题目ID集合
@ -395,10 +396,14 @@ public class TeacherOpenCourseMergeResourcesQuestionService extends CoreBaseServ
List<TeacherOpenCourseMergeResourcesQuestion> copyToList = List<TeacherOpenCourseMergeResourcesQuestion> copyToList =
BeanUtil.copyToList(resourcesQuestions, TeacherOpenCourseMergeResourcesQuestion.class, copyOptions); BeanUtil.copyToList(resourcesQuestions, TeacherOpenCourseMergeResourcesQuestion.class, copyOptions);
if (ObjectUtil.isEmpty(copyToList)) { return; } if (ObjectUtil.isEmpty(copyToList)) { return; }
// 设置开课ID // 设置开课ID
copyToList.forEach(item -> item.setTeacherOpenCourseId(teacherOpenCourseId)); copyToList.forEach(item -> item.setTeacherOpenCourseId(teacherOpenCourseId));
// 重置开课课程ID
resetNewId(copyToList, idPair);
// 批量插入 // 批量插入
teacherOpenCourseMergeResourcesQuestionDao.insertBatch(copyToList); teacherOpenCourseMergeResourcesQuestionDao.insertBatch(copyToList);
} }
@ -422,6 +427,18 @@ public class TeacherOpenCourseMergeResourcesQuestionService extends CoreBaseServ
resetOperationByTeacherOpenCourseId(teacherOpenCourseId); 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 * ID
* @param teacherOpenCourseId * @param teacherOpenCourseId

@ -413,7 +413,7 @@ public class TeacherOpenCourseMergeResourcesInfoController{
*/ */
@PostMapping(API + "/copyFromResourcesInfo.do") @PostMapping(API + "/copyFromResourcesInfo.do")
public JsonResult copyFromResourcesInfo(Long[] resourcesInfoIds, Long teacherOpenCourseId) { public JsonResult copyFromResourcesInfo(Long[] resourcesInfoIds, Long teacherOpenCourseId) {
teacherOpenCourseMergeResourcesInfoService.copyFromResourcesInfo(CollectionUtil.newHashSet(resourcesInfoIds), teacherOpenCourseId); teacherOpenCourseMergeResourcesInfoService.copyFromResourcesInfo(CollectionUtil.newHashSet(resourcesInfoIds), teacherOpenCourseId, null);
return JsonResult.success(); return JsonResult.success();
} }
} }

@ -429,7 +429,7 @@ public class TeacherOpenCourseMergeResourcesQuestionController{
*/ */
@PostMapping(API + "/copyFromQuestion.do") @PostMapping(API + "/copyFromQuestion.do")
public JsonResult copyFromQuestion(Long[] resourcesQuestionIds, Long teacherOpenCourseId) { public JsonResult copyFromQuestion(Long[] resourcesQuestionIds, Long teacherOpenCourseId) {
teacherOpenCourseMergeResourcesQuestionService.copyFromQuestion(CollectionUtil.newHashSet(resourcesQuestionIds), teacherOpenCourseId); teacherOpenCourseMergeResourcesQuestionService.copyFromQuestion(CollectionUtil.newHashSet(resourcesQuestionIds), teacherOpenCourseId, null);
return JsonResult.success(); return JsonResult.success();
} }

Loading…
Cancel
Save