MergePersonService.java 70 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328
  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() > 1) {
  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_applicat")) {
  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. List<String> nameList = new ArrayList<>();
  312. if (!CollectionUtils.isEmpty(mergedNames)) {
  313. for (String mergedName : mergedNames) {
  314. MergePerson person = mergePersonMapper.selectOne(new LambdaQueryWrapper<MergePerson>()
  315. .eq(MergePerson::getProjectId, vo.getProjectId())
  316. .eq(MergePerson::getName, mergedName));
  317. String name = person.getMergedName();
  318. List<String> getNames = JSONArray.parseArray(name, String.class);
  319. nameList.addAll(getNames);
  320. MergePersonIdVO personIdVO = new MergePersonIdVO();
  321. personIdVO.setId(person.getId());
  322. personIdVO.setType(person.getType());
  323. this.delMergePerson(personIdVO);
  324. }
  325. }
  326. if (!CollectionUtils.isEmpty(mergeName)) {
  327. nameList.addAll(mergeName);
  328. }
  329. MergePersonVO personVO = new MergePersonVO();
  330. personVO.setProjectId(vo.getProjectId());
  331. personVO.setType(vo.getType());
  332. personVO.setName(vo.getName());
  333. personVO.setAbbreviation(vo.getAbbreviation());
  334. personVO.setCountry(vo.getCountry());
  335. personVO.setProvince(vo.getProvince());
  336. personVO.setAddress(vo.getAddress());
  337. personVO.setRemark(vo.getRemark());
  338. personVO.setMergedName(nameList);
  339. return this.mergePerson(personVO);
  340. }
  341. /**
  342. * 专利列表上编辑发明人/权利人/申请人合并
  343. * @param vo
  344. * @return
  345. * @throws Exception
  346. */
  347. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  348. public Integer updateMergePerson(MergePersonVO vo) throws Exception {
  349. //获取登陆人信息 用于设置创建人
  350. PersonnelVO personnelVO = new PersonnelVO();
  351. Integer type = vo.getType();
  352. try {
  353. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  354. } catch (Exception e) {
  355. throw new XiaoShiException("未登录");
  356. }
  357. //判断是否名称重复
  358. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  359. .eq(MergePerson::getProjectId, vo.getProjectId())
  360. .eq(MergePerson::getName, vo.getName());
  361. List<MergePerson> list = mergePersonMapper.selectList(wrapper);
  362. if (list.size() > 1) {
  363. throw new XiaoShiException("合并名称不可重复");
  364. }
  365. //获取老专利
  366. MergePerson person = this.getById(vo.getId());
  367. String name = person.getName();
  368. Integer projectId = person.getProjectId();
  369. if (ObjectUtil.isNotEmpty(person)) {
  370. BeanUtils.copyProperties(vo, person);
  371. person.setCreateId(personnelVO.getId());
  372. person.setCreateTime(new Date());
  373. person.updateById();
  374. if (!name.equals(vo.getName())) {
  375. SearchRequest.Builder builder = new SearchRequest.Builder();
  376. //设置查询索引
  377. builder.index("patent");
  378. List<Query> queries = new ArrayList<>();
  379. if (type == 0) {
  380. //合并申请人
  381. Query idQ1 = QueryBuilders.term(i -> i.field("merge_applicant.project_id").value(projectId));
  382. Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(name));
  383. Query bool = QueryBuilders.bool(i -> i.must(idQ1, q1));
  384. Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(bool));
  385. Query childQ1 = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(query1));
  386. //合并权利人
  387. Query idQ2 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
  388. Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(name));
  389. Query bool1 = QueryBuilders.bool(i -> i.must(idQ2, q2));
  390. Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(bool1));
  391. Query childQ2 = QueryBuilders.hasChild(i -> i.type("merge_right_holder").query(query2));
  392. queries.add(childQ1);
  393. queries.add(childQ2);
  394. } else {
  395. Query idQ = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
  396. Query q = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(name));
  397. Query bool = QueryBuilders.bool(i -> i.must(idQ, q));
  398. Query query = QueryBuilders.nested(i -> i.path("merge_inventor").query(bool));
  399. Query childQ = QueryBuilders.hasChild(i -> i.type("merge_inventor").query(query));
  400. queries.add(childQ);
  401. }
  402. Query query = QueryBuilders.bool(i -> i.should(queries));
  403. builder.query(query);
  404. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  405. List<Hit<Patent>> hits = response.hits().hits();
  406. Map<String, Patent> map = new HashMap<>();
  407. for (Hit<Patent> hit : hits) {
  408. String id = hit.id();
  409. map.put(id, hit.source());
  410. }
  411. if (!CollectionUtils.isEmpty(map)) {
  412. for (String id : map.keySet()) {
  413. if (type == 0) {
  414. //申请人
  415. Map<String, List<PatentMergePerson>> appMap = this.getChildMergePerson(id, projectId, "merge_applicant");
  416. if (!CollectionUtils.isEmpty(appMap)) {
  417. for (String appId : appMap.keySet()) {
  418. this.edit(appId, type, name, vo.getName());
  419. }
  420. }
  421. //权利人
  422. Map<String, List<PatentMergePerson>> rightMap = this.getChildMergePerson(id, projectId, "merge_right_holder");
  423. if (!CollectionUtils.isEmpty(rightMap)) {
  424. for (String rightId : rightMap.keySet()) {
  425. this.edit(rightId, type, name, vo.getName());
  426. }
  427. }
  428. } else if (type == 2) {
  429. Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
  430. if (!CollectionUtils.isEmpty(inventorMap)) {
  431. for (String inventorId : inventorMap.keySet()) {
  432. this.edit(inventorId, type, name, vo.getName());
  433. }
  434. }
  435. }
  436. }
  437. } else {
  438. throw new XiaoShiException("编辑失败");
  439. }
  440. }
  441. } else {
  442. person = new MergePerson();
  443. }
  444. return person.getId();
  445. }
  446. /**
  447. * 发明人/权利人/申请人合并列表查询
  448. * @param vo
  449. * @return
  450. */
  451. public Records selectMergePersonList(MergePersonQueryVO vo) {
  452. List<MergePersonQueryDTO> list = new ArrayList<>();
  453. IPage<MergePerson> page = new Page<>(vo.getPageNum(), vo.getPageSize());
  454. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  455. .eq(MergePerson::getProjectId, vo.getProjectId())
  456. .eq(MergePerson::getType, vo.getType())
  457. .eq(StringUtils.isNotEmpty(vo.getCountry()), MergePerson::getCountry, vo.getCountry())
  458. .like(StringUtils.isNotEmpty(vo.getName()), MergePerson::getName, vo.getName());
  459. IPage<MergePerson> record = mergePersonMapper.selectPage(page, wrapper);
  460. for (MergePerson person : record.getRecords()) {
  461. MergePersonQueryDTO dto = new MergePersonQueryDTO();
  462. dto.setId(person.getId());
  463. dto.setProjectId(person.getProjectId());
  464. dto.setType(person.getType());
  465. dto.setName(person.getName());
  466. dto.setAddress(person.getAddress());
  467. dto.setCountry(person.getCountry());
  468. dto.setProvince(person.getProvince());
  469. dto.setRemark(person.getRemark());
  470. dto.setAbbreviation(person.getAbbreviation());
  471. dto.setCreateTime(person.getCreateTime());
  472. List<String> names = JSONArray.parseArray(person.getMergedName(), String.class);
  473. dto.setMergedName(names);
  474. list.add(dto);
  475. }
  476. Records records = new Records();
  477. records.setCurrent(record.getCurrent());
  478. records.setSize(record.getSize());
  479. records.setData(list);
  480. records.setTotal(record.getTotal());
  481. return records;
  482. }
  483. /**
  484. * 合并人员详情
  485. * @param vo
  486. * @return
  487. */
  488. public MergePersonQueryDTO selectMergePersonDetail(MergePersonIdVO vo) {
  489. MergePersonQueryDTO dto = new MergePersonQueryDTO();
  490. MergePerson person = mergePersonMapper.selectById(vo.getId());
  491. if (ObjectUtil.isNotEmpty(person)) {
  492. BeanUtils.copyProperties(person, dto);
  493. List<String> names = JSONArray.parseArray(person.getMergedName(), String.class);
  494. dto.setMergedName(names);
  495. }
  496. return dto;
  497. }
  498. /**
  499. * 获取所有发明人/权利人/申请人
  500. * @param vo
  501. * @return
  502. * @throws Exception
  503. */
  504. public Records getMergePerson(GetAllPersonVO vo) throws Exception {
  505. Integer projectId = vo.getProjectId();
  506. Long pageNum = vo.getPageNum();
  507. Long pageSize = vo.getPageSize();
  508. Integer type = vo.getType();
  509. String condition = vo.getSearchQuery();
  510. List<String> conditionList = new ArrayList<>();
  511. if (StringUtils.isNotEmpty(condition)) {
  512. String s = condition.substring(condition.indexOf("=") + 1);
  513. if (s.contains("or")) {
  514. String[] split = s.split("or");
  515. conditionList.addAll(Arrays.asList(split));
  516. } else {
  517. conditionList.add(s);
  518. }
  519. }
  520. List<GetEsAllPersonDTO> personDTOS = new ArrayList<>();
  521. SearchRequest.Builder builder = new SearchRequest.Builder();
  522. //设置查询索引
  523. builder.index("patent");
  524. if (!CollectionUtils.isEmpty(conditionList)) {
  525. for (String name : conditionList) {
  526. List<Query> queries = new ArrayList<>();
  527. if (type == 0) {
  528. //合并申请人
  529. Query idQ1 = QueryBuilders.term(i -> i.field("merge_applicant.project_id").value(projectId));
  530. Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(name));
  531. Query bool = QueryBuilders.bool(i -> i.must(idQ1, q1));
  532. Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(bool));
  533. Query childQ1 = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(query1));
  534. //合并权利人
  535. Query idQ2 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
  536. Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(name));
  537. Query bool1 = QueryBuilders.bool(i -> i.must(idQ2, q2));
  538. Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(bool1));
  539. Query childQ2 = QueryBuilders.hasChild(i -> i.type("merge_right_holder").query(query2));
  540. queries.add(childQ1);
  541. queries.add(childQ2);
  542. } else {
  543. Query idQ = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
  544. Query q = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(name));
  545. Query bool = QueryBuilders.bool(i -> i.must(idQ, q));
  546. Query query = QueryBuilders.nested(i -> i.path("merge_inventor").query(bool));
  547. Query childQ = QueryBuilders.hasChild(i -> i.type("merge_inventor").query(query));
  548. queries.add(childQ);
  549. }
  550. Query bool = QueryBuilders.bool(i -> i.should(queries));
  551. builder.query(bool);
  552. //分页
  553. // if (pageNum > 0 && pageSize > 0) {
  554. // builder.from((pageNum.intValue() - 1) * pageSize.intValue()).size(pageSize.intValue());
  555. // }
  556. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  557. List<Hit<Patent>> hits = response.hits().hits();
  558. Map<String, Patent> map = new HashMap<>();
  559. for (Hit<Patent> hit : hits) {
  560. String id = hit.id();
  561. map.put(id, hit.source());
  562. }
  563. if (!CollectionUtils.isEmpty(map)) {
  564. for (String id : map.keySet()) {
  565. GetEsAllPersonDTO personDTO = new GetEsAllPersonDTO();
  566. if (type == 0) {
  567. //申请人
  568. Map<String, List<PatentMergePerson>> appMap = this.getChildMergePerson(id, projectId, "merge_applicant");
  569. if (!CollectionUtils.isEmpty(appMap)) {
  570. for (String appId : appMap.keySet()) {
  571. List<PatentMergePerson> appList = appMap.get(appId);
  572. List<String> collect = appList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
  573. personDTO.setMergeApplicant(collect);
  574. }
  575. }
  576. //权利人
  577. Map<String, List<PatentMergePerson>> rightMap = this.getChildMergePerson(id, projectId, "merge_right_holder");
  578. if (!CollectionUtils.isEmpty(rightMap)) {
  579. for (String rightId : rightMap.keySet()) {
  580. List<PatentMergePerson> rightList = rightMap.get(rightId);
  581. List<String> collect = rightList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
  582. personDTO.setMergeRightHolder(collect);
  583. }
  584. }
  585. } else {
  586. //发明人
  587. Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
  588. if (!CollectionUtils.isEmpty(inventorMap)) {
  589. for (String inventorId : inventorMap.keySet()) {
  590. List<PatentMergePerson> inventorList = inventorMap.get(inventorId);
  591. List<String> collect = inventorList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
  592. personDTO.setMergeInventor(collect);
  593. }
  594. }
  595. }
  596. personDTOS.add(personDTO);
  597. }
  598. }
  599. }
  600. } else {
  601. List<Query> queries = new ArrayList<>();
  602. if (type == 0) {
  603. Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.project_id").value(projectId));
  604. Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(q1));
  605. Query childQ1 = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(query1));
  606. queries.add(childQ1);
  607. Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
  608. Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(q2));
  609. Query childQ2 = QueryBuilders.hasChild(i -> i.type("merge_right_holder").query(query2));
  610. queries.add(childQ2);
  611. } else {
  612. Query q = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
  613. Query query = QueryBuilders.nested(i -> i.path("merge_inventor").query(q));
  614. Query childQ = QueryBuilders.hasChild(i -> i.type("merge_inventor").query(query));
  615. queries.add(childQ);
  616. }
  617. Query bool = QueryBuilders.bool(i -> i.should(queries));
  618. builder.query(bool);
  619. //分页
  620. // if (pageNum > 0 && pageSize > 0) {
  621. // builder.from((pageNum.intValue() - 1) * pageSize.intValue()).size(pageSize.intValue());
  622. // }
  623. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  624. List<Hit<Patent>> hits = response.hits().hits();
  625. Map<String, Patent> map = new HashMap<>();
  626. for (Hit<Patent> hit : hits) {
  627. String id = hit.id();
  628. map.put(id, hit.source());
  629. }
  630. if (!CollectionUtils.isEmpty(map)) {
  631. for (String id : map.keySet()) {
  632. GetEsAllPersonDTO personDTO = new GetEsAllPersonDTO();
  633. if (type == 0) {
  634. //申请人
  635. Map<String, List<PatentMergePerson>> appMap = this.getChildMergePerson(id, projectId, "merge_applicant");
  636. if (!CollectionUtils.isEmpty(appMap)) {
  637. for (String appId : appMap.keySet()) {
  638. List<PatentMergePerson> appList = appMap.get(appId);
  639. List<String> collect = appList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
  640. personDTO.setMergeApplicant(collect);
  641. }
  642. }
  643. //权利人
  644. Map<String, List<PatentMergePerson>> rightMap = this.getChildMergePerson(id, projectId, "merge_right_holder");
  645. if (!CollectionUtils.isEmpty(rightMap)) {
  646. for (String rightId : rightMap.keySet()) {
  647. List<PatentMergePerson> rightList = rightMap.get(rightId);
  648. List<String> collect = rightList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
  649. personDTO.setMergeRightHolder(collect);
  650. }
  651. }
  652. } else {
  653. //发明人
  654. Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
  655. if (!CollectionUtils.isEmpty(inventorMap)) {
  656. for (String inventorId : inventorMap.keySet()) {
  657. List<PatentMergePerson> inventorList = inventorMap.get(inventorId);
  658. List<String> collect = inventorList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
  659. personDTO.setMergeInventor(collect);
  660. }
  661. }
  662. }
  663. personDTOS.add(personDTO);
  664. }
  665. }
  666. }
  667. //es申请人/权利人
  668. List<String> mergeList = new ArrayList<>();
  669. if (!CollectionUtils.isEmpty(personDTOS)) {
  670. if (type == 0) {
  671. for (GetEsAllPersonDTO personDTO : personDTOS) {
  672. List<String> appList = new ArrayList<>();
  673. if (!CollectionUtils.isEmpty(personDTO.getMergeApplicant())) {
  674. appList = personDTO.getMergeApplicant();
  675. mergeList.addAll(appList);
  676. }
  677. List<String> rightList = new ArrayList<>();
  678. if (!CollectionUtils.isEmpty(personDTO.getMergeRightHolder())) {
  679. rightList = personDTO.getMergeRightHolder();
  680. mergeList.addAll(rightList);
  681. }
  682. }
  683. } else {
  684. for (GetEsAllPersonDTO personDTO : personDTOS) {
  685. List<String> inventorList = new ArrayList<>();
  686. if (!CollectionUtils.isEmpty(personDTO.getMergeInventor())) {
  687. inventorList = personDTO.getMergeInventor();
  688. mergeList.addAll(inventorList);
  689. }
  690. }
  691. }
  692. }
  693. List<GetAllPersonDTO> personDTOList = new ArrayList<>();
  694. List<GetAllPersonDTO> mergePersonList = new ArrayList<>();
  695. List<GetAllPersonDTO> personList = new ArrayList<>();
  696. List<String> nameList = mergeList.stream().distinct().collect(Collectors.toList());
  697. for (String key : nameList) {
  698. MergePerson person = mergePersonMapper.selectOne(new LambdaQueryWrapper<MergePerson>()
  699. .eq(MergePerson::getName, key)
  700. .eq(MergePerson::getProjectId, projectId));
  701. if (ObjectUtils.isNotEmpty(person)) {
  702. GetAllPersonDTO dto = new GetAllPersonDTO();
  703. dto.setName(person.getName());
  704. dto.setMergeId(person.getId());
  705. dto.setType(person.getType());
  706. dto.setRemark(person.getRemark());
  707. dto.setAbbreviation(person.getAbbreviation());
  708. dto.setCountry(person.getCountry());
  709. dto.setProvince(person.getProvince());
  710. dto.setAddress(person.getAddress());
  711. mergePersonList.add(dto);
  712. } else {
  713. GetAllPersonDTO dto = new GetAllPersonDTO();
  714. dto.setName(key);
  715. personList.add(dto);
  716. }
  717. }
  718. if (!CollectionUtils.isEmpty(mergePersonList)) {
  719. List<GetAllPersonDTO> collect = mergePersonList.stream().sorted(Comparator.comparing(GetAllPersonDTO::getName)).collect(Collectors.toList());
  720. personDTOList.addAll(collect);
  721. }
  722. if (!CollectionUtils.isEmpty(personList)) {
  723. List<GetAllPersonDTO> collect = personList.stream().sorted(Comparator.comparing(GetAllPersonDTO::getName)).collect(Collectors.toList());
  724. personDTOList.addAll(collect);
  725. }
  726. List<GetAllPersonDTO> collect = personDTOList.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
  727. Records records = new Records();
  728. records.setCurrent(pageNum);
  729. records.setSize(pageSize);
  730. records.setData(collect);
  731. records.setTotal((long) personDTOList.size());
  732. return records;
  733. }
  734. /**
  735. * 发明人/权利人/申请人合并后的名称移除
  736. * @param vo
  737. * @return
  738. * @throws Exception
  739. */
  740. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  741. public Integer delMergedName(MergedNameVO vo) throws Exception {
  742. Integer type = vo.getType();
  743. //要移除的名字
  744. String delName = vo.getDelName();
  745. //合并后的名称
  746. String name = vo.getName();
  747. Integer projectId = vo.getProjectId();
  748. MergePerson mergePerson = mergePersonMapper.selectOne(new LambdaQueryWrapper<MergePerson>()
  749. .eq(MergePerson::getName, name)
  750. .eq(MergePerson::getProjectId, projectId));
  751. if (ObjectUtil.isNotEmpty(mergePerson)) {
  752. Integer personId = mergePerson.getId();
  753. String mergedName = mergePerson.getMergedName();
  754. List<String> list = JSONArray.parseArray(mergedName, String.class);
  755. list.remove(delName);
  756. MergePerson person = mergePersonMapper.selectById(personId);
  757. person.setMergedName(JSONArray.toJSONString(list));
  758. person.updateById();
  759. //移除后最后剩下的名称
  760. String finalMergedName = person.getMergedName();
  761. List<String> nameDatas = JSONArray.parseArray(finalMergedName, String.class);
  762. SearchRequest.Builder builder = new SearchRequest.Builder();
  763. //设置查询索引
  764. builder.index("patent");
  765. List<Query> queries = new ArrayList<>();
  766. if (type == 0) {
  767. //合并申请人
  768. Query idQ1 = QueryBuilders.term(i -> i.field("merge_applicant.project_id").value(projectId));
  769. Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(name));
  770. Query bool = QueryBuilders.bool(i -> i.must(idQ1, q1));
  771. Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(bool));
  772. Query childQ1 = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(query1));
  773. //合并权利人
  774. Query idQ2 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
  775. Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(name));
  776. Query bool1 = QueryBuilders.bool(i -> i.must(idQ2, q2));
  777. Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(bool1));
  778. Query childQ2 = QueryBuilders.hasChild(i -> i.type("merge_right_holder").query(query2));
  779. queries.add(childQ1);
  780. queries.add(childQ2);
  781. } else {
  782. Query idQ = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
  783. Query q = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(name));
  784. Query bool = QueryBuilders.bool(i -> i.must(idQ, q));
  785. Query query = QueryBuilders.nested(i -> i.path("merge_inventor").query(bool));
  786. Query childQ = QueryBuilders.hasChild(i -> i.type("merge_inventor").query(query));
  787. queries.add(childQ);
  788. }
  789. Query query = QueryBuilders.bool(i -> i.should(queries));
  790. builder.query(query);
  791. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  792. List<Hit<Patent>> hits = response.hits().hits();
  793. Map<String, Patent> map = new HashMap<>();
  794. for (Hit<Patent> hit : hits) {
  795. String id = hit.id();
  796. map.put(id, hit.source());
  797. }
  798. if (!CollectionUtils.isEmpty(map)) {
  799. for (String id : map.keySet()) {
  800. Patent patent = map.get(id);
  801. List<PatentMergePerson> mergePersonList = new ArrayList<>();
  802. if (type == 0) {
  803. if (!CollectionUtils.isEmpty(patent.getApplicant())) {
  804. List<PatentPerson> applicant = patent.getApplicant();
  805. List<String> collect = applicant.stream().map(PatentPerson::getName).collect(Collectors.toList());
  806. if (collect.contains(delName)) {
  807. for (PatentPerson patentPerson : applicant) {
  808. if (delName.equals(patentPerson.getName())) {
  809. PatentMergePerson merge = new PatentMergePerson();
  810. merge.setName(delName);
  811. merge.setType(patentPerson.getType());
  812. merge.setOrder(patentPerson.getOrder());
  813. merge.setProjectId(String.valueOf(projectId));
  814. mergePersonList.add(merge);
  815. }
  816. }
  817. }
  818. }
  819. if (CollectionUtils.isEmpty(mergePersonList) && !CollectionUtils.isEmpty(patent.getRightHolder())) {
  820. List<PatentPerson> rightHolder = patent.getRightHolder();
  821. List<String> collect = rightHolder.stream().map(PatentPerson::getName).collect(Collectors.toList());
  822. if (collect.contains(delName)) {
  823. for (PatentPerson patentPerson : rightHolder) {
  824. if (delName.equals(patentPerson.getName())) {
  825. PatentMergePerson merge = new PatentMergePerson();
  826. merge.setName(delName);
  827. merge.setType(patentPerson.getType());
  828. merge.setOrder(patentPerson.getOrder());
  829. merge.setProjectId(String.valueOf(projectId));
  830. mergePersonList.add(merge);
  831. }
  832. }
  833. }
  834. }
  835. } else {
  836. if (!CollectionUtils.isEmpty(patent.getInventor())) {
  837. List<PatentPerson> inventor = patent.getInventor();
  838. List<String> collect = inventor.stream().map(PatentPerson::getName).collect(Collectors.toList());
  839. if (collect.contains(delName)) {
  840. for (PatentPerson patentPerson : inventor) {
  841. if (delName.equals(patentPerson.getName())) {
  842. PatentMergePerson merge = new PatentMergePerson();
  843. merge.setName(delName);
  844. merge.setType(patentPerson.getType());
  845. merge.setOrder(patentPerson.getOrder());
  846. merge.setProjectId(String.valueOf(projectId));
  847. mergePersonList.add(merge);
  848. }
  849. }
  850. }
  851. }
  852. }
  853. if (type == 0) {
  854. //申请人
  855. Map<String, List<PatentMergePerson>> appMap = this.getChildMergePerson(id, projectId, "merge_applicant");
  856. if (!CollectionUtils.isEmpty(appMap)) {
  857. for (String appId : appMap.keySet()) {
  858. if (CollectionUtils.isEmpty(nameDatas)) {
  859. this.delSingleMerge(appId, type, name);
  860. }
  861. List<PatentMergePerson> appMergeList = new ArrayList<>(mergePersonList);
  862. List<PatentMergePerson> appList = appMap.get(appId);
  863. appMergeList.addAll(appList);
  864. //添加子文档
  865. Patent newPatent = new Patent();
  866. PatentJoin patentJoin = new PatentJoin();
  867. patentJoin.setParent(id);
  868. patentJoin.setName("merge_applicat");
  869. newPatent.setPatentJoin(patentJoin);
  870. newPatent.setMergeApplicant(appMergeList);
  871. String child = this.addChild(newPatent, id);
  872. if (StringUtils.isEmpty(child)) {
  873. throw new XiaoShiException("移除失败");
  874. } else {
  875. //删除原子文档
  876. this.delete(Arrays.asList(appId));
  877. }
  878. }
  879. }
  880. //权利人
  881. Map<String, List<PatentMergePerson>> rightMap = this.getChildMergePerson(id, projectId, "merge_right_holder");
  882. if (!CollectionUtils.isEmpty(rightMap)) {
  883. for (String rightId : rightMap.keySet()) {
  884. if (CollectionUtils.isEmpty(nameDatas)) {
  885. this.delSingleMerge(rightId, type, name);
  886. }
  887. ArrayList<PatentMergePerson> rightMergeList = new ArrayList<>(mergePersonList);
  888. List<PatentMergePerson> rightList = rightMap.get(rightId);
  889. rightMergeList.addAll(rightList);
  890. //添加子文档
  891. Patent newPatent = new Patent();
  892. PatentJoin patentJoin = new PatentJoin();
  893. patentJoin.setParent(id);
  894. patentJoin.setName("merge_right_holder");
  895. newPatent.setPatentJoin(patentJoin);
  896. newPatent.setMergeRightHolder(rightMergeList);
  897. String child = this.addChild(newPatent, id);
  898. if (StringUtils.isEmpty(child)) {
  899. throw new XiaoShiException("移除失败");
  900. } else {
  901. //删除原子文档
  902. this.delete(Arrays.asList(rightId));
  903. }
  904. }
  905. }
  906. } else if (type == 2) {
  907. Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
  908. if (!CollectionUtils.isEmpty(inventorMap)) {
  909. for (String inventorId : inventorMap.keySet()) {
  910. if (CollectionUtils.isEmpty(nameDatas)) {
  911. this.delSingleMerge(inventorId, type, mergedName);
  912. }
  913. ArrayList<PatentMergePerson> inventorMergeList = new ArrayList<>(mergePersonList);
  914. List<PatentMergePerson> inventorList = inventorMap.get(inventorId);
  915. inventorMergeList.addAll(inventorList);
  916. //添加子文档
  917. Patent newPatent = new Patent();
  918. PatentJoin patentJoin = new PatentJoin();
  919. patentJoin.setParent(id);
  920. patentJoin.setName("merge_inventor");
  921. newPatent.setPatentJoin(patentJoin);
  922. newPatent.setMergeInventor(inventorMergeList);
  923. String child = this.addChild(newPatent, id);
  924. if (StringUtils.isEmpty(child)) {
  925. throw new XiaoShiException("移除失败");
  926. } else {
  927. //删除原子文档
  928. this.delete(Arrays.asList(inventorId));
  929. }
  930. }
  931. }
  932. }
  933. }
  934. } else {
  935. throw new XiaoShiException("移除失败");
  936. }
  937. }
  938. return mergePerson.getId();
  939. }
  940. /**
  941. * 发明人/权利人/申请人合并记录删除
  942. * @param vo
  943. * @return
  944. * @throws Exception
  945. */
  946. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  947. public Integer delMergePerson(MergePersonIdVO vo) throws Exception {
  948. Integer type = vo.getType();
  949. MergePerson mergePerson = mergePersonMapper.selectById(vo.getId());
  950. //合并后的名称
  951. String name = mergePerson.getName();
  952. //专题库id
  953. Integer projectId = mergePerson.getProjectId();
  954. //合并的名称
  955. String mergedName = mergePerson.getMergedName();
  956. if (ObjectUtil.isNotEmpty(mergePerson)) {
  957. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  958. .eq(BaseEntity::getId, vo.getId());
  959. this.remove(wrapper);
  960. List<String> list = JSONArray.parseArray(mergedName, String.class);
  961. if (!CollectionUtils.isEmpty(list)) {
  962. SearchRequest.Builder builder = new SearchRequest.Builder();
  963. //设置查询索引
  964. builder.index("patent");
  965. List<Query> queries = new ArrayList<>();
  966. if (type == 0) {
  967. //合并申请人
  968. Query idQ1 = QueryBuilders.term(i -> i.field("merge_applicant.project_id").value(projectId));
  969. Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(name));
  970. Query bool = QueryBuilders.bool(i -> i.must(idQ1, q1));
  971. Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(bool));
  972. Query childQ1 = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(query1));
  973. //合并权利人
  974. Query idQ2 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
  975. Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(name));
  976. Query bool1 = QueryBuilders.bool(i -> i.must(idQ2, q2));
  977. Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(bool1));
  978. Query childQ2 = QueryBuilders.hasChild(i -> i.type("merge_right_holder").query(query2));
  979. queries.add(childQ1);
  980. queries.add(childQ2);
  981. } else {
  982. Query idQ = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
  983. Query q = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(name));
  984. Query bool = QueryBuilders.bool(i -> i.must(idQ, q));
  985. Query query = QueryBuilders.nested(i -> i.path("merge_inventor").query(bool));
  986. Query childQ = QueryBuilders.hasChild(i -> i.type("merge_inventor").query(query));
  987. queries.add(childQ);
  988. }
  989. Query query = QueryBuilders.bool(i -> i.should(queries));
  990. builder.query(query);
  991. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  992. List<Hit<Patent>> hits = response.hits().hits();
  993. Map<String, Patent> map = new HashMap<>();
  994. for (Hit<Patent> hit : hits) {
  995. String id = hit.id();
  996. map.put(id, hit.source());
  997. }
  998. if (!CollectionUtils.isEmpty(map)) {
  999. for (String id : map.keySet()) {
  1000. Patent patent = map.get(id);
  1001. List<PatentMergePerson> mergePersonList = new ArrayList<>();
  1002. if (type == 0) {
  1003. if (!CollectionUtils.isEmpty(patent.getApplicant())) {
  1004. List<PatentPerson> applicant = patent.getApplicant();
  1005. for (PatentPerson patentPerson : applicant) {
  1006. if (list.contains(patentPerson.getName())) {
  1007. PatentMergePerson merge = new PatentMergePerson();
  1008. merge.setName(patentPerson.getName());
  1009. merge.setType(patentPerson.getType());
  1010. merge.setOrder(patentPerson.getOrder());
  1011. merge.setProjectId(String.valueOf(projectId));
  1012. mergePersonList.add(merge);
  1013. }
  1014. }
  1015. }
  1016. if (!CollectionUtils.isEmpty(patent.getRightHolder()) && list.size() != mergePersonList.size()) {
  1017. List<PatentPerson> rightHolder = patent.getRightHolder();
  1018. for (PatentPerson patentPerson : rightHolder) {
  1019. if (list.contains(patentPerson.getName())) {
  1020. PatentMergePerson merge = new PatentMergePerson();
  1021. merge.setName(patentPerson.getName());
  1022. merge.setType(patentPerson.getType());
  1023. merge.setOrder(patentPerson.getOrder());
  1024. merge.setProjectId(String.valueOf(projectId));
  1025. mergePersonList.add(merge);
  1026. }
  1027. }
  1028. }
  1029. } else {
  1030. if (!CollectionUtils.isEmpty(patent.getInventor())) {
  1031. List<PatentPerson> inventor = patent.getInventor();
  1032. for (PatentPerson patentPerson : inventor) {
  1033. if (list.contains(patentPerson.getName())) {
  1034. PatentMergePerson merge = new PatentMergePerson();
  1035. merge.setName(patentPerson.getName());
  1036. merge.setType(patentPerson.getType());
  1037. merge.setOrder(patentPerson.getOrder());
  1038. merge.setProjectId(String.valueOf(projectId));
  1039. mergePersonList.add(merge);
  1040. }
  1041. }
  1042. }
  1043. }
  1044. if (type == 0) {
  1045. //申请人
  1046. Map<String, List<PatentMergePerson>> appMap = this.getChildMergePerson(id, projectId, "merge_applicant");
  1047. if (!CollectionUtils.isEmpty(appMap)) {
  1048. for (String appId : appMap.keySet()) {
  1049. List<PatentMergePerson> appMergeList = new ArrayList<>(mergePersonList);
  1050. List<PatentMergePerson> appList = appMap.get(appId);
  1051. appMergeList.addAll(appList);
  1052. //添加子文档
  1053. Patent newPatent = new Patent();
  1054. PatentJoin patentJoin = new PatentJoin();
  1055. patentJoin.setParent(id);
  1056. patentJoin.setName("merge_applicat");
  1057. newPatent.setPatentJoin(patentJoin);
  1058. newPatent.setMergeApplicant(appMergeList);
  1059. String child = this.addChild(newPatent, id);
  1060. if (StringUtils.isEmpty(child)) {
  1061. throw new XiaoShiException("删除失败");
  1062. } else {
  1063. //删除原子文档
  1064. this.delete(Arrays.asList(appId));
  1065. }
  1066. }
  1067. }
  1068. //权利人
  1069. Map<String, List<PatentMergePerson>> rightMap = this.getChildMergePerson(id, projectId, "merge_right_holder");
  1070. if (!CollectionUtils.isEmpty(rightMap)) {
  1071. for (String rightId : rightMap.keySet()) {
  1072. ArrayList<PatentMergePerson> rightMergeList = new ArrayList<>(mergePersonList);
  1073. List<PatentMergePerson> rightList = rightMap.get(rightId);
  1074. rightMergeList.addAll(rightList);
  1075. //添加子文档
  1076. Patent newPatent = new Patent();
  1077. PatentJoin patentJoin = new PatentJoin();
  1078. patentJoin.setParent(id);
  1079. patentJoin.setName("merge_right_holder");
  1080. newPatent.setPatentJoin(patentJoin);
  1081. newPatent.setMergeRightHolder(rightMergeList);
  1082. String child = this.addChild(newPatent, id);
  1083. if (StringUtils.isEmpty(child)) {
  1084. throw new XiaoShiException("删除失败");
  1085. } else {
  1086. //删除原子文档
  1087. this.delete(Arrays.asList(rightId));
  1088. }
  1089. }
  1090. }
  1091. } else if (type == 2) {
  1092. Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
  1093. if (!CollectionUtils.isEmpty(inventorMap)) {
  1094. for (String inventorId : inventorMap.keySet()) {
  1095. ArrayList<PatentMergePerson> inventorMergeList = new ArrayList<>(mergePersonList);
  1096. List<PatentMergePerson> inventorList = inventorMap.get(inventorId);
  1097. inventorMergeList.addAll(inventorList);
  1098. //添加子文档
  1099. Patent newPatent = new Patent();
  1100. PatentJoin patentJoin = new PatentJoin();
  1101. patentJoin.setParent(id);
  1102. patentJoin.setName("merge_inventor");
  1103. newPatent.setPatentJoin(patentJoin);
  1104. newPatent.setMergeInventor(inventorMergeList);
  1105. String child = this.addChild(newPatent, id);
  1106. if (StringUtils.isEmpty(child)) {
  1107. throw new XiaoShiException("删除失败");
  1108. } else {
  1109. //删除原子文档
  1110. this.delete(Arrays.asList(inventorId));
  1111. }
  1112. }
  1113. }
  1114. }
  1115. }
  1116. } else {
  1117. throw new XiaoShiException("删除失败");
  1118. }
  1119. }
  1120. }
  1121. return vo.getId();
  1122. }
  1123. /**
  1124. * 获取所有国家列表查询
  1125. * @return
  1126. */
  1127. public List<GetAllCountryDTO> getAllCountry() {
  1128. List<GetAllCountryDTO> list = new ArrayList<>();
  1129. List<SystemDict> countries = systemDictMapper.selectList(new LambdaQueryWrapper<SystemDict>()
  1130. .eq(SystemDict::getType, "COUNTRIES"));
  1131. if (!CollectionUtils.isEmpty(countries)) {
  1132. countries.forEach(county -> {
  1133. GetAllCountryDTO dto = new GetAllCountryDTO();
  1134. dto.setLabel(county.getLabel());
  1135. dto.setValue(county.getValue());
  1136. dto.setType(county.getType());
  1137. list.add(dto);
  1138. });
  1139. }
  1140. return list;
  1141. }
  1142. /**
  1143. * 获取国内省份列表查询
  1144. * @return
  1145. */
  1146. public List<GetAllCountryDTO> getAllProvince() {
  1147. List<GetAllCountryDTO> list = new ArrayList<>();
  1148. List<SystemDict> countries = systemDictMapper.selectList(new LambdaQueryWrapper<SystemDict>()
  1149. .eq(SystemDict::getType, "PROVINCE"));
  1150. if (!CollectionUtils.isEmpty(countries)) {
  1151. countries.forEach(county -> {
  1152. GetAllCountryDTO dto = new GetAllCountryDTO();
  1153. dto.setLabel(county.getLabel());
  1154. dto.setValue(county.getValue());
  1155. dto.setType(county.getType());
  1156. list.add(dto);
  1157. });
  1158. }
  1159. return list;
  1160. }
  1161. /**
  1162. * @param patent
  1163. * @throws Exception
  1164. */
  1165. public String addChild(Patent patent, String id) throws Exception {
  1166. IndexResponse indexResponse = client.index(i -> i
  1167. .index("patent")
  1168. .routing(id)
  1169. //传入user对象
  1170. .document(patent)
  1171. );
  1172. return indexResponse.id();
  1173. }
  1174. public Integer delete(List<String> ids) {
  1175. Query query = QueryBuilders.ids(n -> n.values(ids));
  1176. DeleteByQueryRequest request = DeleteByQueryRequest.of(i -> i.index("patent").query(query));
  1177. try {
  1178. client.deleteByQuery(request);
  1179. return 1;
  1180. } catch (IOException e) {
  1181. throw new XiaoShiException("删除失败");
  1182. }
  1183. }
  1184. /**
  1185. * 删除申请人/权利人/发明人合并名称
  1186. *
  1187. * @param id
  1188. * @return
  1189. */
  1190. public Integer delSingleMerge(String id,Integer type, String name) {
  1191. String source = "";
  1192. if (type == 0) {
  1193. 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); }";
  1194. } else {
  1195. source = "if (ctx._source.merge_inventor != null) { ctx._source.merge_inventor.removeIf(item -> item.name == params.name); }";
  1196. }
  1197. String finalSource = source;
  1198. InlineScript inlineScript = InlineScript.of(i -> i.lang("painless").params("name", JsonData.of(name)).source(finalSource));
  1199. Script script = Script.of(i -> i.inline(inlineScript));
  1200. Query query = QueryBuilders.term(i -> i.field("_id").value(id));
  1201. UpdateByQueryRequest request = UpdateByQueryRequest.of(i -> i.index("patent").script(script).query(query));
  1202. try {
  1203. client.updateByQuery(request);
  1204. return 1;
  1205. } catch (IOException e) {
  1206. return -1;
  1207. }
  1208. }
  1209. public Integer add(String id,Integer type,List<PatentMergePerson> mergePersonList) {
  1210. Integer flag = null;
  1211. for (PatentMergePerson mergePerson : mergePersonList) {
  1212. Map<String, JsonData> map = new HashMap<>();
  1213. map.put("name", JsonData.of(mergePerson.getName()));
  1214. map.put("project_id", JsonData.of(mergePerson.getProjectId()));
  1215. map.put("type", JsonData.of(mergePerson.getType()));
  1216. map.put("order", JsonData.of(mergePerson.getOrder()));
  1217. String source = "";
  1218. if (type == 0) {
  1219. 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;}" +
  1220. "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;}";
  1221. } else {
  1222. 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;}";
  1223. }
  1224. String finalSource = source;
  1225. InlineScript inlineScript = InlineScript.of(i -> i.lang("painless").params("data", JsonData.of(map)).source(finalSource));
  1226. Script script = Script.of(i -> i.inline(inlineScript));
  1227. Query query = QueryBuilders.term(i -> i.field("_id").value(id));
  1228. UpdateByQueryRequest request = UpdateByQueryRequest.of(i -> i.index("patent").script(script).query(query));
  1229. try {
  1230. client.updateByQuery(request);
  1231. flag += 1;
  1232. } catch (IOException e) {
  1233. flag += -1;
  1234. }
  1235. }
  1236. return flag;
  1237. }
  1238. public Integer edit(String id,Integer type,String oldName, String newName) {
  1239. String source = "";
  1240. if (type == 0) {
  1241. source = "if (ctx._source.merge_applicant != null) {for (item in ctx._source.merge_applicant) {if(item['name']==params.oldName){item['name']=params.newName}}}" +
  1242. "if (ctx._source.merge_right_holder != null) {for (item in ctx._source.merge_right_holder) {if(item['name']==params.oldName){item['name']=params.newName}}}";
  1243. } else {
  1244. source = "if (ctx._source.merge_inventor != null) {for (item in ctx._source.merge_inventor) {if(item['name']==params.oldName){item['name']=params.newName}}}";
  1245. }
  1246. String finalSource = source;
  1247. Map<String, JsonData> map = new HashMap<>();
  1248. map.put("oldName", JsonData.of(oldName));
  1249. map.put("newName", JsonData.of(newName));
  1250. InlineScript inlineScript = InlineScript.of(i -> i.lang("painless").params(map).source(finalSource));
  1251. Script script = Script.of(i -> i.inline(inlineScript));
  1252. Query query = QueryBuilders.term(i -> i.field("_id").value(id));
  1253. UpdateByQueryRequest request = UpdateByQueryRequest.of(i -> i.index("patent").script(script).query(query));
  1254. try {
  1255. client.updateByQuery(request);
  1256. return 1;
  1257. } catch (IOException e) {
  1258. return -1;
  1259. }
  1260. }
  1261. }