| | |
| | | package com.yeshi.buwan.service.imp; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | import com.yeshi.buwan.util.HibernateSessionFactory; |
| | | import com.yeshi.buwan.util.StringUtil; |
| | | import com.yeshi.buwan.util.TimeUtil; |
| | | import com.yeshi.buwan.util.mq.CMQManager; |
| | | import com.yeshi.buwan.util.video.VideoConstant; |
| | | import org.hibernate.HibernateException; |
| | | import org.hibernate.SQLQuery; |
| | | import org.hibernate.Session; |
| | |
| | | @Service |
| | | public class VideoInfoService { |
| | | |
| | | @Autowired |
| | | private VideoInfoDao dao; |
| | | @Autowired |
| | | private VideoInfoDao videoInfoDao; |
| | | |
| | | @Autowired |
| | | private CategoryVideoDao cdao; |
| | | @Autowired |
| | | private CategoryVideoDao categoryVideoDao; |
| | | |
| | | @Autowired |
| | | private ResourceVideoService resourceVideoService; |
| | | @Autowired |
| | | private ResourceVideoService resourceVideoService; |
| | | |
| | | @Resource |
| | | private VideoResourceService videoResourceService; |
| | | @Resource |
| | | private VideoResourceService videoResourceService; |
| | | |
| | | public VideoInfo getVideoInfo(String vid) { |
| | | return dao.find(VideoInfo.class, vid); |
| | | } |
| | | @Resource |
| | | private ClearService clearService; |
| | | |
| | | @SuppressWarnings("unchecked") |
| | | public List<VideoInfo> simpleRandomVideoList(final int i) { |
| | | return (List<VideoInfo>) dao.excute(new HibernateCallback<List<VideoInfo>>() { |
| | | public VideoInfo getVideoInfo(String vid) { |
| | | return videoInfoDao.find(VideoInfo.class, vid); |
| | | } |
| | | |
| | | @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(); |
| | | } |
| | | }); |
| | | } |
| | | @SuppressWarnings("unchecked") |
| | | public List<VideoInfo> simpleRandomVideoList(final int i) { |
| | | return (List<VideoInfo>) videoInfoDao.excute(new HibernateCallback<List<VideoInfo>>() { |
| | | |
| | | public VideoInfo getVideoInfo(String name, VideoType videoType) { |
| | | List<VideoInfo> list = dao.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; |
| | | } |
| | | @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(); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | @Transactional |
| | | public void save(VideoInfo videoInfo) { |
| | | dao.save(videoInfo); |
| | | CategoryVideo ca = new CategoryVideo(); |
| | | ca.setVideo(videoInfo); |
| | | ca.setVideoType(videoInfo.getVideoType()); |
| | | cdao.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 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; |
| | | } |
| | | |
| | | public List<VideoDetailInfo> getVideoDetailList(String videoid, VideoResource vr) { |
| | | VideoInfo find = dao.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; |
| | | } |
| | | } |
| | | @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); |
| | | } |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | 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 = dao.find(VideoInfo.class, videoid); |
| | | playUrl.setUrl(find.getBaseurl()); |
| | | playUrl.setPlayType(1); |
| | | playUrl.setParams(""); |
| | | // 添加播放次数 |
| | | find.setWatchCount("" + (Integer.parseInt(find.getWatchCount()) + 1)); |
| | | dao.update(find); |
| | | return playUrl; |
| | | } |
| | | return null; |
| | | } |
| | | 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 getExistSameVideoWithTime(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; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 根据名称与主演 |
| | | * |
| | | * @param newVideoInfo |
| | | * @return |
| | | */ |
| | | public VideoInfo getExistSameVideoWithDirector(VideoInfo newVideoInfo) { |
| | | List<VideoInfo> list = videoInfoDao.listByName(newVideoInfo.getName(), 0, 5); |
| | | if (list != null && list.size() > 0) { |
| | | if (VideoConstant.isMainCategory(newVideoInfo.getVideoType().getId())) { |
| | | for (int i = 0; i < list.size(); i++) { |
| | | VideoInfo vi = list.get(i); |
| | | if (getSameDirectorOrActorCount(vi.getDirector(), newVideoInfo.getDirector()) > 0 || getSameDirectorOrActorCount(vi.getMainActor(), newVideoInfo.getMainActor()) > 0) { |
| | | // if (getSameDirectorOrActorCount(vi.getMainActor(), newVideoInfo.getMainActor()) > 0) { |
| | | //主分类一样 |
| | | if (vi.getVideoType() != null && newVideoInfo.getVideoType() != null && vi.getVideoType().getId() == newVideoInfo.getVideoType().getId()) |
| | | return list.get(i); |
| | | // } |
| | | } |
| | | } |
| | | } else { |
| | | return list.get(0); |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | private int getSameDirectorOrActorCount(String d1, String d2) { |
| | | if (!StringUtil.isNullOrEmpty(d1) && !StringUtil.isNullOrEmpty(d2)) { |
| | | List<String> d1List = new ArrayList<>(); |
| | | if (d1.contains("/")) { |
| | | d1List.addAll(Arrays.asList(d1.trim().split("/"))); |
| | | } else { |
| | | d1List.addAll(Arrays.asList(d1.trim().split(" "))); |
| | | } |
| | | |
| | | List<String> d2List = new ArrayList<>(); |
| | | if (d2.contains("/")) |
| | | d2List.addAll(Arrays.asList(d2.trim().split("/"))); |
| | | else |
| | | d2List.addAll(Arrays.asList(d2.trim().split(" "))); |
| | | |
| | | d1List.retainAll(d2List); |
| | | |
| | | return d1List.size(); |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | |
| | | 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); |
| | | } |
| | | |
| | | /** |
| | | * 列表查询 |
| | | * |
| | | * @param query |
| | | * @return |
| | | */ |
| | | public List<VideoInfo> list(VideoInfoDao.DaoQuery query) { |
| | | return videoInfoDao.list(query); |
| | | } |
| | | |
| | | public long count(VideoInfoDao.DaoQuery query) { |
| | | return videoInfoDao.count(query); |
| | | } |
| | | |
| | | |
| | | public void updateVideoInfo(VideoInfo videoInfo) { |
| | | VideoInfo oldVideo = videoInfoDao.find(VideoInfo.class, videoInfo.getId()); |
| | | if (oldVideo == null) |
| | | return; |
| | | |
| | | videoInfoDao.updateSelective(videoInfo); |
| | | //是否需要更新搜索引擎 |
| | | boolean needUpdateSolr = false; |
| | | //tag变化 |
| | | if (videoInfo.getTag() != null && !videoInfo.getTag().equalsIgnoreCase(oldVideo.getTag())) { |
| | | needUpdateSolr = true; |
| | | } |
| | | |
| | | //名称变化 |
| | | if (videoInfo.getName() != null && !videoInfo.getName().equalsIgnoreCase(oldVideo.getName())) { |
| | | needUpdateSolr = true; |
| | | } |
| | | |
| | | //picture变化 |
| | | if (videoInfo.getHpicture() != null && !videoInfo.getHpicture().equalsIgnoreCase(oldVideo.getHpicture())) { |
| | | needUpdateSolr = true; |
| | | } |
| | | if (videoInfo.getVpicture() != null && !videoInfo.getVpicture().equalsIgnoreCase(oldVideo.getVpicture())) { |
| | | needUpdateSolr = true; |
| | | } |
| | | |
| | | if (videoInfo.getPicture() != null && !videoInfo.getPicture().equalsIgnoreCase(oldVideo.getPicture())) { |
| | | needUpdateSolr = true; |
| | | } |
| | | |
| | | //视频类型发生变化 |
| | | if (videoInfo.getVideoType() != null && (oldVideo.getVideoType() == null || videoInfo.getVideoType().getId() != oldVideo.getVideoType().getId())) { |
| | | needUpdateSolr = true; |
| | | } |
| | | |
| | | //是否显示 |
| | | if (videoInfo.getShow() != null && !videoInfo.getShow().equalsIgnoreCase(oldVideo.getShow())) { |
| | | needUpdateSolr = true; |
| | | } |
| | | |
| | | if (needUpdateSolr) { |
| | | CMQManager.getInstance().addSolrMsg(videoInfo.getId()); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | } |