package com.gkhy.exam.institutionalaccess.service.serviceImpl; import com.gkhy.exam.institutionalaccess.entity.ThCourse; import com.gkhy.exam.institutionalaccess.entity.ThCourseChapter; import com.gkhy.exam.institutionalaccess.model.query.ThCourseQuery; import com.gkhy.exam.institutionalaccess.model.resp.ThCourseChapterRespDTO; import com.gkhy.exam.institutionalaccess.model.resp.ThCourseRespDTO; import com.gkhy.exam.institutionalaccess.model.vo.ThCourseChapterVO; import com.gkhy.exam.institutionalaccess.model.vo.ThStatisticStudentVO; import com.gkhy.exam.institutionalaccess.service.*; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @Service("ThCourseManagerService") public class ThCourseManagerServiceImpl implements ThCourseManagerService { @Autowired private ThCourseService courseService; @Autowired private ThCourseChapterService courseChapterService; @Autowired private ThStudentCourseService studentCourseService; @Override public List listByPage(ThCourseQuery query) { List courseList = courseService.listByPage(query); //分许获取数据 List thStatisticStudentVOS = studentCourseService.statisticByCourseUuid(); List courseRespDTOList = new ArrayList<>(); if(!CollectionUtils.isEmpty(courseList)){ //根据courseids获取所有章节 List courseChapterVOS = new ArrayList<>(); List courseUuids = courseList.stream().map(ThCourse::getUuid).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(courseUuids)){ courseChapterVOS = courseChapterService.listByCourseUuids(courseUuids); } for (ThCourse course : courseList) { ThCourseRespDTO courseRespDTO = new ThCourseRespDTO(); BeanUtils.copyProperties(course, courseRespDTO); //获取章 List finalCourseChapterVOS = courseChapterVOS; List chapterList = courseChapterVOS .stream() .filter(cc -> course.getUuid().equals(cc.getCourseUuid()) && cc.getParentUuid().equals("0")) .map(cc -> { ThCourseChapterRespDTO courseChapterRespDTO = new ThCourseChapterRespDTO(); BeanUtils.copyProperties(cc, courseChapterRespDTO); courseChapterRespDTO.setChildren(getChildren(finalCourseChapterVOS,cc.getUuid())); return courseChapterRespDTO; }) .collect(Collectors.toList()); courseRespDTO.setOutline(chapterList); //学员数量 List statisticList = thStatisticStudentVOS.stream().filter(s -> s.getCourseUuid().equals(course.getUuid())).collect(Collectors.toList()); if(statisticList.size()>0){ ThStatisticStudentVO thStatisticStudentVO = statisticList.get(0); courseRespDTO.setStudentCount(thStatisticStudentVO.getCount()); }else { courseRespDTO.setStudentCount(0); } courseRespDTOList.add(courseRespDTO); } } return courseRespDTOList; } //获取单条课程 @Override public ThCourseRespDTO findById(Long id) { ThCourse thCourse = courseService.getById(id); ThCourseRespDTO thCourseRespDTO = new ThCourseRespDTO(); BeanUtils.copyProperties(thCourse, thCourseRespDTO); List thCourseChapterVOS = courseChapterService.listByCourseUuid(thCourse.getUuid()); List chapterRespDTOS = thCourseChapterVOS.stream() .filter(c -> c.getParentUuid().equals("0")) .map(c -> { ThCourseChapterRespDTO chapterRespDTO = new ThCourseChapterRespDTO(); BeanUtils.copyProperties(c, chapterRespDTO); chapterRespDTO.setChildren(getChildren(thCourseChapterVOS,c.getUuid())); return chapterRespDTO; }).collect(Collectors.toList()); thCourseRespDTO.setOutline(chapterRespDTOS); return thCourseRespDTO; } //获取章节 private List getChildren(List courseChapterVOS, String parentUuid) { List chapterList = courseChapterVOS .stream() .filter(cc -> cc.getParentUuid().equals(parentUuid)) .map(cc -> { ThCourseChapterRespDTO courseChapterRespDTO = new ThCourseChapterRespDTO(); BeanUtils.copyProperties(cc, courseChapterRespDTO); return courseChapterRespDTO; }) .collect(Collectors.toList()); return chapterList; } }