package cn.cslg.pas.service; import cn.cslg.pas.common.model.params.PatentSimpleFamilyParams; import cn.cslg.pas.common.utils.PatentUtils; import cn.cslg.pas.common.utils.StringUtils; import cn.cslg.pas.domain.Patent; import cn.cslg.pas.domain.PatentSimpleFamily; import cn.cslg.pas.domain.PatentSimpleFamilyLink; import cn.cslg.pas.mapper.PatentSimpleFamilyLinkMapper; import cn.cslg.pas.mapper.PatentSimpleFamilyMapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; /** *

* 专利信息简单同族关联表 服务类 *

* * @author 王岩 * @since 2022-02-24 */ @Service @RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class PatentSimpleFamilyService extends ServiceImpl { private final PatentService patentService; private final PatentApplicantService patentApplicantService; private final PatentSimpleFamilyLinkService patentSimpleFamilyLinkService; private final PatentSimpleFamilyLinkMapper patentSimpleFamilyLinkMapper; public PatentSimpleFamily getPatentSimpleFamilyByIdsAndType(List ids, Integer type) { if (ids == null || ids.size() == 0) { return null; } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(PatentSimpleFamily::getId, ids); queryWrapper.eq(PatentSimpleFamily::getType, type); List patentSimpleFamilies = this.list(queryWrapper); if (patentSimpleFamilies.size() == 0) { return null; } return patentSimpleFamilies.get(0); } public List getPatentSimpleFamilyByIds(List ids) { if (ids == null || ids.size() == 0) { return null; } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(PatentSimpleFamily::getId, ids); return this.list(queryWrapper); } public void importPatentSimpleFamily(Patent patent, List importPatentSimpleFamilyList, List importPatentSimpleFamilyLinkList) { List importPatentSimpleFamilyLink = importPatentSimpleFamilyLinkList.stream().filter(item -> item.getFamilyId().equals(patent.getSimpleFamily())).collect(Collectors.toList()); List importPatentInpadocFamilyLink = importPatentSimpleFamilyLinkList.stream().filter(item -> item.getFamilyId().equals(patent.getInpadocFamily())).collect(Collectors.toList()); List importPatentPatSnapFamilyLink = importPatentSimpleFamilyLinkList.stream().filter(item -> item.getFamilyId().equals(patent.getPatSnapFamily())).collect(Collectors.toList()); PatentSimpleFamilyParams patentSimpleFamilyParams = new PatentSimpleFamilyParams(); patentSimpleFamilyParams.setPatentId(patent.getId()); patentSimpleFamilyParams.setPatentNo(patent.getPatentNo()); patentSimpleFamilyParams.setSimpleFamily(importPatentSimpleFamilyLink.stream().map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList())); patentSimpleFamilyParams.setInpadocFamily(importPatentInpadocFamilyLink.stream().map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList())); patentSimpleFamilyParams.setPatSnapFamily(importPatentPatSnapFamilyLink.stream().map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList())); this.updatePatentSimpleFamily(patentSimpleFamilyParams); } public void updatePatentSimpleFamily(PatentSimpleFamilyParams params) { if (params.getSimpleFamily() != null && params.getSimpleFamily().size() != 0) { this.updateData(params.getSimpleFamily(), params.getPatentNo(), params.getPatentId(), 1); } if (params.getInpadocFamily() != null && params.getInpadocFamily().size() != 0) { this.updateData(params.getInpadocFamily(), params.getPatentNo(), params.getPatentId(), 2); } if (params.getPatSnapFamily() != null && params.getPatSnapFamily().size() != 0) { this.updateData(params.getPatSnapFamily(), params.getPatentNo(), params.getPatentId(), 3); } } 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 familyNo, String patentNo, Integer patentId, Integer type) { long start =System.currentTimeMillis(); //0.合并专利号 if (!familyNo.contains(patentNo)) { familyNo.add(patentNo); } //1.根据专利号(faimlyNo + patentNo)从专利基础信息表中获取专利数据,以受理国家、申请日由小到大排序 List 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; } //3.根据专利号(faimlyNo + patentNo)和同族类型从family关联表中取数据 List 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); } //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(); } } //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; } } } long end =System.currentTimeMillis(); System.out.println("总共用时---"+(start-end)); } }