YysjGatewayFirstIndex.java 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  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. * 车辆历史轨迹核验 https://yunyancrm.logink.cn/gateway/info_check/historyPosition.do
  57. */
  58. private static final String HISTORY_POSITION = "/info_check/historyPosition.do";
  59. /**
  60. * 车辆历史轨迹核验(车辆线上线下一致性验证)
  61. */
  62. private static final String VEHICLE_POSITION_CONSISTENCY_CHECK = "/info_check/historyPositionCheck.do";
  63. /**
  64. * 司机身份验证
  65. */
  66. private static final String DRIVER_INFO_CHECK = "/info_check/driverInfoCheck.do";
  67. /**
  68. * 查询产品类型
  69. */
  70. private static final String[] QUERY_TYPE = {QUERY_CAR_INFO, QUERY_DRIVER_INFO, QUERY_WAYBILL_INFO,QUERY_COMPANY_ROAD_INFO,
  71. QUERY_CAR_ROAD_INFO,QUERY_PERSON_ROAD_INFO, HISTORY_POSITION, VEHICLE_POSITION_CONSISTENCY_CHECK, DRIVER_INFO_CHECK
  72. };
  73. @Autowired
  74. private RestHighLevelClient restHighLevelClient;
  75. @Autowired
  76. private IndexConfig indexConfig;
  77. /**
  78. * 统计云验平台用户调用总量、车辆、运单、司机信息
  79. *
  80. * @param userId 云验平台用户ID
  81. * @return 用户调用总量、车辆、运单、司机统计信息
  82. */
  83. @SneakyThrows(IOException.class)
  84. public List<OrderStatistics> getTotalConsumptionAmount(String userId) {
  85. // 设置云验平台用户当日总量、车辆、运单、司机接口调用量集合
  86. List<OrderStatistics> orderStatisticsList = new ArrayList<>();
  87. // 构建查询源构建器
  88. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  89. searchSourceBuilder.size(0);
  90. searchSourceBuilder.query(QueryBuilders.boolQuery()
  91. .filter(QueryBuilders.rangeQuery("DateTime").gte("now-15d"))
  92. .must(QueryBuilders.termQuery("MG-UserId", userId))
  93. .must(QueryBuilders.termsQuery("URI.keyword", QUERY_TYPE)));
  94. searchSourceBuilder.aggregation(AggregationBuilders.dateHistogram("daily_count")
  95. .field("DateTime").format("yyyy-MM-dd").dateHistogramInterval(DateHistogramInterval.DAY)
  96. .subAggregation(AggregationBuilders.terms("orders_received_statistics").field("URI.keyword")));
  97. // 创建查询请求对象,将查询对象配置到其中
  98. SearchRequest request = new SearchRequest(indexConfig.getIndexYysjFirst()).source(searchSourceBuilder);
  99. // 执行查询请求,获取响应信息
  100. SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
  101. if (!RestStatus.OK.equals(response.status()) || response.getAggregations() == null) {
  102. return orderStatisticsList;
  103. }
  104. // 获取响应中的聚合信息
  105. ParsedDateHistogram parsedDateHistogram = response.getAggregations().get("daily_count");
  106. // 获取分桶信息
  107. List<? extends Histogram.Bucket> buckets = parsedDateHistogram.getBuckets();
  108. for (Histogram.Bucket bucket : buckets) {
  109. // 创建 OrderStatistics 对象,并设置车辆、运单、司机信息
  110. OrderStatistics orderStatistics = getCarDriverWaybill(bucket);
  111. // 设置日期
  112. orderStatistics.setDate(bucket.getKeyAsString());
  113. // 设置总数
  114. orderStatistics.setSum(bucket.getDocCount());
  115. // 加入到集合
  116. orderStatisticsList.add(orderStatistics);
  117. }
  118. return orderStatisticsList;
  119. }
  120. /**
  121. * 获取车辆、运单、司机产品的调用统计信息
  122. *
  123. * @param bucket 分桶信息
  124. * @return 车辆、运单、司机调用统计信息
  125. */
  126. private OrderStatistics getCarDriverWaybill(Histogram.Bucket bucket) {
  127. OrderStatistics orderStatistics = new OrderStatistics();
  128. ParsedTerms termsAggregations = bucket.getAggregations().get("orders_received_statistics");
  129. List<? extends Terms.Bucket> termsBuckets = termsAggregations.getBuckets();
  130. for (Terms.Bucket termsBucket : termsBuckets) {
  131. if (StringUtils.equalsIgnoreCase(QUERY_CAR_INFO, termsBucket.getKeyAsString())) {
  132. orderStatistics.setVehicle(termsBucket.getDocCount());
  133. } else if (StringUtils.equalsIgnoreCase(QUERY_DRIVER_INFO, termsBucket.getKeyAsString())) {
  134. orderStatistics.setDriver(termsBucket.getDocCount());
  135. } else if (StringUtils.equalsIgnoreCase(QUERY_WAYBILL_INFO, termsBucket.getKeyAsString())) {
  136. orderStatistics.setWaybill(termsBucket.getDocCount());
  137. } else if (StringUtils.equalsIgnoreCase(QUERY_PERSON_ROAD_INFO, termsBucket.getKeyAsString())) {
  138. orderStatistics.setPerson(termsBucket.getDocCount());
  139. } else if (StringUtils.equalsIgnoreCase(QUERY_CAR_ROAD_INFO, termsBucket.getKeyAsString())) {
  140. orderStatistics.setCarRoad(termsBucket.getDocCount());
  141. } else if (StringUtils.equalsIgnoreCase(QUERY_COMPANY_ROAD_INFO, termsBucket.getKeyAsString())) {
  142. orderStatistics.setCompany(termsBucket.getDocCount());
  143. }
  144. }
  145. return orderStatistics;
  146. }
  147. }