zero 1 år sedan
förälder
incheckning
5ee29d1003

+ 93 - 0
src/main/java/cn/cslg/pas/common/dto/PatentDetailDTO.java

@@ -0,0 +1,93 @@
+package cn.cslg.pas.common.dto;
+
+import cn.cslg.pas.domain.es.PatentClassify;
+import cn.cslg.pas.domain.es.PatentPerson;
+import cn.cslg.pas.domain.es.PersonAddress;
+import cn.cslg.pas.domain.es.Text;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class PatentDetailDTO {
+
+    //专利号
+    private String patentNo;
+
+    //标题
+    private List<Text> title;
+
+    //摘要
+    private List<Text> abstractStr;
+
+    //申请号
+    private String appNo;
+
+    //申请日
+    private Date appDate;
+
+    //公开号
+    private String publicNo;
+
+    //公开日
+    private Date publicDate;
+
+    //授权号
+    private String grantNo;
+
+    //授权日
+    private Date grantDate;
+
+    //申请人
+    private List<PatentPerson> applicant;
+
+    //申请人地址
+    private PersonAddress applicantAddr;
+
+    //权利人
+    private List<PatentPerson> rightHolder;
+
+    //权利人地址
+    private PersonAddress rightHolderAddr;
+
+    //发明人
+    private List<PatentPerson> inventor;
+
+    //代理机构
+    private String agency;
+
+    //代理机构编号
+    private String agencyNo;
+
+    //代理人
+    private List<String> agent;
+
+    //IPC分类号(主)
+    private PatentClassify mipc;
+
+    //IPC集合
+    private List<PatentClassify> ipc;
+
+    //权利要求
+    private List<Text> claim;
+
+    //公开说明书文本
+    private List<Text> publicFullText;
+
+    //授权说明书文本
+    private List<Text> grantFullText;
+
+    //专利状态
+    private String simpleStatus;
+
+    //专利类型
+    private String patentType;
+
+    //法律状态
+    private List<String> legalStatus;
+
+    //同族专利列表
+    private List<PatentKinDTO> kinDTOS;
+}

+ 35 - 0
src/main/java/cn/cslg/pas/common/dto/PatentKinDTO.java

@@ -0,0 +1,35 @@
+package cn.cslg.pas.common.dto;
+
+import cn.cslg.pas.domain.es.PatentPerson;
+import cn.cslg.pas.domain.es.Text;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PatentKinDTO {
+
+    //摘要
+    private List<Text> abstractStr;
+
+    //专利号
+    private String patentNo;
+
+    //申请号
+    private String appNo;
+
+    //公开号
+    private String publicNo;
+
+    //授权号
+    private String grantNo;
+
+    //申请人
+    private List<PatentPerson> applicant;
+
+    //权利人
+    private List<PatentPerson> rightHolder;
+
+    //标题--专利名称
+    private List<Text> title;
+}

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

@@ -0,0 +1,13 @@
+package cn.cslg.pas.common.vo.business;
+
+import lombok.Data;
+
+@Data
+public class PatentKinDetailVO {
+    //申请号
+    private String appNo;
+    //公开号
+    private String publicNo;
+    //授权号
+    private String grantNo;
+}

+ 15 - 0
src/main/java/cn/cslg/pas/common/vo/business/PatentKinVO.java

@@ -0,0 +1,15 @@
+package cn.cslg.pas.common.vo.business;
+
+import lombok.Data;
+
+@Data
+public class PatentKinVO {
+    //专利号
+    private String patentNo;
+    //专利号
+    private String type;
+    //页码
+    private Integer pageNum;
+    //页的大小
+    private Integer pageSize;
+}

+ 11 - 1
src/main/java/cn/cslg/pas/controller/PatentController.java

@@ -2,12 +2,15 @@ package cn.cslg.pas.controller;
 
 import cn.cslg.pas.common.core.base.Constants;
 import cn.cslg.pas.common.dto.PatentColumnDTO;
+import cn.cslg.pas.common.dto.PatentDetailDTO;
+import cn.cslg.pas.common.dto.PatentKinDTO;
 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.common.vo.business.PatentKinVO;
 import cn.cslg.pas.common.vo.business.PatentNoVO;
 import cn.cslg.pas.factorys.businessFactory.Business;
 import cn.cslg.pas.factorys.businessFactory.BusinessFactory;
