| | |
| | | package com.yeshi.buwan.service.imp; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | import org.hibernate.HibernateException; |
| | | import org.hibernate.Session; |
| | | import org.springframework.cache.annotation.Cacheable; |
| | | import org.springframework.orm.hibernate4.HibernateCallback; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import com.yeshi.buwan.dao.CategoryVideoDao; |
| | | import com.yeshi.buwan.dao.ResourceVideoDao; |
| | | import com.yeshi.buwan.dao.VideoInfoDao; |
| | | import com.yeshi.buwan.dao.VideoResourceDao; |
| | | import com.yeshi.buwan.domain.CategoryVideo; |
| | | import com.yeshi.buwan.domain.VideoInfo; |
| | | import com.yeshi.buwan.domain.VideoResource; |
| | | import com.yeshi.buwan.util.Constant; |
| | | import org.hibernate.HibernateException; |
| | | import org.hibernate.Session; |
| | | import org.springframework.cache.annotation.Cacheable; |
| | | import org.springframework.orm.hibernate4.HibernateCallback; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | @Service |
| | | public class VideoService { |
| | | @Resource |
| | | private VideoInfoDao videoInfoDao; |
| | | @Resource |
| | | private VideoInfoDao videoInfoDao; |
| | | |
| | | @Resource |
| | | private VideoResourceDao videoResourceDao; |
| | | @Resource |
| | | private VideoResourceDao videoResourceDao; |
| | | |
| | | @Resource |
| | | private ResourceVideoDao resourceVideoDao; |
| | | @Resource |
| | | private ClassService classServcie; |
| | | |
| | | @Resource |
| | | private ClassService classServcie; |
| | | @Resource |
| | | private CategoryVideoDao categoryVideoDao; |
| | | |
| | | @Resource |
| | | private CategoryVideoDao categoryVideoDao; |
| | | public VideoService() { |
| | | |
| | | public CategoryVideoDao getCategoryVideoDao() { |
| | | return categoryVideoDao; |
| | | } |
| | | } |
| | | |
| | | public void setCategoryVideoDao(CategoryVideoDao categoryVideoDao) { |
| | | this.categoryVideoDao = categoryVideoDao; |
| | | } |
| | | public VideoInfo getVideoInfo(String id) { |
| | | return videoInfoDao.find(VideoInfo.class, id); |
| | | } |
| | | |
| | | public ClassService getClassServcie() { |
| | | return classServcie; |
| | | } |
| | | |
| | | public void setClassServcie(ClassService classServcie) { |
| | | this.classServcie = classServcie; |
| | | } |
| | | public List<VideoInfo> getVideoInfoList(List<String> ids) { |
| | | if (ids == null || ids.size() == 0) |
| | | return null; |
| | | List<VideoInfo> list = videoInfoDao.listByVideoIds(ids); |
| | | Map<String, VideoInfo> map = new HashMap<>(); |
| | | for (VideoInfo vi : list) { |
| | | map.put(vi.getId(), vi); |
| | | } |
| | | list.clear(); |
| | | for (String id : ids) { |
| | | list.add(map.get(id)); |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | public VideoInfoDao getVideoInfoDao() { |
| | | return videoInfoDao; |
| | | } |
| | | public List<VideoInfo> getVideoListByClass(int type, int page) { |
| | | String types[] = classServcie.getChildrenType(type); |
| | | String wheres = ""; |
| | | String as[]; |
| | | int j = (as = types).length; |
| | | for (int i = 0; i < j; i++) { |
| | | String st = as[i]; |
| | | wheres = (new StringBuilder(String.valueOf(wheres))).append("or v.videoType.id=").append(st).append(" ") |
| | | .toString(); |
| | | } |
| | | |
| | | public void setVideoInfoDao(VideoInfoDao videoInfoDao) { |
| | | this.videoInfoDao = videoInfoDao; |
| | | } |
| | | if (wheres.startsWith("or")) |
| | | wheres = wheres.substring(2, wheres.length()); |
| | | List<VideoInfo> list = videoInfoDao.list( |
| | | (new StringBuilder("from VideoInfo v where v.show='1' and (")).append(wheres).append(")").toString(), |
| | | (page - 1) * Constant.pageCount, 20, new String[]{}); |
| | | return list; |
| | | } |
| | | |
| | | public VideoService() { |
| | | public List<VideoInfo> searchVideoUsedByAdmin(String name) { |
| | | return videoInfoDao.list("from VideoInfo v where v.name like ? order by REPLACE(v.name,?,'')", 0, 20, |
| | | new String[]{"%" + name + "%", name}); |
| | | } |
| | | |
| | | } |
| | | public long getVideoCountByClass(int type) { |
| | | String types[] = classServcie.getChildrenType(type); |
| | | String wheres = ""; |
| | | String as[]; |
| | | int j = (as = types).length; |
| | | for (int i = 0; i < j; i++) { |
| | | String st = as[i]; |
| | | wheres = (new StringBuilder(String.valueOf(wheres))).append("or v.videoType.id=").append(st).append(" ") |
| | | .toString(); |
| | | } |
| | | |
| | | public VideoInfo getVideoInfo(String id) { |
| | | return videoInfoDao.find(VideoInfo.class, id); |
| | | } |
| | | if (wheres.startsWith("or")) |
| | | wheres = wheres.substring(2, wheres.length()); |
| | | return videoInfoDao |
| | | .getCount((new StringBuilder("select count(*) from VideoInfo v where ")).append(wheres).toString()); |
| | | } |
| | | |
| | | public List<VideoInfo> getVideoListByClass(int type, int page) { |
| | | String types[] = classServcie.getChildrenType(type); |
| | | String wheres = ""; |
| | | String as[]; |
| | | int j = (as = types).length; |
| | | for (int i = 0; i < j; i++) { |
| | | String st = as[i]; |
| | | wheres = (new StringBuilder(String.valueOf(wheres))).append("or v.videoType.id=").append(st).append(" ") |
| | | .toString(); |
| | | } |
| | | public void addVideoWatch(final String vid) { |
| | | videoInfoDao.excute(new HibernateCallback() { |
| | | public Object doInHibernate(Session session) throws HibernateException { |
| | | try { |
| | | session.getTransaction().begin(); |
| | | session.createSQLQuery("update wk_video_video v set v.watchcount=v.watchcount+1 where v.id=?") |
| | | .setParameter(0, vid).executeUpdate(); |
| | | session.flush(); |
| | | session.getTransaction().commit(); |
| | | } catch (Exception exception) { |
| | | exception.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | }); |
| | | |
| | | if (wheres.startsWith("or")) |
| | | wheres = wheres.substring(2, wheres.length()); |
| | | List<VideoInfo> list = videoInfoDao.list( |
| | | (new StringBuilder("from VideoInfo v where v.show='1' and (")).append(wheres).append(")").toString(), |
| | | (page - 1) * Constant.pageCount, 20, new String[] {}); |
| | | return list; |
| | | } |
| | | } |
| | | |
| | | public List<VideoInfo> searchVideoUsedByAdmin(String name) { |
| | | return videoInfoDao.list("from VideoInfo v where v.name like ? order by REPLACE(v.name,?,'')", 0, 20, |
| | | new String[] { "%" + name + "%", name }); |
| | | } |
| | | public void addCategoryVideo(CategoryVideo cv) { |
| | | categoryVideoDao.save(cv); |
| | | } |
| | | |
| | | public long getVideoCountByClass(int type) { |
| | | String types[] = classServcie.getChildrenType(type); |
| | | String wheres = ""; |
| | | String as[]; |
| | | int j = (as = types).length; |
| | | for (int i = 0; i < j; i++) { |
| | | String st = as[i]; |
| | | wheres = (new StringBuilder(String.valueOf(wheres))).append("or v.videoType.id=").append(st).append(" ") |
| | | .toString(); |
| | | } |
| | | /** |
| | | * 将没有添加进分裂视频的视频加入杂类 |
| | | */ |
| | | public void addNOAddToCategoryVideo() { |
| | | videoInfoDao.excute(new HibernateCallback() { |
| | | public Object doInHibernate(Session session) throws HibernateException { |
| | | try { |
| | | session.getTransaction().begin(); |
| | | List list = session |
| | | .createSQLQuery( |
| | | "SELECT DISTINCT(v.`id`) FROM wk_video_video v LEFT JOIN wk_category_video cv ON cv.`videoid`=v.`id` WHERE cv.`id` IS NULL") |
| | | .setFirstResult(0).setMaxResults(10000).list(); |
| | | for (int i = 0; i < list.size(); i++) { |
| | | String videoId = list.get(i) + ""; |
| | | session.createSQLQuery( |
| | | "INSERT INTO wk_category_video(videoid,videotypeid) VALUES(" + videoId + ",299)") |
| | | .executeUpdate(); |
| | | } |
| | | session.flush(); |
| | | session.getTransaction().commit(); |
| | | } catch (Exception exception) { |
| | | exception.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | }); |
| | | |
| | | if (wheres.startsWith("or")) |
| | | wheres = wheres.substring(2, wheres.length()); |
| | | return videoInfoDao |
| | | .getCount((new StringBuilder("select count(*) from VideoInfo v where ")).append(wheres).toString()); |
| | | } |
| | | } |
| | | |
| | | public void addVideoWatch(final String vid) { |
| | | videoInfoDao.excute(new HibernateCallback() { |
| | | public Object doInHibernate(Session session) throws HibernateException { |
| | | try { |
| | | session.getTransaction().begin(); |
| | | session.createSQLQuery("update wk_video_video v set v.watchcount=v.watchcount+1 where v.id=?") |
| | | .setParameter(0, vid).executeUpdate(); |
| | | session.flush(); |
| | | session.getTransaction().commit(); |
| | | } catch (Exception exception) { |
| | | exception.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | }); |
| | | @Cacheable(value = "guessLikeCache", key = "'guessLike'+'-'+#page") |
| | | public List<VideoInfo> guessLike(int page) { |
| | | List<VideoInfo> list = videoInfoDao.list( |
| | | "select cv.video from CategoryVideo cv where (cv.videoType= 216) and cv.video.show=1 order by cv.id desc", |
| | | (page - 1) * Constant.pageCount, Constant.pageCount, null); |
| | | String where = ""; |
| | | for (VideoInfo vi : list) { |
| | | where += String.format(" rv.video.id=%s or", vi.getId()); |
| | | } |
| | | if (where.endsWith("or")) |
| | | where = where.substring(0, where.length() - 2); |
| | | |
| | | } |
| | | // 查询来源 |
| | | List<VideoResource> resourceList = videoResourceDao.list(String.format("from VideoResource")); |
| | | Map<String, VideoResource> map = new HashMap<>(); |
| | | for (VideoResource rv : resourceList) |
| | | map.put(rv.getName(), rv); |
| | | |
| | | public void addCategoryVideo(CategoryVideo cv) { |
| | | categoryVideoDao.save(cv); |
| | | } |
| | | // 来源赋值 |
| | | |
| | | /** |
| | | * 将没有添加进分裂视频的视频加入杂类 |
| | | */ |
| | | public void addNOAddToCategoryVideo() { |
| | | videoInfoDao.excute(new HibernateCallback() { |
| | | public Object doInHibernate(Session session) throws HibernateException { |
| | | try { |
| | | session.getTransaction().begin(); |
| | | List list = session |
| | | .createSQLQuery( |
| | | "SELECT DISTINCT(v.`id`) FROM wk_video_video v LEFT JOIN wk_category_video cv ON cv.`videoid`=v.`id` WHERE cv.`id` IS NULL") |
| | | .setFirstResult(0).setMaxResults(10000).list(); |
| | | for (int i = 0; i < list.size(); i++) { |
| | | String videoId = list.get(i) + ""; |
| | | session.createSQLQuery( |
| | | "INSERT INTO wk_category_video(videoid,videotypeid) VALUES(" + videoId + ",299)") |
| | | .executeUpdate(); |
| | | } |
| | | session.flush(); |
| | | session.getTransaction().commit(); |
| | | } catch (Exception exception) { |
| | | exception.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | @Cacheable(value = "guessLikeCache", key = "'guessLike'+'-'+#page") |
| | | public List<VideoInfo> guessLike(int page) { |
| | | List<VideoInfo> list = videoInfoDao.list( |
| | | "select cv.video from CategoryVideo cv where (cv.videoType= 216) and cv.video.show=1 order by cv.id desc", |
| | | (page - 1) * Constant.pageCount, Constant.pageCount, null); |
| | | String where = ""; |
| | | for (VideoInfo vi : list) { |
| | | where += String.format(" rv.video.id=%s or", vi.getId()); |
| | | } |
| | | if (where.endsWith("or")) |
| | | where = where.substring(0, where.length() - 2); |
| | | |
| | | // 查询来源 |
| | | List<VideoResource> resourceList = videoResourceDao.list(String.format("from VideoResource")); |
| | | Map<String, VideoResource> map = new HashMap<>(); |
| | | for (VideoResource rv : resourceList) |
| | | map.put(rv.getName(), rv); |
| | | |
| | | // 来源赋值 |
| | | |
| | | for (VideoInfo video : list) { |
| | | List<VideoResource> rsList = new ArrayList<>(); |
| | | if (video.getPicture().contains("juhe")) { |
| | | rsList.add(map.get("爱奇艺")); |
| | | } else if (video.getPicture().contains("aixifan")) { |
| | | rsList.add(map.get("AcFun")); |
| | | } else if (video.getPicture().contains("funshion")) { |
| | | rsList.add(map.get("风行")); |
| | | } else { |
| | | VideoResource vr = new VideoResource(); |
| | | vr.setPicture(""); |
| | | vr.setName(""); |
| | | rsList.add(vr); |
| | | } |
| | | video.setResourceList(rsList); |
| | | } |
| | | return list; |
| | | } |
| | | for (VideoInfo video : list) { |
| | | List<VideoResource> rsList = new ArrayList<>(); |
| | | if (video.getPicture().contains("juhe")) { |
| | | rsList.add(map.get("爱奇艺")); |
| | | } else if (video.getPicture().contains("aixifan")) { |
| | | rsList.add(map.get("AcFun")); |
| | | } else if (video.getPicture().contains("funshion")) { |
| | | rsList.add(map.get("风行")); |
| | | } else { |
| | | VideoResource vr = new VideoResource(); |
| | | vr.setPicture(""); |
| | | vr.setName(""); |
| | | rsList.add(vr); |
| | | } |
| | | video.setResourceList(rsList); |
| | | } |
| | | return list; |
| | | } |
| | | } |