package com.newvideo.service.imp; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; import javax.annotation.Resource; import org.hibernate.HibernateException; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.springframework.cache.annotation.Cacheable; import org.springframework.orm.hibernate4.HibernateCallback; import org.springframework.stereotype.Service; import com.newvideo.dao.DetailSystemDao; import com.newvideo.dao.HomeTypeDao; import com.newvideo.dao.HomeVideoDao; import com.newvideo.dao.SuperHomeTypeDao; import com.newvideo.dao.VideoInfoDao; import com.newvideo.domain.DetailSystem; import com.newvideo.domain.HomeType; import com.newvideo.domain.HomeVideo; import com.newvideo.domain.SuperHomeType; import com.newvideo.domain.VideoInfo; import com.newvideo.domain.VideoType; import com.newvideo.domain.web.DetailSystemSelect; import com.newvideo.domain.web.HomeTypeAdmin; import com.newvideo.util.Constant; import com.newvideo.util.StringUtil; @Service public class HomeTypeService { @Resource private HomeTypeDao homeTypeDao; @Resource private HomeVideoDao homeVideoDao; @Resource private VideoInfoDao videoInfoDao; @Resource private SuperHomeTypeDao superHomeTypeDao; @Resource private DetailSystemDao detailSystemDao; public List getHomeType() { List list = homeTypeDao.list("from HomeType h order by h.orderby desc"); return getHomeType(list); } @SuppressWarnings("unchecked") // @Cacheable(value = "homeCache", key = "'getHomeType'+'-'+#detailSystem+'-'+#cacheMd5+'-'+#maxNumber") public List getHomeType(final String detailSystem, final List resourceIds, String cacheMd5, final int maxNumber) { return (List) homeTypeDao.excute(new HibernateCallback>() { public List doInHibernate(Session session) throws HibernateException { try { String resourceWhere = ""; for (Long rid : resourceIds) resourceWhere += String.format(" rv.`resourceid`=%d or", rid); if (resourceWhere.endsWith("or")) resourceWhere = resourceWhere.substring(0, resourceWhere.length() - 2); // List resultList = session // .createSQLQuery( // "SELECT ht.`id` as htid,ht.`name` as htname,ht.`columns` as htcolumns ,ht.`hasmore`,ht.`activity` ,ht.`params` ,ht.`ioscontrol`,ht.number,hvideo.id as hvid,hvideo.`videoid` AS hvvideoid,hvideo.`picture`as hvpicture ,hvideo.`tag` as hvtag, v.`id` as vid ,v.`picture` as vpicture ,v.`name` as vname ,v.`tag` as vtag ,v.`hpicture` as vhpicture ,v.`latest_hpicture` as vlatest_hpicture ,v.`watchcount` as vwatchcount,v.commentcount,ht.icon as hicon,ht.orderby FROM (SELECT hv.* FROM `wk_resource_video` rv LEFT JOIN `wk_video_homevideo` hv ON rv.`videoid` =hv.`videoid` LEFT JOIN `wk_video_video` v ON v.`id` =hv.`videoid` LEFT JOIN `wk_video_banquan_video` bv ON bv.`videoid`=hv.`videoid` AND bv.`detailsystemid`=" // + detailSystem + " AND bv.`show`=1 WHERE (hv.`id`>0 AND v.`show` =1 AND (" // + resourceWhere // + " AND bv.`videoid` IS NULL) ) GROUP BY (hv.`id`) ORDER BY v.`orderby` desc,v.createtime DESC ) hvideo LEFT JOIN `wk_video_super_hometype` sht ON sht.`hometypeid`=hvideo.hometype LEFT JOIN `wk_video_hometype` ht ON sht.`hometypeid` =ht.`id` LEFT JOIN wk_video_video v ON v.`id`=hvideo.videoid WHERE sht.`detailsystemid` =? ORDER BY hvideo.`orderby` DESC,v.orderby desc,v.updatetime desc") // .setParameter(0, Long.parseLong(detailSystem)).list(); List resultList = session .createSQLQuery( "SELECT ht.`id` as htid,ht.`name` as htname,ht.`columns` as htcolumns ,ht.`hasmore`,ht.`activity` ,ht.`params` ,ht.`ioscontrol`,ht.number,hvideo.id as hvid,hvideo.`videoid` AS hvvideoid,hvideo.`picture`as hvpicture ,hvideo.`tag` as hvtag, v.`id` as vid ,v.`picture` as vpicture ,v.`name` as vname ,v.`tag` as vtag ,v.`hpicture` as vhpicture ,v.`latest_hpicture` as vlatest_hpicture ,v.`watchcount` as vwatchcount,v.commentcount,ht.icon as hicon,ht.orderby as htorder,hvideo.orderby as hvorder FROM (SELECT hv.* FROM `wk_resource_video` rv LEFT JOIN `wk_video_homevideo` hv ON rv.`videoid` =hv.`videoid` LEFT JOIN `wk_video_video` v ON v.`id` =hv.`videoid` LEFT JOIN `wk_video_banquan_video` bv ON bv.`videoid`=hv.`videoid` AND bv.`detailsystemid`=" + detailSystem + " AND bv.`show`=1 WHERE (hv.`id`>0 AND v.`show` =1 AND (" + resourceWhere + ") AND bv.`videoid` IS NULL) GROUP BY (hv.`id`) ORDER BY hv.`orderby` desc,v.createtime DESC ) hvideo LEFT JOIN `wk_video_super_hometype` sht ON sht.`hometypeid`=hvideo.hometype LEFT JOIN `wk_video_hometype` ht ON sht.`hometypeid` =ht.`id` LEFT JOIN wk_video_video v ON v.`id`=hvideo.videoid WHERE sht.`detailsystemid` =? ORDER BY hvideo.`orderby` DESC,v.orderby desc,v.updatetime desc") .setParameter(0, Long.parseLong(detailSystem)).list(); List homeTypeList = new ArrayList(); for (int i = 0; i < resultList.size(); i++) { Object[] obj = (Object[]) resultList.get(i); HomeType ht = new HomeType(); ht.setId(obj[0] + ""); ht.setName(obj[1] + ""); ht.setColumns(Integer.parseInt(obj[2] + "")); ht.setHasMore(Boolean.parseBoolean(obj[3] + "")); ht.setActivity(obj[4] + ""); ht.setParams(obj[5] + ""); ht.setIosControl(obj[6] + ""); ht.setNumber(Integer.parseInt(obj[7] + "")); ht.setOrderby(obj[21] + ""); HomeVideo hv = new HomeVideo(); hv.setId(obj[8] + ""); hv.setPicture(obj[10] + ""); hv.setTag(obj[11] + ""); VideoInfo video = new VideoInfo(); video.setId(obj[12] + ""); video.setPicture(obj[13] + ""); video.setName(obj[14] + ""); video.setTag(obj[15] + ""); video.setHpicture(obj[16] + ""); video.setLatestHpicture(obj[17] + ""); video.setWatchCount(obj[18] + ""); video.setCommentCount(Integer.parseInt(obj[19] + "")); ht.setIcon(obj[20] + ""); hv.setVideo(video); hv.setOrderby(Integer.parseInt(obj[22]+"")); // System.out.println(ht.getName() + "--" + // hv.getVideo().getName()); // 更改图片显示 if (!StringUtil.isNullOrEmpty(hv.getVideo().getLatestHpicture())) hv.getVideo().setPicture(hv.getVideo().getLatestHpicture()); else hv.getVideo().setPicture(hv.getVideo().getHpicture()); if (StringUtil.isNullOrEmpty(hv.getPicture())) hv.setPicture(hv.getVideo().getPicture()); if (StringUtil.isNullOrEmpty(hv.getTag())) hv.setTag(hv.getVideo().getTag()); int index = index(homeTypeList, ht); if (index > -1) { HomeType eHomeType = homeTypeList.get(index); int mn = eHomeType.getNumber(); if (maxNumber > -1)// 根据maxNumber的数量来,适用于网页 mn = maxNumber; if (eHomeType.getHomeVideoList().size() < mn)// 加入指定的数量的数据 { eHomeType.getHomeVideoList().add(hv); } } else { List videolist = new ArrayList(); videolist.add(hv); ht.setHomeVideoList(videolist); homeTypeList.add(ht); } } // for (HomeType homeType : homeTypeList) { // List list = homeType.getHomeVideoList(); // orderByVideo(list); // } orderByType(homeTypeList); for (HomeType homeType : homeTypeList) { List homeVideoList = homeType.getHomeVideoList(); for (HomeVideo homeVideo : homeVideoList) { String vid = homeVideo.getVideo().getId(); SQLQuery query = session.createSQLQuery("select vt.name from wk_video_type vt where vt.id = (select cv.videotypeid from wk_category_video cv where cv.videoid= ? LIMIT 0,1)"); query.setParameter(0, vid); String vtName = (String) query.uniqueResult(); VideoType vt = new VideoType(); vt.setName(vtName); homeVideo.getVideo().setVideoType(vt); } } return homeTypeList; } catch (Exception e) { e.printStackTrace(); } return null; } }); } private void orderByType(List homeTypeList) { Collections.sort(homeTypeList, new Comparator() { public int compare(HomeType o1, HomeType o2) { return Integer.parseInt(o2.getOrderby())-Integer.parseInt(o1.getOrderby()); } }); } private void orderByVideo(List list) { Collections.sort(list, new Comparator() { @Override public int compare(HomeVideo o1, HomeVideo o2) { return o2.getOrderby()-o1.getOrderby(); } }); } private int index(List list, HomeType ht) { if (list == null) return -1; for (int i = 0; i < list.size(); i++) { if (list.get(i).getId().equalsIgnoreCase(ht.getId())) return i; } return -1; } public List getHomeType(String detailSystem) { List list = homeTypeDao.list("select h.homeType from SuperHomeType h where h.detailSystem.id=" + detailSystem + " order by h.homeType.orderby desc"); return getHomeType(list, detailSystem); } public HomeVideo getHomeVideoById(String homeVideoId) { return homeVideoDao.find(HomeVideo.class, homeVideoId); } public HomeType getHomeTypeById(String id) { return homeTypeDao.find(HomeType.class, id); } public void deleteSuperHomeTypeByType(String homeType) { List list = superHomeTypeDao.list("from SuperHomeType sh where sh.homeType.id=" + homeType); for (SuperHomeType sht : list) { superHomeTypeDao.delete(sht); } } @SuppressWarnings({ "unchecked", "rawtypes" }) public void deleteHomeType(final String id) { homeTypeDao.excute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { try { session.getTransaction().begin(); List spList = session.createQuery("from SuperHomeType sht where sht.homeType.id=?") .setParameter(0, id).list(); for (SuperHomeType sp : spList) session.delete(sp); List homeVideoList = session.createQuery("from HomeVideo hv where hv.type.id=?") .setParameter(0, id).list(); for (HomeVideo sp : homeVideoList) session.delete(sp); HomeType ht = (HomeType) session.get(HomeType.class, id); session.delete(ht); session.flush(); session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); } return null; } }); } public void updateHomeType(HomeType type) { homeTypeDao.update(type); } public void updateHomeVideo(HomeVideo type) { homeVideoDao.update(type); } public List getDetailSystemSelectByType(String homeType) { List li = new ArrayList(); List list = detailSystemDao .list("select sht.detailSystem from SuperHomeType sht where sht.homeType.id=" + homeType); List sdList = detailSystemDao.list("from DetailSystem"); for (DetailSystem ds : sdList) { boolean contains = false; for (DetailSystem dsm : list) { if (dsm.getId().equalsIgnoreCase(ds.getId())) { contains = true; break; } } DetailSystemSelect dss = new DetailSystemSelect(); dss.setSelected(contains ? true : false); dss.setDetailSystem(ds); li.add(dss); } return li; } public void addHomeTypeVideo(HomeVideo video) { long count = homeVideoDao.getCount("select count(*) from HomeVideo h where h.type.id=? and h.video.id=?", new String[] { video.getType().getId(), video.getVideo().getId() }); if (count <= 0L) homeVideoDao.create(video); } public void addHomeTypeVideo(List list) { HomeVideo info; for (Iterator iterator = list.iterator(); iterator.hasNext(); addHomeTypeVideo(info)) info = (HomeVideo) iterator.next(); } public void deleteHomeVideo(HomeVideo video) { homeVideoDao.delete(video); } public void deleteHomeTypeVideo(List list) { HomeVideo video; for (Iterator iterator = list.iterator(); iterator.hasNext(); deleteHomeVideo(video)) video = (HomeVideo) iterator.next(); } public long getHomeVideoCount(String homeId) { return homeVideoDao.getCount("from HomeVideo h where h.type.id=?", new String[] { homeId }); } public long getHomeTypeVideoPage(String homeId) { long count = getHomeVideoCount(homeId); return count % (long) Constant.pageCount != 0L ? count / (long) Constant.pageCount + 1L : count / (long) Constant.pageCount; } public List getHomeVideoList(String homeId, int page) { return homeVideoDao.list( "from HomeVideo h where h.type.id=? order by h.video.orderby desc,h.video.watchCount desc,h.createtime desc", (page - 1) * Constant.pageCount, Constant.pageCount, new String[] { homeId }); } public List getHomeVideoList(String homeId, String key, int page) { return homeVideoDao.list( "from HomeVideo h where h.type.id=? and h.video.name like ? order by h.video.orderby desc,h.video.watchCount desc,h.createtime desc", (page - 1) * Constant.pageCount, Constant.pageCount, new String[] { homeId, "%" + key + "%" }); } public long getHomeVideoListCount(String homeId, String key) { return homeVideoDao.getCount("select count(*) from HomeVideo h where h.type.id=? and h.video.name like ? ", new String[] { homeId, "%" + key + "%" }); } public Serializable addHomeType(HomeType type) { return homeTypeDao.save(type); } @SuppressWarnings("unchecked") private List getHomeType(final List list) { homeTypeDao.excute(new HibernateCallback>() { public List doInHibernate(Session session) throws HibernateException { try { for (int i = 0; i < list.size(); i++) { List videoList = session .createQuery( "select h from HomeVideo h LEFT JOIN h.video as v where v.id=h.video.id and h.video.show='1' and hometype=:hometype order by v.orderby desc,v.watchCount desc,h.createtime desc") .setParameter("hometype", ((HomeType) list.get(i)).getId()).setFirstResult(0) .setMaxResults(list.get(i).getNumber()).list(); ((HomeType) list.get(i)).setHomeVideoList(videoList); } } catch (Exception e) { e.printStackTrace(); } return list; } }); return list; } @SuppressWarnings("unchecked") private List getHomeType(final List list, final String detailSystem) { return (List) homeTypeDao.excute(new HibernateCallback>() { public List doInHibernate(Session session) throws HibernateException { try { for (int i = 0; i < list.size(); i++) { List videoList = session .createSQLQuery( "SELECT h.* FROM wk_video_homevideo h LEFT JOIN wk_video_video v ON v.`id`=h.`videoid` LEFT JOIN wk_resource_video rv on rv.videoid= WHERE v.id=h.videoid AND v.show=1 AND h.`hometype`=? ORDER BY v.orderby DESC,v.`watchcount` DESC,h.createtime DESC") .addEntity(HomeVideo.class).setParameter(0, detailSystem) .setParameter(1, ((HomeType) list.get(i)).getId()).setFirstResult(0) .setMaxResults(list.get(i).getNumber()).list(); for (HomeVideo hv : videoList) { if (!StringUtil.isNullOrEmpty(hv.getVideo().getLatestHpicture())) hv.getVideo().setPicture(hv.getVideo().getLatestHpicture()); else hv.getVideo().setPicture(hv.getVideo().getHpicture()); } ((HomeType) list.get(i)).setHomeVideoList(videoList); } } catch (Exception e) { e.printStackTrace(); } return list; } }); } @SuppressWarnings("unchecked") public HomeType getHomeType(final HomeType ht, final String detailSystem) { return (HomeType) homeTypeDao.excute(new HibernateCallback() { public HomeType doInHibernate(Session session) throws HibernateException { try { List videoList = session .createSQLQuery( "SELECT h.* FROM wk_video_homevideo h LEFT JOIN wk_video_video v ON v.`id`=h.`videoid` LEFT JOIN wk_video_banquan_video bv ON bv.`videoid`=v.`id` and bv.detailsystemid=? and bv.show=1 WHERE v.id=h.videoid AND v.show=1 AND h.`hometype`=? and (bv.videoid is null) ORDER BY v.orderby DESC,v.`watchcount` DESC,h.createtime DESC") .addEntity(HomeVideo.class).setParameter(0, detailSystem) .setParameter(1, ((HomeType) ht).getId()).setFirstResult(0).setMaxResults(ht.getNumber()) .list(); ((HomeType) ht).setHomeVideoList(videoList); } catch (Exception e) { e.printStackTrace(); } return ht; } }); } @Cacheable(value = "homeCache", key = "'getVideoByTypes'+'-'+#homeType+'-'+#page+'-'+#ds.id") public List getVideoByTypes(String homeType, int page, DetailSystem ds) { List list = null; String sql = "select h from HomeVideo h LEFT JOIN h.video as v where v.id=h.video.id and h.video.show='1' and h.type.id=? order by h.video.orderby desc,h.video.watchCount desc,h.createtime desc"; if (ds.getPackageName().contains("doudou")) sql = "select h from HomeVideo h LEFT JOIN h.video as v where v.id=h.video.id and h.video.show='1' and h.type.id=? order by h.video.year desc, h.video.month desc,h.video.day desc,h.createtime desc"; list = homeVideoDao.list(sql, (page - 1) * Constant.pageCount, Constant.pageCount, new String[] { homeType }); return list; } public List getIOSTestTypeVideo(String type, int page) { return videoInfoDao.list( "from VideoInfo v where v.videoType.id=" + type + " and v.show=1 order by createtime desc", (page - 1) * Constant.pageCount, Constant.pageCount, new String[] {}); } public long getVideoCountByTypes(String homeType, int page) { return homeVideoDao.getCount( "select count(*) from HomeVideo h LEFT JOIN h.video as v where v.id=h.video.id and h.video.show='1' and h.type.id=?", new String[] { homeType }); } /** * 后台操作 */ @SuppressWarnings("unchecked") public List getHomeTypeAdmin(final String key, final int detailSystem, final int page) { return (List) homeTypeDao.excute(new HibernateCallback>() { public List doInHibernate(Session session) throws HibernateException { List zhiBoClassList = new ArrayList(); try { List detailSystemList = session.createQuery("from DetailSystem").list(); String sql = ""; if (detailSystem > 0) sql = "select sh.homeType from SuperHomeType sh where sh.homeType.name like ? and sh.detailSystem.id=" + detailSystem + " order by sh.homeType.orderby desc"; else sql = "from HomeType zb where zb.name like ? order by zb.orderby desc"; List list = session.createQuery(sql).setParameter(0, "%" + key + "%") .setFirstResult((page - 1) * Constant.pageCount).setMaxResults(Constant.pageCount).list(); for (HomeType vb : list) { List detailSystemS = session .createQuery("select vb.detailSystem from SuperHomeType vb where vb.homeType.id=?") .setParameter(0, vb.getId()).list(); List dssList = new ArrayList(); for (DetailSystem ds : detailSystemList) { DetailSystemSelect dss = new DetailSystemSelect(); dss.setDetailSystem(ds); dss.setSelected(false); dssList.add(dss); } // 设置已经存在的 for (DetailSystem ds : detailSystemS) { for (DetailSystemSelect dss : dssList) { if (dss.getDetailSystem().getId().equalsIgnoreCase(ds.getId())) { dss.setSelected(true); break; } } } SuperHomeType sz = new SuperHomeType(); sz.setDetailSystem(null); sz.setHomeType(vb); zhiBoClassList.add(new HomeTypeAdmin(sz, dssList)); } } catch (Exception e) { e.printStackTrace(); } return zhiBoClassList; } }); } public long getHomeTypeAdminCount(String key, int detailSystem) { String sql = ""; if (detailSystem > 0) sql = "select count(*) from (select count(*) from wk_video_super_hometype zb left join wk_video_hometype c on c.id=zb.hometypeid where zb.detailsystemid=" + detailSystem + " and c.name like '%" + key + "%' group by zb.hometypeid) s"; else // sql = "select count(*) from (select count(*) from wk_video_super_hometype zb left join wk_video_hometype c on c.id=zb.hometypeid where c.name like '%" // + key + "%' group by zb.hometypeid) s"; sql="select count(*) from wk_video_hometype where `name` like '%"+key+"%'"; return homeTypeDao.getCountSQL(sql); } @SuppressWarnings({ "unchecked", "rawtypes" }) public void deleteHomeTypeAdmin(final String classId, final String detailSystemId) { homeTypeDao.excute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { try { List list = session .createQuery("from SuperHomeType vb where vb.homeType.id=? and vb.detailSystem.id=?") .setParameter(0, classId).setParameter(1, detailSystemId).list(); session.getTransaction().begin(); if (list != null && list.size() > 0) { for (SuperHomeType vb : list) session.delete(vb); } session.flush(); session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); session.getTransaction().rollback(); } return null; } }); } public List getSuperHomeTypeList(String detailSystemId) { return homeTypeDao.list("select sh.homeType from SuperHomeType sh where sh.detailSystem.id=" + detailSystemId); } // 更新广告列表 @SuppressWarnings("unchecked") public void updateSuperHomeTypeList(final String detailSystemId, final List typeList) { homeTypeDao.excute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { try { List list = session .createQuery("from SuperHomeType sh where sh.detailSystem.id=" + detailSystemId).list(); session.getTransaction().begin(); for (SuperHomeType ad : list) { session.delete(ad); } for (HomeType homeType : typeList) { SuperHomeType shd = new SuperHomeType(); shd.setCreatetime(System.currentTimeMillis() + ""); shd.setDetailSystem(new DetailSystem(detailSystemId)); shd.setHomeType(homeType); session.persist(shd); } session.flush(); session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); session.getTransaction().rollback(); } return null; } }); } public void addSuperHomeType(SuperHomeType sv) { List list = superHomeTypeDao.list( "from SuperHomeType sv where sv.homeType.id=? and sv.detailSystem.id=?", new String[] { sv.getHomeType().getId(), sv.getDetailSystem().getId() }); if (list != null && list.size() > 0) return; superHomeTypeDao.create(sv); } }