SavePatentToEsThread.java 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package cn.cslg.pas.service.importPatent;
  2. import cn.cslg.pas.common.dto.UploadPatentWebDTO;
  3. import cn.cslg.pas.common.utils.FormatUtil;
  4. import cn.cslg.pas.common.vo.ImportTaskAMVO;
  5. import cn.cslg.pas.common.vo.PatentWithIdVO;
  6. import cn.cslg.pas.domain.business.ImportTask;
  7. import cn.cslg.pas.domain.es.ESImportTask;
  8. import cn.cslg.pas.domain.es.Patent;
  9. import cn.cslg.pas.domain.es.PatentJoin;
  10. import cn.cslg.pas.service.business.ImportTaskService;
  11. import cn.cslg.pas.service.business.es.EsService;
  12. import cn.cslg.pas.service.common.FileManagerService;
  13. import cn.cslg.pas.service.common.MessageService;
  14. import cn.cslg.pas.service.common.PatentStarApiService;
  15. import org.springframework.beans.BeanUtils;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.context.ApplicationContext;
  18. import java.io.IOException;
  19. import java.util.ArrayList;
  20. import java.util.Arrays;
  21. import java.util.List;
  22. import java.util.concurrent.locks.Condition;
  23. import java.util.concurrent.locks.Lock;
  24. import java.util.concurrent.locks.ReentrantLock;
  25. public class SavePatentToEsThread extends Thread {
  26. private ApplicationContext applicationContext;
  27. private List<UploadPatentWebDTO> uploadPatentWebDTOS = new ArrayList<>();
  28. private final Lock taskLock = new ReentrantLock();
  29. private final Condition taskCondition = taskLock.newCondition();
  30. private TaskThread taskThread;
  31. private ImportTaskAMVO importTaskAMVO;
  32. private Boolean ifProductAll = false;
  33. @Override
  34. public void run() {
  35. while ((!ifProductAll || uploadPatentWebDTOS.size() > 0) && importTaskAMVO.getState().equals(1)) {
  36. try {
  37. //判断任务队列是否有任务,若没有则线程等待唤醒
  38. if (uploadPatentWebDTOS.size() == 0) {
  39. taskLock.lock();
  40. taskCondition.await();
  41. }
  42. } catch (Exception e) {
  43. }
  44. UploadPatentWebDTO uploadPatentWebDTO = uploadPatentWebDTOS.remove(0);
  45. try {
  46. Patent patent = uploadPatentWebDTO.getPatent();
  47. //根据专利号查询专利
  48. EsService esService = applicationContext.getBean(EsService.class);
  49. PatentWithIdVO patentWithIdVO = esService.getIdByPatentNo(patent.getPatentNo());
  50. String patentId = null;
  51. // 若查出专利则更新
  52. if (patentWithIdVO != null) {
  53. patentId = patentWithIdVO.getId();
  54. Patent orgPatent = patentWithIdVO.getPatent();
  55. BeanUtils.copyProperties(patent, orgPatent, FormatUtil.getNullPropertyNames(patent));
  56. esService.updateDocument(orgPatent, patentWithIdVO.getId());
  57. } else {
  58. PatentJoin patentJoin = new PatentJoin();
  59. patentJoin.setName("patent");
  60. patent.setPatentJoin(patentJoin);
  61. patentId = esService.addPatent(patent);
  62. }
  63. //判断是否和专题库或报告关联
  64. ImportTaskAMVO importTaskAMVO = taskThread.getImportTaskAMVO();
  65. //和专题库或报告进行关联
  66. if (importTaskAMVO.getProjectId() != null) {
  67. //根据projectId和专利id查询
  68. if (patentId != null) {
  69. Boolean ifInproject = esService.searchPatent(patentId, importTaskAMVO.getProjectId());
  70. if (!ifInproject) {
  71. Patent patentChild = new Patent();
  72. PatentJoin patentJoin = new PatentJoin();
  73. patentJoin.setParent(patentId);
  74. patentJoin.setName("project");
  75. patentChild.setPatentJoin(patentJoin);
  76. patentChild.setProjectId(importTaskAMVO.getProjectId());
  77. esService.addChildPatent(patentChild, patentId);
  78. }
  79. }
  80. //和任务关联
  81. if(importTaskAMVO.getId()!=null){
  82. if (patentId != null) {
  83. Boolean ifInTask = esService.ifInTask(patentId, importTaskAMVO.getProjectId(),importTaskAMVO.getId());
  84. if (!ifInTask) {
  85. Patent patentChild = new Patent();
  86. PatentJoin patentJoin = new PatentJoin();
  87. patentJoin.setParent(patentId);
  88. patentJoin.setName("import_task");
  89. patentChild.setPatentJoin(patentJoin);
  90. ESImportTask esImportTask =new ESImportTask();
  91. esImportTask.setProjectId(importTaskAMVO.getProjectId());
  92. esImportTask.setTaskId(importTaskAMVO.getId());
  93. patentChild.setImportTask(esImportTask);
  94. esService.addChildPatent(patentChild, patentId);
  95. }
  96. }
  97. }
  98. }
  99. //导入完成,通知前台
  100. MessageService messageService = applicationContext.getBean(MessageService.class);
  101. messageService.sendWebsocketMessage(importTaskAMVO, 1);
  102. importTaskAMVO.setMessageDoneNum(importTaskAMVO.getMessageDoneNum() + 1);
  103. taskThread.ifPatentDone(uploadPatentWebDTO);
  104. } catch (Exception e) {
  105. importTaskAMVO.setMessageDoneNum(importTaskAMVO.getMessageDoneNum() + 1);
  106. taskThread.ifPatentDone(uploadPatentWebDTO);
  107. }
  108. }
  109. taskThread.awakeTaskThread();
  110. System.out.println("done");
  111. }
  112. public SavePatentToEsThread(TaskThread taskThread, ApplicationContext applicationContext) {
  113. this.taskThread = taskThread;
  114. this.applicationContext = applicationContext;
  115. this.importTaskAMVO = taskThread.getImportTaskAMVO();
  116. }
  117. public void awakeTask(UploadPatentWebDTO uploadPatentWebDTO) {
  118. uploadPatentWebDTOS.add(uploadPatentWebDTO);
  119. if (taskLock.tryLock()) {
  120. taskCondition.signalAll();
  121. taskLock.unlock();
  122. }
  123. }
  124. public void setIfProductAll(Boolean ifProductAll) {
  125. this.ifProductAll = ifProductAll;
  126. }
  127. }