MergePersonService.java 77 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474
  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.es.EsMergePersonDTO;
  7. import cn.cslg.pas.common.dto.patentCount.GetEsAllPersonDTO;
  8. import cn.cslg.pas.common.model.cronModel.PersonnelVO;
  9. import cn.cslg.pas.common.model.cronModel.Records;
  10. import cn.cslg.pas.common.utils.CacheUtils;
  11. import cn.cslg.pas.common.utils.LoginUtils;
  12. import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
  13. import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
  14. import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
  15. import cn.cslg.pas.common.vo.business.*;
  16. import cn.cslg.pas.domain.BaseEntity;
  17. import cn.cslg.pas.domain.business.FollowUp;
  18. import cn.cslg.pas.domain.business.MergePerson;
  19. import cn.cslg.pas.domain.business.SystemDict;
  20. import cn.cslg.pas.domain.es.*;
  21. import cn.cslg.pas.exception.UnLoginException;
  22. import cn.cslg.pas.exception.XiaoShiException;
  23. import cn.cslg.pas.mapper.MergePersonMapper;
  24. import cn.cslg.pas.mapper.SystemDictMapper;
  25. import cn.cslg.pas.service.business.es.EsPatentService;
  26. import cn.cslg.pas.service.business.es.EsService;
  27. import cn.cslg.pas.service.query.FormatQueryService;
  28. import cn.hutool.core.util.ObjectUtil;
  29. import cn.hutool.core.util.PageUtil;
  30. import co.elastic.clients.elasticsearch.ElasticsearchClient;
  31. import co.elastic.clients.elasticsearch._types.InlineScript;
  32. import co.elastic.clients.elasticsearch._types.Script;
  33. import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
  34. import co.elastic.clients.elasticsearch._types.aggregations.AggregationBuilders;
  35. import co.elastic.clients.elasticsearch._types.aggregations.NestedAggregation;
  36. import co.elastic.clients.elasticsearch._types.aggregations.TermsAggregation;
  37. import co.elastic.clients.elasticsearch._types.query_dsl.IdsQuery;
  38. import co.elastic.clients.elasticsearch._types.query_dsl.Query;
  39. import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
  40. import co.elastic.clients.elasticsearch.core.*;
  41. import co.elastic.clients.elasticsearch.core.search.Hit;
  42. import co.elastic.clients.json.JsonData;
  43. import com.alibaba.fastjson.JSONArray;
  44. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  45. import com.baomidou.mybatisplus.core.metadata.IPage;
  46. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  47. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  48. import com.github.pagehelper.PageHelper;
  49. import com.google.gson.JsonArray;
  50. import lombok.extern.slf4j.Slf4j;
  51. import org.apache.commons.lang3.ObjectUtils;
  52. import org.apache.commons.lang3.StringUtils;
  53. import org.springframework.beans.BeanUtils;
  54. import org.springframework.beans.factory.annotation.Autowired;
  55. import org.springframework.stereotype.Service;
  56. import org.springframework.transaction.annotation.Propagation;
  57. import org.springframework.transaction.annotation.Transactional;
  58. import org.springframework.util.CollectionUtils;
  59. import java.io.IOException;
  60. import java.util.*;
  61. import java.util.stream.Collectors;
  62. /**
  63. * @Author xiexiang
  64. * @Date 2024/01/02
  65. */
  66. @Slf4j
  67. @Service
  68. public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePerson> {
  69. @Autowired
  70. private ElasticsearchClient client;
  71. @Autowired
  72. private CacheUtils cacheUtils;
  73. @Autowired
  74. private LoginUtils loginUtils;
  75. @Autowired
  76. private MergePersonMapper mergePersonMapper;
  77. @Autowired
  78. private FormatQueryService formatQueryService;
  79. @Autowired
  80. private EsPatentService esPatentService;
  81. @Autowired
  82. private EsService esService;
  83. @Autowired
  84. private SystemDictMapper systemDictMapper;
  85. /**
  86. * 专利列表上新增发明人/权利人/申请人合并
  87. * @param vo
  88. * @return
  89. * @throws Exception
  90. */
  91. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  92. public Integer mergePerson(MergePersonVO vo) throws Exception {
  93. Integer type = vo.getType();
  94. List<String> mergedNames = vo.getMergedName();
  95. Integer projectId = vo.getProjectId();
  96. //获取登陆人信息 用于设置创建人
  97. PersonnelVO personnelVO = new PersonnelVO();
  98. try {
  99. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  100. } catch (Exception e) {
  101. throw new XiaoShiException("未登录");
  102. }
  103. //判断是否名称重复
  104. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  105. .eq(MergePerson::getProjectId, vo.getProjectId())
  106. .eq(MergePerson::getName, vo.getName());
  107. List<MergePerson> list = mergePersonMapper.selectList(wrapper);
  108. if (list.size() > 0) {
  109. throw new XiaoShiException("合并名称不可重复");
  110. }
  111. MergePerson person = new MergePerson();
  112. BeanUtils.copyProperties(vo, person);
  113. person.setMergedName(JSONArray.toJSONString(mergedNames));
  114. person.setCreateId(personnelVO.getId());
  115. person.setCreateTime(new Date());
  116. person.insert();
  117. SearchRequest.Builder builder = new SearchRequest.Builder();
  118. //设置查询索引
  119. builder.index("patent");
  120. List<Query> queries = new ArrayList<>();
  121. if (type == 0) {
  122. for (String mergedName : mergedNames) {
  123. //合并申请人
  124. Query idQ1 = QueryBuilders.term(i -> i.field("merge_applicant.project_id").value(projectId));
  125. Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(mergedName));
  126. Query bool = QueryBuilders.bool(i -> i.must(idQ1, q1));
  127. Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(bool));
  128. Query childQ1 = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(query1));
  129. //合并权利人
  130. Query idQ2 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
  131. Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(mergedName));
  132. Query bool1 = QueryBuilders.bool(i -> i.must(idQ2, q2));
  133. Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(bool1));
  134. Query childQ2 = QueryBuilders.hasChild(i -> i.type("merge_right_holder").query(query2));
  135. queries.add(childQ1);
  136. queries.add(childQ2);
  137. }
  138. } else {
  139. for (String mergedName : mergedNames) {
  140. Query idQ = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
  141. Query q = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(mergedName));
  142. Query bool = QueryBuilders.bool(i -> i.must(idQ, q));
  143. Query query = QueryBuilders.nested(i -> i.path("merge_inventor").query(bool));
  144. Query childQ = QueryBuilders.hasChild(i -> i.type("merge_inventor").query(query));
  145. queries.add(childQ);
  146. }
  147. }
  148. Query query = QueryBuilders.bool(i -> i.should(queries));
  149. builder.query(query);
  150. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  151. List<Hit<Patent>> hits = response.hits().hits();
  152. Map<String, Patent> map = new HashMap<>();
  153. for (Hit<Patent> hit : hits) {
  154. String id = hit.id();
  155. map.put(id, hit.source());
  156. }
  157. if (!CollectionUtils.isEmpty(map)) {
  158. List<PatentMergePerson> mergePersonList = new ArrayList<>();
  159. PatentMergePerson mergePerson = new PatentMergePerson();
  160. mergePerson.setName(vo.getName());
  161. mergePerson.setProjectId(vo.getProjectId().toString());
  162. mergePerson.setType("1");
  163. mergePerson.setOrder(1);
  164. mergePersonList.add(mergePerson);
  165. for (String id : map.keySet()) {
  166. if (type == 0) {
  167. //申请人
  168. Map<String, List<PatentMergePerson>> appMap = this.getChildMergePerson(id, projectId, "merge_applicant");
  169. if (!CollectionUtils.isEmpty(appMap)) {
  170. for (String appId : appMap.keySet()) {
  171. List<PatentMergePerson> appMergeList = new ArrayList<>(mergePersonList);
  172. List<PatentMergePerson> appList = appMap.get(appId);
  173. List<String> collect = appList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
  174. if (!collect.contains(vo.getName())) {
  175. for (String mergedName : mergedNames) {
  176. appList.removeIf(i -> i.getName().equals(mergedName));
  177. }
  178. appMergeList.addAll(appList);
  179. //添加子文档
  180. Patent newPatent = new Patent();
  181. PatentJoin patentJoin = new PatentJoin();
  182. patentJoin.setParent(id);
  183. patentJoin.setName("merge_applicat");
  184. newPatent.setPatentJoin(patentJoin);
  185. newPatent.setMergeApplicant(appMergeList);
  186. String child = this.addChild(newPatent, id);
  187. if (StringUtils.isEmpty(child)) {
  188. throw new XiaoShiException("合并失败");
  189. } else {
  190. //删除原子文档
  191. this.delete(Arrays.asList(appId));
  192. }
  193. }
  194. }
  195. }
  196. //权利人
  197. Map<String, List<PatentMergePerson>> rightMap = this.getChildMergePerson(id, projectId, "merge_right_holder");
  198. if (!CollectionUtils.isEmpty(rightMap)) {
  199. for (String rightId : rightMap.keySet()) {
  200. List<PatentMergePerson> rightMergeList = new ArrayList<>(mergePersonList);
  201. List<PatentMergePerson> rightList = rightMap.get(rightId);
  202. List<String> collect = rightList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
  203. if (!collect.contains(vo.getName())) {
  204. for (String mergedName : mergedNames) {
  205. rightList.removeIf(i -> i.getName().equals(mergedName));
  206. }
  207. rightMergeList.addAll(rightList);
  208. //添加子文档
  209. Patent newPatent = new Patent();
  210. PatentJoin patentJoin = new PatentJoin();
  211. patentJoin.setParent(id);
  212. patentJoin.setName("merge_right_holder");
  213. newPatent.setPatentJoin(patentJoin);
  214. newPatent.setMergeInventor(rightMergeList);
  215. String child = this.addChild(newPatent, id);
  216. if (StringUtils.isEmpty(child)) {
  217. throw new XiaoShiException("合并失败");
  218. } else {
  219. //删除原子文档
  220. this.delete(Arrays.asList(rightId));
  221. }
  222. // for (String mergedName : mergedNames) {
  223. // this.delSingleMerge(rightId, type, mergedName);
  224. // }
  225. // Integer num = this.add(rightId, type, mergePersonList);
  226. // if (num < 0) {
  227. // throw new XiaoShiException("合并失败");
  228. // }
  229. }
  230. }
  231. }
  232. } else if (type == 2) {
  233. Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
  234. if (!CollectionUtils.isEmpty(inventorMap)) {
  235. for (String inventorId : inventorMap.keySet()) {
  236. List<PatentMergePerson> inventorMergeList = new ArrayList<>(mergePersonList);
  237. List<PatentMergePerson> inventorList = inventorMap.get(inventorId);
  238. List<String> collect = inventorList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
  239. if (!collect.contains(vo.getName())) {
  240. for (String mergedName : mergedNames) {
  241. inventorList.removeIf(i -> i.getName().equals(mergedName));
  242. }
  243. inventorMergeList.addAll(inventorList);
  244. //添加子文档
  245. Patent newPatent = new Patent();
  246. PatentJoin patentJoin = new PatentJoin();
  247. patentJoin.setParent(id);
  248. patentJoin.setName("merge_inventor");
  249. newPatent.setPatentJoin(patentJoin);
  250. newPatent.setMergeInventor(inventorMergeList);
  251. String child = this.addChild(newPatent, id);
  252. if (StringUtils.isEmpty(child)) {
  253. throw new XiaoShiException("合并失败");
  254. } else {
  255. //删除原子文档
  256. this.delete(Arrays.asList(inventorId));
  257. }
  258. }
  259. }
  260. }
  261. }
  262. }
  263. } else {
  264. throw new XiaoShiException("合并失败");
  265. }
  266. return person.getId();
  267. }
  268. public Map<String, List<PatentMergePerson>> getChildMergePerson(String id, Integer projectId, String mergeType) throws IOException {
  269. String path = mergeType + "." + "project_id";
  270. SearchRequest.Builder builder = new SearchRequest.Builder();
  271. //设置查询索引
  272. builder.index("patent");
  273. Query idQ = QueryBuilders.term(i -> i.field(path).value(projectId));
  274. Query query = QueryBuilders.nested(i -> i.path(mergeType).query(idQ));
  275. IdsQuery idsQuery = IdsQuery.of(n -> n.values(Arrays.asList(id)));
  276. Query q = QueryBuilders.hasParent(i -> i.parentType("patent").query(j -> j.ids(idsQuery)));
  277. Query bool = QueryBuilders.bool(i -> i.must(q, query));
  278. builder.query(bool);
  279. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  280. List<Hit<Patent>> hits = response.hits().hits();
  281. Map<String, List<PatentMergePerson>> map = new HashMap<>();
  282. for (Hit<Patent> hit : hits) {
  283. String id1 = hit.id();
  284. Patent patent = hit.source();
  285. if (mergeType.equals("merge_applicant")) {
  286. if (!CollectionUtils.isEmpty(patent.getMergeApplicant())) {
  287. map.put(id1, patent.getMergeApplicant());
  288. }
  289. } else if (mergeType.equals("merge_right_holder")) {
  290. if (!CollectionUtils.isEmpty(patent.getMergeRightHolder())) {
  291. map.put(id1, patent.getMergeRightHolder());
  292. }
  293. } else {
  294. if (!CollectionUtils.isEmpty(patent.getMergeInventor())) {
  295. map.put(id1, patent.getMergeInventor());
  296. }
  297. }
  298. }
  299. return map;
  300. }
  301. /**
  302. * 专利列表上再次新增发明人/权利人/申请人合并
  303. * @param vo
  304. * @return
  305. * @throws Exception
  306. */
  307. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  308. public Integer mergePersonAgain(MergePersonAgainVO vo) throws Exception {
  309. List<String> mergedNames = vo.getNeedMergedName();
  310. List<String> mergeName = vo.getMergedName();
  311. Integer type = vo.getType();
  312. Integer projectId = vo.getProjectId();
  313. List<String> nameList = new ArrayList<>();
  314. if (!CollectionUtils.isEmpty(mergedNames)) {
  315. for (String mergedName : mergedNames) {
  316. MergePerson person = mergePersonMapper.selectOne(new LambdaQueryWrapper<MergePerson>()
  317. .eq(MergePerson::getProjectId, vo.getProjectId())
  318. .eq(MergePerson::getName, mergedName));
  319. String name = person.getMergedName();
  320. List<String> getNames = JSONArray.parseArray(name, String.class);
  321. nameList.addAll(getNames);
  322. Map<String, Patent> map = this.getDelPatent(type, projectId, mergedName);
  323. if (!CollectionUtils.isEmpty(map)) {
  324. for (String id : map.keySet()) {
  325. Patent patent = map.get(id);
  326. List<PatentMergePerson> appPersonList = new ArrayList<>();
  327. List<PatentMergePerson> rightPersonList = new ArrayList<>();
  328. List<PatentMergePerson> inventorPersonList = new ArrayList<>();
  329. if (type == 0) {
  330. if (!CollectionUtils.isEmpty(patent.getApplicant())) {
  331. List<PatentPerson> applicant = patent.getApplicant();
  332. for (PatentPerson patentPerson : applicant) {
  333. PatentMergePerson merge = new PatentMergePerson();
  334. merge.setName(patentPerson.getName());
  335. merge.setType(patentPerson.getType());
  336. merge.setOrder(patentPerson.getOrder());
  337. merge.setProjectId(String.valueOf(projectId));
  338. appPersonList.add(merge);
  339. }
  340. }
  341. if (!CollectionUtils.isEmpty(patent.getRightHolder())) {
  342. List<PatentPerson> rightHolder = patent.getRightHolder();
  343. for (PatentPerson patentPerson : rightHolder) {
  344. PatentMergePerson merge = new PatentMergePerson();
  345. merge.setName(patentPerson.getName());
  346. merge.setType(patentPerson.getType());
  347. merge.setOrder(patentPerson.getOrder());
  348. merge.setProjectId(String.valueOf(projectId));
  349. rightPersonList.add(merge);
  350. }
  351. }
  352. } else {
  353. if (!CollectionUtils.isEmpty(patent.getInventor())) {
  354. List<PatentPerson> inventor = patent.getInventor();
  355. for (PatentPerson patentPerson : inventor) {
  356. PatentMergePerson merge = new PatentMergePerson();
  357. merge.setName(patentPerson.getName());
  358. merge.setType(patentPerson.getType());
  359. merge.setOrder(patentPerson.getOrder());
  360. merge.setProjectId(String.valueOf(projectId));
  361. inventorPersonList.add(merge);
  362. }
  363. }
  364. }
  365. if (type == 0) {
  366. //申请人
  367. Map<String, List<PatentMergePerson>> appMap = this.getChildMergePerson(id, projectId, "merge_applicant");
  368. if (!CollectionUtils.isEmpty(appMap)) {
  369. for (String appId : appMap.keySet()) {
  370. //添加子文档
  371. Patent newPatent = new Patent();
  372. PatentJoin patentJoin = new PatentJoin();
  373. patentJoin.setParent(id);
  374. patentJoin.setName("merge_applicat");
  375. newPatent.setPatentJoin(patentJoin);
  376. newPatent.setMergeApplicant(appPersonList);
  377. String child = this.addChild(newPatent, id);
  378. if (StringUtils.isEmpty(child)) {
  379. throw new XiaoShiException("删除失败");
  380. } else {
  381. //删除原子文档
  382. this.delete(Arrays.asList(appId));
  383. }
  384. }
  385. }
  386. //权利人
  387. Map<String, List<PatentMergePerson>> rightMap = this.getChildMergePerson(id, projectId, "merge_right_holder");
  388. if (!CollectionUtils.isEmpty(rightMap)) {
  389. for (String rightId : rightMap.keySet()) {
  390. //添加子文档
  391. Patent newPatent = new Patent();
  392. PatentJoin patentJoin = new PatentJoin();
  393. patentJoin.setParent(id);
  394. patentJoin.setName("merge_right_holder");
  395. newPatent.setPatentJoin(patentJoin);
  396. newPatent.setMergeInventor(rightPersonList);
  397. String child = this.addChild(newPatent, id);
  398. if (StringUtils.isEmpty(child)) {
  399. throw new XiaoShiException("删除失败");
  400. } else {
  401. //删除原子文档
  402. this.delete(Arrays.asList(rightId));
  403. }
  404. }
  405. }
  406. } else {
  407. //发明人
  408. Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
  409. if (!CollectionUtils.isEmpty(inventorMap)) {
  410. for (String inventorId : inventorMap.keySet()) {
  411. //添加子文档
  412. Patent newPatent = new Patent();
  413. PatentJoin patentJoin = new PatentJoin();
  414. patentJoin.setParent(id);
  415. patentJoin.setName("merge_inventor");
  416. newPatent.setPatentJoin(patentJoin);
  417. newPatent.setMergeInventor(inventorPersonList);
  418. String child = this.addChild(newPatent, id);
  419. if (StringUtils.isEmpty(child)) {
  420. throw new XiaoShiException("删除失败");
  421. } else {
  422. //删除原子文档
  423. this.delete(Arrays.asList(inventorId));
  424. }
  425. }
  426. }
  427. }
  428. }
  429. mergePersonMapper.deleteById(person.getId());
  430. }
  431. }
  432. }
  433. if (!CollectionUtils.isEmpty(mergeName)) {
  434. nameList.addAll(mergeName);
  435. }
  436. MergePersonVO personVO = new MergePersonVO();
  437. personVO.setProjectId(projectId);
  438. personVO.setType(type);
  439. personVO.setName(vo.getName());
  440. personVO.setAbbreviation(vo.getAbbreviation());
  441. personVO.setCountry(vo.getCountry());
  442. personVO.setProvince(vo.getProvince());
  443. personVO.setAddress(vo.getAddress());
  444. personVO.setRemark(vo.getRemark());
  445. personVO.setMergedName(nameList);
  446. Integer id = this.mergePerson(personVO);
  447. if (id < 0) {
  448. throw new XiaoShiException("再合并失败");
  449. }
  450. return id;
  451. }
  452. /**
  453. * 专利列表上编辑发明人/权利人/申请人合并
  454. * @param vo
  455. * @return
  456. * @throws Exception
  457. */
  458. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  459. public Integer updateMergePerson(MergePersonVO vo) throws Exception {
  460. //获取登陆人信息 用于设置创建人
  461. PersonnelVO personnelVO = new PersonnelVO();
  462. Integer type = vo.getType();
  463. try {
  464. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  465. } catch (Exception e) {
  466. throw new XiaoShiException("未登录");
  467. }
  468. //判断是否名称重复
  469. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  470. .eq(MergePerson::getProjectId, vo.getProjectId())
  471. .eq(MergePerson::getName, vo.getName())
  472. .ne(BaseEntity::getId, vo.getId());
  473. List<MergePerson> list = mergePersonMapper.selectList(wrapper);
  474. if (list.size() > 0) {
  475. throw new XiaoShiException("合并名称不可重复");
  476. }
  477. //获取老专利
  478. MergePerson person = this.getById(vo.getId());
  479. String name = person.getName();
  480. Integer projectId = person.getProjectId();
  481. if (ObjectUtil.isNotEmpty(person)) {
  482. BeanUtils.copyProperties(vo, person);
  483. person.setCreateId(personnelVO.getId());
  484. person.setCreateTime(new Date());
  485. person.updateById();
  486. if (!name.equals(vo.getName())) {
  487. SearchRequest.Builder builder = new SearchRequest.Builder();
  488. //设置查询索引
  489. builder.index("patent");
  490. List<Query> queries = new ArrayList<>();
  491. if (type == 0) {
  492. //合并申请人
  493. Query idQ1 = QueryBuilders.term(i -> i.field("merge_applicant.project_id").value(projectId));
  494. Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(name));
  495. Query bool = QueryBuilders.bool(i -> i.must(idQ1, q1));
  496. Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(bool));
  497. Query childQ1 = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(query1));
  498. //合并权利人
  499. Query idQ2 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
  500. Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(name));
  501. Query bool1 = QueryBuilders.bool(i -> i.must(idQ2, q2));
  502. Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(bool1));
  503. Query childQ2 = QueryBuilders.hasChild(i -> i.type("merge_right_holder").query(query2));
  504. queries.add(childQ1);
  505. queries.add(childQ2);
  506. } else {
  507. Query idQ = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
  508. Query q = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(name));
  509. Query bool = QueryBuilders.bool(i -> i.must(idQ, q));
  510. Query query = QueryBuilders.nested(i -> i.path("merge_inventor").query(bool));
  511. Query childQ = QueryBuilders.hasChild(i -> i.type("merge_inventor").query(query));
  512. queries.add(childQ);
  513. }
  514. Query query = QueryBuilders.bool(i -> i.should(queries));
  515. builder.query(query);
  516. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  517. List<Hit<Patent>> hits = response.hits().hits();
  518. Map<String, Patent> map = new HashMap<>();
  519. for (Hit<Patent> hit : hits) {
  520. String id = hit.id();
  521. map.put(id, hit.source());
  522. }
  523. if (!CollectionUtils.isEmpty(map)) {
  524. for (String id : map.keySet()) {
  525. if (type == 0) {
  526. //申请人
  527. Map<String, List<PatentMergePerson>> appMap = this.getChildMergePerson(id, projectId, "merge_applicant");
  528. if (!CollectionUtils.isEmpty(appMap)) {
  529. for (String appId : appMap.keySet()) {
  530. this.edit(appId, type, name, vo.getName());
  531. }
  532. }
  533. //权利人
  534. Map<String, List<PatentMergePerson>> rightMap = this.getChildMergePerson(id, projectId, "merge_right_holder");
  535. if (!CollectionUtils.isEmpty(rightMap)) {
  536. for (String rightId : rightMap.keySet()) {
  537. this.edit(rightId, type, name, vo.getName());
  538. }
  539. }
  540. } else if (type == 2) {
  541. Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
  542. if (!CollectionUtils.isEmpty(inventorMap)) {
  543. for (String inventorId : inventorMap.keySet()) {
  544. this.edit(inventorId, type, name, vo.getName());
  545. }
  546. }
  547. }
  548. }
  549. } else {
  550. throw new XiaoShiException("编辑失败");
  551. }
  552. }
  553. } else {
  554. person = new MergePerson();
  555. }
  556. return person.getId();
  557. }
  558. /**
  559. * 发明人/权利人/申请人合并列表查询
  560. * @param vo
  561. * @return
  562. */
  563. public Records selectMergePersonList(MergePersonQueryVO vo) {
  564. List<MergePersonQueryDTO> list = new ArrayList<>();
  565. IPage<MergePerson> page = new Page<>(vo.getPageNum(), vo.getPageSize());
  566. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  567. .eq(MergePerson::getProjectId, vo.getProjectId())
  568. .eq(MergePerson::getType, vo.getType())
  569. .eq(StringUtils.isNotEmpty(vo.getCountry()), MergePerson::getCountry, vo.getCountry())
  570. .like(StringUtils.isNotEmpty(vo.getName()), MergePerson::getName, vo.getName());
  571. IPage<MergePerson> record = mergePersonMapper.selectPage(page, wrapper);
  572. for (MergePerson person : record.getRecords()) {
  573. MergePersonQueryDTO dto = new MergePersonQueryDTO();
  574. dto.setId(person.getId());
  575. dto.setProjectId(person.getProjectId());
  576. dto.setType(person.getType());
  577. dto.setName(person.getName());
  578. dto.setAddress(person.getAddress());
  579. dto.setCountry(person.getCountry());
  580. dto.setProvince(person.getProvince());
  581. dto.setRemark(person.getRemark());
  582. dto.setAbbreviation(person.getAbbreviation());
  583. dto.setCreateTime(person.getCreateTime());
  584. List<String> names = JSONArray.parseArray(person.getMergedName(), String.class);
  585. dto.setMergedName(names);
  586. list.add(dto);
  587. }
  588. Records records = new Records();
  589. records.setCurrent(record.getCurrent());
  590. records.setSize(record.getSize());
  591. records.setData(list);
  592. records.setTotal(record.getTotal());
  593. return records;
  594. }
  595. /**
  596. * 合并人员详情
  597. * @param vo
  598. * @return
  599. */
  600. public MergePersonQueryDTO selectMergePersonDetail(MergePersonIdVO vo) {
  601. MergePersonQueryDTO dto = new MergePersonQueryDTO();
  602. MergePerson person = mergePersonMapper.selectById(vo.getId());
  603. if (ObjectUtil.isNotEmpty(person)) {
  604. BeanUtils.copyProperties(person, dto);
  605. List<String> names = JSONArray.parseArray(person.getMergedName(), String.class);
  606. dto.setMergedName(names);
  607. }
  608. return dto;
  609. }
  610. /**
  611. * 获取所有发明人/权利人/申请人
  612. * @param vo
  613. * @return
  614. * @throws Exception
  615. */
  616. public Records getMergePerson(GetAllPersonVO vo) throws Exception {
  617. Integer projectId = vo.getProjectId();
  618. Long pageNum = vo.getPageNum();
  619. Long pageSize = vo.getPageSize();
  620. Integer type = vo.getType();
  621. String condition = vo.getSearchQuery();
  622. List<String> conditionList = new ArrayList<>();
  623. if (StringUtils.isNotEmpty(condition)) {
  624. String s = condition.substring(condition.indexOf("=") + 1);
  625. if (s.contains("or")) {
  626. String[] split = s.split("or");
  627. conditionList.addAll(Arrays.asList(split));
  628. } else {
  629. conditionList.add(s);
  630. }
  631. }
  632. List<GetEsAllPersonDTO> personDTOS = new ArrayList<>();
  633. SearchRequest.Builder builder = new SearchRequest.Builder();
  634. //设置查询索引
  635. builder.index("patent");
  636. if (!CollectionUtils.isEmpty(conditionList)) {
  637. for (String name : conditionList) {
  638. List<Query> queries = new ArrayList<>();
  639. if (type == 0) {
  640. //合并申请人
  641. Query idQ1 = QueryBuilders.term(i -> i.field("merge_applicant.project_id").value(projectId));
  642. Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(name));
  643. Query bool = QueryBuilders.bool(i -> i.must(idQ1, q1));
  644. Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(bool));
  645. Query childQ1 = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(query1));
  646. //合并权利人
  647. Query idQ2 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
  648. Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(name));
  649. Query bool1 = QueryBuilders.bool(i -> i.must(idQ2, q2));
  650. Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(bool1));
  651. Query childQ2 = QueryBuilders.hasChild(i -> i.type("merge_right_holder").query(query2));
  652. queries.add(childQ1);
  653. queries.add(childQ2);
  654. } else {
  655. Query idQ = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
  656. Query q = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(name));
  657. Query bool = QueryBuilders.bool(i -> i.must(idQ, q));
  658. Query query = QueryBuilders.nested(i -> i.path("merge_inventor").query(bool));
  659. Query childQ = QueryBuilders.hasChild(i -> i.type("merge_inventor").query(query));
  660. queries.add(childQ);
  661. }
  662. Query bool = QueryBuilders.bool(i -> i.should(queries));
  663. builder.query(bool);
  664. //分页
  665. // if (pageNum > 0 && pageSize > 0) {
  666. // builder.from((pageNum.intValue() - 1) * pageSize.intValue()).size(pageSize.intValue());
  667. // }
  668. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  669. List<Hit<Patent>> hits = response.hits().hits();
  670. Map<String, Patent> map = new HashMap<>();
  671. for (Hit<Patent> hit : hits) {
  672. String id = hit.id();
  673. map.put(id, hit.source());
  674. }
  675. if (!CollectionUtils.isEmpty(map)) {
  676. for (String id : map.keySet()) {
  677. GetEsAllPersonDTO personDTO = new GetEsAllPersonDTO();
  678. if (type == 0) {
  679. //申请人
  680. Map<String, List<PatentMergePerson>> appMap = this.getChildMergePerson(id, projectId, "merge_applicant");
  681. if (!CollectionUtils.isEmpty(appMap)) {
  682. for (String appId : appMap.keySet()) {
  683. List<PatentMergePerson> appList = appMap.get(appId);
  684. List<String> collect = appList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
  685. personDTO.setMergeApplicant(collect);
  686. }
  687. }
  688. //权利人
  689. Map<String, List<PatentMergePerson>> rightMap = this.getChildMergePerson(id, projectId, "merge_right_holder");
  690. if (!CollectionUtils.isEmpty(rightMap)) {
  691. for (String rightId : rightMap.keySet()) {
  692. List<PatentMergePerson> rightList = rightMap.get(rightId);
  693. List<String> collect = rightList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
  694. personDTO.setMergeRightHolder(collect);
  695. }
  696. }
  697. } else {
  698. //发明人
  699. Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
  700. if (!CollectionUtils.isEmpty(inventorMap)) {
  701. for (String inventorId : inventorMap.keySet()) {
  702. List<PatentMergePerson> inventorList = inventorMap.get(inventorId);
  703. List<String> collect = inventorList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
  704. personDTO.setMergeInventor(collect);
  705. }
  706. }
  707. }
  708. personDTOS.add(personDTO);
  709. }
  710. }
  711. }
  712. } else {
  713. List<Query> queries = new ArrayList<>();
  714. if (type == 0) {
  715. Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.project_id").value(projectId));
  716. Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(q1));
  717. Query childQ1 = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(query1));
  718. queries.add(childQ1);
  719. Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
  720. Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(q2));
  721. Query childQ2 = QueryBuilders.hasChild(i -> i.type("merge_right_holder").query(query2));
  722. queries.add(childQ2);
  723. } else {
  724. Query q = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
  725. Query query = QueryBuilders.nested(i -> i.path("merge_inventor").query(q));
  726. Query childQ = QueryBuilders.hasChild(i -> i.type("merge_inventor").query(query));
  727. queries.add(childQ);
  728. }
  729. Query bool = QueryBuilders.bool(i -> i.should(queries));
  730. builder.query(bool);
  731. //分页
  732. // if (pageNum > 0 && pageSize > 0) {
  733. // builder.from((pageNum.intValue() - 1) * pageSize.intValue()).size(pageSize.intValue());
  734. // }
  735. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  736. List<Hit<Patent>> hits = response.hits().hits();
  737. Map<String, Patent> map = new HashMap<>();
  738. for (Hit<Patent> hit : hits) {
  739. String id = hit.id();
  740. map.put(id, hit.source());
  741. }
  742. if (!CollectionUtils.isEmpty(map)) {
  743. for (String id : map.keySet()) {
  744. GetEsAllPersonDTO personDTO = new GetEsAllPersonDTO();
  745. if (type == 0) {
  746. //申请人
  747. Map<String, List<PatentMergePerson>> appMap = this.getChildMergePerson(id, projectId, "merge_applicant");
  748. if (!CollectionUtils.isEmpty(appMap)) {
  749. for (String appId : appMap.keySet()) {
  750. List<PatentMergePerson> appList = appMap.get(appId);
  751. List<String> collect = appList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
  752. personDTO.setMergeApplicant(collect);
  753. }
  754. }
  755. //权利人
  756. Map<String, List<PatentMergePerson>> rightMap = this.getChildMergePerson(id, projectId, "merge_right_holder");
  757. if (!CollectionUtils.isEmpty(rightMap)) {
  758. for (String rightId : rightMap.keySet()) {
  759. List<PatentMergePerson> rightList = rightMap.get(rightId);
  760. List<String> collect = rightList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
  761. personDTO.setMergeRightHolder(collect);
  762. }
  763. }
  764. } else {
  765. //发明人
  766. Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
  767. if (!CollectionUtils.isEmpty(inventorMap)) {
  768. for (String inventorId : inventorMap.keySet()) {
  769. List<PatentMergePerson> inventorList = inventorMap.get(inventorId);
  770. List<String> collect = inventorList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
  771. personDTO.setMergeInventor(collect);
  772. }
  773. }
  774. }
  775. personDTOS.add(personDTO);
  776. }
  777. }
  778. }
  779. //es申请人/权利人
  780. List<String> mergeList = new ArrayList<>();
  781. if (!CollectionUtils.isEmpty(personDTOS)) {
  782. if (type == 0) {
  783. for (GetEsAllPersonDTO personDTO : personDTOS) {
  784. List<String> appList = new ArrayList<>();
  785. if (!CollectionUtils.isEmpty(personDTO.getMergeApplicant())) {
  786. appList = personDTO.getMergeApplicant();
  787. mergeList.addAll(appList);
  788. }
  789. List<String> rightList = new ArrayList<>();
  790. if (!CollectionUtils.isEmpty(personDTO.getMergeRightHolder())) {
  791. rightList = personDTO.getMergeRightHolder();
  792. mergeList.addAll(rightList);
  793. }
  794. }
  795. } else {
  796. for (GetEsAllPersonDTO personDTO : personDTOS) {
  797. List<String> inventorList = new ArrayList<>();
  798. if (!CollectionUtils.isEmpty(personDTO.getMergeInventor())) {
  799. inventorList = personDTO.getMergeInventor();
  800. mergeList.addAll(inventorList);
  801. }
  802. }
  803. }
  804. }
  805. List<GetAllPersonDTO> personDTOList = new ArrayList<>();
  806. List<GetAllPersonDTO> mergePersonList = new ArrayList<>();
  807. List<GetAllPersonDTO> personList = new ArrayList<>();
  808. List<String> nameList = mergeList.stream().distinct().collect(Collectors.toList());
  809. for (String key : nameList) {
  810. MergePerson person = mergePersonMapper.selectOne(new LambdaQueryWrapper<MergePerson>()
  811. .eq(MergePerson::getName, key)
  812. .eq(MergePerson::getProjectId, projectId));
  813. if (ObjectUtils.isNotEmpty(person)) {
  814. GetAllPersonDTO dto = new GetAllPersonDTO();
  815. dto.setName(person.getName());
  816. dto.setMergeId(person.getId());
  817. dto.setType(person.getType());
  818. dto.setRemark(person.getRemark());
  819. dto.setAbbreviation(person.getAbbreviation());
  820. dto.setCountry(person.getCountry());
  821. dto.setProvince(person.getProvince());
  822. dto.setAddress(person.getAddress());
  823. mergePersonList.add(dto);
  824. } else {
  825. GetAllPersonDTO dto = new GetAllPersonDTO();
  826. dto.setName(key);
  827. personList.add(dto);
  828. }
  829. }
  830. if (!CollectionUtils.isEmpty(mergePersonList)) {
  831. List<GetAllPersonDTO> collect = mergePersonList.stream().sorted(Comparator.comparing(GetAllPersonDTO::getName)).collect(Collectors.toList());
  832. personDTOList.addAll(collect);
  833. }
  834. if (!CollectionUtils.isEmpty(personList)) {
  835. List<GetAllPersonDTO> collect = personList.stream().sorted(Comparator.comparing(GetAllPersonDTO::getName)).collect(Collectors.toList());
  836. personDTOList.addAll(collect);
  837. }
  838. List<GetAllPersonDTO> collect = personDTOList.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
  839. Records records = new Records();
  840. records.setCurrent(pageNum);
  841. records.setSize(pageSize);
  842. records.setData(collect);
  843. records.setTotal((long) personDTOList.size());
  844. return records;
  845. }
  846. /**
  847. * 发明人/权利人/申请人合并后的名称移除
  848. * @param vo
  849. * @return
  850. * @throws Exception
  851. */
  852. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  853. public Integer delMergedName(MergedNameVO vo) throws Exception {
  854. Integer type = vo.getType();
  855. //要移除的名字
  856. String delName = vo.getDelName();
  857. //合并后的名称
  858. String name = vo.getName();
  859. Integer projectId = vo.getProjectId();
  860. MergePerson mergePerson = mergePersonMapper.selectOne(new LambdaQueryWrapper<MergePerson>()
  861. .eq(MergePerson::getName, name)
  862. .eq(MergePerson::getProjectId, projectId));
  863. if (ObjectUtil.isNotEmpty(mergePerson)) {
  864. Integer personId = mergePerson.getId();
  865. String mergedName = mergePerson.getMergedName();
  866. List<String> list = JSONArray.parseArray(mergedName, String.class);
  867. list.remove(delName);
  868. MergePerson person = mergePersonMapper.selectById(personId);
  869. person.setMergedName(JSONArray.toJSONString(list));
  870. person.updateById();
  871. //移除后最后剩下的名称
  872. String finalMergedName = person.getMergedName();
  873. List<String> nameDatas = JSONArray.parseArray(finalMergedName, String.class);
  874. SearchRequest.Builder builder = new SearchRequest.Builder();
  875. //设置查询索引
  876. builder.index("patent");
  877. List<Query> queries = new ArrayList<>();
  878. if (type == 0) {
  879. //合并申请人
  880. Query idQ1 = QueryBuilders.term(i -> i.field("merge_applicant.project_id").value(projectId));
  881. Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(name));
  882. Query bool = QueryBuilders.bool(i -> i.must(idQ1, q1));
  883. Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(bool));
  884. Query childQ1 = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(query1));
  885. //合并权利人
  886. Query idQ2 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
  887. Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(name));
  888. Query bool1 = QueryBuilders.bool(i -> i.must(idQ2, q2));
  889. Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(bool1));
  890. Query childQ2 = QueryBuilders.hasChild(i -> i.type("merge_right_holder").query(query2));
  891. queries.add(childQ1);
  892. queries.add(childQ2);
  893. } else {
  894. Query idQ = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
  895. Query q = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(name));
  896. Query bool = QueryBuilders.bool(i -> i.must(idQ, q));
  897. Query query = QueryBuilders.nested(i -> i.path("merge_inventor").query(bool));
  898. Query childQ = QueryBuilders.hasChild(i -> i.type("merge_inventor").query(query));
  899. queries.add(childQ);
  900. }
  901. Query query = QueryBuilders.bool(i -> i.should(queries));
  902. builder.query(query);
  903. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  904. List<Hit<Patent>> hits = response.hits().hits();
  905. Map<String, Patent> map = new HashMap<>();
  906. for (Hit<Patent> hit : hits) {
  907. String id = hit.id();
  908. map.put(id, hit.source());
  909. }
  910. if (!CollectionUtils.isEmpty(map)) {
  911. for (String id : map.keySet()) {
  912. Patent patent = map.get(id);
  913. List<PatentMergePerson> mergePersonList = new ArrayList<>();
  914. if (type == 0) {
  915. if (!CollectionUtils.isEmpty(patent.getApplicant())) {
  916. List<PatentPerson> applicant = patent.getApplicant();
  917. List<String> collect = applicant.stream().map(PatentPerson::getName).collect(Collectors.toList());
  918. if (collect.contains(delName)) {
  919. for (PatentPerson patentPerson : applicant) {
  920. if (delName.equals(patentPerson.getName())) {
  921. PatentMergePerson merge = new PatentMergePerson();
  922. merge.setName(delName);
  923. merge.setType(patentPerson.getType());
  924. merge.setOrder(patentPerson.getOrder());
  925. merge.setProjectId(String.valueOf(projectId));
  926. mergePersonList.add(merge);
  927. }
  928. }
  929. }
  930. }
  931. if (CollectionUtils.isEmpty(mergePersonList) && !CollectionUtils.isEmpty(patent.getRightHolder())) {
  932. List<PatentPerson> rightHolder = patent.getRightHolder();
  933. List<String> collect = rightHolder.stream().map(PatentPerson::getName).collect(Collectors.toList());
  934. if (collect.contains(delName)) {
  935. for (PatentPerson patentPerson : rightHolder) {
  936. if (delName.equals(patentPerson.getName())) {
  937. PatentMergePerson merge = new PatentMergePerson();
  938. merge.setName(delName);
  939. merge.setType(patentPerson.getType());
  940. merge.setOrder(patentPerson.getOrder());
  941. merge.setProjectId(String.valueOf(projectId));
  942. mergePersonList.add(merge);
  943. }
  944. }
  945. }
  946. }
  947. } else {
  948. if (!CollectionUtils.isEmpty(patent.getInventor())) {
  949. List<PatentPerson> inventor = patent.getInventor();
  950. List<String> collect = inventor.stream().map(PatentPerson::getName).collect(Collectors.toList());
  951. if (collect.contains(delName)) {
  952. for (PatentPerson patentPerson : inventor) {
  953. if (delName.equals(patentPerson.getName())) {
  954. PatentMergePerson merge = new PatentMergePerson();
  955. merge.setName(delName);
  956. merge.setType(patentPerson.getType());
  957. merge.setOrder(patentPerson.getOrder());
  958. merge.setProjectId(String.valueOf(projectId));
  959. mergePersonList.add(merge);
  960. }
  961. }
  962. }
  963. }
  964. }
  965. if (type == 0) {
  966. //申请人
  967. Map<String, List<PatentMergePerson>> appMap = this.getChildMergePerson(id, projectId, "merge_applicant");
  968. if (!CollectionUtils.isEmpty(appMap)) {
  969. for (String appId : appMap.keySet()) {
  970. if (CollectionUtils.isEmpty(nameDatas)) {
  971. this.delSingleMerge(appId, type, name);
  972. }
  973. List<PatentMergePerson> appMergeList = new ArrayList<>(mergePersonList);
  974. List<PatentMergePerson> appList = appMap.get(appId);
  975. appMergeList.addAll(appList);
  976. //添加子文档
  977. Patent newPatent = new Patent();
  978. PatentJoin patentJoin = new PatentJoin();
  979. patentJoin.setParent(id);
  980. patentJoin.setName("merge_applicat");
  981. newPatent.setPatentJoin(patentJoin);
  982. newPatent.setMergeApplicant(appMergeList);
  983. String child = this.addChild(newPatent, id);
  984. if (StringUtils.isEmpty(child)) {
  985. throw new XiaoShiException("移除失败");
  986. } else {
  987. //删除原子文档
  988. this.delete(Arrays.asList(appId));
  989. }
  990. }
  991. }
  992. //权利人
  993. Map<String, List<PatentMergePerson>> rightMap = this.getChildMergePerson(id, projectId, "merge_right_holder");
  994. if (!CollectionUtils.isEmpty(rightMap)) {
  995. for (String rightId : rightMap.keySet()) {
  996. if (CollectionUtils.isEmpty(nameDatas)) {
  997. this.delSingleMerge(rightId, type, name);
  998. }
  999. ArrayList<PatentMergePerson> rightMergeList = new ArrayList<>(mergePersonList);
  1000. List<PatentMergePerson> rightList = rightMap.get(rightId);
  1001. rightMergeList.addAll(rightList);
  1002. //添加子文档
  1003. Patent newPatent = new Patent();
  1004. PatentJoin patentJoin = new PatentJoin();
  1005. patentJoin.setParent(id);
  1006. patentJoin.setName("merge_right_holder");
  1007. newPatent.setPatentJoin(patentJoin);
  1008. newPatent.setMergeRightHolder(rightMergeList);
  1009. String child = this.addChild(newPatent, id);
  1010. if (StringUtils.isEmpty(child)) {
  1011. throw new XiaoShiException("移除失败");
  1012. } else {
  1013. //删除原子文档
  1014. this.delete(Arrays.asList(rightId));
  1015. }
  1016. }
  1017. }
  1018. } else if (type == 2) {
  1019. Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
  1020. if (!CollectionUtils.isEmpty(inventorMap)) {
  1021. for (String inventorId : inventorMap.keySet()) {
  1022. if (CollectionUtils.isEmpty(nameDatas)) {
  1023. this.delSingleMerge(inventorId, type, name);
  1024. }
  1025. ArrayList<PatentMergePerson> inventorMergeList = new ArrayList<>(mergePersonList);
  1026. List<PatentMergePerson> inventorList = inventorMap.get(inventorId);
  1027. inventorMergeList.addAll(inventorList);
  1028. //添加子文档
  1029. Patent newPatent = new Patent();
  1030. PatentJoin patentJoin = new PatentJoin();
  1031. patentJoin.setParent(id);
  1032. patentJoin.setName("merge_inventor");
  1033. newPatent.setPatentJoin(patentJoin);
  1034. newPatent.setMergeInventor(inventorMergeList);
  1035. String child = this.addChild(newPatent, id);
  1036. if (StringUtils.isEmpty(child)) {
  1037. throw new XiaoShiException("移除失败");
  1038. } else {
  1039. //删除原子文档
  1040. this.delete(Arrays.asList(inventorId));
  1041. }
  1042. }
  1043. }
  1044. }
  1045. }
  1046. } else {
  1047. throw new XiaoShiException("移除失败");
  1048. }
  1049. }
  1050. return mergePerson.getId();
  1051. }
  1052. /**
  1053. * 发明人/权利人/申请人合并记录删除
  1054. * @param vo
  1055. * @return
  1056. * @throws Exception
  1057. */
  1058. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  1059. public Integer delMergePerson(MergePersonIdVO vo) throws Exception {
  1060. Integer type = vo.getType();
  1061. MergePerson mergePerson = mergePersonMapper.selectById(vo.getId());
  1062. //合并后的名称
  1063. String name = mergePerson.getName();
  1064. //专题库id
  1065. Integer projectId = mergePerson.getProjectId();
  1066. //合并的名称
  1067. String mergedName = mergePerson.getMergedName();
  1068. if (ObjectUtil.isNotEmpty(mergePerson)) {
  1069. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  1070. .eq(BaseEntity::getId, vo.getId());
  1071. this.remove(wrapper);
  1072. List<String> list = JSONArray.parseArray(mergedName, String.class);
  1073. if (!CollectionUtils.isEmpty(list)) {
  1074. Map<String, Patent> map = this.getDelPatent(type, projectId, name);
  1075. if (!CollectionUtils.isEmpty(map)) {
  1076. for (String id : map.keySet()) {
  1077. Patent patent = map.get(id);
  1078. List<PatentMergePerson> mergePersonList = new ArrayList<>();
  1079. if (type == 0) {
  1080. if (!CollectionUtils.isEmpty(patent.getApplicant())) {
  1081. List<PatentPerson> applicant = patent.getApplicant();
  1082. for (PatentPerson patentPerson : applicant) {
  1083. if (list.contains(patentPerson.getName())) {
  1084. PatentMergePerson merge = new PatentMergePerson();
  1085. merge.setName(patentPerson.getName());
  1086. merge.setType(patentPerson.getType());
  1087. merge.setOrder(patentPerson.getOrder());
  1088. merge.setProjectId(String.valueOf(projectId));
  1089. mergePersonList.add(merge);
  1090. }
  1091. }
  1092. }
  1093. if (!CollectionUtils.isEmpty(patent.getRightHolder()) && list.size() != mergePersonList.size()) {
  1094. List<PatentPerson> rightHolder = patent.getRightHolder();
  1095. for (PatentPerson patentPerson : rightHolder) {
  1096. if (list.contains(patentPerson.getName())) {
  1097. PatentMergePerson merge = new PatentMergePerson();
  1098. merge.setName(patentPerson.getName());
  1099. merge.setType(patentPerson.getType());
  1100. merge.setOrder(patentPerson.getOrder());
  1101. merge.setProjectId(String.valueOf(projectId));
  1102. mergePersonList.add(merge);
  1103. }
  1104. }
  1105. }
  1106. } else {
  1107. if (!CollectionUtils.isEmpty(patent.getInventor())) {
  1108. List<PatentPerson> inventor = patent.getInventor();
  1109. for (PatentPerson patentPerson : inventor) {
  1110. if (list.contains(patentPerson.getName())) {
  1111. PatentMergePerson merge = new PatentMergePerson();
  1112. merge.setName(patentPerson.getName());
  1113. merge.setType(patentPerson.getType());
  1114. merge.setOrder(patentPerson.getOrder());
  1115. merge.setProjectId(String.valueOf(projectId));
  1116. mergePersonList.add(merge);
  1117. }
  1118. }
  1119. }
  1120. }
  1121. if (type == 0) {
  1122. //申请人
  1123. Map<String, List<PatentMergePerson>> appMap = this.getChildMergePerson(id, projectId, "merge_applicant");
  1124. if (!CollectionUtils.isEmpty(appMap)) {
  1125. for (String appId : appMap.keySet()) {
  1126. if (StringUtils.isNotEmpty(name)) {
  1127. this.delSingleMerge(appId, type, name);
  1128. }
  1129. List<PatentMergePerson> appMergeList = new ArrayList<>(mergePersonList);
  1130. List<PatentMergePerson> appList = appMap.get(appId);
  1131. appMergeList.addAll(appList);
  1132. //添加子文档
  1133. Patent newPatent = new Patent();
  1134. PatentJoin patentJoin = new PatentJoin();
  1135. patentJoin.setParent(id);
  1136. patentJoin.setName("merge_applicat");
  1137. newPatent.setPatentJoin(patentJoin);
  1138. newPatent.setMergeApplicant(appMergeList);
  1139. String child = this.addChild(newPatent, id);
  1140. if (StringUtils.isEmpty(child)) {
  1141. throw new XiaoShiException("删除失败");
  1142. } else {
  1143. //删除原子文档
  1144. this.delete(Arrays.asList(appId));
  1145. }
  1146. }
  1147. }
  1148. //权利人
  1149. Map<String, List<PatentMergePerson>> rightMap = this.getChildMergePerson(id, projectId, "merge_right_holder");
  1150. if (!CollectionUtils.isEmpty(rightMap)) {
  1151. for (String rightId : rightMap.keySet()) {
  1152. if (StringUtils.isNotEmpty(name)) {
  1153. this.delSingleMerge(rightId, type, name);
  1154. }
  1155. ArrayList<PatentMergePerson> rightMergeList = new ArrayList<>(mergePersonList);
  1156. List<PatentMergePerson> rightList = rightMap.get(rightId);
  1157. rightMergeList.addAll(rightList);
  1158. //添加子文档
  1159. Patent newPatent = new Patent();
  1160. PatentJoin patentJoin = new PatentJoin();
  1161. patentJoin.setParent(id);
  1162. patentJoin.setName("merge_right_holder");
  1163. newPatent.setPatentJoin(patentJoin);
  1164. newPatent.setMergeRightHolder(rightMergeList);
  1165. String child = this.addChild(newPatent, id);
  1166. if (StringUtils.isEmpty(child)) {
  1167. throw new XiaoShiException("删除失败");
  1168. } else {
  1169. //删除原子文档
  1170. this.delete(Arrays.asList(rightId));
  1171. }
  1172. }
  1173. }
  1174. } else if (type == 2) {
  1175. Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
  1176. if (!CollectionUtils.isEmpty(inventorMap)) {
  1177. for (String inventorId : inventorMap.keySet()) {
  1178. if (StringUtils.isNotEmpty(name)) {
  1179. this.delSingleMerge(inventorId, type, name);
  1180. }
  1181. ArrayList<PatentMergePerson> inventorMergeList = new ArrayList<>(mergePersonList);
  1182. List<PatentMergePerson> inventorList = inventorMap.get(inventorId);
  1183. inventorMergeList.addAll(inventorList);
  1184. //添加子文档
  1185. Patent newPatent = new Patent();
  1186. PatentJoin patentJoin = new PatentJoin();
  1187. patentJoin.setParent(id);
  1188. patentJoin.setName("merge_inventor");
  1189. newPatent.setPatentJoin(patentJoin);
  1190. newPatent.setMergeInventor(inventorMergeList);
  1191. String child = this.addChild(newPatent, id);
  1192. if (StringUtils.isEmpty(child)) {
  1193. throw new XiaoShiException("删除失败");
  1194. } else {
  1195. //删除原子文档
  1196. this.delete(Arrays.asList(inventorId));
  1197. }
  1198. }
  1199. }
  1200. }
  1201. }
  1202. } else {
  1203. throw new XiaoShiException("删除失败");
  1204. }
  1205. }
  1206. }
  1207. return vo.getId();
  1208. }
  1209. public Map<String, Patent> getDelPatent(Integer type, Integer projectId, String name) throws IOException {
  1210. SearchRequest.Builder builder = new SearchRequest.Builder();
  1211. //设置查询索引
  1212. builder.index("patent");
  1213. List<Query> queries = new ArrayList<>();
  1214. if (type == 0) {
  1215. //合并申请人
  1216. Query idQ1 = QueryBuilders.term(i -> i.field("merge_applicant.project_id").value(projectId));
  1217. Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(name));
  1218. Query bool = QueryBuilders.bool(i -> i.must(idQ1, q1));
  1219. Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(bool));
  1220. Query childQ1 = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(query1));
  1221. //合并权利人
  1222. Query idQ2 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
  1223. Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(name));
  1224. Query bool1 = QueryBuilders.bool(i -> i.must(idQ2, q2));
  1225. Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(bool1));
  1226. Query childQ2 = QueryBuilders.hasChild(i -> i.type("merge_right_holder").query(query2));
  1227. queries.add(childQ1);
  1228. queries.add(childQ2);
  1229. } else {
  1230. Query idQ = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
  1231. Query q = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(name));
  1232. Query bool = QueryBuilders.bool(i -> i.must(idQ, q));
  1233. Query query = QueryBuilders.nested(i -> i.path("merge_inventor").query(bool));
  1234. Query childQ = QueryBuilders.hasChild(i -> i.type("merge_inventor").query(query));
  1235. queries.add(childQ);
  1236. }
  1237. Query query = QueryBuilders.bool(i -> i.should(queries));
  1238. builder.query(query);
  1239. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  1240. List<Hit<Patent>> hits = response.hits().hits();
  1241. Map<String, Patent> map = new HashMap<>();
  1242. for (Hit<Patent> hit : hits) {
  1243. String id = hit.id();
  1244. map.put(id, hit.source());
  1245. }
  1246. return map;
  1247. }
  1248. /**
  1249. * 获取所有国家列表查询
  1250. * @return
  1251. */
  1252. public List<GetAllCountryDTO> getAllCountry() {
  1253. List<GetAllCountryDTO> list = new ArrayList<>();
  1254. List<SystemDict> countries = systemDictMapper.selectList(new LambdaQueryWrapper<SystemDict>()
  1255. .eq(SystemDict::getType, "COUNTRIES"));
  1256. if (!CollectionUtils.isEmpty(countries)) {
  1257. countries.forEach(county -> {
  1258. GetAllCountryDTO dto = new GetAllCountryDTO();
  1259. dto.setLabel(county.getLabel());
  1260. dto.setValue(county.getValue());
  1261. dto.setType(county.getType());
  1262. list.add(dto);
  1263. });
  1264. }
  1265. return list;
  1266. }
  1267. /**
  1268. * 获取国内省份列表查询
  1269. * @return
  1270. */
  1271. public List<GetAllCountryDTO> getAllProvince() {
  1272. List<GetAllCountryDTO> list = new ArrayList<>();
  1273. List<SystemDict> countries = systemDictMapper.selectList(new LambdaQueryWrapper<SystemDict>()
  1274. .eq(SystemDict::getType, "PROVINCE"));
  1275. if (!CollectionUtils.isEmpty(countries)) {
  1276. countries.forEach(county -> {
  1277. GetAllCountryDTO dto = new GetAllCountryDTO();
  1278. dto.setLabel(county.getLabel());
  1279. dto.setValue(county.getValue());
  1280. dto.setType(county.getType());
  1281. list.add(dto);
  1282. });
  1283. }
  1284. return list;
  1285. }
  1286. /**
  1287. * @param patent
  1288. * @throws Exception
  1289. */
  1290. public String addChild(Patent patent, String id) throws Exception {
  1291. IndexResponse indexResponse = client.index(i -> i
  1292. .index("patent")
  1293. .routing(id)
  1294. //传入user对象
  1295. .document(patent)
  1296. );
  1297. return indexResponse.id();
  1298. }
  1299. //更新patent
  1300. public Integer updateChild(Patent patent, String id, String routing) {
  1301. UpdateRequest<Patent, Patent> req;
  1302. req = UpdateRequest.of(
  1303. b -> b.index("patent")
  1304. .id(id)
  1305. .routing(id)
  1306. .doc(patent)
  1307. );
  1308. try {
  1309. client.update(req, Patent.class);
  1310. return 1;
  1311. } catch (IOException e) {
  1312. return -1;
  1313. }
  1314. }
  1315. public Integer delete(List<String> ids) {
  1316. Query query = QueryBuilders.ids(n -> n.values(ids));
  1317. DeleteByQueryRequest request = DeleteByQueryRequest.of(i -> i.index("patent").query(query));
  1318. try {
  1319. client.deleteByQuery(request);
  1320. return 1;
  1321. } catch (IOException e) {
  1322. throw new XiaoShiException("删除失败");
  1323. }
  1324. }
  1325. /**
  1326. * 删除申请人/权利人/发明人合并名称
  1327. *
  1328. * @param id
  1329. * @return
  1330. */
  1331. public Integer delSingleMerge(String id,Integer type, String name) {
  1332. String source = "";
  1333. if (type == 0) {
  1334. source = "if (ctx._source.merge_applicant != null) { ctx._source.merge_applicant.removeIf(item -> item.name == params.name); } if (ctx._source.merge_right_holder != null) { ctx._source.merge_right_holder .removeIf(item -> item.name == params.name); }";
  1335. } else {
  1336. source = "if (ctx._source.merge_inventor != null) { ctx._source.merge_inventor.removeIf(item -> item.name == params.name); }";
  1337. }
  1338. String finalSource = source;
  1339. InlineScript inlineScript = InlineScript.of(i -> i.lang("painless").params("name", JsonData.of(name)).source(finalSource));
  1340. Script script = Script.of(i -> i.inline(inlineScript));
  1341. Query query = QueryBuilders.term(i -> i.field("_id").value(id));
  1342. UpdateByQueryRequest request = UpdateByQueryRequest.of(i -> i.index("patent").script(script).query(query));
  1343. try {
  1344. client.updateByQuery(request);
  1345. return 1;
  1346. } catch (IOException e) {
  1347. return -1;
  1348. }
  1349. }
  1350. public Integer add(String id,Integer type,List<PatentMergePerson> mergePersonList) {
  1351. Integer flag = null;
  1352. for (PatentMergePerson mergePerson : mergePersonList) {
  1353. Map<String, JsonData> map = new HashMap<>();
  1354. map.put("name", JsonData.of(mergePerson.getName()));
  1355. map.put("project_id", JsonData.of(mergePerson.getProjectId()));
  1356. map.put("type", JsonData.of(mergePerson.getType()));
  1357. map.put("order", JsonData.of(mergePerson.getOrder()));
  1358. String source = "";
  1359. if (type == 0) {
  1360. source = "if (ctx._source.merge_applicant != null) {ctx._source.merge_applicant.add(params.data)} else { List list = new ArrayList();list.add(params.data);ctx._source.merge_applicant = list;}" +
  1361. "if (ctx._source.merge_right_holder != null) { ctx._source.merge_right_holder.add(params.data)} else { List list = new ArrayList();list.add(params.data);ctx._source.merge_right_holder = list;}";
  1362. } else {
  1363. source = "if (ctx._source.merge_inventor != null) {ctx._source.merge_inventor.add(params.data)} else { List list = new ArrayList();list.add(params.data);ctx._source.merge_inventor = list;}";
  1364. }
  1365. String finalSource = source;
  1366. InlineScript inlineScript = InlineScript.of(i -> i.lang("painless").params("data", JsonData.of(map)).source(finalSource));
  1367. Script script = Script.of(i -> i.inline(inlineScript));
  1368. Query query = QueryBuilders.term(i -> i.field("_id").value(id));
  1369. UpdateByQueryRequest request = UpdateByQueryRequest.of(i -> i.index("patent").script(script).query(query));
  1370. try {
  1371. client.updateByQuery(request);
  1372. flag += 1;
  1373. } catch (IOException e) {
  1374. flag += -1;
  1375. }
  1376. }
  1377. return flag;
  1378. }
  1379. public Integer edit(String id,Integer type,String oldName, String newName) {
  1380. String source = "";
  1381. if (type == 0) {
  1382. source = "if (ctx._source.merge_applicant != null) {for (item in ctx._source.merge_applicant) {if(item['name']==params.oldName){item['name']=params.newName}}}" +
  1383. "if (ctx._source.merge_right_holder != null) {for (item in ctx._source.merge_right_holder) {if(item['name']==params.oldName){item['name']=params.newName}}}";
  1384. } else {
  1385. source = "if (ctx._source.merge_inventor != null) {for (item in ctx._source.merge_inventor) {if(item['name']==params.oldName){item['name']=params.newName}}}";
  1386. }
  1387. String finalSource = source;
  1388. Map<String, JsonData> map = new HashMap<>();
  1389. map.put("oldName", JsonData.of(oldName));
  1390. map.put("newName", JsonData.of(newName));
  1391. InlineScript inlineScript = InlineScript.of(i -> i.lang("painless").params(map).source(finalSource));
  1392. Script script = Script.of(i -> i.inline(inlineScript));
  1393. Query query = QueryBuilders.term(i -> i.field("_id").value(id));
  1394. UpdateByQueryRequest request = UpdateByQueryRequest.of(i -> i.index("patent").script(script).query(query));
  1395. try {
  1396. client.updateByQuery(request);
  1397. return 1;
  1398. } catch (IOException e) {
  1399. return -1;
  1400. }
  1401. }
  1402. }