zero 8 ヶ月 前
コミット
fd9705d75a

+ 29 - 0
src/main/java/cn/cslg/pas/service/business/es/EsService.java

@@ -33,6 +33,7 @@ import co.elastic.clients.elasticsearch._types.query_dsl.*;
 import co.elastic.clients.elasticsearch.core.*;
 import co.elastic.clients.elasticsearch.core.search.FieldCollapse;
 import co.elastic.clients.elasticsearch.core.search.Hit;
+import co.elastic.clients.elasticsearch.core.search.TrackHits;
 import co.elastic.clients.json.JsonData;
 import com.alibaba.fastjson.JSON;
 import lombok.RequiredArgsConstructor;
@@ -1630,6 +1631,34 @@ public class EsService {
         return query;
 
     }
+
+    public long getMergePersonCount(Integer projectId, String patentId) {
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        //合并申请人
+        Query q = QueryBuilders.term(i -> i.field("merge_applicant.project_id").value(projectId));
+        Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(q));
+        //合并权利人
+        Query q1 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
+        Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(q1));
+        //合并发明人
+        Query q2 = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
+        Query query3 = QueryBuilders.nested(i -> i.path("merge_inventor").query(q2));
+        Query query = QueryBuilders.bool(i -> i.should(query1, query2, query3));
+        Query idQ = QueryBuilders.ids(i -> i.values(Collections.singletonList(patentId)));
+        Query parentQ = QueryBuilders.hasParent(i -> i.parentType("patent").query(idQ));
+        Query bool = QueryBuilders.bool(i -> i.must(parentQ, query));
+        builder.query(bool);
+        builder.size(10);
+        SearchResponse<Patent> response = null;
+        try {
+            response = client.search(builder.build(), Patent.class);
+        } catch (Exception e) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "ES检索失败");
+        }
+        return response.hits().total().value();
+    }
 }
 
 

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

@@ -6,9 +6,7 @@ import cn.cslg.pas.common.utils.FormatUtil;
 import cn.cslg.pas.common.vo.ImportTaskAMVO;
 import cn.cslg.pas.common.vo.PatentWithIdVO;
 import cn.cslg.pas.domain.business.ImportTask;
-import cn.cslg.pas.domain.es.ESImportTask;
-import cn.cslg.pas.domain.es.Patent;
-import cn.cslg.pas.domain.es.PatentJoin;
+import cn.cslg.pas.domain.es.*;
 import cn.cslg.pas.service.business.CompareLiteratureService;
 import cn.cslg.pas.service.business.ImportTaskService;
 import cn.cslg.pas.service.business.es.*;
@@ -16,9 +14,11 @@ import cn.cslg.pas.service.common.FileManagerService;
 import cn.cslg.pas.service.common.MessageService;
 import cn.cslg.pas.service.common.PatentStarApiService;
 import cn.cslg.pas.service.common.TranslateService;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationContext;
