package com.yeshi.buwan.util; import com.alibaba.druid.pool.DruidDataSource; import com.yeshi.buwan.dao.juhe.iqiyi.VideoIqiyi2Dao; import com.yeshi.buwan.domain.ResourceVideo; import com.yeshi.buwan.domain.VideoInfo; import com.yeshi.buwan.domain.VideoResource; import com.yeshi.buwan.domain.video.InternetSearchVideo; import com.yeshi.buwan.dto.mq.*; import com.yeshi.buwan.videos.funtv.entity.FunTVAlbum2; 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.IqiyiUtil2; import com.yeshi.buwan.videos.pptv.entity.PPTVSeries; import com.yeshi.buwan.service.imp.JobThreadExecutorServiceImpl; import com.yeshi.buwan.service.imp.ResourceVideoService; import com.yeshi.buwan.service.imp.VideoInfoService; import com.yeshi.buwan.service.inter.juhe.FunTV2Service; import com.yeshi.buwan.service.inter.juhe.InternetSearchVideoService; import com.yeshi.buwan.service.inter.juhe.Iqiyi2Service; import com.yeshi.buwan.service.inter.juhe.PPTVService; import com.yeshi.buwan.service.manager.search.SolrAlbumVideoDataManager; import com.yeshi.buwan.service.manager.search.SolrInternetSearchVideoDataManager; import com.yeshi.buwan.util.mq.CMQManager; import io.seata.rm.datasource.DataSourceProxy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; /** * 系统初始化 * * @author Administrator */ @Component public class SpringContext implements ApplicationListener { @Resource private VideoInfoService videoInfoService; @Resource private SolrAlbumVideoDataManager solrDataManager; @Resource private Iqiyi2Service iqiyi2Service; @Resource private IqiyiUtil2 iqiyiUtil2; @Resource private FunTV2Service funTV2Service; @Resource private ResourceVideoService resourceVideoService; @Resource private PPTVService pptvService; private static boolean isInited = false; private final static Logger logger = LoggerFactory.getLogger(SpringContext.class); public void onApplicationEvent(ContextRefreshedEvent arg0) { if (arg0.getApplicationContext().getParent() != null) { System.out.println(System.currentTimeMillis()); onApplication(arg0); } } @Bean public DataSourceProxy dataSourceProxy(DruidDataSource druidDataSource) { return new DataSourceProxy(druidDataSource); } private synchronized void onApplication(ContextRefreshedEvent context) { if (!isInited) { isInited = true; System.out.println("系统初始化成功"); init(); } } private void init() { logger.error("初始化"); if (!Constant.JobTasker) { doSolrJob(); doAddIqiyi2Video(); doAddFunTV2Video(); doAddPPTVVideo(); doDeleteVideoResource(); doUpdateVideoExtraInfo(); doInternetSearchVideoUpdateJob(); doUpdateResourceVideoJob(); } // doUpdateResourceVideoJob(); } private void doSolrJob() { for (int i = 0; i < 5; i++) { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { logger.info("doSolrJob"); List solrMsgList = CMQManager.getInstance().consumeSolrMsg(16); if (solrMsgList != null) for (SolrVideoMQMsg solrVideo : solrMsgList) { try { VideoInfo videoInfo = videoInfoService.getVideoInfo(solrVideo.getId()); if (videoInfo != null) { if ("1".equalsIgnoreCase(videoInfo.getShow())) { List resourceList = new ArrayList<>(); List rvList = resourceVideoService.getResourceList(videoInfo.getId()); if (rvList != null) for (ResourceVideo rv : rvList) resourceList.add(rv.getResource()); videoInfo.setResourceList(resourceList); solrDataManager.saveOrUpdate(videoInfo); } else solrDataManager.deleteById(videoInfo.getId()); } else {//视频已经删除 solrDataManager.deleteById(solrVideo.getId()); } CMQManager.getInstance().deleteSolrMsg(solrVideo.getHandler()); } catch (Exception e) { logger.error("添加到搜索引擎出错", e); } } } }); } } @Resource private InternetSearchVideoService internetSearchVideoService; @Resource private SolrInternetSearchVideoDataManager solrInternetSearchVideoDataManager; private void doInternetSearchVideoUpdateJob() { for (int i = 0; i < 1; i++) { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { List solrMsgList = CMQManager.getInstance().consumeInternetSearchVideoUpdateMsg(16); if (solrMsgList != null) for (InternetSearchVideoMQMsg solrVideo : solrMsgList) { try { InternetSearchVideo video = internetSearchVideoService.selectByPrimaryKey(solrVideo.getId()); if (video != null) solrInternetSearchVideoDataManager.saveOrUpdate(video); else solrInternetSearchVideoDataManager.deleteById(video.getId()); CMQManager.getInstance().deleteInternetSearchVideoUpdateMsg(solrVideo.getHandler()); } catch (Exception e) { logger.error("更新全网搜搜索引擎出错", e); } } } }); } } @Resource private RedisManager redisManager; @Resource private VideoIqiyi2Dao videoIqiyi2Dao; private void doUpdateResourceVideoJob() { for (int i = 0; i < 1; i++) { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { System.out.println("消费结束:doUpdateResourceVideoJob"); List msgList = CMQManager.getInstance().consumeUpdateResourceVideoMsg(16); System.out.println("消费结束:doUpdateResourceVideoJob"); if (msgList != null) for (UpdateResourceVideoMQMsg videoMQMsg : msgList) { try { if (videoMQMsg != null) { String key = "resourcevideo-update-" + StringUtil.Md5(videoMQMsg.getResourceId() + "#" + videoMQMsg.getId()); //可以更新 if (StringUtil.isNullOrEmpty(redisManager.getCommonString(key))) { //12小时内不再更新 redisManager.cacheCommonString(key, "1", 60 * 60 * 12); switch (videoMQMsg.getResourceId()) { case IqiyiUtil2 .RESOURCE_ID: //redis查询是否更新过 IqiyiAlbum2 iqiyiAlbum2 = IqiYiNewAPI.getAlbumOrVideoDetail(Long.parseLong(videoMQMsg.getId())); if (iqiyiAlbum2 == null) { VideoIqiyi2 videoIqiyi2 = videoIqiyi2Dao.selectByIqiyiId(Long.parseLong(videoMQMsg.getId())); if (videoIqiyi2 != null) { //下架 resourceVideoService.delete(videoIqiyi2.getVideoId() + "", videoMQMsg.getResourceId() + ""); } //删除爱奇艺资源 iqiyi2Service.offlineIqiyiAlbum(Long.parseLong(videoMQMsg.getId())); } else { //保存 iqiyiUtil2.syncByAid(iqiyiAlbum2.getId(), false); } break; } } } } catch (Exception e) { } finally { CMQManager.getInstance().deleteUpdateResourceVideoMsg(videoMQMsg.getHandler()); } } } }); } } private void doAddIqiyi2Video() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { logger.info("doAddIqiyi2Video"); List iqiyiAlbumMsgList = CMQManager.getInstance().consumeIqiyiAlbumUpdateMsg(16); if (iqiyiAlbumMsgList != null) for (IqiyiAlbum2MQMsg iqiyiAlbum2MQMsg : iqiyiAlbumMsgList) { try { Long qikuID = iqiyiAlbum2MQMsg.getId(); IqiyiAlbum2 album2 = iqiyi2Service.selectAlbumById(qikuID); logger.info("爱奇艺专辑:" + album2.getName()); if (album2 != null) { iqiyi2Service.addToVideoInfo(album2); } CMQManager.getInstance().deleteIqiyiAlbumUpdateMsg(iqiyiAlbum2MQMsg.getHandler()); } catch (Exception e) { logger.error("爱奇艺专辑添加到视频出错:" + e.getMessage()); logger.error("ID:" + iqiyiAlbum2MQMsg.getId()); } } } }); } private void doAddFunTV2Video() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { List funTVAlbum2MsgList = CMQManager.getInstance().consumeFunTVAlbumUpdateMsg(16); if (funTVAlbum2MsgList != null) for (FunTVAlbum2MQMsg funTVAlbum2MQMsg : funTVAlbum2MsgList) { try { String mediaId = funTVAlbum2MQMsg.getId(); FunTVAlbum2 album2 = funTV2Service.getAlbumDetail(mediaId); if (album2 != null) { funTV2Service.processAlbum(album2); } CMQManager.getInstance().deleteFunTVAlbumUpdateMsg(funTVAlbum2MQMsg.getHandler()); } catch (Exception e) { logger.error("风行专辑添加到视频出错:" + e.getMessage()); logger.error("ID:" + funTVAlbum2MQMsg.getId()); } } } }); } private void doAddPPTVVideo() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { List pptvMsgList = CMQManager.getInstance().consumePPTVSeriesUpdateMsg(16); if (pptvMsgList != null) for (PPTVMQMsg pptvmqMsg : pptvMsgList) { try { switch (pptvmqMsg.getType()) { case PPTVMQMsg.TYPE_ADD_OR_UPDATE: PPTVSeries pptvSeries = pptvService.getSeriesDetail(pptvmqMsg.getInfoId()); if (pptvSeries != null) { pptvService.addToVideoInfo(pptvSeries); } break; case PPTVMQMsg.TYPE_DELETE: pptvService.offLineSeries(pptvmqMsg.getInfoId()); break; } CMQManager.getInstance().deletePPTVSeriesUpdateMsg(pptvmqMsg.getHandler()); } catch (Exception e) { e.printStackTrace(); logger.error("PPTV添加到视频出错:" + e.getMessage()); logger.error("infoId:" + pptvmqMsg.getInfoId()); } } } }); } private void doDeleteVideoResource() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { List cmqMsgList = CMQManager.getInstance().consumeVideoResourceDeleteMsg(16); if (cmqMsgList != null) for (CMQResult msg : cmqMsgList) { try { String videoId = msg.getData() + ""; //查询资源列表 List resourceVideoList = resourceVideoService.getResourceList(videoId); //隐藏视频 if (resourceVideoList == null || resourceVideoList.size() == 0) videoInfoService.hiddenVideo(videoId); //更新搜索引擎 CMQManager.getInstance().addSolrMsg(videoId); CMQManager.getInstance().deleteVideoResourceDeleteMsg(msg.getHandler()); } catch (Exception e) { logger.error("视频资源删除处理出错:" + e.getMessage()); logger.error("ID:" + msg.getData()); } } } }); } private void doUpdateVideoExtraInfo() { new JobThreadExecutorServiceImpl().run(new Runnable() { @Override public void run() { List cmqMsgList = CMQManager.getInstance().consumeUpdateVideoExtraInfoMsg(16); if (cmqMsgList != null) for (CMQResult msg : cmqMsgList) { try { VideoExtraInfoChangeMQMsg videoExtraInfoChangeMQMsg = (VideoExtraInfoChangeMQMsg) msg.getData(); if (videoExtraInfoChangeMQMsg != null) { switch (videoExtraInfoChangeMQMsg.getType()) { case VideoExtraInfoChangeMQMsg.TYPE_RESOURCE: if (VideoExtraInfoChangeMQMsg.ACTION_DELETE.equalsIgnoreCase(videoExtraInfoChangeMQMsg.getAction())) {//删除视频源 CMQManager.getInstance().addVideoResourceDeleteMsg(videoExtraInfoChangeMQMsg.getVideoId()); } break; case VideoExtraInfoChangeMQMsg.TYPE_CATEGORY: break; } videoInfoService.statisticVideoExtraInfo(videoExtraInfoChangeMQMsg.getVideoId()); } CMQManager.getInstance().deleteUpdateVideoExtraInfoMsg(msg.getHandler()); } catch (Exception e) { logger.error("视频资源删除处理出错:" + e.getMessage()); logger.error("ID:" + msg.getData()); } } } }); } }