Bladeren bron

同族修改 2022/12/9

lwhhszx 2 jaren geleden
bovenliggende
commit
0bbbeb52b6

+ 7 - 1
PAS/src/main/java/cn/cslg/pas/mapper/PatentSimpleFamilyMapper.java

@@ -1,7 +1,12 @@
 package cn.cslg.pas.mapper;
 
 import cn.cslg.pas.domain.PatentSimpleFamily;
+import cn.cslg.pas.domain.PatentSimpleFamilyLink;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,5 +17,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @since 2022-02-24
  */
 public interface PatentSimpleFamilyMapper extends BaseMapper<PatentSimpleFamily> {
-
+    @Select("select a.* from os_patent_simplefamily_link a left join os_patent_simplefamily b on a.family_id=b.id where b.type=#{type} and a.patent_no in (#{patentNos})")
+    public List<PatentSimpleFamilyLink> getPatentFamilyLinkByPatentNo(@Param("patentNos") List<String> patentNos, @Param("type")Integer type);
 }

+ 172 - 78
PAS/src/main/java/cn/cslg/pas/service/PatentSimpleFamilyService.java

@@ -31,7 +31,7 @@ public class PatentSimpleFamilyService extends ServiceImpl<PatentSimpleFamilyMap
     private final PatentService patentService;
     private final PatentApplicantService patentApplicantService;
     private final PatentSimpleFamilyLinkService patentSimpleFamilyLinkService;
