YysjGatewayFirstIndex.java 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package info.aspirecn.cloud.yysj.dao.es;
  2. import info.aspirecn.cloud.yysj.config.IndexConfig;
  3. import info.aspirecn.cloud.yysj.model.response.OrderStatistics;
  4. import lombok.SneakyThrows;
  5. import org.apache.commons.lang3.StringUtils;
  6. import org.elasticsearch.action.search.SearchRequest;
  7. import org.elasticsearch.action.search.SearchResponse;
  8. import org.elasticsearch.client.RequestOptions;
  9. import org.elasticsearch.client.RestHighLevelClient;
  10. import org.elasticsearch.index.query.QueryBuilders;
  11. import org.elasticsearch.rest.RestStatus;
  12. import org.elasticsearch.search.aggregations.AggregationBuilders;
  13. import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
  14. import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
  15. import org.elasticsearch.search.aggregations.bucket.histogram.ParsedDateHistogram;
  16. import org.elasticsearch.search.aggregations.bucket.terms.ParsedTerms;
  17. import org.elasticsearch.search.aggregations.bucket.terms.Terms;
  18. import org.elasticsearch.search.builder.SearchSourceBuilder;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.stereotype.Repository;
  21. import java.io.IOException;
  22. import java.util.ArrayList;
  23. import java.util.List;
  24. /**
  25. * ElasticSearch 云验数据平台子订单索引查询
  26. *
  27. * @author dingliqiang
  28. */
  29. @Repository
  30. public class YysjGatewayFirstIndex {
  31. /**
  32. * 车辆查询
  33. */
  34. private static final String QUERY_CAR_INFO = "/info_check/carInfo.do";
  35. /**
  36. * 驾驶员查询
  37. */
  38. private static final String QUERY_DRIVER_INFO = "/info_check/driverInfo.do";
  39. /**
  40. * 运单查询
  41. */
  42. private static final String QUERY_WAYBILL_INFO = "/info_check/waybill.do";
  43. /**
  44. * ,人员:https://yunyancrm.logink.cn/gateway/info_check/personRoadTransport.do
  45. */
  46. private static final String QUERY_COMPANY_ROAD_INFO = "/info_check/companyRoadTransport.do";
  47. /**
  48. * 车辆:https://yunyancrm.logink.cn/gateway/info_check/carRoadTransport.do
  49. */
  50. private static final String QUERY_CAR_ROAD_INFO = "/info_check/carRoadTransport.do";
  51. /**
  52. * 人员https://yunyancrm.logink.cn/gateway/info_check/personRoadTransport.do
  53. */
  54. private static final String QUERY_PERSON_ROAD_INFO= "/info_check/personRoadTransport.do";
  55. /**
  56. * 查询产品类型
  57. */
  58. private static final String[] QUERY_TYPE = {QUERY_CAR_INFO, QUERY_DRIVER_INFO, QUERY_WAYBILL_INFO,QUERY_COMPANY_ROAD_INFO,
  59. QUERY_CAR_ROAD_INFO,QUERY_PERSON_ROAD_INFO
  60. };
  61. @Autowired
  62. private RestHighLevelClient restHighLevelClient;
  63. @Autowired
  64. private IndexConfig indexConfig;
  65. /**
  66. * 统计云验平台用户调用总量、车辆、运单、司机信息
  67. *
  68. * @param userId 云验平台用户ID
  69. * @return 用户调用总量、车辆、运单、司机统计信息
  70. */
  71. @SneakyThrows(IOException.class)
  72. public List<OrderStatistics> getTotalConsumptionAmount(String userId) {
  73. // 设置云验平台用户当日总量、车辆、运单、司机接口调用量集合
  74. List<OrderStatistics> orderStatisticsList = new ArrayList<>();
  75. // 构建查询源构建器
  76. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  77. searchSourceBuilder.size(0);
  78. searchSourceBuilder.query(QueryBuilders.boolQuery()
  79. .filter(QueryBuilders.rangeQuery("DateTime").gte("now-15d"))
  80. .must(QueryBuilders.termQuery("MG-UserId", userId))
  81. .must(QueryBuilders.termsQuery("URI.keyword", QUERY_TYPE)));
  82. searchSourceBuilder.aggregation(AggregationBuilders.dateHistogram("daily_count")
  83. .field("DateTime").format("yyyy-MM-dd").dateHistogramInterval(DateHistogramInterval.DAY)
  84. .subAggregation(AggregationBuilders.terms("orders_received_statistics").field("URI.keyword")));
  85. // 创建查询请求对象,将查询对象配置到其中
  86. SearchRequest request = new SearchRequest(indexConfig.getIndexYysjFirst()).source(searchSourceBuilder);
  87. // 执行查询请求,获取响应信息
  88. SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
  89. if (!RestStatus.OK.equals(response.status()) || response.getAggregations() == null) {
  90. return orderStatisticsList;
  91. }
  92. // 获取响应中的聚合信息
  93. ParsedDateHistogram parsedDateHistogram = response.getAggregations().get("daily_count");
  94. // 获取分桶信息
  95. List<? extends Histogram.Bucket> buckets = parsedDateHistogram.getBuckets();
  96. for (Histogram.Bucket bucket : buckets) {
  97. // 创建 OrderStatistics 对象,并设置车辆、运单、司机信息
  98. OrderStatistics orderStatistics = getCarDriverWaybill(bucket);
  99. // 设置日期
  100. orderStatistics.setDate(bucket.getKeyAsString());
  101. // 设置总数
  102. orderStatistics.setSum(bucket.getDocCount());
  103. // 加入到集合
  104. orderStatisticsList.add(orderStatistics);
  105. }
  106. return orderStatisticsList;
  107. }
  108. /**
  109. * 获取车辆、运单、司机产品的调用统计信息
  110. *
  111. * @param bucket 分桶信息
  112. * @return 车辆、运单、司机调用统计信息
  113. */
  114. private OrderStatistics getCarDriverWaybill(Histogram.Bucket bucket) {
  115. OrderStatistics orderStatistics = new OrderStatistics();
  116. ParsedTerms termsAggregations = bucket.getAggregations().get("orders_received_statistics");
  117. List<? extends Terms.Bucket> termsBuckets = termsAggregations.getBuckets();
  118. for (Terms.Bucket termsBucket : termsBuckets) {
  119. if (StringUtils.equalsIgnoreCase(QUERY_CAR_INFO, termsBucket.getKeyAsString())) {
  120. orderStatistics.setVehicle(termsBucket.getDocCount());
  121. } else if (StringUtils.equalsIgnoreCase(QUERY_DRIVER_INFO, termsBucket.getKeyAsString())) {
  122. orderStatistics.setDriver(termsBucket.getDocCount());
  123. } else if (StringUtils.equalsIgnoreCase(QUERY_WAYBILL_INFO, termsBucket.getKeyAsString())) {
  124. orderStatistics.setWaybill(termsBucket.getDocCount());
  125. } else if (StringUtils.equalsIgnoreCase(QUERY_PERSON_ROAD_INFO, termsBucket.getKeyAsString())) {
  126. orderStatistics.setPerson(termsBucket.getDocCount());
  127. } else if (StringUtils.equalsIgnoreCase(QUERY_CAR_ROAD_INFO, termsBucket.getKeyAsString())) {
  128. orderStatistics.setCarRoad(termsBucket.getDocCount());
  129. } else if (StringUtils.equalsIgnoreCase(QUERY_COMPANY_ROAD_INFO, termsBucket.getKeyAsString())) {
  130. orderStatistics.setCompany(termsBucket.getDocCount());
  131. }
  132. }
  133. return orderStatistics;
  134. }
  135. }