MergePersonService.java 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515
  1. package cn.cslg.pas.service.business;
  2. import cn.cslg.pas.common.dto.GetAllPersonDTO;
  3. import cn.cslg.pas.common.dto.MergePersonQueryDTO;
  4. import cn.cslg.pas.common.dto.PatentColumnDTO;
  5. import cn.cslg.pas.common.dto.patentCount.GetEsAllPersonDTO;
  6. import cn.cslg.pas.common.model.cronModel.PersonnelVO;
  7. import cn.cslg.pas.common.model.cronModel.Records;
  8. import cn.cslg.pas.common.utils.CacheUtils;
  9. import cn.cslg.pas.common.utils.LoginUtils;
  10. import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
  11. import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
  12. import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
  13. import cn.cslg.pas.common.vo.business.*;
  14. import cn.cslg.pas.domain.BaseEntity;
  15. import cn.cslg.pas.domain.business.FollowUp;
  16. import cn.cslg.pas.domain.business.MergePerson;
  17. import cn.cslg.pas.domain.es.Patent;
  18. import cn.cslg.pas.domain.es.PatentMergePerson;
  19. import cn.cslg.pas.domain.es.PersonAddress;
  20. import cn.cslg.pas.exception.UnLoginException;
  21. import cn.cslg.pas.mapper.MergePersonMapper;
  22. import cn.cslg.pas.service.business.es.EsPatentService;
  23. import cn.cslg.pas.service.business.es.EsService;
  24. import cn.cslg.pas.service.query.FormatQueryService;
  25. import cn.hutool.core.util.ObjectUtil;
  26. import cn.hutool.core.util.PageUtil;
  27. import co.elastic.clients.elasticsearch.ElasticsearchClient;
  28. import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
  29. import co.elastic.clients.elasticsearch._types.aggregations.AggregationBuilders;
  30. import co.elastic.clients.elasticsearch._types.aggregations.NestedAggregation;
  31. import co.elastic.clients.elasticsearch._types.aggregations.TermsAggregation;
  32. import co.elastic.clients.elasticsearch._types.query_dsl.Query;
  33. import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
  34. import co.elastic.clients.elasticsearch.core.SearchRequest;
  35. import co.elastic.clients.elasticsearch.core.SearchResponse;
  36. import co.elastic.clients.elasticsearch.core.search.Hit;
  37. import com.alibaba.fastjson.JSONArray;
  38. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  39. import com.baomidou.mybatisplus.core.metadata.IPage;
  40. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  41. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  42. import com.github.pagehelper.PageHelper;
  43. import com.google.gson.JsonArray;
  44. import lombok.extern.slf4j.Slf4j;
  45. import org.apache.commons.lang3.StringUtils;
  46. import org.springframework.beans.BeanUtils;
  47. import org.springframework.beans.factory.annotation.Autowired;
  48. import org.springframework.stereotype.Service;
  49. import org.springframework.transaction.annotation.Propagation;
  50. import org.springframework.transaction.annotation.Transactional;
  51. import org.springframework.util.CollectionUtils;
  52. import java.io.IOException;
  53. import java.util.*;
  54. import java.util.stream.Collectors;
  55. /**
  56. * @Author xiexiang
  57. * @Date 2024/01/02
  58. */
  59. @Slf4j
  60. @Service
  61. public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePerson> {
  62. @Autowired
  63. private ElasticsearchClient client;
  64. @Autowired
  65. private CacheUtils cacheUtils;
  66. @Autowired
  67. private LoginUtils loginUtils;
  68. @Autowired
  69. private MergePersonMapper mergePersonMapper;
  70. @Autowired
  71. private FormatQueryService formatQueryService;
  72. @Autowired
  73. private EsPatentService esPatentService;
  74. @Autowired
  75. private EsService esService;
  76. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  77. public Integer mergePerson(MergePersonVO vo) throws Exception {
  78. Integer type = vo.getType();
  79. List<String> mergedNames = vo.getMergedName();
  80. //获取登陆人信息 用于设置创建人
  81. PersonnelVO personnelVO = new PersonnelVO();
  82. try {
  83. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  84. } catch (Exception e) {
  85. throw new UnLoginException("未登录");
  86. }
  87. //判断是否名称重复
  88. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  89. .eq(MergePerson::getProjectId, vo.getProjectId())
  90. .eq(MergePerson::getName, vo.getName());
  91. List<MergePerson> list = mergePersonMapper.selectList(wrapper);
  92. if (list.size() > 1) {
  93. throw new Exception("合并名称不可重复");
  94. }
  95. MergePerson person = new MergePerson();
  96. BeanUtils.copyProperties(vo, person);
  97. person.setMergedName(JSONArray.toJSONString(mergedNames));
  98. person.setCreateId(personnelVO.getId());
  99. person.setCreateTime(new Date());
  100. person.insert();
  101. SearchRequest.Builder builder = new SearchRequest.Builder();
  102. //设置查询索引
  103. builder.index("patent");
  104. List<Query> queries = new ArrayList<>();
  105. if (type == 0) {
  106. for (String mergedName : mergedNames) {
  107. Query q1 = QueryBuilders.term(i -> i.field("applicant.name.key").value(mergedName));
  108. Query query1 = QueryBuilders.nested(i -> i.path("applicant").query(q1));
  109. Query q2 = QueryBuilders.term(i -> i.field("right_holder.name.key").value(mergedName));
  110. Query query2 = QueryBuilders.nested(i -> i.path("right_holder").query(q2));
  111. queries.add(query1);
  112. queries.add(query2);
  113. }
  114. } else {
  115. for (String mergedName : mergedNames) {
  116. Query q = QueryBuilders.term(i -> i.field("inventor.name.key").value(mergedName));
  117. Query query = QueryBuilders.nested(i -> i.path("inventor").query(q));
  118. queries.add(query);
  119. }
  120. }
  121. Query query = QueryBuilders.bool(i -> i.should(queries));
  122. builder.query(query);
  123. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  124. List<Hit<Patent>> hits = response.hits().hits();
  125. Map<String, Patent> map = new HashMap<>();
  126. for (Hit<Patent> hit : hits) {
  127. String id = hit.id();
  128. map.put(id, hit.source());
  129. }
  130. if (!CollectionUtils.isEmpty(map)) {
  131. List<PatentMergePerson> mergePersonList = new ArrayList<>();
  132. PatentMergePerson mergePerson = new PatentMergePerson();
  133. mergePerson.setName(vo.getName());
  134. mergePerson.setProjectId(vo.getProjectId().toString());
  135. mergePerson.setType("1");
  136. mergePerson.setOrder(1);
  137. mergePersonList.add(mergePerson);
  138. for (String id : map.keySet()) {
  139. Patent patent = map.get(id);
  140. List<PatentMergePerson> mergeApplicants = patent.getMergeApplicant();
  141. mergePersonList.addAll(mergeApplicants);
  142. patent.setMergeApplicant(mergePersonList);
  143. patent.setMergeRightHolder(mergePersonList);
  144. esService.updateMergePerson(patent, id);
  145. }
  146. }
  147. return person.getId();
  148. }
  149. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  150. public Integer updateMergePerson(MergePersonVO vo) throws Exception {
  151. //获取登陆人信息 用于设置创建人
  152. PersonnelVO personnelVO = new PersonnelVO();
  153. Integer type = vo.getType();
  154. try {
  155. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  156. } catch (Exception e) {
  157. throw new UnLoginException("未登录");
  158. }
  159. //判断是否名称重复
  160. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  161. .eq(MergePerson::getProjectId, vo.getProjectId())
  162. .eq(MergePerson::getName, vo.getName());
  163. List<MergePerson> list = mergePersonMapper.selectList(wrapper);
  164. if (list.size() > 1) {
  165. throw new Exception("合并名称不可重复");
  166. }
  167. //获取老专利
  168. MergePerson person = this.getById(vo.getId());
  169. String mergedName = person.getMergedName();
  170. String name = person.getName();
  171. if (ObjectUtil.isNotEmpty(person)) {
  172. BeanUtils.copyProperties(vo, person);
  173. person.setMergedName(JSONArray.toJSONString(vo.getMergedName()));
  174. person.setCreateId(personnelVO.getId());
  175. person.setCreateTime(new Date());
  176. person.updateById();
  177. List<String> mergedNames = JSONArray.parseArray(mergedName, String.class);
  178. SearchRequest.Builder builder = new SearchRequest.Builder();
  179. //设置查询索引
  180. builder.index("patent");
  181. List<Query> queries = new ArrayList<>();
  182. if (type == 0) {
  183. for (String merged : mergedNames) {
  184. Query q1 = QueryBuilders.term(i -> i.field("applicant.name.key").value(merged));
  185. Query query1 = QueryBuilders.nested(i -> i.path("applicant").query(q1));
  186. Query q2 = QueryBuilders.term(i -> i.field("right_holder.name.key").value(merged));
  187. Query query2 = QueryBuilders.nested(i -> i.path("right_holder").query(q2));
  188. queries.add(query1);
  189. queries.add(query2);
  190. }
  191. } else {
  192. for (String merged : mergedNames) {
  193. Query q = QueryBuilders.term(i -> i.field("inventor.name.key").value(merged));
  194. Query query = QueryBuilders.nested(i -> i.path("inventor").query(q));
  195. queries.add(query);
  196. }
  197. }
  198. Query query = QueryBuilders.bool(i -> i.should(queries));
  199. builder.query(query);
  200. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  201. List<Hit<Patent>> hits = response.hits().hits();
  202. Map<String, Patent> map = new HashMap<>();
  203. for (Hit<Patent> hit : hits) {
  204. String id = hit.id();
  205. map.put(id, hit.source());
  206. }
  207. if (!CollectionUtils.isEmpty(map)) {
  208. for (String id : map.keySet()) {
  209. Patent patent = map.get(id);
  210. List<PatentMergePerson> mergeApplicants = patent.getMergeApplicant();
  211. if (!name.equals(vo.getName())) {
  212. for (PatentMergePerson mergeApplicant : mergeApplicants) {
  213. if (mergeApplicant.getName().equals(name)) {
  214. mergeApplicant.setName(vo.getName());
  215. }
  216. }
  217. }
  218. patent.setMergeApplicant(mergeApplicants);
  219. patent.setMergeRightHolder(mergeApplicants);
  220. esService.updateMergePerson(patent, id);
  221. }
  222. }
  223. } else {
  224. person = new MergePerson();
  225. }
  226. return person.getId();
  227. }
  228. public Records selectMergePersonList(MergePersonQueryVO vo) {
  229. List<MergePersonQueryDTO> list = new ArrayList<>();
  230. IPage<MergePerson> page = new Page<>(vo.getPageNum(), vo.getPageSize());
  231. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  232. .eq(MergePerson::getProjectId, vo.getProjectId())
  233. .eq(MergePerson::getType, vo.getType())
  234. .eq(StringUtils.isNotEmpty(vo.getCountry()), MergePerson::getCountry, vo.getCountry())
  235. .like(StringUtils.isNotEmpty(vo.getName()), MergePerson::getName, vo.getName());
  236. IPage<MergePerson> record = mergePersonMapper.selectPage(page, wrapper);
  237. for (MergePerson person : record.getRecords()) {
  238. MergePersonQueryDTO dto = new MergePersonQueryDTO();
  239. dto.setId(person.getId());
  240. dto.setProjectId(person.getProjectId());
  241. dto.setType(person.getType());
  242. dto.setName(person.getName());
  243. dto.setAddress(person.getAddress());
  244. dto.setCountry(person.getCountry());
  245. dto.setProvince(person.getProvince());
  246. dto.setRemark(person.getRemark());
  247. dto.setAbbreviation(person.getAbbreviation());
  248. dto.setCreateTime(person.getCreateTime());
  249. List<String> names = JSONArray.parseArray(person.getMergedName(), String.class);
  250. dto.setMergedName(names);
  251. list.add(dto);
  252. }
  253. Records records = new Records();
  254. records.setCurrent(record.getCurrent());
  255. records.setSize(record.getSize());
  256. records.setData(list);
  257. records.setTotal(record.getTotal());
  258. return records;
  259. }
  260. public MergePersonQueryDTO selectMergePersonDetail(MergePersonIdVO vo) {
  261. MergePersonQueryDTO dto = new MergePersonQueryDTO();
  262. MergePerson person = mergePersonMapper.selectById(vo.getId());
  263. if (ObjectUtil.isNotEmpty(person)) {
  264. BeanUtils.copyProperties(person, dto);
  265. List<String> names = JSONArray.parseArray(person.getMergedName(), String.class);
  266. dto.setMergedName(names);
  267. }
  268. return dto;
  269. }
  270. public Records getMergePerson(GetAllPersonVO vo) throws Exception {
  271. Integer projectId = vo.getProjectId();
  272. Integer taskId = vo.getTaskId();
  273. Integer pageNum = vo.getPageNum();
  274. Integer pageSize = vo.getPageSize();
  275. Integer type = vo.getType();
  276. String searchCondition = "";
  277. if (type == 0 && StringUtils.isNotEmpty(vo.getName())) {
  278. searchCondition = searchCondition + "PA = " + vo.getName();
  279. } else if (type == 2 && StringUtils.isNotEmpty(vo.getName())) {
  280. searchCondition = searchCondition + "IN = " + vo.getName();
  281. }
  282. if (taskId != null) {
  283. if (searchCondition != null && !"".equals(searchCondition.trim())) {
  284. searchCondition = "taskId = " + taskId + " AND " + searchCondition;
  285. } else {
  286. searchCondition = "taskId = " + taskId;
  287. }
  288. } else {
  289. if (projectId != null) {
  290. if (searchCondition != null && !"".equals(searchCondition.trim())) {
  291. searchCondition = "projectId = " + projectId + " AND " + searchCondition;
  292. } else {
  293. searchCondition = "projectId = " + projectId;
  294. }
  295. }
  296. }
  297. SearchRequest.Builder builder = new SearchRequest.Builder();
  298. //设置查询索引
  299. builder.index("patent");
  300. //1. 解析检索条件
  301. treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
  302. //格式化检索式
  303. //3. 从es中检索数据
  304. Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
  305. builder.query(q);
  306. //分页
  307. if (pageNum > 0 && pageSize > 0) {
  308. builder.from((pageNum - 1) * pageSize).size(pageSize);
  309. }
  310. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  311. List<Hit<Patent>> hits = response.hits().hits();
  312. long total = response.hits().total().value();
  313. List<GetEsAllPersonDTO> personDTOS = new ArrayList<>();
  314. for (Hit<Patent> hit : hits) {
  315. Patent esMess = hit.source();
  316. PersonAddress applicantAddr = null;
  317. GetEsAllPersonDTO personDTO = new GetEsAllPersonDTO();
  318. if (ObjectUtil.isNotEmpty(esMess.getApplicantAddr())) {
  319. applicantAddr = esMess.getApplicantAddr();
  320. personDTO.setAddress(applicantAddr.getAddress());
  321. personDTO.setCountry(applicantAddr.getCountry());
  322. }
  323. personDTO.setApplicant(esPatentService.loadName(esMess.getApplicant()));
  324. personDTO.setRightHolder(esPatentService.loadName(esMess.getRightHolder()));
  325. personDTO.setInventor(esPatentService.loadName(esMess.getInventor()));
  326. personDTOS.add(personDTO);
  327. }
  328. List<String> applicants = new ArrayList<>();
  329. List<String> inventors = new ArrayList<>();
  330. for (GetEsAllPersonDTO personDTO : personDTOS) {
  331. applicants.addAll(personDTO.getApplicant());
  332. inventors.addAll(personDTO.getInventor());
  333. }
  334. List<String> applicantList = applicants.stream().distinct().collect(Collectors.toList());
  335. List<String> inventorList = inventors.stream().distinct().collect(Collectors.toList());
  336. IPage<MergePerson> page = new Page<>(vo.getPageNum(), vo.getPageSize());
  337. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  338. .eq(StringUtils.isNotEmpty(vo.getProjectId().toString()), MergePerson::getProjectId, vo.getProjectId());
  339. IPage<MergePerson> record = mergePersonMapper.selectPage(page, wrapper);
  340. List<String> applicantMergeList = new ArrayList<>();
  341. List<String> inventorMergeList = new ArrayList<>();
  342. for (MergePerson person : record.getRecords()) {
  343. if (person.getType() == 0) {
  344. applicantMergeList = JSONArray.parseArray(person.getMergedName(), String.class);
  345. } else if (person.getType() == 2) {
  346. inventorMergeList = JSONArray.parseArray(person.getMergedName(), String.class);
  347. }
  348. }
  349. applicantList.removeAll(applicantMergeList);
  350. inventorList.removeAll(inventorMergeList);
  351. List<GetAllPersonDTO> applicantDTOS = new ArrayList<>();
  352. List<GetAllPersonDTO> inventorDTOS = new ArrayList<>();
  353. for (String applicant : applicantList) {
  354. GetAllPersonDTO dto = new GetAllPersonDTO();
  355. dto.setName(applicant);
  356. dto.setType(0);
  357. applicantDTOS.add(dto);
  358. }
  359. for (String inventor : inventorList) {
  360. GetAllPersonDTO dto = new GetAllPersonDTO();
  361. dto.setName(inventor);
  362. dto.setType(2);
  363. inventorDTOS.add(dto);
  364. }
  365. Records records = new Records();
  366. records.setCurrent(vo.getPageNum().longValue());
  367. records.setSize(vo.getPageSize().longValue());
  368. if (vo.getType() == 0) {
  369. int size = applicantDTOS.size();
  370. records.setData(applicantDTOS.stream().limit(vo.getPageSize()).collect(Collectors.toList()));
  371. if (total >= size) {
  372. records.setTotal((long) size);
  373. } else {
  374. records.setTotal(total);
  375. }
  376. } else if (vo.getType() == 2) {
  377. int size = inventorDTOS.size();
  378. records.setData(inventorDTOS.stream().limit(vo.getPageSize()).collect(Collectors.toList()));
  379. if (total >= size) {
  380. records.setTotal((long) size);
  381. } else {
  382. records.setTotal(total);
  383. }
  384. }
  385. return records;
  386. }
  387. public Integer delMergedName(MergedNameVO vo) throws IOException {
  388. Integer type = vo.getType();
  389. String delName = vo.getDelName();
  390. String name = vo.getName();
  391. Integer projectId = vo.getProjectId();
  392. MergePerson mergePerson = mergePersonMapper.selectOne(new LambdaQueryWrapper<MergePerson>()
  393. .eq(MergePerson::getMergedName, name)
  394. .eq(MergePerson::getProjectId, projectId));
  395. if (ObjectUtil.isNotEmpty(mergePerson)) {
  396. Integer personId = mergePerson.getId();
  397. String mergedName = mergePerson.getMergedName();
  398. List<String> list = JSONArray.parseArray(mergedName, String.class);
  399. list.remove(delName);
  400. MergePerson person = mergePersonMapper.selectById(personId);
  401. person.setMergedName(JSONArray.toJSONString(list));
  402. person.updateById();
  403. SearchRequest.Builder builder = new SearchRequest.Builder();
  404. //设置查询索引
  405. builder.index("patent");
  406. List<Query> queries = new ArrayList<>();
  407. List<Query> mustQueries = new ArrayList<>();
  408. if (type == 0) {
  409. Query q1 = QueryBuilders.term(i -> i.field("applicant.name.key").value(delName));
  410. Query query1 = QueryBuilders.nested(i -> i.path("applicant").query(q1));
  411. Query q2 = QueryBuilders.term(i -> i.field("right_holder.name.key").value(delName));
  412. Query query2 = QueryBuilders.nested(i -> i.path("right_holder").query(q2));
  413. queries.add(query1);
  414. queries.add(query2);
  415. Query q3 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(name));
  416. Query query3 = QueryBuilders.nested(i -> i.path("merge_applicant").query(q3));
  417. Query q4 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(name));
  418. Query query4 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(q4));
  419. mustQueries.add(query3);
  420. mustQueries.add(query4);
  421. } else {
  422. Query q = QueryBuilders.term(i -> i.field("inventor.name.key").value(delName));
  423. Query query = QueryBuilders.nested(i -> i.path("inventor").query(q));
  424. queries.add(query);
  425. Query q1 = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(name));
  426. Query query1 = QueryBuilders.nested(i -> i.path("merge_inventor").query(q1));
  427. queries.add(query1);
  428. }
  429. Query query = QueryBuilders.bool(i -> i.must(mustQueries).should(queries));
  430. builder.query(query);
  431. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  432. List<Hit<Patent>> hits = response.hits().hits();
  433. Map<String, Patent> map = new HashMap<>();
  434. for (Hit<Patent> hit : hits) {
  435. String id = hit.id();
  436. map.put(id, hit.source());
  437. }
  438. if (!CollectionUtils.isEmpty(map)) {
  439. for (String id : map.keySet()) {
  440. Patent patent = map.get(id);
  441. esService.delMergePerson(patent, id, type, mergePerson.getName());
  442. }
  443. }
  444. }
  445. return mergePerson.getId();
  446. }
  447. public Integer delMergePerson(MergePersonIdVO vo) throws IOException {
  448. Integer type = vo.getType();
  449. MergePerson mergePerson = mergePersonMapper.selectById(vo.getId());
  450. String name = mergePerson.getName();
  451. if (ObjectUtil.isNotEmpty(mergePerson)) {
  452. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  453. .eq(BaseEntity::getId, vo.getId());
  454. this.remove(wrapper);
  455. SearchRequest.Builder builder = new SearchRequest.Builder();
  456. //设置查询索引
  457. builder.index("patent");
  458. List<Query> queries = new ArrayList<>();
  459. if (type == 0) {
  460. Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(name));
  461. Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(q1));
  462. Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(name));
  463. Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(q2));
  464. queries.add(query1);
  465. queries.add(query2);
  466. } else {
  467. Query q = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(name));
  468. Query query3 = QueryBuilders.nested(i -> i.path("merge_inventor").query(q));
  469. queries.add(query3);
  470. }
  471. Query query = QueryBuilders.bool(i -> i.must(queries));
  472. builder.query(query);
  473. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  474. List<Hit<Patent>> hits = response.hits().hits();
  475. Map<String, Patent> map = new HashMap<>();
  476. for (Hit<Patent> hit : hits) {
  477. String id = hit.id();
  478. map.put(id, hit.source());
  479. }
  480. if (!CollectionUtils.isEmpty(map)) {
  481. for (String id : map.keySet()) {
  482. Patent patent = map.get(id);
  483. esService.delMergePerson(patent, id, type, mergePerson.getName());
  484. }
  485. }
  486. }
  487. return vo.getId();
  488. }
  489. }