MergePersonService.java 78 KB

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