


@Override
public PageVO<ProjectDTO> queryProjectIndex(ProjectQueryParamsDTO projectQueryParamsDTO, Integer pageNo, Integer pageSize, String sortBy, String order) {
//1.创建搜索请求对象
SearchRequest searchRequest = new SearchRequest(projectIndex);
//2.搜索条件
//2.1 创建条件封装对象
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
//2.2 非空判断并封装条件
if (StringUtils.isNotBlank(projectQueryParamsDTO.getName())) {
queryBuilder.must(QueryBuilders.termQuery("name", projectQueryParamsDTO.getName()));
}
if (projectQueryParamsDTO.getStartPeriod() != null) {
queryBuilder.must(QueryBuilders.rangeQuery("period").gte(projectQueryParamsDTO.getStartPeriod()));
}
if (projectQueryParamsDTO.getEndPeriod() != null) {
queryBuilder.must(QueryBuilders.rangeQuery("period").lte(projectQueryParamsDTO.getEndPeriod()));
}
//3.创建SearchSourceBuilder对象---总的封装对象
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//3.1 封装条件
searchSourceBuilder.query(queryBuilder);
//3.2 设置排序参数
if (StringUtils.isNotBlank(sortBy) && StringUtils.isNotBlank(order)) {
if (order.toLowerCase().equals("asc")) {
searchSourceBuilder.sort(sortBy, SortOrder.ASC);
}
if (order.toLowerCase().equals("desc")) {
searchSourceBuilder.sort(sortBy, SortOrder.DESC);
}
} else {
searchSourceBuilder.sort("createdate", SortOrder.DESC);
}
//3.2 设置分页参数
searchSourceBuilder.from((pageNo - 1) * pageSize);
searchSourceBuilder.size(pageSize);
//4.完成封装
searchRequest.source(searchSourceBuilder);
//5.执行搜索
List<ProjectDTO> list = new ArrayList<>();
PageVO<ProjectDTO> pageVO = new PageVO<>();
try {
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
//6.获取响应结果
SearchHits hits = searchResponse.getHits();
long totalHits = hits.getTotalHits().value;//匹配的总记录数
pageVO.setTotal(totalHits);
SearchHit[] searchHits = hits.getHits();//获取匹配数据
//7.循环封装DTO
for (SearchHit hit : searchHits) {
ProjectDTO projectDTO = new ProjectDTO();
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
Double amount = (Double) sourceAsMap.get("amount");
String projectstatus = (String) sourceAsMap.get("projectstatus");
Integer period = Integer.parseInt(sourceAsMap.get("period").toString());
String name = (String) sourceAsMap.get("name");
String description = (String) sourceAsMap.get("description");
BigDecimal annualRate = new BigDecimal(sourceAsMap.get("annualrate").toString());
projectDTO.setAmount(new BigDecimal(amount));
projectDTO.setProjectStatus(projectstatus);
projectDTO.setPeriod(period);
projectDTO.setName(name);
projectDTO.setDescription(description);
projectDTO.setAnnualRate(annualRate);
projectDTO.setId(Long.parseLong(sourceAsMap.get("id").toString()));
list.add(projectDTO);
}
} catch (Exception e) {
return null;
}
//8.封装为PageVO对象并返回
pageVO.setContent(list);
pageVO.setPageSize(pageSize);
pageVO.setPageNo(pageNo);
return pageVO;
}