package cn.cetc54.platform.core.serviceimpl.elasticsearch;
|
|
import cn.cetc54.platform.core.service.elasticsearch.EsLogService;
|
import cn.cetc54.platform.core.common.vo.SearchVo;
|
import cn.cetc54.platform.core.dao.elasticsearch.EsLogDao;
|
import cn.cetc54.platform.core.entity.elasticsearch.EsLog;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.StrUtil;
|
import lombok.extern.slf4j.Slf4j;
|
import org.elasticsearch.index.query.QueryBuilder;
|
import org.elasticsearch.index.query.QueryBuilders;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Pageable;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
/**
|
* @author
|
*/
|
@Service
|
@Transactional
|
@Slf4j
|
public class EsLogServiceImpl implements EsLogService {
|
|
/**
|
* 可选
|
*/
|
@Autowired(required = false)
|
private EsLogDao logDao;
|
|
@Override
|
public EsLog saveLog(EsLog esLog) {
|
|
return logDao.save(esLog);
|
}
|
|
@Override
|
public void deleteLog(String id) {
|
|
logDao.deleteById(id);
|
}
|
|
@Override
|
public void deleteAll() {
|
|
logDao.deleteAll();
|
}
|
|
@Override
|
public Page<EsLog> findByConfition(Integer type, String key, SearchVo searchVo, Pageable pageable) {
|
|
if(type==null&&StrUtil.isBlank(key)&&StrUtil.isBlank(searchVo.getStartDate())){
|
// 无过滤条件获取全部
|
return logDao.findAll(pageable);
|
}else if(type!=null&&StrUtil.isBlank(key)&&StrUtil.isBlank(searchVo.getStartDate())){
|
// 仅有type
|
return logDao.findByLogType(type, pageable);
|
}
|
|
QueryBuilder qb;
|
|
QueryBuilder qb0 = QueryBuilders.termQuery("logType", type);
|
QueryBuilder qb1 = QueryBuilders.multiMatchQuery(key, "name", "requestUrl", "requestType","requestParam","username","ip","ipInfo");
|
// 在有type条件下
|
if(StrUtil.isNotBlank(key)&&StrUtil.isBlank(searchVo.getStartDate())&&StrUtil.isBlank(searchVo.getEndDate())){
|
// 仅有key
|
qb = QueryBuilders.boolQuery().must(qb0).must(qb1);
|
}else if(StrUtil.isBlank(key)&&StrUtil.isNotBlank(searchVo.getStartDate())&&StrUtil.isNotBlank(searchVo.getEndDate())){
|
// 仅有时间范围
|
Long start = DateUtil.parse(searchVo.getStartDate()).getTime();
|
Long end = DateUtil.endOfDay(DateUtil.parse(searchVo.getEndDate())).getTime();
|
QueryBuilder qb2 = QueryBuilders.rangeQuery("timeMillis").gte(start).lte(end);
|
qb = QueryBuilders.boolQuery().must(qb0).must(qb2);
|
}else{
|
// 两者都有
|
Long start = DateUtil.parse(searchVo.getStartDate()).getTime();
|
Long end = DateUtil.endOfDay(DateUtil.parse(searchVo.getEndDate())).getTime();
|
QueryBuilder qb2 = QueryBuilders.rangeQuery("timeMillis").gte(start).lte(end);
|
qb = QueryBuilders.boolQuery().must(qb0).must(qb1).must(qb2);
|
}
|
|
//多字段搜索
|
return logDao.search(qb, pageable);
|
}
|
}
|