MergePersonService.java 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746
  1. package cn.cslg.pas.service.business;
  2. import cn.cslg.pas.common.dto.GetAllCountryDTO;
  3. import cn.cslg.pas.common.dto.GetAllPersonDTO;
  4. import cn.cslg.pas.common.dto.MergePersonQueryDTO;
  5. import cn.cslg.pas.common.dto.PatentColumnDTO;
  6. import cn.cslg.pas.common.dto.patentCount.GetEsAllPersonDTO;
  7. import cn.cslg.pas.common.model.cronModel.PersonnelVO;
  8. import cn.cslg.pas.common.model.cronModel.Records;
  9. import cn.cslg.pas.common.utils.CacheUtils;
  10. import cn.cslg.pas.common.utils.LoginUtils;
  11. import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
  12. import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
  13. import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
  14. import cn.cslg.pas.common.vo.business.*;
  15. import cn.cslg.pas.domain.BaseEntity;
  16. import cn.cslg.pas.domain.business.FollowUp;
  17. import cn.cslg.pas.domain.business.MergePerson;
  18. import cn.cslg.pas.domain.business.SystemDict;
  19. import cn.cslg.pas.domain.es.Patent;
  20. import cn.cslg.pas.domain.es.PatentMergePerson;
  21. import cn.cslg.pas.domain.es.PatentPerson;
  22. import cn.cslg.pas.domain.es.PersonAddress;
  23. import cn.cslg.pas.exception.UnLoginException;
  24. import cn.cslg.pas.mapper.MergePersonMapper;
  25. import cn.cslg.pas.mapper.SystemDictMapper;
  26. import cn.cslg.pas.service.business.es.EsPatentService;
  27. import cn.cslg.pas.service.business.es.EsService;
  28. import cn.cslg.pas.service.query.FormatQueryService;
  29. import cn.hutool.core.util.ObjectUtil;
  30. import cn.hutool.core.util.PageUtil;
  31. import co.elastic.clients.elasticsearch.ElasticsearchClient;
  32. import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
  33. import co.elastic.clients.elasticsearch._types.aggregations.AggregationBuilders;
  34. import co.elastic.clients.elasticsearch._types.aggregations.NestedAggregation;
  35. import co.elastic.clients.elasticsearch._types.aggregations.TermsAggregation;
  36. import co.elastic.clients.elasticsearch._types.query_dsl.Query;
  37. import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
  38. import co.elastic.clients.elasticsearch.core.SearchRequest;
  39. import co.elastic.clients.elasticsearch.core.SearchResponse;
  40. import co.elastic.clients.elasticsearch.core.search.Hit;
  41. import com.alibaba.fastjson.JSONArray;
  42. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  43. import com.baomidou.mybatisplus.core.metadata.IPage;
  44. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  45. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  46. import com.github.pagehelper.PageHelper;
  47. import com.google.gson.JsonArray;
  48. import lombok.extern.slf4j.Slf4j;
  49. import org.apache.commons.lang3.StringUtils;
  50. import org.springframework.beans.BeanUtils;
  51. import org.springframework.beans.factory.annotation.Autowired;
  52. import org.springframework.stereotype.Service;
  53. import org.springframework.transaction.annotation.Propagation;
  54. import org.springframework.transaction.annotation.Transactional;
  55. import org.springframework.util.CollectionUtils;
  56. import java.io.IOException;
  57. import java.util.*;
  58. import java.util.stream.Collectors;
  59. /**
  60. * @Author xiexiang
  61. * @Date 2024/01/02
  62. */
  63. @Slf4j
  64. @Service
  65. public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePerson> {
  66. @Autowired
  67. private ElasticsearchClient client;
  68. @Autowired
  69. private CacheUtils cacheUtils;
  70. @Autowired
  71. private LoginUtils loginUtils;
  72. @Autowired
  73. private MergePersonMapper mergePersonMapper;
  74. @Autowired
  75. private FormatQueryService formatQueryService;
  76. @Autowired
  77. private EsPatentService esPatentService;
  78. @Autowired
  79. private EsService esService;
  80. @Autowired
  81. private SystemDictMapper systemDictMapper;
  82. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  83. public Integer mergePerson(MergePersonVO vo) throws Exception {
  84. Integer type = vo.getType();
  85. List<String> mergedNames = vo.getMergedName();
  86. //获取登陆人信息 用于设置创建人
  87. PersonnelVO personnelVO = new PersonnelVO();
  88. try {
  89. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  90. } catch (Exception e) {
  91. throw new UnLoginException("未登录");
  92. }
  93. //判断是否名称重复
  94. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  95. .eq(MergePerson::getProjectId, vo.getProjectId())
  96. .eq(MergePerson::getName, vo.getName());
  97. List<MergePerson> list = mergePersonMapper.selectList(wrapper);
  98. if (list.size() > 1) {
  99. throw new Exception("合并名称不可重复");
  100. }
  101. MergePerson person = new MergePerson();
  102. BeanUtils.copyProperties(vo, person);
  103. person.setMergedName(JSONArray.toJSONString(mergedNames));
  104. person.setCreateId(personnelVO.getId());
  105. person.setCreateTime(new Date());
  106. person.insert();
  107. SearchRequest.Builder builder = new SearchRequest.Builder();
  108. //设置查询索引
  109. builder.index("patent");
  110. List<Query> queries = new ArrayList<>();
  111. if (type == 0) {
  112. for (String mergedName : mergedNames) {
  113. Query q1 = QueryBuilders.term(i -> i.field("applicant.name.key").value(mergedName));
  114. Query query1 = QueryBuilders.nested(i -> i.path("applicant").query(q1));
  115. Query q2 = QueryBuilders.term(i -> i.field("right_holder.name.key").value(mergedName));
  116. Query query2 = QueryBuilders.nested(i -> i.path("right_holder").query(q2));
  117. queries.add(query1);
  118. queries.add(query2);
  119. }
  120. } else {
  121. for (String mergedName : mergedNames) {
  122. Query q = QueryBuilders.term(i -> i.field("inventor.name.key").value(mergedName));
  123. Query query = QueryBuilders.nested(i -> i.path("inventor").query(q));
  124. queries.add(query);
  125. }
  126. }
  127. Query query = QueryBuilders.bool(i -> i.should(queries));
  128. builder.query(query);
  129. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  130. List<Hit<Patent>> hits = response.hits().hits();
  131. Map<String, Patent> map = new HashMap<>();
  132. for (Hit<Patent> hit : hits) {
  133. String id = hit.id();
  134. map.put(id, hit.source());
  135. }
  136. if (!CollectionUtils.isEmpty(map)) {
  137. List<PatentMergePerson> mergePersonList = new ArrayList<>();
  138. PatentMergePerson mergePerson = new PatentMergePerson();
  139. mergePerson.setName(vo.getName());
  140. mergePerson.setProjectId(vo.getProjectId().toString());
  141. mergePerson.setType("1");
  142. mergePerson.setOrder(1);
  143. mergePersonList.add(mergePerson);
  144. for (String id : map.keySet()) {
  145. Patent patent = map.get(id);
  146. if (type == 0) {
  147. //申请人
  148. List<PatentMergePerson> mergeApplicants = new ArrayList<>();
  149. if (!CollectionUtils.isEmpty(patent.getMergeApplicant())) {
  150. mergeApplicants = patent.getMergeApplicant();
  151. }
  152. mergeApplicants.addAll(mergePersonList);
  153. //权利人
  154. List<PatentMergePerson> mergeRightHolder = new ArrayList<>();
  155. if (!CollectionUtils.isEmpty(patent.getMergeRightHolder())) {
  156. mergeRightHolder = patent.getMergeRightHolder();
  157. }
  158. mergeRightHolder.addAll(mergePersonList);
  159. patent.setMergeApplicant(mergeApplicants);
  160. patent.setMergeRightHolder(mergeRightHolder);
  161. } else if (type == 2) {
  162. List<PatentMergePerson> mergeInventor = new ArrayList<>();
  163. if (!CollectionUtils.isEmpty(patent.getMergeInventor())) {
  164. mergeInventor = patent.getMergeInventor();
  165. }
  166. mergeInventor.addAll(mergePersonList);
  167. patent.setMergeInventor(mergeInventor);
  168. }
  169. esService.updateMergePerson(patent, id);
  170. }
  171. }
  172. return person.getId();
  173. }
  174. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  175. public Integer mergePersonAgain(MergePersonAgainVO vo) throws Exception {
  176. List<String> mergedNames = vo.getNeedMergedName();
  177. List<String> mergeName = vo.getMergeName();
  178. List<String> nameList = new ArrayList<>();
  179. if (!CollectionUtils.isEmpty(mergedNames)) {
  180. for (String mergedName : mergedNames) {
  181. MergePerson person = mergePersonMapper.selectOne(new LambdaQueryWrapper<MergePerson>()
  182. .eq(MergePerson::getProjectId, vo.getProjectId())
  183. .eq(MergePerson::getName, mergedName));
  184. String name = person.getMergedName();
  185. List<String> getNames = JSONArray.parseArray(name, String.class);
  186. nameList.addAll(getNames);
  187. MergePersonIdVO personIdVO = new MergePersonIdVO();
  188. personIdVO.setId(person.getId());
  189. personIdVO.setType(person.getType());
  190. this.delMergePerson(personIdVO);
  191. }
  192. }
  193. if (!CollectionUtils.isEmpty(mergeName)) {
  194. nameList.addAll(mergeName);
  195. }
  196. MergePersonVO personVO = new MergePersonVO();
  197. personVO.setProjectId(vo.getProjectId());
  198. personVO.setType(vo.getType());
  199. personVO.setName(vo.getName());
  200. personVO.setAbbreviation(vo.getAbbreviation());
  201. personVO.setCountry(vo.getCountry());
  202. personVO.setProvince(vo.getProvince());
  203. personVO.setAddress(vo.getAddress());
  204. personVO.setRemark(vo.getRemark());
  205. personVO.setMergedName(nameList);
  206. return this.mergePerson(personVO);
  207. }
  208. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  209. public Integer updateMergePerson(MergePersonVO vo) throws Exception {
  210. //获取登陆人信息 用于设置创建人
  211. PersonnelVO personnelVO = new PersonnelVO();
  212. Integer type = vo.getType();
  213. try {
  214. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  215. } catch (Exception e) {
  216. throw new UnLoginException("未登录");
  217. }
  218. //判断是否名称重复
  219. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  220. .eq(MergePerson::getProjectId, vo.getProjectId())
  221. .eq(MergePerson::getName, vo.getName());
  222. List<MergePerson> list = mergePersonMapper.selectList(wrapper);
  223. if (list.size() > 1) {
  224. throw new Exception("合并名称不可重复");
  225. }
  226. //获取老专利
  227. MergePerson person = this.getById(vo.getId());
  228. String mergedName = person.getMergedName();
  229. String name = person.getName();
  230. if (ObjectUtil.isNotEmpty(person)) {
  231. BeanUtils.copyProperties(vo, person);
  232. // person.setMergedName(JSONArray.toJSONString(vo.getMergedName()));
  233. person.setCreateId(personnelVO.getId());
  234. person.setCreateTime(new Date());
  235. person.updateById();
  236. if (!name.equals(vo.getName())) {
  237. List<String> mergedNames = JSONArray.parseArray(mergedName, String.class);
  238. SearchRequest.Builder builder = new SearchRequest.Builder();
  239. //设置查询索引
  240. builder.index("patent");
  241. List<Query> queries = new ArrayList<>();
  242. if (type == 0) {
  243. for (String merged : mergedNames) {
  244. Query q1 = QueryBuilders.term(i -> i.field("applicant.name.key").value(merged));
  245. Query query1 = QueryBuilders.nested(i -> i.path("applicant").query(q1));
  246. Query q2 = QueryBuilders.term(i -> i.field("right_holder.name.key").value(merged));
  247. Query query2 = QueryBuilders.nested(i -> i.path("right_holder").query(q2));
  248. queries.add(query1);
  249. queries.add(query2);
  250. }
  251. } else {
  252. for (String merged : mergedNames) {
  253. Query q = QueryBuilders.term(i -> i.field("inventor.name.key").value(merged));
  254. Query query = QueryBuilders.nested(i -> i.path("inventor").query(q));
  255. queries.add(query);
  256. }
  257. }
  258. Query query = QueryBuilders.bool(i -> i.should(queries));
  259. builder.query(query);
  260. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  261. List<Hit<Patent>> hits = response.hits().hits();
  262. Map<String, Patent> map = new HashMap<>();
  263. for (Hit<Patent> hit : hits) {
  264. String id = hit.id();
  265. map.put(id, hit.source());
  266. }
  267. if (!CollectionUtils.isEmpty(map)) {
  268. for (String id : map.keySet()) {
  269. Patent patent = map.get(id);
  270. if (type == 0) {
  271. //申请人
  272. List<PatentMergePerson> mergeApplicants = new ArrayList<>();
  273. if (!CollectionUtils.isEmpty(patent.getMergeApplicant())) {
  274. mergeApplicants = patent.getMergeApplicant();
  275. for (PatentMergePerson mergeApplicant : mergeApplicants) {
  276. if (mergeApplicant.getName().equals(name)) {
  277. mergeApplicant.setName(vo.getName());
  278. }
  279. }
  280. patent.setMergeApplicant(mergeApplicants);
  281. }
  282. //权利人
  283. List<PatentMergePerson> mergeRightHolders = new ArrayList<>();
  284. if (!CollectionUtils.isEmpty(patent.getMergeRightHolder())) {
  285. mergeRightHolders = patent.getMergeRightHolder();
  286. for (PatentMergePerson mergeRightHolder : mergeRightHolders) {
  287. if (mergeRightHolder.getName().equals(name)) {
  288. mergeRightHolder.setName(vo.getName());
  289. }
  290. }
  291. patent.setMergeRightHolder(mergeRightHolders);
  292. }
  293. } else if (type == 2) {
  294. List<PatentMergePerson> mergeInventors = new ArrayList<>();
  295. if (!CollectionUtils.isEmpty(patent.getMergeInventor())) {
  296. mergeInventors = patent.getMergeInventor();
  297. for (PatentMergePerson mergeInventor : mergeInventors) {
  298. if (mergeInventor.getName().equals(name)) {
  299. mergeInventor.setName(vo.getName());
  300. }
  301. }
  302. patent.setMergeInventor(mergeInventors);
  303. }
  304. }
  305. esService.updateMergePerson(patent, id);
  306. }
  307. }
  308. }
  309. } else {
  310. person = new MergePerson();
  311. }
  312. return person.getId();
  313. }
  314. public Records selectMergePersonList(MergePersonQueryVO vo) {
  315. List<MergePersonQueryDTO> list = new ArrayList<>();
  316. IPage<MergePerson> page = new Page<>(vo.getPageNum(), vo.getPageSize());
  317. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  318. .eq(MergePerson::getProjectId, vo.getProjectId())
  319. .eq(MergePerson::getType, vo.getType())
  320. .eq(StringUtils.isNotEmpty(vo.getCountry()), MergePerson::getCountry, vo.getCountry())
  321. .like(StringUtils.isNotEmpty(vo.getName()), MergePerson::getName, vo.getName());
  322. IPage<MergePerson> record = mergePersonMapper.selectPage(page, wrapper);
  323. for (MergePerson person : record.getRecords()) {
  324. MergePersonQueryDTO dto = new MergePersonQueryDTO();
  325. dto.setId(person.getId());
  326. dto.setProjectId(person.getProjectId());
  327. dto.setType(person.getType());
  328. dto.setName(person.getName());
  329. dto.setAddress(person.getAddress());
  330. dto.setCountry(person.getCountry());
  331. dto.setProvince(person.getProvince());
  332. dto.setRemark(person.getRemark());
  333. dto.setAbbreviation(person.getAbbreviation());
  334. dto.setCreateTime(person.getCreateTime());
  335. List<String> names = JSONArray.parseArray(person.getMergedName(), String.class);
  336. dto.setMergedName(names);
  337. list.add(dto);
  338. }
  339. Records records = new Records();
  340. records.setCurrent(record.getCurrent());
  341. records.setSize(record.getSize());
  342. records.setData(list);
  343. records.setTotal(record.getTotal());
  344. return records;
  345. }
  346. public MergePersonQueryDTO selectMergePersonDetail(MergePersonIdVO vo) {
  347. MergePersonQueryDTO dto = new MergePersonQueryDTO();
  348. MergePerson person = mergePersonMapper.selectById(vo.getId());
  349. if (ObjectUtil.isNotEmpty(person)) {
  350. BeanUtils.copyProperties(person, dto);
  351. List<String> names = JSONArray.parseArray(person.getMergedName(), String.class);
  352. dto.setMergedName(names);
  353. }
  354. return dto;
  355. }
  356. public Records getMergePerson(GetAllPersonVO vo) throws Exception {
  357. Integer projectId = vo.getProjectId();
  358. Integer taskId = vo.getTaskId();
  359. Long pageNum = vo.getPageNum();
  360. Long pageSize = vo.getPageSize();
  361. Integer type = vo.getType();
  362. String searchCondition = "";
  363. if (type == 0 && StringUtils.isNotEmpty(vo.getName())) {
  364. searchCondition = searchCondition + "PA = " + vo.getName() + " " + "OR" + " " + "PE =" + vo.getName();
  365. } else if (type == 2 && StringUtils.isNotEmpty(vo.getName())) {
  366. searchCondition = searchCondition + "IN = " + vo.getName();
  367. }
  368. if (taskId != null) {
  369. if (searchCondition != null && !"".equals(searchCondition.trim())) {
  370. searchCondition = "taskId = " + taskId + " AND " + searchCondition;
  371. } else {
  372. searchCondition = "taskId = " + taskId;
  373. }
  374. } else {
  375. if (projectId != null) {
  376. if (searchCondition != null && !"".equals(searchCondition.trim())) {
  377. searchCondition = "projectId = " + projectId + " AND " + searchCondition;
  378. } else {
  379. searchCondition = "projectId = " + projectId;
  380. }
  381. }
  382. }
  383. SearchRequest.Builder builder = new SearchRequest.Builder();
  384. //设置查询索引
  385. builder.index("patent");
  386. //1. 解析检索条件
  387. treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
  388. //格式化检索式
  389. //3. 从es中检索数据
  390. Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
  391. builder.query(q);
  392. //分页
  393. // if (pageNum > 0 && pageSize > 0) {
  394. // builder.from((pageNum - 1) * pageSize).size(pageSize);
  395. // }
  396. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  397. List<Hit<Patent>> hits = response.hits().hits();
  398. List<GetEsAllPersonDTO> personDTOS = new ArrayList<>();
  399. for (Hit<Patent> hit : hits) {
  400. Patent esMess = hit.source();
  401. PersonAddress applicantAddr = null;
  402. GetEsAllPersonDTO personDTO = new GetEsAllPersonDTO();
  403. personDTO.setApplicantAddr(esMess.getApplicantAddr());
  404. personDTO.setRightHolderAddr(esMess.getRightHolderAddr());
  405. personDTO.setApplicant(esPatentService.loadName(esMess.getApplicant()));
  406. personDTO.setRightHolder(esPatentService.loadName(esMess.getRightHolder()));
  407. personDTO.setInventor(esPatentService.loadName(esMess.getInventor()));
  408. personDTOS.add(personDTO);
  409. }
  410. //es申请人/权利人
  411. List<GetAllPersonDTO> personDTOList = new ArrayList<>();
  412. //申请人
  413. List<GetAllPersonDTO> applicantDTOS = new ArrayList<>();
  414. if (!CollectionUtils.isEmpty(personDTOS)) {
  415. for (GetEsAllPersonDTO personDTO : personDTOS) {
  416. PersonAddress applicantAddr = personDTO.getApplicantAddr();
  417. if (ObjectUtil.isNotEmpty(applicantAddr)) {
  418. List<String> applicant = personDTO.getApplicant();
  419. for (String s : applicant) {
  420. GetAllPersonDTO dto = new GetAllPersonDTO();
  421. dto.setName(s);
  422. dto.setType(0);
  423. if (StringUtils.isNotEmpty(applicantAddr.getCountry())) {
  424. dto.setCountry(applicantAddr.getCountry());
  425. }
  426. if (StringUtils.isNotEmpty(applicantAddr.getAddress())) {
  427. dto.setAddress(applicantAddr.getAddress());
  428. }
  429. applicantDTOS.add(dto);
  430. }
  431. } else {
  432. List<String> applicant = personDTO.getApplicant();
  433. for (String s : applicant) {
  434. GetAllPersonDTO dto = new GetAllPersonDTO();
  435. dto.setName(s);
  436. dto.setType(0);
  437. applicantDTOS.add(dto);
  438. }
  439. }
  440. }
  441. }
  442. //权利人
  443. List<GetAllPersonDTO> rightDTOS = new ArrayList<>();
  444. if (!CollectionUtils.isEmpty(personDTOS)) {
  445. for (GetEsAllPersonDTO personDTO : personDTOS) {
  446. PersonAddress rightHolderAddr = personDTO.getRightHolderAddr();
  447. if (ObjectUtil.isNotEmpty(rightHolderAddr)) {
  448. List<String> rightHolder = personDTO.getRightHolder();
  449. for (String s : rightHolder) {
  450. GetAllPersonDTO dto = new GetAllPersonDTO();
  451. dto.setName(s);
  452. dto.setType(0);
  453. if (StringUtils.isNotEmpty(rightHolderAddr.getCountry())) {
  454. dto.setCountry(rightHolderAddr.getCountry());
  455. }
  456. if (StringUtils.isNotEmpty(rightHolderAddr.getAddress())) {
  457. dto.setAddress(rightHolderAddr.getAddress());
  458. }
  459. rightDTOS.add(dto);
  460. }
  461. } else {
  462. List<String> rightHolder = personDTO.getRightHolder();
  463. for (String s : rightHolder) {
  464. GetAllPersonDTO dto = new GetAllPersonDTO();
  465. dto.setName(s);
  466. dto.setType(0);
  467. rightDTOS.add(dto);
  468. }
  469. }
  470. }
  471. }
  472. //申请人和权利人相同的去除
  473. if (!CollectionUtils.isEmpty(applicantDTOS) && !CollectionUtils.isEmpty(rightDTOS)) {
  474. for (GetAllPersonDTO applicantDTO : applicantDTOS) {
  475. rightDTOS.removeIf(rightDTO -> applicantDTO.getName().equals(rightDTO.getName()));
  476. }
  477. }
  478. //装载在同一个集合
  479. personDTOList.addAll(applicantDTOS);
  480. personDTOList.addAll(rightDTOS);
  481. //发明人
  482. List<GetAllPersonDTO> inventorDTOS = new ArrayList<>();
  483. if (!CollectionUtils.isEmpty(personDTOS)) {
  484. for (GetEsAllPersonDTO personDTO : personDTOS) {
  485. List<String> inventor = personDTO.getInventor();
  486. for (String s : inventor) {
  487. GetAllPersonDTO dto = new GetAllPersonDTO();
  488. dto.setName(s);
  489. dto.setType(2);
  490. inventorDTOS.add(dto);
  491. }
  492. }
  493. }
  494. //查询合并信息表中数据
  495. // IPage<MergePerson> page = new Page<>(vo.getPageNum(), vo.getPageSize());
  496. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  497. .eq(MergePerson::getProjectId, vo.getProjectId())
  498. .eq(StringUtils.isNotEmpty(vo.getName()), MergePerson::getName, vo.getName())
  499. .orderByDesc(MergePerson::getCreateTime);
  500. // IPage<MergePerson> record = mergePersonMapper.selectPage(page, wrapper);
  501. List<MergePerson> mergePersonList = mergePersonMapper.selectList(wrapper);
  502. //合并
  503. List<GetAllPersonDTO> mergeList = new ArrayList<>();
  504. //申请人/权利人
  505. List<GetAllPersonDTO> applicantMergeList = new ArrayList<>();
  506. //发明人
  507. List<GetAllPersonDTO> inventorMergeList = new ArrayList<>();
  508. // List<MergePerson> mergePersonList = record.getRecords();
  509. if (!CollectionUtils.isEmpty(mergePersonList)) {
  510. for (MergePerson person : mergePersonList) {
  511. Integer personType = person.getType();
  512. GetAllPersonDTO merge = new GetAllPersonDTO();
  513. merge.setName(person.getName());
  514. merge.setCountry(person.getCountry());
  515. merge.setAddress(person.getAddress());
  516. merge.setRemark(person.getRemark());
  517. merge.setType(personType);
  518. merge.setMergeId(person.getId());
  519. mergeList.add(merge);
  520. if (personType == 0) {
  521. List<String> applicantMerges = JSONArray.parseArray(person.getMergedName(), String.class);
  522. if (!CollectionUtils.isEmpty(applicantMerges)) {
  523. for (String applicantMerge : applicantMerges) {
  524. GetAllPersonDTO applicant = new GetAllPersonDTO();
  525. applicant.setName(applicantMerge);
  526. applicant.setCountry(person.getCountry());
  527. applicant.setAddress(person.getAddress());
  528. applicant.setRemark(person.getRemark());
  529. applicant.setType(personType);
  530. applicantMergeList.add(applicant);
  531. }
  532. }
  533. } else if (person.getType() == 2) {
  534. List<String> inventorMerges = JSONArray.parseArray(person.getMergedName(), String.class);
  535. if (!CollectionUtils.isEmpty(inventorMerges)) {
  536. for (String inventorMerge : inventorMerges) {
  537. GetAllPersonDTO inventor = new GetAllPersonDTO();
  538. inventor.setName(inventorMerge);
  539. inventor.setCountry(person.getCountry());
  540. inventor.setAddress(person.getAddress());
  541. inventor.setRemark(person.getRemark());
  542. inventor.setType(personType);
  543. inventorMergeList.add(inventor);
  544. }
  545. }
  546. }
  547. }
  548. }
  549. //申请人/权利人
  550. if (!CollectionUtils.isEmpty(personDTOList) && !CollectionUtils.isEmpty(applicantMergeList)) {
  551. for (GetAllPersonDTO applicantMerge : applicantMergeList) {
  552. personDTOList.removeIf(personDTO -> personDTO.getName().equals(applicantMerge.getName()));
  553. }
  554. }
  555. //发明人
  556. if (!CollectionUtils.isEmpty(inventorDTOS) && !CollectionUtils.isEmpty(inventorMergeList)) {
  557. for (GetAllPersonDTO inventorMerge : inventorMergeList) {
  558. inventorDTOS.removeIf(inventor -> inventor.getName().equals(inventorMerge.getName()));
  559. }
  560. }
  561. //申请人/权利人、发明人返回数据
  562. List<GetAllPersonDTO> list = new ArrayList<>();
  563. if (type == 0) {
  564. list.addAll(mergeList);
  565. list.addAll(personDTOList);
  566. } else {
  567. list.addAll(mergeList);
  568. list.addAll(inventorDTOS);
  569. }
  570. List<GetAllPersonDTO> collect = list.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
  571. Records records = new Records();
  572. records.setCurrent(pageNum);
  573. records.setSize(pageSize);
  574. records.setData(collect);
  575. records.setTotal((long) list.size());
  576. return records;
  577. }
  578. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  579. public Integer delMergedName(MergedNameVO vo) throws IOException {
  580. Integer type = vo.getType();
  581. String delName = vo.getDelName();
  582. String name = vo.getName();
  583. Integer projectId = vo.getProjectId();
  584. MergePerson mergePerson = mergePersonMapper.selectOne(new LambdaQueryWrapper<MergePerson>()
  585. .eq(MergePerson::getName, name)
  586. .eq(MergePerson::getProjectId, projectId));
  587. if (ObjectUtil.isNotEmpty(mergePerson)) {
  588. Integer personId = mergePerson.getId();
  589. String mergedName = mergePerson.getMergedName();
  590. List<String> list = JSONArray.parseArray(mergedName, String.class);
  591. list.remove(delName);
  592. MergePerson person = mergePersonMapper.selectById(personId);
  593. person.setMergedName(JSONArray.toJSONString(list));
  594. person.updateById();
  595. SearchRequest.Builder builder = new SearchRequest.Builder();
  596. //设置查询索引
  597. builder.index("patent");
  598. List<Query> queries = new ArrayList<>();
  599. List<Query> mustQueries = new ArrayList<>();
  600. if (type == 0) {
  601. Query q1 = QueryBuilders.term(i -> i.field("applicant.name.key").value(delName));
  602. Query query1 = QueryBuilders.nested(i -> i.path("applicant").query(q1));
  603. Query q2 = QueryBuilders.term(i -> i.field("right_holder.name.key").value(delName));
  604. Query query2 = QueryBuilders.nested(i -> i.path("right_holder").query(q2));
  605. queries.add(query1);
  606. queries.add(query2);
  607. Query q3 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(name));
  608. Query query3 = QueryBuilders.nested(i -> i.path("merge_applicant").query(q3));
  609. Query q4 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(name));
  610. Query query4 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(q4));
  611. mustQueries.add(query3);
  612. mustQueries.add(query4);
  613. } else {
  614. Query q = QueryBuilders.term(i -> i.field("inventor.name.key").value(delName));
  615. Query query = QueryBuilders.nested(i -> i.path("inventor").query(q));
  616. queries.add(query);
  617. Query q1 = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(name));
  618. Query query1 = QueryBuilders.nested(i -> i.path("merge_inventor").query(q1));
  619. queries.add(query1);
  620. }
  621. Query query = QueryBuilders.bool(i -> i.must(mustQueries).should(queries));
  622. builder.query(query);
  623. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  624. List<Hit<Patent>> hits = response.hits().hits();
  625. Map<String, Patent> map = new HashMap<>();
  626. for (Hit<Patent> hit : hits) {
  627. String id = hit.id();
  628. map.put(id, hit.source());
  629. }
  630. if (!CollectionUtils.isEmpty(map)) {
  631. for (String id : map.keySet()) {
  632. Patent patent = map.get(id);
  633. esService.delMergePerson(patent, id, type, mergePerson.getName());
  634. }
  635. }
  636. }
  637. return mergePerson.getId();
  638. }
  639. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  640. public Integer delMergePerson(MergePersonIdVO vo) throws IOException {
  641. Integer type = vo.getType();
  642. MergePerson mergePerson = mergePersonMapper.selectById(vo.getId());
  643. String name = mergePerson.getName();
  644. if (ObjectUtil.isNotEmpty(mergePerson)) {
  645. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  646. .eq(BaseEntity::getId, vo.getId());
  647. this.remove(wrapper);
  648. SearchRequest.Builder builder = new SearchRequest.Builder();
  649. //设置查询索引
  650. builder.index("patent");
  651. List<Query> queries = new ArrayList<>();
  652. if (type == 0) {
  653. Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(name));
  654. Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(q1));
  655. Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(name));
  656. Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(q2));
  657. queries.add(query1);
  658. queries.add(query2);
  659. } else {
  660. Query q = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(name));
  661. Query query3 = QueryBuilders.nested(i -> i.path("merge_inventor").query(q));
  662. queries.add(query3);
  663. }
  664. Query query = QueryBuilders.bool(i -> i.must(queries));
  665. builder.query(query);
  666. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  667. List<Hit<Patent>> hits = response.hits().hits();
  668. Map<String, Patent> map = new HashMap<>();
  669. for (Hit<Patent> hit : hits) {
  670. String id = hit.id();
  671. map.put(id, hit.source());
  672. }
  673. if (!CollectionUtils.isEmpty(map)) {
  674. for (String id : map.keySet()) {
  675. Patent patent = map.get(id);
  676. esService.delMergePerson(patent, id, type, mergePerson.getName());
  677. }
  678. }
  679. }
  680. return vo.getId();
  681. }
  682. /**
  683. * 获取所有国家列表查询
  684. * @return
  685. */
  686. public List<GetAllCountryDTO> getAllCountry() {
  687. List<GetAllCountryDTO> list = new ArrayList<>();
  688. List<SystemDict> countries = systemDictMapper.selectList(new LambdaQueryWrapper<SystemDict>()
  689. .eq(SystemDict::getType, "COUNTRIES"));
  690. if (!CollectionUtils.isEmpty(countries)) {
  691. countries.forEach(county -> {
  692. GetAllCountryDTO dto = new GetAllCountryDTO();
  693. dto.setLabel(county.getLabel());
  694. dto.setValue(county.getValue());
  695. dto.setType(county.getType());
  696. list.add(dto);
  697. });
  698. }
  699. return list;
  700. }
  701. }