zero 1 year ago
parent
commit
dee4c8c252
1 changed files with 90 additions and 12 deletions
  1. 90 12
      src/main/java/cn/cslg/pas/service/business/es/EsCountService.java

+ 90 - 12
src/main/java/cn/cslg/pas/service/business/es/EsCountService.java

@@ -256,18 +256,62 @@ public class EsCountService {
             //3. 从es中检索数据
             query = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
         }
-        switch (field) {
-
+        String esField = "";
+        if (StringUtils.isNotEmpty(field)) {
+            switch (field) {
+                case "AD":
+                    esField = "app_date";
+                    break;
+                case "PD":
+                    esField = "public_date";
+                    break;
+                case "GD":
+                    esField = "grant_date";
+                    break;
+            }
         }
-        Aggregation finalAggregation = null;
-        Query finalQuery = query;
-        Aggregation filtersAgg = new Aggregation.Builder().filters(new FiltersAggregation.Builder()
-                .filters(i -> i.array(Arrays.asList(finalQuery))).build())
-                .aggregations(new HashMap() {{
-                    put("filters_agg", finalAggregation);
-                }}).build();
-        builder.aggregations("Agg", filtersAgg);
         EsDateRangeDTO rangeDTO = new EsDateRangeDTO();
+        if (StringUtils.isNotEmpty(esField)) {
+            String finalEsField = esField;
+            Query finalQuery = query;
+            Aggregation min = AggregationBuilders.min(i -> i.field(finalEsField).format("yyyy"));
+            Aggregation filtersAgg = new Aggregation.Builder().filters(new FiltersAggregation.Builder()
+                    .filters(i -> i.array(Arrays.asList(finalQuery))).build())
+                    .aggregations(new HashMap() {{
+                        put("filters_agg", min);
+                    }}).build();
+
+            Aggregation max = AggregationBuilders.max(i -> i.field(finalEsField).format("yyyy"));
+            Aggregation maxFilters = new Aggregation.Builder().filters(new FiltersAggregation.Builder()
+                    .filters(i -> i.array(Arrays.asList(finalQuery))).build())
+                    .aggregations(new HashMap() {{
+                        put("max_agg", max);
+                    }}).build();
+
+
+            builder.aggregations("minAgg", filtersAgg);
+            builder.aggregations("maxAgg", maxFilters);
+            SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+            Aggregate minAgg = response.aggregations().get("minAgg");
+            if (minAgg != null) {
+                List<FiltersBucket> list = minAgg.filters().buckets().array();
+                for (FiltersBucket bucket : list) {
+                    Aggregate aggregate = bucket.aggregations().get("filters_agg");
+                    String minValue = aggregate.min().valueAsString();
+                    rangeDTO.setMinDate(minValue);
+                }
+            }
+
+            Aggregate maxAgg = response.aggregations().get("maxAgg");
+            if (maxAgg != null) {
+                List<FiltersBucket> list = maxAgg.filters().buckets().array();
+                for (FiltersBucket bucket : list) {
+                    Aggregate aggregate = bucket.aggregations().get("max_agg");
+                    String maxValue = aggregate.max().valueAsString();
+                    rangeDTO.setMaxDate(maxValue);
+                }
+            }
+        }
         return rangeDTO;
     }
 
@@ -560,6 +604,39 @@ public class EsCountService {
                 detailDTO.setNumber(sum);
                 esCountDetailDTOS.add(detailDTO);
             }
+        } else if (StringUtils.isNotEmpty(format) && format.equals("季")) {
+            for (DateHistogramBucket bucket : list) {
+                String yearMonth = bucket.keyAsString();
+                String year = yearMonth.substring(0, yearMonth.indexOf("-"));
+                String firstQuarter = year + "-01";
+                String secondQuarter = year + "-04";
+                String thirdQuarter = year + "-07";
+                String forthQuarter = year + "-10";
+                String firstQ = year + "-Q1";
+                String secondQ = year + "-Q2";
+                String thirdQ = year + "-Q3";
+                String forthQ = year + "-Q4";
+                EsCountDetailDTO dto = new EsCountDetailDTO();
+                dto.setField(field);
+                Aggregate aggregate = bucket.aggregations().get("filter_agg");
+                if (yearMonth.equals(firstQuarter)) {
+                    dto.setName(firstQ);
+                } else if (yearMonth.equals(secondQuarter)) {
+                    dto.setName(secondQ);
+                } else if (yearMonth.equals(thirdQuarter)) {
+                    dto.setName(thirdQ);
+                } else if (yearMonth.equals(forthQuarter)) {
+                    dto.setName(forthQ);
+                }
+                dto.setNumber(bucket.docCount());
+                dto.setTopN(topN);
+                if (aggregate != null) {
+                    dto.setNumber(aggregate.filter().docCount());
+                }
+                if (dto.getNumber() > 0) {
+                    esCountDetailDTOS.add(dto);
+                }
+            }
         } else {
             list.forEach(bucket -> {
                 EsCountDetailDTO dto = new EsCountDetailDTO();
@@ -587,10 +664,11 @@ public class EsCountService {
         countDTO.setField(field);
         countDTO.setName("其他");
         if (list.size() > topN) {
-            countDTO.setNumber((long)(list.size() - topN));
+            int sum = list.size() - topN;
+            countDTO.setNumber(Long.valueOf(String.valueOf(sum)));
 
         } else {
-            countDTO.setNumber((long)0);
+            countDTO.setNumber(0L);
         }
         countDTO.setTopN(topN);
         detailDTOS.add(countDTO);