ソースを参照

Merge remote-tracking branch 'origin/master'

lwhhszx 1 年間 前
コミット
4194d7dff0

+ 4 - 0
src/main/java/cn/cslg/pas/common/dto/PatentDTO.java

@@ -10,5 +10,9 @@ public class PatentDTO {
 
     private Long total;
 
+    private Long pageNum;
+
+    private Long pageSize;
+
     private List<PatentColumnDTO> patents;
 }

+ 11 - 0
src/main/java/cn/cslg/pas/common/dto/business/EsCountDTO.java

@@ -0,0 +1,11 @@
+package cn.cslg.pas.common.dto.business;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class EsCountDTO {
+
+    private List<EsCountDetailDTO> detailDTOS;
+}

+ 12 - 0
src/main/java/cn/cslg/pas/common/dto/business/EsCountDetailDTO.java

@@ -0,0 +1,12 @@
+package cn.cslg.pas.common.dto.business;
+
+import lombok.Data;
+
+@Data
+public class EsCountDetailDTO {
+    //名称
+    private String key;
+    //数量
+    private Integer number;
+
+}

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

@@ -0,0 +1,13 @@
+package cn.cslg.pas.common.vo.business;
+
+import lombok.Data;
+
+@Data
+public class EsCountVO {
+    //栏位
+    private String field;
+    //搜索的栏位值
+    private String value;
+    //top
+    private Integer topN;
+}

+ 13 - 0
src/main/java/cn/cslg/pas/controller/PatentController.java

@@ -1,12 +1,15 @@
 package cn.cslg.pas.controller;
 
 import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.business.EsCountDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.request.MapRequest;
 import cn.cslg.pas.common.model.request.StringRequest;
 import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.vo.business.EsCountVO;
 import cn.cslg.pas.factorys.businessFactory.Business;
 import cn.cslg.pas.factorys.businessFactory.BusinessFactory;
