admin
2021-08-27 8fee151ffae0c3818694b7318583814bf92663e2
src/main/java/com/yeshi/buwan/service/imp/juhe/Iqiyi2ServiceImpl.java
@@ -6,20 +6,34 @@
import com.yeshi.buwan.dao.video.AlbumVideoMapDao;
import com.yeshi.buwan.domain.*;
import com.yeshi.buwan.domain.entity.PlayUrl;
import com.yeshi.buwan.domain.solr.SolrAlbumVideo;
import com.yeshi.buwan.domain.system.SystemConfig;
import com.yeshi.buwan.domain.video.AlbumVideoMap;
import com.yeshi.buwan.iqiyi.IqiYiNewAPI;
import com.yeshi.buwan.iqiyi.entity.IqiyiAlbum2;
import com.yeshi.buwan.iqiyi.entity.VideoIqiyi2;
import com.yeshi.buwan.iqiyi.util.IqiyiUtil;
import com.yeshi.buwan.iqiyi.util.IqiyiUtil2;
import com.yeshi.buwan.dto.mq.UpdateResourceVideoMQMsg;
import com.yeshi.buwan.exception.video.IqiyiVideoSolrException;
import com.yeshi.buwan.videos.iqiyi.IqiYiNewAPI;
import com.yeshi.buwan.videos.iqiyi.entity.IqiyiAlbum2;
import com.yeshi.buwan.videos.iqiyi.entity.VideoIqiyi2;
import com.yeshi.buwan.videos.iqiyi.util.IqiyiUtil;
import com.yeshi.buwan.videos.iqiyi.util.IqiyiUtil2;
import com.yeshi.buwan.query.Iqiyi2AlbumQuery;
import com.yeshi.buwan.service.imp.CategoryVideoService;
import com.yeshi.buwan.service.imp.ResourceVideoService;
import com.yeshi.buwan.service.imp.VideoInfoService;
import com.yeshi.buwan.service.imp.VideoResourceService;
import com.yeshi.buwan.service.inter.juhe.AlbumVideoMapService;
import com.yeshi.buwan.service.inter.juhe.Iqiyi2Service;
import com.yeshi.buwan.service.inter.system.SystemConfigService;
import com.yeshi.buwan.service.manager.search.SolrAlbumVideoDataManager;
import com.yeshi.buwan.util.StringUtil;
import com.yeshi.buwan.util.ThreadUtil;
import com.yeshi.buwan.util.TimeUtil;
import com.yeshi.buwan.util.log.VideoLogFactory;
import com.yeshi.buwan.util.mq.CMQManager;
import com.yeshi.buwan.util.video.VideoConstant;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -32,6 +46,9 @@
@Service
public class Iqiyi2ServiceImpl implements Iqiyi2Service {
    private final Logger logger = LoggerFactory.getLogger("videoUpdate");
    @Resource
    private VideoIqiyi2Dao videoIqiyi2Dao;
@@ -56,18 +73,41 @@
    @Resource
    private VideoResourceService videoResourceService;
    public List<VideoDetailInfo> getVideoDetailList(String videoId) {
    @Resource
    private SystemConfigService systemConfigService;
    @Resource
    private AlbumVideoMapService albumVideoMapService;
    @Resource
    private SolrAlbumVideoDataManager solrAlbumVideoDataManager;
    public List<VideoDetailInfo> getVideoDetailList(String videoId, int page, int pageSize) {
        //查询专辑
        VideoIqiyi2 videoIqiyi2 = videoIqiyi2Dao.selectByVideoId(Long.parseLong(videoId));
        if (videoIqiyi2 == null)
            return null;
        IqiyiAlbum2 album = iqiyiAlbum2Dao.get(videoIqiyi2.getIqiyiId());
        final IqiyiAlbum2 album = iqiyiAlbum2Dao.get(videoIqiyi2.getIqiyiId());
//        if (album != null) {
        ThreadUtil.run(new Runnable() {
            @Override
            public void run() {
                CMQManager.getInstance().addUpdateResourceVideoMsg(new UpdateResourceVideoMQMsg(videoIqiyi2.getIqiyiId() + "", IqiyiUtil2.RESOURCE_ID, new Date()));
            }
        });
//        }
        List<IqiyiAlbum2> album2List = new ArrayList<>();
        if (album.getFeatureAlbumId() > 0) {//单视频
            album2List.add(album);
        } else {//专辑
            List<IqiyiAlbum2> list = iqiyiAlbum2Dao.listByAid(album.getId(), 0, 1000);
            //判断period字段是否为空
            int sort = album.isSourceAlbum() ? IqiyiAlbum2.SORT_PERIOD : IqiyiAlbum2.SORT_ORDER;
            Iqiyi2AlbumQuery query = new Iqiyi2AlbumQuery();
            query.setFeatureAlbumId(album.getId());
            query.setContentType(1);
            List<IqiyiAlbum2> list = iqiyiAlbum2Dao.listByAid(query, sort, (page - 1) * pageSize, pageSize);
            if (list != null)
                album2List.addAll(list);
        }
@@ -100,10 +140,38 @@
    }
    @Override
    public void offlineIqiyiAlbum(Long id) {
        //删除专辑
        Query query = new Query();
        query.addCriteria(new Criteria().orOperator(Criteria.where("id").is(id), Criteria.where("featureAlbumId").is(id)));
        //删除专辑下的视频
        iqiyiAlbum2Dao.delete(query);
    }
    public boolean isUnNormalUpdateVideoName(String name) {
        SystemConfig config = systemConfigService.getConfigByKeyCache("iqiyi_update_video_name");
        if (config != null) {
            String[] sts = config.getValue().split(",");
            List<String> list = new ArrayList<>();
            for (String st : sts) {
                list.add(st.trim());
            }
            return list.contains(name.trim());
        }
        return false;
    }
    @Override
    public void addToVideoInfo(IqiyiAlbum2 album) {
        if (album.getFeatureAlbumId() > 0L && album.getChannelId() != IqiYiNewAPI.TYPE_DIANYING) {
            return;
        }
        if (StringUtil.isNullOrEmpty(album.getName())) {
            return;
        }
        //只缓存有效的
        if (album.getEffect() == 0)
@@ -119,11 +187,18 @@
                return;
        }
        //标题中只能包含中英文与数字
        String regx = "^[(\\u4e00-\\u9fa5)( )a-zA-Z0-9]+$";
        if (!Pattern.matches(regx, album.getName())) {
            return;
        if (album.getChannelId() != 1 && !isUnNormalUpdateVideoName(album.getName())) {
            //标题中只能包含中英文与数字
            String regx = "^[(\\u4e00-\\u9fa5)(:)( )a-zA-Z0-9]+$";
            if (!Pattern.matches(regx, album.getName())) {
                return;
            }
        }
        //过滤某些短片与影评
        if (album.getName().contains("《") && !isUnNormalUpdateVideoName(album.getName()))
            return;
        //空电视剧或者是空动漫则返回
        if (album.getChannelId() == 2 || album.getChannelId() == 4) {
@@ -131,6 +206,7 @@
                return;
        }
        logger.info(VideoLogFactory.createAddToVideoLog(album));
        VideoInfo newVideoInfo = convertAlbumToVideoInfo(album);
        VideoIqiyi2 videoIqiyi2 = videoIqiyi2Dao.selectByIqiyiId(album.getId());
@@ -139,7 +215,7 @@
            if (videoInfo == null)
                return;
            newVideoInfo.setId(videoInfo.getId());
            if (!newVideoInfo.getTag().equalsIgnoreCase(videoInfo.getTag())) {
            if (!newVideoInfo.getTag().equalsIgnoreCase(videoInfo.getTag()) || newVideoInfo.getVideocount() != videoInfo.getVideocount()) {
                newVideoInfo.setCreatetime(videoInfo.getCreatetime());
                //更新信息tag信息
                videoInfo.setLatestHpicture(newVideoInfo.getLatestHpicture());
@@ -151,11 +227,12 @@
                videoInfo.setVpicture(newVideoInfo.getVpicture());
                videoInfo.setShow(newVideoInfo.getShow());
                videoInfo.setVideoType(newVideoInfo.getVideoType());
                videoInfo.setUpdatetime(newVideoInfo.getUpdatetime());
                videoInfoDao.update(videoInfo);
            }
        } else {//视频不存在
            //判断2个视频实体是否为同一视频
            VideoInfo oldVideo = videoInfoService.getExistSameVideo(newVideoInfo);
            VideoInfo oldVideo = videoInfoService.getExistSameVideoWithTime(newVideoInfo);
            if (oldVideo == null) {
                //添加视频
                Serializable id = videoInfoDao.save(newVideoInfo);
@@ -172,11 +249,13 @@
                oldVideo.setVpicture(newVideoInfo.getVpicture());
                oldVideo.setShow(newVideoInfo.getShow());
                oldVideo.setVideoType(newVideoInfo.getVideoType());
                oldVideo.setUpdatetime(newVideoInfo.getUpdatetime());
                videoInfoDao.update(oldVideo);
            }
            //加入专辑视频映射
            AlbumVideoMap map = new AlbumVideoMap();
            map.setId(newVideoInfo.getId());
            map.setCreateTime(new Date());
            map.setVideoId(newVideoInfo.getId());
            map.setRootVideoType(newVideoInfo.getVideoType().getId());
@@ -200,6 +279,7 @@
    @Override
    public PlayUrl getPlayUrl(String detailSystemId, int resourceId, String id, String videoId) {
        IqiyiAlbum2 album = iqiyiAlbum2Dao.get(Long.parseLong(id));
        VideoResource vr = videoResourceService.getResource(resourceId + "");
        int t = IqiyiUtil2.getPlayType(album);
@@ -213,16 +293,31 @@
        } else if (t == IqiyiUtil2.PLAY_HTML) {
            pu.setUrl(album.getH5Url());
        }
        //韩剧
        if ("48".equalsIgnoreCase(detailSystemId)) {
            pu.setUrl(pu.getUrl().replace("_bwap", "_hjvap"));
        }
        return pu;
    }
    @Override
    public int getShowType(String videoid) {
        VideoInfo videoInfo = videoInfoDao.find(VideoInfo.class, videoid);
        if (videoInfo.getVideoType() != null && (videoInfo.getVideoType().getId() == VideoConstant.VIDEO_CATEGORY_DIANSHIJU || videoInfo.getVideoType().getId() == VideoConstant.VIDEO_CATEGORY_DONGMAN))
            return 2;
        else
            return 1;
        VideoIqiyi2 iqiyi2 = videoIqiyi2Dao.selectByVideoId(Long.parseLong(videoid));
        if (iqiyi2 != null) {
            IqiyiAlbum2 album2 = iqiyiAlbum2Dao.get(iqiyi2.getIqiyiId());
            if (album2 != null) {
                if (album2.getChannelId() == 4 || album2.getChannelId() == 2) {
                    if (album2.isSourceAlbum()) {
                        return 1;
                    } else
                        return 2;
                }
            }
        }
        return 1;
    }
    @Override
@@ -287,11 +382,11 @@
                video.setLatestVpicture(IqiyiUtil.getVPicture(album2.getImageUrl()));
            }
        }
        long videoCount = iqiyiAlbum2Dao.countVideoByAid(album.getId());
        if (videoCount == 0L)
            videoCount = 1;
        if (album.getTvQipuIds() != null && album.getTvQipuIds().size() > 0)
            video.setVideocount(album.getTvQipuIds().size());
        else
            video.setVideocount(1);
        video.setVideocount((int) videoCount);
        video.setUpdatetime(System.currentTimeMillis() + "");
@@ -303,4 +398,55 @@
    public IqiyiAlbum2 selectAlbumById(Long id) {
        return iqiyiAlbum2Dao.get(id);
    }
    @Override
    public long countById(Long id) {
        return iqiyiAlbum2Dao.countById(id);
    }
    @Override
    public void deleteByAid(long id) {
        long count = iqiyiAlbum2Dao.countById(id);
        if (count > 0) {
            iqiyiAlbum2Dao.delete(id);
        }
        VideoIqiyi2 bean = videoIqiyi2Dao.selectByIqiyiId(id);
        if (bean != null) {
            videoIqiyi2Dao.deleteById(bean.getVideoId());
            //删除资源
            resourceVideoService.delete(bean.getVideoId() + "", IqiyiUtil2.RESOURCE_ID + "");
            resourceVideoService.delete(bean.getVideoId() + "", IqiyiUtil.RESOURCE_ID + "");
        }
    }
    @Override
    public List<IqiyiAlbum2> listByIds(List<Long> idsList) {
        return iqiyiAlbum2Dao.listByIds(idsList);
    }
    @Override
    public void validAlbumSolrState(Long albumId) throws IqiyiVideoSolrException {
        long count = iqiyiAlbum2Dao.countById(albumId);
        if (count <= 0L) {
            throw new IqiyiVideoSolrException(IqiyiVideoSolrException.CODE_ALBUM_NOT_SAVE, "专辑尚未缓存");
        }
        VideoIqiyi2 videoIqiyi2 = videoIqiyi2Dao.selectByIqiyiId(albumId);
        if (videoIqiyi2 == null) {
            throw new IqiyiVideoSolrException(IqiyiVideoSolrException.CODE_ALBUM_NOT_ADD_TO_VIDEO, "专辑尚未添加到视频总览");
        }
        AlbumVideoMap albumVideoMap = albumVideoMapService.selectByVideoId(videoIqiyi2.getVideoId() + "");
        if (albumVideoMap == null) {
            throw new IqiyiVideoSolrException(IqiyiVideoSolrException.CODE_VIDEO_NOT_ADD_TO_SOLR_ALBUM, "视频未添加到专辑搜索映射");
        }
        SolrAlbumVideo solrAlbumVideo = solrAlbumVideoDataManager.findOne(videoIqiyi2.getVideoId());
        if (solrAlbumVideo == null) {
            throw new IqiyiVideoSolrException(IqiyiVideoSolrException.CODE_VIDEO_NOT_SYNC_TO_SOLR, "视频尚未同步到搜索引擎");
        }
    }
}