EsLegalEventService.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. package cn.cslg.pas.service.business.es;
  2. import cn.cslg.pas.common.vo.ChinaLeagalStatus;
  3. import cn.cslg.pas.common.vo.StarPatentVO;
  4. import cn.cslg.pas.domain.es.*;
  5. import cn.cslg.pas.exception.ExceptionEnum;
  6. import cn.cslg.pas.exception.XiaoShiException;
  7. import cn.cslg.pas.service.common.PatentStarApiService;
  8. import cn.cslg.pas.service.importPatent.WebVOTransformService;
  9. import co.elastic.clients.elasticsearch.ElasticsearchClient;
  10. import co.elastic.clients.elasticsearch._types.InlineScript;
  11. import co.elastic.clients.elasticsearch._types.Refresh;
  12. import co.elastic.clients.elasticsearch._types.Script;
  13. import co.elastic.clients.elasticsearch._types.WaitForActiveShards;
  14. import co.elastic.clients.elasticsearch._types.query_dsl.Query;
  15. import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
  16. import co.elastic.clients.elasticsearch.core.*;
  17. import co.elastic.clients.elasticsearch.core.search.Hit;
  18. import com.alibaba.fastjson.JSON;
  19. import lombok.RequiredArgsConstructor;
  20. import org.springframework.context.annotation.Lazy;
  21. import org.springframework.stereotype.Service;
  22. import org.springframework.util.CollectionUtils;
  23. import java.io.IOException;
  24. import java.util.*;
  25. import java.util.stream.Collectors;
  26. @Service
  27. @RequiredArgsConstructor(onConstructor_ = {@Lazy})
  28. public class EsLegalEventService {
  29. private final ElasticsearchClient client;
  30. private final PatentStarApiService patentStarApiService;
  31. private final WebVOTransformService webVOTransformService;
  32. //根据专利号查询同族专利号
  33. public List<LegalEvent> getEsQutePatentByNos(String patentNo) throws Exception {
  34. SearchRequest.Builder builder = new SearchRequest.Builder();
  35. //设置查询索引
  36. builder.index("legal_event");
  37. Query q1 = QueryBuilders.term(t -> t.field("app_no").value(patentNo));
  38. //公开号
  39. Query q2 = QueryBuilders.term(t -> t.field("public_no").value(patentNo));
  40. //授权号
  41. Query q3 = QueryBuilders.term(t -> t.field("grant_no").value(patentNo));
  42. Query query = QueryBuilders.bool(i -> i.should(q1, q2, q3));
  43. builder.query(query);
  44. SearchResponse<LegalEvent> response = client.search(builder.build(), LegalEvent.class);
  45. List<Hit<LegalEvent>> hits = response.hits().hits();
  46. List<LegalEvent> legalEvents = new ArrayList<>();
  47. if (hits.size() <= 0) {
  48. return legalEvents;
  49. }
  50. hits.forEach(item -> {
  51. legalEvents.add(item.source());
  52. });
  53. return legalEvents;
  54. }
  55. public List<String> getStrLegalEvent(String patentNo) {
  56. List<String> stringList = new ArrayList<>();
  57. try {
  58. List<LegalEvent> legalEvents = this.getEsQutePatentByNos(patentNo);
  59. legalEvents = legalEvents.stream().sorted(Comparator.comparing(LegalEvent::getEventDate)).collect(Collectors.toList());
  60. legalEvents.forEach(item -> {
  61. stringList.add(item.getName());
  62. });
  63. } catch (Exception e) {
  64. throw new XiaoShiException("获得事务错误");
  65. }
  66. return stringList;
  67. }
  68. /**
  69. * 添加法律事务
  70. *
  71. * @param
  72. * @return
  73. * @throws Exception
  74. */
  75. public String addLegalEvent(LegalEvent legalEvent) throws Exception {
  76. IndexResponse indexResponse = client.index(i -> i
  77. .index("legal_event")
  78. .document(legalEvent).refresh(Refresh.True).waitForActiveShards(WaitForActiveShards.of(t -> t.count(1)))
  79. );
  80. return indexResponse.id();
  81. }
  82. public String addEsLegalEvent(Patent patent, String ANO) {
  83. //根据专利号查询
  84. if (patent == null) {
  85. return null;
  86. }
  87. String cnLegalApiStr = patentStarApiService.getCnLegalApi(ANO);
  88. if (cnLegalApiStr != null && !cnLegalApiStr.equals("")) {
  89. try {
  90. this.deleteByPatentNo(patent.getPatentNo());
  91. } catch (Exception e) {
  92. }
  93. List<LegalEvent> legalEvents = new ArrayList<>();
  94. //根据专利号查询是否有引用信息
  95. try {
  96. this.deleteByPatentNo(patent.getPatentNo());
  97. } catch (Exception e) {
  98. e.printStackTrace();
  99. throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR,"删除事务错误");
  100. }
  101. List<ChinaLeagalStatus> chinaLeagalStatuses = JSON.parseArray(cnLegalApiStr, ChinaLeagalStatus.class);
  102. chinaLeagalStatuses.forEach(item -> {
  103. LegalEvent legalEvent1 = new LegalEvent();
  104. legalEvent1.setEventDate(item.getLegalDate());
  105. legalEvent1.setCode(item.getLegalCode());
  106. legalEvent1.setAppNo(patent.getAppNo());
  107. legalEvent1.setGrantNo(patent.getGrantNo());
  108. legalEvent1.setPublicNo(patent.getPublicNo());
  109. legalEvent1.setDescription(item.getLegalStatusInfo());
  110. legalEvent1.setName(item.getLegalStatus());
  111. legalEvents.add(legalEvent1);
  112. try {
  113. String reId = this.addLegalEvent(legalEvent1);
  114. } catch (Exception e) {
  115. throw new XiaoShiException(e.getMessage());
  116. }
  117. });
  118. webVOTransformService.transLegalEvent(patent, legalEvents);
  119. }
  120. return "";
  121. }
  122. public Integer deleteByPatentNo(String patentNo) throws IOException {
  123. SearchRequest.Builder builder = new SearchRequest.Builder();
  124. //设置查询索引
  125. builder.index("legal_event");
  126. Query q1 = QueryBuilders.term(t -> t.field("app_no").value(patentNo));
  127. //公开号
  128. Query q2 = QueryBuilders.term(t -> t.field("public_no").value(patentNo));
  129. //授权号
  130. Query q3 = QueryBuilders.term(t -> t.field("grant_no").value(patentNo));
  131. Query query = QueryBuilders.bool(i -> i.should(q1, q2, q3));
  132. DeleteByQueryRequest request = DeleteByQueryRequest.of(i -> i.index("legal_event").refresh(true).query(query));
  133. try {
  134. client.deleteByQuery(request);
  135. return 1;
  136. } catch (IOException e) {
  137. return -1;
  138. }
  139. }
  140. }