Browse Source

检索导入

lwhhszx 1 year ago
parent
commit
06f3f6c698

+ 1 - 0
src/main/java/cn/cslg/pas/common/dto/UploadPatentWebDTO.java

@@ -10,4 +10,5 @@ public class UploadPatentWebDTO {
     private StarPatentVO starPatentVO;
     private Patent patent;
     private Integer counter;
+    private Integer totalCounter;
 }

+ 99 - 0
src/main/java/cn/cslg/pas/common/vo/ChinaPatentZhuLu.java

@@ -0,0 +1,99 @@
+package cn.cslg.pas.common.vo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 专利之星中国专利著录实体类
+ *
+ * @Author chenyu
+ * @Date 2023/6/25
+ */
+@Accessors(chain = true)
+@Data
+public class ChinaPatentZhuLu implements Serializable {
+    /**
+     * 申请号
+     */
+    private String AN;
+    /**
+     * 申请日
+     */
+    private String AD;
+    private String CPT;
+    /**
+     * 公开日
+     */
+    private String PD;
+    private String CGT;
+    /**
+     * 公告日
+     */
+    private String GD;
+    private String ZLTP;
+    /**
+     * 标题
+     */
+    private String TI;
+    /**
+     * 国省代码
+     */
+    private String CO;
+    private String MingCheng;
+    /**
+     * 代理人
+     */
+    private String AT;
+    /**
+     * 代理机构代码
+     */
+    private String AG;
+    /**
+     * 代理机构名称
+     */
+    private String AGN;
+    /**
+     * 主分类号
+     */
+    private String MC;
+    /**
+     * 分类号
+     */
+    private String IC;
+    /**
+     * 范畴分类
+     */
+    private String CT;
+    /**
+     * 申请人
+     */
+    private String PA;
+    /**
+     * 发明人
+     */
+    private String IV;
+    /**
+     * 申请人地址
+     */
+    private String DZ;
+    private String ZipCode;
+    /**
+     * 优先权号
+     */
+    private String PR;
+    private String PRD;
+    private String Examiner;
+    private String CiteInfo;
+    private String NoCiteInfo;
+    /**
+     * 摘要
+     */
+    private String AB;
+    /**
+     * 主权要
+     */
+    private String CL1;
+
+}

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

