|
|
@@ -11,7 +11,9 @@ import nju.seec.helper.entity.Course;
|
|
|
import nju.seec.helper.entity.Page;
|
|
|
import nju.seec.helper.entity.Slide;
|
|
|
import nju.seec.helper.service.SlideService;
|
|
|
-import nju.seec.helper.util.OssUtils;
|
|
|
+import nju.seec.helper.util.CacheUtils;
|
|
|
+import nju.seec.helper.util.Consts;
|
|
|
+import nju.seec.helper.util.FileUtils;
|
|
|
import nju.seec.helper.util.enums.SlideState;
|
|
|
import nju.seec.helper.util.exception.HelperException;
|
|
|
import nju.seec.helper.vo.SlideVO;
|
|
|
@@ -21,8 +23,10 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
import java.util.List;
|
|
|
import java.util.Objects;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
import java.util.stream.Collectors;
|
|
|
import java.util.stream.IntStream;
|
|
|
|
|
|
@@ -31,17 +35,21 @@ import java.util.stream.IntStream;
|
|
|
*/
|
|
|
@Service
|
|
|
public class SlideServiceImpl implements SlideService {
|
|
|
+ private static final long SLIDE_URL_LIVING_SECONDS = 20 * 60;
|
|
|
+
|
|
|
private final CourseDAO courseDAO;
|
|
|
private final SlideDAO slideDAO;
|
|
|
private final ChooseDAO chooseDAO;
|
|
|
|
|
|
- private final OssUtils ossUtils;
|
|
|
+ private final FileUtils fileUtils;
|
|
|
+ private final CacheUtils cacheUtils;
|
|
|
|
|
|
- public SlideServiceImpl(CourseDAO courseDAO, SlideDAO slideDAO, ChooseDAO chooseDAO, OssUtils ossUtils) {
|
|
|
+ public SlideServiceImpl(CourseDAO courseDAO, SlideDAO slideDAO, ChooseDAO chooseDAO, FileUtils fileUtils, CacheUtils cacheUtils) {
|
|
|
this.courseDAO = courseDAO;
|
|
|
this.slideDAO = slideDAO;
|
|
|
this.chooseDAO = chooseDAO;
|
|
|
- this.ossUtils = ossUtils;
|
|
|
+ this.fileUtils = fileUtils;
|
|
|
+ this.cacheUtils = cacheUtils;
|
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@@ -75,7 +83,6 @@ public class SlideServiceImpl implements SlideService {
|
|
|
slide.setPages(IntStream.rangeClosed(1, pageNum)
|
|
|
.mapToObj(number -> {
|
|
|
Page page = new Page();
|
|
|
-// page.setSlide(slide);
|
|
|
page.setTeacherId(teacher.getId());
|
|
|
page.setNumber(number);
|
|
|
return page;
|
|
|
@@ -84,7 +91,7 @@ public class SlideServiceImpl implements SlideService {
|
|
|
);
|
|
|
|
|
|
// 上传文件
|
|
|
- String objectName = ossUtils.upload(file.getOriginalFilename(), file.getInputStream());
|
|
|
+ String objectName = fileUtils.upload(LocalDateTime.now().toString() + "-" + file.getOriginalFilename(), file.getInputStream());
|
|
|
slide.setObjectName(objectName);
|
|
|
|
|
|
return new SlideVO(slideDAO.save(slide));
|
|
|
@@ -118,8 +125,17 @@ public class SlideServiceImpl implements SlideService {
|
|
|
@Override
|
|
|
public String getSlideUrl(LoginUser user, Integer slideId) {
|
|
|
checkDataAccessAuth(user, slideId);
|
|
|
+
|
|
|
Slide slide = slideDAO.findSlideById(slideId);
|
|
|
- return ossUtils.getUrl(slide.getObjectName());
|
|
|
+ String url = cacheUtils.get(Consts.SLIDE_URL_CACHE_NAME, slide.getObjectName());
|
|
|
+
|
|
|
+ if (url != null) {
|
|
|
+ return url;
|
|
|
+ }
|
|
|
+
|
|
|
+ url = fileUtils.getUrl(slide.getObjectName(), SLIDE_URL_LIVING_SECONDS);
|
|
|
+ cacheUtils.set(Consts.SLIDE_URL_CACHE_NAME, slide.getObjectName(), url, SLIDE_URL_LIVING_SECONDS, TimeUnit.SECONDS);
|
|
|
+ return url;
|
|
|
}
|
|
|
|
|
|
private void checkDataAccessAuth(LoginUser user, Integer slideId) {
|