123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- 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.common.vo.StarPatentVO;
- import cn.cslg.pas.domain.es.Patent;
- import cn.cslg.pas.domain.es.Text;
- import cn.cslg.pas.service.business.es.EsService;
- 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.IOException;
- import java.io.Reader;
- import java.io.StringReader;
- 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 GetRightAndFullTextFromWebThread extends Thread {
- private ImportTaskAMVO importTaskAMVO;
- private ApplicationContext applicationContext;
- private ImportFromWebToEsService importFromWebToEsService;
- private PatentStarApiService patentStarApiService;
- private List<UploadPatentWebDTO> uploadPatentWebDTOs =new ArrayList<>();
- private final Lock taskLock = new ReentrantLock();
- private final Condition taskCondition = taskLock.newCondition();
- private Boolean ifProductAll = false;
- @Override
- public void run() {
- try {
- while ((!ifProductAll || uploadPatentWebDTOs.size() > 0) && importTaskAMVO.getState().equals(1)) {
- if (uploadPatentWebDTOs.size() == 0) {
- taskLock.lock();
- taskCondition.await();
- }
- UploadPatentWebDTO uploadPatentWebDTO = uploadPatentWebDTOs.remove(0);
- Patent patent = uploadPatentWebDTO.getPatent();
- StarPatentVO starPatentVO =uploadPatentWebDTO.getStarPatentVO();
- if ((starPatentVO.getPublicNo() != null && starPatentVO.getPublicNo().contains("CN")) || (starPatentVO.getPublicNo() == null && starPatentVO.getPublicNo().contains("CN"))) {
- patentStarApiService =applicationContext.getBean(PatentStarApiService.class);
- String cnFullXmlStr = patentStarApiService.getCnFullXmlApi(starPatentVO.getRowApplicationNo());
- this.loadClaim(uploadPatentWebDTO,cnFullXmlStr);
- this.loadFullText(uploadPatentWebDTO,cnFullXmlStr);
- }
- //加入es保存队列
- importFromWebToEsService.savePatentToEs(uploadPatentWebDTO);
- }
- } 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();
- }
- }
- //装载权利要求
- private void loadClaim(UploadPatentWebDTO uploadPatentWebDTO,String cnFullXmlStr) {
- Patent patent = uploadPatentWebDTO.getPatent();
- try {
- if(cnFullXmlStr!=null&&cnFullXmlStr!="") {
- 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> reClaims = new ArrayList<>();
- element.forEach(item -> {
- String claim = item.getText();
- claim = claim.replaceAll("\r\n|\r|\n| ", "");
- reClaims.add(claim);
- });
- String reClaim = "";
- if (reClaims.size() != 0) {
- reClaim = cn.cslg.pas.common.utils.StringUtils.join(reClaims, "\r\n");
- }
- //装载权利要求原文
- Text text = new Text();
- text.setLanguage(patent.getAppCountry());
- text.setTextContent(reClaim);
- text.setIfOrigin(true);
- patent.setClaim(Arrays.asList(text));
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- //装载说明书文档
- private void loadFullText(UploadPatentWebDTO uploadPatentWebDTO,String cnFullXmlStr) {
- Patent patent = uploadPatentWebDTO.getPatent();
- try {
- //若没有取到全文文本,即取不到说明书文本,则将当前申请号或专利号和备注信息记录到问题记录表
- if (cnFullXmlStr.equals("")) {
- return ;
- }
- SAXReader reader = new SAXReader();
- reader.setEntityResolver(new IgnoreDTDEntityResolver());
- Reader stringReader = new StringReader(cnFullXmlStr);
- Document document = reader.read(stringReader);
- XPath xpath = document.createXPath("//description//p");
- List<Element> elements = (List<Element>) xpath.selectNodes(document);
- if (elements.size() == 0) {
- xpath = document.createXPath("//business:Description//base:Paragraphs");
- elements = (List<Element>) xpath.selectNodes(document);
- }
- List<String> fullTexts = new ArrayList<>();
- Integer count=1;
- for (Element item:elements){
- String fullText = item.getText().replaceAll("<br/>", "");
- if (!fullText.trim().equals("技术领域")
- && !fullText.trim().equals("发明内容")
- && !fullText.trim().equals("附图说明")
- && !fullText.trim().equals("具体实施方式")
- &&!fullText.trim().equals("背景技术")
- &&!fullText.trim().equals("实用新型内容"))
- {String formattedNum = String.format("%04d", count);
- fullText ="["+formattedNum+"]"+fullText;
- count++;
- }
- fullText = fullText.replaceAll("\r\n|\r|\n| ", "");
- fullTexts.add(fullText);
- }
- String fullText = "";
- if (fullTexts.size() != 0) {
- fullText = cn.cslg.pas.common.utils.StringUtils.join(fullTexts, "\r\n");
- }
- Text text =new Text();
- text.setIfOrigin(true);
- text.setTextContent(fullText);
- text.setLanguage(patent.getAppCountry());
- patent.setPublicFullText(Arrays.asList(text));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public void setIfProductAll(Boolean ifProductAll) {
- this.ifProductAll = ifProductAll;
- }
- }
|