|
package com.qxueyou.scc.teach.res.service.impl.resitem;
|
|
import java.util.Date;
|
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Service;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.qxueyou.scc.base.model.Result;
|
import com.qxueyou.scc.base.service.ICacheService;
|
import com.qxueyou.scc.base.service.impl.CommonAppService;
|
import com.qxueyou.scc.base.util.CollectionUtils;
|
import com.qxueyou.scc.base.util.TraceUtils;
|
import com.qxueyou.scc.media.model.MediaVideo;
|
import com.qxueyou.scc.media.model.VideoConverTask;
|
import com.qxueyou.scc.teach.res.model.Res;
|
import com.qxueyou.scc.teach.res.model.ResFile;
|
import com.qxueyou.scc.teach.res.model.ResItemAudio;
|
import com.qxueyou.scc.teach.res.model.ResItemVideo;
|
import com.qxueyou.scc.teach.res.service.IFileService;
|
import com.qxueyou.scc.teach.res.service.IResItemService;
|
import com.qxueyou.scc.teach.res.service.impl.ResService;
|
|
@Service(value = "ResItemVideoService")
|
public class ResItemVideoService extends CommonAppService implements IResItemService {
|
|
public static final String RES_VIDEO_CONVER_LST = "RES_VIDEO_CONVER_LST";
|
|
@Autowired
|
IFileService fileService;
|
|
@Autowired
|
ICacheService cacheService;
|
|
@Override
|
public String add(String fileId, String name) {
|
|
ResFile file = fileService.read(fileId);
|
String mediaVideoId = addVideoConverTask(file);
|
|
ResItemVideo resVideo = new ResItemVideo();
|
|
TraceUtils.setCreateTrace(resVideo);
|
|
resVideo.setFileId(fileId);
|
resVideo.setName(name);
|
resVideo.setMediaVideoId(mediaVideoId);
|
resVideo.setStatus(ResItemVideo.STATUS_LINEUP);
|
save(resVideo);
|
|
// ½«mediaVideoId·Å½ø»º´æ
|
cacheService.lstRightPush(RES_VIDEO_CONVER_LST, mediaVideoId);
|
|
return resVideo.getVideoId();
|
}
|
|
private String addVideoConverTask(ResFile file) {
|
|
MediaVideo video = insertMediaVideo(file);
|
insertMediaVideoConverTask(video);
|
|
return video.getVideoId();
|
|
}
|
|
private MediaVideo insertMediaVideo(ResFile file) {
|
|
MediaVideo video = new MediaVideo();
|
|
TraceUtils.setCreateTrace(video);
|
|
video.setDeleteFlag(false);
|
video.setName(file.getFileName());
|
video.setOrigUrl(file.getPath());
|
video.setStatus(MediaVideo.STATUS_LINEUP);
|
video.setType(MediaVideo.MEDIA_VIDEO);
|
|
save(video);
|
|
return video;
|
}
|
|
private Result insertMediaVideoConverTask(MediaVideo resVideo) {
|
|
VideoConverTask task = new VideoConverTask();
|
|
task.setCreateTime(new Date());
|
task.setDeleteFlag(false);
|
task.setVideoId(resVideo.getVideoId());
|
task.setVideoUrl(resVideo.getOrigUrl());
|
task.setType(MediaVideo.MEDIA_VIDEO);
|
task.setPriority(5);
|
|
save(task);
|
|
return new Result(true);
|
}
|
|
@Override
|
public Result update(String id, String name) {
|
|
ResItemVideo video = read(ResItemVideo.class, id);
|
|
TraceUtils.setUpdateTrace(video);
|
|
video.setName(name);
|
|
save(video);
|
|
return new Result(true, "success");
|
}
|
|
@Override
|
public String readAccessPath(String resId, String attribute) {
|
|
ResItemVideo resItemVideo = read(ResItemVideo.class, resId);
|
|
if (resItemVideo != null && resItemVideo.getStatus() != ResItemVideo.STATUS_DRAFT) {
|
ResFile resFile = read(ResFile.class,resItemVideo.getFileId());
|
return resFile.getPath();
|
// return null;
|
}
|
|
MediaVideo video = read(MediaVideo.class, resItemVideo.getMediaVideoId());
|
|
if (video == null) {
|
return null;
|
}
|
|
return JSONObject.toJSONString(CollectionUtils.newObjectMap("hd",video.getAndroidHD(), "sd", video.getAndroidSD(), "ld", video.getAndroidLD(), "path",StringUtils.isNotEmpty(video.getAndroidHD()) ? video.getAndroidHD()
|
: StringUtils.isNotEmpty(video.getAndroidSD()) ? video.getAndroidSD() : video.getAndroidLD()));
|
|
}
|
|
@Override
|
public String getResItemType() {
|
return Res.FILE_TYPE_VIDEO;
|
}
|
|
/**
|
* ¶¨Ê±Æ÷תÂë³É¹¦ºó ͬ²½¸üÐÂResItemVideoµÄ״̬
|
*/
|
@Scheduled(cron = "0/2 * * * * ?") // ÿ2ÃëÖ´ÐÐÒ»´Î
|
public void doTimer() {
|
|
String mediaVideoId = cacheService.lstLeftPop(RES_VIDEO_CONVER_LST);
|
|
if (StringUtils.isBlank(mediaVideoId)) {
|
return;
|
}
|
|
MediaVideo mediaVideo = read(MediaVideo.class, mediaVideoId);
|
if (mediaVideo.getStatus() == MediaVideo.STATUS_DRAFT) {
|
if (mediaVideo.getType().equals("video")) {
|
ResItemVideo resItemVideo = findUnique(
|
"from ResItemVideo where deleteFlag is false and mediaVideoId = ?",
|
CollectionUtils.newList(mediaVideoId), ResItemVideo.class);
|
resItemVideo.setStatus(ResItemVideo.STATUS_DRAFT);
|
TraceUtils.setUpdateTrace(resItemVideo);
|
resItemVideo.setVideoSeconds(mediaVideo.getPlayTime());
|
save(resItemVideo);
|
|
cacheService.lstRightPush(ResService.RES_TOUPDATE_CONVER_STATUS_LST, resItemVideo.getVideoId());// ½«×ªÂëÍê³ÉºóµÄÎļþid·ÅÈ뻺´æ¡£
|
return;
|
} else if (mediaVideo.getType().equals("audio")) {
|
ResItemAudio resItemAudio = findUnique(
|
"from ResItemAudio where deleteFlag is false and mediaVideoId = ?",
|
CollectionUtils.newList(mediaVideoId), ResItemAudio.class);
|
resItemAudio.setStatus(ResItemVideo.STATUS_DRAFT);
|
TraceUtils.setUpdateTrace(resItemAudio);
|
resItemAudio.setSeconds(mediaVideo.getPlayTime());
|
save(resItemAudio);
|
|
cacheService.lstRightPush(ResService.RES_TOUPDATE_CONVER_STATUS_LST, resItemAudio.getAudioId());// ½«×ªÂëÍê³ÉºóµÄÎļþid·ÅÈ뻺´æ¡£
|
return;
|
}
|
|
}
|
cacheService.lstRightPush(RES_VIDEO_CONVER_LST, mediaVideoId);
|
|
}
|
}
|