CompareLiteratureService.java 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757
  1. package cn.cslg.pas.service.business;
  2. import cn.cslg.pas.common.dto.business.LiteratureQueryDTO;
  3. import cn.cslg.pas.common.dto.invalidDTO.UpdateBatchLiteratureDTO;
  4. import cn.cslg.pas.common.dto.invalidDTO.UpdateBatchLiteraturesDTO;
  5. import cn.cslg.pas.common.dto.invalidDTO.UpdateLiteratureOrderDTO;
  6. import cn.cslg.pas.common.model.cronModel.PersonnelVO;
  7. import cn.cslg.pas.common.model.cronModel.Records;
  8. import cn.cslg.pas.common.model.cronModel.SystemFile;
  9. import cn.cslg.pas.common.utils.CacheUtils;
  10. import cn.cslg.pas.common.utils.LoginUtils;
  11. import cn.cslg.pas.common.vo.CompareLiteratureVO;
  12. import cn.cslg.pas.common.vo.NoveltyProjectVO.NoveltyCompareRecordVO;
  13. import cn.cslg.pas.common.vo.PatentWithIdVO;
  14. import cn.cslg.pas.common.vo.WebSocketMessageVO;
  15. import cn.cslg.pas.domain.business.CompareLiterature;
  16. import cn.cslg.pas.common.dto.CompareLiteratureDTO;
  17. import cn.cslg.pas.domain.business.ReportProject;
  18. import cn.cslg.pas.domain.business.novelty.NoveltyCompareLiterature;
  19. import cn.cslg.pas.domain.es.Patent;
  20. import cn.cslg.pas.exception.UnLoginException;
  21. import cn.cslg.pas.exception.XiaoShiException;
  22. import cn.cslg.pas.mapper.CompareLiteratureMapper;
  23. import cn.cslg.pas.mapper.novelty.NoveltyCompareLiteratureMapper;
  24. import cn.cslg.pas.service.business.es.EsPatentService;
  25. import cn.cslg.pas.service.business.es.EsScratchWordsService;
  26. import cn.cslg.pas.service.business.es.EsService;
  27. import cn.cslg.pas.service.common.FileManagerService;
  28. import cn.cslg.pas.service.common.MessageService;
  29. import cn.cslg.pas.service.importPatent.ImportSinglePatentService;
  30. import com.alibaba.fastjson.JSONObject;
  31. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  32. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  33. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  34. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  35. import lombok.extern.slf4j.Slf4j;
  36. import org.springframework.beans.BeanUtils;
  37. import org.springframework.beans.factory.annotation.Autowired;
  38. import org.springframework.stereotype.Service;
  39. import org.springframework.transaction.annotation.Propagation;
  40. import org.springframework.transaction.annotation.Transactional;
  41. import org.springframework.util.CollectionUtils;
  42. import org.springframework.util.ObjectUtils;
  43. import java.io.IOException;
  44. import java.io.Serializable;
  45. import java.util.ArrayList;
  46. import java.util.Date;
  47. import java.util.List;
  48. import java.util.stream.Collectors;
  49. /**
  50. * @Author lrj
  51. * @Date 2023/12/8
  52. */
  53. @Slf4j
  54. @Service
  55. public class CompareLiteratureService extends ServiceImpl<CompareLiteratureMapper, CompareLiterature> {
  56. @Autowired
  57. private CacheUtils cacheUtils;
  58. @Autowired
  59. private LoginUtils loginUtils;
  60. @Autowired
  61. private EsPatentService esPatentService;
  62. @Autowired
  63. private ReportProjectService reportProjectService;
  64. @Autowired
  65. private FileManagerService fileManagerService;
  66. @Autowired
  67. private ImportSinglePatentService importSinglePatentService;
  68. @Autowired
  69. private EsScratchWordsService esScratchWordsService;
  70. @Autowired
  71. private EsService esService;
  72. @Autowired
  73. private MessageService messageService;
  74. @Autowired
  75. private CompareLiteratureMapper compareLiteratureMapper;
  76. @Autowired
  77. private NoveltyCompareLiteratureMapper noveltyCompareLiteratureMapper;
  78. //添加专利对比文献
  79. public Integer addPatentCompareLiterature(Patent patent, Integer projectId, String createId) {
  80. synchronized ("导入任务是否完成") {
  81. Integer id = null;
  82. id = this.getHaveAddIdByNos(projectId, patent.getPatentNo());
  83. //根据专利号和报告id查询是否已经保存
  84. if (id == null) {
  85. CompareLiterature compareLiterature = new CompareLiterature();
  86. compareLiterature.setCreateId(createId);
  87. //报告id
  88. compareLiterature.setProjectId(projectId);
  89. //文档guid
  90. compareLiterature.setLiteratureNo(patent.getPatentNo());
  91. //文档名称
  92. String name = "";
  93. //作者
  94. String authorName = "";
  95. Integer order = 1;
  96. //根据报告id获得最大序号
  97. LambdaQueryWrapper<CompareLiterature> queryWrapper = new LambdaQueryWrapper<>();
  98. queryWrapper.eq(CompareLiterature::getProjectId, projectId).orderByDesc(CompareLiterature::getSysOrder);
  99. CompareLiterature compareLiteratureBig = this.getOne(queryWrapper, false);
  100. if (compareLiteratureBig != null && compareLiteratureBig.getSysOrder() != null) {
  101. order = compareLiteratureBig.getSysOrder() + 1;
  102. }
  103. if (patent != null) {
  104. if (patent.getTitle() != null && patent.getTitle().size() != 0) {
  105. name = patent.getTitle().get(0).getTextContent();
  106. }
  107. compareLiterature.setAppDate(patent.getAppDate());
  108. compareLiterature.setPublicDate(patent.getPublicDate());
  109. if (patent.getRightHolder() != null && patent.getRightHolder().size() != 0) {
  110. authorName = patent.getRightHolder().get(0).getName();
  111. }
  112. }
  113. compareLiterature.setName(name);
  114. //描述
  115. //作者
  116. compareLiterature.setAuthorName(authorName);
  117. //类型
  118. compareLiterature.setType(0);
  119. //装载排序
  120. compareLiterature.setSysOrder(order);
  121. compareLiterature.insert();
  122. return compareLiterature.getId();
  123. }
  124. return id;
  125. }
  126. }
  127. //添加非对比文献
  128. public Integer addNotPatent(CompareLiteratureDTO compareLiteratureDTO) {
  129. PersonnelVO personnelVO = new PersonnelVO();
  130. Integer projectId = compareLiteratureDTO.getProjectId();
  131. try {
  132. personnelVO = new PersonnelVO();
  133. personnelVO.setId("1");
  134. // personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  135. } catch (Exception e) {
  136. throw new UnLoginException("未登录");
  137. }
  138. Integer order = 1;
  139. //根据报告id获得最大序号
  140. LambdaQueryWrapper<CompareLiterature> queryWrapper = new LambdaQueryWrapper<>();
  141. queryWrapper.eq(CompareLiterature::getProjectId, projectId)
  142. .orderByDesc(CompareLiterature::getSysOrder);
  143. CompareLiterature compareLiteratureBig = this.getOne(queryWrapper, false);
  144. if (compareLiteratureBig != null && compareLiteratureBig.getSysOrder() != null) {
  145. order = compareLiteratureBig.getSysOrder() + 1;
  146. }
  147. CompareLiterature compareLiterature = new CompareLiterature();
  148. compareLiterature.setCreateId(personnelVO.getId());
  149. //报告id
  150. compareLiterature.setProjectId(compareLiteratureDTO.getProjectId());
  151. //文档guid
  152. compareLiterature.setLiteratureNo(compareLiteratureDTO.getFileGuid());
  153. //文档名称
  154. compareLiterature.setName(compareLiteratureDTO.getName());
  155. //描述
  156. compareLiterature.setDescription(compareLiteratureDTO.getDescription());
  157. //作者
  158. compareLiterature.setAuthorName(compareLiteratureDTO.getAuthorName());
  159. //类型
  160. compareLiterature.setType(1);
  161. //装载排序
  162. compareLiterature.setSysOrder(order);
  163. //装载公开日
  164. compareLiterature.setPublicDate(compareLiteratureDTO.getPublicDate());
  165. compareLiterature.insert();
  166. return compareLiterature.getId();
  167. }
  168. //查询对比文献
  169. public Records queryCompareLiterature(LiteratureQueryDTO literatureQueryDTO) throws Exception {
  170. Integer projectId = literatureQueryDTO.getProjectId();
  171. Records records = new Records();
  172. //根据对比projectId 查询对比文献
  173. LambdaQueryWrapper<CompareLiterature> queryWrapper = new LambdaQueryWrapper<>();
  174. queryWrapper.eq(CompareLiterature::getProjectId, projectId)
  175. .orderByAsc(CompareLiterature::getSysOrder);
  176. List<CompareLiterature> compareLiteratures = new ArrayList<>();
  177. if (literatureQueryDTO.getCurrent() != null && literatureQueryDTO.getSize() != null) {
  178. Page<CompareLiterature> page = this.page(new Page<>(literatureQueryDTO.getCurrent(), literatureQueryDTO.getSize()), queryWrapper);
  179. compareLiteratures = page.getRecords();
  180. records.setTotal(page.getTotal());
  181. records.setSize(Long.parseLong(literatureQueryDTO.getSize().toString()));
  182. records.setCurrent(Long.parseLong(literatureQueryDTO.getCurrent().toString()));
  183. } else {
  184. compareLiteratures = this.list(queryWrapper);
  185. }
  186. List<CompareLiteratureVO> compareLiteratureVOS = new ArrayList<>();
  187. //根据项目id查询标的专利号
  188. LambdaQueryWrapper<ReportProject> wrapper = new LambdaQueryWrapper<>();
  189. wrapper.eq(ReportProject::getProjectId, projectId);
  190. ReportProject reportProject = reportProjectService.getOne(wrapper);
  191. compareLiteratureVOS = this.loadCompareLiterature(compareLiteratures, reportProject);
  192. //装载查新对比文件和标注
  193. this.loadCompareLiteratureVOS(compareLiteratureVOS,projectId);
  194. records.setData(compareLiteratureVOS);
  195. return records;
  196. }
  197. public void loadCompareLiteratureVOS(List<CompareLiteratureVO> compareLiteratureVOS, Integer projectId) throws Exception {
  198. if (!CollectionUtils.isEmpty(compareLiteratureVOS)) {
  199. List<Integer> literatureIds = new ArrayList<>();
  200. compareLiteratureVOS.forEach(item -> {
  201. literatureIds.add(item.getId());
  202. });
  203. List<NoveltyCompareRecordVO> recordVOS = esScratchWordsService.queryNoveltyRecord(projectId, 1);
  204. List<NoveltyCompareLiterature> noveltyCompareLiteratureList = noveltyCompareLiteratureMapper.selectList(new LambdaQueryWrapper<NoveltyCompareLiterature>()
  205. .in(NoveltyCompareLiterature::getCompareLitertureId, literatureIds));
  206. for (CompareLiteratureVO literatureVO : compareLiteratureVOS) {
  207. NoveltyCompareLiterature noveltyCompareLiterature = noveltyCompareLiteratureList.stream().filter(i -> literatureVO.getId().equals(i.getCompareLitertureId())).findFirst().orElse(new NoveltyCompareLiterature());
  208. if (!ObjectUtils.isEmpty(noveltyCompareLiterature)) {
  209. literatureVO.setCompareFileId(noveltyCompareLiterature.getId());
  210. literatureVO.setRetrieveRecordId(noveltyCompareLiterature.getRetrieveRecordId());
  211. literatureVO.setRelevance(noveltyCompareLiterature.getRelevance());
  212. literatureVO.setIfEffectinv(noveltyCompareLiterature.getIfEffectinv());
  213. literatureVO.setFileRemark(noveltyCompareLiterature.getRemark());
  214. literatureVO.setGeneralRemark(noveltyCompareLiterature.getGeneralRemark());
  215. literatureVO.setTechnicalPoints(noveltyCompareLiterature.getTechnicalPoints());
  216. literatureVO.setExcuteCase(noveltyCompareLiterature.getExcuteCase());
  217. literatureVO.setBeneficialEffect(noveltyCompareLiterature.getBeneficialEffect());
  218. }
  219. if (!CollectionUtils.isEmpty(recordVOS)) {
  220. List<NoveltyCompareRecordVO> collect = recordVOS.stream().filter(i -> i.getPatentNo().equals(literatureVO.getLiteratureNo())).collect(Collectors.toList());
  221. if (CollectionUtils.isEmpty(collect)) {
  222. collect = new ArrayList<>();
  223. }
  224. literatureVO.setNoveltyCompareRecordVOS(collect);
  225. }
  226. }
  227. }
  228. }
  229. public List<CompareLiteratureVO> loadCompareLiterature(List<CompareLiterature> compareLiteratures, ReportProject reportProject) {
  230. List<CompareLiteratureVO> compareLiteratureVOS = new ArrayList<>();
  231. //查询文件
  232. List<SystemFile> systemFiles = new ArrayList<>();
  233. //非专利文献列表
  234. List<String> guids = compareLiteratures.stream().filter(item -> item.getType().equals(1)).map(CompareLiterature::getLiteratureNo).collect(Collectors.toList());
  235. //查询文件
  236. if (!CollectionUtils.isEmpty(guids)) {
  237. try {
  238. String res = fileManagerService.getSystemFileFromFMS(guids);
  239. if (res != null && !res.trim().equals("")) {
  240. systemFiles = JSONObject.parseArray(res, SystemFile.class);
  241. }
  242. } catch (Exception e) {
  243. throw new XiaoShiException("装载错误");
  244. }
  245. }
  246. if (!ObjectUtils.isEmpty(reportProject)) {
  247. //查询标的专利号
  248. String signPatentNo = reportProject.getSignPatentNo();
  249. //专利文献列表
  250. List<String> patentNos = compareLiteratures.stream().filter(item -> item.getType().equals(0)).map(CompareLiterature::getLiteratureNo).collect(Collectors.toList());
  251. List<Patent> patentList = new ArrayList<>();
  252. if (reportProject.getSignPatentNo() != null) {
  253. patentNos.add(reportProject.getSignPatentNo());
  254. }
  255. if (patentNos.size() > 0) {
  256. try {
  257. patentList = esPatentService.getPatentsByNo(patentNos, false, null, null);
  258. } catch (Exception e) {
  259. throw new XiaoShiException("装载文献信息失败");
  260. }
  261. }
  262. //获得标的专利信息
  263. Patent signPatent = patentList.stream()
  264. .filter(item -> signPatentNo.equals(item.getAppNo())
  265. || signPatentNo.equals(item.getPublicNo()) ||
  266. signPatentNo.equals(item.getGrantNo())).findFirst().orElse(null);
  267. for (CompareLiterature compareLiterature : compareLiteratures) {
  268. String literatureNo = compareLiterature.getLiteratureNo();
  269. Date publicDate = compareLiterature.getPublicDate();
  270. CompareLiteratureVO compareLiteratureVO = new CompareLiteratureVO();
  271. BeanUtils.copyProperties(compareLiterature, compareLiteratureVO);
  272. //当为专利文献时
  273. if (compareLiterature.getType().equals(0)) {
  274. compareLiteratureVO.setFitType(0);
  275. if (patentList.size() > 0) {
  276. Patent patent = patentList.stream()
  277. .filter(item -> literatureNo.equals(item.getAppNo())
  278. || literatureNo.equals(item.getPublicNo()) ||
  279. literatureNo.equals(item.getGrantNo())).findFirst().orElse(null);
  280. if (patent != null) {
  281. compareLiteratureVO.setAppNo(patent.getAppNo());
  282. compareLiteratureVO.setAppDate(patent.getAppDate());
  283. if (patent.getPublicNo() == null) {
  284. compareLiteratureVO.setPublicDate(patent.getGrantDate());
  285. compareLiteratureVO.setPublicNo(patent.getGrantNo());
  286. } else {
  287. compareLiteratureVO.setPublicDate(patent.getPublicDate());
  288. compareLiteratureVO.setPublicNo(patent.getPublicNo());
  289. }
  290. compareLiteratureVO.setGrantDate(patent.getGrantDate());
  291. compareLiteratureVO.setGrantNo(patent.getGrantNo());
  292. compareLiteratureVO.setApplicant(patent.getApplicant());
  293. //比较标的专利的申请日和对比专利的公开或者公告日
  294. if (signPatent.getAppDate() != null) {
  295. //当专利的申请日存在时
  296. if (patent.getAppDate() != null) {
  297. if (signPatent.getAppDate().compareTo(patent.getAppDate()) <= 0) {
  298. compareLiteratureVO.setFitType(0);
  299. } else if (patent.getPublicDate() != null) {
  300. if (signPatent.getAppDate().compareTo(patent.getPublicDate()) <= 0)
  301. compareLiteratureVO.setFitType(1);
  302. else if (signPatent.getAppDate().compareTo(patent.getPublicDate()) > 0) {
  303. compareLiteratureVO.setFitType(2);
  304. }
  305. } else if (patent.getGrantDate() != null) {
  306. if (signPatent.getAppDate().compareTo(patent.getGrantDate()) <= 0)
  307. compareLiteratureVO.setFitType(1);
  308. else if (signPatent.getAppDate().compareTo(patent.getGrantDate()) > 0) {
  309. compareLiteratureVO.setFitType(2);
  310. }
  311. }
  312. }
  313. }
  314. }
  315. }
  316. }
  317. //非专利文献
  318. else {
  319. if (signPatent.getAppDate() != null) {
  320. if (publicDate != null) {
  321. if (signPatent.getAppDate().compareTo(publicDate) <= 0) {
  322. compareLiteratureVO.setFitType(0);
  323. } else {
  324. compareLiteratureVO.setFitType(2);
  325. }
  326. }
  327. }
  328. //装载文件
  329. if (literatureNo != null && systemFiles != null && systemFiles.size() != 0) {
  330. SystemFile systemFile = systemFiles.stream().filter(item -> item.getGuid().equals(literatureNo)).findFirst().orElse(null);
  331. if (systemFile != null) {
  332. compareLiteratureVO.setSystemFile(systemFile);
  333. }
  334. }
  335. }
  336. compareLiteratureVOS.add(compareLiteratureVO);
  337. }
  338. } else {
  339. for (CompareLiterature compareLiterature : compareLiteratures) {
  340. String literatureNo = compareLiterature.getLiteratureNo();
  341. CompareLiteratureVO compareLiteratureVO = new CompareLiteratureVO();
  342. BeanUtils.copyProperties(compareLiterature, compareLiteratureVO);
  343. //当为专利文献时
  344. if (compareLiterature.getType().equals(0)) {
  345. compareLiteratureVO.setFitType(0);
  346. }
  347. //非专利文献
  348. else {
  349. compareLiteratureVO.setFitType(2);
  350. //装载文件
  351. if (literatureNo != null && !CollectionUtils.isEmpty(systemFiles)) {
  352. SystemFile systemFile = systemFiles.stream().filter(item -> item.getGuid().equals(literatureNo)).findFirst().orElse(null);
  353. if (systemFile != null) {
  354. compareLiteratureVO.setSystemFile(systemFile);
  355. }
  356. }
  357. }
  358. compareLiteratureVOS.add(compareLiteratureVO);
  359. }
  360. }
  361. return compareLiteratureVOS;
  362. }
  363. //更新对比文献序号
  364. public Boolean updateLiteratureOrder(List<UpdateLiteratureOrderDTO> dtos) {
  365. if (dtos != null && dtos.size() < 0) {
  366. return false;
  367. }
  368. dtos.forEach(item -> {
  369. UpdateWrapper<CompareLiterature> updateWrapper = new UpdateWrapper<>();
  370. updateWrapper.eq("id", item.getId());
  371. updateWrapper.set("sys_order", item.getSysOrder());
  372. this.update(updateWrapper);
  373. });
  374. return true;
  375. }
  376. //批量添加对比文献
  377. public void updateCompareLiteratureBatch(UpdateBatchLiteratureDTO updateBatchLiteratureDTO) {
  378. PersonnelVO personnelVO = new PersonnelVO();
  379. personnelVO.setId("1");
  380. if (updateBatchLiteratureDTO == null) {
  381. return;
  382. }
  383. List<UpdateBatchLiteraturesDTO> dtos = updateBatchLiteratureDTO.getUpdateBatchLiteratureDTOs();
  384. int i = 1;
  385. for (UpdateBatchLiteraturesDTO item : dtos) {
  386. if (item.getType().equals(1)) {
  387. this.saveOrUpdateNotPatent(item);
  388. } else {
  389. this.saveOrUpdatePatent(item);
  390. }
  391. WebSocketMessageVO webSocketMessageVO = new WebSocketMessageVO();
  392. webSocketMessageVO.setAllNum(dtos.size());
  393. webSocketMessageVO.setCurrentNum(i);
  394. webSocketMessageVO.setCreateId(personnelVO.getId());
  395. webSocketMessageVO.setState(1);
  396. messageService.sendMessage(webSocketMessageVO);
  397. i++;
  398. }
  399. WebSocketMessageVO webSocketMessageVO = new WebSocketMessageVO();
  400. webSocketMessageVO.setAllNum(dtos.size());
  401. webSocketMessageVO.setCurrentNum(dtos.size());
  402. webSocketMessageVO.setCreateId(personnelVO.getId());
  403. webSocketMessageVO.setState(2);
  404. messageService.sendMessage(webSocketMessageVO);
  405. }
  406. /**
  407. * 添加或更新非专利文献
  408. */
  409. public Integer saveOrUpdateNotPatent(UpdateBatchLiteraturesDTO updateBatchLiteratureDTO) {
  410. PersonnelVO personnelVO = new PersonnelVO();
  411. Integer projectId = updateBatchLiteratureDTO.getProjectId();
  412. try {
  413. personnelVO = new PersonnelVO();
  414. personnelVO.setId("1");
  415. // personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  416. } catch (Exception e) {
  417. throw new UnLoginException("未登录");
  418. }
  419. CompareLiterature compareLiterature = new CompareLiterature();
  420. compareLiterature.setCreateId(personnelVO.getId());
  421. //报告id
  422. compareLiterature.setProjectId(projectId);
  423. //文档guid
  424. compareLiterature.setLiteratureNo(updateBatchLiteratureDTO.getLiteratureNo());
  425. //文档名称
  426. compareLiterature.setName(updateBatchLiteratureDTO.getName());
  427. //描述
  428. compareLiterature.setDescription(updateBatchLiteratureDTO.getDescription());
  429. //作者
  430. compareLiterature.setAuthorName(updateBatchLiteratureDTO.getAuthorName());
  431. //类型
  432. compareLiterature.setType(1);
  433. //装载排序
  434. compareLiterature.setSysOrder(updateBatchLiteratureDTO.getSysOrder());
  435. //装载公开日
  436. compareLiterature.setPublicDate(updateBatchLiteratureDTO.getPublicDate());
  437. //当传id则为更新
  438. if (updateBatchLiteratureDTO.getId() != null) {
  439. compareLiterature.setId(updateBatchLiteratureDTO.getId());
  440. compareLiterature.updateById();
  441. } else {
  442. compareLiterature.insert();
  443. }
  444. return compareLiterature.getId();
  445. }
  446. /**
  447. * 添加或更新专利文献
  448. */
  449. @Transactional(rollbackFor = Exception.class)
  450. public Integer saveOrUpdatePatent(UpdateBatchLiteraturesDTO updateBatchLiteratureDTO) {
  451. PersonnelVO personnelVO = new PersonnelVO();
  452. Integer projectId = updateBatchLiteratureDTO.getProjectId();
  453. String literatureNo = updateBatchLiteratureDTO.getLiteratureNo();
  454. Integer id = updateBatchLiteratureDTO.getId();
  455. try {
  456. personnelVO = new PersonnelVO();
  457. personnelVO.setId("1");
  458. // personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  459. } catch (Exception e) {
  460. throw new UnLoginException("未登录");
  461. }
  462. Patent patent = new Patent();
  463. PatentWithIdVO patentWithIdVO = new PatentWithIdVO();
  464. //判断库里是否存在该专利
  465. try {
  466. patentWithIdVO = esService.getIdByPatentNo(literatureNo);
  467. if (patentWithIdVO == null) {
  468. // 不存在该专利则从数据库获取著录信息并保存
  469. patentWithIdVO = importSinglePatentService.addSinglePatent(literatureNo);
  470. patent = patentWithIdVO.getPatent();
  471. } else {
  472. patent = patentWithIdVO.getPatent();
  473. }
  474. } catch (Exception e) {
  475. }
  476. if(patentWithIdVO==null){
  477. return null;
  478. }
  479. literatureNo = patent.getPatentNo();
  480. //判断该专利是否已经作为文献
  481. Integer lastId = this.getHaveAddIdByNos(projectId, literatureNo);
  482. if (lastId != null && id == null) {
  483. id = lastId;
  484. }
  485. CompareLiterature compareLiterature = new CompareLiterature();
  486. compareLiterature.setCreateId(personnelVO.getId());
  487. //报告id
  488. compareLiterature.setProjectId(projectId);
  489. //文档guid
  490. compareLiterature.setLiteratureNo(patent.getPatentNo());
  491. //文档名称
  492. String name = literatureNo;
  493. if (patent != null) {
  494. if (patent.getTitle() != null && patent.getTitle().size() != 0) {
  495. name = patent.getTitle().get(0).getTextContent();
  496. }
  497. compareLiterature.setAppDate(patent.getAppDate());
  498. compareLiterature.setPublicDate(patent.getPublicDate());
  499. }
  500. compareLiterature.setName(name);
  501. //描述
  502. compareLiterature.setDescription(updateBatchLiteratureDTO.getDescription());
  503. //作者
  504. String authorName = "";
  505. if (patent != null && patent.getRightHolder() != null && patent.getRightHolder().size() > 0) {
  506. authorName = patent.getRightHolder().get(0).getName();
  507. }
  508. compareLiterature.setAuthorName(authorName);
  509. //类型
  510. compareLiterature.setType(0);
  511. //装载排序
  512. compareLiterature.setSysOrder(updateBatchLiteratureDTO.getSysOrder());
  513. //当传id则为更新
  514. if (id != null) {
  515. compareLiterature.setId(updateBatchLiteratureDTO.getId());
  516. compareLiterature.updateById();
  517. } else {
  518. compareLiterature.insert();
  519. }
  520. try {
  521. importSinglePatentService.saveAssoPatentProjectToEs(projectId, patentWithIdVO.getId());
  522. } catch (Exception e) {
  523. throw new XiaoShiException("添加和es关联错误");
  524. }
  525. return compareLiterature.getId();
  526. }
  527. /**
  528. * 根据号码判断是否被加入过
  529. *
  530. * @param projectId
  531. * @param nos
  532. * @return
  533. */
  534. public Integer getHaveAddIdByNos(Integer projectId, String nos) {
  535. LambdaQueryWrapper<CompareLiterature> queryWrapper = new LambdaQueryWrapper<>();
  536. queryWrapper.eq(CompareLiterature::getLiteratureNo, nos)
  537. .eq(CompareLiterature::getProjectId, projectId);
  538. CompareLiterature compareLiterature = this.getOne(queryWrapper, false);
  539. if (compareLiterature != null) {
  540. return compareLiterature.getId();
  541. }
  542. return null;
  543. }
  544. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  545. public Boolean deleteCompareLiterature(List<Integer> ids) throws IOException {
  546. if (ids == null || ids.size() <= 0) {
  547. throw new XiaoShiException("请选择对比文献");
  548. }
  549. List<CompareLiterature> literatures = compareLiteratureMapper.selectBatchIds(ids);
  550. if (!CollectionUtils.isEmpty(literatures)) {
  551. List<CompareLiterature> literatureList = literatures.stream().filter(i -> i.getType().equals(0)).collect(Collectors.toList());
  552. for (CompareLiterature literature : literatureList) {
  553. Integer number = esService.getPatent(literature.getLiteratureNo(), literature.getProjectId());
  554. if (number < 1) {
  555. throw new XiaoShiException("删除失败");
  556. }
  557. }
  558. }
  559. return this.removeBatchByIds(ids);
  560. }
  561. public List<CompareLiteratureVO> getByIds(List<Integer> ids) {
  562. LambdaQueryWrapper<CompareLiterature> queryWrapper = new LambdaQueryWrapper<>();
  563. queryWrapper.in(CompareLiterature::getId, ids)
  564. .orderByAsc(CompareLiterature::getSysOrder);
  565. List<CompareLiterature> compareLiteratures = this.list(queryWrapper);
  566. List<CompareLiteratureVO> compareLiteratureVOS = this.loadBaseMessage(compareLiteratures);
  567. return compareLiteratureVOS;
  568. }
  569. public List<CompareLiteratureVO> loadBaseMessage(List<CompareLiterature> compareLiteratures) {
  570. //查询标的专利号
  571. List<CompareLiteratureVO> compareLiteratureVOS = new ArrayList<>();
  572. //非专利文献列表
  573. List<String> guids = compareLiteratures.stream().filter(item -> item.getType().equals(1)).map(CompareLiterature::getLiteratureNo).collect(Collectors.toList());
  574. //专利文献列表
  575. List<String> patentNos = compareLiteratures.stream().filter(item -> item.getType().equals(0)).map(CompareLiterature::getLiteratureNo).collect(Collectors.toList());
  576. List<Patent> patentList = new ArrayList<>();
  577. if (patentNos.size() > 0) {
  578. try {
  579. patentList = esPatentService.getPatentsByNo(patentNos, false, null, null);
  580. } catch (Exception e) {
  581. throw new XiaoShiException("装载文献信息失败");
  582. }
  583. }
  584. //查询文件
  585. List<SystemFile> systemFiles = new ArrayList<>();
  586. //查询文件
  587. if (guids.size() != 0) {
  588. try {
  589. String res = fileManagerService.getSystemFileFromFMS(guids);
  590. if (res != null && !res.trim().equals("")) {
  591. systemFiles = JSONObject.parseArray(res, SystemFile.class);
  592. }
  593. } catch (Exception e) {
  594. throw new XiaoShiException("装载错误");
  595. }
  596. }
  597. for (CompareLiterature compareLiterature : compareLiteratures) {
  598. Integer id = compareLiterature.getId();
  599. String literatureNo = compareLiterature.getLiteratureNo();
  600. Date publicDate = compareLiterature.getPublicDate();
  601. CompareLiteratureVO compareLiteratureVO = new CompareLiteratureVO();
  602. BeanUtils.copyProperties(compareLiterature, compareLiteratureVO);
  603. //当为专利文献时
  604. if (compareLiterature.getType().equals(0)) {
  605. compareLiteratureVO.setFitType(0);
  606. if (patentList.size() > 0) {
  607. Patent patent = patentList.stream()
  608. .filter(item -> literatureNo.equals(item.getAppNo())
  609. || literatureNo.equals(item.getPublicNo()) ||
  610. literatureNo.equals(item.getGrantNo())).findFirst().orElse(null);
  611. if (patent != null) {
  612. compareLiteratureVO.setAppNo(patent.getAppNo());
  613. compareLiteratureVO.setAppDate(patent.getAppDate());
  614. compareLiteratureVO.setPublicDate(patent.getPublicDate());
  615. compareLiteratureVO.setPublicNo(patent.getPublicNo());
  616. compareLiteratureVO.setGrantDate(patent.getGrantDate());
  617. compareLiteratureVO.setGrantNo(patent.getGrantNo());
  618. }
  619. }
  620. }
  621. //非专利文献
  622. else {
  623. //装载文件
  624. if (literatureNo != null && systemFiles != null && systemFiles.size() != 0) {
  625. SystemFile systemFile = systemFiles.stream().filter(item -> item.getGuid().equals(literatureNo)).findFirst().orElse(null);
  626. if (systemFile != null) {
  627. compareLiteratureVO.setSystemFile(systemFile);
  628. }
  629. }
  630. }
  631. compareLiteratureVOS.add(compareLiteratureVO);
  632. }
  633. return compareLiteratureVOS;
  634. }
  635. public Boolean copyCompareLiterature(Integer copiedProjectId, Integer projectId) {
  636. //根据报告id获得对比文件列表
  637. LambdaQueryWrapper<CompareLiterature> wrapper = new LambdaQueryWrapper<>();
  638. wrapper.eq(CompareLiterature::getProjectId, copiedProjectId);
  639. List<CompareLiterature> compareFilesList = this.list(wrapper);
  640. if (compareFilesList.size() != 0) {
  641. for (CompareLiterature compareFile : compareFilesList) {
  642. compareFile.setId(null);
  643. compareFile.setProjectId(projectId);
  644. }
  645. return this.saveBatch(compareFilesList);
  646. }
  647. return true;
  648. }
  649. public void addAssoToEs(){
  650. List<String> patentNos =new ArrayList<>();
  651. LambdaQueryWrapper<CompareLiterature> compareLiteratureLambdaQueryWrapper =new LambdaQueryWrapper<>();
  652. compareLiteratureLambdaQueryWrapper.eq(CompareLiterature::getType,0);
  653. List<CompareLiterature> compareLiteratures =this.list(compareLiteratureLambdaQueryWrapper);
  654. int i=0;
  655. for (CompareLiterature item: compareLiteratures){
  656. i++;
  657. System.out.println(i);
  658. String patentNo =item.getLiteratureNo().trim();
  659. Integer projectId =item.getProjectId();
  660. try {
  661. PatentWithIdVO patentWithIdVO = esService.getIdByPatentNo(patentNo);
  662. if(patentWithIdVO==null){
  663. // 不存在该专利则从数据库获取著录信息并保存
  664. patentWithIdVO = importSinglePatentService.addSinglePatent(patentNo);
  665. }
  666. importSinglePatentService.saveAssoPatentProjectToEs(projectId, patentWithIdVO.getId());
  667. }
  668. catch (Exception e){
  669. e.printStackTrace();
  670. patentNos.add(patentNo);
  671. }
  672. }
  673. System.out.println(patentNos);
  674. }
  675. }