zero пре 1 година
родитељ
комит
e73078d38b

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

@@ -0,0 +1,11 @@
+package cn.cslg.pas.common.dto.business;
+
+import lombok.Data;
+
+@Data
+public class EsPatentFamilyDTO {
+
+    private String patentFamilyId;
+
+    private Integer familyNum;
+}

+ 1 - 1
src/main/java/cn/cslg/pas/domain/es/FamilyPatent.java

@@ -19,7 +19,7 @@ public class FamilyPatent {
     private String publicNo;
 
     @JsonProperty("grant_no")
-    private String grant_no;
+    private String grantNo;
 
     /**
      * 申请号

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

@@ -12,7 +12,9 @@ import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
 import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
 import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
 import cn.cslg.pas.common.vo.PatentWithIdVO;
+import cn.cslg.pas.domain.es.FamilyPatent;
 import cn.cslg.pas.domain.es.Patent;
+import cn.cslg.pas.domain.es.PatentFamilyMessage;
 import cn.cslg.pas.service.query.FormatQueryService;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
 import co.elastic.clients.elasticsearch._types.SortOrder;
@@ -290,7 +292,7 @@ public class EsService {
      * @param projectId
      * @return
      */
-    public Boolean search(String parentId, Integer projectId) throws IOException {
+    public Boolean searchPatent(String parentId, Integer projectId) throws IOException {
         boolean flag = false;
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
@@ -307,6 +309,96 @@ public class EsService {
         }
         return flag;
     }
+
+    /**
+     * 查询同族
+     * @param nos
+     * @param type
+     * @return
+     * @throws IOException
+     */
+    public EsPatentFamilyDTO selectEsPatentFamily(List<String> nos, String type) throws IOException {
+        EsPatentFamilyDTO esDTO = new EsPatentFamilyDTO();
+
+        List<String> absentList = new ArrayList<>();
+
+        for (String no : nos) {
+            SearchRequest.Builder builder = new SearchRequest.Builder();
+            //设置查询索引
+            builder.index("patent_family");
+            //申请号
+            Query q1 = QueryBuilders.term(t -> t.field("app_no").value(no));
+            //公开号
+            Query q2 = QueryBuilders.term(t -> t.field("public_no").value(no));
+            //授权号
+            Query q3 = QueryBuilders.term(t -> t.field("grant_no").value(no));
+            //类型
+            Query q4 = QueryBuilders.term(t -> t.field("family_type").value(type));
+            Query bool = QueryBuilders.bool(i -> i.must(q4).should(q1, q2,q3));
+            builder.query(bool);
+            SearchResponse<PatentFamilyMessage> response = client.search(builder.build(), PatentFamilyMessage.class);
+            long total = response.hits().total().value();
+            if (total > 0) {
+                List<FamilyPatent> list = new ArrayList<>();
+                List<Hit<PatentFamilyMessage>> hits = response.hits().hits();
+                for (Hit<PatentFamilyMessage> hit : hits) {
+                    String id = hit.id();
+                    PatentFamilyMessage esMess = hit.source();
+                    list.addAll(esMess.getPatent());
+                    esDTO.setPatentFamilyId(id);
+                }
+                esDTO.setFamilyNum(list.size());
+            } else {
+                //获取不存在的号码
+                absentList.add(no);
+                break;
+            }
+        }
+        //todo 判断是否全新/部分
+        if (absentList.size() == nos.size()) {
+
+        } else {
+
+        }
+
+        return esDTO;
+    }
+
+    /**
+     * 添加同族
+     * @param message
+     * @return
+     * @throws Exception
+     */
+    public String addPatentFamily(PatentFamilyMessage message) throws Exception {
+        IndexResponse indexResponse = client.index(i -> i
+                .index("patent_family")
+                .document(message)
+        );
+        return indexResponse.id();
+
+    }
+
+    /**
+     * 更新同族
+     * @param familyPatent
+     * @param id
+     * @return
+     */
+    public Integer updateatentFamily(FamilyPatent familyPatent, String id) {
+        UpdateRequest<FamilyPatent, FamilyPatent> req;
+        req = UpdateRequest.of(
+                b -> b.index("patent_family")
+                        .id(id)
+                        .doc(familyPatent)
+        );
+        try {
+            client.update(req, FamilyPatent.class);
+            return 1;
+        } catch (IOException e) {
+            return -1;
+        }
+    }
 }
 
 

+ 1 - 1
src/main/java/cn/cslg/pas/service/importPatent/SavePatentToEsThread.java

@@ -66,7 +66,7 @@ public class SavePatentToEsThread extends Thread {
                 if (importTaskAMVO.getProjectId() != null) {
                     //根据projectId和专利id查询
                     if(patentId!=null){
-                     Boolean ifInproject=  esService.search(patentId,importTaskAMVO.getProjectId());
+                     Boolean ifInproject=  esService.searchPatent(patentId,importTaskAMVO.getProjectId());
                      if(!ifInproject) {
                          Patent patentChild = new Patent();
                          PatentJoin patentJoin = new PatentJoin();

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

@@ -1,13 +1,18 @@
 package cn.cslg.pas.service;
 
 import cn.cslg.pas.common.dto.PatentDTO;
+import cn.cslg.pas.common.dto.business.EsPatentFamilyDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.request.*;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.controller.EventController;
 import cn.cslg.pas.controller.PatentController;
+import cn.cslg.pas.domain.es.FamilyPatent;
+import cn.cslg.pas.domain.es.Patent;
+import cn.cslg.pas.domain.es.PatentFamilyMessage;
 import cn.cslg.pas.service.business.ProductMarketDataService;
 import cn.cslg.pas.service.business.es.EsService;
+import co.elastic.clients.elasticsearch.core.DeleteRequest;
 import com.alibaba.fastjson.JSONObject;
 import org.apache.http.entity.ContentType;
 import org.junit.Before;
@@ -20,10 +25,7 @@ import org.springframework.web.multipart.MultipartFile;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 
 /**
@@ -144,7 +146,7 @@ public class EventServiceTests {
 
     @Test
     void test12() throws IOException {
-        Boolean bool = esService.search("YiQCGowBmB3pRkTj4NNG", 5);
+        Boolean bool = esService.searchPatent("YiQCGowBmB3pRkTj4NNG", 5);
         System.out.println(bool);
     }
 
@@ -155,4 +157,31 @@ public class EventServiceTests {
         //3.判断5笔数据是正确的;
         //4.删除测试数据
     }
+
+    @Test
+    void add1() throws Exception {
+        List<FamilyPatent> list = new ArrayList<>();
+        FamilyPatent patent =new FamilyPatent();
+        patent.setAppNo("CN147258369");
+        patent.setGrantNo("CN258369147");
+        patent.setPublicNo("CN369258147");
+        FamilyPatent patent1 =new FamilyPatent();
+        patent1.setAppNo("US147258369");
+        patent1.setGrantNo("US258369147");
+        patent1.setPublicNo("US369258147");
+        list.add(patent);
+        list.add(patent1);
+        PatentFamilyMessage patentFamilyMessage =new PatentFamilyMessage();
+        patentFamilyMessage.setPatent(list);
+        patentFamilyMessage.setFamilyType("test");
+        String id = esService.addPatentFamily(patentFamilyMessage);
+        System.out.println(id);
+    }
+
+    @Test
+    void test3() throws IOException {
+        List<String> stringList = Arrays.asList("US369258147", "US258369147", "14528");
+        EsPatentFamilyDTO test = esService.selectEsPatentFamily(stringList, "test");
+        System.out.println(test);
+    }
 }