PatentSimpleFamilyService.java 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. package cn.cslg.pas.service;
  2. import cn.cslg.pas.common.model.params.PatentSimpleFamilyParams;
  3. import cn.cslg.pas.common.utils.PatentUtils;
  4. import cn.cslg.pas.common.utils.StringUtils;
  5. import cn.cslg.pas.domain.Patent;
  6. import cn.cslg.pas.domain.PatentSimpleFamily;
  7. import cn.cslg.pas.domain.PatentSimpleFamilyLink;
  8. import cn.cslg.pas.mapper.PatentSimpleFamilyLinkMapper;
  9. import cn.cslg.pas.mapper.PatentSimpleFamilyMapper;
  10. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  11. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  12. import lombok.RequiredArgsConstructor;
  13. import org.springframework.context.annotation.Lazy;
  14. import org.springframework.stereotype.Service;
  15. import java.util.List;
  16. import java.util.stream.Collectors;
  17. /**
  18. * <p>
  19. * 专利信息简单同族关联表 服务类
  20. * </p>
  21. *
  22. * @author 王岩
  23. * @since 2022-02-24
  24. */
  25. @Service
  26. @RequiredArgsConstructor(onConstructor_ = {@Lazy})
  27. public class PatentSimpleFamilyService extends ServiceImpl<PatentSimpleFamilyMapper, PatentSimpleFamily> {
  28. private final PatentService patentService;
  29. private final PatentApplicantService patentApplicantService;
  30. private final PatentSimpleFamilyLinkService patentSimpleFamilyLinkService;
  31. private final PatentSimpleFamilyLinkMapper patentSimpleFamilyLinkMapper;
  32. public PatentSimpleFamily getPatentSimpleFamilyByIdsAndType(List<Integer> ids, Integer type) {
  33. if (ids == null || ids.size() == 0) {
  34. return null;
  35. }
  36. LambdaQueryWrapper<PatentSimpleFamily> queryWrapper = new LambdaQueryWrapper<>();
  37. queryWrapper.in(PatentSimpleFamily::getId, ids);
  38. queryWrapper.eq(PatentSimpleFamily::getType, type);
  39. List<PatentSimpleFamily> patentSimpleFamilies = this.list(queryWrapper);
  40. if (patentSimpleFamilies.size() == 0) {
  41. return null;
  42. }
  43. return patentSimpleFamilies.get(0);
  44. }
  45. public List<PatentSimpleFamily> getPatentSimpleFamilyByIds(List<Integer> ids) {
  46. if (ids == null || ids.size() == 0) {
  47. return null;
  48. }
  49. LambdaQueryWrapper<PatentSimpleFamily> queryWrapper = new LambdaQueryWrapper<>();
  50. queryWrapper.in(PatentSimpleFamily::getId, ids);
  51. return this.list(queryWrapper);
  52. }
  53. public void importPatentSimpleFamily(Patent patent, List<PatentSimpleFamily> importPatentSimpleFamilyList, List<PatentSimpleFamilyLink> importPatentSimpleFamilyLinkList) {
  54. List<PatentSimpleFamilyLink> importPatentSimpleFamilyLink = importPatentSimpleFamilyLinkList.stream().filter(item -> item.getFamilyId().equals(patent.getSimpleFamily())).collect(Collectors.toList());
  55. List<PatentSimpleFamilyLink> importPatentInpadocFamilyLink = importPatentSimpleFamilyLinkList.stream().filter(item -> item.getFamilyId().equals(patent.getInpadocFamily())).collect(Collectors.toList());
  56. List<PatentSimpleFamilyLink> importPatentPatSnapFamilyLink = importPatentSimpleFamilyLinkList.stream().filter(item -> item.getFamilyId().equals(patent.getPatSnapFamily())).collect(Collectors.toList());
  57. PatentSimpleFamilyParams patentSimpleFamilyParams = new PatentSimpleFamilyParams();
  58. patentSimpleFamilyParams.setPatentId(patent.getId());
  59. patentSimpleFamilyParams.setPatentNo(patent.getPatentNo());
  60. patentSimpleFamilyParams.setSimpleFamily(importPatentSimpleFamilyLink.stream().map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
  61. patentSimpleFamilyParams.setInpadocFamily(importPatentInpadocFamilyLink.stream().map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
  62. patentSimpleFamilyParams.setPatSnapFamily(importPatentPatSnapFamilyLink.stream().map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
  63. this.updatePatentSimpleFamily(patentSimpleFamilyParams);
  64. }
  65. public void updatePatentSimpleFamily(PatentSimpleFamilyParams params) {
  66. if (params.getSimpleFamily() != null && params.getSimpleFamily().size() != 0) {
  67. this.updateData(params.getSimpleFamily(), params.getPatentNo(), params.getPatentId(), 1);
  68. }
  69. if (params.getInpadocFamily() != null && params.getInpadocFamily().size() != 0) {
  70. this.updateData(params.getInpadocFamily(), params.getPatentNo(), params.getPatentId(), 2);
  71. }
  72. if (params.getPatSnapFamily() != null && params.getPatSnapFamily().size() != 0) {
  73. this.updateData(params.getPatSnapFamily(), params.getPatentNo(), params.getPatentId(), 3);
  74. }
  75. }
  76. public PatentSimpleFamily add(Integer type,String patentNO) {
  77. PatentSimpleFamily patentSimpleFamily = new PatentSimpleFamily();
  78. patentSimpleFamily.setType(type);
  79. patentSimpleFamily.setPatentNo(patentNO);
  80. patentSimpleFamily.insert();
  81. return patentSimpleFamily;
  82. }
  83. public void updateData(List<String> familyNo, String patentNo, Integer patentId, Integer type) {
  84. long start =System.currentTimeMillis();
  85. //0.合并专利号
  86. if (!familyNo.contains(patentNo)) {
  87. familyNo.add(patentNo);
  88. }
  89. //1.根据专利号(faimlyNo + patentNo)从专利基础信息表中获取专利数据,以受理国家、申请日由小到大排序
  90. List<Patent> patent1s = patentService.getPublicDateAndPatentNoByPatentNo(familyNo);
  91. //2.从1步取得的专利清单获取第一个CN专利号,为插入Family表中的专利号,如果没有CN专利,取第一个专利号
  92. String temPatentNo="";
  93. if(patent1s != null) {
  94. Patent patentTem = patent1s.stream().filter(item -> PatentUtils.getPatentCountry(item.getPatentNo()) == "CN").findFirst().orElse(null);
  95. if (patentTem == null) {
  96. patentTem = patent1s.get(0);
  97. }
  98. temPatentNo=patentTem.getPatentNo();
  99. }
  100. else{
  101. temPatentNo= patentNo;
  102. }
  103. //3.根据专利号(faimlyNo + patentNo)和同族类型从family关联表中取数据
  104. List<PatentSimpleFamilyLink> patentSimpleFamilyLinkList = patentSimpleFamilyLinkMapper.getPatentFamilyLinkByPatentNo(familyNo,type);
  105. //4.第3步中如果有数据,则取得一个familID为下一步的插入关联表中的id
  106. PatentSimpleFamily patentSimpleFamily;
  107. if(patentSimpleFamilyLinkList !=null && patentSimpleFamilyLinkList.size() >0){
  108. //4.1 第3步中有数据
  109. patentSimpleFamily = this.getPatentSimpleFamilyByIdsAndType(patentSimpleFamilyLinkList.stream().map(PatentSimpleFamilyLink::getFamilyId).collect(Collectors.toList()), type);
  110. }
  111. else{
  112. //4.2 第3步中有数据则在Family表中添加一条记录,并
  113. patentSimpleFamily = this.add(type,temPatentNo);
  114. }
  115. //5.专利号(faimlyNo + patentNo)和第三步获得的记录比较,如果没有则在关联表中添加一条记录
  116. for(String temPN:familyNo) {
  117. PatentSimpleFamilyLink temp = patentSimpleFamilyLinkList.stream().filter(item -> item.getPatentNo().equals(temPN)).findFirst().orElse(null);
  118. if (temp == null) {
  119. //5.1 如果关联表中没有记录,添加一个
  120. PatentSimpleFamilyLink patentSimpleFamilyLink = new PatentSimpleFamilyLink();
  121. patentSimpleFamilyLink.setFamilyId(patentSimpleFamily.getId());
  122. patentSimpleFamilyLink.setPatentNo(temPN);
  123. patentSimpleFamilyLink.insert();
  124. } else {
  125. //5.2 如果关联表中有记录,判断familyid是否跟temFailyID相同,不相同则更新记录
  126. if (temp.getFamilyId() != patentSimpleFamily.getId()) {
  127. temp.setFamilyId(patentSimpleFamily.getId());
  128. temp.updateById();
  129. }
  130. }
  131. //6.如果同族关联表有数据则更新,无数据则插入一条数据
  132. Patent patent1 = patent1s.stream().filter(item -> item.getPatentNo().equals(temPN)).findFirst().orElse(null);
  133. if (patent1 != null) {
  134. switch (type) {
  135. case 1:
  136. if(patent1.getSimpleFamily()!=patentSimpleFamily.getId())
  137. {
  138. patent1.setSimpleFamily(patentSimpleFamily.getId());
  139. patent1.updateById();
  140. }
  141. break;
  142. case 2:
  143. if(patent1.getInpadocFamily()!=patentSimpleFamily.getId())
  144. {
  145. patent1.setInpadocFamily(patentSimpleFamily.getId());
  146. patent1.updateById();
  147. }
  148. break;
  149. case 3:
  150. if(patent1.getPatSnapFamily()!=patentSimpleFamily.getId())
  151. {
  152. patent1.setPatSnapFamily(patentSimpleFamily.getId());
  153. patent1.updateById();
  154. }
  155. break;
  156. }
  157. }
  158. }
  159. long end =System.currentTimeMillis();
  160. System.out.println("总共用时---"+(start-end));
  161. }
  162. }