package com.iformall.schedule; import com.iformall.domain.po.sm.UserMouldVideo; import com.iformall.domain.po.sm.VideoTrans; import com.iformall.enums.EnumVideoStatus; import com.iformall.enums.EnumaVideoTransStatus; import com.iformall.mapper.VideoTransMapper; import com.iformall.service.sm.UserMouldVideoService; import com.iformall.utils.DateUtils; import com.iformall.video.VideoFactory; import com.iformall.video.entity.VideTransResult; import com.iformall.video.entity.VideUploadResult; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import java.util.Date; import java.util.List; import java.util.concurrent.Future; @Configuration @EnableScheduling public class VideoSchedule { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private UserMouldVideoService userMouldVideoService; @Autowired private VideoTransMapper videoTransMapper; @Autowired VideoFactory videoFactory; @Autowired String videoType; /** * 生成视频 */ @Scheduled(cron = "0 20/30 * * * *?") // 每半小时检查一次 public void userVideoCreateSchedule() { UserMouldVideo userVideo = new UserMouldVideo(); userVideo.setVideoStartDate(DateUtils.getHourDateBefore(2,new Date())); userVideo.setVideoStatus(EnumVideoStatus.fail.getCode()); List list = userMouldVideoService.findList(userVideo); if (list != null && list.size() > 0) { for (UserMouldVideo video : list) { try { Future future = userMouldVideoService.createVideo(video); future.get(); } catch (Exception e) { logger.error("TtCouponVideoSchedule error.couponVideoSchedule:"+video.getId(),e); } } } } /** * 上传阿里云 */ @Scheduled(cron = "0 */30 * * * *?") // 每半小时检查一次 public void userVideoUploadSchedule() { List videos = userMouldVideoService.getNotUploadList(); if (videos != null && videos.size() > 0) { for (UserMouldVideo video : videos) { try { userMouldVideoService.uploadVideo(video); } catch (Exception e) { logger.error("TtCouponVideoSchedule error.couponVideoSchedule:"+video.getId(),e); } } } } /** * 获取时长和大小 */ @Scheduled(cron = "0 1/5 * * * *?") // 每五分钟检查一次 public void userVideoDetailSchedule() { List videos = userMouldVideoService.getNotHaveUrl(); if (videos != null && videos.size() > 0) { for (UserMouldVideo video : videos) { try { VideUploadResult videoDetail = videoFactory.getExcutor(videoType).getVideoDetailWithCache(video.getVideoId(),false); if (videoDetail.isSuccess() && StringUtils.isNotBlank(videoDetail.getDuration()) && !"0.0".equals(videoDetail.getDuration())) { video.setCoverImg(videoDetail.getCoverURL()); video.setVideoPlayUrl(videoDetail.getVideoUrl()); video.setVideoTime(videoDetail.getDuration()); video.setVideoSize(videoDetail.getSize()); video.setVideoStatus(EnumVideoStatus.upload_success.getCode()); userMouldVideoService.updateById(video); } } catch (Exception e) { logger.error("TtCouponVideoSchedule error.couponVideoSchedule:"+video.getId(),e); } } } } /** * 转码 */ @Scheduled(cron = "0 10/30 * * * *?") // 每半小时检查一次 public void videoTransSchedule() { VideoTrans videoTransQ = new VideoTrans(); videoTransQ.setStatus(EnumaVideoTransStatus.draft.getCode()); List videos = videoTransMapper.findList(videoTransQ); if (videos != null && videos.size() > 0) { for (VideoTrans video : videos) { try { VideTransResult videTransResult = videoFactory.getExcutor(videoType).transVideo(video.getVideoId(), video.getTransTemplateId()); if(videTransResult.isSuccess()){ VideoTrans upd = new VideoTrans(); upd.setId(video.getId()); upd.setTaskId(videTransResult.getTaskId()); upd.setStatus(EnumaVideoTransStatus.ing.getCode()); upd.setMsg("ing"); upd.setUpdateDate(new Date()); videoTransMapper.updateById(upd); } } catch (Exception e) { logger.error("TtCouponVideoSchedule error.couponVideoSchedule:"+video.getId(),e); } } } } /** * 转码结果 */ @Scheduled(cron = "0 20/30 * * * *?") // 每半小时检查一次 public void videoTransResultSchedule() { VideoTrans videoTransQ = new VideoTrans(); videoTransQ.setStatus(EnumaVideoTransStatus.ing.getCode()); List videos = videoTransMapper.findList(videoTransQ); if (videos != null && videos.size() > 0) { for (VideoTrans video : videos) { try { VideTransResult transVideoResult = videoFactory.getExcutor(videoType).getTransVideoResult(video.getVideoId(), video.getTaskId()); VideoTrans upd = new VideoTrans(); upd.setId(video.getId()); if (transVideoResult.isSuccess()){ upd.setStatus(EnumaVideoTransStatus.success.getCode()); upd.setMsg("success"); }else{ upd.setStatus(EnumaVideoTransStatus.fail.getCode()); upd.setMsg(transVideoResult.getMsg()); } upd.setUpdateDate(new Date()); videoTransMapper.updateById(upd); } catch (Exception e) { logger.error("TtCouponVideoSchedule error.couponVideoSchedule:"+video.getId(),e); } } } } }