PatentInventorService.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. package cn.cslg.pas.service;
  2. import cn.cslg.pas.common.model.vo.PatentInventorVO;
  3. import cn.cslg.pas.common.model.params.PatentInventorAddressParams;
  4. import cn.cslg.pas.common.utils.DateUtils;
  5. import cn.cslg.pas.common.utils.Response;
  6. import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
  7. import cn.cslg.pas.common.utils.StringUtils;
  8. import cn.cslg.pas.domain.*;
  9. import cn.cslg.pas.mapper.PatentInventorMapper;
  10. import cn.cslg.pas.common.model.params.PatentInventorParams;
  11. import cn.cslg.pas.common.utils.PatentUtils;
  12. import cn.dev33.satoken.stp.StpUtil;
  13. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  14. import com.baomidou.mybatisplus.core.metadata.IPage;
  15. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  16. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  17. import lombok.RequiredArgsConstructor;
  18. import org.springframework.beans.BeanUtils;
  19. import org.springframework.context.annotation.Lazy;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.transaction.annotation.Transactional;
  22. import java.util.ArrayList;
  23. import java.util.List;
  24. import java.util.Objects;
  25. import java.util.stream.Collectors;
  26. /**
  27. * <p>
  28. * 专利信息发明人表 服务类
  29. * </p>
  30. *
  31. * @author 王岩
  32. * @since 2022-02-24
  33. */
  34. @Service
  35. @RequiredArgsConstructor(onConstructor_ = {@Lazy})
  36. public class PatentInventorService extends ServiceImpl<PatentInventorMapper, PatentInventor> {
  37. private final ProjectPatentLinkService projectPatentLinkService;
  38. private final PatentInventorLinkService patentInventorLinkService;
  39. private final PatentService patentService;
  40. private final PatentInventorMergeService patentInventorMergeService;
  41. private final LoginUtils loginUtils;
  42. public List<Integer> getInventorIdsByProjectId(Integer projectId) {
  43. List<ProjectPatentLink> projectPatentLinkList = projectPatentLinkService.getProjectPatentsByProjectId(projectId);
  44. List<PatentInventorLink> patentInventorLinkList = patentInventorLinkService.getPatentInventorLinkByPatentIds(projectPatentLinkList.stream().map(ProjectPatentLink::getPatentId).collect(Collectors.toList()));
  45. return patentInventorLinkList.stream().map(PatentInventorLink::getInventorId).collect(Collectors.toList());
  46. }
  47. public IPage<PatentInventor> getPageList(PatentInventorVO params) {
  48. LambdaQueryWrapper<PatentInventor> queryWrapper = new LambdaQueryWrapper<>();
  49. if (params.getProjectId() != null && !params.getMerge()) {
  50. List<Integer> ids = this.getInventorIdsByProjectId(params.getProjectId());
  51. if (ids.size() == 0) {
  52. queryWrapper.eq(PatentInventor::getId, 0);
  53. } else {
  54. queryWrapper.in(PatentInventor::getId, ids);
  55. }
  56. }
  57. if (params.getMerge()) {
  58. queryWrapper.eq(PatentInventor::getProjectId, params.getProjectId());
  59. }
  60. if (StringUtils.isNotEmpty(params.getName())) {
  61. queryWrapper.like(PatentInventor::getName, params.getName());
  62. }
  63. queryWrapper.eq(PatentInventor::getMerge, params.getMerge());
  64. if (StringUtils.isNotEmpty(params.getIds())) {
  65. queryWrapper.last(String.format("order by id not in (%s)", params.getIds()));
  66. }
  67. IPage<PatentInventor> pageList = this.page(new Page<>(params.getCurrent(), params.getSize()), queryWrapper);
  68. List<PatentInventorMerge> patentInventorMergeList = patentInventorMergeService.getPatentInventorMergeByProjectId(params.getProjectId());
  69. pageList.getRecords().forEach(item -> item.setInventorIds(patentInventorMergeList.stream().filter(patentInventorMerge -> patentInventorMerge.getMergeId().equals(item.getId())).map(PatentInventorMerge::getInventorId).collect(Collectors.toList())));
  70. return pageList;
  71. }
  72. @Transactional
  73. public String add(PatentInventor patentInventor) {
  74. PatentInventor temp = this.getPatentInventorByName(patentInventor.getName());
  75. if (temp != null) {
  76. return Response.error("名称已存在");
  77. }
  78. patentInventor.setUpdateTime(DateUtils.getDateTime());
  79. patentInventor.setCreateBy(loginUtils.getId());
  80. patentInventor.insert();
  81. if (patentInventor.getMerge()) {
  82. patentInventorMergeService.updatePatentInventorMergeLink(patentInventor.getId(), patentInventor.getProjectId(), patentInventor.getInventorIds());
  83. }
  84. return Response.success(true);
  85. }
  86. @Transactional
  87. public String edit(PatentInventor patentInventor) {
  88. PatentInventor temp = this.getPatentInventorByName(patentInventor.getName());
  89. if (temp != null && !temp.getId().equals(patentInventor.getId())) {
  90. return Response.error("名称已存在");
  91. }
  92. patentInventor.setUpdateTime(DateUtils.getDateTime());
  93. patentInventor.updateById();
  94. if (patentInventor.getMerge()) {
  95. patentInventorMergeService.updatePatentInventorMergeLink(patentInventor.getId(), patentInventor.getProjectId(), patentInventor.getInventorIds());
  96. }
  97. return Response.success(true);
  98. }
  99. public String delete(Integer id) {
  100. this.removeById(id);
  101. patentInventorMergeService.deleteByMergeId(id);
  102. return Response.success(true);
  103. }
  104. public PatentInventor getPatentInventorByName(String name) {
  105. LambdaQueryWrapper<PatentInventor> queryWrapper = new LambdaQueryWrapper<>();
  106. queryWrapper.eq(PatentInventor::getName, name);
  107. return this.getOne(queryWrapper);
  108. }
  109. public List<PatentInventor> getPatentInventorByNameList(List<String> nameList) {
  110. if (nameList == null || nameList.size() == 0) {
  111. return new ArrayList<>();
  112. }
  113. LambdaQueryWrapper<PatentInventor> queryWrapper = new LambdaQueryWrapper<>();
  114. queryWrapper.in(PatentInventor::getName, nameList);
  115. return this.list(queryWrapper);
  116. }
  117. public List<PatentInventor> getPatentInventorByIds(List<Integer> ids) {
  118. if (ids == null || ids.size() == 0) {
  119. return new ArrayList<>();
  120. }
  121. LambdaQueryWrapper<PatentInventor> queryWrapper = new LambdaQueryWrapper<>();
  122. queryWrapper.in(PatentInventor::getId, ids);
  123. return this.list(queryWrapper);
  124. }
  125. public List<PatentInventor> getPatentInventorByPatentId(Integer patentId) {
  126. List<PatentInventorLink> patentInventorLinkList = patentInventorLinkService.getPatentInventorLinkByPatentId(patentId);
  127. List<PatentInventor> dataList = this.getPatentInventorByIds(patentInventorLinkList.stream().map(PatentInventorLink::getInventorId).collect(Collectors.toList()));
  128. dataList.forEach(data -> {
  129. PatentInventorLink patentInventorLink = patentInventorLinkList.stream().filter(item -> item.getInventorId().equals(data.getId()) && item.getFirst().equals(1)).findFirst().orElse(null);
  130. data.setFirst(patentInventorLink != null);
  131. });
  132. return dataList;
  133. }
  134. public List<PatentInventor> getPatentInventorByPatentIds(List<Integer> patentIds) {
  135. List<PatentInventorLink> patentInventorLinkList = patentInventorLinkService.getPatentInventorLinkByPatentIds(patentIds);
  136. List<PatentInventor> patentInventorList = this.getPatentInventorByIds(patentInventorLinkList.stream().map(PatentInventorLink::getInventorId).collect(Collectors.toList()));
  137. List<PatentInventor> dataList = new ArrayList<>();
  138. patentInventorLinkList.forEach(patentInventorLink -> {
  139. PatentInventor temp = patentInventorList.stream().filter(item -> item.getId().equals(patentInventorLink.getInventorId())).findFirst().orElse(null);
  140. if (temp != null) {
  141. PatentInventor patentInventor = new PatentInventor();
  142. patentInventor.setPatentId(patentInventorLink.getPatentId());
  143. patentInventor.setId(patentInventorLink.getInventorId());
  144. patentInventor.setName(temp.getName());
  145. dataList.add(patentInventor);
  146. }
  147. });
  148. return dataList;
  149. }
  150. public void importPatentInventor(Integer localPatentId, Integer importPatentId, List<PatentInventor> importPatentInventorList, List<PatentInventorLink> importPatentInventorLinkList) {
  151. patentInventorLinkService.deleteByPatentId(localPatentId);
  152. List<PatentInventorLink> importPatentInventorLinks = importPatentInventorLinkList.stream().filter(item -> item.getPatentId().equals(importPatentId)).collect(Collectors.toList());
  153. List<Integer> inventorIds = importPatentInventorLinks.stream().map(PatentInventorLink::getInventorId).collect(Collectors.toList());
  154. List<PatentInventor> importPatentInventors = importPatentInventorList.stream().filter(item -> inventorIds.contains(item.getId())).collect(Collectors.toList());
  155. List<PatentInventor> localPatentInventors = this.getPatentInventorByNameList(importPatentInventors.stream().map(PatentInventor::getName).collect(Collectors.toList()));
  156. for (PatentInventor importPatentInventor : importPatentInventors) {
  157. PatentInventor localPatentInventor = localPatentInventors.stream().filter(item -> item.getName().equals(importPatentInventor.getName())).findFirst().orElse(null);
  158. List<PatentInventorLink> importPatentInventorLink = importPatentInventorLinks.stream().filter(item -> item.getInventorId().equals(importPatentInventor.getId())).collect(Collectors.toList());
  159. Integer patentInventorId;
  160. if (localPatentInventor == null) {
  161. localPatentInventor = new PatentInventor();
  162. patentInventorId = null;
  163. } else {
  164. patentInventorId = localPatentInventor.getId();
  165. }
  166. BeanUtils.copyProperties(importPatentInventor, localPatentInventor);
  167. localPatentInventor.setId(patentInventorId);
  168. localPatentInventor.insertOrUpdate();
  169. for (PatentInventorLink patentInventorLink : importPatentInventorLink) {
  170. patentInventorLink.setId(null);
  171. patentInventorLink.setInventorId(localPatentInventor.getId());
  172. patentInventorLink.setPatentId(localPatentId);
  173. }
  174. patentInventorLinkService.saveOrUpdateBatch(importPatentInventorLink);
  175. }
  176. }
  177. public void updatePatentInventor(PatentInventorParams params) {
  178. if (params.getNameList() != null && params.getNameList().size() != 0) {
  179. //创建发明人表"os_patent_inventor"实体类集合,准备批量插入数据
  180. List<PatentInventor> dataList = new ArrayList<>();
  181. //遍历发明人名称
  182. for (int i = 0; i < params.getNameList().size(); i++) {
  183. //根据名称查询发明人表"os_patent_inventor"数据
  184. PatentInventor patentInventor = this.getPatentInventorByName(params.getNameList().get(i));
  185. //判断若没有该发明人,则发明人实体类装载数据新增发明人(若已有,则更新已有数据)
  186. if (patentInventor == null) {
  187. patentInventor = new PatentInventor();
  188. }
  189. patentInventor.setName(params.getNameList().get(i));
  190. patentInventor.setMerge(false);
  191. if (params.getAddressList().size() > i) {
  192. patentInventor.setAddress(params.getAddressList().get(i));
  193. if (params.getAddressList().get(i).substring(params.getAddressList().get(i).lastIndexOf(",") + 1).replaceAll(" ", "").length() == 2) {
  194. patentInventor.setCountry(params.getAddressList().get(i).substring(params.getAddressList().get(i).lastIndexOf(",") + 1).replaceAll(" ", ""));
  195. }
  196. } else {
  197. if (patentInventor.getAddress() == null || patentInventor.getAddress().equals("")) {
  198. patentInventor.setAddress("");
  199. patentInventor.setCountry("");
  200. }
  201. }
  202. dataList.add(patentInventor);
  203. }
  204. //批量插入或更新专利发明人表"os_patent_inventor"数据
  205. this.saveOrUpdateBatch(dataList);
  206. PatentInventor first = dataList.stream().filter(item -> item.getName().equals(params.getFirstName())).findFirst().orElse(null);
  207. //准备将专利与发明人关联数据插入专利与发明人关联表"os_patent_inventor_relation"
  208. patentInventorLinkService.updatePatentInventLink(dataList.stream().map(PatentInventor::getId).collect(Collectors.toList()), params.getPatentId(), first == null ? 0 : first.getId());
  209. }
  210. }
  211. public void updatePatentInventorAddress(PatentInventorAddressParams params) {
  212. List<PatentInventor> patentInventorList = this.getPatentInventorByPatentId(params.getPatentId());
  213. for (int i = 0; i < params.getAddress().size(); i++) {
  214. if (StringUtils.isNotEmpty(params.getAddress().get(i))) {
  215. patentInventorList.get(i).setAddress(params.getAddress().get(i));
  216. if (params.getAddress().get(i).substring(params.getAddress().get(i).lastIndexOf(",") + 1).length() == 2) {
  217. patentInventorList.get(i).setCountry(params.getAddress().get(i).substring(params.getAddress().get(i).lastIndexOf(",") + 1).replaceAll(" ", ""));
  218. } else {
  219. patentInventorList.get(i).setCountry("");
  220. }
  221. }
  222. }
  223. this.saveOrUpdateBatch(patentInventorList);
  224. if (StringUtils.isNotEmpty(params.getFirstAddress())) {
  225. PatentInventor patentInventor = patentInventorList.stream().filter(PatentInventor::getFirst).findFirst().orElse(null);
  226. if (patentInventor != null) {
  227. patentInventor.setAddress(params.getFirstAddress().replaceAll(" ", ""));
  228. patentInventor.setCountry(params.getFirstAddress().substring(params.getFirstAddress().lastIndexOf(",") + 1).replaceAll(" ", ""));
  229. patentInventor.updateById();
  230. }
  231. }
  232. }
  233. }