PatentRightService.java 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616
  1. package cn.cslg.pas.service;
  2. import cn.cslg.pas.common.PatentRightContent;
  3. import cn.cslg.pas.common.TreeBuild;
  4. import cn.cslg.pas.common.TreeNode;
  5. import cn.cslg.pas.common.model.params.PatentRightParams;
  6. import cn.cslg.pas.common.utils.StringUtils;
  7. import cn.cslg.pas.common.utils.ThrowException;
  8. import cn.cslg.pas.domain.Authority;
  9. import cn.cslg.pas.domain.Patent;
  10. import cn.cslg.pas.domain.PatentRight;
  11. import cn.cslg.pas.mapper.PatentRightMapper;
  12. import cn.cslg.pas.service.patentRightSplit.*;
  13. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  14. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  15. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  16. import lombok.RequiredArgsConstructor;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.springframework.beans.BeanUtils;
  19. import org.springframework.context.annotation.Lazy;
  20. import org.springframework.stereotype.Service;
  21. import java.util.ArrayList;
  22. import java.util.List;
  23. import java.util.regex.Matcher;
  24. import java.util.regex.Pattern;
  25. import java.util.stream.Collectors;
  26. /**
  27. * @author Administrator
  28. * @description 针对表【os_patent_right(专利权利要求)】的数据库操作Service
  29. * @createDate 2022-04-16 10:09:24
  30. */
  31. @Slf4j
  32. @Service
  33. @RequiredArgsConstructor(onConstructor_ = {@Lazy})
  34. public class PatentRightService extends ServiceImpl<PatentRightMapper, PatentRight> {
  35. private final PatentService patentService;
  36. private final PatentRightSplitCNService patentRightSplitCNService;
  37. private final PatentRightSplitENService patentRightSplitENService;
  38. private final PatentRightSplitJPService patentRightSplitJPService;
  39. private final PatentRightSplitKRService patentRightSplitKRService;
  40. public List<PatentRight> getPatentRightByPatentNo(String patentNo) {
  41. Patent patent = patentService.getByPatentNo(patentNo);
  42. if (patent == null) {
  43. patent = new Patent();
  44. }
  45. LambdaQueryWrapper<PatentRight> queryWrapper = new LambdaQueryWrapper<>();
  46. queryWrapper.eq(PatentRight::getPatentId, patent.getId());
  47. queryWrapper.orderByAsc(PatentRight::getSort);
  48. return this.list(queryWrapper);
  49. }
  50. public List<PatentRight> getPatentRightByPatentId(Integer patentId) {
  51. LambdaQueryWrapper<PatentRight> queryWrapper = new LambdaQueryWrapper<>();
  52. queryWrapper.eq(PatentRight::getPatentId, patentId);
  53. queryWrapper.orderByAsc(PatentRight::getSort);
  54. // List<PatentRight> patentRights = this.list(queryWrapper);
  55. // if (patentRights != null && patentRights.size() > 0) {
  56. // PatentRight patentRight = patentRights.get(0);
  57. // //创建PatentRightParams对象保存权要基本信息
  58. // PatentRightParams patentRightParams = new PatentRightParams();
  59. // patentRightParams.setPatentId(patentId); //装载专利id
  60. // patentRightParams.setPatentNo(patentService.getById(patentId).getPatentNo());
  61. // patentRightParams.setContent(patentRight.getContent()); //装载权利要求原文
  62. // patentRightParams.setContentOut(patentRight.getContentOut()); //装载权利要求译文
  63. // patentRights = PatentRightUtils.formatPatentRight(patentRightParams);
  64. // return patentRights;
  65. // }
  66. return this.list(queryWrapper);
  67. }
  68. public List<PatentRight> getPatentRightByPatentIds(List<Integer> patentIds) {
  69. if (patentIds == null || patentIds.size() == 0) {
  70. return new ArrayList<>();
  71. }
  72. LambdaQueryWrapper<PatentRight> queryWrapper = new LambdaQueryWrapper<>();
  73. queryWrapper.in(PatentRight::getPatentId, patentIds);
  74. queryWrapper.orderByAsc(PatentRight::getSort);
  75. return this.list(queryWrapper);
  76. }
  77. public void deleteByPatentId(Integer patentId) {
  78. this.remove(Wrappers.<PatentRight>lambdaQuery().eq(PatentRight::getPatentId, patentId));
  79. }
  80. public void importPatentRight(Integer localPatentId, Integer importPatentId, List<PatentRight> importPatentRightList) {
  81. this.deleteByPatentId(localPatentId);
  82. List<PatentRight> patentRightList = importPatentRightList.stream().filter(item -> item.getPatentId().equals(importPatentId)).collect(Collectors.toList());
  83. for (PatentRight patentRight : patentRightList) {
  84. patentRight.setId(null);
  85. patentRight.setPatentId(localPatentId);
  86. }
  87. this.saveOrUpdateBatch(patentRightList);
  88. }
  89. public void importAuthority(PatentRightParams params) {
  90. List<Authority> splits = splits(params);
  91. List<Authority> authorities = relationshipAuthority(splits);
  92. List<Authority> authorities1 = relationshipAuthority3(authorities);
  93. List<Authority> authorities2 = relationshipAuthority2(authorities1);
  94. List<Authority> authorities3 = relationshipAuthority4(authorities2);
  95. for (Authority a : authorities3) {
  96. Authority authority = new Authority();
  97. authority.setContent(a.getContent());
  98. String join = StringUtils.join(a.getFatherID(), ",");
  99. authority.setFID(join);
  100. String join1 = StringUtils.join(a.getSonID(), ",");
  101. authority.setSID(join1);
  102. authority.setPatentID(params.getPatentId());
  103. authority.setType(a.getType());
  104. authority.insert();
  105. }
  106. }
  107. public List<Authority> splits(PatentRightParams params) {
  108. //去掉全要开头的""
  109. List<Authority> list = new ArrayList<>();
  110. String selfContent = params.getContent();
  111. if (selfContent == null) {
  112. selfContent = "";
  113. }
  114. //청구항 2. 삭제(是否删除代办)
  115. // selfContent.replaceAll("청구항(\\s)(^\\d*$+)(\\s)삭제","");
  116. selfContent.replaceAll("''", "");
  117. selfContent.replaceAll("(^\\d*$+)-(^\\d*$+)(\\.)(\\s)(canceled)", "");
  118. // selfContent.replaceAll("(^\\d*$+)(.)(\\s)(canceled)","");
  119. selfContent.replaceAll("\n", " ");
  120. //找到1. 2. ...这种格式的正则表达式
  121. String str1 = "(^\\d*$+)(\\.)";
  122. //找到[001]或者[002]这种格式的
  123. String str2 = "(\\[)(^[1-9]/d*$+)(\\])";
  124. //【請求項 1】
  125. String str3 = "(\\【請求項)(^[1-9]/d*$+)(\\】)";
  126. //청구항 1()
  127. String str4 = "청구항(\\s)(^[1-9]/d*$+)(\\.)";
  128. Pattern p4 = Pattern.compile(str4);
  129. Matcher m4 = p4.matcher(selfContent);
  130. List<Integer> integers1 = new ArrayList<>();
  131. while (m4.find()) {
  132. integers1.add(m4.start());
  133. }
  134. if (integers1.size() != 0) {
  135. for (int i = integers1.size() - 1; i >= 0; i--) {
  136. String str = selfContent.substring(integers1.get(i));
  137. Authority authority = new Authority();
  138. authority.setContent(str);
  139. list.add(authority);
  140. }
  141. Authority authority = new Authority();
  142. authority.setContent(selfContent);
  143. list.add(authority);
  144. return list;
  145. }
  146. Pattern p = Pattern.compile(str1);
  147. Matcher m = p.matcher(selfContent);
  148. //判断找到的数量
  149. List<Integer> integers = new ArrayList<>();
  150. while (m.find()) {
  151. integers.add(m.start());
  152. }
  153. if (integers.size() != 0) {
  154. for (int i = integers.size() - 1; i > 0; i--) {
  155. String str = selfContent.substring(integers.get(i));
  156. Authority authority1 = new Authority();
  157. authority1.setContent(str);
  158. list.add(authority1);
  159. }
  160. Authority authority1 = new Authority();
  161. authority1.setContentOut(selfContent);
  162. list.add(authority1);
  163. return list;
  164. }
  165. Pattern compile = Pattern.compile(str2);
  166. Matcher matcher = compile.matcher(selfContent);
  167. List<Integer> start = new ArrayList<>();
  168. while (matcher.find()) {
  169. start.add(matcher.start());
  170. }
  171. if (start.size() != 0) {
  172. for (int i = start.size() - 1; i > 0; i--) {
  173. String str = selfContent.substring(integers.get(i));
  174. Authority authority2 = new Authority();
  175. authority2.setContent(str);
  176. list.add(authority2);
  177. }
  178. Authority authority2 = new Authority();
  179. authority2.setContent(selfContent);
  180. list.add(authority2);
  181. return list;
  182. }
  183. Pattern compile1 = Pattern.compile(str3);
  184. Matcher matcher1 = compile1.matcher(selfContent);
  185. List<Integer> start1 = new ArrayList<>();
  186. while (matcher1.find()) {
  187. start1.add(matcher1.start());
  188. }
  189. if (start1.size() != 0) {
  190. for (int i = start1.size() - 1; i >= 0; i--) {
  191. String str = selfContent.substring(integers.get(i));
  192. Authority authority3 = new Authority();
  193. authority3.setContent(str);
  194. list.add(authority3);
  195. }
  196. Authority authority3 = new Authority();
  197. authority3.setContent(selfContent);
  198. list.add(authority3);
  199. }
  200. return list;
  201. }
  202. /**
  203. * 英文下的处理方式(草稿)
  204. */
  205. private List<Authority> relationshipAuthority(List<Authority> list) {
  206. List<Authority> authorities = list;
  207. //英文下的claim 1,claim2 的正则表达式
  208. String str1 = "(claim)(\\s)(^\\d*$+)";
  209. Pattern p = Pattern.compile(str1);
  210. for (int i = 0; i < list.size(); i++) {
  211. //去掉空格
  212. authorities.get(i).getContent().replaceAll(" ", "");
  213. Matcher m = p.matcher(authorities.get(i).getContent());
  214. if (!m.find()) {
  215. list.get(i).setFID(null);
  216. list.get(i).setType(0);
  217. return list;
  218. } else {
  219. //找到了
  220. String group = m.group(0);
  221. //把claim去掉只剩下面的数字
  222. String substring = group.substring(5);
  223. int j = Integer.parseInt(substring);
  224. List<Integer> sonID = list.get(j - 1).getSonID();
  225. sonID.add(authorities.get(i).getId());
  226. list.get(j - 1).setSonID(sonID);
  227. List<Integer> fatherID = list.get(i).getFatherID();
  228. fatherID.add(list.get(j - 1).getId());
  229. list.get(i).setFatherID(fatherID);
  230. //设置为
  231. list.get(i).setType(1);
  232. }
  233. }
  234. return list;
  235. }
  236. /**
  237. * 小日子的语言下的处理模式
  238. */
  239. private List<Authority> relationshipAuthority3(List<Authority> list) {
  240. List<Authority> authorities = list;
  241. //英文下的claim 1,claim2 的正则表达式
  242. String str1 = "(前記第)(^\\d*$+)";
  243. Pattern p = Pattern.compile(str1);
  244. for (int i = 0; i < list.size(); i++) {
  245. Matcher m = p.matcher(authorities.get(i).getContent());
  246. if (!m.find()) {
  247. list.get(i).setFID(null);
  248. list.get(i).setType(0);
  249. return list;
  250. } else {
  251. //找到了
  252. String group = m.group(0);
  253. //把claim去掉只剩下面的数字
  254. String substring = group.substring(3);
  255. int j = Integer.parseInt(substring);
  256. List<Integer> sonID = list.get(j - 1).getSonID();
  257. sonID.add(authorities.get(i).getId());
  258. list.get(j - 1).setSonID(sonID);
  259. List<Integer> fatherID = list.get(i).getFatherID();
  260. fatherID.add(list.get(j - 1).getId());
  261. list.get(i).setFatherID(fatherID);
  262. //设置为
  263. list.get(i).setType(1);
  264. }
  265. }
  266. return list;
  267. }
  268. /**
  269. * 中文下的处理方式
  270. */
  271. public List<Authority> relationshipAuthority2(List<Authority> list) {
  272. //中文下权利要求1,权利要求2,权利要求3
  273. String str1 = "(权利要求)(^\\d*$+)";
  274. //中文下权利要求1至
  275. String str2 = "(权利要求)(^\\d*$+)(至)(^\\d*$+)";
  276. //中文下权利要求 或
  277. String str3 = "(权利要求)(^\\d*$+)(或)(^\\d*$+)";
  278. Pattern p = Pattern.compile(str1);
  279. Pattern p1 = Pattern.compile(str2);
  280. Pattern p2 = Pattern.compile(str3);
  281. for (int i = 0; i < list.size(); i++) {
  282. Matcher matcher = p.matcher(list.get(i).getContent());
  283. if (matcher.find()) {
  284. list.get(i).setType(1);
  285. //找到满足第一情况
  286. Matcher matcher1 = p1.matcher(list.get(i).getContent());
  287. if (matcher1.find()) {
  288. //找到满足第一和第二种情况按第二种情况处理
  289. String group = matcher1.group(0);
  290. String str5 = "^\\d*$+";
  291. Pattern p3 = Pattern.compile(str5);
  292. Matcher matcher2 = p3.matcher(group);
  293. if (matcher2.find()) {
  294. String group1 = matcher2.group(0);
  295. String group2 = matcher2.group(1);
  296. Integer j = Integer.parseInt(group1);
  297. Integer k = Integer.parseInt(group2);
  298. for (int l = j - 1; l < k; l++) {
  299. List<Integer> sonID = list.get(l).getSonID();
  300. sonID.add(list.get(i).getId());
  301. list.get(l).setSonID(sonID);
  302. List<Integer> fatherID = list.get(i).getFatherID();
  303. fatherID.add(list.get(l).getId());
  304. list.get(i).setFatherID(fatherID);
  305. }
  306. }
  307. } else {
  308. Matcher matcher2 = p2.matcher(list.get(i).getContent());
  309. if (matcher2.find()) {
  310. //找到满足第三和第一情况按第三中情况处理
  311. String group = matcher1.group(0);
  312. String str6 = "^\\d*$+";
  313. Pattern p3 = Pattern.compile(str6);
  314. Matcher matcher3 = p3.matcher(group);
  315. if (matcher3.find()) {
  316. String group1 = matcher2.group(0);
  317. String group2 = matcher2.group(1);
  318. Integer j = Integer.parseInt(group1);
  319. Integer k = Integer.parseInt(group2);
  320. List<Integer> sonID = list.get(j).getSonID();
  321. sonID.add(list.get(i).getId());
  322. list.get(j).setSonID(sonID);
  323. List<Integer> fatherID = list.get(i).getFatherID();
  324. fatherID.add(list.get(j).getId());
  325. list.get(i).setFatherID(fatherID);
  326. List<Integer> sonID1 = list.get(k).getSonID();
  327. sonID1.add(list.get(i).getId());
  328. list.get(k).setSonID(sonID1);
  329. List<Integer> fatherID1 = list.get(i).getFatherID();
  330. fatherID1.add(list.get(k).getId());
  331. list.get(i).setFatherID(fatherID1);
  332. }
  333. } else {
  334. //只满足第一中情况
  335. String group = matcher.group(0);
  336. String str7 = "^\\d*$+";
  337. Pattern p3 = Pattern.compile(str7);
  338. Matcher matcher3 = p3.matcher(group);
  339. if (matcher3.find()) {
  340. String group1 = matcher2.group(0);
  341. Integer j = Integer.parseInt(group1);
  342. List<Integer> sonID = list.get(j).getSonID();
  343. sonID.add(list.get(i).getId());
  344. list.get(j).setSonID(sonID);
  345. List<Integer> fatherID = list.get(i).getFatherID();
  346. fatherID.add(list.get(j).getId());
  347. list.get(i).setFatherID(fatherID);
  348. }
  349. }
  350. }
  351. } else {
  352. list.get(i).setType(0);
  353. list.get(i).setFID(null);
  354. }
  355. }
  356. return list;
  357. }
  358. /**
  359. * 韩文下的处理
  360. */
  361. public List<Authority> relationshipAuthority4(List<Authority> list) {
  362. //韩文情况下的正则表达式
  363. String str1 = "제(\\s)(^\\d*$+)항"; //"제 1항에" ;
  364. String str3 = "제(\\s)(^\\d*$+)항(\\s)또는(\\s)제(^\\d*$+)항";//제 1항 또는 제 2항에 있어서 这种情况下的正则表达式
  365. Pattern p = Pattern.compile(str1);
  366. for (int i = 0; i < list.size(); i++) {
  367. // list.get(i).getContent().replaceAll(" ", "");
  368. Matcher m = p.matcher(list.get(i).getContent());
  369. if (!m.find()) {
  370. list.get(i).setFID(null);
  371. list.get(i).setType(0);
  372. } else {
  373. //找到了
  374. Pattern compile = Pattern.compile(str3);
  375. Matcher matcher1 = compile.matcher(list.get(i).getContent());
  376. if (matcher1.find()) {
  377. String group = m.group(0);
  378. String str2 = "(^\\d*$+)";
  379. Pattern p1 = Pattern.compile(str1);
  380. Matcher matcher = p1.matcher(group);
  381. String group1 = matcher.group(0);
  382. String group2 = matcher.group(1);
  383. Integer j = Integer.parseInt(group1);
  384. Integer k = Integer.parseInt(group2);
  385. List<Integer> sonID = list.get(j).getSonID();
  386. sonID.add(list.get(i).getId());
  387. list.get(j).setSonID(sonID);
  388. List<Integer> fatherID = list.get(i).getFatherID();
  389. fatherID.add(list.get(j).getId());
  390. list.get(i).setFatherID(fatherID);
  391. List<Integer> sonID1 = list.get(k).getSonID();
  392. sonID1.add(list.get(i).getId());
  393. list.get(k).setSonID(sonID1);
  394. List<Integer> fatherID1 = list.get(i).getFatherID();
  395. fatherID1.add(list.get(k).getId());
  396. list.get(i).setFatherID(fatherID1);
  397. } else {
  398. String group = m.group(0);
  399. String str2 = "(^\\d*$+)";
  400. Pattern p1 = Pattern.compile(str1);
  401. Matcher matcher = p1.matcher(group);
  402. String substring = matcher.group(0);
  403. int j = Integer.parseInt(substring);
  404. List<Integer> sonID = list.get(j - 1).getSonID();
  405. sonID.add(list.get(i).getId());
  406. list.get(j - 1).setSonID(sonID);
  407. List<Integer> fatherID = list.get(i).getFatherID();
  408. fatherID.add(list.get(j - 1).getId());
  409. list.get(i).setFatherID(fatherID);
  410. //设置为
  411. list.get(i).setType(1);
  412. }
  413. }
  414. }
  415. return list;
  416. }
  417. /**
  418. * 1.格式化权要 2.理出主次权要父子关系 3.权要表"os_patent_right"更新或新增权要
  419. *
  420. * @param params 权利要求相关数据
  421. */
  422. public void updatePatentRight(PatentRightParams params) {
  423. try {
  424. if (params.getContent() == null || params.getContent().trim().equals("")) {
  425. return;
  426. }
  427. //不进行拆分,原文直接保存入库
  428. PatentRight patentRight = new PatentRight()
  429. .setPatentId(params.getPatentId())
  430. .setContent(params.getContent())
  431. .setContentOut(params.getContentOut());
  432. if (patentRight.getContent() != null && !patentRight.getContent().equals("")) {
  433. this.deleteByPatentId(patentRight.getPatentId());
  434. this.saveOrUpdate(patentRight);
  435. }
  436. } catch (Exception e) {
  437. e.printStackTrace();
  438. }
  439. }
  440. /**
  441. * 查询权要树
  442. *
  443. * @param patentNo 专利号
  444. * @return 返回权要树集合
  445. */
  446. public List<TreeNode> queryPatentRightTree(String patentNo) {
  447. log.info("开始处理【查询权要树】的业务,业务参数为:patentNo={}", patentNo);
  448. //根据专利号查询出专利
  449. List<Patent> patents = patentService.list(new LambdaQueryWrapper<Patent>().eq(Patent::getPatentNo, patentNo));
  450. //判断若专利不存在,则返回错误提示"专利已不存在,请尝试刷新页面"
  451. if (patents == null || patents.size() == 0) {
  452. ThrowException.throwXiaoShiException("专利已不存在,请尝试刷新页面");
  453. }
  454. Patent patent = patents.get(0);
  455. Integer patentId = patent.getId();
  456. //根据专利id查询出权要
  457. List<PatentRight> patentRights = this.list(new LambdaQueryWrapper<PatentRight>().eq(PatentRight::getPatentId, patentId));
  458. //装载权要原文
  459. PatentRightParams params = new PatentRightParams();
  460. params.setPatentId(patentId);
  461. params.setPatentNo(patent.getPatentNo());
  462. //对获得的权利要求集合,判断集合元素个数若为1则为原文文本;若大于1则为已经拆分了的多个权要文本,此时就将其合并回原文文本
  463. if (patentRights.size() == 1) {
  464. params.setContent(patentRights.get(0).getContent());
  465. } else if (patentRights.size() > 1) {
  466. StringBuilder contentBuilder = new StringBuilder();
  467. patentRights.forEach(patentRight -> {
  468. contentBuilder.append(patentRight.getContent()).append("\n");
  469. });
  470. params.setContent(contentBuilder + "");
  471. }
  472. //调用拆分权要工厂类方法,返回对应该国家专利的拆分权要方法的对象
  473. PatentRightSplitService obj = getPatentRightSplitServiceObj(patent.getPatentNo());
  474. //对象调用拆分权要方法,返回处理过的(经过拆分、理出主附权要、理出层级关系的)权要集合
  475. List<PatentRightContent> patentRightContents = obj.formatPatentRight(params);
  476. List<TreeNode> treeNodeList = new ArrayList<>();
  477. //判断若处理后的权要集合只有1个元素并且类型type=-1、排序号sort=-1,则表示本次拆分失败,则直接返回整个权要
  478. if (patentRightContents.size() == 1 && patentRightContents.get(0).getType() == -1 && patentRightContents.get(0).getSort() == -1) {
  479. treeNodeList.add(new TreeNode(patentRightContents.get(0).getSort(), null, patentRightContents.get(0).getContent()));
  480. return treeNodeList;
  481. }
  482. for (PatentRightContent patentRightContent : patentRightContents) {
  483. treeNodeList.add(new TreeNode(patentRightContent.getSort(), patentRightContent.getParentSorts(), patentRightContent.getContent()));
  484. }
  485. //开始进行权要树装载
  486. try {
  487. TreeBuild treeBuild = new TreeBuild(treeNodeList);
  488. treeNodeList = treeBuild.buildTree();
  489. } catch (Exception e) {
  490. e.printStackTrace();
  491. }
  492. return treeNodeList;
  493. }
  494. /**
  495. * 给原始权要进行拆分
  496. *
  497. * @param patentNo 专利号
  498. * @return 返回拆分后的权要
  499. */
  500. public List<PatentRight> formatPatentRights(String patentNo) {
  501. Patent patent = patentService.getByPatentNo(patentNo);
  502. if (patent == null) {
  503. patent = new Patent();
  504. }
  505. LambdaQueryWrapper<PatentRight> queryWrapper = new LambdaQueryWrapper<>();
  506. queryWrapper.eq(PatentRight::getPatentId, patent.getId());
  507. queryWrapper.orderByAsc(PatentRight::getSort);
  508. List<PatentRight> patentRights = this.list(queryWrapper);
  509. //装载权要原文
  510. PatentRightParams params = new PatentRightParams();
  511. params.setPatentId(patent.getId());
  512. params.setPatentNo(patentNo);
  513. //对获得的权利要求集合,判断集合元素个数若为1则为原文文本;若大于1则为已经拆分了的多个权要文本,此时就将其合并回原文文本
  514. if (patentRights.size() == 1) {
  515. params.setContent(patentRights.get(0).getContent());
  516. } else if (patentRights.size() > 1) {
  517. StringBuilder contentBuilder = new StringBuilder();
  518. patentRights.forEach(patentRight -> {
  519. contentBuilder.append(patentRight.getContent()).append("\n");
  520. });
  521. params.setContent(contentBuilder + "");
  522. }
  523. //调用拆分权要工厂类方法,返回对应该国家专利的拆分权要方法的对象
  524. PatentRightSplitService obj = getPatentRightSplitServiceObj(patent.getPatentNo());
  525. //对象调用拆分权要方法,返回处理过的(经过拆分、理出主附权要、理出层级关系的)权要集合
  526. List<PatentRightContent> patentRightContents = obj.formatPatentRight(params);
  527. List<PatentRight> finalPatentRights = new ArrayList<>();
  528. patentRightContents.forEach(patentRightContent -> {
  529. PatentRight patentRight = new PatentRight();
  530. BeanUtils.copyProperties(patentRightContent, patentRight);
  531. finalPatentRights.add(patentRight);
  532. });
  533. return finalPatentRights;
  534. }
  535. public PatentRightSplitService getPatentRightSplitServiceObj(String patentNo) {
  536. String country = patentNo.substring(0, 2);
  537. switch (country) {
  538. case "CN":
  539. return patentRightSplitCNService; //拆分中国专利
  540. case "JP":
  541. return patentRightSplitJPService; //拆分日本专利
  542. case "KR":
  543. return patentRightSplitKRService; //拆分韩国专利
  544. default:
  545. return patentRightSplitENService; //拆分英文专利
  546. }
  547. }
  548. }