| | |
| | | package com.yeshi.buwan.service.imp.juhe; |
| | | |
| | | import com.yeshi.buwan.dao.juhe.tencent.TencentCoverInfoDao; |
| | | import com.yeshi.buwan.dao.juhe.tencent.TencentCoverVideoDao; |
| | | import com.yeshi.buwan.dao.juhe.tencent.TencentSearchVideoMapDao; |
| | | import com.yeshi.buwan.domain.VideoDetailInfo; |
| | | import com.yeshi.buwan.domain.video.InternetSearchVideo; |
| | | import com.yeshi.buwan.service.inter.juhe.InternetSearchVideoService; |
| | | import com.yeshi.buwan.service.inter.juhe.TencentVideoService; |
| | | import com.yeshi.buwan.tencent.entity.TencentCoverInfo; |
| | | import com.yeshi.buwan.youku.entity.YouKuShowDetail; |
| | | import com.yeshi.buwan.youku.entity.YouKuVideo; |
| | | import com.yeshi.buwan.util.TimeUtil; |
| | | import com.yeshi.buwan.util.video.web.TencentWebUtil; |
| | | import com.yeshi.buwan.videos.tencent.TencentVideoApiUtil; |
| | | import com.yeshi.buwan.videos.tencent.TencentVideoUtil; |
| | | import com.yeshi.buwan.videos.tencent.entity.TencentCoverInfo; |
| | | import com.yeshi.buwan.videos.tencent.entity.TencentCoverVideo; |
| | | import com.yeshi.buwan.videos.tencent.entity.TencentSearchVideoMap; |
| | | import com.yeshi.buwan.util.factory.InternetSearchVideoFactory; |
| | | import com.yeshi.buwan.videos.tencent.vo.TencentCoverInfoVO; |
| | | import org.springframework.data.domain.Sort; |
| | | import org.springframework.data.mongodb.core.query.Criteria; |
| | | import org.springframework.data.mongodb.core.query.Query; |
| | | import org.springframework.data.mongodb.core.query.Update; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.*; |
| | | |
| | | @Service |
| | | public class TencentVideoServiceImpl implements TencentVideoService { |
| | | |
| | | @Resource |
| | | private TencentSearchVideoMapDao tencentSearchVideoMapDao; |
| | | |
| | | @Resource |
| | | private TencentCoverInfoDao tencentCoverInfoDao; |
| | | @Resource |
| | | private TencentCoverVideoDao tencentCoverVideoDao; |
| | | @Resource |
| | | private InternetSearchVideoService internetSearchVideoService; |
| | | |
| | | @Override |
| | | public void save(TencentCoverInfo detail) { |
| | | public void save(TencentCoverInfo detail) throws Exception { |
| | | if (detail.getUpdateTime() == null) |
| | | detail.setUpdateTime(new Date()); |
| | | tencentCoverInfoDao.save(detail); |
| | | if (detail.getVideoList() != null) |
| | | for (TencentCoverVideo video : detail.getVideoList()) { |
| | | if (video.getUpdateTime() == null) { |
| | | video.setUpdateTime(new Date()); |
| | | } |
| | | tencentCoverVideoDao.save(video); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public TencentCoverInfo getConverDetail(String id) { |
| | | TencentCoverInfo detail = tencentCoverInfoDao.get(id); |
| | | public TencentCoverInfo getCoverDetail(String coverId) { |
| | | TencentCoverInfo detail = tencentCoverInfoDao.get(coverId); |
| | | Query query = new Query(); |
| | | if (detail != null) { |
| | | query.addCriteria(Criteria.where("coverId").is(coverId)); |
| | | } |
| | | query.with(new Sort(new Sort.Order(Sort.Direction.ASC, "position"))); |
| | | List<TencentCoverVideo> videoList = tencentCoverVideoDao.findList(query); |
| | | detail.setVideoList(videoList); |
| | | return detail; |
| | | } |
| | | |
| | | @Override |
| | | public long count(String type) { |
| | | public TencentCoverInfo getSimpleCoverDetail(String coverId) { |
| | | Query query=new Query(); |
| | | query.addCriteria(Criteria.where("_id").is(coverId)); |
| | | |
| | | TencentCoverInfo detail = tencentCoverInfoDao.findOne(query); |
| | | return detail; |
| | | } |
| | | |
| | | @Override |
| | | public List<TencentCoverVideo> getVideoList(String coverId, int page, int pageSize) { |
| | | Query query = new Query(); |
| | | if (type != null) |
| | | query.addCriteria(Criteria.where("type").is(type)); |
| | | query.addCriteria(Criteria.where("coverId").is(coverId)); |
| | | query.with(new Sort(new Sort.Order(Sort.Direction.ASC, "position"))); |
| | | query.skip((page - 1) * pageSize); |
| | | query.limit(pageSize); |
| | | List<TencentCoverVideo> videoList = tencentCoverVideoDao.findList(query); |
| | | return videoList; |
| | | } |
| | | |
| | | @Override |
| | | public TencentCoverVideo getVideoDetail(String id) { |
| | | return tencentCoverVideoDao.get(id); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public long count(String category) { |
| | | Query query = new Query(); |
| | | if (category != null) |
| | | query.addCriteria(Criteria.where("type_name").is(category)); |
| | | return tencentCoverInfoDao.count(query); |
| | | } |
| | | |
| | | @Override |
| | | public List<TencentCoverInfo> list(String type, int page, int pageSize) { |
| | | public List<TencentCoverInfo> list(String category, int page, int pageSize) { |
| | | Query query = new Query(); |
| | | if (type != null) |
| | | query.addCriteria(Criteria.where("type").is(type)); |
| | | if (category != null) |
| | | query.addCriteria(Criteria.where("type_name").is(category)); |
| | | query.limit(pageSize); |
| | | query.skip((page - 1) * pageSize); |
| | | return tencentCoverInfoDao.findList(query); |
| | | } |
| | | |
| | | @Override |
| | | public List<VideoDetailInfo> getVideoDetailList(String videoid, int page, int pageSize) { |
| | | TencentSearchVideoMap map = tencentSearchVideoMapDao.selectByVideoId(videoid); |
| | | if (map == null) |
| | | return null; |
| | | TencentCoverInfo coverInfo = tencentCoverInfoDao.get(map.getCoverId()); |
| | | |
| | | return TencentVideoUtil.convertToDetail(getVideoList(map.getCoverId(), page, pageSize), coverInfo); |
| | | } |
| | | |
| | | @Override |
| | | public TencentSearchVideoMap selectMapByVideoId(String videoId) { |
| | | TencentSearchVideoMap map = tencentSearchVideoMapDao.selectByVideoId(videoId); |
| | | return map; |
| | | } |
| | | |
| | | @Override |
| | | public void addToInternetSearch(TencentCoverInfo showDetail, boolean saveCoverInfo) throws Exception { |
| | | if(saveCoverInfo) { |
| | | save(showDetail); |
| | | } |
| | | InternetSearchVideo video = InternetSearchVideoFactory.create(showDetail); |
| | | if (internetSearchVideoService.save(video) == null) { |
| | | return; |
| | | } |
| | | TencentSearchVideoMap map = new TencentSearchVideoMap(); |
| | | map.setCoverId(showDetail.getCover_id()); |
| | | map.setVideoId(video.getId()); |
| | | map.setCreateTime(new Date()); |
| | | tencentSearchVideoMapDao.save(map); |
| | | } |
| | | |
| | | /** |
| | | * @author hxh |
| | | * @description 从全网搜移除 |
| | | * @date 18:27 2024/8/16 |
| | | * @param: coverId |
| | | * @return void |
| | | **/ |
| | | private void removeFromInternetSearch(String coverId){ |
| | | Query query=new Query(); |
| | | query.addCriteria(Criteria.where("coverId").is(coverId)); |
| | | List<TencentSearchVideoMap> mapList = tencentSearchVideoMapDao.findList(query); |
| | | // 删除map |
| | | for(TencentSearchVideoMap map:mapList){ |
| | | tencentSearchVideoMapDao.deleteByPrimaryKey(map.getVideoId()); |
| | | internetSearchVideoService.removeResourceId( map.getVideoId(), TencentVideoUtil.RESOURCE_ID); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void clearOfflineCovers() { |
| | | // 拉取长期没有更新的专辑 |
| | | Query query=new Query(); |
| | | query.addCriteria(Criteria.where("updateTime").lte(new Date(System.currentTimeMillis()-1000*60*60*24L*5))); |
| | | query.with(new Sort(new Sort.Order(Sort.Direction.ASC, "updateTime"))); |
| | | query.skip(0); |
| | | query.limit(100); |
| | | List<TencentCoverInfo> list = tencentCoverInfoDao.findList(query); |
| | | for(TencentCoverInfo coverInfo:list){ |
| | | try { |
| | | boolean onLine = TencentVideoApiUtil.isOnLine(coverInfo.getVideoList().get(0).getLink()); |
| | | if(onLine){ |
| | | Query updateQuery=new Query(); |
| | | updateQuery.addCriteria(Criteria.where("_id").is(coverInfo.getCover_id())); |
| | | Update update=new Update(); |
| | | update.set("updateTime",new Date()); |
| | | tencentCoverInfoDao.update(updateQuery, update); |
| | | }else{ |
| | | // 删除数据 |
| | | Query updateQuery=new Query(); |
| | | updateQuery.addCriteria(Criteria.where("_id").is(coverInfo.getCover_id())); |
| | | tencentCoverInfoDao.delete(updateQuery); |
| | | } |
| | | Thread.sleep(1000); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | // 删除全网搜里面此来源的视频已经被删除 |
| | | query = new Query(); |
| | | long count = tencentSearchVideoMapDao.count(query); |
| | | int pageSize = 100; |
| | | int page =(int) (count%pageSize==0?count/pageSize:count/pageSize+1); |
| | | Set<String> deletedCoverIds = new HashSet<>(); |
| | | for(int i=0;i<page;i++){ |
| | | query.skip(i*pageSize); |
| | | query.limit(pageSize); |
| | | List<TencentSearchVideoMap> mapList = tencentSearchVideoMapDao.findList(query); |
| | | for(TencentSearchVideoMap map:mapList){ |
| | | Query cquery=new Query(); |
| | | cquery.addCriteria(Criteria.where("_id").is(map.getCoverId())); |
| | | if(tencentCoverInfoDao.findOne(cquery)==null){ |
| | | deletedCoverIds.add(map.getCoverId()); |
| | | removeFromInternetSearch(map.getCoverId()); |
| | | tencentSearchVideoMapDao.deleteByPrimaryKey(map.getVideoId()); |
| | | } |
| | | } |
| | | } |
| | | System.out.println(deletedCoverIds); |
| | | } |
| | | |
| | | } |