GetRightAndFullTextFromWebThread.java 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. package cn.cslg.pas.service.importPatent;
  2. import cn.cslg.pas.common.core.IgnoreDTDEntityResolver;
  3. import cn.cslg.pas.common.dto.UploadPatentWebDTO;
  4. import cn.cslg.pas.common.model.importTaskModel.PatentRight;
  5. import cn.cslg.pas.common.vo.ChinaPatentZhuLu;
  6. import cn.cslg.pas.common.vo.ImportTaskAMVO;
  7. import cn.cslg.pas.common.vo.StarPatentVO;
  8. import cn.cslg.pas.domain.es.Patent;
  9. import cn.cslg.pas.domain.es.Text;
  10. import cn.cslg.pas.service.business.es.EsService;
  11. import cn.cslg.pas.service.common.PatentStarApiService;
  12. import com.alibaba.fastjson.JSON;
  13. import org.dom4j.Document;
  14. import org.dom4j.Element;
  15. import org.dom4j.XPath;
  16. import org.dom4j.io.SAXReader;
  17. import org.springframework.beans.factory.annotation.Configurable;
  18. import org.springframework.context.ApplicationContext;
  19. import java.io.IOException;
  20. import java.io.Reader;
  21. import java.io.StringReader;
  22. import java.util.ArrayList;
  23. import java.util.Arrays;
  24. import java.util.List;
  25. import java.util.concurrent.locks.Condition;
  26. import java.util.concurrent.locks.Lock;
  27. import java.util.concurrent.locks.ReentrantLock;
  28. @Configurable
  29. public class GetRightAndFullTextFromWebThread extends Thread {
  30. private ImportTaskAMVO importTaskAMVO;
  31. private ApplicationContext applicationContext;
  32. private ImportFromWebToEsService importFromWebToEsService;
  33. private PatentStarApiService patentStarApiService;
  34. private List<UploadPatentWebDTO> uploadPatentWebDTOs =new ArrayList<>();
  35. private final Lock taskLock = new ReentrantLock();
  36. private final Condition taskCondition = taskLock.newCondition();
  37. private Boolean ifProductAll = false;
  38. @Override
  39. public void run() {
  40. try {
  41. while ((!ifProductAll || uploadPatentWebDTOs.size() > 0) && importTaskAMVO.getState().equals(1)) {
  42. if (uploadPatentWebDTOs.size() == 0) {
  43. taskLock.lock();
  44. taskCondition.await();
  45. }
  46. UploadPatentWebDTO uploadPatentWebDTO = uploadPatentWebDTOs.remove(0);
  47. Patent patent = uploadPatentWebDTO.getPatent();
  48. StarPatentVO starPatentVO =uploadPatentWebDTO.getStarPatentVO();
  49. if ((starPatentVO.getPublicNo() != null && starPatentVO.getPublicNo().contains("CN")) || (starPatentVO.getPublicNo() == null && starPatentVO.getPublicNo().contains("CN"))) {
  50. patentStarApiService =applicationContext.getBean(PatentStarApiService.class);
  51. String cnFullXmlStr = patentStarApiService.getCnFullXmlApi(starPatentVO.getRowApplicationNo());
  52. this.loadClaim(uploadPatentWebDTO,cnFullXmlStr);
  53. this.loadFullText(uploadPatentWebDTO,cnFullXmlStr);
  54. }
  55. //加入es保存队列
  56. importFromWebToEsService.savePatentToEs(uploadPatentWebDTO);
  57. }
  58. } catch (Exception e) {
  59. e.printStackTrace();
  60. }
  61. }
  62. public GetRightAndFullTextFromWebThread(TaskThread taskThread, ImportFromWebToEsService importFromWebToEsService) {
  63. this.importTaskAMVO = taskThread.getImportTaskAMVO();
  64. this.importFromWebToEsService = importFromWebToEsService;
  65. this.applicationContext = taskThread.getApplicationContext();
  66. }
  67. public void awakeTask(UploadPatentWebDTO uploadPatentWebDTO) {
  68. uploadPatentWebDTOs.add(uploadPatentWebDTO);
  69. if (taskLock.tryLock()) {
  70. taskCondition.signalAll();
  71. taskLock.unlock();
  72. }
  73. }
  74. //装载权利要求
  75. private void loadClaim(UploadPatentWebDTO uploadPatentWebDTO,String cnFullXmlStr) {
  76. Patent patent = uploadPatentWebDTO.getPatent();
  77. try {
  78. if(cnFullXmlStr!=null&&cnFullXmlStr!="") {
  79. SAXReader reader = new SAXReader();
  80. reader.setEntityResolver(new IgnoreDTDEntityResolver());
  81. Reader stringReader = new StringReader(cnFullXmlStr);
  82. Document document = reader.read(stringReader);
  83. XPath xpath = document.createXPath("//claim-text");
  84. List<Element> element = (List<Element>) xpath.selectNodes(document);
  85. if (element.size() == 0) {
  86. xpath = document.createXPath("//business:ClaimText");
  87. element = (List<Element>) xpath.selectNodes(document);
  88. }
  89. List<String> reClaims = new ArrayList<>();
  90. element.forEach(item -> {
  91. String claim = item.getText();
  92. claim = claim.replaceAll("\r\n|\r|\n| ", "");
  93. reClaims.add(claim);
  94. });
  95. String reClaim = "";
  96. if (reClaims.size() != 0) {
  97. reClaim = cn.cslg.pas.common.utils.StringUtils.join(reClaims, "\r\n");
  98. }
  99. //装载权利要求原文
  100. Text text = new Text();
  101. text.setLanguage(patent.getAppCountry());
  102. text.setTextContent(reClaim);
  103. text.setIfOrigin(true);
  104. patent.setClaim(Arrays.asList(text));
  105. }
  106. } catch (Exception e) {
  107. e.printStackTrace();
  108. }
  109. }
  110. //装载说明书文档
  111. private void loadFullText(UploadPatentWebDTO uploadPatentWebDTO,String cnFullXmlStr) {
  112. Patent patent = uploadPatentWebDTO.getPatent();
  113. try {
  114. //若没有取到全文文本,即取不到说明书文本,则将当前申请号或专利号和备注信息记录到问题记录表
  115. if (cnFullXmlStr.equals("")) {
  116. return ;
  117. }
  118. SAXReader reader = new SAXReader();
  119. reader.setEntityResolver(new IgnoreDTDEntityResolver());
  120. Reader stringReader = new StringReader(cnFullXmlStr);
  121. Document document = reader.read(stringReader);
  122. XPath xpath = document.createXPath("//description//p");
  123. List<Element> elements = (List<Element>) xpath.selectNodes(document);
  124. if (elements.size() == 0) {
  125. xpath = document.createXPath("//business:Description//base:Paragraphs");
  126. elements = (List<Element>) xpath.selectNodes(document);
  127. }
  128. List<String> fullTexts = new ArrayList<>();
  129. Integer count=1;
  130. for (Element item:elements){
  131. String fullText = item.getText().replaceAll("<br/>", "");
  132. if (!fullText.trim().equals("技术领域")
  133. && !fullText.trim().equals("发明内容")
  134. && !fullText.trim().equals("附图说明")
  135. && !fullText.trim().equals("具体实施方式")
  136. &&!fullText.trim().equals("背景技术")
  137. &&!fullText.trim().equals("实用新型内容"))
  138. {String formattedNum = String.format("%04d", count);
  139. fullText ="["+formattedNum+"]"+fullText;
  140. count++;
  141. }
  142. fullText = fullText.replaceAll("\r\n|\r|\n| ", "");
  143. fullTexts.add(fullText);
  144. }
  145. String fullText = "";
  146. if (fullTexts.size() != 0) {
  147. fullText = cn.cslg.pas.common.utils.StringUtils.join(fullTexts, "\r\n");
  148. }
  149. Text text =new Text();
  150. text.setIfOrigin(true);
  151. text.setTextContent(fullText);
  152. text.setLanguage(patent.getAppCountry());
  153. patent.setPublicFullText(Arrays.asList(text));
  154. } catch (Exception e) {
  155. e.printStackTrace();
  156. }
  157. }
  158. public void setIfProductAll(Boolean ifProductAll) {
  159. this.ifProductAll = ifProductAll;
  160. }
  161. }