Bladeren bron

专利号

zero 1 jaar geleden
bovenliggende
commit
804f7aa37e

+ 135 - 9
src/main/java/cn/cslg/pas/service/business/es/EsService.java

@@ -120,7 +120,6 @@ public class EsService {
     }
 
 
-
     /**
      * Es检索
      *
@@ -132,7 +131,106 @@ public class EsService {
 
         String searchCondition = "";
         List<EsCustomFieldValueDTO> customFields = queryRequest.getCustomFields();
-        if (CollectionUtils.isEmpty(customFields)) {
+        if (!CollectionUtils.isEmpty(customFields)) {
+            searchCondition = this.parseCustomField(customFields);
+        }
+        Integer projectId = queryRequest.getProjectId();
+        Long current = queryRequest.getCurrent();
+        Long size = queryRequest.getSize();
+        //判断表达式
+        if (queryRequest instanceof StringRequest) {
+            searchCondition = ((StringRequest) queryRequest).getSearchQuery();
+        } else if (queryRequest instanceof MapRequest) {
+            Map<String, Object> map = ((MapRequest) queryRequest).getSearchQuery();
+            StringBuilder stringBuilder = new StringBuilder();
+            for (String key : map.keySet()) {
+                Object value = map.get(key);
+                if (!"".contentEquals(stringBuilder)) {
+                    stringBuilder = stringBuilder.append(" AND ").append(key).append("=").append(value);
+                } else {
+                    stringBuilder = stringBuilder.append(key).append("=").append(value);
+                }
+            }
+            searchCondition = stringBuilder.toString();
+        }
+        if (projectId != null) {
+            if (searchCondition != null && !"".equals(searchCondition.trim())) {
+                searchCondition = "projectId = " + projectId + " AND " + searchCondition;
+            } else {
+                searchCondition = "projectId = " + projectId;
+            }
+        }
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        //1. 解析检索条件
+        treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
+        //格式化检索式
+        //3. 从es中检索数据
+        Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
+        //4. 返回数据
+        builder.query(q);
+        //排序
+        List<OrderDTO> dtoList = queryRequest.getOrderDTOList();
+        if (!CollectionUtils.isEmpty(dtoList)) {
+            for (OrderDTO orderDTO : dtoList) {
+                if (orderDTO.getOrderType().equals(IfConstant.NO)) {
+                    builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+                            .field(fieldSortBuilder -> fieldSortBuilder
+                                    .field(orderDTO.getOrderBy()).order(SortOrder.Asc)));
+                } else {
+                    builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+                            .field(fieldSortBuilder -> fieldSortBuilder
+                                    .field(orderDTO.getOrderBy()).order(SortOrder.Desc)));
+                }
+            }
+        } else {
+            builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+                    .field(fieldSortBuilder -> fieldSortBuilder
+                            .field("patent_no.keyword").order(SortOrder.Desc)));
+        }
+
+        //分页
+        if (current > 0 && size > 0) {
+            builder.from((current.intValue() - 1) * size.intValue()).size(size.intValue());
+        }
+
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        List<PatentColumnDTO> list = new ArrayList<>();
+        List<Hit<Patent>> hits = response.hits().hits();
+        long total = response.hits().total().value();
+        for (Hit<Patent> hit : hits) {
+            Patent esMess = hit.source();
+            PatentColumnDTO columnDTO = new PatentColumnDTO();
+//            columnDTO.setPatentNo(esMess.getPatentNo());
+            BeanUtils.copyProperties(esMess, columnDTO);
+            ContentVO titleVO = new ContentVO();
+            String title = StringUtils.strip(JSON.toJSONString(esMess.getTitle()), "[]");
+            ContentDetailDTO titleContent = JSONObject.parseObject(title, ContentDetailDTO.class);
+            titleVO.setContent(titleContent.getTextContent());
+            columnDTO.setTitle(titleVO);
+            ContentVO abstractVO = new ContentVO();
+            String abstractStr = StringUtils.strip(JSON.toJSONString(esMess.getAbstractStr()), "[]");
+            ContentDetailDTO abstractContent = JSONObject.parseObject(abstractStr, ContentDetailDTO.class);
+            abstractVO.setContent(abstractContent.getTextContent());
+            columnDTO.setAbstractStr(abstractVO);
+            list.add(columnDTO);
+
+        }
+        this.loadCoulumnDTO(list);
+        dto.setTotal(total);
+        dto.setPatents(list);
+        dto.setPageNum(current);
+        dto.setPageSize(size);
+        return dto;
+    }
+
+    public PatentDTO esSearch(QueryRequest queryRequest, List<EsCustomFieldValueDTO> customFields) throws Exception {
+        PatentDTO dto = new PatentDTO();
+
+        String searchCondition = "";
+//        List<EsCustomFieldValueDTO> customFields = queryRequest.getCustomFields();
+        if (!CollectionUtils.isEmpty(customFields)) {
             searchCondition = this.parseCustomField(customFields);
         }
         Integer projectId = queryRequest.getProjectId();
@@ -228,6 +326,7 @@ public class EsService {
 
     /**
      * 解析自定义栏位和值
+     *
      * @param customFields
      * @return
      */
