package com.yeshi.buwan.service.manager;
|
|
import com.yeshi.buwan.dao.video.AlbumVideoMapDao;
|
import com.yeshi.buwan.domain.SolrVideo;
|
import com.yeshi.buwan.domain.VideoInfo;
|
import com.yeshi.buwan.domain.video.AlbumVideoMap;
|
import com.yeshi.buwan.service.imp.VideoInfoService;
|
import com.yeshi.buwan.service.inter.juhe.AlbumVideoMapService;
|
import com.yeshi.buwan.util.factory.SolrVideoFactory;
|
import org.apache.solr.client.solrj.response.UpdateResponse;
|
import org.springframework.data.solr.core.SolrTemplate;
|
import org.springframework.data.solr.core.query.Criteria;
|
import org.springframework.data.solr.core.query.Query;
|
import org.springframework.data.solr.core.query.SimpleQuery;
|
import org.springframework.data.solr.core.query.result.ScoredPage;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* 搜索引擎-专辑数据管理
|
*/
|
@Component
|
public class SolrAlbumDataManager {
|
|
@Resource
|
private SolrTemplate solrTemplate;
|
|
@Resource
|
private AlbumVideoMapService albumVideoMapService;
|
|
@Resource
|
private VideoInfoService videoInfoService;
|
|
|
public void saveOrUpdate(VideoInfo videoInfo) {
|
UpdateResponse updateResponse = solrTemplate.saveBean(SolrVideoFactory.create(videoInfo));
|
if (updateResponse.getStatus() == 0) {
|
solrTemplate.commit();
|
} else {
|
solrTemplate.rollback();
|
}
|
}
|
|
public void saveOrUpdate(List<VideoInfo> videoInfoList) {
|
List<SolrVideo> solrVideoList = new ArrayList<>();
|
for (VideoInfo vi : videoInfoList) {
|
solrVideoList.add(SolrVideoFactory.create(vi));
|
}
|
UpdateResponse updateResponse = solrTemplate.saveBeans(solrVideoList);
|
if (updateResponse.getStatus() == 0) {
|
solrTemplate.commit();
|
} else {
|
solrTemplate.rollback();
|
}
|
}
|
|
public void deleteById(String id) {
|
UpdateResponse updateResponse = solrTemplate.deleteById(id);
|
if (updateResponse.getStatus() == 0) {
|
solrTemplate.commit();
|
} else {
|
solrTemplate.rollback();
|
}
|
}
|
|
public SolrVideo findOne(String id) {
|
SolrVideo solrVideo = solrTemplate.getById(id, SolrVideo.class);
|
return solrVideo;
|
}
|
|
public List<SolrVideo> findByKey(String key, Integer contentType, Integer videoType, int page) {
|
int pageSize = 20;
|
Query query = new SimpleQuery("name:\"" + key + "\"");
|
|
Criteria criteria = new Criteria("contenttype").is(contentType);
|
|
if (videoType != null)
|
criteria = criteria.and("root_video_type").is(videoType);
|
|
/** 添加条件 */
|
if (criteria != null)
|
query.addCriteria(criteria);
|
|
/** 设置分页开始记录数(第一页) 默认0 */
|
query.setOffset((page - 1) * page);
|
/** 设置每页显示记录数,默认10 */
|
query.setRows(pageSize);
|
ScoredPage<SolrVideo> result = solrTemplate.queryForPage(query, SolrVideo.class);
|
System.out.println("总记录数:" + result.getTotalElements());
|
List<SolrVideo> list = result.getContent();
|
return list;
|
}
|
|
public List<String> getSuggestKeyList(String key) {
|
Query query = new SimpleQuery("name:\"" + key + "\"");
|
/** 设置分页开始记录数(第一页) 默认0 */
|
query.setOffset(0);
|
/** 设置每页显示记录数,默认10 */
|
query.setRows(10);
|
ScoredPage<SolrVideo> result = solrTemplate.queryForPage(query, SolrVideo.class);
|
System.out.println("总记录数:" + result.getTotalElements());
|
List<SolrVideo> list = result.getContent();
|
List<String> keyList = new ArrayList<>();
|
for (SolrVideo sv : list)
|
if (!keyList.contains(sv.getName()))
|
keyList.add(sv.getName());
|
return keyList;
|
}
|
|
|
/**
|
* 同步所有专辑
|
*/
|
public void syncAllAlbum() {
|
long count = albumVideoMapService.countAll();
|
int pageSize = 100;
|
int pageCount = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
|
for (int i = 3; i < pageCount; i++) {
|
List<String> videoIds = new ArrayList<>();
|
List<AlbumVideoMap> albumVideoMapList = albumVideoMapService.listAll(i + 1, pageSize);
|
for (AlbumVideoMap map : albumVideoMapList) {
|
videoIds.add(map.getVideoId());
|
}
|
List<VideoInfo> videoList = videoInfoService.listByVideoIds(videoIds);
|
saveOrUpdate(videoList);
|
}
|
}
|
|
public void syncAlbum(String videoId) {
|
AlbumVideoMap map = albumVideoMapService.selectByVideoId(videoId);
|
if (map == null)
|
return;
|
|
List<VideoInfo> videoList = new ArrayList<>();
|
VideoInfo video = videoInfoService.getVideoInfo(videoId);
|
if (video != null)
|
videoList.add(video);
|
saveOrUpdate(videoList);
|
}
|
|
}
|