ProjectPatentLinkService.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package cn.cslg.pas.service;
  2. import cn.cslg.pas.common.model.BaseEntity;
  3. import cn.cslg.pas.common.model.vo.PatentReadVO;
  4. import cn.cslg.pas.common.utils.JsonUtils;
  5. import cn.cslg.pas.common.utils.StringUtils;
  6. import cn.cslg.pas.domain.Patent;
  7. import cn.cslg.pas.domain.ProjectFolderPatentLink;
  8. import cn.cslg.pas.domain.ProjectPatentLink;
  9. import cn.cslg.pas.mapper.ProjectPatentLinkMapper;
  10. import cn.cslg.pas.common.utils.CacheUtils;
  11. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  12. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  13. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  14. import lombok.RequiredArgsConstructor;
  15. import org.springframework.context.annotation.Lazy;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import java.util.*;
  19. import java.util.concurrent.ConcurrentHashMap;
  20. import java.util.stream.Collectors;
  21. /**
  22. * <p>
  23. * 专题库关联专利信息表 服务实现类
  24. * </p>
  25. *
  26. * @author 王岩
  27. * @since 2022-01-24
  28. */
  29. @Service
  30. @RequiredArgsConstructor(onConstructor_ = {@Lazy})
  31. public class ProjectPatentLinkService extends ServiceImpl<ProjectPatentLinkMapper, ProjectPatentLink> {
  32. private final ProjectFolderPatentLinkService projectFolderPatentLinkService;
  33. private final CacheUtils cacheUtils;
  34. private final PatentService patentService;
  35. public List<ProjectPatentLink> getProjectPatentsByProjectId(Integer projectId) {
  36. LambdaQueryWrapper<ProjectPatentLink> queryWrapper = new LambdaQueryWrapper<>();
  37. queryWrapper.eq(ProjectPatentLink::getProjectId, projectId);
  38. return this.list(queryWrapper);
  39. }
  40. public ProjectPatentLink getProjectPatentByProIdAndPatentId(Integer projectId, Integer patentId) {
  41. LambdaQueryWrapper<ProjectPatentLink> queryWrapper = new LambdaQueryWrapper<>();
  42. queryWrapper.eq(ProjectPatentLink::getProjectId, projectId);
  43. queryWrapper.eq(ProjectPatentLink::getPatentId, patentId);
  44. return this.getOne(queryWrapper);
  45. }
  46. public List<ProjectPatentLink> getProjectPatentByProIdAndPatentIds(Integer projectId, List<Integer> patentIds) {
  47. if (patentIds == null || patentIds.size() == 0) {
  48. return new ArrayList<>();
  49. }
  50. LambdaQueryWrapper<ProjectPatentLink> queryWrapper = new LambdaQueryWrapper<>();
  51. queryWrapper.eq(ProjectPatentLink::getProjectId, projectId);
  52. queryWrapper.in(ProjectPatentLink::getPatentId, patentIds);
  53. return this.list(queryWrapper);
  54. }
  55. public void updateProjectPatent(Integer projectId, Integer patentId) {
  56. ProjectPatentLink temp = this.getProjectPatentByProIdAndPatentId(projectId, patentId);
  57. if (temp == null) {
  58. temp = new ProjectPatentLink();
  59. temp.setPatentId(patentId);
  60. temp.setProjectId(projectId);
  61. temp.insert();
  62. }
  63. }
  64. public List<ProjectPatentLink> getProjectPatentLinkByProjectAndFolder(Integer projectId, String folder) {
  65. List<ProjectPatentLink> linkList = this.getProjectPatentsByProjectId(projectId);
  66. if (StringUtils.isNotEmpty(folder)) {
  67. List<Integer> folders = StringUtils.changeStringToInteger(folder, ",");
  68. List<ProjectFolderPatentLink> folderLinks = projectFolderPatentLinkService.getProjectFolderLinkByProjectIdAndFolder(projectId, folders);
  69. linkList = linkList.stream().filter(item -> folderLinks.stream().map(ProjectFolderPatentLink::getPatentId).collect(Collectors.toList()).contains(item.getPatentId())).collect(Collectors.toList());
  70. }
  71. return linkList;
  72. }
  73. public Map<String, Object> getPatentReadTotal(PatentReadVO params) {
  74. List<ProjectPatentLink> linkList = new ArrayList<>();
  75. if (StringUtils.isNotEmpty(params.getFolder())) {
  76. linkList = projectFolderPatentLinkService.getProjectFolderLinkByProjectIdAndFolder(params.getProjectId(), Integer.parseInt(params.getFolder())).stream().map(item -> {
  77. ProjectPatentLink projectPatentLink = new ProjectPatentLink();
  78. projectPatentLink.setLook(item.getLook());
  79. projectPatentLink.setProjectId(item.getProjectId());
  80. projectPatentLink.setPatentId(item.getPatentId());
  81. projectPatentLink.setId(item.getId());
  82. return projectPatentLink;
  83. }).collect(Collectors.toList());
  84. } else {
  85. linkList = this.getProjectPatentsByProjectId(params.getProjectId());
  86. }
  87. Map<String, Object> result = new ConcurrentHashMap<>();
  88. result.put("all", linkList.size());
  89. result.put("read", linkList.stream().filter(item -> item.getLook().equals(1)).count());
  90. result.put("unread", linkList.stream().filter(item -> item.getLook().equals(0)).count());
  91. return result;
  92. }
  93. public Boolean updatePatentReadStatus(PatentReadVO params) {
  94. if (StringUtils.isNotEmpty(params.getFolder())) {
  95. List<ProjectFolderPatentLink> projectFolderPatentLinkList = projectFolderPatentLinkService.getProjectFolderLinkByProjectIdAndFolderAndPatentIds(params.getProjectId(), Integer.parseInt(params.getFolder()), params.getPatentIds());
  96. projectFolderPatentLinkList.forEach(item -> item.setLook(params.getStatus()));
  97. return projectFolderPatentLinkService.saveOrUpdateBatch(projectFolderPatentLinkList);
  98. } else {
  99. List<ProjectPatentLink> projectPatentLinkList = this.getProjectPatentByProIdAndPatentIds(params.getProjectId(), params.getPatentIds());
  100. projectPatentLinkList.forEach(item -> item.setLook(params.getStatus()));
  101. return this.saveOrUpdateBatch(projectPatentLinkList);
  102. }
  103. }
  104. public void deleteByProjectId(Integer projectId) {
  105. this.remove(Wrappers.<ProjectPatentLink>lambdaQuery().eq(ProjectPatentLink::getProjectId, projectId));
  106. }
  107. @Transactional
  108. public void deleteByProjectIdAndPatentIds(Integer projectId, List<Integer> patentIds) {
  109. this.remove(Wrappers.<ProjectPatentLink>lambdaQuery().eq(ProjectPatentLink::getProjectId, projectId).in(ProjectPatentLink::getPatentId, patentIds));
  110. projectFolderPatentLinkService.deleteByProjectIdAndPatentIds(projectId, patentIds);
  111. }
  112. public void importProjectPatentLink(Integer projectId, String patentIdPatentNoJson) {
  113. List<Patent> importPatentList = JsonUtils.jsonToList(patentIdPatentNoJson, Patent.class);
  114. List<String> importPatentNos = importPatentList.stream().map(Patent::getPatentNo).collect(Collectors.toList());
  115. List<Patent> localPatentList = patentService.getPatentListByPatentNo(importPatentNos);
  116. List<ProjectPatentLink> localProjectPatentLinkList = this.getProjectPatentByProIdAndPatentIds(projectId, localPatentList.stream().map(Patent::getId).collect(Collectors.toList()));
  117. for (String patentNo : importPatentNos) {
  118. Patent localPatent = localPatentList.stream().filter(item -> item.getPatentNo().equals(patentNo)).findFirst().orElse(null);
  119. if (localPatent == null) {
  120. continue;
  121. }
  122. ProjectPatentLink localProjectPatentLink = localProjectPatentLinkList.stream().filter(item -> item.getPatentId().equals(localPatent.getId())).findFirst().orElse(null);
  123. if (localProjectPatentLink == null) {
  124. localProjectPatentLink = new ProjectPatentLink();
  125. localProjectPatentLink.setProjectId(projectId);
  126. localProjectPatentLink.setPatentId(localPatent.getId());
  127. localProjectPatentLink.setLook(0);
  128. localProjectPatentLink.insert();
  129. }
  130. }
  131. }
  132. }