NoveltyCompareLiteratureService.java 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  1. package cn.cslg.pas.service.novelty;
  2. import cn.cslg.pas.common.dto.AddCompareFileDTO;
  3. import cn.cslg.pas.common.dto.CompareFileIdDTO;
  4. import cn.cslg.pas.common.dto.EditCompareFileDTO;
  5. import cn.cslg.pas.common.dto.QueryCompareFileDTO;
  6. import cn.cslg.pas.common.dto.business.LiteratureQueryDTO;
  7. import cn.cslg.pas.common.model.cronModel.Records;
  8. import cn.cslg.pas.common.utils.GenerateObjectUtil;
  9. import cn.cslg.pas.common.vo.CompareLiteratureVO;
  10. import cn.cslg.pas.common.vo.GetReportInfoFromWDVO;
  11. import cn.cslg.pas.common.vo.NoveltyProjectVO.NoveltyCompareLiteratureVO;
  12. import cn.cslg.pas.common.vo.NoveltyProjectVO.NoveltyCompareRecordVO;
  13. import cn.cslg.pas.common.vo.QueryCompareFileVO;
  14. import cn.cslg.pas.common.vo.QueryNoveltyProjectVO;
  15. import cn.cslg.pas.domain.business.CompareLiterature;
  16. import cn.cslg.pas.domain.es.Marking;
  17. import cn.cslg.pas.domain.es.Patent;
  18. import cn.cslg.pas.domain.es.PatentPerson;
  19. import cn.cslg.pas.mapper.CompareLiteratureMapper;
  20. import cn.cslg.pas.mapper.RetrieveRecordMapper;
  21. import cn.cslg.pas.mapper.novelty.NoveltyCompareLiteratureMapper;
  22. import cn.cslg.pas.service.business.CompareLiteratureService;
  23. import cn.cslg.pas.service.business.es.EsPatentService;
  24. import cn.cslg.pas.service.business.es.EsScratchWordsService;
  25. import cn.cslg.pas.service.importPatent.ImportSinglePatentService;
  26. import cn.cslg.pas.service.permissions.GetReportInfoFromWDService;
  27. import com.alibaba.fastjson2.JSONObject;
  28. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  29. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  30. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  31. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  32. import cn.cslg.pas.domain.business.novelty.NoveltyCompareLiterature;
  33. import lombok.RequiredArgsConstructor;
  34. import lombok.extern.slf4j.Slf4j;
  35. import org.apache.commons.lang3.ObjectUtils;
  36. import org.apache.commons.lang3.StringUtils;
  37. import org.openqa.selenium.By;
  38. import org.openqa.selenium.WebElement;
  39. import org.springframework.beans.BeanUtils;
  40. import org.springframework.beans.factory.annotation.Autowired;
  41. import org.springframework.context.annotation.Lazy;
  42. import org.springframework.stereotype.Service;
  43. import org.springframework.util.CollectionUtils;
  44. import java.io.IOException;
  45. import java.util.ArrayList;
  46. import java.util.HashMap;
  47. import java.util.List;
  48. import java.util.Map;
  49. import java.util.stream.Collectors;
  50. /**
  51. * @author admin
  52. * @description 针对表【novelty_compare_literature(查新报告对比文件)】的数据库操作Service实现
  53. * @createDate 2024-09-29 09:10:32
  54. */
  55. @Service
  56. @Slf4j
  57. @RequiredArgsConstructor(onConstructor_ = {@Lazy})
  58. public class NoveltyCompareLiteratureService extends ServiceImpl<NoveltyCompareLiteratureMapper, NoveltyCompareLiterature> {
  59. @Autowired
  60. private NoveltyCompareLiteratureMapper noveltyCompareLiteratureMapper;
  61. @Autowired
  62. private RetrieveRecordMapper retrieveRecordMapper;
  63. @Autowired
  64. private GetReportInfoFromWDService getReportInfoFromWDService;
  65. @Autowired
  66. private CompareLiteratureMapper compareLiteratureMapper;
  67. @Autowired
  68. private CompareLiteratureService compareLiteratureService;
  69. @Autowired
  70. private EsScratchWordsService esScratchWordsService;
  71. @Autowired
  72. private EsPatentService esPatentService;
  73. @Autowired
  74. private ImportSinglePatentService importSinglePatentService;
  75. public Records queryNoveltyCompareLiterature(LiteratureQueryDTO vo) throws Exception {
  76. Integer projectId = vo.getProjectId();
  77. Records records = new Records();
  78. //根据projectId查询对比文件
  79. LambdaQueryWrapper<CompareLiterature> queryWrapper = new LambdaQueryWrapper<>();
  80. queryWrapper.eq(CompareLiterature::getProjectId, projectId)
  81. .orderByAsc(CompareLiterature::getSysOrder);
  82. List<CompareLiterature> compareLiteratures = new ArrayList<>();
  83. if (vo.getCurrent() != null && vo.getSize() != null) {
  84. Page<CompareLiterature> page = compareLiteratureService.page(new Page<>(vo.getCurrent(), vo.getSize()), queryWrapper);
  85. compareLiteratures = page.getRecords();
  86. records.setTotal(page.getTotal());
  87. records.setSize(Long.parseLong(vo.getSize().toString()));
  88. records.setCurrent(Long.parseLong(vo.getCurrent().toString()));
  89. } else {
  90. compareLiteratures = compareLiteratureService.list(queryWrapper);
  91. }
  92. List<CompareLiteratureVO> literatureVOS = this.loadCompareLiterature(compareLiteratures);
  93. this.loadCompareLiteratureVOS(literatureVOS, projectId);
  94. records.setData(literatureVOS);
  95. return records;
  96. }
  97. public List<CompareLiteratureVO> loadCompareLiterature(List<CompareLiterature> compareLiteratures) throws Exception {
  98. List<CompareLiteratureVO> compareLiteratureVOS = new ArrayList<>();
  99. List<String> patentNos = compareLiteratures.stream().map(CompareLiterature::getLiteratureNo).collect(Collectors.toList());
  100. List<Patent> patentList = esPatentService.getPatentsByNo(patentNos, false, null, null);
  101. for (CompareLiterature compareLiterature : compareLiteratures) {
  102. String literatureNo = compareLiterature.getLiteratureNo();
  103. Patent patent = patentList.stream()
  104. .filter(item -> literatureNo.equals(item.getAppNo())
  105. || literatureNo.equals(item.getPublicNo()) ||
  106. literatureNo.equals(item.getGrantNo())).findFirst().orElse(null);
  107. CompareLiteratureVO compareLiteratureVO = new CompareLiteratureVO();
  108. BeanUtils.copyProperties(compareLiterature, compareLiteratureVO);
  109. if (patent != null) {
  110. compareLiteratureVO.setAppNo(patent.getAppNo());
  111. compareLiteratureVO.setAppDate(patent.getAppDate());
  112. if (patent.getPublicNo() == null) {
  113. compareLiteratureVO.setPublicDate(patent.getGrantDate());
  114. compareLiteratureVO.setPublicNo(patent.getGrantNo());
  115. } else {
  116. compareLiteratureVO.setPublicDate(patent.getPublicDate());
  117. compareLiteratureVO.setPublicNo(patent.getPublicNo());
  118. }
  119. compareLiteratureVO.setGrantDate(patent.getGrantDate());
  120. compareLiteratureVO.setGrantNo(patent.getGrantNo());
  121. if (StringUtils.isNotEmpty(compareLiteratureVO.getAuthorName())) {
  122. List<PatentPerson> personList = new ArrayList<>();
  123. PatentPerson person = new PatentPerson();
  124. person.setName(compareLiteratureVO.getAuthorName());
  125. personList.add(person);
  126. compareLiteratureVO.setApplicant(personList);
  127. } else {
  128. compareLiteratureVO.setApplicant(patent.getApplicant());
  129. }
  130. }
  131. compareLiteratureVOS.add(compareLiteratureVO);
  132. }
  133. return compareLiteratureVOS;
  134. }
  135. public void loadCompareLiteratureVOS(List<CompareLiteratureVO> compareLiteratureVOS, Integer projectId) throws Exception {
  136. if (!CollectionUtils.isEmpty(compareLiteratureVOS)) {
  137. List<Integer> literatureIds = compareLiteratureVOS.stream().map(CompareLiteratureVO::getId).collect(Collectors.toList());
  138. List<NoveltyCompareRecordVO> recordVOS = esScratchWordsService.queryNoveltyRecord(projectId, 1);
  139. List<NoveltyCompareLiterature> noveltyCompareLiteratureList = noveltyCompareLiteratureMapper.selectList(new LambdaQueryWrapper<NoveltyCompareLiterature>()
  140. .in(NoveltyCompareLiterature::getCompareLitertureId, literatureIds));
  141. for (CompareLiteratureVO literatureVO : compareLiteratureVOS) {
  142. NoveltyCompareLiterature noveltyCompareLiterature = noveltyCompareLiteratureList.stream().filter(i -> literatureVO.getId().equals(i.getCompareLitertureId())).findFirst().orElse(new NoveltyCompareLiterature());
  143. if (!org.springframework.util.ObjectUtils.isEmpty(noveltyCompareLiterature)) {
  144. literatureVO.setCompareFileId(noveltyCompareLiterature.getId());
  145. literatureVO.setRetrieveRecordId(noveltyCompareLiterature.getRetrieveRecordId());
  146. literatureVO.setRelevance(noveltyCompareLiterature.getRelevance());
  147. literatureVO.setIfEffectinv(noveltyCompareLiterature.getIfEffectinv());
  148. literatureVO.setFileRemark(noveltyCompareLiterature.getRemark());
  149. literatureVO.setGeneralRemark(noveltyCompareLiterature.getGeneralRemark());
  150. literatureVO.setTechnicalPoints(noveltyCompareLiterature.getTechnicalPoints());
  151. literatureVO.setExcuteCase(noveltyCompareLiterature.getExcuteCase());
  152. literatureVO.setBeneficialEffect(noveltyCompareLiterature.getBeneficialEffect());
  153. }
  154. if (!CollectionUtils.isEmpty(recordVOS)) {
  155. List<NoveltyCompareRecordVO> collect = recordVOS.stream().filter(i -> i.getPatentNo().equals(literatureVO.getLiteratureNo())).collect(Collectors.toList());
  156. literatureVO.setNoveltyCompareRecordVOS(collect);
  157. }
  158. }
  159. }
  160. }
  161. public List<QueryCompareFileVO> queryCompareFile(QueryCompareFileDTO vo) {
  162. return noveltyCompareLiteratureMapper.queryCompareFile(vo);
  163. }
  164. public Integer addCompareFile(AddCompareFileDTO vo) {
  165. Integer compareLitertureId = vo.getId();
  166. NoveltyCompareLiterature literature = noveltyCompareLiteratureMapper.selectOne(new LambdaQueryWrapper<NoveltyCompareLiterature>()
  167. .eq(NoveltyCompareLiterature::getCompareLitertureId, compareLitertureId));
  168. if (ObjectUtils.isEmpty(literature)) {
  169. literature = new NoveltyCompareLiterature();
  170. BeanUtils.copyProperties(vo, literature);
  171. literature.setId(null);
  172. literature.setCompareLitertureId(compareLitertureId);
  173. literature.insert();
  174. }
  175. else {
  176. if(literature.getRetrieveRecordId()==null){
  177. literature.setRetrieveRecordId(vo.getRetrieveRecordId());
  178. literature.updateById();
  179. }
  180. }
  181. return literature.getId();
  182. }
  183. public Integer editCompareFile(AddCompareFileDTO vo) {
  184. NoveltyCompareLiterature literature = noveltyCompareLiteratureMapper.selectById(vo.getCompareFileId());
  185. literature.setCompareLitertureId(vo.getId());
  186. literature.setRetrieveRecordId(vo.getRetrieveRecordId());
  187. literature.setRelevance(vo.getRelevance());
  188. literature.setRemark(vo.getRemark());
  189. literature.setGeneralRemark(vo.getGeneralRemark());
  190. literature.setIfEffectinv(vo.getIfEffectinv());
  191. literature.setBeneficialEffect(vo.getBeneficialEffect());
  192. literature.setExcuteCase(vo.getExcuteCase());
  193. literature.setTechnicalPoints(vo.getTechnicalPoints());
  194. literature.updateById();
  195. return literature.getId();
  196. }
  197. public Integer editCompareFileByProjectId(EditCompareFileDTO vo) throws Exception {
  198. CompareLiterature compareLiterature = compareLiteratureMapper.selectOne(new LambdaQueryWrapper<CompareLiterature>()
  199. .eq(CompareLiterature::getLiteratureNo, vo.getPatentNo())
  200. .eq(CompareLiterature::getProjectId, vo.getProjectId()));
  201. NoveltyCompareLiterature literature = noveltyCompareLiteratureMapper.selectOne(new LambdaQueryWrapper<NoveltyCompareLiterature>()
  202. .eq(NoveltyCompareLiterature::getCompareLitertureId, compareLiterature.getId()));
  203. if (ObjectUtils.isEmpty(literature)) {
  204. literature = new NoveltyCompareLiterature();
  205. literature.setCompareLitertureId(compareLiterature.getId());
  206. literature.insert();
  207. }
  208. if (StringUtils.equals(vo.getField(), "fileRemark")) {
  209. vo.setField("remark");
  210. }
  211. GenerateObjectUtil.setObjectProperty(literature, vo.getField(), vo.getValue());
  212. literature.updateById();
  213. return literature.getId();
  214. }
  215. public void delCompareFile(CompareFileIdDTO vo) {
  216. NoveltyCompareLiterature noveltyCompareLiterature = noveltyCompareLiteratureMapper.selectOne(new QueryWrapper<NoveltyCompareLiterature>()
  217. .lambda()
  218. .eq(NoveltyCompareLiterature::getCompareLitertureId, vo.getCompareLitertureId()));
  219. if (ObjectUtils.isNotEmpty(noveltyCompareLiterature)) {
  220. //TODO 缺少对比记录方法,判断是否有对比记录,有的话则提示
  221. noveltyCompareLiteratureMapper.deleteById(noveltyCompareLiterature.getId());
  222. }
  223. compareLiteratureMapper.deleteById(vo.getCompareLitertureId());
  224. }
  225. public QueryNoveltyProjectVO getReportInfoFromWD(String caseNo) throws IOException {
  226. String result = getReportInfoFromWDService.getReportInfoFromWD(caseNo);
  227. QueryNoveltyProjectVO projectVO = new QueryNoveltyProjectVO();
  228. if (StringUtils.isNotEmpty(result)) {
  229. GetReportInfoFromWDVO wdvo = JSONObject.parseObject(result, GetReportInfoFromWDVO.class);
  230. projectVO.setInnerCaseNumber(wdvo.getCaseNo());
  231. projectVO.setCaseName(wdvo.getCaseName());
  232. if (ObjectUtils.isNotEmpty(wdvo.getCustomer()) && StringUtils.isNotEmpty(wdvo.getCustomer().getName())) {
  233. projectVO.setApplicants(wdvo.getCustomer().getName());
  234. }
  235. }
  236. return projectVO;
  237. }
  238. public static String getSelectText(WebElement element) {
  239. String strValue = element.getAttribute("value");
  240. if (strValue == null || strValue.isEmpty()) {
  241. return null;
  242. }
  243. List<WebElement> ops = element.findElements(By.tagName("option"));
  244. for (WebElement op : ops) {
  245. if (op.getAttribute("value").equals(strValue)) {
  246. return op.getText();
  247. }
  248. }
  249. return null;
  250. }
  251. public List<Integer> copyCompareFile(List<Integer> ids, Integer toProjectId, Integer fromProjectId) throws Exception {
  252. if (ids == null || ids.size() == 0) {
  253. return new ArrayList<>();
  254. }
  255. QueryCompareFileDTO queryCompareFileDTOFrom = new QueryCompareFileDTO();
  256. queryCompareFileDTOFrom.setIds(ids);
  257. List<QueryCompareFileVO> queryCompareFileVOSFrom = this.getBaseMapper().queryCompareFile(queryCompareFileDTOFrom);
  258. List<String> patentNos = queryCompareFileVOSFrom.stream().map(QueryCompareFileVO::getLiteratureNo).collect(Collectors.toList());
  259. QueryCompareFileDTO queryCompareFileDTOTo = new QueryCompareFileDTO();
  260. queryCompareFileDTOTo.setPatentNos(patentNos);
  261. queryCompareFileDTOTo.setProjectId(toProjectId);
  262. List<QueryCompareFileVO> queryCompareFileVOSTo = this.getBaseMapper().queryCompareFile(queryCompareFileDTOTo);
  263. for (QueryCompareFileVO queryCompareFileVO : queryCompareFileVOSFrom) {
  264. importSinglePatentService.addPatentToProject(queryCompareFileVO.getLiteratureNo(),toProjectId);
  265. QueryCompareFileVO queryCompareFileVOTo = queryCompareFileVOSTo.stream().filter(item -> item.getLiteratureNo().equals(queryCompareFileVO.getLiteratureNo())).findFirst().orElse(null);
  266. if (queryCompareFileVOTo == null) {
  267. CompareLiterature compareLiterature = new CompareLiterature();
  268. BeanUtils.copyProperties(queryCompareFileVO, compareLiterature);
  269. compareLiterature.setRemark(queryCompareFileVO.getLiteratureRemark());
  270. compareLiterature.setProjectId(toProjectId);
  271. compareLiterature.setId(null);
  272. compareLiterature.insert();
  273. NoveltyCompareLiterature noveltyCompareLiterature = new NoveltyCompareLiterature();
  274. BeanUtils.copyProperties(queryCompareFileVO, noveltyCompareLiterature);
  275. noveltyCompareLiterature.setRemark(queryCompareFileVO.getFileRemark());
  276. noveltyCompareLiterature.setCompareLitertureId(compareLiterature.getId());
  277. noveltyCompareLiterature.insert();
  278. } else {
  279. Integer fromId = queryCompareFileVO.getCompareFileId();
  280. if (fromId == null) {
  281. //什么都不需要做
  282. } else {
  283. Integer toId = queryCompareFileVOTo.getCompareFileId();
  284. if (toId == null) {
  285. NoveltyCompareLiterature noveltyCompareLiterature = new NoveltyCompareLiterature();
  286. BeanUtils.copyProperties(queryCompareFileVO, noveltyCompareLiterature);
  287. noveltyCompareLiterature.setRemark(queryCompareFileVO.getFileRemark());
  288. noveltyCompareLiterature.setCompareLitertureId(queryCompareFileVOTo.getCompareLitertureId());
  289. noveltyCompareLiterature.insert();
  290. } else {
  291. NoveltyCompareLiterature noveltyCompareLiterature = new NoveltyCompareLiterature();
  292. BeanUtils.copyProperties(queryCompareFileVOTo, noveltyCompareLiterature);
  293. noveltyCompareLiterature.setRemark(queryCompareFileVO.getFileRemark());
  294. if (queryCompareFileVO.getBeneficialEffect() != null) {
  295. noveltyCompareLiterature.setBeneficialEffect(noveltyCompareLiterature.getBeneficialEffect() + queryCompareFileVO.getBeneficialEffect());
  296. }
  297. if (queryCompareFileVO.getRelevance() != null) {
  298. noveltyCompareLiterature.setRelevance(noveltyCompareLiterature.getRelevance() + queryCompareFileVO.getRelevance());
  299. }
  300. if (queryCompareFileVO.getLiteratureRemark() != null) {
  301. noveltyCompareLiterature.setRemark(noveltyCompareLiterature.getRemark() + queryCompareFileVO.getLiteratureRemark());
  302. }
  303. if (queryCompareFileVO.getGeneralRemark() != null) {
  304. noveltyCompareLiterature.setGeneralRemark(noveltyCompareLiterature.getGeneralRemark() + queryCompareFileVO.getGeneralRemark());
  305. }
  306. if (queryCompareFileVO.getTechnicalPoints() != null) {
  307. noveltyCompareLiterature.setGeneralRemark(noveltyCompareLiterature.getTechnicalPoints() + queryCompareFileVO.getTechnicalPoints());
  308. }
  309. if (queryCompareFileVO.getExcuteCase() != null) {
  310. noveltyCompareLiterature.setExcuteCase(noveltyCompareLiterature.getExcuteCase() + queryCompareFileVO.getExcuteCase());
  311. }
  312. if (queryCompareFileVO.getBeneficialEffect() != null) {
  313. noveltyCompareLiterature.setBeneficialEffect(noveltyCompareLiterature.getBeneficialEffect() + queryCompareFileVO.getBeneficialEffect());
  314. }
  315. }
  316. }
  317. }
  318. }
  319. //添加标注
  320. if (patentNos != null && patentNos.size() > 0) {
  321. List<NoveltyCompareRecordVO> noveltyCompareRecordVOS = esScratchWordsService.queryMarkingByNo(fromProjectId, patentNos);
  322. List<NoveltyCompareRecordVO> noveltyCompareRecordVOList = esScratchWordsService.queryMarkingByNo(toProjectId, patentNos);
  323. List<Marking> markings = new ArrayList<>();
  324. noveltyCompareRecordVOS.forEach(item -> {
  325. NoveltyCompareRecordVO noveltyCompareRecordVO = noveltyCompareRecordVOList.stream().filter(t -> t.getPatentNo().equals(item.getPatentNo())).findFirst().orElse(null);
  326. Marking marking = new Marking();
  327. if (noveltyCompareRecordVO != null) {
  328. BeanUtils.copyProperties(noveltyCompareRecordVO, marking);
  329. if (noveltyCompareRecordVO.getMarkNoteText() != null) {
  330. marking.setMarkNoteText(noveltyCompareRecordVO.getMarkNoteText() + item.getMarkNoteText());
  331. } else {
  332. marking.setMarkNoteText(item.getMarkNoteText());
  333. }
  334. esScratchWordsService.updateScratchWords(noveltyCompareRecordVO.getId(), marking);
  335. } else {
  336. BeanUtils.copyProperties(item, marking);
  337. marking.setProjectId(toProjectId);
  338. markings.add(marking);
  339. }
  340. });
  341. esScratchWordsService.saveListToEs(markings);
  342. }
  343. return ids;
  344. }
  345. /**
  346. * 根据检索记录ids查询专利信息
  347. *
  348. * @param retrieveIds
  349. * @return
  350. */
  351. public Map<Integer, List<NoveltyCompareLiteratureVO>> getPatentNoByRetrieveIds(List<Integer> retrieveIds) {
  352. Map<Integer, List<NoveltyCompareLiteratureVO>> noveltyMap = new HashMap<>();
  353. for (Integer retrieveId : retrieveIds) {
  354. List<NoveltyCompareLiteratureVO> noveltyCompareLiteratureVOS = noveltyCompareLiteratureMapper.getPatentNoByRetrieveId(retrieveId);
  355. if (noveltyCompareLiteratureVOS != null && noveltyCompareLiteratureVOS.size() != 0) {
  356. noveltyMap.put(retrieveId, noveltyCompareLiteratureVOS);
  357. }
  358. }
  359. return noveltyMap;
  360. }
  361. }