package com.yeshi.buwan.service.imp;
|
|
import java.io.Serializable;
|
import java.util.ArrayList;
|
import java.util.Calendar;
|
import java.util.List;
|
|
import javax.annotation.Resource;
|
|
import com.yeshi.buwan.util.TimeUtil;
|
import com.yeshi.buwan.util.video.VideoConstant;
|
import org.hibernate.HibernateException;
|
import org.hibernate.SQLQuery;
|
import org.hibernate.Session;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.orm.hibernate4.HibernateCallback;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.yeshi.buwan.dao.CategoryVideoDao;
|
import com.yeshi.buwan.dao.VideoInfoDao;
|
import com.yeshi.buwan.domain.CategoryVideo;
|
import com.yeshi.buwan.domain.ResourceVideo;
|
import com.yeshi.buwan.domain.VideoDetailInfo;
|
import com.yeshi.buwan.domain.VideoInfo;
|
import com.yeshi.buwan.domain.VideoResource;
|
import com.yeshi.buwan.domain.VideoType;
|
import com.yeshi.buwan.domain.VideoUrl;
|
import com.yeshi.buwan.domain.entity.PlayUrl;
|
|
@Service
|
public class VideoInfoService {
|
|
@Autowired
|
private VideoInfoDao videoInfoDao;
|
|
@Autowired
|
private CategoryVideoDao categoryVideoDao;
|
|
@Autowired
|
private ResourceVideoService resourceVideoService;
|
|
@Resource
|
private VideoResourceService videoResourceService;
|
|
public VideoInfo getVideoInfo(String vid) {
|
return videoInfoDao.find(VideoInfo.class, vid);
|
}
|
|
@SuppressWarnings("unchecked")
|
public List<VideoInfo> simpleRandomVideoList(final int i) {
|
return (List<VideoInfo>) videoInfoDao.excute(new HibernateCallback<List<VideoInfo>>() {
|
|
@Override
|
public List<VideoInfo> doInHibernate(Session session) throws HibernateException {
|
SQLQuery query = session.createSQLQuery(
|
"SELECT v.* FROM wk_video_video v RIGHT JOIN (SELECT * FROM wk_recommend_category_cache WHERE videotypeid = 152 ORDER BY RAND() LIMIT 0,"
|
+ i + ") c ON c.videoid=v.id");
|
query.addEntity(VideoInfo.class);
|
return query.list();
|
}
|
});
|
}
|
|
public VideoInfo getVideoInfo(String name, VideoType videoType) {
|
List<VideoInfo> list = videoInfoDao.list(
|
"select c.video from CategoryVideo c where c.video.name = ? and c.videoType.id = ?",
|
new Serializable[]{name, videoType.getId()});
|
if (list.size() > 0) {
|
return list.get(0);
|
}
|
return null;
|
}
|
|
@Transactional
|
public void save(VideoInfo videoInfo) {
|
videoInfoDao.save(videoInfo);
|
CategoryVideo ca = new CategoryVideo();
|
ca.setVideo(videoInfo);
|
ca.setVideoType(videoInfo.getVideoType());
|
categoryVideoDao.create(ca);
|
List<VideoResource> resourceList = videoInfo.getResourceList();
|
ResourceVideo rs = null;
|
for (VideoResource videoResource : resourceList) {
|
rs = new ResourceVideo();
|
rs.setResource(videoResource);
|
rs.setVideo(videoInfo);
|
resourceVideoService.save(rs);
|
}
|
}
|
|
public List<VideoDetailInfo> getVideoDetailList(String videoid, VideoResource vr, int page, int pageSize) {
|
VideoInfo find = videoInfoDao.find(VideoInfo.class, videoid);
|
if (find != null) {
|
if (vr.getName().equals("AcFun")) {
|
List<VideoDetailInfo> detailInfos = new ArrayList<VideoDetailInfo>();
|
VideoDetailInfo vd = new VideoDetailInfo();
|
vd.setVideo(find);
|
vd.setIntroduction(find.getIntroduction());
|
vd.setName(find.getName());
|
vd.setTag("");
|
vd.setType("acFunVideo");
|
vd.setId(Long.parseLong(find.getId()));
|
vd.setWatchCount(Long.parseLong(find.getWatchCount()));
|
VideoUrl vurl = new VideoUrl();
|
vurl.setResource(vr);
|
vurl.setUrl(find.getBaseurl());
|
vurl.setInvalid(0 + "");
|
vurl.setBaseUrl(find.getBaseurl());
|
List<VideoUrl> urls = new ArrayList<VideoUrl>();
|
urls.add(vurl);
|
vd.setUrls(urls);
|
detailInfos.add(vd);
|
return detailInfos;
|
}
|
}
|
|
return null;
|
}
|
|
public PlayUrl getPlayUrl(String detailSystemId, String id, String type, int resourceid, String videoid) {
|
if (type.equals("acFunVideo")) {
|
PlayUrl playUrl = new PlayUrl();
|
VideoResource videoResource = videoResourceService.getResource(resourceid + "");
|
playUrl.setResource(videoResource);
|
VideoInfo find = videoInfoDao.find(VideoInfo.class, videoid);
|
playUrl.setUrl(find.getBaseurl());
|
playUrl.setPlayType(1);
|
playUrl.setParams("");
|
// 添加播放次数
|
find.setWatchCount("" + (Integer.parseInt(find.getWatchCount()) + 1));
|
videoInfoDao.update(find);
|
return playUrl;
|
}
|
return null;
|
}
|
|
|
/**
|
* 是否存在相同的视频
|
*
|
* @param newVideoInfo
|
* @return
|
*/
|
public VideoInfo getExistSameVideo(VideoInfo newVideoInfo) {
|
int year = Integer.parseInt(newVideoInfo.getYear());
|
List<VideoInfo> list = videoInfoDao.listByName(newVideoInfo.getName(), 0, 5);
|
if (list != null && list.size() > 0)
|
for (int i = 0; i < list.size(); i++) {
|
if (Math.abs(Integer.parseInt(list.get(i).getYear()) - year) < 2) {// 年份相差1年以下且属于同一个分类才归为一起
|
// 判断分类
|
if (VideoConstant.isMainCategory(newVideoInfo.getVideoType().getId())) {// 正片分类
|
List<CategoryVideo> cvList = categoryVideoDao.listByVideoId(list.get(i).getId());
|
boolean isS = false;
|
for (CategoryVideo cv : cvList) {
|
if (newVideoInfo.getVideoType().getId() == cv.getVideoType().getId()
|
|| (cv.getVideoType().getParent() != null && newVideoInfo.getVideoType().getId() ==
|
cv.getVideoType().getParent().getId())) {// 类型相同
|
return list.get(i);
|
}
|
}
|
} else // 不必比较分类--只要名称相同则判断为相同
|
{ // 判断上个是否为正片分类
|
List<CategoryVideo> typeList = categoryVideoDao.listByVideoId(list.get(i).getId());
|
boolean isZhengpian = false;
|
if (typeList != null)
|
for (CategoryVideo categoryVideo : typeList) {
|
VideoType ltype = categoryVideo.getVideoType();
|
if (VideoConstant.isMainCategory(ltype.getId())
|
|| (ltype.getParent() != null && VideoConstant.isMainCategory(ltype.getParent().getId()))) {
|
isZhengpian = true;
|
break;
|
}
|
}
|
|
if (!isZhengpian)
|
return list.get(i);
|
else
|
return null;
|
}
|
}
|
}
|
return null;
|
}
|
|
|
public List<VideoInfo> listByVideoIds(List<String> videoIds) {
|
return videoInfoDao.listByVideoIds(videoIds);
|
}
|
|
public void hiddenVideo(String id) {
|
VideoInfo videoInfo = videoInfoDao.find(VideoInfo.class, id);
|
if (videoInfo != null && "1".equalsIgnoreCase(videoInfo.getShow())) {
|
videoInfo.setShow("0");
|
videoInfoDao.update(videoInfo);
|
}
|
}
|
|
|
//从新统计
|
public void statisticVideoExtraInfo(String videoId) {
|
videoInfoDao.statisticVideoExtraInfo(videoId);
|
}
|
|
}
|