GetRightAndFullTextFromWebThread.java 8.4 KB

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