@@ -261,7 +360,7 @@ public class EsService {
         }
 
         long end = System.currentTimeMillis();
-        System.out.println("耗时" + (end-start));
+        System.out.println("耗时" + (end - start));
         return builder.toString();
     }
 
@@ -816,6 +915,7 @@ public class EsService {
 
     /**
      * 查询权利要求
+     *
      * @param patentNo
      * @return
      */
@@ -833,7 +933,7 @@ public class EsService {
         //授权号
         Query q3 = QueryBuilders.term(t -> t.field("grant_no.keyword").value(patentNo));
         Query query = QueryBuilders.bool(i -> i.should(q1, q2, q3));
-        Query bool = QueryBuilders.bool(i -> i.must(q,query));
+        Query bool = QueryBuilders.bool(i -> i.must(q, query));
         builder.query(bool);
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
         SelectClaimDTO dto = new SelectClaimDTO();
@@ -851,17 +951,43 @@ public class EsService {
         return dto;
     }
 
-public List<PatentColumnDTO> loadCoulumnDTO(List<PatentColumnDTO> patentColumnDTOS){
-        patentColumnDTOS.forEach(item->{
+    public List<PatentColumnDTO> loadCoulumnDTO(List<PatentColumnDTO> patentColumnDTOS) {
+        patentColumnDTOS.forEach(item -> {
             item.setPictureGuid(FormatUtil.getPictureFormat(item.getAppNo()));
 
         });
 
-return patentColumnDTOS;
-}
-
+        return patentColumnDTOS;
+    }
 
+    /**
+     * 根据专利号查询出其他专利号
+     * @param patentNos
+     * @return
+     * @throws IOException
+     */
+    public SelectClaimDTO selectPatentNo(List<String> patentNos) throws IOException {
 
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        List<Query> queryList = new ArrayList<>();
+        for (String patentNo : patentNos) {
+            Query q1 = QueryBuilders.term(t -> t.field("patent_no.keyword").value(patentNo));
+            queryList.add(q1);
+        }
+        //申请号
+        Query query = QueryBuilders.bool(i -> i.mustNot(queryList));
+        builder.query(query);
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        SelectClaimDTO dto = new SelectClaimDTO();
+        List<Hit<Patent>> hits = response.hits().hits();
+        long value = response.hits().total().value();
+        if (value > 1) {
+            System.out.println("====================" + value);
+        }
+        return dto;
+    }
 }
 
 

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

@@ -309,5 +309,18 @@ public class EventServiceTests {
         customFields.add(dto2);
         String s = esService.parseCustomField(customFields);
         System.out.println("结果为:" + s);
+        System.out.println("-----------------------------");
+        List<EsCustomFieldValueDTO> fields = new ArrayList<>();
+
+    }
+
+    @Test
+    void test17() throws IOException {
+        List<String> list = new ArrayList<>();
+        list.add("CN201910069334.7");
+        list.add("CN201110286649.0");
+        list.add("CN200820185104.4");
+        SelectClaimDTO dto = esService.selectPatentNo(list);
+        System.out.println(dto);
     }
 }