admin
2021-03-25 9438097857e16f4929924d0d349c346d36b5f947
完善全网搜(腾讯/优酷)
11个文件已修改
12个文件已添加
1104 ■■■■■ 已修改文件
src/main/java/com/yeshi/buwan/aspect/ParamsCheckAspect.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dao/juhe/internetsearch/InternetSearchVideoDao.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dao/juhe/tencent/TencentCoverInfoDao.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/domain/video/InternetSearchVideo.java 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dto/mq/InternetSearchVideoMQMsg.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/juhe/InternetSearchVideoServiceImpl.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/juhe/TencentVideoServiceImpl.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/juhe/YouKuServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/inter/juhe/InternetSearchVideoService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/inter/juhe/TencentVideoService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/inter/juhe/YouKuService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/manager/SolrInternetSearchVideoDataManager.java 182 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/tencent/TencentVideoUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/tencent/entity/TencentCoverInfo.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/tencent/entity/TencentSearchVideoMap.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/SpringContext.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/factory/InternetSearchVideoFactory.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/factory/SolrVideoFactory.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/mq/CMQManager.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/youku/YouKuApiUtil.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/youku/entity/YouKuSearchVideoMap.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/youku/entity/YouKuVideo.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/GeneralTest.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/aspect/ParamsCheckAspect.java
@@ -1,6 +1,6 @@
package com.yeshi.buwan.aspect;
import com.beust.jcommander.internal.Lists;
import com.google.common.collect.Lists;
import com.google.gson.Gson;
import com.yeshi.buwan.exception.ParamsException;
import org.aspectj.lang.JoinPoint;
src/main/java/com/yeshi/buwan/dao/juhe/internetsearch/InternetSearchVideoDao.java
New file
@@ -0,0 +1,58 @@
package com.yeshi.buwan.dao.juhe.youku;
import com.yeshi.buwan.domain.video.InternetSearchVideo;
import com.yeshi.buwan.dao.base.MongodbBaseDao;
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.Repository;
import java.util.Date;
@Repository
public class InternetSearchVideoDao extends MongodbBaseDao<InternetSearchVideo>{
  public void updateSelective(InternetSearchVideo bean) {
        Query query = new Query();
        Update update=new Update();
        query.addCriteria(Criteria.where("id").is(bean.getId()));
        if(bean.getName() != null) {
            update.set("name", bean.getName());
        }
        if(bean.getNameStr() != null) {
            update.set("nameStr", bean.getNameStr());
        }
        if(bean.getVpicture() != null) {
            update.set("vpicture", bean.getVpicture());
        }
        if(bean.getHpicture() != null) {
            update.set("hpicture", bean.getHpicture());
        }
        if(bean.getArea() != null) {
            update.set("area", bean.getArea());
        }
        if(bean.getTag() != null) {
            update.set("tag", bean.getTag());
        }
        if(bean.getVideoCount() != null) {
            update.set("videoCount", bean.getVideoCount());
        }
        if(bean.getYear() != null) {
            update.set("year", bean.getYear());
        }
        if(bean.getRootType() != null) {
            update.set("rootType", bean.getRootType());
        }
        if(bean.getActors() != null) {
            update.set("actors", bean.getActors());
        }
        if(bean.getDirector() != null) {
            update.set("director", bean.getDirector());
        }
        if(bean.getResourceIds() != null) {
            update.set("resourceIds", bean.getResourceIds());
        }
        update.set("updateTime", new Date());
        update(query, update);
  }
}
src/main/java/com/yeshi/buwan/dao/juhe/tencent/TencentCoverInfoDao.java
New file
@@ -0,0 +1,94 @@
package com.yeshi.buwan.dao.juhe.tencent;
import com.yeshi.buwan.tencent.entity.TencentCoverInfo;
import com.yeshi.buwan.dao.base.MongodbBaseDao;
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.Repository;
import java.util.Date;
@Repository
public class TencentCoverInfoDao extends MongodbBaseDao<TencentCoverInfo>{
  public void updateSelective(TencentCoverInfo bean) {
        Query query = new Query();
        Update update=new Update();
        query.addCriteria(Criteria.where("id").is(bean.getId()));
        if(bean.getDouban_score() != null) {
            update.set("douban_score", bean.getDouban_score());
        }
        if(bean.getPay_status() != null) {
            update.set("pay_status", bean.getPay_status());
        }
        if(bean.getYear() != null) {
            update.set("year", bean.getYear());
        }
        if(bean.getEpisode_updated() != null) {
            update.set("episode_updated", bean.getEpisode_updated());
        }
        if(bean.getEpisode_all() != null) {
            update.set("episode_all", bean.getEpisode_all());
        }
        if(bean.getCurrent_num() != null) {
            update.set("current_num", bean.getCurrent_num());
        }
        if(bean.getPublish_date() != null) {
            update.set("publish_date", bean.getPublish_date());
        }
        if(bean.getTitle() != null) {
            update.set("title", bean.getTitle());
        }
        if(bean.getDescription() != null) {
            update.set("description", bean.getDescription());
        }
        if(bean.getCover_id() != null) {
            update.set("cover_id", bean.getCover_id());
        }
        if(bean.getType_name() != null) {
            update.set("type_name", bean.getType_name());
        }
        if(bean.getArea_name() != null) {
            update.set("area_name", bean.getArea_name());
        }
        if(bean.getHorizontal_pic_url() != null) {
            update.set("horizontal_pic_url", bean.getHorizontal_pic_url());
        }
        if(bean.getVertical_pic_url() != null) {
            update.set("vertical_pic_url", bean.getVertical_pic_url());
        }
        if(bean.getSecond_title() != null) {
            update.set("second_title", bean.getSecond_title());
        }
        if(bean.getLangue() != null) {
            update.set("langue", bean.getLangue());
        }
        if(bean.getMain_genre() != null) {
            update.set("main_genre", bean.getMain_genre());
        }
        if(bean.getScore() != null) {
            update.set("score", bean.getScore());
        }
        if(bean.getDirector() != null) {
            update.set("director", bean.getDirector());
        }
        if(bean.getLeading_actor() != null) {
            update.set("leading_actor", bean.getLeading_actor());
        }
        if(bean.getVip_ids() != null) {
            update.set("vip_ids", bean.getVip_ids());
        }
        if(bean.getSubtype() != null) {
            update.set("subtype", bean.getSubtype());
        }
        if(bean.getSub_genre() != null) {
            update.set("sub_genre", bean.getSub_genre());
        }
        if(bean.getCreateTime() != null) {
            update.set("createTime", bean.getCreateTime());
        }
        update.set("updateTime", new Date());
        update(query, update);
  }
}
src/main/java/com/yeshi/buwan/domain/video/InternetSearchVideo.java
New file
@@ -0,0 +1,204 @@
package com.yeshi.buwan.domain.video;
import com.yeshi.buwan.util.StringUtil;
import org.apache.solr.client.solrj.beans.Field;
import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.solr.core.mapping.Indexed;
import java.util.Date;
/**
 * 全网搜实体
 */
