123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- package info.aspirecn.cloud.yysj.dao.es;
- import info.aspirecn.cloud.yysj.config.IndexConfig;
- import info.aspirecn.cloud.yysj.model.response.OrderStatistics;
- import lombok.SneakyThrows;
- import org.apache.commons.lang3.StringUtils;
- import org.elasticsearch.action.search.SearchRequest;
- import org.elasticsearch.action.search.SearchResponse;
- import org.elasticsearch.client.RequestOptions;
- import org.elasticsearch.client.RestHighLevelClient;
- import org.elasticsearch.index.query.QueryBuilders;
- import org.elasticsearch.rest.RestStatus;
- import org.elasticsearch.search.aggregations.AggregationBuilders;
- import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
- import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
- import org.elasticsearch.search.aggregations.bucket.histogram.ParsedDateHistogram;
- import org.elasticsearch.search.aggregations.bucket.terms.ParsedTerms;
- import org.elasticsearch.search.aggregations.bucket.terms.Terms;
- import org.elasticsearch.search.builder.SearchSourceBuilder;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Repository;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * ElasticSearch 云验数据平台子订单索引查询
- *
- * @author dingliqiang
- */
- @Repository
- public class YysjGatewayFirstIndex {
- /**
- * 车辆查询
- */
- private static final String QUERY_CAR_INFO = "/info_check/carInfo.do";
- /**
- * 驾驶员查询
- */
- private static final String QUERY_DRIVER_INFO = "/info_check/driverInfo.do";
- /**
- * 运单查询
- */
- private static final String QUERY_WAYBILL_INFO = "/info_check/waybill.do";
- /**
- * ,人员:https://yunyancrm.logink.cn/gateway/info_check/personRoadTransport.do
- */
- private static final String QUERY_COMPANY_ROAD_INFO = "/info_check/companyRoadTransport.do";
- /**
- * 车辆:https://yunyancrm.logink.cn/gateway/info_check/carRoadTransport.do
- */
- private static final String QUERY_CAR_ROAD_INFO = "/info_check/carRoadTransport.do";
- /**
- * 人员https://yunyancrm.logink.cn/gateway/info_check/personRoadTransport.do
- */
- private static final String QUERY_PERSON_ROAD_INFO= "/info_check/personRoadTransport.do";
- /**
- * 查询产品类型
- */
- private static final String[] QUERY_TYPE = {QUERY_CAR_INFO, QUERY_DRIVER_INFO, QUERY_WAYBILL_INFO,QUERY_COMPANY_ROAD_INFO,
- QUERY_CAR_ROAD_INFO,QUERY_PERSON_ROAD_INFO
- };
- @Autowired
- private RestHighLevelClient restHighLevelClient;
- @Autowired
- private IndexConfig indexConfig;
- /**
- * 统计云验平台用户调用总量、车辆、运单、司机信息
- *
- * @param userId 云验平台用户ID
- * @return 用户调用总量、车辆、运单、司机统计信息
- */
- @SneakyThrows(IOException.class)
- public List<OrderStatistics> getTotalConsumptionAmount(String userId) {
- // 设置云验平台用户当日总量、车辆、运单、司机接口调用量集合
- List<OrderStatistics> orderStatisticsList = new ArrayList<>();
- // 构建查询源构建器
- SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
- searchSourceBuilder.size(0);
- searchSourceBuilder.query(QueryBuilders.boolQuery()
- .filter(QueryBuilders.rangeQuery("DateTime").gte("now-15d"))
- .must(QueryBuilders.termQuery("MG-UserId", userId))
- .must(QueryBuilders.termsQuery("URI.keyword", QUERY_TYPE)));
- searchSourceBuilder.aggregation(AggregationBuilders.dateHistogram("daily_count")
- .field("DateTime").format("yyyy-MM-dd").dateHistogramInterval(DateHistogramInterval.DAY)
- .subAggregation(AggregationBuilders.terms("orders_received_statistics").field("URI.keyword")));
- // 创建查询请求对象,将查询对象配置到其中
- SearchRequest request = new SearchRequest(indexConfig.getIndexYysjFirst()).source(searchSourceBuilder);
- // 执行查询请求,获取响应信息
- SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
- if (!RestStatus.OK.equals(response.status()) || response.getAggregations() == null) {
- return orderStatisticsList;
- }
- // 获取响应中的聚合信息
- ParsedDateHistogram parsedDateHistogram = response.getAggregations().get("daily_count");
- // 获取分桶信息
- List<? extends Histogram.Bucket> buckets = parsedDateHistogram.getBuckets();
- for (Histogram.Bucket bucket : buckets) {
- // 创建 OrderStatistics 对象,并设置车辆、运单、司机信息
- OrderStatistics orderStatistics = getCarDriverWaybill(bucket);
- // 设置日期
- orderStatistics.setDate(bucket.getKeyAsString());
- // 设置总数
- orderStatistics.setSum(bucket.getDocCount());
- // 加入到集合
- orderStatisticsList.add(orderStatistics);
- }
- return orderStatisticsList;
- }
- /**
- * 获取车辆、运单、司机产品的调用统计信息
- *
- * @param bucket 分桶信息
- * @return 车辆、运单、司机调用统计信息
- */
- private OrderStatistics getCarDriverWaybill(Histogram.Bucket bucket) {
- OrderStatistics orderStatistics = new OrderStatistics();
- ParsedTerms termsAggregations = bucket.getAggregations().get("orders_received_statistics");
- List<? extends Terms.Bucket> termsBuckets = termsAggregations.getBuckets();
- for (Terms.Bucket termsBucket : termsBuckets) {
- if (StringUtils.equalsIgnoreCase(QUERY_CAR_INFO, termsBucket.getKeyAsString())) {
- orderStatistics.setVehicle(termsBucket.getDocCount());
- } else if (StringUtils.equalsIgnoreCase(QUERY_DRIVER_INFO, termsBucket.getKeyAsString())) {
- orderStatistics.setDriver(termsBucket.getDocCount());
- } else if (StringUtils.equalsIgnoreCase(QUERY_WAYBILL_INFO, termsBucket.getKeyAsString())) {
- orderStatistics.setWaybill(termsBucket.getDocCount());
- } else if (StringUtils.equalsIgnoreCase(QUERY_PERSON_ROAD_INFO, termsBucket.getKeyAsString())) {
- orderStatistics.setPerson(termsBucket.getDocCount());
- } else if (StringUtils.equalsIgnoreCase(QUERY_CAR_ROAD_INFO, termsBucket.getKeyAsString())) {
- orderStatistics.setCarRoad(termsBucket.getDocCount());
- } else if (StringUtils.equalsIgnoreCase(QUERY_COMPANY_ROAD_INFO, termsBucket.getKeyAsString())) {
- orderStatistics.setCompany(termsBucket.getDocCount());
- }
- }
- return orderStatistics;
- }
- }
|