-
+    private final PatentSimpleFamilyMapper  patentSimpleFamilyLinkMapper;
     public PatentSimpleFamily getPatentSimpleFamilyByIdsAndType(List<Integer> ids, Integer type) {
         if (ids == null || ids.size() == 0) {
             return null;
@@ -87,97 +87,191 @@ public class PatentSimpleFamilyService extends ServiceImpl<PatentSimpleFamilyMap
         return patentSimpleFamily;
     }
 
+//    public void updateData(List<String> familyNo, String patentNo, Integer patentId, Integer type) {
+//        //两个表 1.同族表 2.同组关联专利表
+//        //用专利号 获取同族关联专利表的信息
+//        if (!familyNo.contains(patentNo)) {
+//            familyNo.add(patentNo);
+//        }
+//        List<PatentSimpleFamilyLink> patentSimpleFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByPatentNo(familyNo);
+//        PatentSimpleFamily family = new PatentSimpleFamily();
+//
+//        if (patentSimpleFamilyLinkList == null || patentSimpleFamilyLinkList.size() == 0) {
+//            //如果 同组关联专利表 内没有数据 就新建一条 同族表 的数据
+//            family = this.add(type);
+//        } else {
+//            //如果 同组关联专利表 内有数据 那么用查询出来的List中的 同族表 的ID来获取 同族表 内的其他对应信息
+//            PatentSimpleFamily patentSimpleFamily = this.getPatentSimpleFamilyByIdsAndType(patentSimpleFamilyLinkList.stream().map(PatentSimpleFamilyLink::getFamilyId).collect(Collectors.toList()), type);
+//            if (patentSimpleFamily == null) {
+//                family = this.add(type);
+//            } else {
+//                family = patentSimpleFamily;
+//            }
+//        }
+////        List<PatentSimpleFamilyLink> temps = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByPatentNoAndFamilyId(familyNo, family.getId());
+//
+//        List<Patent> patent1s = patentService.getPublicDateAndPatentNoByPatentNo(familyNo);
+//        // 遍历
+//        if (patentSimpleFamilyLinkList != null && patentSimpleFamilyLinkList.size() != 0) {
+//            Patent patent2 = new Patent();
+//            for (String patent : familyNo) {
+//                PatentSimpleFamilyLink temp = patentSimpleFamilyLinkList.stream().filter(item -> item.getPatentNo().equals(patent)).findFirst().orElse(null);
+//                if (temp == null) {
+//                    PatentSimpleFamilyLink patentSimpleFamilyLink = new PatentSimpleFamilyLink();
+//                    patentSimpleFamilyLink.setFamilyId(family.getId());
+//                    patentSimpleFamilyLink.setPatentNo(patent);
+//                    patentSimpleFamilyLink.insert();
+//                } else {
+//                    temp.setFamilyId(family.getId());
+//                    temp.updateById();
+//                }
+//
+//                //更新同族专利的同族号
+//                Patent patent1 = patent1s.stream().filter(item -> item.getPatentNo().equals(patent)).findFirst().orElse(null);
+//                if (patent1 != null && patent1.getType() != null) {
+//                    switch (type) {
+//                        case 1:
+//                            patent1.setSimpleFamily(family.getId());
+//                            break;
+//                        case 2:
+//                            patent1.setInpadocFamily(family.getId());
+//                            break;
+//                        case 3:
+//                            patent1.setPatSnapFamily(family.getId());
+//                            break;
+//                    }
+//                    family.setPatentNo(patent1.getPatentNo());
+//                    patent1.updateById();
+//                }
+//
+//                if (StringUtils.isEmpty(family.getPatentNo())) {
+//                    family.setPatentNo(patent);
+//                } else {
+//                    if (patent1 != null && patent2 != null) {
+//                        String country1 = PatentUtils.getPatentCountry(patent1.getPatentNo());
+//                        String country2 = PatentUtils.getPatentCountry(patent2.getPatentNo());
+//                        if ("CN".equals(country1) && !"CN".equals(country2)) {
+//                            family.setPatentNo(patent1.getPatentNo());
+//                            patent2 = patent1;
+//                        } else if (!"CN".equals(country1) && "CN".equals(country2)) {
+//                            family.setPatentNo(patent2.getPatentNo());
+//                        } else if (("CN".equals(country1) && "CN".equals(country2)) || (!"CN".equals(country1) && !"CN".equals(country2))) {
+//                            Integer publicData1 = patent1.getPublicDate();
+//                            Integer publicData2 = patent2.getPublicDate();
+//                            if (publicData1 == null && publicData2 != null) {
+//                                family.setPatentNo(patent2.getPatentNo());
+//                            } else if (publicData1 != null && publicData2 == null) {
+//                                family.setPatentNo(patent1.getPatentNo());
+//                                patent2 = patent1;
+//                            } else if (publicData1 != null && publicData2 != null) {
+//                                if (publicData1 > publicData2) {
+//                                    family.setPatentNo(patent2.getPatentNo());
+//                                } else {
+//                                    family.setPatentNo(patent1.getPatentNo());
+//                                    patent2 = patent1;
+//                                    System.out.println(patent2);
+//                                }
+//                            }
+//                        }
+//                    }
+//                }
+//
+//                family.updateById();
+//            }
+//        }
+//    }
+
+    public PatentSimpleFamily add(Integer type,String patentNO) {
+        PatentSimpleFamily patentSimpleFamily = new PatentSimpleFamily();
+        patentSimpleFamily.setType(type);
+        patentSimpleFamily.setPatentNo(patentNO);
+        patentSimpleFamily.insert();
+        return patentSimpleFamily;
+    }
+
     public void updateData(List<String> familyNo, String patentNo, Integer patentId, Integer type) {
-        //两个表 1.同族表 2.同组关联专利表
-        //用专利号 获取同族关联专利表的信息
+        long start =System.currentTimeMillis();
+        //0.合并专利号
         if (!familyNo.contains(patentNo)) {
             familyNo.add(patentNo);
         }
-        List<PatentSimpleFamilyLink> patentSimpleFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByPatentNo(familyNo);
-        PatentSimpleFamily family = new PatentSimpleFamily();
-
-        if (patentSimpleFamilyLinkList == null || patentSimpleFamilyLinkList.size() == 0) {
-            //如果 同组关联专利表 内没有数据 就新建一条 同族表 的数据
-            family = this.add(type);
-        } else {
-            //如果 同组关联专利表 内有数据 那么用查询出来的List中的 同族表 的ID来获取 同族表 内的其他对应信息
-            PatentSimpleFamily patentSimpleFamily = this.getPatentSimpleFamilyByIdsAndType(patentSimpleFamilyLinkList.stream().map(PatentSimpleFamilyLink::getFamilyId).collect(Collectors.toList()), type);
-            if (patentSimpleFamily == null) {
-                family = this.add(type);
-            } else {
-                family = patentSimpleFamily;
+        //1.根据专利号(faimlyNo + patentNo)从专利基础信息表中获取专利数据,以受理国家、申请日由小到大排序
+        List<Patent> patent1s = patentService.getPublicDateAndPatentNoByPatentNo(familyNo);
+
+        //2.从1步取得的专利清单获取第一个CN专利号,为插入Family表中的专利号,如果没有CN专利,取第一个专利号
+        String temPatentNo="";
+        if(patent1s != null) {
+            Patent patentTem = patent1s.stream().filter(item -> PatentUtils.getPatentCountry(item.getPatentNo()) == "CN").findFirst().orElse(null);
+            if (patentTem == null) {
+                patentTem = patent1s.get(0);
             }
+            temPatentNo=patentTem.getPatentNo();
+        }
+        else{
+            temPatentNo= patentNo;
         }
-//        List<PatentSimpleFamilyLink> temps = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByPatentNoAndFamilyId(familyNo, family.getId());
 
-        List<Patent> patent1s = patentService.getPublicDateAndPatentNoByPatentNo(familyNo);
-        // 遍历
-        if (patentSimpleFamilyLinkList != null && patentSimpleFamilyLinkList.size() != 0) {
-            Patent patent2 = new Patent();
-            for (String patent : familyNo) {
-                PatentSimpleFamilyLink temp = patentSimpleFamilyLinkList.stream().filter(item -> item.getPatentNo().equals(patent)).findFirst().orElse(null);
-                if (temp == null) {
-                    PatentSimpleFamilyLink patentSimpleFamilyLink = new PatentSimpleFamilyLink();
-                    patentSimpleFamilyLink.setFamilyId(family.getId());
-                    patentSimpleFamilyLink.setPatentNo(patent);
-                    patentSimpleFamilyLink.insert();
-                } else {
-                    temp.setFamilyId(family.getId());
-                    temp.updateById();
-                }
+        //3.根据专利号(faimlyNo + patentNo)和同族类型从family关联表中取数据
+        List<PatentSimpleFamilyLink> patentSimpleFamilyLinkList = patentSimpleFamilyLinkMapper.getPatentFamilyLinkByPatentNo(familyNo,type);
+
+        //4.第3步中如果有数据,则取得一个familID为下一步的插入关联表中的id
+        PatentSimpleFamily patentSimpleFamily;
+        if(patentSimpleFamilyLinkList !=null && patentSimpleFamilyLinkList.size() >0){
+            //4.1 第3步中有数据
+            patentSimpleFamily = this.getPatentSimpleFamilyByIdsAndType(patentSimpleFamilyLinkList.stream().map(PatentSimpleFamilyLink::getFamilyId).collect(Collectors.toList()), type);
+        }
+        else{
+            //4.2 第3步中有数据则在Family表中添加一条记录,并
+            patentSimpleFamily = this.add(type,temPatentNo);
+        }
 
-                //更新同族专利的同族号
-                Patent patent1 = patent1s.stream().filter(item -> item.getPatentNo().equals(patent)).findFirst().orElse(null);
-                if (patent1 != null && patent1.getType() != null) {
-                    switch (type) {
-                        case 1:
-                            patent1.setSimpleFamily(family.getId());
-                            break;
-                        case 2:
-                            patent1.setInpadocFamily(family.getId());
-                            break;
-                        case 3:
-                            patent1.setPatSnapFamily(family.getId());
-                            break;
-                    }
-                    family.setPatentNo(patent1.getPatentNo());
-                    patent1.updateById();
+        //5.专利号(faimlyNo + patentNo)和第三步获得的记录比较,如果没有则在关联表中添加一条记录
+        for(String temPN:familyNo) {
+            PatentSimpleFamilyLink temp = patentSimpleFamilyLinkList.stream().filter(item -> item.getPatentNo().equals(temPN)).findFirst().orElse(null);
+            if (temp == null) {
+                //5.1 如果关联表中没有记录,添加一个
+                PatentSimpleFamilyLink patentSimpleFamilyLink = new PatentSimpleFamilyLink();
+                patentSimpleFamilyLink.setFamilyId(patentSimpleFamily.getId());
+                patentSimpleFamilyLink.setPatentNo(temPN);
+                patentSimpleFamilyLink.insert();
+            } else {
+                //5.2 如果关联表中有记录,判断familyid是否跟temFailyID相同,不相同则更新记录
+                if (temp.getFamilyId() != patentSimpleFamily.getId()) {
+                    temp.setFamilyId(patentSimpleFamily.getId());
+                    temp.updateById();
                 }
+            }
 
-                if (StringUtils.isEmpty(family.getPatentNo())) {
-                    family.setPatentNo(patent);
-                } else {
-                    if (patent1 != null && patent2 != null) {
-                        String country1 = PatentUtils.getPatentCountry(patent1.getPatentNo());
-                        String country2 = PatentUtils.getPatentCountry(patent2.getPatentNo());
-                        if ("CN".equals(country1) && !"CN".equals(country2)) {
-                            family.setPatentNo(patent1.getPatentNo());
-                            patent2 = patent1;
-                        } else if (!"CN".equals(country1) && "CN".equals(country2)) {
-                            family.setPatentNo(patent2.getPatentNo());
-                        } else if (("CN".equals(country1) && "CN".equals(country2)) || (!"CN".equals(country1) && !"CN".equals(country2))) {
-                            Integer publicData1 = patent1.getPublicDate();
-                            Integer publicData2 = patent2.getPublicDate();
-                            if (publicData1 == null && publicData2 != null) {
-                                family.setPatentNo(patent2.getPatentNo());
-                            } else if (publicData1 != null && publicData2 == null) {
-                                family.setPatentNo(patent1.getPatentNo());
-                                patent2 = patent1;
-                            } else if (publicData1 != null && publicData2 != null) {
-                                if (publicData1 > publicData2) {
-                                    family.setPatentNo(patent2.getPatentNo());
-                                } else {
-                                    family.setPatentNo(patent1.getPatentNo());
-                                    patent2 = patent1;
-                                    System.out.println(patent2);
-                                }
-                            }
+            //6.如果同族关联表有数据则更新,无数据则插入一条数据
+            Patent patent1 = patent1s.stream().filter(item -> item.getPatentNo().equals(temPN)).findFirst().orElse(null);
+            if (patent1 != null) {
+                switch (type) {
+                    case 1:
+                        if(patent1.getSimpleFamily()!=patentSimpleFamily.getId())
+                        {
+                            patent1.setSimpleFamily(patentSimpleFamily.getId());
+                            patent1.updateById();
+                        }
+                        break;
+                    case 2:
+                        if(patent1.getInpadocFamily()!=patentSimpleFamily.getId())
+                        {
+                            patent1.setInpadocFamily(patentSimpleFamily.getId());
+                            patent1.updateById();
+                        }
+                        break;
+                    case 3:
+                        if(patent1.getPatSnapFamily()!=patentSimpleFamily.getId())
+                        {
+                            patent1.setPatSnapFamily(patentSimpleFamily.getId());
+                            patent1.updateById();
                         }
-                    }
+                        break;
                 }
 
-                family.updateById();
             }
         }
+        long end =System.currentTimeMillis();
+        System.out.println("总共用时---"+(start-end));
     }
 }