FeatureService.java 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669
  1. package cn.cslg.pas.service.business;
  2. import cn.cslg.pas.common.TreeBuild;
  3. import cn.cslg.pas.common.dto.QueryPatentClaimDTO;
  4. import cn.cslg.pas.common.dto.QuerySplitDTO;
  5. import cn.cslg.pas.common.dto.business.SelectClaimDTO;
  6. import cn.cslg.pas.common.dto.invalidDTO.QueryClaimSplitHistoryDTO;
  7. import cn.cslg.pas.common.dto.invalidDTO.UpdateFeatureDTO;
  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.PatentRightUtils;
  13. import cn.cslg.pas.common.vo.*;
  14. import cn.cslg.pas.common.vo.business.SplitVO;
  15. import cn.cslg.pas.common.vo.invalidVO.QueryClaimSplitHistoryVO;
  16. import cn.cslg.pas.domain.business.*;
  17. import cn.cslg.pas.domain.es.PatentTranslate;
  18. import cn.cslg.pas.exception.XiaoShiException;
  19. import cn.cslg.pas.mapper.FeatureMapper;
  20. import cn.cslg.pas.service.ClaimMessageService;
  21. import cn.cslg.pas.service.business.es.EsService;
  22. import cn.cslg.pas.service.business.invalidReport.AssoGroupFeatureService;
  23. import cn.cslg.pas.service.business.invalidReport.PatentClaimService;
  24. import cn.cslg.pas.service.common.PatentStarApiService;
  25. import cn.cslg.pas.service.common.TranslateService;
  26. import co.elastic.clients.elasticsearch._types.query_dsl.Query;
  27. import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
  28. import co.elastic.clients.elasticsearch.core.SearchRequest;
  29. import co.elastic.clients.elasticsearch.core.SearchResponse;
  30. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  31. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  32. import org.springframework.beans.factory.annotation.Autowired;
  33. import org.springframework.context.annotation.Lazy;
  34. import org.springframework.stereotype.Service;
  35. import org.springframework.transaction.annotation.Transactional;
  36. import org.springframework.util.CollectionUtils;
  37. import java.io.IOException;
  38. import java.util.*;
  39. import java.util.stream.Collectors;
  40. /**
  41. * @Author lirj
  42. * @Date 2023/12/5
  43. */
  44. @Service
  45. public class FeatureService extends ServiceImpl<FeatureMapper, Feature> {
  46. @Autowired
  47. private CacheUtils cacheUtils;
  48. @Autowired
  49. private LoginUtils loginUtils;
  50. @Autowired
  51. private EsService esService;
  52. @Autowired
  53. private ReportProjectService reportProjectService;
  54. @Autowired
  55. private PatentSplitMessageService patentSplitMessageService;
  56. @Autowired
  57. @Lazy
  58. private InvalidStatutesService invalidStatutesService;
  59. @Autowired
  60. private ProofGroupService proofGroupService;
  61. @Autowired
  62. @Lazy
  63. private AssoGroupFeatureService assoGroupFeatureService;
  64. @Autowired
  65. private PatentStarApiService patentStarApiService;
  66. @Autowired
  67. private ClaimMessageService claimMessageService;
  68. @Autowired
  69. private PatentClaimService patentClaimService;
  70. @Autowired
  71. private TranslateService translateService;
  72. @Transactional(rollbackFor = Exception.class)
  73. public List<PatentRightVo> splitPatentFeature(SplitVO splitVO) throws IOException {
  74. String patentNo = splitVO.getPatentNo();
  75. Integer projectId = splitVO.getProjectId();
  76. Integer splitType = splitVO.getSplitType();
  77. Integer splitBy = splitVO.getSplitBy();
  78. Integer taskId = splitVO.getTaskId();
  79. Boolean ifReSplit = splitVO.getIfReSplit();
  80. PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  81. //根据报告ID查询报告
  82. LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper();
  83. queryWrapper.eq(ReportProject::getProjectId, projectId);
  84. List<ReportProject> reportProjects = reportProjectService.list(queryWrapper);
  85. //未查到报告报错
  86. if (reportProjects.size() == 0) {
  87. throw new XiaoShiException("未查询到报告");
  88. }
  89. //查询拆分下的权要
  90. List<RePatentClaim> patentRights = this.getRightListByNo(patentNo);
  91. if (patentRights.size() == 0) {
  92. return new ArrayList<>();
  93. }
  94. LambdaQueryWrapper<PatentSplitMessage> splitWrapper = new LambdaQueryWrapper<>();
  95. splitWrapper.eq(PatentSplitMessage::getPatentNo, patentNo);
  96. splitWrapper.eq(PatentSplitMessage::getProjectId, projectId);
  97. //当任务id不为空时
  98. if (taskId != null) {
  99. splitWrapper.eq(PatentSplitMessage::getTaskId, taskId);
  100. }
  101. PatentSplitMessage patentSplitMessage = patentSplitMessageService.getOne(splitWrapper, false);
  102. LambdaQueryWrapper<Feature> wrapper = new LambdaQueryWrapper<>();
  103. wrapper.eq(Feature::getProjectId, projectId)
  104. .eq(Feature::getPatentNo, patentNo);
  105. if (patentSplitMessage != null) {
  106. wrapper.eq(Feature::getSplitMessageId, patentSplitMessage.getId());
  107. }
  108. List<Feature> allFeatures = new ArrayList<>();
  109. //如果是不重拆
  110. if (!ifReSplit) {
  111. //如果拆分过
  112. if (patentSplitMessage != null) {
  113. allFeatures = this.list(wrapper);
  114. }
  115. //如果没有拆分过
  116. else {
  117. patentSplitMessage = new PatentSplitMessage();
  118. patentSplitMessage.setPatentNo(patentNo);
  119. patentSplitMessage.setProjectId(projectId);
  120. patentSplitMessage.setTenantId(personnelVO.getTenantId());
  121. patentSplitMessage.setCreateId(personnelVO.getId());
  122. if (taskId != null) {
  123. patentSplitMessage.setTaskId(taskId);
  124. }
  125. patentSplitMessage.insert();
  126. allFeatures = this.splitFeature(splitBy, splitType, patentNo, projectId, taskId, patentRights, patentSplitMessage.getId());
  127. }
  128. }
  129. //当重拆时新建
  130. else {
  131. if (patentSplitMessage == null) {
  132. throw new XiaoShiException("未拆分过,请重新选择拆分方式");
  133. }
  134. //更新拆分信息
  135. patentSplitMessage.setCreateTime(new Date());
  136. patentSplitMessage.setCreateId(personnelVO.getId());
  137. patentSplitMessage.updateById();
  138. //清除原本的
  139. this.remove(wrapper);
  140. allFeatures = this.splitFeature(splitBy, splitType, patentNo, projectId, taskId, patentRights, patentSplitMessage.getId());
  141. }
  142. //装载信息并返回
  143. List<PatentRightVo> patentRightVos = new ArrayList<>();
  144. patentRightVos = this.loadPatentRightVO(patentRights, allFeatures, projectId, patentNo);
  145. return patentRightVos;
  146. }
  147. //根据符号拆分字符串
  148. public List<String> splitStringByFlags(String sentence, List<String> flags) {
  149. List<String> sectences = new ArrayList<>();
  150. //如果字符串为空则返回一个包含空字符串的list
  151. if (sentence == null) {
  152. sectences.add("");
  153. return sectences;
  154. }
  155. sectences.add(sentence);
  156. for (int i = 0; i < flags.size(); i++) {
  157. List<String> tem = new ArrayList<>();
  158. for (int t = 0; t < sectences.size(); t++) {
  159. List<String> attrs = Arrays.asList(sectences.get(t).split(flags.get(i)));
  160. for (int v = 0; v < attrs.size(); v++) {
  161. if (v < attrs.size() - 1) {
  162. attrs.set(v, attrs.get(v) + flags.get(i));
  163. }
  164. if (attrs.get(v).equals("其特征在于" + flags.get(i))) {
  165. tem.set(tem.size() - 1, tem.get(tem.size() - 1) + attrs.get(v));
  166. } else {
  167. tem.add(attrs.get(v));
  168. }
  169. }
  170. }
  171. sectences = tem;
  172. }
  173. return sectences;
  174. }
  175. @Transactional(rollbackFor = Exception.class)
  176. public List<RePatentClaim> getRightListByNo(String patentNo) throws IOException {
  177. //从pas获得拆分后的权要
  178. SelectClaimDTO selectClaimDTO = null;
  179. try {
  180. selectClaimDTO = esService.selectClaim(patentNo);
  181. } catch (Exception e) {
  182. throw new XiaoShiException("未查询到权要");
  183. }
  184. if (selectClaimDTO == null) {
  185. throw new XiaoShiException("未查询到权要");
  186. }
  187. String patentRight = selectClaimDTO.getClaim();
  188. PatentRightParams params = new PatentRightParams();
  189. params.setContent(patentRight);
  190. params.setPatentNo(patentNo);
  191. List<RePatentClaim> patentRights = PatentRightUtils.formatPatentRight(params);
  192. patentRights.forEach(item -> {
  193. item.setRightName("权要" + (item.getSort() + 1));
  194. });
  195. return patentRights;
  196. }
  197. @Transactional(rollbackFor = Exception.class)
  198. public List<RePatentClaim> getRightListByNo(String patentNo, String appNo) throws IOException {
  199. //从pas获得拆分后的权要
  200. SelectClaimDTO selectClaimDTO = null;
  201. String patentRight = "";
  202. try {
  203. if (appNo != null) {
  204. selectClaimDTO = patentStarApiService.getOrginCalim(appNo);
  205. if (selectClaimDTO != null && selectClaimDTO.getClaimContent() != null && selectClaimDTO.getClaimContent().size() != 0) {
  206. patentRight = selectClaimDTO.getClaimContent().get(0).getTextContent();
  207. }
  208. } else if (patentNo != null) {
  209. selectClaimDTO = esService.selectClaim(patentNo);
  210. patentRight = selectClaimDTO.getClaim();
  211. }
  212. } catch (Exception e) {
  213. throw new XiaoShiException("未查询到权要");
  214. }
  215. if (selectClaimDTO == null) {
  216. throw new XiaoShiException("未查询到权要");
  217. }
  218. PatentRightParams params = new PatentRightParams();
  219. params.setContent(patentRight);
  220. params.setPatentNo(patentNo);
  221. List<RePatentClaim> patentRights = PatentRightUtils.formatPatentRight(params);
  222. patentRights.forEach(item -> {
  223. item.setRightName("权要" + (item.getSort() + 1));
  224. });
  225. return patentRights;
  226. }
  227. //获得专利拆分信息
  228. public QuerySplitVO getSplitMessage(QuerySplitDTO splitDTO) {
  229. QuerySplitVO splitVO = new QuerySplitVO();
  230. //根据项目id和专利号查询拆分信息
  231. LambdaQueryWrapper<ReportProject> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  232. lambdaQueryWrapper.eq(ReportProject::getProjectId, splitDTO.getProjectId());
  233. ReportProject reportProject = reportProjectService.getOne(lambdaQueryWrapper, false);
  234. if (reportProject == null) {
  235. throw new XiaoShiException("未查询到报告");
  236. }
  237. Integer splitType = reportProject.getSplitType();
  238. Integer splitBy = reportProject.getSplitBy();
  239. if (splitBy != null && splitType != null) {
  240. splitVO.setSplitBy(splitBy);
  241. splitVO.setSplitType(splitType);
  242. splitVO.setIfFirst(false);
  243. } else {
  244. splitVO.setSplitBy(0);
  245. splitVO.setSplitType(0);
  246. splitVO.setIfFirst(true);
  247. }
  248. return splitVO;
  249. }
  250. public List<RePatentClaim> getPatentRight(String patentNo) {
  251. try {
  252. List<RePatentClaim> patentRights = this.getRightListByNo(patentNo);
  253. return patentRights;
  254. } catch (Exception e) {
  255. throw new XiaoShiException("系统错误");
  256. }
  257. }
  258. public List<PatentRightTree> getPatentRightTree(String patentNo, String appNo) {
  259. try {
  260. List<RePatentClaim> patentRights = this.getRightListByNo(patentNo, appNo);
  261. List<PatentRightTree> treeNodeList = new ArrayList<>();
  262. //装载权要原文
  263. PatentRightParams params = new PatentRightParams();
  264. params.setPatentNo(patentNo);
  265. params.setContent("");
  266. //判断若处理后的权要集合只有1个元素并且类型type=-1、排序号sort=-1,则表示本次拆分失败,则直接返回整个权要
  267. if (patentRights.size() == 1 && patentRights.get(0).getType() == -1 && patentRights.get(0).getSort() == -1) {
  268. List<String> list = translateService.getTranslateOrder(patentNo, patentRights.get(0).getSort());
  269. String translateContent = "";
  270. if (!CollectionUtils.isEmpty(list)) {
  271. translateContent = list.get(0);
  272. }
  273. treeNodeList.add(new PatentRightTree(patentRights.get(0).getSort(), null, patentRights.get(0).getContent(),translateContent));
  274. return treeNodeList;
  275. }
  276. List<PatentRightContent> patentRightContents = this.loadPatentRightContent(patentRights);
  277. for (PatentRightContent patentRightContent : patentRightContents) {
  278. List<String> list = translateService.getTranslateOrder(patentNo, patentRightContent.getSort());
  279. String translateContent = "";
  280. if (!CollectionUtils.isEmpty(list)) {
  281. translateContent = list.get(0);
  282. }
  283. treeNodeList.add(new PatentRightTree(patentRightContent.getSort(), patentRightContent.getParentSorts(), patentRightContent.getContent(), translateContent));
  284. }
  285. //开始进行权要树装载
  286. try {
  287. TreeBuild treeBuild = new TreeBuild(treeNodeList);
  288. treeNodeList = treeBuild.buildTree();
  289. } catch (Exception e) {
  290. e.printStackTrace();
  291. }
  292. return treeNodeList;
  293. } catch (Exception e) {
  294. throw new XiaoShiException("系统错误");
  295. }
  296. }
  297. private List<PatentRightContent> loadPatentRightContent(List<RePatentClaim> rePatentClaims) {
  298. List<PatentRightContent> patentRightContents = new ArrayList<>();
  299. rePatentClaims.forEach(item -> {
  300. List<Integer> sorts = new ArrayList<>();
  301. String[] a = item.getParentSort().split(",");
  302. for (int i = 0; i < a.length; i++) {
  303. sorts.add(Integer.parseInt(a[i]));
  304. }
  305. PatentRightContent patentRightContent = new PatentRightContent();
  306. patentRightContent.setContent(item.getContent());
  307. patentRightContent.setType(item.getType());
  308. patentRightContent.setSort(item.getSort());
  309. patentRightContent.setParentSorts(sorts);
  310. patentRightContents.add(patentRightContent);
  311. });
  312. return patentRightContents;
  313. }
  314. public List<Feature> splitFeature(Integer splitBy, Integer splitType, String patentNo, Integer projectId, Integer taskId, List<RePatentClaim> patentRights, Integer splitMessageId) throws IOException {
  315. List<Feature> allFeatures = new ArrayList<>();
  316. PersonnelVO personnelVO = new PersonnelVO();
  317. personnelVO.setId("1");
  318. personnelVO.setTenantId(1);
  319. List<String> flags = new ArrayList<>();
  320. List<Integer> partRightSorts = new ArrayList<>(); //权要sorts
  321. if (splitBy == 0) { //当splitBy=0时仅仅根据“,”拆解
  322. flags.add(",");
  323. flags.add(",");
  324. } else if (splitBy == 1) { //当splitBy=1时仅仅根据“;“拆解
  325. flags.add(";");
  326. flags.add(";");
  327. } else if (splitBy == 2) { //当splitBy=2时根据“;“和”,”拆解
  328. flags.add(";");
  329. flags.add(";");
  330. flags.add(",");
  331. flags.add(",");
  332. }
  333. if (splitType.equals(0)) { //当splitType=0仅拆解主权要
  334. partRightSorts = patentRights.stream().filter(item -> item.getType().equals(1)).map(RePatentClaim::getSort).collect(Collectors.toList());
  335. } else if (splitType.equals(1)) { //当splitType=1拆解全部权要
  336. partRightSorts = patentRights.stream().map(RePatentClaim::getSort).collect(Collectors.toList());
  337. }
  338. //遍历权要保存特征
  339. for (int i = 0; i < patentRights.size(); i++) {
  340. List<Feature> featureList = new ArrayList<>();
  341. //根据拆分方式返回特征
  342. List<String> contents = Arrays.asList(patentRights.get(i).getContent());
  343. //如果是需要拆解的权要
  344. if (partRightSorts.contains(patentRights.get(i).getSort())) {
  345. //获得权要的原文并且拆解
  346. contents = this.splitStringByFlags(patentRights.get(i).getContent(), flags);
  347. }
  348. for (int t = 0; t < contents.size(); t++) {
  349. Feature feature = new Feature();
  350. feature.setRightSort(patentRights.get(i).getSort());
  351. feature.setPatentNo(patentNo);
  352. feature.setProjectId(projectId);
  353. feature.setSysOrder(t + 1);
  354. feature.setContent(contents.get(t));
  355. feature.setCreateId(personnelVO.getId());
  356. feature.setRightType(patentRights.get(i).getType());
  357. feature.setTenantId(personnelVO.getTenantId());
  358. feature.setSplitMessageId(splitMessageId);
  359. if (taskId != null) {
  360. feature.setProjectTaskId(taskId);
  361. }
  362. featureList.add(feature);
  363. }
  364. if (featureList.size() > 0) {
  365. this.saveBatch(featureList);
  366. allFeatures.addAll(featureList);
  367. }
  368. }
  369. return allFeatures;
  370. }
  371. public List<PatentRightVo> loadPatentRightVO(List<RePatentClaim> patentRights, List<Feature> allFeatures, Integer projectId, String patentNo) {
  372. List<PatentRightVo> patentRightVos = new ArrayList<>();
  373. //将拆解的权要和特征装载到对象PatentRightVo
  374. for (int i = 0; i < patentRights.size(); i++) {
  375. List<Feature> featureList = new ArrayList<>();
  376. Integer sort = patentRights.get(i).getSort();
  377. featureList = allFeatures
  378. .stream()
  379. .filter(item -> item.getRightSort().equals(sort))
  380. .sorted(Comparator.comparing(Feature::getSysOrder,
  381. Comparator.nullsLast(Integer::compareTo)))
  382. .collect(Collectors.toList());
  383. PatentRightVo patentRightVo = new PatentRightVo();
  384. patentRightVo.setPatentNo(patentRights.get(i).getPatentNo());
  385. patentRightVo.setFeatures(featureList);
  386. patentRightVo.setContent(patentRights.get(i).getContent());
  387. patentRightVo.setSort(patentRights.get(i).getSort() + 1);
  388. patentRightVo.setType(patentRights.get(i).getType());
  389. patentRightVo.setContentOut(patentRights.get(i).getContentOut());
  390. patentRightVo.setProjectId(projectId);
  391. patentRightVo.setRightName("权要" + (sort + 1));
  392. patentRightVo.setSignPatentNo(patentNo);
  393. patentRightVos.add(patentRightVo);
  394. }
  395. return patentRightVos;
  396. }
  397. public Records queryClaimSplitHistory(QueryClaimSplitHistoryDTO queryClaimSplitHistoryDTO) {
  398. List<QueryClaimSplitHistoryVO> queryClaimSplitHistoryVOS = new ArrayList<>();
  399. Integer claimId = queryClaimSplitHistoryDTO.getClaimId();
  400. Long current = queryClaimSplitHistoryDTO.getCurrent();
  401. Long size = queryClaimSplitHistoryDTO.getSize();
  402. //根据id查询无效发条
  403. LambdaQueryWrapper<InvalidStatutes> queryWrapper = new LambdaQueryWrapper<>();
  404. queryWrapper.eq(InvalidStatutes::getClaimId, claimId);
  405. List<InvalidStatutes> invalidStatutes = invalidStatutesService.list(queryWrapper);
  406. //根据无效发条查询证据组合
  407. if (invalidStatutes.size() != 0) {
  408. List<Integer> statutesIds = invalidStatutes.stream().map(InvalidStatutes::getId).collect(Collectors.toList());
  409. //根据无效法条id查询证据组合
  410. LambdaQueryWrapper<ProofGroup> queryWrapper1 = new LambdaQueryWrapper<>();
  411. queryWrapper1.in(ProofGroup::getInvalidStatutesId, statutesIds);
  412. List<ProofGroup> proofGroups = proofGroupService.list(queryWrapper1);
  413. if (proofGroups.size() > 0) {
  414. proofGroups.forEach(item -> {
  415. //根据id 查询特征
  416. Integer groupId = item.getId();
  417. LambdaQueryWrapper<AssoGroupFeature> queryWrapper2 = new LambdaQueryWrapper<>();
  418. queryWrapper2.eq(AssoGroupFeature::getGroupId, groupId);
  419. List<AssoGroupFeature> assoGroupFeatures = assoGroupFeatureService.list(queryWrapper2);
  420. if (assoGroupFeatures != null && assoGroupFeatures.size() != 0) {
  421. List<Integer> featureIds = assoGroupFeatures.stream().map(AssoGroupFeature::getFeatureId).collect(Collectors.toList());
  422. if (featureIds.size() != 0) {
  423. LambdaQueryWrapper<Feature> queryWrapper3 = new LambdaQueryWrapper<>();
  424. queryWrapper3.in(Feature::getId, featureIds);
  425. List<Feature> featureList = this.list(queryWrapper3);
  426. if (featureList.size() != 0) {
  427. QueryClaimSplitHistoryVO queryClaimSplitHistoryVO = new QueryClaimSplitHistoryVO();
  428. List<QueryClaimSplitHistoryVO.GroupFeature> features = new ArrayList<>();
  429. featureList.forEach(i -> {
  430. QueryClaimSplitHistoryVO.GroupFeature tem = new QueryClaimSplitHistoryVO.GroupFeature();
  431. tem.setFeatureText(i.getContent());
  432. tem.setId(i.getId());
  433. AssoGroupFeature assoGroupFeature = assoGroupFeatures.stream().filter(t -> t.getFeatureId().equals(i.getId())).findFirst().orElse(null);
  434. if (assoGroupFeature != null) {
  435. tem.setSysOrder(assoGroupFeature.getFeatureOrder());
  436. }
  437. features.add(tem);
  438. });
  439. queryClaimSplitHistoryVO.setFeatureSplitContent(features);
  440. queryClaimSplitHistoryVOS.add(queryClaimSplitHistoryVO);
  441. }
  442. }
  443. }
  444. });
  445. }
  446. }
  447. Records records = new Records();
  448. records.setData(queryClaimSplitHistoryVOS);
  449. return records;
  450. }
  451. /**
  452. * 获得已经拆分过的特征
  453. *
  454. * @param splitVO
  455. */
  456. public List<Feature> getSplitedFeature(SplitVO splitVO) {
  457. List<PatentRightVo> patentRightVos = new ArrayList<>();
  458. Integer projectId = splitVO.getProjectId();
  459. String patentNo = splitVO.getPatentNo();
  460. //当未传入专利号时,从报告里拿标的专利
  461. if (patentNo == null || patentNo.equals("")) {
  462. LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
  463. queryWrapper.eq(ReportProject::getProjectId, projectId);
  464. ReportProject reportProject = reportProjectService.getOne(queryWrapper, false);
  465. if (reportProject == null) {
  466. throw new XiaoShiException("未查到报告");
  467. }
  468. patentNo = reportProject.getSignPatentNo();
  469. }
  470. LambdaQueryWrapper<PatentSplitMessage> splitWrapper = new LambdaQueryWrapper<>();
  471. splitWrapper.eq(PatentSplitMessage::getPatentNo, patentNo);
  472. splitWrapper.eq(PatentSplitMessage::getProjectId, projectId);
  473. PatentSplitMessage patentSplitMessage = patentSplitMessageService.getOne(splitWrapper, false);
  474. List<Feature> allFeatures = new ArrayList<>();
  475. if (patentSplitMessage == null) {
  476. return allFeatures;
  477. }
  478. LambdaQueryWrapper<Feature> wrapper = new LambdaQueryWrapper<>();
  479. wrapper.eq(Feature::getProjectId, projectId)
  480. .eq(Feature::getPatentNo, patentNo)
  481. .eq(Feature::getSplitMessageId, patentSplitMessage.getId());
  482. allFeatures = this.list(wrapper);
  483. return allFeatures;
  484. }
  485. /**
  486. * 保存特征
  487. *
  488. * @param updateFeatureDTO
  489. * @return
  490. */
  491. public List<Integer> saveBatchFeature(UpdateFeatureDTO updateFeatureDTO) {
  492. List<UpdateFeatureDTO.ChangedFeatures> features = updateFeatureDTO.getFeaturesList();
  493. Integer projectId = updateFeatureDTO.getProjectId();
  494. if (features == null) {
  495. features = new ArrayList<>();
  496. }
  497. if (projectId == null) {
  498. throw new XiaoShiException("未选择报告");
  499. }
  500. LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
  501. queryWrapper.eq(ReportProject::getProjectId, projectId);
  502. ReportProject reportProject = reportProjectService.getOne(queryWrapper, false);
  503. if (reportProject == null) {
  504. throw new XiaoShiException("报告不存在");
  505. }
  506. String signPatentNo = reportProject.getSignPatentNo();
  507. //根据标的专利号和报告id查询拆分信息
  508. LambdaQueryWrapper<PatentSplitMessage> queryWrapper1 = new LambdaQueryWrapper<>();
  509. queryWrapper1.eq(PatentSplitMessage::getPatentNo, signPatentNo)
  510. .eq(PatentSplitMessage::getProjectId, projectId);
  511. PatentSplitMessage patentSplitMessage = patentSplitMessageService.getOne(queryWrapper1, false);
  512. if (patentSplitMessage == null) {
  513. throw new XiaoShiException("未进行拆分过");
  514. }
  515. List<Integer> ids = this.saveFeatures(features, patentSplitMessage.getId(), projectId,signPatentNo);
  516. return ids;
  517. }
  518. /**
  519. * 批量添加特征
  520. *
  521. * @param features
  522. * @param splitMessageId
  523. * @param projectId
  524. * @return
  525. */
  526. public List<Integer> saveFeatures(List<UpdateFeatureDTO.ChangedFeatures> features, Integer splitMessageId, Integer projectId,String patentNo) {
  527. List<Integer> addIds = new ArrayList<>();
  528. LambdaQueryWrapper<Feature> queryWrapper = new LambdaQueryWrapper<>();
  529. queryWrapper.select(Feature::getId);
  530. queryWrapper.eq(Feature::getSplitMessageId, splitMessageId);
  531. List<Feature> featureList = this.list(queryWrapper);
  532. List<Integer> ids = featureList.stream().map(Feature::getId).collect(Collectors.toList());
  533. PersonnelVO personnelVO = new PersonnelVO();
  534. personnelVO.setId("1");
  535. personnelVO.setTenantId(1);
  536. List<Feature> addFeatures = new ArrayList<>();
  537. Integer order=1;
  538. for(UpdateFeatureDTO.ChangedFeatures item:features) {
  539. Integer id = item.getId();
  540. if (id == null || !ids.contains(id)) {
  541. Feature feature = new Feature();
  542. feature.setCreateId(personnelVO.getId());
  543. feature.setSplitMessageId(splitMessageId);
  544. feature.setContent(item.getContent());
  545. feature.setExplainText(item.getExplainText());
  546. feature.setRightSort(item.getRightSort());
  547. feature.setProjectId(projectId);
  548. feature.setSysOrder(order);
  549. feature.setPatentNo(patentNo);
  550. feature.setRightType(item.getRightType());
  551. feature.setTenantId(personnelVO.getTenantId());
  552. feature.insert();
  553. } else {
  554. ids.remove(id);
  555. Feature feature = this.getById(id);
  556. feature.setSysOrder(order);
  557. feature.setContent(item.getContent());
  558. feature.setExplainText(item.getExplainText());
  559. feature.updateById();
  560. }
  561. order++;
  562. }
  563. //添加特征
  564. if (addFeatures.size() != 0) {
  565. addIds = addFeatures.stream().map(Feature::getId).collect(Collectors.toList());
  566. }
  567. if (ids.size() != 0) {
  568. this.removeBatchByIds(ids);
  569. }
  570. return addIds;
  571. }
  572. public List<RePatentClaim> getPatentRight(QueryPatentClaimDTO queryPatentClaimDTO) {
  573. try {
  574. List<RePatentClaim> patentRights = new ArrayList<>();
  575. Integer taskId = queryPatentClaimDTO.getTaskId();
  576. Integer projectId = queryPatentClaimDTO.getProjectId();
  577. String patentNo = queryPatentClaimDTO.getPatentNo();
  578. Integer literatureId = queryPatentClaimDTO.getLiteratureId();
  579. ClaimMessage claimMessage = claimMessageService.getClaimMessage(taskId, projectId, patentNo, literatureId);
  580. if (claimMessage == null) {
  581. patentRights = this.getRightListByNo(patentNo);
  582. } else {
  583. Integer claimMessageId = claimMessage.getId();
  584. LambdaQueryWrapper<PatentClaim> queryWrapper = new LambdaQueryWrapper<>();
  585. queryWrapper.eq(PatentClaim::getClaimMessageId, claimMessageId);
  586. List<PatentClaim> patentClaimList =patentClaimService.list(queryWrapper);
  587. for (PatentClaim item: patentClaimList){
  588. RePatentClaim rePatentClaim =this.domainToRe(item);
  589. patentRights.add(rePatentClaim);
  590. }
  591. }
  592. return patentRights;
  593. } catch (Exception e) {
  594. throw new XiaoShiException("系统错误");
  595. }
  596. }
  597. private RePatentClaim domainToRe(PatentClaim patentClaim){
  598. RePatentClaim rePatentClaim =new RePatentClaim();
  599. rePatentClaim.setContent(patentClaim.getContent());
  600. rePatentClaim.setId(patentClaim.getId());
  601. rePatentClaim.setSort(patentClaim.getSysOrder());
  602. rePatentClaim.setParentSort(patentClaim.getParentOrder());
  603. rePatentClaim.setType(patentClaim.getClaimType());
  604. return rePatentClaim;
  605. }
  606. }