admin
2022-04-16 04f09e52ffd4681bdfd85e51acd3da0d1280c3d3
src/main/java/com/yeshi/buwan/service/imp/VideoService.java
@@ -1,204 +1,190 @@
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;
    }
}