Forráskód Böngészése

Merge remote-tracking branch 'origin/master'

xiexiang 1 éve
szülő
commit
74d31a8ba4
18 módosított fájl, 460 hozzáadás és 345 törlés
  1. 2 0
      src/main/java/cn/cslg/pas/common/vo/business/EsCountVO.java
  2. 5 0
      src/main/java/cn/cslg/pas/domain/es/LegalEvent.java
  3. 13 4
      src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/ChildAnalysisBuilder.java
  4. 121 151
      src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/DateAnalysisBuilder.java
  5. 0 2
      src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/NestedAnalysisBuilder.java
  6. 11 30
      src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/RangeAnalysisBuilder.java
  7. 20 4
      src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/ChildCountBuilder.java
  8. 11 0
      src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/DateHistogramBuilder.java
  9. 11 0
      src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/FilterCountBuilder.java
  10. 5 0
      src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/IEsCountBuilder.java
  11. 11 0
      src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/NestedCountBuilder.java
  12. 11 0
      src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/RangeCountBuilder.java
  13. 12 0
      src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/TermsCountBuilder.java
  14. 15 68
      src/main/java/cn/cslg/pas/service/ReportExportService.java
  15. 99 84
      src/main/java/cn/cslg/pas/service/business/es/EsCountService.java
  16. 67 0
      src/main/java/cn/cslg/pas/service/business/es/EsLegalEventService.java
  17. 1 2
      src/main/java/cn/cslg/pas/service/business/es/EsService.java
  18. 45 0
      src/test/java/cn/cslg/pas/service/EsLegalEventTests.java

+ 2 - 0
src/main/java/cn/cslg/pas/common/vo/business/EsCountVO.java

