上述代碼是產品列表涉及的主要服務方法,下麵是具體實現: 產品列表的列表返回對象為: elasticsearchHelper類: ...
package com.linkwee.web.service; import java.util.List; import com.linkwee.api.request.cim.ProductPageListClassifyRequest; import com.linkwee.api.request.cim.ProductPageListRecommendRequest; import com.linkwee.api.request.cim.ProductPageListRequest; import com.linkwee.api.request.cim.ScreenProductPageListRequest; import com.linkwee.api.response.cim.ProductPageListResponse; import com.linkwee.core.orm.paging.Page; public interface ElasticsearchProductService { /** * 查詢產品列表 * @param productPageListRequest * @param page * @return */ public List<ProductPageListResponse> elasticSearchQueryProductPageList(ProductPageListRequest productPageListRequest,Page<ProductPageListResponse> page); /** * 產品分類列表(901,902) * @param productPageListClassifyRequest * @param page * @return */ public List<ProductPageListResponse> elasticSearchQueryProductCateExtendsPageList(ProductPageListClassifyRequest productPageListClassifyRequest,Page<ProductPageListResponse> page); /** * 熱推產品分頁 * @param productPageListClassifyRequest * @param page * @return */ public List<ProductPageListResponse> elasticSearchQueryHotRecommendPageList(ProductPageListClassifyRequest productPageListClassifyRequest,Page<ProductPageListResponse> page); /** * 產品分類列表(產品類型表) * @param productPageListClassifyRequest * @param page * @return */ public List<ProductPageListResponse> elasticSearchQueryProductCatePageList(ProductPageListClassifyRequest productPageListClassifyRequest,Page<ProductPageListResponse> page); /** * 用戶理財師推薦的產品列表 * @param productPageListRecommendRequest * @param page * @return */ public List<ProductPageListResponse> elasticSearchQueryRecdProductPageList(ProductPageListRecommendRequest productPageListRecommendRequest,Page<ProductPageListResponse> page); /** * 產品篩選列表分頁(PC ) * @param productPageListRequest * @param page * @return */ public List<ProductPageListResponse> elasticSearchQueryProductScreenPageList(ScreenProductPageListRequest screenProductPageListRequest,Page<ProductPageListResponse> page); }
上述代碼是產品列表涉及的主要服務方法,下麵是具體實現:
package com.linkwee.web.service.impl; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.apache.commons.lang.StringUtils; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders; import org.elasticsearch.index.query.support.QueryInnerHitBuilder; import org.elasticsearch.script.Script; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.sort.FieldSortBuilder; import org.elasticsearch.search.sort.ScoreSortBuilder; import org.elasticsearch.search.sort.SortBuilder; import org.elasticsearch.search.sort.SortOrder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.databind.ObjectMapper; import com.linkwee.api.request.cim.ProductPageListClassifyRequest; import com.linkwee.api.request.cim.ProductPageListRecommendRequest; import com.linkwee.api.request.cim.ProductPageListRequest; import com.linkwee.api.request.cim.ScreenProductPageListRequest; import com.linkwee.api.response.cim.ElasticsearchProductListResponse; import com.linkwee.api.response.cim.ProductPageListResponse; import com.linkwee.core.orm.paging.Page; import com.linkwee.web.model.CimOrginfo; import com.linkwee.web.service.CimOrginfoService; import com.linkwee.web.service.ElasticsearchProductService; import com.linkwee.xoss.helper.ElasticsearchHelper; /** * elasticSearch查詢服務 * @author Administrator * */ @Service("elasticsearchProductService") public class ElasticsearchProductServiceImpl implements ElasticsearchProductService{ Logger LOGGER = LoggerFactory.getLogger(this.getClass()); @Autowired private ElasticsearchHelper elasticsearchHelper; @Resource private CimOrginfoService cimOrginfoService; public List<ProductPageListResponse> elasticSearchQueryProductPageList(ProductPageListRequest productPageListRequest,Page<ProductPageListResponse> page){ List<ProductPageListResponse> productPageListResponses = new ArrayList<ProductPageListResponse>(); try { TransportClient client = elasticsearchHelper.getElasticSearchClient(); SearchRequestBuilder searchRequestBuilder = client.prepareSearch("logstash-supermarket-online").setTypes("productFull"); BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery() .must(QueryBuilders.termQuery("orgStatus", 1)) .must(QueryBuilders.termQuery("status", 1)) .must(QueryBuilders.termQuery("auditStatus", 1)) .must(QueryBuilders.scriptQuery(new Script("doc['buyTotalMoney'].value > doc['buyedTotalMoney'].value")));// if(!productPageListRequest.getIfHaveGray()){ queryBuilder.must(QueryBuilders.termQuery("orgGrayStatus", 0)); } if(StringUtils.isNotBlank(productPageListRequest.getOrgNumber())){ queryBuilder.must(QueryBuilders.termQuery("orgNumber.raw", productPageListRequest.getOrgNumber())); } searchRequestBuilder = searchRequestBuilder.setQuery(queryBuilder);//QueryBuilders.boolQuery().filter(queryBuilder) SortBuilder isSallingSort = new FieldSortBuilder("isSalling").order(SortOrder.DESC); SortBuilder commonSort = null; SortBuilder timeSort = null; Integer cnSort = productPageListRequest.getSort(); Integer cnOrder = productPageListRequest.getOrder(); if(cnSort != null && cnOrder != null){ if(cnSort == 1){ commonSort = new FieldSortBuilder("showIndex"); }else if(cnSort == 2 && cnOrder == 0){ commonSort = new FieldSortBuilder("flowMinRate"); }else if(cnSort == 2 && cnOrder == 1){ commonSort = new FieldSortBuilder("flowMaxRate"); }else if(cnSort == 3 && cnOrder == 0){ commonSort = new FieldSortBuilder("deadLineMinValue"); }else if(cnSort == 3 && cnOrder == 1){ commonSort = new FieldSortBuilder("deadLineMaxValue"); }else if(cnSort == 4){ commonSort = new FieldSortBuilder("feeRatio"); } if(cnOrder == 0){ commonSort.order(SortOrder.ASC); }else if(cnOrder == 1){ commonSort.order(SortOrder.DESC); } timeSort = new FieldSortBuilder("createTime").order(SortOrder.DESC); } searchRequestBuilder.addSort(isSallingSort); if(commonSort != null){ searchRequestBuilder.addSort(commonSort); } if(timeSort != null){ searchRequestBuilder.addSort(timeSort); } SearchResponse searchResponse = searchRequestBuilder.setFrom((page.getPageNo()-1)*page.getPageSize()).setSize(page.getPageSize()).get();//178271C881504FBCBF1DF80DE9944D66 SearchHits hits = searchResponse.getHits(); ObjectMapper mapper = new ObjectMapper(); page.setTotalCount((int) hits.getTotalHits()); page.setTotalPages((int) (hits.getTotalHits()%page.getPageSize() == 0 ? hits.getTotalHits()/page.getPageSize() : hits.getTotalHits()/page.getPageSize() +1)); for (int i = 0; i < hits.getHits().length; i++) { Map<String, Object> temp = hits.getHits()[i].getSource(); temp = elasticsearchHelper.removeUseless(temp); ElasticsearchProductListResponse elasticsearchProductListResponse = mapper.readValue(JSONObject.toJSON(temp).toString(), ElasticsearchProductListResponse.class); productPageListResponses.add(elasticsearchHelper.conversProductPageListResponses(productPageListRequest,elasticsearchProductListResponse)); } } catch (Exception e) { LOGGER.info("elasticSearch查詢產品列表異常", e); } return productPageListResponses; } @Override public List<ProductPageListResponse> elasticSearchQueryProductCateExtendsPageList(ProductPageListClassifyRequest productPageListClassifyRequest,Page<ProductPageListResponse> page) { List<ProductPageListResponse> productPageListResponses = new ArrayList<ProductPageListResponse>(); try { TransportClient client = elasticsearchHelper.getElasticSearchClient(); SearchRequestBuilder searchRequestBuilder = client.prepareSearch("logstash-supermarket-online").setTypes("productFull"); BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery() .must(QueryBuilders.termQuery("orgStatus", 1)) .must(QueryBuilders.termQuery("status", 1)) .must(QueryBuilders.termQuery("auditStatus", 1)) .must(QueryBuilders.scriptQuery(new Script("doc['buyTotalMoney'].value > doc['buyedTotalMoney'].value")));// if(!productPageListClassifyRequest.getIfHaveGray()){ queryBuilder.must(QueryBuilders.termQuery("orgGrayStatus", 0)); } if(StringUtils.isNotBlank(productPageListClassifyRequest.getOrgNumber())){ queryBuilder.must(QueryBuilders.termQuery("orgNumber.raw", productPageListClassifyRequest.getOrgNumber())); } if(productPageListClassifyRequest.getCateId() == 901){ queryBuilder.must(QueryBuilders.termQuery("orgFeeType", 1)); }else if(productPageListClassifyRequest.getCateId() == 902){ queryBuilder.must(QueryBuilders.termQuery("orgFeeType", 2)); } searchRequestBuilder = searchRequestBuilder.setQuery(queryBuilder); SortBuilder isSallingSort = new FieldSortBuilder("isSalling").order(SortOrder.DESC); SortBuilder commonSort = null; SortBuilder timeSort = null; Integer cnSort = productPageListClassifyRequest.getSort(); Integer cnOrder = productPageListClassifyRequest.getOrder(); if(cnSort != null && cnOrder != null){ if(cnSort == 1){ commonSort = new FieldSortBuilder("showIndex"); }else if(cnSort == 2 && cnOrder == 0){ commonSort = new FieldSortBuilder("flowMinRate"); }else if(cnSort == 2 && cnOrder == 1){ commonSort = new FieldSortBuilder("flowMaxRate"); }else if(cnSort == 3 && cnOrder == 0){ commonSort = new FieldSortBuilder("deadLineMinValue"); }else if(cnSort == 3 && cnOrder == 1){ commonSort = new FieldSortBuilder("deadLineMaxValue"); }else if(cnSort == 4){ commonSort = new FieldSortBuilder("feeRatio"); } if(cnOrder == 0){ commonSort.order(SortOrder.ASC); }else if(cnOrder == 1){ commonSort.order(SortOrder.DESC); } timeSort = new FieldSortBuilder("createTime").order(SortOrder.DESC); } searchRequestBuilder.addSort(isSallingSort); if(commonSort != null){ searchRequestBuilder.addSort(commonSort); } if(timeSort != null){ searchRequestBuilder.addSort(timeSort); } SearchResponse searchResponse = searchRequestBuilder.setFrom((page.getPageNo()-1)*page.getPageSize()).setSize(page.getPageSize()).get();//178271C881504FBCBF1DF80DE9944D66 SearchHits hits = searchResponse.getHits(); ObjectMapper mapper = new ObjectMapper(); page.setTotalCount((int) hits.getTotalHits()); page.setTotalPages((int) (hits.getTotalHits()%page.getPageSize() == 0 ? hits.getTotalHits()/page.getPageSize() : hits.getTotalHits()/page.getPageSize() +1)); for (int i = 0; i < hits.getHits().length; i++) { Map<String, Object> temp = hits.getHits()[i].getSource(); temp = elasticsearchHelper.removeUseless(temp); ElasticsearchProductListResponse elasticsearchProductListResponse = mapper.readValue(JSONObject.toJSON(temp).toString(), ElasticsearchProductListResponse.class); productPageListResponses.add(elasticsearchHelper.conversProductPageListResponses(productPageListClassifyRequest,elasticsearchProductListResponse)); } } catch (Exception e) { LOGGER.info("elasticSearch查詢產品分類列表異常", e); } return productPageListResponses; } @Override public List<ProductPageListResponse> elasticSearchQueryHotRecommendPageList(ProductPageListClassifyRequest productPageListClassifyRequest,Page<ProductPageListResponse> page) { List<ProductPageListResponse> productPageListResponses = new ArrayList<ProductPageListResponse>(); try { TransportClient client = elasticsearchHelper.getElasticSearchClient(); SearchRequestBuilder searchRequestBuilder = client.prepareSearch("logstash-supermarket-online").setTypes("productFull"); BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery() .must(QueryBuilders.termQuery("orgStatus", 1)) .must(QueryBuilders.termQuery("status", 1)) .must(QueryBuilders.termQuery("auditStatus", 1)) .must(QueryBuilders.termQuery("orgIsstaticproduct", 0)) .must(QueryBuilders.scriptQuery(new Script("doc['buyTotalMoney'].value > doc['buyedTotalMoney'].value"))).boost(0);// if(!productPageListClassifyRequest.getIfHaveGray()){ queryBuilder.must(QueryBuilders.termQuery("orgGrayStatus", 0)).boost(0); } queryBuilder.must(QueryBuilders.hasChildQuery("productRef", QueryBuilders.scriptQuery(new Script("new Period(new Date().getTime(), doc['recommendTime'].value).getDays() <= 2"))).innerHit(new QueryInnerHitBuilder()).scoreMode("sum")); searchRequestBuilder = searchRequestBuilder.setQuery(queryBuilder); SortBuilder recommendTimesSort = new ScoreSortBuilder().order(SortOrder.DESC); //SortBuilder recommendTimesSort = new ScriptSortBuilder(new Script(""), "number").order(SortOrder.DESC);//inner_hits.productRef.hits.total searchRequestBuilder.addSort(recommendTimesSort); SearchResponse searchResponse = searchRequestBuilder.setFrom((page.getPageNo()-1)*page.getPageSize()).setSize(page.getPageSize()).get();//178271C881504FBCBF1DF80DE9944D66 SearchHits hits = searchResponse.getHits(); ObjectMapper mapper = new ObjectMapper(); page.setTotalCount((int) hits.getTotalHits()); page.setTotalPages((int) (hits.getTotalHits()%page.getPageSize() == 0 ? hits.getTotalHits()/page.getPageSize() : hits.getTotalHits()/page.getPageSize() +1)); for (int i = 0; i < hits.getHits().length; i++) { Map<String, Object> temp = hits.getHits()[i].getSource(); //Map<String, SearchHits> tempXXX = hits.getHits()[i].getInnerHits(); /*System.out.println(tempXXX.get("productRef").getTotalHits()); System.out.println(hits.getHits()[i].getScore());*/ temp = elasticsearchHelper.removeUseless(temp); ElasticsearchProductListResponse elasticsearchProductListResponse = mapper.readValue(JSONObject.toJSON(temp).toString(), ElasticsearchProductListResponse.class); productPageListResponses.add(elasticsearchHelper.conversProductPageListResponses(productPageListClassifyRequest,elasticsearchProductListResponse)); } } catch (Exception e) { LOGGER.info("elasticSearch查詢熱推產品列表分頁異常", e); } return productPageListResponses; } @Override public List<ProductPageListResponse> elasticSearchQueryProductCatePageList(ProductPageListClassifyRequest productPageListClassifyRequest,Page<ProductPageListResponse> page) { List<ProductPageListResponse> productPageListResponses = new ArrayList<ProductPageListResponse>(); try { TransportClient client = elasticsearchHelper.getElasticSearchClient(); SearchRequestBuilder searchRequestBuilder = client.prepareSearch("logstash-supermarket-online").setTypes("productFull"); BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery() .must(QueryBuilders.termQuery("orgStatus", 1)) .must(QueryBuilders.termQuery("status", 1)) .must(QueryBuilders.termQuery("auditStatus", 1)) .must(QueryBuilders.scriptQuery(new Script("doc['buyTotalMoney'].value > doc['buyedTotalMoney'].value"))).boost(0);// if(!productPageListClassifyRequest.getIfHaveGray()){ queryBuilder.must(QueryBuilders.termQuery("orgGrayStatus", 0).boost(0)); } if(StringUtils.isNotBlank(productPageListClassifyRequest.getOrgNumber())){ queryBuilder.must(QueryBuilders.termQuery("orgNumber.raw", productPageListClassifyRequest.getOrgNumber()).boost(0)); } if(productPageListClassifyRequest.getCateId() != null){ queryBuilder .must(QueryBuilders.hasChildQuery( "productInfoCateAll", QueryBuilders.boolQuery() .must(QueryBuilders.functionScoreQuery(ScoreFunctionBuilders.fieldValueFactorFunction("sort").factor(1))) .must(QueryBuilders.boolQuery() .must(QueryBuilders.termQuery("cateId",productPageListClassifyRequest.getCateId())) .must(QueryBuilders.termQuery("disabled",0)) .boost(0))) .innerHit(new QueryInnerHitBuilder()) .scoreMode("avg")); } searchRequestBuilder = searchRequestBuilder.setQuery(queryBuilder); SortBuilder isSallingSort = new FieldSortBuilder("isSalling").order(SortOrder.DESC); SortBuilder tpicSortSort = new ScoreSortBuilder().order(SortOrder.DESC); SortBuilder commonSort = null; SortBuilder timeSort = null; Integer cnSort = productPageListClassifyRequest.getSort(); Integer cnOrder = productPageListClassifyRequest.getOrder(); if(cnSort != null && cnOrder != null){ if(cnSort == 1){ commonSort = new FieldSortBuilder("showIndex"); }else if(cnSort == 2 && cnOrder == 0){ commonSort = new FieldSortBuilder("flowMinRate"); }else if(cnSort == 2 && cnOrder == 1){ commonSort = new FieldSortBuilder("flowMaxRate"); }else if(cnSort == 3 && cnOrder == 0){ commonSort = new FieldSortBuilder("deadLineMinValue"); }else if(cnSort == 3 && cnOrder == 1){ commonSort = new FieldSortBuilder("deadLineMaxValue"); }else if(cnSort == 4){ commonSort = new FieldSortBuilder("feeRatio"); } if(cnOrder == 0){ commonSort.order(SortOrder.ASC); }else if(cnOrder == 1){ commonSort.order(SortOrder.DESC); } timeSort = new FieldSortBuilder("createTime").order(SortOrder.DESC); } searchRequestBuilder.addSort(isSallingSort); searchRequestBuilder.addSort(tpicSortSort); if(commonSort != null){ searchRequestBuilder.addSort(commonSort); } if(timeSort != null){ searchRequestBuilder.addSort(timeSort); } SearchResponse searchResponse = searchRequestBuilder.setFrom((page.getPageNo()-1)*page.getPageSize()).setSize(page.getPageSize()).get();//178271C881504FBCBF1DF80DE9944D66 SearchHits hits = searchResponse.getHits(); ObjectMapper mapper = new ObjectMapper(); page.setTotalCount((int) hits.getTotalHits()); page.setTotalPages((int) (hits.getTotalHits()%page.getPageSize() == 0 ? hits.getTotalHits()/page.getPageSize() : hits.getTotalHits()/page.getPageSize() +1)); for (int i = 0; i < hits.getHits().length; i++) { Map<String, Object> temp = hits.getHits()[i].getSource(); //System.out.println(hits.getHits()[i].getScore()); temp = elasticsearchHelper.removeUseless(temp); ElasticsearchProductListResponse elasticsearchProductListResponse = mapper.readValue(JSONObject.toJSON(temp).toString(), ElasticsearchProductListResponse.class); productPageListResponses.add(elasticsearchHelper.conversProductPageListResponses(productPageListClassifyRequest,elasticsearchProductListResponse)); } } catch (Exception e) { LOGGER.info("elasticSearch查詢產品分類列表異常", e); } return productPageListResponses; } @Override public List<ProductPageListResponse> elasticSearchQueryRecdProductPageList(ProductPageListRecommendRequest productPageListRecommendRequest,Page<ProductPageListResponse> page) { List<ProductPageListResponse> productPageListResponses = new ArrayList<ProductPageListResponse>(); try { TransportClient client = elasticsearchHelper.getElasticSearchClient(); SearchRequestBuilder searchRequestBuilder = client.prepareSearch("logstash-supermarket-online").setTypes("productFull"); BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery() .must(QueryBuilders.termQuery("orgStatus", 1)) .must(QueryBuilders.termQuery("status", 1)) .must(QueryBuilders.termQuery("auditStatus", 1)) .must(QueryBuilders.scriptQuery(new Script("doc['buyTotalMoney'].value > doc['buyedTotalMoney'].value")));// if(!productPageListRecommendRequest.getIfHaveGray()){ queryBuilder.must(QueryBuilders.termQuery("orgGrayStatus", 0)); } if(StringUtils.isNotBlank(productPageListRecommendRequest.getOrgNumber())){ queryBuilder.must(QueryBuilders.termQuery("orgNumber.raw", productPageListRecommendRequest.getOrgNumber())); } queryBuilder .must(QueryBuilders .hasChildQuery( "productRef", QueryBuilders.boolQuery() .must(QueryBuilders.termQuery("investorUserId", productPageListRecommendRequest.getUserId())) .must(QueryBuilders.termQuery("saleUserId", productPageListRecommendRequest.getCfplannerUserId())) ) .innerHit(new QueryInnerHitBuilder()) ); searchRequestBuilder = searchRequestBuilder.setQuery(queryBuilder); SortBuilder commonSort = null; SortBuilder timeSort = null; Integer cnSort = productPageListRecommendRequest.getSort(); Integer cnOrder = productPageListRecommendRequest.getOrder(); if(cnSort != null && cnOrder != null){ if(cnSort == 1){ commonSort = new FieldSortBuilder("showIndex"); }else if(cnSort == 2 && cnOrder == 0){ commonSort = new FieldSortBuilder("flowMinRate"); }else if(cnSort == 2 && cnOrder == 1){ commonSort = new FieldSortBuilder("flowMaxRate"); }else if(cnSort == 3 && cnOrder == 0){ commonSort = new FieldSortBuilder("deadLineMinValue"); }else if(cnSort == 3 && cnOrder == 1){ commonSort = new FieldSortBuilder("deadLineMaxValue"); }else if(cnSort == 4){ commonSort = new FieldSortBuilder("feeRatio"); } if(cnOrder == 0){ commonSort.order(SortOrder.ASC); }else if(cnOrder == 1){ commonSort.order(SortOrder.DESC); } timeSort = new FieldSortBuilder("createTime").order(SortOrder.DESC); } if(commonSort != null){ searchRequestBuilder.addSort(commonSort); } if(timeSort != null){ searchRequestBuilder.addSort(timeSort); } SearchResponse searchResponse = searchRequestBuilder.setFrom((page.getPageNo()-1)*page.getPageSize()).setSize(page.getPageSize()).get();//178271C881504FBCBF1DF80DE9944D66 SearchHits hits = searchResponse.getHits(); ObjectMapper mapper = new ObjectMapper(); page.setTotalCount((int) hits.getTotalHits()); page.setTotalPages((int) (hits.getTotalHits()%page.getPageSize() == 0 ? hits.getTotalHits()/page.getPageSize() : hits.getTotalHits()/page.getPageSize() +1)); for (int i = 0; i < hits.getHits().length; i++) { Map<String, Object> temp = hits.getHits()[i].getSource(); temp = elasticsearchHelper.removeUseless(temp); ElasticsearchProductListResponse elasticsearchProductListResponse = mapper.readValue(JSONObject.toJSON(temp).toString(), ElasticsearchProductListResponse.class); productPageListResponses.add(elasticsearchHelper.conversProductPageListResponses(productPageListRecommendRequest,elasticsearchProductListResponse)); } } catch (Exception e) { LOGGER.info("elasticSearch查詢客戶的理財師推薦產品列表分頁異常", e); } return productPageListResponses; } @Override public List<ProductPageListResponse> elasticSearchQueryProductScreenPageList(ScreenProductPageListRequest screenProductPageListRequest,Page<ProductPageListResponse> page) { List<ProductPageListResponse> productPageListResponses = new ArrayList<ProductPageListResponse>(); try { TransportClient client = elasticsearchHelper.getElasticSearchClient(); SearchRequestBuilder searchRequestBuilder = client.prepareSearch("logstash-supermarket-online").setTypes("productFull"); BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery() .must(QueryBuilders.termQuery("orgStatus", 1)) .must(QueryBuilders.termQuery("status", 1)) .must(QueryBuilders.termQuery("auditStatus", 1)) .must(QueryBuilders.scriptQuery(new Script("doc['saleStartTime'].value < new Date().getTime()"))) .must(QueryBuilders.scriptQuery(new Script("doc['buyTotalMoney'].value > doc['buyedTotalMoney'].value")));// if(!screenProductPageListRequest.getIfHaveGray()){ queryBuilder.must(QueryBuilders.termQuery("orgGrayStatus", 0)); } if(StringUtils.isNotBlank(screenProductPageListRequest.getOrgNumber())){ queryBuilder.must(QueryBuilders.termQuery("orgNumber.raw", screenProductPageListRequest.getOrgNumber())); } if(StringUtils.isNotBlank(screenProductPageListRequest.getMinDeadLine()) && StringUtils.isNotBlank(screenProductPageListRequest.getMaxDeadLine())){ queryBuilder.must(QueryBuilders.boolQuery().minimumNumberShouldMatch(1) .should(QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("deadLineMinValue").lte(screenProductPageListRequest.getMinDeadLine())).must(QueryBuilders.rangeQuery("deadLineMaxValue").gte(screenProductPageListRequest.getMaxDeadLine()))) .should(QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("deadLineMinValue").gte(screenProductPageListRequest.getMinDeadLine())).must(QueryBuilders.rangeQuery("deadLineMinValue").lte(screenProductPageListRequest.getMaxDeadLine()))) .should(QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("deadLineMaxValue").gte(screenProductPageListRequest.getMinDeadLine())).must(QueryBuilders.rangeQuery("deadLineMaxValue").lte(screenProductPageListRequest.getMaxDeadLine()))) ); } if(StringUtils.isNotBlank(screenProductPageListRequest.getMinYearProfit()) && StringUtils.isNotBlank(screenProductPageListRequest.getMaxYearProfit())){ queryBuilder.must(QueryBuilders.boolQuery().minimumNumberShouldMatch(1) .should(QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("flowMinRate").lte(screenProductPageListRequest.getMinYearProfit())).must(QueryBuilders.rangeQuery("flowMaxRate").gte(screenProductPageListRequest.getMaxYearProfit()))) .should(QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("flowMinRate").gte(screenProductPageListRequest.getMinYearProfit())).must(QueryBuilders.rangeQuery("flowMinRate").lte(screenProductPageListRequest.getMaxYearProfit()))) .should(QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("flowMaxRate").gte(screenProductPageListRequest.getMinYearProfit())).must(QueryBuilders.rangeQuery("flowMaxRate").lte(screenProductPageListRequest.getMaxYearProfit()))) ); } if(StringUtils.isNotBlank(screenProductPageListRequest.getPlatformContext())){ List<String> orgNumberList = new ArrayList<String>(); CimOrginfo cimOrginfo = new CimOrginfo(); cimOrginfo.setContext(screenProductPageListRequest.getPlatformContext()); List<CimOrginfo> orgInfoList= cimOrginfoService.selectListByCondition(cimOrginfo); for(CimOrginfo temp : orgInfoList){ orgNumberList.add(temp.getOrgNumber()); } queryBuilder.must(QueryBuilders.termsQuery("orgNumber.raw", orgNumberList)); } if(StringUtils.isNotBlank(screenProductPageListRequest.getSecurityLevel())){ queryBuilder.must(QueryBuilders.scriptQuery(new Script("doc['orgGrade.raw'].value.toInteger() " + screenProductPageListRequest.getSecurityLevel()))); } searchRequestBuilder = searchRequestBuilder.setQuery(queryBuilder); SortBuilder isSallingSort = new FieldSortBuilder("isSalling").order(SortOrder.DESC); SortBuilder commonSort = null; SortBuilder timeSort = null; Integer cnSort = screenProductPageListRequest.getSort(); Integer cnOrder = screenProductPageListRequest.getOrder(); if(cnSort != null && cnOrder != null){ if(cnSort == 1){ commonSort = new FieldSortBuilder("showIndex"); }else if(cnSort == 2 && cnOrder == 0){ commonSort = new FieldSortBuilder("flowMinRate"); }else if(cnSort == 2 && cnOrder == 1){ commonSort = new FieldSortBuilder("flowMaxRate"); }else if(cnSort == 3 && cnOrder == 0){ commonSort = new FieldSortBuilder("deadLineMinValue"); }else if(cnSort == 3 && cnOrder == 1){ commonSort = new FieldSortBuilder("deadLineMaxValue"); }else if(cnSort == 4){ commonSort = new FieldSortBuilder("feeRatio"); } if(cnOrder == 0){ commonSort.order(SortOrder.ASC); }else if(cnOrder == 1){ commonSort.order(SortOrder.DESC); } timeSort = new FieldSortBuilder("createTime").order(SortOrder.DESC); } searchRequestBuilder.addSort(isSallingSort); if(commonSort != null){ searchRequestBuilder.addSort(commonSort); } if(timeSort != null){ searchRequestBuilder.addSort(timeSort); } SearchResponse searchResponse = searchRequestBuilder.setFrom((page.getPageNo()-1)*page.getPageSize()).setSize(page.getPageSize()).get();//178271C881504FBCBF1DF80DE9944D66 SearchHits hits = searchResponse.getHits(); ObjectMapper mapper = new ObjectMapper(); page.setTotalCount((int) hits.getTotalHits()); page.setTotalPages((int) (hits.getTotalHits()%page.getPageSize() == 0 ? hits.getTotalHits()/page.getPageSize() : hits.getTotalHits()/page.getPageSize() +1)); for (int i = 0; i < hits.getHits().length; i++) { Map<String, Object> temp = hits.getHits()[i].getSource(); temp = elasticsearchHelper.removeUseless(temp); ElasticsearchProductListResponse elasticsearchProductListResponse = mapper.readValue(JSONObject.toJSON(temp).toString(), ElasticsearchProductListResponse.class); productPageListResponses.add(elasticsearchHelper.conversProductPageListResponses(screenProductPageListRequest,elasticsearchProductListResponse)); } } catch (Exception e) { LOGGER.info("elasticSearch查詢產品列表異常", e); } return productPageListResponses; } }
產品列表的列表返回對象為:
package com.linkwee.api.response.cim; import java.math.BigDecimal; import java.util.Date; import java.util.List; import com.linkwee.web.model.ActivityList; import com.linkwee.web.model.CimOrgMemberInfo; import com.linkwee.web.model.CimProduct; public class ElasticsearchProductListResponse extends CimProduct { /** * */ private static final long serialVersionUID = 1L; /** *主鍵,自增長 */ private Integer orgId; /** *機構編碼-不重覆欄位 */ private String orgNumber; /** *機構名稱 */ private String orgName; /** *機構後臺賬戶 */ private String orgAccount; /** *機構後臺密碼 */ private String orgPassw