|
|
@@ -1,19 +1,17 @@
|
|
|
package nju.seec.helper.logic.service.impl;
|
|
|
|
|
|
+import nju.seec.helper.data.dao.CourseDAO;
|
|
|
import nju.seec.helper.data.dao.SlideDAO;
|
|
|
import nju.seec.helper.data.entity.Course;
|
|
|
+import nju.seec.helper.data.entity.Item;
|
|
|
import nju.seec.helper.data.entity.Slide;
|
|
|
-import nju.seec.helper.logic.convert.DTOConvertFactory;
|
|
|
-import nju.seec.helper.logic.convert.EntityConvertFactory;
|
|
|
-import nju.seec.helper.logic.service.CourseService;
|
|
|
import nju.seec.helper.logic.service.SlideService;
|
|
|
+import nju.seec.helper.logic.vo.ItemVO;
|
|
|
import nju.seec.helper.logic.vo.SlideVO;
|
|
|
+import nju.seec.helper.util.enums.SlideState;
|
|
|
import nju.seec.helper.util.exception.HelperException;
|
|
|
import nju.seec.helper.web.dto.SlideDTO;
|
|
|
-import org.springframework.cache.annotation.CacheConfig;
|
|
|
-import org.springframework.cache.annotation.CacheEvict;
|
|
|
-import org.springframework.cache.annotation.CachePut;
|
|
|
-import org.springframework.cache.annotation.Cacheable;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.data.domain.Page;
|
|
|
import org.springframework.data.domain.Pageable;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
@@ -26,15 +24,13 @@ import java.util.stream.Collectors;
|
|
|
* @author cst
|
|
|
*/
|
|
|
@Service
|
|
|
-@CacheConfig(cacheNames = "slide")
|
|
|
public class SlideServiceImpl implements SlideService {
|
|
|
private final SlideDAO slideDAO;
|
|
|
+ private final CourseDAO courseDAO;
|
|
|
|
|
|
- private final CourseService courseService;
|
|
|
-
|
|
|
- public SlideServiceImpl(SlideDAO slideDAO, CourseService courseService) {
|
|
|
+ public SlideServiceImpl(SlideDAO slideDAO, CourseDAO courseDAO) {
|
|
|
this.slideDAO = slideDAO;
|
|
|
- this.courseService = courseService;
|
|
|
+ this.courseDAO = courseDAO;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -42,7 +38,7 @@ public class SlideServiceImpl implements SlideService {
|
|
|
Page<Slide> slidePage = slideDAO.findByCourseIdAndNameContains(courseId, key, pageable);
|
|
|
|
|
|
return slidePage.getContent().stream()
|
|
|
- .map(slide -> EntityConvertFactory.convert(slide, SlideVO.class))
|
|
|
+ .map(this::copySlideToSlideVO)
|
|
|
.collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
@@ -51,15 +47,14 @@ public class SlideServiceImpl implements SlideService {
|
|
|
Page<Slide> slidePage = slideDAO.findByNameContains(key, pageable);
|
|
|
|
|
|
return slidePage.getContent().stream()
|
|
|
- .map(slide -> EntityConvertFactory.convert(slide, SlideVO.class))
|
|
|
+ .map(this::copySlideToSlideVO)
|
|
|
.collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
- @Cacheable(key = "#slideId")
|
|
|
@Override
|
|
|
public SlideVO getOneSlide(int slideId) {
|
|
|
- Slide slide = findSlideById(slideId);
|
|
|
- return EntityConvertFactory.convert(slide, SlideVO.class);
|
|
|
+ Slide slide = slideDAO.findSlideById(slideId);
|
|
|
+ return this.copySlideToSlideVO(slide);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -67,32 +62,61 @@ public class SlideServiceImpl implements SlideService {
|
|
|
if (slideDAO.existsByName(slideDTO.getName())) {
|
|
|
throw HelperException.of(HelperException.ExceptionType.CONFLICT, "该幻灯片已存在");
|
|
|
}
|
|
|
- Slide slide = DTOConvertFactory.convert(slideDTO);
|
|
|
- Course course = courseService.findCourseById(slideDTO.getCourseId());
|
|
|
+ Slide slide = new Slide();
|
|
|
+ this.copySlideDTOToSlide(slideDTO, slide);
|
|
|
+ Course course = courseDAO.findCourseById(slideDTO.getCourseId());
|
|
|
slide.setCourseId(course.getId());
|
|
|
slide.setCourseName(course.getName());
|
|
|
slide.setItems(Collections.emptyList());
|
|
|
slide = slideDAO.save(slide);
|
|
|
- return EntityConvertFactory.convert(slide, SlideVO.class);
|
|
|
+ return this.copySlideToSlideVO(slide);
|
|
|
}
|
|
|
|
|
|
- @CachePut(key = "#slideDTO.id")
|
|
|
@Override
|
|
|
public SlideVO update(SlideDTO slideDTO) {
|
|
|
- Slide slide = DTOConvertFactory.convert(slideDTO);
|
|
|
- slideDAO.save(slide);
|
|
|
- return EntityConvertFactory.convert(findSlideById(slideDTO.getId()), SlideVO.class);
|
|
|
+ Slide slide = slideDAO.findSlideById(slideDTO.getId());
|
|
|
+ this.copySlideDTOToSlide(slideDTO, slide);
|
|
|
+ slide = slideDAO.save(slide);
|
|
|
+ return this.copySlideToSlideVO(slide);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public SlideVO updateState(int slideId, SlideState state) {
|
|
|
+ Slide slide = slideDAO.findSlideById(slideId);
|
|
|
+ slide.setState(state);
|
|
|
+ slide = slideDAO.save(slide);
|
|
|
+ return this.copySlideToSlideVO(slide);
|
|
|
}
|
|
|
|
|
|
- @CacheEvict(key = "#slideId")
|
|
|
@Override
|
|
|
public void delete(int slideId) {
|
|
|
slideDAO.deleteById(slideId);
|
|
|
}
|
|
|
|
|
|
- private Slide findSlideById(int slideId) {
|
|
|
- return slideDAO.findById(slideId).orElseThrow(() -> HelperException.of(
|
|
|
- HelperException.ExceptionType.NOT_FOUND, "找不到幻灯片")
|
|
|
+
|
|
|
+ private SlideVO copySlideToSlideVO(Slide slide) {
|
|
|
+ SlideVO slideVO = new SlideVO();
|
|
|
+ BeanUtils.copyProperties(slide, slideVO, "items");
|
|
|
+ slideVO.setItems(slide.getItems().stream()
|
|
|
+ .map(this::copyItemToItemVO)
|
|
|
+ .collect(Collectors.toList())
|
|
|
);
|
|
|
+ return slideVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ private ItemVO copyItemToItemVO(Item item) {
|
|
|
+ ItemVO itemVO = new ItemVO();
|
|
|
+ BeanUtils.copyProperties(item, itemVO);
|
|
|
+ return itemVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void copySlideDTOToSlide(SlideDTO slideDTO, Slide slide) {
|
|
|
+ BeanUtils.copyProperties(slideDTO, slide, "courseId", "courseName", "createTime", "updateTime", "items");
|
|
|
+ slide.setItems(slideDTO.getItems().stream()
|
|
|
+ .map(itemDTO -> {
|
|
|
+ Item item = new Item();
|
|
|
+ BeanUtils.copyProperties(itemDTO, item);
|
|
|
+ return item;
|
|
|
+ }).collect(Collectors.toList()));
|
|
|
}
|
|
|
}
|