+import cn.cslg.pas.service.business.es.EsCountService;
 import io.swagger.v3.oas.annotations.Operation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -21,6 +24,9 @@ public class PatentController {
     @Autowired
     private BusinessFactory businessFactory;
 
+    @Autowired
+    private EsCountService esCountService;
+
     @Operation(summary = "查询专利")
     @PostMapping("/queryPatent")
     public Response queryPatent(@RequestBody StringRequest stringRequest) throws Exception {
@@ -29,4 +35,11 @@ public class PatentController {
         return Response.success(records);
     }
 
+    @Operation(summary = "统计专利库中专利")
+    @PostMapping("/esCountSearch")
+    public Response esCountSearch(@RequestBody EsCountVO vo) throws Exception {
+        EsCountDTO dto = esCountService.esCountSearch(vo);
+        return Response.success(dto);
+    }
+
 }

+ 15 - 15
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/DateQueryBuilder.java

@@ -39,23 +39,23 @@ public class DateQueryBuilder implements IQueryBuilder {
                 switch (operator) {
                     case NumberQueryBuilder.LT:
                         query = QueryBuilders
-                                .range(range -> range.field(field).lt(JsonData.of(yearTime.substring(0, 10))));
+                                .range(range -> range.field(field).lt(JsonData.of(yearTime)));
                         break;
                     case NumberQueryBuilder.LTE:
                         query = QueryBuilders
-                                .range(range -> range.field(field).lte(JsonData.of(yearTime.substring(0, 10))));
+                                .range(range -> range.field(field).lte(JsonData.of(yearTime)));
                         break;
                     case NumberQueryBuilder.GT:
                         query = QueryBuilders
-                                .range(range -> range.field(field).gt(JsonData.of(yearTime.substring(0, 10))));
+                                .range(range -> range.field(field).gt(JsonData.of(yearTime)));
                         break;
                     case NumberQueryBuilder.GTE:
                         query = QueryBuilders
-                                .range(range -> range.field(field).gte(JsonData.of(yearTime.substring(0, 10))));
+                                .range(range -> range.field(field).gte(JsonData.of(yearTime)));
                         break;
                     default:
                         query = QueryBuilders
-                                .range(range -> range.field(field).gte(JsonData.of(yearTime.substring(0, 10))).lte(JsonData.of(yearNextTime.substring(0, 10))));
+                                .range(range -> range.field(field).gte(JsonData.of(yearTime)).lte(JsonData.of(yearNextTime)));
                         break;
                 }
             } else if (value.length() == MONTH || value.length() == MONTHONE) {
@@ -77,23 +77,23 @@ public class DateQueryBuilder implements IQueryBuilder {
                 switch (operator) {
                     case NumberQueryBuilder.LT:
                         query = QueryBuilders
-                                .range(range -> range.field(field).lt(JsonData.of(monthTime.substring(0, 10))));
+                                .range(range -> range.field(field).lt(JsonData.of(monthTime)));
                         break;
                     case NumberQueryBuilder.LTE:
                         query = QueryBuilders
-                                .range(range -> range.field(field).lte(JsonData.of(monthTime.substring(0, 10))));
+                                .range(range -> range.field(field).lte(JsonData.of(monthTime)));
                         break;
                     case NumberQueryBuilder.GT:
                         query = QueryBuilders
-                                .range(range -> range.field(field).gt(JsonData.of(monthTime.substring(0, 10))));
+                                .range(range -> range.field(field).gt(JsonData.of(monthTime)));
                         break;
                     case NumberQueryBuilder.GTE:
                         query = QueryBuilders
-                                .range(range -> range.field(field).gte(JsonData.of(monthTime.substring(0, 10))));
+                                .range(range -> range.field(field).gte(JsonData.of(monthTime)));
                         break;
                     default:
                         query = QueryBuilders
-                                .range(range -> range.field(field).gte(JsonData.of(monthTime.substring(0, 10))).lte(JsonData.of(monthNextTime.substring(0, 10))));
+                                .range(range -> range.field(field).gte(JsonData.of(monthTime)).lte(JsonData.of(monthNextTime)));
                         break;
                 }
             } else if (value.length() == DAY || value.length() == DAYONE) {
@@ -112,22 +112,22 @@ public class DateQueryBuilder implements IQueryBuilder {
                 switch (operator) {
                     case NumberQueryBuilder.LT:
                         query = QueryBuilders
-                                .range(range -> range.field(field).lt(JsonData.of(dayTime.substring(0, 10))));
+                                .range(range -> range.field(field).lt(JsonData.of(dayTime)));
                         break;
                     case NumberQueryBuilder.LTE:
                         query = QueryBuilders
-                                .range(range -> range.field(field).lte(JsonData.of(dayTime.substring(0, 10))));
+                                .range(range -> range.field(field).lte(JsonData.of(dayTime)));
                         break;
                     case NumberQueryBuilder.GT:
                         query = QueryBuilders
-                                .range(range -> range.field(field).gt(JsonData.of(dayTime.substring(0, 10))));
+                                .range(range -> range.field(field).gt(JsonData.of(dayTime)));
                         break;
                     case NumberQueryBuilder.GTE:
                         query = QueryBuilders
-                                .range(range -> range.field(field).gte(JsonData.of(dayTime.substring(0, 10))));
+                                .range(range -> range.field(field).gte(JsonData.of(dayTime)));
                         break;
                     default:
-                        query = QueryBuilders.match(dayQuery -> dayQuery.field(field).query(dayTime.substring(0, 10)));
+                        query = QueryBuilders.match(dayQuery -> dayQuery.field(field).query(dayTime));
                         break;
                 }
             }

+ 57 - 0
src/main/java/cn/cslg/pas/service/business/es/EsCountService.java

@@ -0,0 +1,57 @@
+package cn.cslg.pas.service.business.es;
+
+import cn.cslg.pas.common.dto.PatentDTO;
+import cn.cslg.pas.common.dto.business.EsCountDTO;
+import cn.cslg.pas.common.model.request.QueryRequest;
+import cn.cslg.pas.common.vo.business.EsCountVO;
+import cn.cslg.pas.domain.es.Patent;
+import co.elastic.clients.elasticsearch.ElasticsearchClient;
+import co.elastic.clients.elasticsearch._types.aggregations.AggregateBuilders;
+import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
+import co.elastic.clients.elasticsearch._types.aggregations.AggregationBuilders;
+import co.elastic.clients.elasticsearch._types.aggregations.NestedAggregate;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import co.elastic.clients.elasticsearch.core.SearchRequest;
+import co.elastic.clients.elasticsearch.core.SearchResponse;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class EsCountService {
+
+    private final ElasticsearchClient client;
+
+
+    /**
+     * 查询专利库中的专利分组聚合统计
+     * @param vo
+     * @return
+     * @throws Exception
+     */
+    public EsCountDTO esCountSearch(EsCountVO vo) throws Exception {
+        String field = vo.getField();
+        String value = vo.getValue();
+        Integer topN = vo.getTopN();
+        EsCountDTO esCountDTO = new EsCountDTO();
+
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        builder.index("patent");
+        if (field.equals("applicant")) {
+
+        }
+        if (field.equals("rightHolder")) {
+
+        }
+        if (field.equals("mipc")) {
+
+        }
+        if (field.equals("appDate")) {
+
+        }
+//        AggregationBuilders.terms(i -> i.field()).field()
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        return esCountDTO;
+    }
+}

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

@@ -204,7 +204,8 @@ public class EsService {
         }
         dto.setTotal(total);
         dto.setPatents(list);
-
+        dto.setPageNum(current);
+        dto.setPageSize(size);
         return dto;
     }
 

+ 2 - 2
src/test/java/cn/cslg/pas/service/EventServiceTests.java

@@ -125,7 +125,7 @@ public class EventServiceTests {
 //        mapRequest.setProjectId(1);
         StringRequest stringRequest = new StringRequest();
 //        stringRequest.setSearchQuery("appCity=济南");
-        stringRequest.setSearchQuery("mipcLevel1=H");
+//        stringRequest.setSearchQuery("mipcLevel1=H");
 //        stringRequest.setSearchQuery("agent=李桂存");
 //        stringRequest.setSearchQuery("IN=郝旭东");
 //        stringRequest.setSearchQuery("simpleStatus=3");
@@ -135,7 +135,7 @@ public class EventServiceTests {
 //        stringRequest.setSearchQuery("PN=CN114513005B");
 //        stringRequest.setSearchQuery("AN=CN201810025278.2");
 //        stringRequest.setSearchQuery("patentNo=CN");
-//        stringRequest.setSearchQuery("PD<=200903");
+        stringRequest.setSearchQuery("PD<=200903");
 //        stringRequest.setSearchQuery("patentNo=CN201199922Y and (simpleFamilyNum>1 or simpleFamilyNum=0)");
         stringRequest.setCurrent(1L);
         stringRequest.setSize(5L);