package com.yeshi.buwan.service.imp.juhe;
|
|
import com.yeshi.buwan.dao.juhe.youku.InternetSearchVideoDao;
|
import com.yeshi.buwan.domain.system.SystemConfig;
|
import com.yeshi.buwan.domain.video.InternetSearchVideo;
|
import com.yeshi.buwan.dto.mq.InternetSearchVideoMQMsg;
|
import com.yeshi.buwan.exception.ParamsException;
|
import com.yeshi.buwan.service.inter.juhe.InternetSearchVideoService;
|
import com.yeshi.buwan.service.inter.system.SystemConfigService;
|
import com.yeshi.buwan.util.mq.CMQManager;
|
import org.springframework.cache.annotation.Cacheable;
|
import org.springframework.data.mongodb.core.query.Criteria;
|
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;
|
|
@Resource
|
private SystemConfigService systemConfigService;
|
|
private boolean isCanSave(InternetSearchVideo video) {
|
SystemConfig systemConfig = systemConfigService.getConfigByKeyCache("internetSearchInvalidKeyForSave");
|
if (systemConfig == null)
|
return true;
|
String value = systemConfig.getValue();
|
String[] invalidNames = value.split("#");
|
for (String st : invalidNames) {
|
if (video.getName().contains(st)) {
|
return false;
|
}
|
}
|
return true;
|
}
|
|
|
@Validated
|
@Override
|
public InternetSearchVideo save(@Valid InternetSearchVideo video) throws ParamsException, Exception {
|
if (!isCanSave(video))
|
return null;
|
|
InternetSearchVideo oldVideo = internetSearchVideoDao.get(video.getId());
|
Set<Integer> resourceIds = new HashSet<>();
|
if(oldVideo!=null) {
|
resourceIds.addAll(listResourceId(oldVideo));
|
}
|
int resourceId = Integer.parseInt(video.getResourceIds());
|
resourceIds.add(resourceId);
|
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);
|
}
|
//全网搜入搜索引擎
|
InternetSearchVideoMQMsg msg = new InternetSearchVideoMQMsg();
|
msg.setId(video.getId());
|
msg.setResourceId(resourceId);
|
CMQManager.getInstance().addInternetSearchVideoUpdateMsg(msg);
|
|
return 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);
|
}
|
|
@Cacheable(value = "internetSearch", key = "'selectByPrimaryKey-'+#id")
|
@Override
|
public InternetSearchVideo selectByPrimaryKeyCache(String id) {
|
|
return selectByPrimaryKey(id);
|
}
|
|
@Override
|
public List<InternetSearchVideo> listByIds(List<String> ids) {
|
if (ids == null || ids.size() == 0) {
|
return new ArrayList<>();
|
}
|
Query query = new Query();
|
List<Criteria> orList = new ArrayList<>();
|
for (String id : ids) {
|
orList.add(Criteria.where("id").is(id));
|
}
|
Criteria[] ors = new Criteria[orList.size()];
|
orList.toArray(ors);
|
query.addCriteria(new Criteria().orOperator(ors));
|
return internetSearchVideoDao.findList(query);
|
}
|
|
@Override
|
public void removeResourceId(String id, Integer resourceId) {
|
InternetSearchVideo video = internetSearchVideoDao.get(id);
|
if(video==null){
|
return ;
|
}
|
Set<Integer> resourceIds = listResourceId(video);
|
if(resourceIds.contains(resourceId)){
|
//移除
|
resourceIds.remove(resourceId);
|
}
|
if(resourceIds.size()<=0){
|
// 移除数据
|
internetSearchVideoDao.deleteByPrimaryKey(id);
|
}else{
|
InternetSearchVideo update=new InternetSearchVideo();
|
update.setId(id);
|
Integer[] rids = new Integer[resourceIds.size()];
|
resourceIds.toArray(rids);
|
video.setResourceIds(StringUtil.concat(rids, ","));
|
internetSearchVideoDao.updateSelective(update);
|
}
|
InternetSearchVideoMQMsg msg = new InternetSearchVideoMQMsg();
|
msg.setId(video.getId());
|
msg.setResourceId(resourceId);
|
CMQManager.getInstance().addInternetSearchVideoUpdateMsg(msg);
|
}
|
}
|