@@ -93,7 +93,6 @@ public class EsService {
      * @throws IOException
      */
     public List<Patent> search(String key, Integer page, Integer limit) throws IOException {
-
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
         builder.index("patent");

+ 39 - 20
src/main/java/cn/cslg/pas/service/importPatent/GetCataloguingFromWebThread.java

@@ -1,16 +1,16 @@
 package cn.cslg.pas.service.importPatent;
 
+import cn.cslg.pas.common.dto.UploadPatentWebDTO;
 import cn.cslg.pas.common.model.cronModel.SystemFile;
 import cn.cslg.pas.common.utils.ReadExcelUtils;
-import cn.cslg.pas.common.vo.ImportTaskAMVO;
-import cn.cslg.pas.common.vo.PatentData;
-import cn.cslg.pas.common.vo.UploadParamsVO;
-import cn.cslg.pas.common.vo.UploadSettingVO;
+import cn.cslg.pas.common.vo.*;
 import cn.cslg.pas.domain.es.Patent;
 import cn.cslg.pas.domain.es.Text;
 import cn.cslg.pas.service.common.ExcuteDataToVOService;
 import cn.cslg.pas.service.common.ExcuteUploadSettingService;
 import cn.cslg.pas.service.common.FileManagerService;
+import cn.cslg.pas.service.common.PatentStarApiService;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import org.apache.commons.compress.utils.IOUtils;
 import org.apache.poi.ss.usermodel.Sheet;
@@ -24,42 +24,61 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 
 @Configurable
 public class GetCataloguingFromWebThread extends Thread {
 
     private ImportTaskAMVO importTaskAMVO;
     private ApplicationContext applicationContext;
-    private SavePatentToEsThread savePatentToEsThread;
+    private ImportFromWebToEsService importFromWebToEsService;
+    private PatentStarApiService patentStarApiService;
+    private List<UploadPatentWebDTO> uploadPatentWebDTOs;
+    private final Lock taskLock = new ReentrantLock();
+    private final Condition taskCondition = taskLock.newCondition();
     @Override
     public void run() {
         try {
+            while ( uploadPatentWebDTOs.size() > 0||importTaskAMVO.getProgressVO().equals(1)) {
 
+                //判断任务队列是否有任务,若没有则线程等待唤醒
+                if (uploadPatentWebDTOs.size() == 0) {
+                    taskLock.lock();
+                    taskCondition.await();
+                }
+                //根据专利申请号查询著录并装载信息
+                UploadPatentWebDTO uploadPatentWebDTO = uploadPatentWebDTOs.remove(0);
+                String chinaPatentZhuLuStr = patentStarApiService.getCnBibApi(uploadPatentWebDTO.getPatent().getAppNo());
+                if (chinaPatentZhuLuStr != null && !chinaPatentZhuLuStr.trim().equals("") && !chinaPatentZhuLuStr.equals("{}") && !chinaPatentZhuLuStr.contains("请求不合法")) {
+                    List<ChinaPatentZhuLu> chinaPatentZhuLus = JSON.parseArray(chinaPatentZhuLuStr, ChinaPatentZhuLu.class);
+                    ChinaPatentZhuLu chinaPatentZhuLu = chinaPatentZhuLus.get(0);
+                    importFromWebToEsService.savePatentToEs(uploadPatentWebDTO);
+                }
+            }
 
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
 
-    public GetCataloguingFromWebThread(TaskThread taskThread, SavePatentToEsThread savePatentToEsThread) {
-        this.importTaskAMVO =taskThread.getImportTaskAMVO();
-        this.savePatentToEsThread = savePatentToEsThread;
+
+    public GetCataloguingFromWebThread(TaskThread taskThread, ImportFromWebToEsService importFromWebToEsService) {
+        this.importTaskAMVO = taskThread.getImportTaskAMVO();
+        this.importFromWebToEsService = importFromWebToEsService;
         this.applicationContext = taskThread.getApplicationContext();
     }
-//    public void awakeTask(Patent patent) {
-//        patents.add(patent);
-//        if (taskLock.tryLock()) {
-//            taskCondition.signalAll();
-//            taskLock.unlock();
-//        }
-//    }
-        //如果是中国专利,就将申请号作为专利号
-//        if (patent.getPatentNo().contains("CN")) {
-//            patent.setPatentNo(patent.getAppNo());  //将申请号设为专利号patentNo
-//        }
+    public void awakeTask(UploadPatentWebDTO uploadPatentWebDTO) {
+        uploadPatentWebDTOs.add(uploadPatentWebDTO);
+        if (taskLock.tryLock()) {
+            taskCondition.signalAll();
+            taskLock.unlock();
+        }
+    }
 
 
-        //装载权利要求
+    //装载权利要求
 
 
 }

+ 63 - 0
src/main/java/cn/cslg/pas/service/importPatent/GetPDFfromWebThread.java

@@ -0,0 +1,63 @@
+package cn.cslg.pas.service.importPatent;
+
+import cn.cslg.pas.common.dto.UploadPatentWebDTO;
+import cn.cslg.pas.common.vo.ChinaPatentZhuLu;
+import cn.cslg.pas.common.vo.ImportTaskAMVO;
+import cn.cslg.pas.service.common.PatentStarApiService;
+import com.alibaba.fastjson.JSON;
+import org.springframework.beans.factory.annotation.Configurable;
+import org.springframework.context.ApplicationContext;
+
+import java.util.List;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+@Configurable
+public class GetPDFfromWebThread extends Thread {
+
+    private ImportTaskAMVO importTaskAMVO;
+    private ApplicationContext applicationContext;
+    private ImportFromWebToEsService importFromWebToEsService;
+    private PatentStarApiService patentStarApiService;
+    private List<UploadPatentWebDTO> uploadPatentWebDTOs;
+    private final Lock taskLock = new ReentrantLock();
+    private final Condition taskCondition = taskLock.newCondition();
+    @Override
+    public void run() {
+        try {
+            while ( uploadPatentWebDTOs.size() > 0||importTaskAMVO.getProgressVO().equals(1)) {
+
+                //判断任务队列是否有任务,若没有则线程等待唤醒
+                if (uploadPatentWebDTOs.size() == 0) {
+                    taskLock.lock();
+                    taskCondition.await();
+                }
+                //根据专利申请号查询著录并装载信息
+
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    public GetPDFfromWebThread(TaskThread taskThread, ImportFromWebToEsService importFromWebToEsService) {
+        this.importTaskAMVO = taskThread.getImportTaskAMVO();
+        this.importFromWebToEsService = importFromWebToEsService;
+        this.applicationContext = taskThread.getApplicationContext();
+    }
+    public void awakeTask(UploadPatentWebDTO uploadPatentWebDTO) {
+        uploadPatentWebDTOs.add(uploadPatentWebDTO);
+        if (taskLock.tryLock()) {
+            taskCondition.signalAll();
+            taskLock.unlock();
+        }
+    }
+
+
+    //装载权利要求
+
+
+}

+ 61 - 0
src/main/java/cn/cslg/pas/service/importPatent/GetPictureFromWebThread.java

@@ -0,0 +1,61 @@
+package cn.cslg.pas.service.importPatent;
+
+import cn.cslg.pas.common.dto.UploadPatentWebDTO;
+import cn.cslg.pas.common.vo.ImportTaskAMVO;
+import cn.cslg.pas.service.common.PatentStarApiService;
+import org.springframework.beans.factory.annotation.Configurable;
+import org.springframework.context.ApplicationContext;
+
+import java.util.List;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+@Configurable
+public class GetPictureFromWebThread extends Thread {
+
+    private ImportTaskAMVO importTaskAMVO;
+    private ApplicationContext applicationContext;
+    private ImportFromWebToEsService importFromWebToEsService;
+    private PatentStarApiService patentStarApiService;
+    private List<UploadPatentWebDTO> uploadPatentWebDTOs;
+    private final Lock taskLock = new ReentrantLock();
+    private final Condition taskCondition = taskLock.newCondition();
+    @Override
+    public void run() {
+        try {
+            while ( uploadPatentWebDTOs.size() > 0||importTaskAMVO.getProgressVO().equals(1)) {
+
+                //判断任务队列是否有任务,若没有则线程等待唤醒
+                if (uploadPatentWebDTOs.size() == 0) {
+                    taskLock.lock();
+                    taskCondition.await();
+                }
+                //根据专利申请号查询著录并装载信息
+
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    public GetPictureFromWebThread(TaskThread taskThread, ImportFromWebToEsService importFromWebToEsService) {
+        this.importTaskAMVO = taskThread.getImportTaskAMVO();
+        this.importFromWebToEsService = importFromWebToEsService;
+        this.applicationContext = taskThread.getApplicationContext();
+    }
+    public void awakeTask(UploadPatentWebDTO uploadPatentWebDTO) {
+        uploadPatentWebDTOs.add(uploadPatentWebDTO);
+        if (taskLock.tryLock()) {
+            taskCondition.signalAll();
+            taskLock.unlock();
+        }
+    }
+
+
+    //装载权利要求
+
+
+}

+ 97 - 0
src/main/java/cn/cslg/pas/service/importPatent/GetRightAndFullTextFromWebThread.java

@@ -0,0 +1,97 @@
+package cn.cslg.pas.service.importPatent;
+
+import cn.cslg.pas.common.core.IgnoreDTDEntityResolver;
+import cn.cslg.pas.common.dto.UploadPatentWebDTO;
+import cn.cslg.pas.common.model.importTaskModel.PatentRight;
+import cn.cslg.pas.common.vo.ChinaPatentZhuLu;
+import cn.cslg.pas.common.vo.ImportTaskAMVO;
+import cn.cslg.pas.domain.es.Patent;
+import cn.cslg.pas.service.common.PatentStarApiService;
+import com.alibaba.fastjson.JSON;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.XPath;
+import org.dom4j.io.SAXReader;
+import org.springframework.beans.factory.annotation.Configurable;
+import org.springframework.context.ApplicationContext;
+
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+@Configurable
+public class GetRightAndFullTextFromWebThread extends Thread{
+    private ImportTaskAMVO importTaskAMVO;
+    private ApplicationContext applicationContext;
+    private ImportFromWebToEsService importFromWebToEsService;
+    private PatentStarApiService patentStarApiService;
+    private List<UploadPatentWebDTO> uploadPatentWebDTOs;
+    private final Lock taskLock = new ReentrantLock();
+    private final Condition taskCondition = taskLock.newCondition();
+
+    @Override
+    public void run() {
+        try {
+            while ( uploadPatentWebDTOs.size() > 0||importTaskAMVO.getProgressVO().equals(1)) {
+                UploadPatentWebDTO uploadPatentWebDTO = uploadPatentWebDTOs.remove(0);
+                Patent patent  =uploadPatentWebDTO.getPatent();
+                if (uploadPatentWebDTOs.size() == 0) {
+                    taskLock.lock();
+                    taskCondition.await();
+                }
+                if ((patent.getPublicNo() != null && patent.getPublicNo().contains("CN")) || (patent.getPublicNo() == null && patent.getPatentNo().contains("CN"))) {
+                    //根据申请号调用"获得中国专利全文文本"接口,获得包含各种xml标签的专利全文内容的长字符串 cnFullXmlStr
+                    String cnFullXmlStr = patentStarApiService.getCnFullXmlApi(patent.getAppNo());
+
+
+                    SAXReader reader = new SAXReader();
+                    reader.setEntityResolver(new IgnoreDTDEntityResolver());
+                    Reader stringReader = new StringReader(cnFullXmlStr);
+                    Document document = reader.read(stringReader);
+                    XPath xpath = document.createXPath("//claim-text");
+                    List<Element> element = (List<Element>) xpath.selectNodes(document);
+                    if (element.size() == 0) {
+                        xpath = document.createXPath("//business:ClaimText");
+                        element = (List<Element>) xpath.selectNodes(document);
+                    }
+                    List<String> reStrs = new ArrayList<>();
+                    element.forEach(item -> {
+                        String claim = item.getText();
+                        reStrs.add(claim);
+                    });
+                    String reStr = "";
+                    if (reStrs.size() != 0) {
+                        reStr = cn.cslg.pas.common.utils.StringUtils.join(reStrs, "\r\n");
+                    }
+                    //装载权利要求原文
+                    PatentRight patentRight = new PatentRight();
+
+                }
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    public GetRightAndFullTextFromWebThread(TaskThread taskThread, ImportFromWebToEsService importFromWebToEsService) {
+        this.importTaskAMVO = taskThread.getImportTaskAMVO();
+        this.importFromWebToEsService = importFromWebToEsService;
+        this.applicationContext = taskThread.getApplicationContext();
+    }
+    public void awakeTask(UploadPatentWebDTO uploadPatentWebDTO) {
+        uploadPatentWebDTOs.add(uploadPatentWebDTO);
+        if (taskLock.tryLock()) {
+            taskCondition.signalAll();
+            taskLock.unlock();
+        }
+    }
+
+
+    //装载权利要求
+}

+ 22 - 13
src/main/java/cn/cslg/pas/service/importPatent/ImportFromWebToEsService.java

@@ -29,29 +29,32 @@ public class ImportFromWebToEsService implements PatentImportImp {
     private TaskThread taskThread;
     @Autowired
     private PatentStarApiService patentStarApiService;
+    private ImportTaskAMVO importTaskAMVO;
 
+    private SavePatentToEsThread savePatentToEsThread;
+
+    private GetCataloguingFromWebThread getCataloguingFromWebThread;
     @Override
     public void startPatentThread() {
-        ImportTaskAMVO importTaskAMVO = new ImportTaskAMVO();
         //十进制转二进制
         String imContents = MathUtils.fun(2, importTaskAMVO.getImportContent());
         //下载字段
         char[] importCells = imContents.toCharArray();
         char ifCataloguing = importCells[0];
-        char ifAddPicture =  importCells[1];
+        char ifAddPicture = importCells[1];
         char ifClaim = importCells[2];
-        char ifFullText =importCells[3];
-        char ifPdf =importCells[4];
+        char ifFullText = importCells[3];
+        char ifPdf = importCells[4];
         //若本次下载任务是超过一万条专利的全部下载任务
         int patentNum = 10000;
         if (importTaskAMVO.getEndNum() <= patentNum) {
             excuteLessThan10000(importTaskAMVO);
         } else {
         }
-        SavePatentToEsThread savePatentToEsThread = new SavePatentToEsThread(taskThread, taskThread.getApplicationContext());
-        if(ifCataloguing==1){
-            GetCataloguingFromWebThread getCataloguingFromWebThread =new GetCataloguingFromWebThread(taskThread,savePatentToEsThread);
-                getCataloguingFromWebThread.start();
+         savePatentToEsThread = new SavePatentToEsThread(taskThread, taskThread.getApplicationContext());
+        if (ifCataloguing == 1) {
+           getCataloguingFromWebThread = new GetCataloguingFromWebThread(taskThread, this);
+            getCataloguingFromWebThread.start();
         }
 
         GetPatentFromExcelThread getPatentFromExcelThread = new GetPatentFromExcelThread(taskThread.getImportTaskAMVO(), savePatentToEsThread, taskThread.getApplicationContext());
@@ -78,7 +81,6 @@ public class ImportFromWebToEsService implements PatentImportImp {
             Integer startNum = calculate.getStartNum();
             Integer endPage = calculate.getEndPage();
 
-
             //根据计算出的起止页数,一页一页检索
             for (int i = startPage; i <= endPage; i++) {
                 PatentStarListDTO patentStarListDto = new PatentStarListDTO()
@@ -98,11 +100,10 @@ public class ImportFromWebToEsService implements PatentImportImp {
                 //遍历这一页的专利
                 for (int j = 0; j < starPatents.size(); j++) {
                     UploadPatentWebDTO uploadPatentWebDTO = new UploadPatentWebDTO();
-                    uploadPatentWebDTO.setStarPatentVO(starPatents.get(0));
-                    Patent patent = new Patent();
-                    uploadPatentWebDTO.setPatent(patent);
+                    //装载start
+                    uploadPatentWebDTO.setStarPatentVO(starPatents.get(i));
                     uploadPatentWebDTO.setCounter(0);
-
+                    getCataloguingFromWebThread.awakeTask(uploadPatentWebDTO);
                 }
 
             }
@@ -122,4 +123,12 @@ public class ImportFromWebToEsService implements PatentImportImp {
         ApplicationContext applicationContext = taskThread.getApplicationContext();
         this.patentStarApiService = applicationContext.getBean(PatentStarApiService.class);
     }
+
+    public void savePatentToEs(UploadPatentWebDTO uploadPatentWebDTO) {
+        if (uploadPatentWebDTO.getTotalCounter().equals(uploadPatentWebDTO.getCounter())) {
+            uploadPatentWebDTO.getPatent();
+        }
+
+
+    }
 }

+ 11 - 5
src/main/java/cn/cslg/pas/service/query/FormatQueryService.java

@@ -153,8 +153,8 @@ public class FormatQueryService {
             strCode = operate1.getCode();
             optionName = operate1.getCode();
         }
-
         GetSqlObject getSqlObjectLocal = null;
+
         if (Left != null) {
             if ((operate1.gettype() == enuType.Logic || operate1.gettype() == enuType.Assignment) && (Left instanceof operateNode)) {
                 strCode = "(" + this.ToString2((operateNode) Left, getSqlObject, tableName) + ") " + strCode + " ";
@@ -168,7 +168,7 @@ public class FormatQueryService {
                     //判断 参数类型
                     String json = CommonService.readJsonFile(tableName + ".json");
                     List<SqlObject> sqlObjects = JSON.parseArray(json, SqlObject.class);
-                    SqlObject sqlObject = sqlObjects.stream().filter(item -> item.getValue().equals(field)&&item.getIfSearch().equals(true)).findFirst().orElse(null);
+                    SqlObject sqlObject = sqlObjects.stream().filter(item -> item.getValue().equals(field) && item.getIfSearch().equals(true)).findFirst().orElse(null);
                     if (sqlObject != null) {
                         getSqlObjectLocal = getSqlFactory.getClass(sqlObject.getSqlClass());
                         sqlObject.setOption(optionName);
@@ -177,8 +177,8 @@ public class FormatQueryService {
                     }
                 }
             }
-
         }
+
         if (Right != null) {
             String rightValue = "";
             if ((operate1.gettype() == enuType.Logic || operate1.gettype() == enuType.Assignment) && (Right instanceof operateNode)) {
@@ -267,7 +267,13 @@ public class FormatQueryService {
         return sqls;
     }
 
-
+    /**
+     * 网站检索式格式化
+     * @param node
+     * @param getSqlObject
+     * @param tableName
+     * @return
+     */
     public String webQueryToString(operateNode node, GetSqlObject getSqlObject, String tableName) {
         operate operate1 = node.getoperate();
         treeNode Left = node.getLeft();
@@ -343,7 +349,7 @@ public class FormatQueryService {
                     strCode = strCode + getSqlObject.getSql(rightValue);
                 } else if (!(Left instanceof operateNode)) {
                     rightValue = Right.ToString();
-                    strCode +=rightValue;
+                    strCode += rightValue;
                 }
             }
         }

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

@@ -81,8 +81,8 @@ public class CommonServiceTests {
     @Test
     void testImportTask() throws IOException, InterruptedException {
         schedulingTaskService.startTask();
-        Thread.sleep(10000);
-        schedulingTaskService.pauseTask(1);
+//        Thread.sleep(10000);
+//        schedulingTaskService.pauseTask(1);
          Thread.sleep(1000000);
     }
     @Test