+import org.springframework.util.CollectionUtils;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -29,6 +29,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.locks.Condition;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
+import java.util.function.BiConsumer;
 
 public class SavePatentToEsThread extends Thread {
     private ApplicationContext applicationContext;
@@ -104,12 +105,50 @@ public class SavePatentToEsThread extends Thread {
                     patentId = esService.addPatent(patent);
                     orgPatent = patent;
                 }
+                if (importTaskAMVO.getProjectId() != null && StringUtils.isNotEmpty(patentId)) {
+                    long mergePersonCount = esService.getMergePersonCount(importTaskAMVO.getProjectId(), patentId);
+                    if (mergePersonCount < 1) {
+                        //合并申请人
+                        if (!CollectionUtils.isEmpty(orgPatent.getApplicant())) {
+                            List<PatentMergePerson> mergeAppPerson = this.createMergePerson(orgPatent.getApplicant(), importTaskAMVO.getProjectId());
+                            Patent newPatent = new Patent();
+                            newPatent.setMergeApplicant(mergeAppPerson);
+                            PatentJoin patentJoin = new PatentJoin();
+                            patentJoin.setParent(patentId);
+                            patentJoin.setName("merge_applicat");
+                            newPatent.setPatentJoin(patentJoin);
+                            esService.addChildPatent(newPatent, patentId);
+                        }
+                        //合并权利人
+                        if (!CollectionUtils.isEmpty(orgPatent.getRightHolder())) {
+                            List<PatentMergePerson> mergeAppPerson = this.createMergePerson(orgPatent.getRightHolder(), importTaskAMVO.getProjectId());
+                            Patent newPatent = new Patent();
+                            newPatent.setMergeRightHolder(mergeAppPerson);
+                            PatentJoin patentJoin = new PatentJoin();
+                            patentJoin.setParent(patentId);
+                            patentJoin.setName("merge_right_holder");
+                            newPatent.setPatentJoin(patentJoin);
+                            esService.addChildPatent(newPatent, patentId);
+                        }
+                        //合并发明人
+                        if (!CollectionUtils.isEmpty(orgPatent.getInventor())) {
+                            List<PatentMergePerson> mergeAppPerson = this.createMergePerson(orgPatent.getInventor(), importTaskAMVO.getProjectId());
+                            Patent newPatent = new Patent();
+                            newPatent.setMergeInventor(mergeAppPerson);
+                            PatentJoin patentJoin = new PatentJoin();
+                            patentJoin.setParent(patentId);
+                            patentJoin.setName("merge_inventor");
+                            newPatent.setPatentJoin(patentJoin);
+                            esService.addChildPatent(newPatent, patentId);
+                        }
+                    }
+                }
                 //判断是否和专题库或报告关联
                 ImportTaskAMVO importTaskAMVO = taskThread.getImportTaskAMVO();
 
                 //添加专利向量信息
                 EsPatentVectorService esPatentVectorService = applicationContext.getBean(EsPatentVectorService.class);
-                 esPatentVectorService.asyncAddPatentVector(orgPatent,patentId);
+                esPatentVectorService.asyncAddPatentVector(orgPatent, patentId);
                 //和专题库或报告进行关联
                 if (importTaskAMVO.getProjectId() != null) {
 
@@ -134,7 +173,7 @@ public class SavePatentToEsThread extends Thread {
 
                         //添加报告对比文件
                         CompareLiteratureService compareLiteratureService = applicationContext.getBean(CompareLiteratureService.class);
-                        compareLiteratureService.addCompareLiteratureToProject(importTaskAMVO,patent);
+                        compareLiteratureService.addCompareLiteratureToProject(importTaskAMVO, patent);
 
 
                     }
@@ -220,6 +259,20 @@ public class SavePatentToEsThread extends Thread {
         }
     }
 
+    private List<PatentMergePerson> createMergePerson(List<PatentPerson> personList, Integer projectId) {
+        List<PatentMergePerson> mergePersonList = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(personList)) {
+            for (PatentPerson person : personList) {
+                PatentMergePerson merge = new PatentMergePerson();
+                merge.setName(person.getName());
+                merge.setType(person.getType());
+                merge.setOrder(person.getOrder());
+                merge.setProjectId(String.valueOf(projectId));
+                mergePersonList.add(merge);
+            }
+        }
+        return mergePersonList;
+    }
 
     public void setIfProductAll(Boolean ifProductAll) {
         this.ifProductAll = ifProductAll;

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

@@ -916,9 +916,8 @@ public class EventServiceTests {
 
     @Test
     public void test120() throws Exception {
-        String result = "[PatentPerson(name=云南中烟工业有限责任公司, order=1, type=1)]";
-        List<PatentPerson> list = JSONArray.parseArray(result, PatentPerson.class);
-        System.out.println(list);
+        final long count = esService.getMergePersonCount(320, "fbLUhY8BdwlBaY8vCspo");
+        System.out.println(count);
     }
 
 }