package com.ycl.utils;
|
|
import com.ycl.platform.domain.query.DataCenterQuery;
|
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.data.mongodb.core.query.TextCriteria;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.StringUtils;
|
|
import java.lang.reflect.Field;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Objects;
|
|
/**
|
* mongo工具类
|
*
|
* @author:xp
|
* @date:2024/8/2 15:18
|
*/
|
public class MongoUtil {
|
|
/**
|
* 构造数据中心搜索的条件
|
*
|
* @param params 数据中心请求参数
|
* @param gbFiled 国标码字段是哪一个
|
* @param timeFiled 时间字段是哪一个
|
* @param gbList 国标码
|
*/
|
public static Query getQuery(DataCenterQuery params, String gbFiled, String timeFiled, List<String> gbList) {
|
// 关键字
|
TextCriteria text = null;
|
if (StringUtils.hasText(params.getKeyword())) {
|
text = TextCriteria.forDefaultLanguage().matching(params.getKeyword());
|
}
|
|
Criteria in = null;
|
// in
|
if (! CollectionUtils.isEmpty(gbList)) {
|
in = Criteria.where(gbFiled).in(gbList);
|
}
|
|
// 时间
|
Criteria time = Criteria.where(timeFiled).gte(params.getStartTime()).lte(params.getEndTime());
|
|
// 将查询条件and起来
|
Criteria and = new Criteria();
|
List<Criteria> qList = new ArrayList<>(3);
|
if (Objects.nonNull(text)) {
|
qList.add(Criteria.byExample(text));
|
}
|
if (Objects.nonNull(in)) {
|
qList.add(in);
|
}
|
qList.add(time);
|
and.andOperator(qList);
|
// 返回查询
|
return Query.query(and);
|
}
|
|
/**
|
* 构造数据中心搜索的条件
|
*
|
* @param query 查询条件
|
* @param timeFiled 时间字段是哪一个
|
* @param params 请求参数
|
*/
|
public static void setPage(Query query,DataCenterQuery params, String timeFiled) {
|
// 排序分页
|
query.with(Sort.by(Sort.Order.desc(timeFiled))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
|
}
|
|
}
|