@@ -10,6 +10,8 @@ public class EsCountVO {
     private String condition;
     //栏位
     private String field;
+    //栏位
+    private String fieldId;
     //自定义栏位类型
     private Integer fieldType;
     //统计搜索的栏位值1

+ 5 - 0
src/main/java/cn/cslg/pas/domain/es/LegalEvent.java

@@ -1,6 +1,7 @@
 package cn.cslg.pas.domain.es;
 
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -40,6 +41,10 @@ public class LegalEvent {
     /**
      * 发生时间
      */
+    @JsonFormat(
+            pattern = "yyyy-MM-dd",
+            timezone = "GMT+8"
+    )
     @JsonProperty("event_date")
     private Date eventDate;
     /**

+ 13 - 4
src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/ChildAnalysisBuilder.java

@@ -32,15 +32,24 @@ public class ChildAnalysisBuilder implements IEsAnalysisBuilder {
                 Query q = QueryBuilders.term(i -> i.field("custom_field.field_value.raw").value(value));
                 queryList.add(q);
             }
-            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.should(queryList)));
+            Query query = QueryBuilders.term(n -> n.field(field).value(fieldValue));
+            queryList.add(query);
+            Aggregation filters = AggregationBuilders.filters(n -> n.filters(m -> m.array(queryList)));
             Aggregation filterAgg = new Aggregation.Builder().terms(new TermsAggregation.Builder()
-                    .field(field).size(topN).build())
+                    .field("custom_field.field_value.raw").build())
                     .aggregations(new HashMap() {{
-                        put("filter_agg", filter);
+                        put("filterAgg", filters);
                     }}).build();
+
+            Aggregation Agg = new Aggregation.Builder().terms(new TermsAggregation.Builder()
+                    .field(field).build())
+                    .aggregations(new HashMap() {{
+                        put("term_agg", filterAgg);
+                    }}).build();
+
             aggregation = new Aggregation.Builder().children(new ChildrenAggregation.Builder()
                     .type("project_customfield").build()).aggregations(new HashMap() {{
-                put("child_agg", filterAgg);
+                put("child_agg", Agg);
             }}).build();
         }
 

+ 121 - 151
src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/DateAnalysisBuilder.java

@@ -1,13 +1,11 @@
 package cn.cslg.pas.factorys.EsAnalysisBuilderFactory;
 
-import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
-import co.elastic.clients.elasticsearch._types.aggregations.AggregationBuilders;
-import co.elastic.clients.elasticsearch._types.aggregations.CalendarInterval;
-import co.elastic.clients.elasticsearch._types.aggregations.DateHistogramAggregation;
+import co.elastic.clients.elasticsearch._types.aggregations.*;
 import co.elastic.clients.elasticsearch._types.query_dsl.Query;
 import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -30,160 +28,132 @@ public class DateAnalysisBuilder implements IEsAnalysisBuilder {
     @Override
     public Aggregation createAnalyseAgg() throws ParseException {
         Aggregation aggregation = null;
-        if (StringUtils.isNotEmpty(fieldValue)) {
+        List<DateRangeExpression> rangeExpressions = new ArrayList<>();
+
+        if (!CollectionUtils.isEmpty(values)) {
             Calendar calendar = Calendar.getInstance();
-            if (fieldValue.length() == YEAR) {
-                SimpleDateFormat format = new SimpleDateFormat("yyyy");
-                Date year = format.parse(fieldValue);
-                calendar.setTime(year);
-                calendar.add(Calendar.YEAR, 1);
-                Date yearDate = calendar.getTime();
-                String nextYear = format.format(yearDate);
-                Query query = QueryBuilders.range(j -> j.field(field).from(fieldValue).to(nextYear).format("yyyy"));
-                Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-                aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
-                        .field(field).format("yyyy")
-                        .calendarInterval(CalendarInterval.Year).build())
-                        .aggregations(new HashMap() {{
-                            put("filter_agg", filter);
-                        }}).build();
-            } else if (fieldValue.length() == MONTH && !fieldValue.contains("Q")
-                    && !fieldValue.contains("H")) {
-                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
-                Date month = format.parse(fieldValue);
-                calendar.setTime(month);
-                calendar.add(Calendar.MONTH, 1);
-                Date monthDate = calendar.getTime();
-                String nextMonth = format.format(monthDate);
-                Query query = QueryBuilders.range(j -> j.field(field).from(fieldValue).to(nextMonth).format("yyyy-MM"));
-                Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-                aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
-                        .field(field).format("yyyy-MM")
-                        .calendarInterval(CalendarInterval.Month).build())
-                        .aggregations(new HashMap() {{
-                            put("filter_agg", filter);
-                        }}).build();
-
-            } else if (fieldValue.length() == MONTH && fieldValue.contains("Q")) {
-                if (fieldValue.contains("Q1")) {
-                    String firstQuarter = fieldValue.substring(0, fieldValue.indexOf("-"));
-                    String firstQuarterDate = firstQuarter + "-01";
-                    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
-                    Date quarter = format.parse(firstQuarterDate);
-                    calendar.setTime(quarter);
-                    calendar.add(Calendar.MONTH, 3);
-                    Date quarterDate = calendar.getTime();
-                    String nextQuarterDate = format.format(quarterDate);
-                    Query query = QueryBuilders.range(j -> j.field(field).from(firstQuarterDate).to(nextQuarterDate).format("yyyy-MM"));
-                    Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-                    aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
-                            .field(field).format("yyyy-MM")
-                            .calendarInterval(CalendarInterval.Quarter).build())
-                            .aggregations(new HashMap() {{
-                                put("filter_agg", filter);
-                            }}).build();
-                } else if (fieldValue.contains("Q2")) {
-                    String secondQuarter = fieldValue.substring(0, fieldValue.indexOf("-"));
-                    String secondQuarterDate = secondQuarter + "-04";
+            for (String value : values) {
+                if (value.length() == YEAR) {
                     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
-                    Date quarter = format.parse(secondQuarterDate);
-                    calendar.setTime(quarter);
-                    calendar.add(Calendar.MONTH, 3);
-                    Date quarterDate = calendar.getTime();
-                    String nextQuarterDate = format.format(quarterDate);
-                    Query query = QueryBuilders.range(j -> j.field(field).from(secondQuarterDate).to(nextQuarterDate).format("yyyy-MM"));
-                    Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-                    aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
-                            .field(field).format("yyyy-MM")
-                            .calendarInterval(CalendarInterval.Quarter).build())
-                            .aggregations(new HashMap() {{
-                                put("filter_agg", filter);
-                            }}).build();
-                } else if (fieldValue.contains("Q3")) {
-                    String thirdQuarter = fieldValue.substring(0, fieldValue.indexOf("-"));
-                    String thirdQuarterDate = thirdQuarter + "-07";
+                    String startYear = value + "-01";
+                    Date year = format.parse(startYear);
+                    calendar.setTime(year);
+                    calendar.add(Calendar.YEAR, 1);
+                    Date yearDate = calendar.getTime();
+                    String nextYear = format.format(yearDate);
+                    FieldDateMath st = FieldDateMath.of(i -> i.expr(startYear));
+                    FieldDateMath ed = FieldDateMath.of(i -> i.expr(nextYear));
+                    DateRangeExpression expression = DateRangeExpression.of(i -> i.from(st).to(ed).key(value));
+                    rangeExpressions.add(expression);
+                } else if (value.length() == MONTH && !value.contains("Q")
+                        && !value.contains("H")) {
                     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
-                    Date quarter = format.parse(thirdQuarterDate);
-                    calendar.setTime(quarter);
-                    calendar.add(Calendar.MONTH, 3);
-                    Date quarterDate = calendar.getTime();
-                    String nextQuarterDate = format.format(quarterDate);
-                    Query query = QueryBuilders.range(j -> j.field(field).from(thirdQuarterDate).to(nextQuarterDate).format("yyyy-MM"));
-                    Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-                    aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
-                            .field(field).format("yyyy-MM")
-                            .calendarInterval(CalendarInterval.Quarter).build())
-                            .aggregations(new HashMap() {{
-                                put("filter_agg", filter);
-                            }}).build();
-                } else if (fieldValue.contains("Q4")) {
-                    String fourthQuarter = fieldValue.substring(0, fieldValue.indexOf("-"));
-                    String fourthQuarterDate = fourthQuarter + "-10";
-                    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
-                    Date quarter = format.parse(fourthQuarterDate);
-                    calendar.setTime(quarter);
-                    calendar.add(Calendar.MONTH, 3);
-                    Date quarterDate = calendar.getTime();
-                    String nextQuarterDate = format.format(quarterDate);
-                    Query query = QueryBuilders.range(j -> j.field(field).from(fourthQuarterDate).to(nextQuarterDate).format("yyyy-MM"));
-                    Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-                    aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
-                            .field(field).format("yyyy-MM")
-                            .calendarInterval(CalendarInterval.Quarter).build())
-                            .aggregations(new HashMap() {{
-                                put("filter_agg", filter);
-                            }}).build();
-                }
-            } else if (fieldValue.length() == MONTH && fieldValue.contains("H")) {
-                if (fieldValue.contains("H1")) {
-                    String firstHalfYear = fieldValue.substring(0, fieldValue.indexOf("-"));
-                    String firstHalfYearDate = firstHalfYear + "-01";
+                    Date month = format.parse(value);
+                    calendar.setTime(month);
+                    calendar.add(Calendar.MONTH, 1);
+                    Date monthDate = calendar.getTime();
+                    String nextMonth = format.format(monthDate);
+                    FieldDateMath st = FieldDateMath.of(i -> i.expr(value));
+                    FieldDateMath ed = FieldDateMath.of(i -> i.expr(nextMonth));
+                    DateRangeExpression expression = DateRangeExpression.of(i -> i.from(st).to(ed).key(value));
+                    rangeExpressions.add(expression);
+                } else if (value.length() == MONTH && value.contains("Q")) {
+                    if (value.contains("Q1")) {
+                        String firstQuarter = value.substring(0, value.indexOf("-"));
+                        String firstQuarterDate = firstQuarter + "-01";
+                        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
+                        Date quarter = format.parse(firstQuarterDate);
+                        calendar.setTime(quarter);
+                        calendar.add(Calendar.MONTH, 3);
+                        Date quarterDate = calendar.getTime();
+                        String nextQuarterDate = format.format(quarterDate);
+                        FieldDateMath st = FieldDateMath.of(i -> i.expr(firstQuarterDate));
+                        FieldDateMath ed = FieldDateMath.of(i -> i.expr(nextQuarterDate));
+                        DateRangeExpression expression = DateRangeExpression.of(i -> i.from(st).to(ed).key(value));
+                        rangeExpressions.add(expression);
+                    } else if (value.contains("Q2")) {
+                        String secondQuarter = value.substring(0, value.indexOf("-"));
+                        String secondQuarterDate = secondQuarter + "-04";
+                        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
+                        Date quarter = format.parse(secondQuarterDate);
+                        calendar.setTime(quarter);
+                        calendar.add(Calendar.MONTH, 3);
+                        Date quarterDate = calendar.getTime();
+                        String nextQuarterDate = format.format(quarterDate);
+                        FieldDateMath st = FieldDateMath.of(i -> i.expr(secondQuarterDate));
+                        FieldDateMath ed = FieldDateMath.of(i -> i.expr(nextQuarterDate));
+                        DateRangeExpression expression = DateRangeExpression.of(i -> i.from(st).to(ed).key(value));
+                        rangeExpressions.add(expression);
+                    } else if (value.contains("Q3")) {
+                        String thirdQuarter = value.substring(0, value.indexOf("-"));
+                        String thirdQuarterDate = thirdQuarter + "-07";
+                        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
+                        Date quarter = format.parse(thirdQuarterDate);
+                        calendar.setTime(quarter);
+                        calendar.add(Calendar.MONTH, 3);
+                        Date quarterDate = calendar.getTime();
+                        String nextQuarterDate = format.format(quarterDate);
+                        FieldDateMath st = FieldDateMath.of(i -> i.expr(thirdQuarterDate));
+                        FieldDateMath ed = FieldDateMath.of(i -> i.expr(nextQuarterDate));
+                        DateRangeExpression expression = DateRangeExpression.of(i -> i.from(st).to(ed).key(value));
+                        rangeExpressions.add(expression);
+                    } else if (value.contains("Q4")) {
+                        String fourthQuarter = value.substring(0, value.indexOf("-"));
+                        String fourthQuarterDate = fourthQuarter + "-10";
+                        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
+                        Date quarter = format.parse(fourthQuarterDate);
+                        calendar.setTime(quarter);
+                        calendar.add(Calendar.MONTH, 3);
+                        Date quarterDate = calendar.getTime();
+                        String nextQuarterDate = format.format(quarterDate);
+                        FieldDateMath st = FieldDateMath.of(i -> i.expr(fourthQuarterDate));
+                        FieldDateMath ed = FieldDateMath.of(i -> i.expr(nextQuarterDate));
+                        DateRangeExpression expression = DateRangeExpression.of(i -> i.from(st).to(ed).key(value));
+                        rangeExpressions.add(expression);
+                    }
+                } else if (value.length() == MONTH && value.contains("H")) {
+                    if (value.contains("H1")) {
+                        String firstHalfYear = value.substring(0, value.indexOf("-"));
+                        String firstHalfYearDate = firstHalfYear + "-01";
+                        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
+                        Date halfYear = format.parse(firstHalfYearDate);
+                        calendar.setTime(halfYear);
+                        calendar.add(Calendar.MONTH, 6);
+                        Date halfYearDate = calendar.getTime();
+                        String nextHalfYearDate = format.format(halfYearDate);
+                        FieldDateMath st = FieldDateMath.of(i -> i.expr(firstHalfYearDate));
+                        FieldDateMath ed = FieldDateMath.of(i -> i.expr(nextHalfYearDate));
+                        DateRangeExpression expression = DateRangeExpression.of(i -> i.from(st).to(ed).key(value));
+                        rangeExpressions.add(expression);
+                    } else if (value.contains("H2")) {
+                        String secondHalfYear = value.substring(0, value.indexOf("-"));
+                        String secondHalfYearDate = secondHalfYear + "-07";
+                        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
+                        Date halfYear = format.parse(secondHalfYearDate);
+                        calendar.setTime(halfYear);
+                        calendar.add(Calendar.MONTH, 6);
+                        Date halfYearDate = calendar.getTime();
+                        String nextHalfYearDate = format.format(halfYearDate);
+                        FieldDateMath st = FieldDateMath.of(i -> i.expr(secondHalfYearDate));
+                        FieldDateMath ed = FieldDateMath.of(i -> i.expr(nextHalfYearDate));
+                        DateRangeExpression expression = DateRangeExpression.of(i -> i.from(st).to(ed).key(value));
+                        rangeExpressions.add(expression);
+                    }
+                } else {
                     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
-                    Date halfYear = format.parse(firstHalfYearDate);
-                    calendar.setTime(halfYear);
-                    calendar.add(Calendar.MONTH, 6);
-                    Date halfYearDate = calendar.getTime();
-                    String nextHalfYearDate = format.format(halfYearDate);
-                    Query query = QueryBuilders.range(j -> j.field(field).from(firstHalfYearDate).to(nextHalfYearDate).format("yyyy-MM"));
-                    Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-                    aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
-                            .field(field).format("yyyy-MM")
-                            .calendarInterval(CalendarInterval.Month).build())
-                            .aggregations(new HashMap() {{
-                                put("filter_agg", filter);
-                            }}).build();
-                } else if (fieldValue.contains("H2")) {
-                    String secondHalfYear = fieldValue.substring(0, fieldValue.indexOf("-"));
-                    String secondHalfYearDate = secondHalfYear + "-07";
-                    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
-                    Date halfYear = format.parse(secondHalfYearDate);
-                    calendar.setTime(halfYear);
-                    calendar.add(Calendar.MONTH, 6);
-                    Date halfYearDate = calendar.getTime();
-                    String nextHalfYearDate = format.format(halfYearDate);
-                    Query query = QueryBuilders.range(j -> j.field(field).from(secondHalfYearDate).to(nextHalfYearDate).format("yyyy-MM"));
-                    Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-                    aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
-                            .field(field).format("yyyy-MM")
-                            .calendarInterval(CalendarInterval.Month).build())
-                            .aggregations(new HashMap() {{
-                                put("filter_agg", filter);
-                            }}).build();
+                    String start = value.substring(0, value.indexOf("-")) + "-01";
+                    String end = value.substring(value.indexOf("-") + 1);
+                    String nextYear = String.valueOf(Integer.parseInt(end) + 1) + "-01";
+                    FieldDateMath st = FieldDateMath.of(i -> i.expr(start));
+                    FieldDateMath ed = FieldDateMath.of(i -> i.expr(nextYear));
+                    DateRangeExpression expression = DateRangeExpression.of(i -> i.from(st).to(ed).key(value));
+                    rangeExpressions.add(expression);
+
                 }
-            } else {
-                String start = fieldValue.substring(0, fieldValue.indexOf("-"));
-                String end = fieldValue.substring(fieldValue.indexOf("-") + 1);
-                String nextYear = String.valueOf(Integer.parseInt(end) + 1);
-                Query query = QueryBuilders.range(j -> j.field(field).from(start).to(nextYear).format("yyyy"));
-                Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-                aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
-                        .field(field).format("yyyy")
-                        .calendarInterval(CalendarInterval.Year).build())
-                        .aggregations(new HashMap() {{
-                            put("filter_agg", filter);
-                        }}).build();
             }
         }
+        aggregation = AggregationBuilders.dateRange(i -> i.field(field).format("yyyy-MM").ranges(rangeExpressions));
+
         return aggregation;
     }
 

+ 0 - 2
src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/NestedAnalysisBuilder.java

@@ -33,8 +33,6 @@ public class NestedAnalysisBuilder implements IEsAnalysisBuilder {
                 queryList.add(q);
             }
             Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.should(queryList)));
-//            Query query = QueryBuilders.term(i -> i.field(field).value(fieldValue));
-//            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
             Aggregation finalTerms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
                     .field(field).size(topN).build())
                     .aggregations(new HashMap() {{

+ 11 - 30
src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/RangeAnalysisBuilder.java

@@ -23,46 +23,27 @@ public class RangeAnalysisBuilder implements IEsAnalysisBuilder {
 
     @Override
     public Aggregation createAnalyseAgg() {
+        List<AggregationRange> ranges = new ArrayList<>();
         Aggregation aggregation = null;
-        if (!CollectionUtils.isEmpty(values)) {
-            List<Query> queryList = new ArrayList<>();
             for (String value : values) {
                 if (value.contains("-")) {
                     String start = value.substring(0, value.indexOf("-"));
                     String end = value.substring(value.indexOf("-") + 1);
-//                    end = String.valueOf(Integer.parseInt(end) + 1);
-//                    String finalEnd = end;
-                    Query query = QueryBuilders.range(i -> i.field(field).from(start).to(end));
-                    queryList.add(query);
+                    end = String.valueOf(Integer.parseInt(end) + 1);
+                    String finalEnd = end;
+                    AggregationRange range = AggregationRange.of(i -> i.from(start).to(finalEnd).key(value));
+                    ranges.add(range);
                 } else if (value.contains("以上")) {
                     String start = value.substring(0, value.indexOf("以上"));
-                    Query query = QueryBuilders.range(i -> i.field(field).from(start));
-                    queryList.add(query);
+                    AggregationRange range = AggregationRange.of(i -> i.from(start).key(value));
+                    ranges.add(range);
                 } else {
-//                    String end = String.valueOf(Integer.parseInt(value) + 1);
-                    Query query = QueryBuilders.range(i -> i.field(field).from(value).to(value));
-                    queryList.add(query);
+                    String end = String.valueOf(Integer.parseInt(value) + 1);
+                    AggregationRange range = AggregationRange.of(i -> i.from(value).to(end).key(value));
+                    ranges.add(range);
                 }
             }
-            aggregation = AggregationBuilders.filter(n -> n.bool(k -> k.should(queryList)));
-
-//            if (fieldValue.contains("-")) {
-//                String start = fieldValue.substring(0, fieldValue.indexOf("-"));
-//                String end = fieldValue.substring(fieldValue.indexOf("-") + 1);
-//                end = String.valueOf(Integer.parseInt(end) + 1);
-//                String finalEnd = end;
-//                aggregation = AggregationBuilders.range(i -> i.field(field)
-//                        .ranges(j -> j.from(start).to(finalEnd)));
-//            } else if (fieldValue.contains("以上")) {
-//                String start = fieldValue.substring(0, fieldValue.indexOf("以上"));
-//                aggregation = AggregationBuilders.range(i -> i.field(field)
-//                        .ranges(j -> j.from(start)));
-//            } else {
-//                String end = String.valueOf(Integer.parseInt(fieldValue) + 1);
-//                aggregation = AggregationBuilders.range(i -> i.field(field)
-//                        .ranges(j -> j.from(fieldValue).to(end)));
-//            }
-        }
+        aggregation = AggregationBuilders.range(i -> i.field(field).ranges(ranges));
         return aggregation;
     }
 

+ 20 - 4
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/ChildCountBuilder.java

@@ -18,6 +18,7 @@ public class ChildCountBuilder implements IEsCountBuilder{
     public String path = "";
     public Boolean ifHaveChild = false;
     public String fieldType = null;
+    public String fieldId = null;
 
     @Override
     public Aggregation createAggregation() {
@@ -27,7 +28,8 @@ public class ChildCountBuilder implements IEsCountBuilder{
 
             } else {
                 Aggregation agg = AggregationBuilders.terms(i -> i.field("custom_field.stats_value.raw").size(topN));
-                Query query = QueryBuilders.term(i -> i.field("custom_field.field_type").value(fieldType));
+
+                Query query = QueryBuilders.term(i -> i.field("custom_field.field").value(fieldId));
                 Aggregation filtersAgg = new Aggregation.Builder().filters(new FiltersAggregation.Builder()
                         .filters(i -> i.array(Arrays.asList(query))).build())
                         .aggregations(new HashMap() {{
@@ -41,16 +43,22 @@ public class ChildCountBuilder implements IEsCountBuilder{
             }
 
         } else {
-            if (StringUtils.isNotEmpty(valueOne)) {
+            if (StringUtils.isNotEmpty(valueOne) && StringUtils.isEmpty(valueTwo)) {
+                String str = "*";
+                String s = str.concat(valueOne).concat("*");
+                Query query = QueryBuilders.wildcard(i -> i.field("custom_field.field_value.raw").value(s));
+                Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
+            } else if (StringUtils.isNotEmpty(valueOne) && StringUtils.isNotEmpty(valueTwo)) {
 
             } else {
-                Aggregation agg = AggregationBuilders.terms(i -> i.field("custom_field.stats_value.raw").size(topN));
-                Query query = QueryBuilders.term(i -> i.field("custom_field.field_type").value(fieldType));
+                Aggregation agg = AggregationBuilders.terms(i -> i.field("custom_field.field_value.raw").size(topN));
+                Query query = QueryBuilders.term(i -> i.field("custom_field.field").value(fieldId));
                 Aggregation filtersAgg = new Aggregation.Builder().filters(new FiltersAggregation.Builder()
                         .filters(i -> i.array(Arrays.asList(query))).build())
                         .aggregations(new HashMap() {{
                             put("filters_agg", agg);
                         }}).build();
+
                 terms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
                         .field(field).size(topN).build())
                         .aggregations(new HashMap() {{
@@ -131,4 +139,12 @@ public class ChildCountBuilder implements IEsCountBuilder{
     public void setFieldType(String fieldType) {
         this.fieldType = fieldType;
     }
+
+    public String getFieldId() {
+        return fieldId;
+    }
+
+    public void setFieldId(String fieldId) {
+        this.fieldId = fieldId;
+    }
 }

+ 11 - 0
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/DateHistogramBuilder.java

@@ -20,6 +20,7 @@ public class DateHistogramBuilder implements IEsCountBuilder{
     public String path = "";
     public Boolean ifHaveChild = false;
     public String fieldType = null;
+    public String fieldId = null;
 
     @Override
     public Aggregation createAggregation() {
@@ -94,4 +95,14 @@ public class DateHistogramBuilder implements IEsCountBuilder{
     public void setFieldType(String fieldType) {
         this.fieldType = fieldType;
     }
+
+    @Override
+    public String getFieldId() {
+        return fieldId;
+    }
+
+    @Override
+    public void setFieldId(String fieldId) {
+        this.fieldId = fieldId;
+    }
 }

+ 11 - 0
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/FilterCountBuilder.java

@@ -13,6 +13,7 @@ public class FilterCountBuilder implements IEsCountBuilder{
     public String path = "";
     public Boolean ifHaveChild = false;
     public String fieldType = null;
+    public String fieldId = null;
 
 
     @Override
@@ -94,4 +95,14 @@ public class FilterCountBuilder implements IEsCountBuilder{
     public void setFieldType(String fieldType) {
         this.fieldType = fieldType;
     }
+
+    @Override
+    public String getFieldId() {
+        return fieldId;
+    }
+
+    @Override
+    public void setFieldId(String fieldId) {
+        this.fieldId = fieldId;
+    }
 }

+ 5 - 0
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/IEsCountBuilder.java

@@ -12,6 +12,7 @@ public interface IEsCountBuilder {
     public String path = "";
     public Boolean ifHaveChild = false;
     public String fieldType = null;
+    public String fieldId = null;
 
     public Aggregation createAggregation() throws Exception;
 
@@ -42,4 +43,8 @@ public interface IEsCountBuilder {
     public String getFieldType();
 
     public void setFieldType(String fieldType);
+
+    public String getFieldId();
+
+    public void setFieldId(String fieldId);
 }

+ 11 - 0
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/NestedCountBuilder.java

@@ -18,6 +18,7 @@ public class NestedCountBuilder implements IEsCountBuilder {
     public String path = "";
     public Boolean ifHaveChild = false;
     public String fieldType = null;
+    public String fieldId = null;
 
     @Override
     public Aggregation createAggregation() {
@@ -112,4 +113,14 @@ public class NestedCountBuilder implements IEsCountBuilder {
     public void setFieldType(String fieldType) {
         this.fieldType = fieldType;
     }
+
+    @Override
+    public String getFieldId() {
+        return fieldId;
+    }
+
+    @Override
+    public void setFieldId(String fieldId) {
+        this.fieldId = fieldId;
+    }
 }

+ 11 - 0
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/RangeCountBuilder.java

@@ -12,6 +12,7 @@ public class RangeCountBuilder implements IEsCountBuilder{
     public String path = "";
     public Boolean ifHaveChild = false;
     public String fieldType = null;
+    public String fieldId = null;
 
     @Override
     public Aggregation createAggregation() {
@@ -77,4 +78,14 @@ public class RangeCountBuilder implements IEsCountBuilder{
     public void setFieldType(String fieldType) {
         this.fieldType = fieldType;
     }
+
+    @Override
+    public String getFieldId() {
+        return fieldId;
+    }
+
+    @Override
+    public void setFieldId(String fieldId) {
+        this.fieldId = fieldId;
+    }
 }

+ 12 - 0
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/TermsCountBuilder.java

@@ -20,6 +20,8 @@ public class TermsCountBuilder implements IEsCountBuilder{
     public String path = "";
     public Boolean ifHaveChild = false;
     public String fieldType = null;
+    public String fieldId = null;
+
     @Override
     public Aggregation createAggregation() {
         Aggregation aggregation = AggregationBuilders.terms(i -> i.field(field).size(topN));
@@ -107,4 +109,14 @@ public class TermsCountBuilder implements IEsCountBuilder{
     public void setFieldType(String fieldType) {
         this.fieldType = fieldType;
     }
+
+    @Override
+    public String getFieldId() {
+        return fieldId;
+    }
+
+    @Override
+    public void setFieldId(String fieldId) {
+        this.fieldId = fieldId;
+    }
 }

+ 15 - 68
src/main/java/cn/cslg/pas/service/ReportExportService.java

@@ -18,10 +18,7 @@ import cn.cslg.pas.domain.es.Text;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.AvoidDesignMapper;
 import cn.cslg.pas.service.business.*;
-import cn.cslg.pas.service.business.es.EsFamilyService;
-import cn.cslg.pas.service.business.es.EsPatentService;
-import cn.cslg.pas.service.business.es.EsQuotePatentService;
-import cn.cslg.pas.service.business.es.EsService;
+import cn.cslg.pas.service.business.es.*;
 import cn.cslg.pas.service.common.FileManagerService;
 import cn.hutool.core.util.IdUtil;
 import com.alibaba.fastjson.JSON;
@@ -82,6 +79,8 @@ public class ReportExportService {
     private LoginUtils loginUtils;
     @Autowired
     private CacheUtils cacheUtils;
+    @Autowired
+    private EsLegalEventService esLegalEventService;
 
     /**
      * @param projectId
@@ -134,7 +133,7 @@ public class ReportExportService {
             throw new XiaoShiException("保存记录失败");
         }
 //        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
-        PersonnelVO personnelVO =new PersonnelVO();
+        PersonnelVO personnelVO = new PersonnelVO();
         personnelVO.setId("1");
         ReportDocument reportDocument = new ReportDocument();
         reportDocument.setProjectId(projectId);
@@ -239,14 +238,9 @@ public class ReportExportService {
         String signPatentNo = report.getSignPatentNo();
 
         //装载标的专利信息
-        Map<String, Object> signPatent = this.signPatentMess(report.getSignPatentNo());
-        System.out.println(signPatent.get(""));
-        Map<String, Object> map = new HashMap<>();
-        //装载标的专利信息
-        map.put("signPatent", signPatent);
-        map.put("rights", signPatent.get("rights"));
-        //装载公开/公告号
-        map.put("patentNo", signPatentNo);
+
+
+        ;
 
         //装载年月日
         String date = DateUtils.formatDate(new Date(), DateUtils.YYYY_MM_DD);
@@ -255,12 +249,11 @@ public class ReportExportService {
                 .setYear(dates[0])
                 .setMonth(dates[1])
                 .setDay(dates[2]);
-        map.put("sys", systemMO);
 //
         //装载特征、解释、回避设计方向、回避设计总体方向
         List<AvoidFeaturesVO> features = avoidDesignMapper.selectAvoidDesign(projectId);
 //        String wholeDirection = avoidDesignWholeDirectionMapper.selectWholeDirectionByReportId(reportId);
-        map.put("features", features);
+
 //        map.put("wholeDirection", wholeDirection);
 //
         //绑定政策(绑定集合和元素循环遍历)
@@ -274,56 +267,13 @@ public class ReportExportService {
                 .bind("littleDirection", htmlRenderPolicy)
                 .bind("wholeDirection", htmlRenderPolicy)
                 .build();
-        XWPFTemplate template = XWPFTemplate.compile(filePath, configure).render(map);
+        XWPFTemplate template = XWPFTemplate.compile(filePath, configure).render(new HashMap<>());
         return template;
     }
 
-    public Map<String, Object> signPatentMess(String patentNo) throws IOException {
-//        PatentNoVO patentVO = new PatentNoVO();
-//        patentVO.setPatentNo(patentNo);
-//        //根据专利号查询专利详细信息
-//        PatentDetailDTO patentDetailDTO = esPatentService.selectPatentDetail(patentVO);
-//        //装载单个专利的信息
-        Map<String, Object> patentMap = new HashMap<>();
-//        StringBuilder applicants = new StringBuilder();
-//        StringBuilder rightPerson = new StringBuilder();
-//
-//        //申请日
-//        patentMap.put("applicationDate", patentDetailDTO.getAppDate());
-//
-//        //公开日
-//        patentMap.put("publicDate", patentDetailDTO.getPublicDate());
-//        //公开号
-//        patentMap.put("publicNo", patentDetailDTO.getPublicNo());
-//        //专利号
-//        patentMap.put("patentNo", patentDetailDTO.getPatentNo());
-//        //专利权人
-//        patentMap.put("rightPerson", rightPerson);
-//        //图示
-//        String guid = FormatUtil.getPictureFormat(patentDetailDTO.getAppNo());
-//        PictureRenderData pictureData = this.guidToStream(guid);
-//        if (pictureData != null) {
-//            patentMap.put("abstractPath", pictureData);
-//        }
-//        //获得标题
-//        if (patentDetailDTO.getTitle() != null && patentDetailDTO.getTitle().size() > 0) {
-//            Text title = patentDetailDTO.getTitle().stream()
-//                    .filter(item -> item.getIfOrigin().equals(true)).findFirst().orElse(null);
-//            if (title != null) {
-//                patentMap.put("name", title.getTextContent());
-//            }
-//        }
-//
-//        //获得权要
-//        List<Map<String, Object>>  rights=   this.getClaimMaps(patentDetailDTO.getClaim(),patentDetailDTO.getPatentNo());
-//
-//        patentMap.put("rights", rights);
-        return patentMap;
-    }
 
     private PictureRenderData guidToStream(String guid) {
         PictureRenderData pictureRenderData = null;
-
         byte[] bytes = null;
 
         if (bytes != null) {
@@ -412,15 +362,12 @@ public class ReportExportService {
                     if (patent.getApplicant() != null && patent.getApplicant().size() != 0) {
                         applicants = StringUtils.join(patent.getApplicant(), "\r");
                     }
+                    List<String> affairs = esLegalEventService.getStrLegalEvent(patent.getAppNo());
+                    String affairStrs = "";
+                    if (affairs != null && affairs.size() != 0) {
+                        affairStrs = StringUtils.join(affairs, "\r");
+                    }
 
-//                    //装载法律状态
-//                    StringBuilder affair = new StringBuilder();
-//                    List<JSONObject> affaires = JSON.parseArray(patent.get("affair").toString(), JSONObject.class);
-//                    affaires.forEach(item -> {
-//                                affair.append(item.get("status") + "\r");
-//                            }
-//
-//                    );
                     //装载单个专利的信息
                     Map<String, Object> patentMap = new HashMap<>();
 
@@ -463,7 +410,7 @@ public class ReportExportService {
                     patentMap.put("firstPublicDate", patent.getPublicDate());
                     patentMap.put("applicant", applicants);
                     patentMap.put("rightPerson", rightPerson);
-//                    patentMap.put("affair", affair);
+                    patentMap.put("affair", affairStrs);
 
                     //优先权日
                     if (patent.getPriorities() != null && patent.getPriorities().size() != 0) {

+ 99 - 84
src/main/java/cn/cslg/pas/service/business/es/EsCountService.java

@@ -150,7 +150,9 @@ public class EsCountService {
             String field = vo.getField();
             Integer topN = vo.getTopN();
             Boolean ifHaveChild = vo.getIfHaveChild();
+            String fieldId = vo.getFieldId();
             List<String> values = vo.getValues();
+
             //查询es返回数据
             SearchRequest.Builder builder = new SearchRequest.Builder();
             builder.index("patent");
@@ -164,28 +166,28 @@ public class EsCountService {
                 iEsAnalysisBuilder.setField(esConfigVO.getEsField());
                 iEsAnalysisBuilder.setTopN(topN);
                 iEsAnalysisBuilder.setIfHaveChild(ifHaveChild);
-                for (String value : values) {
-                    if (iEsAnalysisBuilder.getField().contains(".")) {
-                        String path = iEsAnalysisBuilder.getField().substring(0, iEsAnalysisBuilder.getField().indexOf("."));
-                        iEsAnalysisBuilder.setPath(path);
-                    }
-                    iEsAnalysisBuilder.setFieldValue(value);
-                    Aggregation aggregation = iEsAnalysisBuilder.createAnalyseAgg();
-                    builder.aggregations("Agg", aggregation);
-                    SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+                iEsAnalysisBuilder.setFieldValue(fieldId);
+                if (iEsAnalysisBuilder.getField().contains(".")) {
+                    String path = iEsAnalysisBuilder.getField().substring(0, iEsAnalysisBuilder.getField().indexOf("."));
+                    iEsAnalysisBuilder.setPath(path);
+                }
+                iEsAnalysisBuilder.setValues(values);
 
-                    Aggregate agg = response.aggregations().get("Agg");
-                    if (dateList.contains(field)) {
-                        this.getDateAnalysisDTOS(agg, field, value, topN, detailDTOS);
-                    } else if (nestedList.contains(field)) {
-                        this.getNestedCountDTOS(agg, field, detailDTOS);
-                    } else if (childList.contains(field)) {
-                        this.getChildAnalysisDTOS(agg, field, value, detailDTOS);
-                    } else if (numberList.contains(field)) {
-                        this.getNumberAnalysisDTOS(agg, field, value, detailDTOS);
-                    } else {
-                        this.getTermCountDTOS(agg, field, detailDTOS);
-                    }
+                Aggregation aggregation = iEsAnalysisBuilder.createAnalyseAgg();
+                builder.aggregations("Agg", aggregation);
+                SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+
+                Aggregate agg = response.aggregations().get("Agg");
+                if (dateList.contains(field)) {
+                    this.getDateAnalysisDTOS(agg, field, topN, detailDTOS);
+                } else if (nestedList.contains(field)) {
+                    this.getNestedCountDTOS(agg, field, detailDTOS);
+                } else if (childList.contains(field)) {
+                    this.getChildAnalysisDTOS(agg, field, detailDTOS);
+                } else if (numberList.contains(field)) {
+                    this.getNumberAnalysisDTOS(agg, field,detailDTOS);
+                } else {
+                    this.getTermCountDTOS(agg, field, detailDTOS);
                 }
             }
         }
@@ -193,12 +195,14 @@ public class EsCountService {
         return esCountDTO;
     }
 
+    //测试用的
     public EsCountDTO esAnalysis(EsCountVO vo) throws Exception {
         EsCountDTO esCountDTO = new EsCountDTO();
         List<EsCountDetailDTO> detailDTOS = new ArrayList<>();
         String field = vo.getField();
         Integer topN = vo.getTopN();
         Boolean ifHaveChild = vo.getIfHaveChild();
+        String fieldId = vo.getFieldId();
         List<String> values = vo.getValues();
 
         //查询es返回数据
@@ -214,6 +218,7 @@ public class EsCountService {
             iEsAnalysisBuilder.setField(esConfigVO.getEsField());
             iEsAnalysisBuilder.setTopN(topN);
             iEsAnalysisBuilder.setIfHaveChild(ifHaveChild);
+            iEsAnalysisBuilder.setFieldValue(fieldId);
             if (iEsAnalysisBuilder.getField().contains(".")) {
                 String path = iEsAnalysisBuilder.getField().substring(0, iEsAnalysisBuilder.getField().indexOf("."));
                 iEsAnalysisBuilder.setPath(path);
@@ -226,17 +231,13 @@ public class EsCountService {
 
             Aggregate agg = response.aggregations().get("Agg");
             if (dateList.contains(field)) {
-//                this.getDateAnalysisDTOS(agg, field, value, topN, detailDTOS);
+                this.getDateAnalysisDTOS(agg, field, topN, detailDTOS);
             } else if (nestedList.contains(field)) {
                 this.getNestedCountDTOS(agg, field, detailDTOS);
             } else if (childList.contains(field)) {
-                for (String value : values) {
-                    this.getChildAnalysisDTOS(agg, field, value, detailDTOS);
-                }
+                this.getChildAnalysisDTOS(agg, field, detailDTOS);
             } else if (numberList.contains(field)) {
-//                for (String value : values) {
-//                    this.getNumberAnalysisDTOS(agg, field, value, detailDTOS);
-//                }
+                this.getNumberAnalysisDTOS(agg, field,detailDTOS);
             } else {
                 this.getTermCountDTOS(agg, field, detailDTOS);
             }
@@ -260,6 +261,7 @@ public class EsCountService {
         Boolean ifHaveChild = vo.getIfHaveChild();
         String field = vo.getField();
         Integer fieldType = vo.getFieldType();
+        String fieldId = vo.getFieldId();
         Aggregation aggregation = null;
 
         builder.index("patent");
@@ -270,6 +272,7 @@ public class EsCountService {
         if (esConfigVO != null) {
             iEsCountBuilder = esCountBuilderFactory.getClass(esConfigVO.getEsClass());
             iEsCountBuilder.setField(esConfigVO.getEsField());
+            iEsCountBuilder.setFieldId(fieldId);
             iEsCountBuilder.setValueOne(valueOne);
             iEsCountBuilder.setValueTwo(valueTwo);
             iEsCountBuilder.setTopN(topN);
@@ -352,19 +355,38 @@ public class EsCountService {
     public void getChildCountDTOS(Aggregate agg, String field, List<EsCountDetailDTO> detailDTOS) {
         Aggregate childAgg = agg.children().aggregations().get("child_agg");
         List<StringTermsBucket> list = childAgg.sterms().buckets().array();
-        list.forEach(bucket -> {
-            EsCountDetailDTO dto = new EsCountDetailDTO();
-            dto.setField(field);
+        for (StringTermsBucket bucket : list) {
             Aggregate aggregate = bucket.aggregations().get("filter_agg");
-            List<StringTermsBucket> buckets = aggregate.sterms().buckets().array();
-            for (StringTermsBucket termsBucket : buckets) {
-                dto.setName(termsBucket.key().stringValue());
-                dto.setNumber(termsBucket.docCount());
-                if (dto.getNumber() > 0) {
-                    detailDTOS.add(dto);
+            List<FiltersBucket> list1 = aggregate.filters().buckets().array();
+            for (FiltersBucket filtersBucket : list1) {
+                Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
+                List<StringTermsBucket> list2 = filtersAgg.sterms().buckets().array();
+                if (!CollectionUtils.isEmpty(list2)) {
+                    for (StringTermsBucket termsBucket : list2) {
+                        EsCountDetailDTO dto = new EsCountDetailDTO();
+                        dto.setField(field);
+                        dto.setName(termsBucket.key().stringValue());
+                        dto.setNumber(termsBucket.docCount());
+                        if (dto.getNumber() > 0) {
+                            detailDTOS.add(dto);
+                        }
+                    }
                 }
             }
-        });
+        }
+//        list.forEach(bucket -> {
+//            EsCountDetailDTO dto = new EsCountDetailDTO();
+//            dto.setField(field);
+//            Aggregate aggregate = bucket.aggregations().get("filter_agg");
+//            List<StringTermsBucket> buckets = aggregate.sterms().buckets().array();
+//            for (StringTermsBucket termsBucket : buckets) {
+//                dto.setName(termsBucket.key().stringValue());
+//                dto.setNumber(termsBucket.docCount());
+//                if (dto.getNumber() > 0) {
+//                    detailDTOS.add(dto);
+//                }
+//            }
+//        });
     }
 
     /**
@@ -372,22 +394,35 @@ public class EsCountService {
      *
      * @param agg
      * @param field
-     * @param value
      * @param detailDTOS
      */
-    public void getChildAnalysisDTOS(Aggregate agg, String field, String value, List<EsCountDetailDTO> detailDTOS) {
+    public void getChildAnalysisDTOS(Aggregate agg, String field, List<EsCountDetailDTO> detailDTOS) {
         Aggregate childAgg = agg.children().aggregations().get("child_agg");
         List<StringTermsBucket> list = childAgg.sterms().buckets().array();
-        list.forEach(bucket -> {
-            EsCountDetailDTO dto = new EsCountDetailDTO();
-            dto.setField(field);
-            Aggregate aggregate = bucket.aggregations().get("filter_agg");
-            dto.setName(value);
-            dto.setNumber(aggregate.filter().docCount());
-            if (dto.getNumber() > 0) {
-                detailDTOS.add(dto);
+        for (StringTermsBucket bucket : list) {
+            Aggregate termAgg = bucket.aggregations().get("term_agg");
+            List<StringTermsBucket> bucketList = termAgg.sterms().buckets().array();
+            if (!CollectionUtils.isEmpty(bucketList)) {
+                for (StringTermsBucket termsBucket : bucketList) {
+                    EsCountDetailDTO dto = new EsCountDetailDTO();
+                    dto.setField(field);
+                    dto.setName(termsBucket.key().stringValue());
+                    Aggregate aggregate = termsBucket.aggregations().get("filterAgg");
+                    List<FiltersBucket> filtersBuckets = aggregate.filters().buckets().array();
+                    for (int i = 0; i < filtersBuckets.size() - 1; i++) {
+                        FiltersBucket filtersBucket = filtersBuckets.get(i);
+                        if (filtersBucket.docCount() > 0) {
+                            dto.setNumber(filtersBucket.docCount());
+                            if (dto.getNumber() > 0) {
+                                detailDTOS.add(dto);
+                            }
+                            break;
+                        }
+                    }
+                }
             }
-        });
+
+        }
     }
 
     /**
@@ -395,16 +430,18 @@ public class EsCountService {
      *
      * @param agg
      * @param field
-     * @param value
      * @param detailDTOS
      */
-    public void getNumberAnalysisDTOS(Aggregate agg, String field, String value, List<EsCountDetailDTO> detailDTOS) {
-        EsCountDetailDTO dto = new EsCountDetailDTO();
-        dto.setField(field);
-        dto.setName(value);
-        dto.setNumber(agg.filter().docCount());
-        if (dto.getNumber() > 0) {
-            detailDTOS.add(dto);
+    public void getNumberAnalysisDTOS(Aggregate agg, String field,List<EsCountDetailDTO> detailDTOS) {
+        List<RangeBucket> list = agg.range().buckets().array();
+        for (RangeBucket bucket : list) {
+            EsCountDetailDTO dto = new EsCountDetailDTO();
+            dto.setField(field);
+            dto.setName(bucket.key());
+            dto.setNumber(bucket.docCount());
+            if (dto.getNumber() > 0) {
+                detailDTOS.add(dto);
+            }
         }
     }
 
@@ -443,43 +480,21 @@ public class EsCountService {
      *
      * @param agg
      * @param field
-     * @param value
      * @param topN
      * @param detailDTOS
      */
-    public void getDateAnalysisDTOS(Aggregate agg, String field, String value, Integer topN, List<EsCountDetailDTO> detailDTOS) {
-        List<DateHistogramBucket> list = agg.dateHistogram().buckets().array();
+    public void getDateAnalysisDTOS(Aggregate agg, String field, Integer topN, List<EsCountDetailDTO> detailDTOS) {
+        List<RangeBucket> list1 = agg.dateRange().buckets().array();
         List<EsCountDetailDTO> esCountDetailDTOS = new ArrayList<>();
-        if (value.contains("H")) {
-            long sum = 0L;
-            for (DateHistogramBucket bucket : list) {
-                Aggregate aggregate = bucket.aggregations().get("filter_agg");
-                long docCount = aggregate.filter().docCount();
-                sum += docCount;
-            }
+        for (RangeBucket bucket : list1) {
             EsCountDetailDTO dto = new EsCountDetailDTO();
             dto.setField(field);
-            dto.setName(value);
-            dto.setNumber(sum);
+            dto.setName(bucket.key());
+            dto.setNumber(bucket.docCount());
             if (dto.getNumber() > 0) {
                 esCountDetailDTOS.add(dto);
             }
-        } else {
-            list.forEach(bucket -> {
-                EsCountDetailDTO dto = new EsCountDetailDTO();
-                dto.setField(field);
-                Aggregate aggregate = bucket.aggregations().get("filter_agg");
-                dto.setName(value);
-                dto.setNumber(bucket.docCount());
-                if (aggregate != null) {
-                    dto.setNumber(aggregate.filter().docCount());
-                }
-                if (dto.getNumber() > 0) {
-                    esCountDetailDTOS.add(dto);
-                }
-            });
         }
-
         if (!CollectionUtils.isEmpty(esCountDetailDTOS)) {
             List<EsCountDetailDTO> collect = esCountDetailDTOS.stream()
                     .sorted(Comparator.comparing(EsCountDetailDTO::getName).reversed()).limit(topN).collect(Collectors.toList());

+ 67 - 0
src/main/java/cn/cslg/pas/service/business/es/EsLegalEventService.java

@@ -0,0 +1,67 @@
+package cn.cslg.pas.service.business.es;
+
+import cn.cslg.pas.domain.es.LegalEvent;
+import cn.cslg.pas.domain.es.PatentQuoteMessage;
+import cn.cslg.pas.domain.es.QuotePatent;
+import cn.cslg.pas.exception.XiaoShiException;
+import co.elastic.clients.elasticsearch.ElasticsearchClient;
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import co.elastic.clients.elasticsearch.core.SearchRequest;
+import co.elastic.clients.elasticsearch.core.SearchResponse;
+import co.elastic.clients.elasticsearch.core.search.Hit;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class EsLegalEventService {
+    private final ElasticsearchClient client;
+
+    //根据专利号查询同族专利号
+    public List<LegalEvent> getEsQutePatentByNos(String patentNo) throws Exception {
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("legal_event");
+
+        Query q1 = QueryBuilders.term(t -> t.field("app_no").value(patentNo));
+        //公开号
+        Query q2 = QueryBuilders.term(t -> t.field("public_no").value(patentNo));
+        //授权号
+        Query q3 = QueryBuilders.term(t -> t.field("grant_no").value(patentNo));
+        Query query = QueryBuilders.bool(i -> i.should(q1, q2, q3));
+
+        builder.query(query);
+        SearchResponse<LegalEvent> response = client.search(builder.build(), LegalEvent.class);
+        List<Hit<LegalEvent>> hits = response.hits().hits();
+        List<LegalEvent> legalEvents = new ArrayList<>();
+        if (hits.size() <= 0) {
+            return legalEvents;
+        }
+        hits.forEach(item -> {
+            legalEvents.add(item.source());
+        });
+        return legalEvents;
+    }
+
+
+    public List<String> getStrLegalEvent(String patentNo) {
+        List<String> stringList = new ArrayList<>();
+        try {
+            List<LegalEvent> legalEvents = this.getEsQutePatentByNos(patentNo);
+            legalEvents = legalEvents.stream().sorted(Comparator.comparing(LegalEvent::getEventDate)).collect(Collectors.toList());
+            legalEvents.forEach(item -> {
+                stringList.add(item.getName());
+            });
+
+        } catch (Exception e) {
+            throw new XiaoShiException("获得事务错误");
+        }
+        return stringList;
+    }
+}

+ 1 - 2
src/main/java/cn/cslg/pas/service/business/es/EsService.java

@@ -818,7 +818,6 @@ public class EsService {
 
             List<ChinaLeagalStatus> chinaLeagalStatuses = JSON.parseArray(cnLegalApiStr, ChinaLeagalStatus.class);
             chinaLeagalStatuses.forEach(item -> {
-                if (legalEvents.size() > 0) {
                     LegalEvent tem = legalEvents.stream().filter(em -> em.getEventDate() != null && em.getEventDate().compareTo(item.getLegalDate()) == 0).findFirst().orElse(null);
                     if (tem == null) {
                         LegalEvent legalEvent1 = new LegalEvent();
@@ -834,7 +833,7 @@ public class EsService {
                         } catch (Exception e) {
                         }
                     }
-                }
+
             });
 
 

+ 45 - 0
src/test/java/cn/cslg/pas/service/EsLegalEventTests.java

@@ -0,0 +1,45 @@
+package cn.cslg.pas.service;
+
+import cn.cslg.pas.domain.es.LegalEvent;
+import cn.cslg.pas.service.business.es.EsLegalEventService;
+import cn.cslg.pas.service.business.es.EsQuotePatentService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/11/16
+ */
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class EsLegalEventTests {
+    @Autowired
+    private EsLegalEventService esLegalEventService;
+
+    @Test
+    public void addEsCustomField() throws Exception {
+
+    }
+
+    @Test
+    public void getEsCustomField() throws Exception {
+    }
+
+    @Test
+    public void getTree() {
+
+    }
+
+    @Test
+    public void getBackTo() throws Exception {
+     List<LegalEvent> legalEvents =   esLegalEventService.getEsQutePatentByNos("CN116525219A");
+     System.out.println(legalEvents);
+    }
+}