@Document(collection = "internetSearchVideo")
public class InternetSearchVideo {
    @NotEmpty(message = "id不能为空")
    @Id
    @Field
    private String id;
    @NotEmpty(message = "名称不能为空")
    @Field
    private String name;
    @Field
    private String nameStr;
    @NotEmpty(message = "竖图不能为空")
    @Field
    private String vpicture;
    @NotEmpty(message = "横图不能为空")
    @Field
    private String hpicture;
    @Field
    private String area;
    @Field
    private String tag;
    @Field
    private Integer videoCount;
    @Field
    private String year;
    @Indexed
    @Field
    private Integer rootType;
    @Field
    private String actors;//演员
    @Field
    private String director;//导演
    @Indexed
    @Field
    private String resourceIds;
    @Transient
    @Field
    private Date solrTime;
    @Field
    private Date updateTime;
    private Date createTime;
    private String desc;
    public Date getSolrTime() {
        return solrTime;
    }
    public void setSolrTime(Date solrTime) {
        this.solrTime = solrTime;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
    public static String createId(String name, int year, String rootType) {
        return StringUtil.Md5(name + "#" + year + "#" + rootType);
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getNameStr() {
        return nameStr;
    }
    public void setNameStr(String nameStr) {
        this.nameStr = nameStr;
    }
    public String getVpicture() {
        return vpicture;
    }
    public void setVpicture(String vpicture) {
        this.vpicture = vpicture;
    }
    public String getHpicture() {
        return hpicture;
    }
    public void setHpicture(String hpicture) {
        this.hpicture = hpicture;
    }
    public String getArea() {
        return area;
    }
    public void setArea(String area) {
        this.area = area;
    }
    public String getTag() {
        return tag;
    }
    public void setTag(String tag) {
        this.tag = tag;
    }
    public Integer getVideoCount() {
        return videoCount;
    }
    public void setVideoCount(Integer videoCount) {
        this.videoCount = videoCount;
    }
    public String getYear() {
        return year;
    }
    public void setYear(String year) {
        this.year = year;
    }
    public Integer getRootType() {
        return rootType;
    }
    public void setRootType(Integer rootType) {
        this.rootType = rootType;
    }
    public String getActors() {
        return actors;
    }
    public void setActors(String actors) {
        this.actors = actors;
    }
    public String getDirector() {
        return director;
    }
    public void setDirector(String director) {
        this.director = director;
    }
    public String getResourceIds() {
        return resourceIds;
    }
    public void setResourceIds(String resourceIds) {
        this.resourceIds = resourceIds;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}
src/main/java/com/yeshi/buwan/dto/mq/InternetSearchVideoMQMsg.java
New file
@@ -0,0 +1,31 @@
package com.yeshi.buwan.dto.mq;
public class InternetSearchVideoMQMsg {
    private String handler;
    private String id;
    private Integer resourceId;
    public String getHandler() {
        return handler;
    }
    public void setHandler(String handler) {
        this.handler = handler;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public Integer getResourceId() {
        return resourceId;
    }
    public void setResourceId(Integer resourceId) {
        this.resourceId = resourceId;
    }
}
src/main/java/com/yeshi/buwan/service/imp/juhe/InternetSearchVideoServiceImpl.java
New file
@@ -0,0 +1,78 @@
package com.yeshi.buwan.service.imp.juhe;
import com.yeshi.buwan.dao.juhe.youku.InternetSearchVideoDao;
import com.yeshi.buwan.domain.video.InternetSearchVideo;
import com.yeshi.buwan.exception.ParamsException;
import com.yeshi.buwan.service.inter.juhe.InternetSearchVideoService;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.yeshi.utils.StringUtil;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.*;
@Service
public class InternetSearchVideoServiceImpl implements InternetSearchVideoService {
    @Resource
    private InternetSearchVideoDao internetSearchVideoDao;
    @Validated
    @Override
    public void save(@Valid InternetSearchVideo video) throws ParamsException, Exception {
        InternetSearchVideo oldVideo = internetSearchVideoDao.get(video.getId());
        Set<Integer> resourceIds = listResourceId(video);
        resourceIds.add(Integer.parseInt(video.getResourceIds()));
        Integer[] rids = new Integer[resourceIds.size()];
        resourceIds.toArray(rids);
        video.setResourceIds(StringUtil.concat(rids, ","));
        if (oldVideo == null) {
            video.setCreateTime(new Date());
            internetSearchVideoDao.save(video);
        } else {
            internetSearchVideoDao.updateSelective(video);
        }
    }
    private Set<Integer> listResourceId(InternetSearchVideo video) {
        if (video == null) {
            return new HashSet<>();
        }
        List<String> list = Arrays.asList(video.getResourceIds().split(","));
        Set<Integer> sets = new HashSet<>();
        for (String st : list) {
            sets.add(Integer.parseInt(st));
        }
        return sets;
    }
    @Override
    public Set<Integer> listResourceId(String id) {
        InternetSearchVideo oldVideo = internetSearchVideoDao.get(id);
        return listResourceId(oldVideo);
    }
    @Override
    public long countAll() {
        return internetSearchVideoDao.count(new Query());
    }
    @Override
    public List<InternetSearchVideo> listAll(int page, int pageSize) {
        Query query = new Query();
        query.skip((page - 1) * pageSize);
        query.limit(pageSize);
        return internetSearchVideoDao.findList(query);
    }
    @Override
    public InternetSearchVideo selectByPrimaryKey(String id) {
        return internetSearchVideoDao.get(id);
    }
}
src/main/java/com/yeshi/buwan/service/imp/juhe/TencentVideoServiceImpl.java
New file
@@ -0,0 +1,53 @@
package com.yeshi.buwan.service.imp.juhe;
import com.yeshi.buwan.dao.juhe.tencent.TencentCoverInfoDao;
import com.yeshi.buwan.service.inter.juhe.TencentVideoService;
import com.yeshi.buwan.tencent.entity.TencentCoverInfo;
import com.yeshi.buwan.youku.entity.YouKuShowDetail;
import com.yeshi.buwan.youku.entity.YouKuVideo;
import org.springframework.data.domain.Sort;
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;
import java.util.Date;
import java.util.List;
@Service
public class TencentVideoServiceImpl implements TencentVideoService {
    @Resource
    private TencentCoverInfoDao tencentCoverInfoDao;
    @Override
    public void save(TencentCoverInfo detail) {
        if (detail.getUpdateTime() == null)
            detail.setUpdateTime(new Date());
        tencentCoverInfoDao.save(detail);
    }
    @Override
    public TencentCoverInfo getConverDetail(String id) {
        TencentCoverInfo detail = tencentCoverInfoDao.get(id);
        return detail;
    }
    @Override
    public long count(String type) {
        Query query = new Query();
        if (type != null)
            query.addCriteria(Criteria.where("type").is(type));
        return tencentCoverInfoDao.count(query);
    }
    @Override
    public List<TencentCoverInfo> list(String type, int page, int pageSize) {
        Query query = new Query();
        if (type != null)
            query.addCriteria(Criteria.where("type").is(type));
        query.limit(pageSize);
        query.skip((page - 1) * pageSize);
        return tencentCoverInfoDao.findList(query);
    }
}
src/main/java/com/yeshi/buwan/service/imp/juhe/YouKuServiceImpl.java
@@ -5,10 +5,14 @@
import com.yeshi.buwan.service.inter.juhe.YouKuService;
import com.yeshi.buwan.youku.entity.YouKuShowDetail;
import com.yeshi.buwan.youku.entity.YouKuVideo;
import org.springframework.data.domain.Sort;
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;
import java.util.Date;
import java.util.List;
@Service
public class YouKuServiceImpl implements YouKuService {
@@ -31,4 +35,36 @@
                youKuVideoDao.save(video);
            }
    }
    @Override
    public YouKuShowDetail getShowDetail(String showId) {
        YouKuShowDetail detail = youKuShowDetailDao.get(showId);
        Query query = new Query();
        if (detail != null) {
            query.addCriteria(Criteria.where("showId").is(showId));
        }
        query.with(new Sort(new Sort.Order(Sort.Direction.ASC, "show_videoseq")));
        List<YouKuVideo> videoList = youKuVideoDao.findList(query);
        detail.setVideoList(videoList);
        return detail;
    }
    @Override
    public long count(String category) {
        Query query = new Query();
        if (category != null)
            query.addCriteria(Criteria.where("category").is(category));
        return youKuShowDetailDao.count(query);
    }
    @Override
    public List<YouKuShowDetail> list(String category, int page, int pageSize) {
        Query query = new Query();
        if (category != null)
            query.addCriteria(Criteria.where("category").is(category));
        query.limit(pageSize);
        query.skip((page - 1) * pageSize);
        return youKuShowDetailDao.findList(query);
    }
}
src/main/java/com/yeshi/buwan/service/inter/juhe/InternetSearchVideoService.java
New file
@@ -0,0 +1,23 @@
package com.yeshi.buwan.service.inter.juhe;
import com.yeshi.buwan.domain.video.InternetSearchVideo;
import com.yeshi.buwan.exception.ParamsException;
import javax.validation.Valid;
import java.util.List;
import java.util.Set;
public interface InternetSearchVideoService {
    public void save(@Valid InternetSearchVideo video) throws ParamsException, Exception;
    public Set<Integer> listResourceId(String id);
    public long countAll();
    public List<InternetSearchVideo> listAll(int page, int pageSize);
    public InternetSearchVideo selectByPrimaryKey(String id);
}
src/main/java/com/yeshi/buwan/service/inter/juhe/TencentVideoService.java
New file
@@ -0,0 +1,23 @@
package com.yeshi.buwan.service.inter.juhe;
import com.yeshi.buwan.tencent.entity.TencentCoverInfo;
import com.yeshi.buwan.youku.entity.YouKuShowDetail;
import java.util.List;
public interface TencentVideoService {
    /**
     * 保存
     *
     * @param detail
     */
    public void save(TencentCoverInfo detail);
    public TencentCoverInfo getConverDetail(String id);
    public long count(String type);
    public List<TencentCoverInfo> list(String type, int page, int pageSize);
}
src/main/java/com/yeshi/buwan/service/inter/juhe/YouKuService.java
@@ -2,12 +2,21 @@
import com.yeshi.buwan.youku.entity.YouKuShowDetail;
import java.util.List;
public interface YouKuService {
    /**
     * 保存
     *
     * @param detail
     */
    public void save(YouKuShowDetail detail);
    public YouKuShowDetail getShowDetail(String showId);
    public long count(String category);
    public List<YouKuShowDetail> list(String category, int page, int pageSize);
}
src/main/java/com/yeshi/buwan/service/manager/SolrInternetSearchVideoDataManager.java
New file
@@ -0,0 +1,182 @@
package com.yeshi.buwan.service.manager;
import com.yeshi.buwan.domain.video.InternetSearchVideo;
import com.yeshi.buwan.dto.search.SolrResultDTO;
import com.yeshi.buwan.dto.search.SolrVideoSearchFilter;
import com.yeshi.buwan.service.inter.juhe.InternetSearchVideoService;
import com.yeshi.buwan.util.StringUtil;
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.SimpleFilterQuery;
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.Date;
import java.util.List;
/**
 * 搜索引擎-全网搜数据管理
 */
@Component
public class SolrInternetSearchVideoDataManager {
    private final String CORE_NAME = "buwan_internet_search";
    private final Logger logger = LoggerFactory.getLogger(SolrInternetSearchVideoDataManager.class);
    @Resource
    private SolrTemplate solrTemplate;
    @Resource
    private InternetSearchVideoService internetSearchVideoService;
    public void saveOrUpdate(InternetSearchVideo videoInfo) {
        if (videoInfo == null)
            return;
        videoInfo.setSolrTime(new Date());
        UpdateResponse updateResponse = solrTemplate.saveBean(CORE_NAME, videoInfo);
        if (updateResponse.getStatus() == 0) {
            solrTemplate.commit(CORE_NAME);
        } else {
            solrTemplate.rollback(CORE_NAME);
        }
    }
    public void saveOrUpdate(List<InternetSearchVideo> videoInfoList) {
        for (InternetSearchVideo video : videoInfoList) {
            video.setSolrTime(new Date());
        }
        UpdateResponse updateResponse = solrTemplate.saveBeans(CORE_NAME, videoInfoList);
        if (updateResponse.getStatus() == 0) {
            solrTemplate.commit(CORE_NAME);
        } else {
            solrTemplate.rollback(CORE_NAME);
        }
    }
    /**
     * 删除所有
     */
//    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(CORE_NAME, id);
        if (updateResponse.getStatus() == 0) {
            solrTemplate.commit(CORE_NAME);
        } else {
            solrTemplate.rollback(CORE_NAME);
        }
    }
    public InternetSearchVideo findOne(String id) {
        InternetSearchVideo solrVideo = solrTemplate.getById(CORE_NAME, id, InternetSearchVideo.class);
        return solrVideo;
    }
    public SolrResultDTO find(SolrVideoSearchFilter filter, int page, int pageSize) {
        if (filter.getKey() == null) {
            filter.setKey("");
        }
        logger.info(filter.getKey() + "#" + page);
        Query query = null;
        if (!StringUtil.isNullOrEmpty(filter.getKey())) {
            //solr精准检索需要带引号
            query = new SimpleQuery(new Criteria("nameStr").startsWith(filter.getKey()).or("mainactor").expression("\"" + filter.getKey() + "\""));
        } else if (!StringUtil.isNullOrEmpty(filter.getActor())) {
            query = new SimpleQuery(new Criteria("actors").expression("\"" + filter.getActor() + "\""));
        } else if (!StringUtil.isNullOrEmpty(filter.getDirector())) {
            query = new SimpleQuery(new Criteria("director").expression("\"" + filter.getDirector() + "\""));
        } else {
            query = new SimpleQuery("*:*");
        }
        if (filter.getVideoType() != null) {
            query.addFilterQuery(new SimpleFilterQuery(Criteria.where("rootType").is(filter.getVideoType())));
        }
        if (filter.getResourceIds() != null && filter.getResourceIds().length > 0) {
            query.addFilterQuery(new SimpleFilterQuery(Criteria.where("resourceIds").contains(filter.getResourceIds())));
        }
        if (filter.getArea() != null) {
            query.addFilterQuery(new SimpleFilterQuery(Criteria.where("area").contains(filter.getArea())));
        }
        /** 设置分页开始记录数(第一页) 默认0 */
        query.setOffset((page - 1) * pageSize);
        /** 设置每页显示记录数,默认10 */
        query.setRows(pageSize);
        if (!StringUtil.isNullOrEmpty(filter.getSortKey())) {
            query.addSort(new Sort(Sort.Direction.DESC, filter.getSortKey()));
        }
        ScoredPage<InternetSearchVideo> result = solrTemplate.queryForPage(CORE_NAME, query, InternetSearchVideo.class);
        System.out.println("总记录数:" + result.getTotalElements());
        List<InternetSearchVideo> list = result.getContent();
        return new SolrResultDTO(list, (int) result.getTotalElements());
    }
    public List<String> getSuggestKeyList(String key) {
        Query query = new SimpleQuery(new Criteria("nameStr").startsWith(key));
        /** 设置分页开始记录数(第一页) 默认0 */
        query.setOffset(0);
        /** 设置每页显示记录数,默认10 */
        query.setRows(10);
        ScoredPage<InternetSearchVideo> result = solrTemplate.queryForPage(CORE_NAME, query, InternetSearchVideo.class);
        System.out.println("总记录数:" + result.getTotalElements());
        List<InternetSearchVideo> list = result.getContent();
        List<String> keyList = new ArrayList<>();
        for (InternetSearchVideo sv : list)
            if (!keyList.contains(sv.getName()))
                keyList.add(sv.getName());
        return keyList;
    }
    /**
     * 同步所有专辑
     */
    public void syncAllAlbum() {
        long count = internetSearchVideoService.countAll();
        int pageSize = 100;
        int pageCount = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
        for (int i = 0; i < pageCount; i++) {
            try {
                List<InternetSearchVideo> videoList = internetSearchVideoService.listAll(i + 1, pageSize);
                saveOrUpdate(videoList);
            } catch (Exception e) {
                logger.error("专辑搜索引擎数据同步失败", e);
            }
        }
    }
    public void syncAlbum(String videoId) {
        InternetSearchVideo video = internetSearchVideoService.selectByPrimaryKey(videoId);
        if (video == null)
            return;
        saveOrUpdate(video);
    }
}
src/main/java/com/yeshi/buwan/tencent/TencentVideoUtil.java
@@ -147,8 +147,8 @@
                img = img.startsWith("http") ? img : "http:" + img;
                try {
                    TencentCoverInfo coverInfo = getCoverInfo(href);
                    coverInfo.setVertical_pic_url(img);
                    System.out.println(coverInfo);
                } catch (Exception e) {
                    e.printStackTrace();
                }
src/main/java/com/yeshi/buwan/tencent/entity/TencentCoverInfo.java
@@ -1,7 +1,12 @@
package com.yeshi.buwan.tencent.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
import java.util.List;
@Document(collection = "tencentCoverInfo")
public class TencentCoverInfo {
@@ -33,9 +38,10 @@
     * sub_genre : ["剧情"]
     */
    @Id
    private String id;
    private String douban_score;
    private int pay_status;
    private Integer pay_status;
    private String year;
    private String episode_updated;
    private String episode_all;
@@ -57,6 +63,24 @@
    private List<VipIdsBean> vip_ids;
    private List<String> subtype;
    private List<String> sub_genre;
    private Date createTime;
    private Date updateTime;
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public String getId() {
        return id;
@@ -74,11 +98,11 @@
        this.douban_score = douban_score;
    }
    public int getPay_status() {
    public Integer getPay_status() {
        return pay_status;
    }
    public void setPay_status(int pay_status) {
    public void setPay_status(Integer pay_status) {
        this.pay_status = pay_status;
    }
src/main/java/com/yeshi/buwan/tencent/entity/TencentSearchVideoMap.java
New file
@@ -0,0 +1,41 @@
package com.yeshi.buwan.tencent.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
@Document(collection = "tencentSearchVideoMap")
public class TencentSearchVideoMap {
    @Id
    private String videoId;
    @Indexed
    private String coverId;
    private Date createTime;
    public String getVideoId() {
        return videoId;
    }
    public void setVideoId(String videoId) {
        this.videoId = videoId;
    }
    public String getCoverId() {
        return coverId;
    }
    public void setCoverId(String coverId) {
        this.coverId = coverId;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}
src/main/java/com/yeshi/buwan/util/SpringContext.java
@@ -3,6 +3,7 @@
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.funtv.entity.FunTVAlbum2;
import com.yeshi.buwan.iqiyi.entity.IqiyiAlbum2;
@@ -13,8 +14,12 @@
import com.yeshi.buwan.service.inter.juhe.FunTV2Service;
import com.yeshi.buwan.service.inter.juhe.Iqiyi2Service;
import com.yeshi.buwan.service.inter.juhe.PPTVService;
import com.yeshi.buwan.service.inter.juhe.YouKuService;
import com.yeshi.buwan.service.manager.SolrAlbumVideoDataManager;
import com.yeshi.buwan.service.manager.SolrInternetSearchVideoDataManager;
import com.yeshi.buwan.util.factory.InternetSearchVideoFactory;
import com.yeshi.buwan.util.mq.CMQManager;
import com.yeshi.buwan.youku.entity.YouKuShowDetail;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationListener;
@@ -118,6 +123,55 @@
    }
    @Resource
    private YouKuService youKuService;
    @Resource
    private SolrInternetSearchVideoDataManager solrInternetSearchVideoDataManager;
    private void doInternetSearchVideoUpdateJob() {
        for (int i = 0; i < 1; i++) {
            new JobThreadExecutorServiceImpl().run(new Runnable() {
                @Override
                public void run() {
                    List<InternetSearchVideoMQMsg> solrMsgList = CMQManager.getInstance().consumeInternetSearchVideoUpdateMsg(16);
                    if (solrMsgList != null)
                        for (InternetSearchVideoMQMsg solrVideo : solrMsgList) {
                            try {
                                switch (solrVideo.getResourceId()) {
                                    //优酷
                                    case 20:
                                        YouKuShowDetail detail = youKuService.getShowDetail(solrVideo.getId());
                                        if (detail == null) {//被删除
                                            solrInternetSearchVideoDataManager.deleteById(detail.getId());
                                        } else {//更新
                                            InternetSearchVideo video = InternetSearchVideoFactory.create(detail);
                                            solrInternetSearchVideoDataManager.saveOrUpdate(video);
                                        }
                                        break;
                                    //腾讯
                                    case 17:
                                        break;
                                }
                                CMQManager.getInstance().deleteSolrMsg(solrVideo.getHandler());
                            } catch (Exception e) {
                                logger.error("更新全网搜搜索引擎出错", e);
                            }
                        }
                }
            });
        }
    }
    private void doAddIqiyi2Video() {
        new JobThreadExecutorServiceImpl().run(new Runnable() {
            @Override
src/main/java/com/yeshi/buwan/util/factory/InternetSearchVideoFactory.java
New file
@@ -0,0 +1,89 @@
package com.yeshi.buwan.util.factory;
import com.yeshi.buwan.domain.video.InternetSearchVideo;
import com.yeshi.buwan.tencent.entity.TencentCoverInfo;
import com.yeshi.buwan.util.TimeUtil;
import com.yeshi.buwan.util.video.VideoConstant;
import com.yeshi.buwan.youku.entity.YouKuShowDetail;
import org.yeshi.utils.StringUtil;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class InternetSearchVideoFactory {
    public static InternetSearchVideo create(YouKuShowDetail detail) {
        InternetSearchVideo video = new InternetSearchVideo();
        List<String> actors = new ArrayList<>();
        for (YouKuShowDetail.AttrBean.PerformerBean bean : detail.getAttr().getPerformer()) {
            actors.add(bean.getName());
        }
        video.setActors(StringUtil.concat(actors, ","));
        video.setArea(detail.getArea());
        List<String> directors = new ArrayList<>();
        for (YouKuShowDetail.AttrBean.DirectorBean bean : detail.getAttr().getDirector()) {
            directors.add(bean.getName());
        }
        video.setDirector(StringUtil.concat(directors, ","));
        video.setHpicture(detail.getThumbnail_large());
        video.setVpicture(detail.getPoster_large());
        video.setName(detail.getName());
        video.setNameStr(detail.getName());
        video.setResourceIds(20 + "");
        if (detail.getCategory().equalsIgnoreCase("电影")) {
            video.setRootType(VideoConstant.VIDEO_CATEGORY_DIANYING);
        } else if (detail.getCategory().equalsIgnoreCase("电视剧")) {
            video.setRootType(VideoConstant.VIDEO_CATEGORY_DIANSHIJU);
        } else if (detail.getCategory().equalsIgnoreCase("动漫")) {
            video.setRootType(VideoConstant.VIDEO_CATEGORY_DONGMAN);
        } else if (detail.getCategory().equalsIgnoreCase("综艺")) {
            video.setRootType(VideoConstant.VIDEO_CATEGORY_ZONGYI);
        }
        if (detail.getCategory().equalsIgnoreCase("电影")) {
            video.setTag("评分:" + new BigDecimal(detail.getScore()).setScale(1).toString());
        } else
            video.setTag(detail.getEpisode_updated());
        video.setUpdateTime(new Date());
        video.setVideoCount(Integer.parseInt(detail.getEpisode_updated()));
        video.setYear(detail.getReleased().split("-")[0]);
        video.setId(InternetSearchVideo.createId(video.getName(), video.getRootType(), video.getYear()));
        return video;
    }
    public static InternetSearchVideo create(TencentCoverInfo info) {
        InternetSearchVideo video = new InternetSearchVideo();
        video.setActors(StringUtil.concat(info.getLeading_actor(), ","));
        video.setArea(info.getArea_name());
        video.setDirector(StringUtil.concat(info.getDirector(), ","));
        video.setHpicture(info.getHorizontal_pic_url());
        video.setVpicture(info.getVertical_pic_url());
        video.setName(info.getTitle());
        video.setNameStr(info.getTitle());
        video.setResourceIds(17 + "");
        if (info.getType_name().equalsIgnoreCase("电影")) {
            video.setRootType(VideoConstant.VIDEO_CATEGORY_DIANYING);
        } else if (info.getType_name().equalsIgnoreCase("电视剧")) {
            video.setRootType(VideoConstant.VIDEO_CATEGORY_DIANSHIJU);
        } else if (info.getType_name().equalsIgnoreCase("动漫")) {
            video.setRootType(VideoConstant.VIDEO_CATEGORY_DONGMAN);
        } else if (info.getType_name().equalsIgnoreCase("综艺")) {
            video.setRootType(VideoConstant.VIDEO_CATEGORY_ZONGYI);
        }
        if (info.getType_name().equalsIgnoreCase("电影")) {
            video.setTag("评分:" + info.getScore().getScore());
        } else
            video.setTag(info.getEpisode_updated());
        video.setUpdateTime(new Date());
        video.setVideoCount(info.getVip_ids().size());
        video.setYear(info.getYear());
        video.setId(InternetSearchVideo.createId(video.getName(), video.getRootType(), video.getYear()));
        return video;
    }
}
src/main/java/com/yeshi/buwan/util/factory/SolrVideoFactory.java
@@ -1,10 +1,9 @@
package com.yeshi.buwan.util.factory;
import com.yeshi.buwan.domain.CategoryVideo;
import com.yeshi.buwan.domain.VideoType;
import com.yeshi.buwan.domain.solr.SolrAlbumVideo;
import com.yeshi.buwan.domain.VideoInfo;
import com.yeshi.buwan.domain.VideoResource;
import com.yeshi.buwan.domain.VideoType;
import com.yeshi.buwan.domain.solr.SolrAlbumVideo;
import com.yeshi.buwan.domain.solr.SolrCommonVideo;
import org.yeshi.utils.StringUtil;
src/main/java/com/yeshi/buwan/util/mq/CMQManager.java
@@ -29,6 +29,9 @@
    //更新视频附加信息
    public static String QUEUENAME_UPDATE_VIDEO_EXTRAINFO = "buwan-video-video-update-extrainfo";
    //全网搜
    public static String QUEUENAME_UPDATE_INTERNET_SEARCH = "buwan-video-update-internet-search";
    private static String TOPIC_VIDEO_EXTRAINFO = "buwan_topic_video_extrainfo_change";
@@ -42,6 +45,7 @@
        cmqUtil.createQueue(QUEUENAME_VIDEO_UPDATE_PPTV, 1024 * 1024);
        cmqUtil.createQueue(QUEUENAME_VIDEO_RESOURCE_DELETE, 1024 * 1024);
        cmqUtil.createQueue(QUEUENAME_UPDATE_VIDEO_EXTRAINFO, 1024 * 1024);
        cmqUtil.createQueue(QUEUENAME_UPDATE_INTERNET_SEARCH, 1024 * 1024);
        //创建主题
        cmqUtil.createTopic(TOPIC_VIDEO_EXTRAINFO);
@@ -231,4 +235,32 @@
    }
    /**
     * 全网搜
     *
     * @param msg
     */
    public void addInternetSearchVideoUpdateMsg(InternetSearchVideoMQMsg msg) {
        cmqUtil.sendMsg(QUEUENAME_VIDEO_RESOURCE_DELETE, new Gson().toJson(msg));
    }
    public List<InternetSearchVideoMQMsg> consumeInternetSearchVideoUpdateMsg(int count) {
        Gson gson = new Gson();
        List<InternetSearchVideoMQMsg> list = new ArrayList<>();
        List<Message> msgList = cmqUtil.recieveMsg(count, QUEUENAME_UPDATE_INTERNET_SEARCH);
        if (msgList != null)
            for (Message msg : msgList) {
                InternetSearchVideoMQMsg mm = gson.fromJson(msg.msgBody, InternetSearchVideoMQMsg.class);
                mm.setHandler(msg.receiptHandle);
                list.add(mm);
            }
        return list;
    }
    public void deleteInternetSearchVideoUpdateMsg(String handler) {
        cmqUtil.deleteMsg(QUEUENAME_UPDATE_INTERNET_SEARCH, handler);
    }
}
src/main/java/com/yeshi/buwan/youku/YouKuApiUtil.java
@@ -71,7 +71,7 @@
    public static ListResultDTO getShowListByCategory(String category, int page, int pageSize) {
        try {
            String url = String.format("https://openapi.youku.com/v2/shows/by_category.json?client_id=%s&category=%s&page=%s&count=" + pageSize, APP_ID, URLEncoder.encode(category, "UTF-8"), page);
            String url = String.format("https://openapi.youku.com/v2/shows/by_category.json?client_id=%s&paid=1&category=%s&page=%s&count=" + pageSize, APP_ID, URLEncoder.encode(category, "UTF-8"), page);
            String result = HttpUtil.get(url);
            net.sf.json.JSONObject resultJson = net.sf.json.JSONObject.fromObject(result);
            int total = resultJson.optInt("total");
@@ -84,7 +84,6 @@
        }
        return null;
    }
    public static ListResultDTO getVideoList(String showId, int page, int pageSize) {
src/main/java/com/yeshi/buwan/youku/entity/YouKuSearchVideoMap.java
New file
@@ -0,0 +1,41 @@
package com.yeshi.buwan.youku.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
@Document(collection = "youKuSearchVideoMap")
public class YouKuSearchVideoMap {
    @Id
    private String videoId;
    @Indexed
    private String showId;
    private Date createTime;
    public String getVideoId() {
        return videoId;
    }
    public void setVideoId(String videoId) {
        this.videoId = videoId;
    }
    public String getShowId() {
        return showId;
    }
    public void setShowId(String showId) {
        this.showId = showId;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}
src/main/java/com/yeshi/buwan/youku/entity/YouKuVideo.java
@@ -50,8 +50,17 @@
    private String state;
    private String category;
    private Integer is_panorama;
    private Integer show_videoseq;
    private Date updateTime;
    public Integer getShow_videoseq() {
        return show_videoseq;
    }
    public void setShow_videoseq(Integer show_videoseq) {
        this.show_videoseq = show_videoseq;
    }
    public Date getUpdateTime() {
        return updateTime;
@@ -60,7 +69,6 @@
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public String getShowId() {
src/test/java/com/hxh/spring/test/GeneralTest.java
@@ -6,8 +6,10 @@
import com.yeshi.buwan.domain.recommend.HomeRecommendSpecial;
import com.yeshi.buwan.domain.recommend.SuperHomeRecommendSpecial;
import com.yeshi.buwan.domain.system.SystemConfig;
import com.yeshi.buwan.domain.video.InternetSearchVideo;
import com.yeshi.buwan.domain.video.VideoResourceVersionMap;
import com.yeshi.buwan.service.inter.video.VideoResourceVersionMapService;
import com.yeshi.buwan.tencent.entity.TencentCoverInfo;
import com.yeshi.buwan.youku.entity.YouKuShowDetail;
import com.yeshi.buwan.youku.entity.YouKuVideo;
import org.yeshi.utils.generater.SpringComponentGenerater;
@@ -19,7 +21,7 @@
    @org.junit.Test
    public void createDao() {
        try {
            SpringComponentGenerater.createMongoDao(new MongoDBDaoData.Builder().setBaseDaoClass(MongodbBaseDao.class).setDaoPackageName("com.yeshi.buwan.dao.juhe.youku").setEntityClass(YouKuVideo.class).create(), "D:\\workspace\\BuWan\\src\\main\\java\\com\\yeshi\\buwan\\dao\\juhe\\youku\\");
            SpringComponentGenerater.createMongoDao(new MongoDBDaoData.Builder().setBaseDaoClass(MongodbBaseDao.class).setDaoPackageName("com.yeshi.buwan.dao.juhe.tencent").setEntityClass(TencentCoverInfo.class).create(), "D:\\workspace\\buwan\\buwan-server\\src\\main\\java\\com\\yeshi\\buwan\\dao\\juhe\\tencent\\");
        } catch (Exception e) {
            e.printStackTrace();
        }