public List<PricePolicyConditionDTO> queryEs(OrderPriceOutDTO param, List<String> materialCodeList, List<String> categoryCodeList) {
BoolQueryBuilder mainQueryBoolBuilder = new BoolQueryBuilder();
//销售组织
if (CharSequenceUtil.isNotEmpty(param.getSalesOrgCode())) {
mainQueryBoolBuilder.must(QueryBuilders.termQuery(PricePolicyEsDataDTO.Fields.salesOrgCode + KEYWORD_SUFFIX, param.getSalesOrgCode()));
}
//价格类型
if (CharSequenceUtil.isNotEmpty(param.getPriceTypeName())) {
mainQueryBoolBuilder.must(QueryBuilders.termQuery(PricePolicyEsDataDTO.Fields.priceType + KEYWORD_SUFFIX, param.getPriceTypeName()));
}
//and ((policy_type = 'Foc') or (policy_type != 'Foc' and currency= #{currncy}))
if (CharSequenceUtil.isNotEmpty(param.getCurrency())) {
BoolQueryBuilder query1 = QueryBuilders.boolQuery();
query1.must(QueryBuilders.termQuery(PricePolicyEsDataDTO.Fields.policyType + KEYWORD_SUFFIX, CommonConstant.FOC));
BoolQueryBuilder query2 = QueryBuilders.boolQuery();
query2.mustNot(QueryBuilders.termsQuery(PricePolicyEsDataDTO.Fields.policyType + KEYWORD_SUFFIX, CommonConstant.FOC));
query2.must(QueryBuilders.termQuery(PricePolicyEsDataDTO.Fields.currency + KEYWORD_SUFFIX, param.getCurrency()));
BoolQueryBuilder query3 = QueryBuilders.boolQuery();
query3.should(query1);
query3.should(query2);
mainQueryBoolBuilder.must(query3);
}
//and policy_start_date >= sysdaye() and policy_end_date <= sysdaye()
mainQueryBoolBuilder.must(QueryBuilders.rangeQuery(PricePolicyEsDataDTO.Fields.policyStartDate).lte(LocalTimeUnit.getNowTime()));
mainQueryBoolBuilder.must(QueryBuilders.rangeQuery(PricePolicyEsDataDTO.Fields.policyEndDate).gte(LocalTimeUnit.getNowTime()));
// and [ (object_type = 'Product' and (object_code like '' or object_code like '' ) ) OR
// (object_type = 'ProductCategory' and (object_code like '' or object_code like '' ) )
// ]
if (CollUtil.isNotEmpty(materialCodeList) || CollUtil.isNotEmpty(categoryCodeList)) {
BoolQueryBuilder query4 = QueryBuilders.boolQuery();
if (CollUtil.isNotEmpty(materialCodeList)) {
BoolQueryBuilder query3 = QueryBuilders.boolQuery();
BoolQueryBuilder query1 = QueryBuilders.boolQuery();
query1.must(QueryBuilders.termQuery(PricePolicyEsDataDTO.Fields.objectType + KEYWORD_SUFFIX, CommonConstant.PRODUCT));
query3.must(query1);
BoolQueryBuilder query2 = QueryBuilders.boolQuery();
materialCodeList.forEach(v -> {
WildcardQueryBuilder queryBuilder1 = QueryBuilders.wildcardQuery(PricePolicyEsDataDTO.Fields.objectCode + KEYWORD_SUFFIX, "*" + v + "*");
query2.should(queryBuilder1);
});
query3.must(query2);
query4.should(query3);
}
if (CollUtil.isNotEmpty(categoryCodeList)) {
BoolQueryBuilder query3 = QueryBuilders.boolQuery();
BoolQueryBuilder query1 = QueryBuilders.boolQuery();
query1.must(QueryBuilders.termQuery(PricePolicyEsDataDTO.Fields.objectType + KEYWORD_SUFFIX, CommonConstant.PRODUCT_CATEGORY));
query3.must(query1);
BoolQueryBuilder query2 = QueryBuilders.boolQuery();
categoryCodeList.forEach(v -> {
WildcardQueryBuilder queryBuilder1 = QueryBuilders.wildcardQuery(PricePolicyEsDataDTO.Fields.objectCode + KEYWORD_SUFFIX, "*" + v + "*");
query2.should(queryBuilder1);
});
query3.must(query2);
query4.should(query3);
}
mainQueryBoolBuilder.must(query4);
}
Query query = new NativeSearchQueryBuilder().withQuery(mainQueryBoolBuilder).build();
SearchHits<PricePolicyEsDataDTO> searchHits = elasticsearchRestTemplate.search(query, PricePolicyEsDataDTO.class);
List<PricePolicyEsDataDTO> collect = searchHits.getSearchHits().stream().map(SearchHit::getContent).collect(Collectors.toList());
List<PricePolicyConditionDTO> policyConditionList = BeanUtil.copyToList(collect, PricePolicyConditionDTO.class);
return dataScopeFilter(param, policyConditionList);
}