package cn.cslg.pas.service; import cn.cslg.pas.domain.*; import cn.cslg.pas.domain.asso.AssoStructurePatent; import cn.cslg.pas.mapper.WebConfigMapper; 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.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * @author admin * @description 针对表【web_config(网站配置)】的数据库操作Service实现 * @createDate 2023-03-08 18:51:17 */ @Service @RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class TestService { private final IStructureService structureService; private final ProjectFieldTreeService projectFieldTreeService; private final ProjectFieldPatentLinkService patentLinkService; private final PatentService patentService; private final IStructurePatentService structurePatentService; public void getConfigById(Integer id,Integer optionId){ // 查询产品id查询产品架构 LambdaQueryWrapper wrapper =new LambdaQueryWrapper<>(); wrapper.eq(Structure::getProductId,id); List structureList =structureService.list(wrapper); List structures =structureList.stream().filter(item->item.getParentId().equals(0)).collect(Collectors.toList()); LambdaQueryWrapper wrapper1 =new LambdaQueryWrapper<>(); wrapper1.eq(ProjectFieldPatentLink::getFieldId,4766) .eq(ProjectFieldPatentLink::getOptionId,optionId); List links =patentLinkService.list(wrapper1); List pids =links.stream().map(ProjectFieldPatentLink::getPatentId).collect(Collectors.toList()); this.reT(structureList,structures,0,0,id,pids); } public void reT(List structureList,List structures,Integer t,Integer b,Integer id,List pids){ structures.forEach(item->{ //根据父节点和名称查找自定义字段 LambdaQueryWrapper wrapper =new LambdaQueryWrapper<>(); wrapper.eq(ProjectFieldTree::getParentId,t) .eq(ProjectFieldTree::getName,item.getStructureName()) .eq(ProjectFieldTree::getFieldId,4767); ProjectFieldTree projectFieldTree = projectFieldTreeService.getOne(wrapper); if(projectFieldTree !=null) { //根据projectFieldTree.getId()查询关联专利 LambdaQueryWrapper wrapper1 =new LambdaQueryWrapper<>(); wrapper1.eq(ProjectFieldPatentLink::getFieldId,4767) .eq(ProjectFieldPatentLink::getOptionId,projectFieldTree.getId()); List links = patentLinkService.list(wrapper1); List patentIds =links.stream().map(ProjectFieldPatentLink::getPatentId).collect(Collectors.toList()); //取交集 patentIds.retainAll(pids); //根据专利id查询专利号 if(patentIds.size()!=0){ LambdaQueryWrapper wrapper2 =new LambdaQueryWrapper<>(); wrapper2.in(Patent::getId,patentIds); List patents =patentService.list(wrapper2); List patentNos =patents.stream().map(Patent::getPatentNo).collect(Collectors.toList()); List assoStructurePatents =new ArrayList<>(); patentNos.forEach(tem->{ AssoStructurePatent assoStructurePatent =new AssoStructurePatent(); assoStructurePatent.setPath(item.getPath()); assoStructurePatent.setPatentNo(tem); assoStructurePatent.setProjectId(81); assoStructurePatent.setProductId(id); assoStructurePatent.setStructureId(item.getId()); assoStructurePatents.add(assoStructurePatent); }); structurePatentService.saveBatch(assoStructurePatents); } //根据父节点查询子节点 List child = structureList.stream().filter(tem -> tem.getParentId().equals(item.getId())).collect(Collectors.toList()); if (child.size() == 0) { //根据自定义字段父节点id查询子节点 LambdaQueryWrapper wrapper2 =new LambdaQueryWrapper<>(); wrapper2.eq(ProjectFieldTree::getParentId,projectFieldTree.getId()); List trees =projectFieldTreeService.list(wrapper2); List treeIds =trees.stream().map(ProjectFieldTree::getId).collect(Collectors.toList()); if(treeIds.size()!=0) { LambdaQueryWrapper wrapper3 = new LambdaQueryWrapper<>(); wrapper3.eq(ProjectFieldPatentLink::getFieldId, 4767) .in(ProjectFieldPatentLink::getOptionId, treeIds); List links2 = patentLinkService.list(wrapper3); List patentIds2 =links2.stream().map(ProjectFieldPatentLink::getPatentId).collect(Collectors.toList()); patentIds2.retainAll(pids); if(patentIds2.size()!=0){ LambdaQueryWrapper wrapper4 =new LambdaQueryWrapper<>(); wrapper4.in(Patent::getId,patentIds2); List patents =patentService.list(wrapper4); List patentNos =patents.stream().map(Patent::getPatentNo).collect(Collectors.toList()); List assoStructurePatents =new ArrayList<>(); patentNos.forEach(tem->{ AssoStructurePatent assoStructurePatent =new AssoStructurePatent(); assoStructurePatent.setPath(item.getPath()); assoStructurePatent.setPatentNo(tem); assoStructurePatent.setProjectId(81); assoStructurePatent.setProductId(id); assoStructurePatent.setStructureId(item.getId()); assoStructurePatents.add(assoStructurePatent); }); structurePatentService.saveBatch(assoStructurePatents); LambdaQueryWrapper wrapper5 =new LambdaQueryWrapper<>(); wrapper5.in(ProjectFieldTree::getParentId,treeIds); List trees5 =projectFieldTreeService.list(wrapper5); List treeIds5 =trees5.stream().map(ProjectFieldTree::getId).collect(Collectors.toList()); if(treeIds5.size()>0) { LambdaQueryWrapper wrapper6 = new LambdaQueryWrapper<>(); wrapper6.eq(ProjectFieldPatentLink::getFieldId, 4767) .in(ProjectFieldPatentLink::getOptionId, treeIds5); List links5 = patentLinkService.list(wrapper6); List patentIds5 = links5.stream().map(ProjectFieldPatentLink::getPatentId).collect(Collectors.toList()); patentIds5.retainAll(pids); if (patentIds5.size() != 0) { LambdaQueryWrapper wrapper7= new LambdaQueryWrapper<>(); wrapper7.in(Patent::getId, patentIds5); List patents7 = patentService.list(wrapper7); List patentNos7 = patents7.stream().map(Patent::getPatentNo).collect(Collectors.toList()); List assoStructurePatents1 = new ArrayList<>(); patentNos7.forEach(tem -> { AssoStructurePatent assoStructurePatent = new AssoStructurePatent(); assoStructurePatent.setPath(item.getPath()); assoStructurePatent.setPatentNo(tem); assoStructurePatent.setProjectId(81); assoStructurePatent.setProductId(id); assoStructurePatent.setStructureId(item.getId()); assoStructurePatents1.add(assoStructurePatent); }); structurePatentService.saveBatch(assoStructurePatents1); } } } } } else { Integer re = projectFieldTree.getId(); this.reT(structureList, child, re,t,id,pids); } } }); } }