@@ -49,7 +52,14 @@ public class PatentController {
     @Operation(summary = "查询专利详情")
     @PostMapping("/selectPatentDetail")
     public Response selectPatentDetail(@RequestBody PatentNoVO vo) throws Exception {
-        PatentColumnDTO dto = esCountService.selectPatentDetail(vo);
+        PatentDetailDTO dto = esCountService.selectPatentDetail(vo);
+        return Response.success(dto);
+    }
+
+    @Operation(summary = "根据专利号查询同族")
+    @PostMapping("/selectKinByPatentNo")
+    public Response selectKinByPatentNo(@RequestBody PatentKinVO vo) throws Exception {
+        List<PatentKinDTO> dto = esCountService.selectKinByPatentNo(vo);
         return Response.success(dto);
     }
 

+ 112 - 5
src/main/java/cn/cslg/pas/service/business/es/EsCountService.java

@@ -2,13 +2,19 @@ package cn.cslg.pas.service.business.es;
 
 import cn.cslg.pas.common.dto.PatentColumnDTO;
 import cn.cslg.pas.common.dto.PatentDTO;
+import cn.cslg.pas.common.dto.PatentDetailDTO;
+import cn.cslg.pas.common.dto.PatentKinDTO;
 import cn.cslg.pas.common.dto.business.EsCountDTO;
 import cn.cslg.pas.common.dto.business.EsCountDetailDTO;
 import cn.cslg.pas.common.model.request.QueryRequest;
 import cn.cslg.pas.common.vo.EsConfigVO;
 import cn.cslg.pas.common.vo.business.EsCountVO;
+import cn.cslg.pas.common.vo.business.PatentKinDetailVO;
+import cn.cslg.pas.common.vo.business.PatentKinVO;
 import cn.cslg.pas.common.vo.business.PatentNoVO;
+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.factorys.EsBuilderFactory.IQueryBuilder;
 import cn.cslg.pas.factorys.EsCountBuilderFactory.EsCountBuilderFactory;
 import cn.cslg.pas.factorys.EsCountBuilderFactory.IEsCountBuilder;
@@ -24,6 +30,7 @@ import co.elastic.clients.elasticsearch.core.search.Hit;
 import co.elastic.clients.json.JsonData;
 import com.alibaba.fastjson.JSON;
 import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
@@ -43,8 +50,8 @@ import java.util.stream.Stream;
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class EsCountService {
     private final List<String> termList = Arrays.asList();
-    private final List<String> nestedList = Arrays.asList("PA","IN","PE");
-    private final List<String> dateList = Arrays.asList("PD","AD");
+    private final List<String> nestedList = Arrays.asList("PA", "IN", "PE");
+    private final List<String> dateList = Arrays.asList("PD", "AD");
 
     private final ElasticsearchClient client;
 
@@ -154,8 +161,9 @@ public class EsCountService {
      * @return
      * @throws IOException
      */
-    public PatentColumnDTO selectPatentDetail(PatentNoVO vo) throws IOException {
-        PatentColumnDTO dto = new PatentColumnDTO();
+    public PatentDetailDTO selectPatentDetail(PatentNoVO vo) throws IOException {
+        long startTime = System.currentTimeMillis();
+        PatentDetailDTO dto = new PatentDetailDTO();
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
         builder.index("patent");
@@ -163,12 +171,111 @@ public class EsCountService {
         Query query = QueryBuilders.bool(i -> i.must(q));
         builder.query(query);
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
-        List<PatentColumnDTO> list = new ArrayList<>();
         List<Hit<Patent>> hits = response.hits().hits();
         for (Hit<Patent> hit : hits) {
             Patent esMess = hit.source();
             BeanUtils.copyProperties(esMess, dto);
         }
+        PatentKinVO kinVO = new PatentKinVO();
+        kinVO.setPatentNo(vo.getPatentNo());
+        kinVO.setPageNum(1);
+        kinVO.setPageSize(10);
+        kinVO.setType("inpadoc");
+        List<PatentKinDTO> kinDTOS = this.selectKinByPatentNo(kinVO);
+        dto.setKinDTOS(kinDTOS);
+        long endTime = System.currentTimeMillis();
+        long l = endTime - startTime;
+        System.out.println("方法执行了共" + l + "毫秒");
         return dto;
     }
+
+    /**
+     * 根据专利号查询出同族专利列表
+     * @param vo
+     * @return
+     * @throws IOException
+     */
+    public List<PatentKinDTO> selectKinByPatentNo(PatentKinVO vo) throws IOException {
+        //1.根据专利号查询出同族
+        String no = vo.getPatentNo();
+        Integer pageNum = vo.getPageNum();
+        Integer pageSize = vo.getPageSize();
+        String type = vo.getType();
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent_family");
+        //申请号
+        Query q1 = QueryBuilders.term(t -> t.field("app_no.keyword").value(no));
+        //公开号
+        Query q2 = QueryBuilders.term(t -> t.field("public_no.keyword").value(no));
+        //授权号
+        Query q3 = QueryBuilders.term(t -> t.field("grant_no.keyword").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);
+        //分页
+        if (pageNum > 0 && pageSize > 0) {
+            builder.from((pageNum - 1) * pageSize).size(pageSize);
+        }
+        SearchResponse<PatentFamilyMessage> response = client.search(builder.build(), PatentFamilyMessage.class);
+        List<Hit<PatentFamilyMessage>> hits = response.hits().hits();
+        List<PatentKinDTO> kinDTOS = new ArrayList<>();
+        for (Hit<PatentFamilyMessage> hit : hits) {
+            PatentFamilyMessage familyMessage = hit.source();
+            List<FamilyPatent> patentList = familyMessage.getPatent();
+            if (!CollectionUtils.isEmpty(patentList)) {
+                for (FamilyPatent familyPatent : patentList) {
+                    PatentKinDetailVO kinDetailVO = new PatentKinDetailVO();
+                    kinDetailVO.setAppNo(familyPatent.getAppNo());
+                    kinDetailVO.setPublicNo(familyPatent.getPublicNo());
+                    kinDetailVO.setGrantNo(familyPatent.getGrantNo());
+                    PatentKinDTO kinDTO = this.selectPatentKindDetail(kinDetailVO)
+                            .stream().findFirst().orElse(null);
+                    if (kinDTO != null) {
+                        kinDTOS.add(kinDTO);
+                    }
+                }
+            }
+
+        }
+        long endTime = System.currentTimeMillis();
+        return kinDTOS;
+    }
+
+    public List<PatentKinDTO> selectPatentKindDetail(PatentKinDetailVO vo) throws IOException {
+        List<PatentKinDTO> list = new ArrayList<>();
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        //申请号
+        if (StringUtils.isNotEmpty(vo.getAppNo())) {
+
+        }
+        Query q1 = QueryBuilders.term(t -> t.field("patent_no.keyword").value(vo.getAppNo()));
+        //公开号
+        Query q2 = QueryBuilders.term(t -> t.field("patent_no.keyword").value(vo.getPublicNo()));
+        //授权号
+//        Query q3 = QueryBuilders.term(t -> t.field("patent_no.keyword").value(vo.getGrantNo()));
+        Query bool = QueryBuilders.bool(i -> i.should(q1, q2));
+        builder.query(bool);
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        List<Hit<Patent>> hits = response.hits().hits();
+        for (Hit<Patent> hit : hits) {
+            PatentKinDTO kinDTO = new PatentKinDTO();
+            Patent patent = hit.source();
+            if (patent != null) {
+                kinDTO.setPatentNo(patent.getPatentNo());
+                kinDTO.setAppNo(patent.getAppNo());
+                kinDTO.setPublicNo(patent.getPublicNo());
+                kinDTO.setGrantNo(patent.getGrantNo());
+                kinDTO.setTitle(patent.getTitle());
+                kinDTO.setAbstractStr(patent.getAbstractStr());
+                kinDTO.setApplicant(patent.getApplicant());
+                kinDTO.setRightHolder(patent.getRightHolder());
+                list.add(kinDTO);
+            }
+        }
+        return list;
+    }
 }

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

@@ -2,6 +2,8 @@ package cn.cslg.pas.service;
 
 import cn.cslg.pas.common.dto.PatentColumnDTO;
 import cn.cslg.pas.common.dto.PatentDTO;
+import cn.cslg.pas.common.dto.PatentDetailDTO;
+import cn.cslg.pas.common.dto.PatentKinDTO;
 import cn.cslg.pas.common.dto.business.EsCountDTO;
 import cn.cslg.pas.common.dto.business.EsPatentFamilyDTO;
 import cn.cslg.pas.common.dto.business.SelectClaimDTO;
@@ -9,6 +11,7 @@ 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.common.vo.business.EsCountVO;
+import cn.cslg.pas.common.vo.business.PatentKinVO;
 import cn.cslg.pas.common.vo.business.PatentNoVO;
 import cn.cslg.pas.controller.EventController;
 import cn.cslg.pas.controller.PatentController;
@@ -243,7 +246,18 @@ public class EventServiceTests {
     void test9() throws IOException {
         PatentNoVO vo = new PatentNoVO();
         vo.setPatentNo("CN201910069334.7");
-        PatentColumnDTO columnDTO = esCountService.selectPatentDetail(vo);
+        PatentDetailDTO columnDTO = esCountService.selectPatentDetail(vo);
         System.out.println(columnDTO);
     }
+
+    @Test
+    void test10() throws IOException {
+        PatentKinVO vo = new PatentKinVO();
+        vo.setPatentNo("CN201910069334.7");
+        vo.setPageNum(1);
+        vo.setPageSize(10);
+        vo.setType("inpadoc");
+        List<PatentKinDTO> kinDTOS = esCountService.selectKinByPatentNo(vo);
+        System.out.println(kinDTOS);
+    }
 }