SavePatentToEsThread.java 4.1 KB

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