package com.yeshi.buwan.service.imp.juhe;
|
|
import com.yeshi.buwan.dao.VideoInfoDao;
|
import com.yeshi.buwan.dao.VideoResourceMapExtraInfoDao;
|
import com.yeshi.buwan.dao.juhe.pptv.PPTVProgramDao;
|
import com.yeshi.buwan.dao.juhe.pptv.PPTVSeriesDao;
|
import com.yeshi.buwan.dao.juhe.pptv.PPTVSeriesProgramMapDao;
|
import com.yeshi.buwan.dao.juhe.pptv.VideoPPTVMapDao;
|
import com.yeshi.buwan.dao.video.AlbumVideoMapDao;
|
import com.yeshi.buwan.domain.VideoInfo;
|
import com.yeshi.buwan.domain.VideoResourceMapExtraInfo;
|
import com.yeshi.buwan.domain.VideoType;
|
import com.yeshi.buwan.domain.video.AlbumVideoMap;
|
import com.yeshi.buwan.dto.mq.PPTVMQMsg;
|
import com.yeshi.buwan.videos.pptv.PPTVApiUtil;
|
import com.yeshi.buwan.videos.pptv.PPTVQuery;
|
import com.yeshi.buwan.videos.pptv.PPTVUtil;
|
import com.yeshi.buwan.videos.pptv.entity.*;
|
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.VideoTypeService;
|
import com.yeshi.buwan.service.inter.juhe.PPTVService;
|
import com.yeshi.buwan.util.mq.CMQManager;
|
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.io.Serializable;
|
import java.util.*;
|
|
@Service
|
public class PPTVServiceImpl implements PPTVService {
|
@Resource
|
private PPTVSeriesDao pptvSeriesDao;
|
@Resource
|
private PPTVProgramDao pptvProgramDao;
|
@Resource
|
private PPTVSeriesProgramMapDao pptvSeriesProgramMapDao;
|
@Resource
|
private VideoPPTVMapDao videoPPTVMapDao;
|
@Resource
|
private VideoInfoService videoInfoService;
|
@Resource
|
private VideoInfoDao videoInfoDao;
|
@Resource
|
private AlbumVideoMapDao albumVideoMapDao;
|
@Resource
|
private ResourceVideoService resourceVideoService;
|
@Resource
|
private CategoryVideoService categoryVideoService;
|
|
@Resource
|
private VideoTypeService videoTypeService;
|
|
@Resource
|
private VideoResourceMapExtraInfoDao videoResourceMapExtraInfoDao;
|
|
|
@Override
|
public void addToVideoInfo(PPTVSeries series) {
|
|
if (series.getSeries() == null || series.getSeries().size() <= 0)
|
return;
|
|
List<PPTVUtil.VideoConvertResult> newVideoInfoList = PPTVUtil.convertToVideoInfo(series);
|
if (newVideoInfoList == null)
|
return;
|
|
for (PPTVUtil.VideoConvertResult newVideoInfoResult : newVideoInfoList) {
|
VideoInfo newVideoInfo = newVideoInfoResult.videoInfo;
|
|
VideoType videoType = videoTypeService.getVideoType(newVideoInfo.getVideoType().getId());
|
if (videoType.getParent() != null)
|
newVideoInfo.setVideoType(videoType.getParent());
|
|
VideoPPTVMapDao.DaoQuery daoQuery = new VideoPPTVMapDao.DaoQuery();
|
daoQuery.programCode = newVideoInfoResult.programCode;
|
daoQuery.infoId = series.getInfoID();
|
List<VideoPPTVMap> videoPPTVMapList = videoPPTVMapDao.list(daoQuery);
|
VideoPPTVMap videoPPTV = null;
|
if (videoPPTVMapList != null && videoPPTVMapList.size() > 0)
|
videoPPTV = videoPPTVMapList.get(0);
|
|
if (videoPPTV != null) {//渠道视频已经存在
|
VideoInfo videoInfo = videoInfoService.getVideoInfo(videoPPTV.getVideoId() + "");
|
if (videoInfo == null)
|
return;
|
newVideoInfo.setId(videoInfo.getId());
|
if (!newVideoInfo.getTag().equalsIgnoreCase(videoInfo.getTag())) {
|
newVideoInfo.setCreatetime(videoInfo.getCreatetime());
|
//更新信息tag信息
|
videoInfo.setVideocount(newVideoInfo.getVideocount());
|
videoInfo.setTag(newVideoInfo.getTag());
|
videoInfo.setPicture(newVideoInfo.getPicture());
|
videoInfo.setHpicture(newVideoInfo.getHpicture());
|
videoInfo.setVpicture(newVideoInfo.getVpicture());
|
videoInfo.setShow(newVideoInfo.getShow());
|
videoInfo.setVideoType(newVideoInfo.getVideoType());
|
videoInfoService.update(videoInfo);
|
}
|
} else {//视频不存在
|
//判断2个视频实体是否为同一视频
|
VideoInfo oldVideo = videoInfoService.getExistSameVideoWithDirector(newVideoInfo);
|
if (oldVideo == null) {
|
//添加视频
|
Serializable id = videoInfoService.save(newVideoInfo);
|
newVideoInfo.setId(id + "");
|
} else {//为同一视频
|
//更新tag
|
newVideoInfo.setId(oldVideo.getId());
|
oldVideo.setVideocount(newVideoInfo.getVideocount());
|
oldVideo.setTag(newVideoInfo.getTag());
|
oldVideo.setPicture(newVideoInfo.getPicture());
|
oldVideo.setHpicture(newVideoInfo.getHpicture());
|
oldVideo.setVpicture(newVideoInfo.getVpicture());
|
oldVideo.setShow(newVideoInfo.getShow());
|
oldVideo.setVideoType(newVideoInfo.getVideoType());
|
videoInfoService.update(oldVideo);
|
}
|
|
//加入专辑视频映射
|
AlbumVideoMap map = new AlbumVideoMap();
|
map.setId(newVideoInfo.getId());
|
map.setCreateTime(new Date());
|
map.setVideoId(newVideoInfo.getId());
|
map.setRootVideoType(newVideoInfo.getVideoType().getId());
|
map.setVideoCount(newVideoInfo.getVideocount());
|
albumVideoMapDao.save(map);
|
|
//加入映射
|
VideoPPTVMap vi = new VideoPPTVMap();
|
vi.setInfoId(series.getInfoID());
|
vi.setVideoId(newVideoInfo.getId());
|
vi.setCreateTime(new Date());
|
vi.setSeriesCode(series.getSeriesCode());
|
vi.setProgramCode(newVideoInfoResult.programCode);
|
videoPPTVMapDao.save(vi);
|
}
|
|
//添加视频资源附加信息
|
VideoResourceMapExtraInfo vrm = new VideoResourceMapExtraInfo(newVideoInfo.getId(), (long) PPTVUtil.RESOURCE_ID);
|
VideoResourceMapExtraInfo extra = videoResourceMapExtraInfoDao.find(VideoResourceMapExtraInfo.class, vrm.getId());
|
if (extra == null) {
|
vrm.setFree(Integer.parseInt(series.getFree()));
|
vrm.setCreateTime(new Date());
|
videoResourceMapExtraInfoDao.save(vrm);
|
} else {//更新
|
extra.setFree(Integer.parseInt(series.getFree()));
|
extra.setUpdateTime(new Date());
|
videoResourceMapExtraInfoDao.update(extra);
|
}
|
|
//添加视频来源映射
|
resourceVideoService.addVideoResource(newVideoInfo.getId(), PPTVUtil.RESOURCE_ID + "");
|
//添加视频分类映射
|
categoryVideoService.addCategoryVideo(newVideoInfo.getId(), videoType.getId());
|
CMQManager.getInstance().addSolrMsg(newVideoInfo.getId());
|
}
|
}
|
|
@Override
|
public void offLineSeries(String infoId) {
|
VideoPPTVMapDao.DaoQuery daoQuery = new VideoPPTVMapDao.DaoQuery();
|
daoQuery.infoId = infoId;
|
//查询出对应的视频ID
|
List<VideoPPTVMap> mapList = videoPPTVMapDao.list(daoQuery);
|
if (mapList == null || mapList.size() == 0)
|
return;
|
for (VideoPPTVMap map : mapList) {
|
videoPPTVMapDao.deleteByPrimaryKey(map.getVideoId());
|
resourceVideoService.delete(map.getVideoId() + "", PPTVUtil.RESOURCE_ID + "");
|
}
|
}
|
|
@Override
|
public PPTVSeries getSeriesDetail(String infoId) {
|
PPTVSeries series = pptvSeriesDao.get(infoId);
|
if (series == null) {
|
return null;
|
}
|
PPTVQuery query = new PPTVQuery();
|
query.infoId = infoId;
|
query.count = 100;
|
long count = pptvSeriesProgramMapDao.count(query);
|
int page = (int) (count % query.count == 0 ? count / query.count : count / query.count + 1);
|
List<PPTVProgram> programList = new ArrayList<>();
|
for (int i = 0; i < page; i++) {
|
query.start = i * query.count;
|
List<PPTVSeriesProgramMap> mapList = pptvSeriesProgramMapDao.list(query);
|
List<String> codeList = new ArrayList<>();
|
for (PPTVSeriesProgramMap map : mapList) {
|
codeList.add(map.getProgramCode());
|
}
|
List<PPTVProgram> tempList = pptvProgramDao.list(codeList);
|
if (tempList != null && tempList.size() > 0) {
|
programList.addAll(tempList);
|
}
|
}
|
Comparator<PPTVProgram> comparator = new Comparator<PPTVProgram>() {
|
@Override
|
public int compare(PPTVProgram o1, PPTVProgram o2) {
|
return o1.getRank() - o2.getRank();
|
}
|
};
|
Collections.sort(programList, comparator);
|
|
series.setSeries(programList);
|
return series;
|
}
|
|
@Override
|
public void save(List<PPTVSeries> seriesList) {
|
for (PPTVSeries series : seriesList) {
|
try {
|
save(series);
|
} catch (Exception e) {
|
|
}
|
}
|
}
|
|
@Override
|
public void save(PPTVSeries series) {
|
//删除的InfoId
|
Set<String> infoIds = new HashSet<>();
|
//获取是否有更新
|
PPTVSeries oldSeries = pptvSeriesDao.get(series.getInfoID());
|
switch (series.getStatus()) {
|
//保存
|
case "add":
|
//更新
|
case "update":
|
if (oldSeries == null || !oldSeries.getUpdateTime().equalsIgnoreCase(series.getUpdateTime())) {
|
series.setCreateTime(new Date());
|
pptvSeriesDao.save(series);
|
//处理新增/改变的剧集信息
|
CMQManager.getInstance().addPPTVSeriesUpdateMsg(new PPTVMQMsg(series.getInfoID(), PPTVMQMsg.TYPE_ADD_OR_UPDATE));
|
}
|
|
System.out.println("addorupdate:" + series.getName());
|
|
break;
|
//删除
|
case "del":
|
System.out.println("delete:" + series.getName());
|
deleteSeries(series);
|
infoIds.add(series.getInfoID());
|
break;
|
}
|
|
//删除的InfoId
|
for (PPTVProgram pptvProgram : series.getSeries()) {
|
Set<String> deleteInfoIds = processProgram(series, pptvProgram);
|
if (deleteInfoIds != null) {
|
infoIds.addAll(deleteInfoIds);
|
}
|
}
|
|
for (String id : infoIds) {
|
//处理删除的剧集信息
|
CMQManager.getInstance().addPPTVSeriesUpdateMsg(new PPTVMQMsg(id, PPTVMQMsg.TYPE_DELETE));
|
}
|
|
|
}
|
|
@Override
|
public PPTVSeries getSeriesDetailByVideoId(String videoId) {
|
VideoPPTVMap map = videoPPTVMapDao.get(videoId);
|
if (map == null) {
|
return null;
|
}
|
return getSeriesDetail(map.getInfoId());
|
}
|
|
@Override
|
public VideoPPTVMap getVideoPPTVMapByVideoId(String videoId) {
|
VideoPPTVMap map = videoPPTVMapDao.get(videoId);
|
return map;
|
}
|
|
@Override
|
public PPTVProgram selectProgramById(String id) {
|
return pptvProgramDao.get(id);
|
}
|
|
@Override
|
public PPTVSeriesProgramMap selectMapByCode(String seriesCode, String programCode) {
|
PPTVQuery query = new PPTVQuery();
|
query.programCode = programCode;
|
query.seriesCode = seriesCode;
|
query.count = 1;
|
List<PPTVSeriesProgramMap> list = pptvSeriesProgramMapDao.list(query);
|
if (list == null || list.size() == 0)
|
return null;
|
return list.get(0);
|
}
|
|
@Override
|
public VideoPPTVMap selectVideoPPTVMapByPPInfo(String infoId, String programCode) {
|
VideoPPTVMapDao.DaoQuery daoQuery = new VideoPPTVMapDao.DaoQuery();
|
daoQuery.infoId = infoId;
|
daoQuery.programCode = programCode;
|
List<VideoPPTVMap> list = videoPPTVMapDao.list(daoQuery);
|
if (list == null || list.size() == 0)
|
return null;
|
return list.get(0);
|
}
|
|
@Override
|
public PPTVSeries selectSeriesBySeriesCode(String cid) {
|
Query query = new Query();
|
query.addCriteria(new Criteria().where("seriesCode").is(cid));
|
return pptvSeriesDao.findOne(query);
|
}
|
|
@Override
|
public PPTVSeries selectSeriesByInfoId(String infoId) {
|
return pptvSeriesDao.get(infoId);
|
}
|
|
@Override
|
public void updateSeriesGoodsInfo(String infoId, PPTVGoodsInfo goodsInfo) {
|
Query query = new Query();
|
query.addCriteria(Criteria.where("_id").is(infoId));
|
Update update = new Update();
|
update.set("goodsInfo", goodsInfo);
|
pptvSeriesDao.update(query, update);
|
}
|
|
@Override
|
public void updateProgramGoodsInfo(String vid, PPTVGoodsInfo goodsInfo) {
|
Query query = new Query();
|
query.addCriteria(Criteria.where("_id").is(vid));
|
Update update = new Update();
|
update.set("goodsInfo", goodsInfo);
|
pptvProgramDao.update(query, update);
|
}
|
|
@Override
|
public void syncSeries(String cid) {
|
PPTVSeries series = PPTVApiUtil.getDetail(cid);
|
if (series != null) {
|
save(series);
|
}
|
|
}
|
|
/**
|
* 删除剧集
|
*
|
* @param series
|
*/
|
private void deleteSeries(PPTVSeries series) {
|
PPTVQuery query = new PPTVQuery();
|
query.seriesCode = series.getSeriesCode();
|
Set<String> seriesCodeSet = deleteMap(query);
|
pptvSeriesDao.deleteByPrimaryKey(series.getInfoID());
|
}
|
|
|
private Set<String> processProgram(PPTVSeries series, PPTVProgram program) {
|
program.setCreateTime(new Date());
|
//获取是否有更新
|
PPTVProgram oldProgram = pptvProgramDao.get(program.getProgramCode());
|
switch (program.getStatus()) {
|
//保存
|
case "add":
|
//更新
|
case "update":
|
if (oldProgram == null || !oldProgram.getContentOnlineTime().equalsIgnoreCase(oldProgram.getContentOnlineTime())) {
|
program.setCreateTime(new Date());
|
pptvProgramDao.save(program);
|
|
PPTVSeriesProgramMap map = new PPTVSeriesProgramMap(series.getInfoID(), series.getSeriesCode(), program.getProgramCode(), program.getRank());
|
pptvSeriesProgramMapDao.save(map);
|
}
|
break;
|
//删除
|
case "del":
|
return deleteProgram(program);
|
}
|
|
return null;
|
}
|
|
/**
|
* 删除节目
|
*
|
* @param program
|
*/
|
private Set<String> deleteProgram(PPTVProgram program) {
|
//删除
|
PPTVQuery query = new PPTVQuery();
|
query.programCode = program.getProgramCode();
|
Set<String> infoIdSet = deleteMap(query);
|
pptvProgramDao.deleteByPrimaryKey(program.getProgramCode());
|
return infoIdSet;
|
}
|
|
private Set<String> deleteMap(PPTVQuery query) {
|
long count = pptvSeriesProgramMapDao.count(query);
|
if (count <= 0) {
|
return null;
|
}
|
Set<String> infoIdSet = new HashSet<>();
|
query.count = (int) count;
|
List<PPTVSeriesProgramMap> mapList = pptvSeriesProgramMapDao.list(query);
|
//删除map
|
for (PPTVSeriesProgramMap map : mapList) {
|
infoIdSet.add(map.getInfoId());
|
pptvSeriesProgramMapDao.delete(map.getId());
|
}
|
|
return infoIdSet;
|
}
|
|
|
}
|