SavePatentToEsThread.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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<Patent> patents = 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 || patents.size() > 0) && importTaskAMVO.getState().equals(1)) {
  36. try {
  37. //判断任务队列是否有任务,若没有则线程等待唤醒
  38. if (patents.size() == 0) {
  39. taskLock.lock();
  40. taskCondition.await();
  41. }
  42. } catch (Exception e) {
  43. }
  44. Patent patent = patents.remove(0);
  45. try {
  46. //根据专利号查询专利
  47. EsService esService = applicationContext.getBean(EsService.class);
  48. PatentWithIdVO patentWithIdVO = esService.getIdByPatentNo(patent.getPatentNo());
  49. String patentId = null;
  50. // 若查出专利则更新
  51. if (patentWithIdVO != null) {
  52. patentId = patentWithIdVO.getId();
  53. Patent orgPatent = patentWithIdVO.getPatent();
  54. BeanUtils.copyProperties(patent, orgPatent, FormatUtil.getNullPropertyNames(patent));
  55. esService.updatePatent(orgPatent, patentWithIdVO.getId());
  56. } else {
  57. PatentJoin patentJoin = new PatentJoin();
  58. patentJoin.setName("patent");
  59. patent.setPatentJoin(patentJoin);
  60. patentId = esService.addPatent(patent);
  61. }
  62. //判断是否和专题库或报告关联
  63. ImportTaskAMVO importTaskAMVO = taskThread.getImportTaskAMVO();
  64. //和专题库或报告进行关联
  65. if (importTaskAMVO.getProjectId() != null) {
  66. //根据projectId和专利id查询
  67. if (patentId != null) {
  68. Boolean ifInproject = esService.searchPatent(patentId, importTaskAMVO.getProjectId());
  69. if (!ifInproject) {
  70. Patent patentChild = new Patent();
  71. PatentJoin patentJoin = new PatentJoin();
  72. patentJoin.setParent(patentId);
  73. patentJoin.setName("project");
  74. patentChild.setPatentJoin(patentJoin);
  75. patentChild.setProjectId(importTaskAMVO.getProjectId());
  76. esService.addChildPatent(patentChild, patentId);
  77. }
  78. }
  79. //和任务关联
  80. if (importTaskAMVO.getId() != null) {
  81. if (patentId != null) {
  82. Boolean ifInTask = esService.ifInTask(patentId, importTaskAMVO.getProjectId(), importTaskAMVO.getId());
  83. if (!ifInTask) {
  84. Patent patentChild = new Patent();
  85. PatentJoin patentJoin = new PatentJoin();
  86. patentJoin.setParent(patentId);
  87. patentJoin.setName("import_task");
  88. patentChild.setPatentJoin(patentJoin);
  89. ESImportTask esImportTask = new ESImportTask();
  90. esImportTask.setProjectId(importTaskAMVO.getProjectId());
  91. esImportTask.setTaskId(importTaskAMVO.getId());
  92. patentChild.setImportTask(esImportTask);
  93. esService.addChildPatent(patentChild, patentId);
  94. }
  95. }
  96. }
  97. }
  98. //导入完成,通知前台
  99. taskThread.updateProcess(false,1,"");
  100. } catch (Exception e) {
  101. taskThread.updateProcess(true,1,"");
  102. }
  103. }
  104. taskThread.awakeTaskThread();
  105. System.out.println("done");
  106. }
  107. public SavePatentToEsThread(TaskThread taskThread, ApplicationContext applicationContext) {
  108. this.taskThread = taskThread;
  109. this.applicationContext = applicationContext;
  110. this.importTaskAMVO = taskThread.getImportTaskAMVO();
  111. }
  112. public void awakeTask(Patent patent) {
  113. patents.add(patent);
  114. if (taskLock.tryLock()) {
  115. taskCondition.signalAll();
  116. taskLock.unlock();
  117. }
  118. }
  119. public void setIfProductAll(Boolean ifProductAll) {
  120. this.ifProductAll = ifProductAll;
  121. }
  122. }