package cn.cslg.pas.service; import cn.cslg.pas.common.model.vo.PatentInventorVO; import cn.cslg.pas.common.model.params.PatentInventorAddressParams; import cn.cslg.pas.common.utils.DateUtils; import cn.cslg.pas.common.utils.Response; import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils; import cn.cslg.pas.common.utils.StringUtils; import cn.cslg.pas.domain.*; import cn.cslg.pas.mapper.PatentInventorMapper; import cn.cslg.pas.common.model.params.PatentInventorParams; import cn.cslg.pas.common.utils.PatentUtils; import cn.dev33.satoken.stp.StpUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** *

* 专利信息发明人表 服务类 *

* * @author 王岩 * @since 2022-02-24 */ @Service @RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class PatentInventorService extends ServiceImpl { private final ProjectPatentLinkService projectPatentLinkService; private final PatentInventorLinkService patentInventorLinkService; private final PatentService patentService; private final PatentInventorMergeService patentInventorMergeService; private final LoginUtils loginUtils; public List getInventorIdsByProjectId(Integer projectId) { List projectPatentLinkList = projectPatentLinkService.getProjectPatentsByProjectId(projectId); List patentInventorLinkList = patentInventorLinkService.getPatentInventorLinkByPatentIds(projectPatentLinkList.stream().map(ProjectPatentLink::getPatentId).collect(Collectors.toList())); return patentInventorLinkList.stream().map(PatentInventorLink::getInventorId).collect(Collectors.toList()); } public IPage getPageList(PatentInventorVO params) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); if (params.getProjectId() != null && !params.getMerge()) { List ids = this.getInventorIdsByProjectId(params.getProjectId()); if (ids.size() == 0) { queryWrapper.eq(PatentInventor::getId, 0); } else { queryWrapper.in(PatentInventor::getId, ids); } } if (params.getMerge()) { queryWrapper.eq(PatentInventor::getProjectId, params.getProjectId()); } if (StringUtils.isNotEmpty(params.getName())) { queryWrapper.like(PatentInventor::getName, params.getName()); } queryWrapper.eq(PatentInventor::getMerge, params.getMerge()); if (StringUtils.isNotEmpty(params.getIds())) { queryWrapper.last(String.format("order by id not in (%s)", params.getIds())); } IPage pageList = this.page(new Page<>(params.getCurrent(), params.getSize()), queryWrapper); List patentInventorMergeList = patentInventorMergeService.getPatentInventorMergeByProjectId(params.getProjectId()); pageList.getRecords().forEach(item -> item.setInventorIds(patentInventorMergeList.stream().filter(patentInventorMerge -> patentInventorMerge.getMergeId().equals(item.getId())).map(PatentInventorMerge::getInventorId).collect(Collectors.toList()))); return pageList; } @Transactional public String add(PatentInventor patentInventor) { PatentInventor temp = this.getPatentInventorByName(patentInventor.getName()); if (temp != null) { return Response.error("名称已存在"); } patentInventor.setUpdateTime(DateUtils.getDateTime()); patentInventor.setCreateBy(loginUtils.getId()); patentInventor.insert(); if (patentInventor.getMerge()) { patentInventorMergeService.updatePatentInventorMergeLink(patentInventor.getId(), patentInventor.getProjectId(), patentInventor.getInventorIds()); } return Response.success(true); } @Transactional public String edit(PatentInventor patentInventor) { PatentInventor temp = this.getPatentInventorByName(patentInventor.getName()); if (temp != null && !temp.getId().equals(patentInventor.getId())) { return Response.error("名称已存在"); } patentInventor.setUpdateTime(DateUtils.getDateTime()); patentInventor.updateById(); if (patentInventor.getMerge()) { patentInventorMergeService.updatePatentInventorMergeLink(patentInventor.getId(), patentInventor.getProjectId(), patentInventor.getInventorIds()); } return Response.success(true); } public String delete(Integer id) { this.removeById(id); patentInventorMergeService.deleteByMergeId(id); return Response.success(true); } public PatentInventor getPatentInventorByName(String name) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(PatentInventor::getName, name); return this.getOne(queryWrapper); } public List getPatentInventorByNameList(List nameList) { if (nameList == null || nameList.size() == 0) { return new ArrayList<>(); } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(PatentInventor::getName, nameList); return this.list(queryWrapper); } public List getPatentInventorByIds(List ids) { if (ids == null || ids.size() == 0) { return new ArrayList<>(); } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(PatentInventor::getId, ids); return this.list(queryWrapper); } public List getPatentInventorByPatentId(Integer patentId) { List patentInventorLinkList = patentInventorLinkService.getPatentInventorLinkByPatentId(patentId); List dataList = this.getPatentInventorByIds(patentInventorLinkList.stream().map(PatentInventorLink::getInventorId).collect(Collectors.toList())); dataList.forEach(data -> { PatentInventorLink patentInventorLink = patentInventorLinkList.stream().filter(item -> item.getInventorId().equals(data.getId()) && item.getFirst().equals(1)).findFirst().orElse(null); data.setFirst(patentInventorLink != null); }); return dataList; } public List getPatentInventorByPatentIds(List patentIds) { List patentInventorLinkList = patentInventorLinkService.getPatentInventorLinkByPatentIds(patentIds); List patentInventorList = this.getPatentInventorByIds(patentInventorLinkList.stream().map(PatentInventorLink::getInventorId).collect(Collectors.toList())); List dataList = new ArrayList<>(); patentInventorLinkList.forEach(patentInventorLink -> { PatentInventor temp = patentInventorList.stream().filter(item -> item.getId().equals(patentInventorLink.getInventorId())).findFirst().orElse(null); if (temp != null) { PatentInventor patentInventor = new PatentInventor(); patentInventor.setPatentId(patentInventorLink.getPatentId()); patentInventor.setId(patentInventorLink.getInventorId()); patentInventor.setName(temp.getName()); dataList.add(patentInventor); } }); return dataList; } public void importPatentInventor(Integer localPatentId, Integer importPatentId, List importPatentInventorList, List importPatentInventorLinkList) { patentInventorLinkService.deleteByPatentId(localPatentId); List importPatentInventorLinks = importPatentInventorLinkList.stream().filter(item -> item.getPatentId().equals(importPatentId)).collect(Collectors.toList()); List inventorIds = importPatentInventorLinks.stream().map(PatentInventorLink::getInventorId).collect(Collectors.toList()); List importPatentInventors = importPatentInventorList.stream().filter(item -> inventorIds.contains(item.getId())).collect(Collectors.toList()); List localPatentInventors = this.getPatentInventorByNameList(importPatentInventors.stream().map(PatentInventor::getName).collect(Collectors.toList())); for (PatentInventor importPatentInventor : importPatentInventors) { PatentInventor localPatentInventor = localPatentInventors.stream().filter(item -> item.getName().equals(importPatentInventor.getName())).findFirst().orElse(null); List importPatentInventorLink = importPatentInventorLinks.stream().filter(item -> item.getInventorId().equals(importPatentInventor.getId())).collect(Collectors.toList()); Integer patentInventorId; if (localPatentInventor == null) { localPatentInventor = new PatentInventor(); patentInventorId = null; } else { patentInventorId = localPatentInventor.getId(); } BeanUtils.copyProperties(importPatentInventor, localPatentInventor); localPatentInventor.setId(patentInventorId); localPatentInventor.insertOrUpdate(); for (PatentInventorLink patentInventorLink : importPatentInventorLink) { patentInventorLink.setId(null); patentInventorLink.setInventorId(localPatentInventor.getId()); patentInventorLink.setPatentId(localPatentId); } patentInventorLinkService.saveOrUpdateBatch(importPatentInventorLink); } } public void updatePatentInventor(PatentInventorParams params) { if (params.getNameList() != null && params.getNameList().size() != 0) { //创建发明人表"os_patent_inventor"实体类集合,准备批量插入数据 List dataList = new ArrayList<>(); //遍历发明人名称 for (int i = 0; i < params.getNameList().size(); i++) { //根据名称查询发明人表"os_patent_inventor"数据 PatentInventor patentInventor = this.getPatentInventorByName(params.getNameList().get(i)); //判断若没有该发明人,则发明人实体类装载数据新增发明人(若已有,则更新已有数据) if (patentInventor == null) { patentInventor = new PatentInventor(); } patentInventor.setName(params.getNameList().get(i)); patentInventor.setMerge(false); if (params.getAddressList().size() > i) { patentInventor.setAddress(params.getAddressList().get(i)); if (params.getAddressList().get(i).substring(params.getAddressList().get(i).lastIndexOf(",") + 1).replaceAll(" ", "").length() == 2) { patentInventor.setCountry(params.getAddressList().get(i).substring(params.getAddressList().get(i).lastIndexOf(",") + 1).replaceAll(" ", "")); } } else { if (patentInventor.getAddress() == null || patentInventor.getAddress().equals("")) { patentInventor.setAddress(""); patentInventor.setCountry(""); } } dataList.add(patentInventor); } //批量插入或更新专利发明人表"os_patent_inventor"数据 this.saveOrUpdateBatch(dataList); PatentInventor first = dataList.stream().filter(item -> item.getName().equals(params.getFirstName())).findFirst().orElse(null); //准备将专利与发明人关联数据插入专利与发明人关联表"os_patent_inventor_relation" patentInventorLinkService.updatePatentInventLink(dataList.stream().map(PatentInventor::getId).collect(Collectors.toList()), params.getPatentId(), first == null ? 0 : first.getId()); } } public void updatePatentInventorAddress(PatentInventorAddressParams params) { List patentInventorList = this.getPatentInventorByPatentId(params.getPatentId()); for (int i = 0; i < params.getAddress().size(); i++) { if (StringUtils.isNotEmpty(params.getAddress().get(i))) { patentInventorList.get(i).setAddress(params.getAddress().get(i)); if (params.getAddress().get(i).substring(params.getAddress().get(i).lastIndexOf(",") + 1).length() == 2) { patentInventorList.get(i).setCountry(params.getAddress().get(i).substring(params.getAddress().get(i).lastIndexOf(",") + 1).replaceAll(" ", "")); } else { patentInventorList.get(i).setCountry(""); } } } this.saveOrUpdateBatch(patentInventorList); if (StringUtils.isNotEmpty(params.getFirstAddress())) { PatentInventor patentInventor = patentInventorList.stream().filter(PatentInventor::getFirst).findFirst().orElse(null); if (patentInventor != null) { patentInventor.setAddress(params.getFirstAddress().replaceAll(" ", "")); patentInventor.setCountry(params.getFirstAddress().substring(params.getFirstAddress().lastIndexOf(",") + 1).replaceAll(" ", "")); patentInventor.updateById(); } } } }