admin
2021-01-25 cbc9ffb792e29beddf15dbfa70437bfc40de5baa
src/main/java/com/yeshi/buwan/service/manager/SolrAlbumDataManager.java
@@ -1,30 +1,42 @@
package com.yeshi.buwan.service.manager;
import com.yeshi.buwan.domain.ResourceVideo;
import com.yeshi.buwan.domain.SolrVideo;
import com.yeshi.buwan.domain.VideoInfo;
import com.yeshi.buwan.domain.VideoResource;
import com.yeshi.buwan.domain.video.AlbumVideoMap;
import com.yeshi.buwan.dto.search.SolrResultDTO;
import com.yeshi.buwan.dto.search.SolrVideoSearchFilter;
import com.yeshi.buwan.service.imp.ResourceVideoService;
import com.yeshi.buwan.service.imp.VideoInfoService;
import com.yeshi.buwan.service.inter.juhe.AlbumVideoMapService;
import com.yeshi.buwan.util.StringUtil;
import com.yeshi.buwan.util.factory.SolrVideoFactory;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Sort;
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.SolrDataQuery;
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.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 搜索引擎-专辑数据管理
 */
@Component
public class SolrAlbumDataManager {
    private final Logger logger = LoggerFactory.getLogger(SolrAlbumDataManager.class);
    @Resource
    private SolrTemplate solrTemplate;
@@ -35,9 +47,12 @@
    @Resource
    private VideoInfoService videoInfoService;
    @Resource
    private ResourceVideoService resourceVideoService;
    public void saveOrUpdate(VideoInfo videoInfo) {
        UpdateResponse updateResponse = solrTemplate.saveBean(SolrVideoFactory.create(videoInfo));
        UpdateResponse updateResponse = solrTemplate.saveBean(SolrVideoFactory.create(videoInfo, videoInfo.getResourceList()));
        if (updateResponse.getStatus() == 0) {
            solrTemplate.commit();
        } else {
@@ -48,7 +63,7 @@
    public void saveOrUpdate(List<VideoInfo> videoInfoList) {
        List<SolrVideo> solrVideoList = new ArrayList<>();
        for (VideoInfo vi : videoInfoList) {
            solrVideoList.add(SolrVideoFactory.create(vi));
            solrVideoList.add(SolrVideoFactory.create(vi, vi.getResourceList()));
        }
        UpdateResponse updateResponse = solrTemplate.saveBeans(solrVideoList);
        if (updateResponse.getStatus() == 0) {
@@ -58,7 +73,22 @@
        }
    }
    /**
     *删除所有
     */
    public void clear() {
        Query query = new SimpleQuery("name:*");
        UpdateResponse updateResponse = solrTemplate.delete(query);
        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();
@@ -72,13 +102,18 @@
        return solrVideo;
    }
    public SolrResultDTO findByKey(String key, Integer contentType, Integer videoType, int page, int pageSize) {
        Query query = new SimpleQuery("name:\"" + key + "\"");
    public SolrResultDTO find(SolrVideoSearchFilter filter, int page, int pageSize) {
        logger.info(filter.getKey() + "#" + page);
        Query query = new SimpleQuery("name:\"" + filter.getKey() + "\"");
        Criteria criteria = new Criteria("contenttype").is(contentType);
        Criteria criteria = new Criteria("contenttype").is(filter.getContentType());
        if (videoType != null)
            criteria = criteria.and("root_video_type").is(videoType);
        if (filter.getVideoType() != null) {
            criteria = criteria.and("root_video_type").is(filter.getVideoType());
        }
        if (filter.getResourceIds() != null && filter.getResourceIds().length > 0) {
            criteria = criteria.and("resourceIds").contains(filter.getResourceIds());
        }
        /** 添加条件 */
        if (criteria != null)
@@ -88,7 +123,11 @@
        query.setOffset((page - 1) * pageSize);
        /** 设置每页显示记录数,默认10 */
        query.setRows(pageSize);
        query.addSort(new Sort(Sort.Direction.DESC, "year"));
        if (StringUtil.isNullOrEmpty(filter.getSortKey())) {
            query.addSort(new Sort(Sort.Direction.DESC, "year"));
        } else {
            query.addSort(new Sort(Sort.Direction.DESC, filter.getSortKey()));
        }
        ScoredPage<SolrVideo> result = solrTemplate.queryForPage(query, SolrVideo.class);
        System.out.println("总记录数:" + result.getTotalElements());
        List<SolrVideo> list = result.getContent();
@@ -126,6 +165,23 @@
                videoIds.add(map.getVideoId());
            }
            List<VideoInfo> videoList = videoInfoService.listByVideoIds(videoIds);
            //获取资源ID
            List<ResourceVideo> rvList = resourceVideoService.getResourceList(videoList);
            Map<String, List<VideoResource>> map = new HashMap<>();
            for (ResourceVideo rv : rvList) {
                if (rv.getVideo() != null && rv.getResource() != null) {
                    if (map.get(rv.getVideo().getId()) == null)
                        map.put(rv.getVideo().getId(), new ArrayList<>());
                    map.get(rv.getVideo().getId()).add(rv.getResource());
                }
            }
            for (VideoInfo vi : videoList) {
                if (map.get(vi.getId()) != null) {
                    vi.setResourceList(map.get(vi.getId()));
                }
            }
            saveOrUpdate(videoList);
        }
    }
@@ -134,12 +190,15 @@
        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);
        if (video != null) {
            List<ResourceVideo> rvList = resourceVideoService.getResourceList(video.getId());
            List<VideoResource> vrList = new ArrayList<>();
            for (ResourceVideo rv : rvList)
                vrList.add(rv.getResource());
            video.setResourceList(vrList);
            saveOrUpdate(video);
        }
    }
}