package cn.cslg.pas.service.business; import cn.cslg.pas.common.dto.business.LiteratureQueryDTO; import cn.cslg.pas.common.model.cronModel.PersonnelVO; import cn.cslg.pas.common.model.cronModel.Records; import cn.cslg.pas.common.utils.CacheUtils; import cn.cslg.pas.common.utils.LoginUtils; import cn.cslg.pas.common.vo.CompareLiteratureVO; import cn.cslg.pas.domain.business.CompareLiterature; import cn.cslg.pas.common.dto.CompareLiteratureDTO; import cn.cslg.pas.domain.business.ReportProject; import cn.cslg.pas.domain.es.Patent; import cn.cslg.pas.exception.UnLoginException; import cn.cslg.pas.exception.XiaoShiException; import cn.cslg.pas.mapper.CompareLiteratureMapper; import cn.cslg.pas.service.business.es.EsPatentService; import cn.cslg.pas.service.business.es.EsService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * @Author lrj * @Date 2023/12/8 */ @Slf4j @Service public class CompareLiteratureService extends ServiceImpl { @Autowired private CacheUtils cacheUtils; @Autowired private LoginUtils loginUtils; @Autowired private EsPatentService esPatentService; @Autowired private ReportProjectService reportProjectService; //添加专利对比文献 public Integer addPatentCompareLiterature(String patentNo, Integer projectId, String createId) { Integer id = null; //根据专利号和报告id查询是否已经保存 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(CompareLiterature::getLiteratureNo, patentNo); queryWrapper.eq(CompareLiterature::getProjectId, projectId); List compareLiteratures = this.list(queryWrapper); if (compareLiteratures.size() <= 0) { CompareLiterature compareLiterature = new CompareLiterature(); compareLiterature.setCreateId(createId); compareLiterature.setProjectId(projectId); compareLiterature.setLiteratureNo(patentNo); compareLiterature.setName(patentNo); compareLiterature.insert(); return compareLiterature.getId(); } else { return compareLiteratures.get(0).getId(); } } //添加对比文献 public Integer addCompareLiterature(CompareLiteratureDTO compareLiteratureDTO) { PersonnelVO personnelVO = new PersonnelVO(); try { personnelVO = cacheUtils.getLoginUser(loginUtils.getId()); } catch (Exception e) { throw new UnLoginException("未登录"); } CompareLiterature compareLiterature = new CompareLiterature(); compareLiterature.setCreateId(personnelVO.getId()); compareLiterature.setProjectId(compareLiteratureDTO.getProjectId()); compareLiterature.setLiteratureNo(compareLiteratureDTO.getFileGuid()); compareLiterature.setName(compareLiteratureDTO.getFileName()); compareLiterature.setDescription(compareLiteratureDTO.getDescription()); compareLiterature.insert(); return compareLiterature.getId(); } //查询对比文献 public Records queryCompareLiterature(LiteratureQueryDTO literatureQueryDTO) { Integer projectId = literatureQueryDTO.getProjectId(); //根据对比projectId 查询对比文献 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(CompareLiterature::getProjectId, projectId); Page page = this.page(new Page<>(literatureQueryDTO.getCurrent(), literatureQueryDTO.getSize()), queryWrapper); List compareLiteratures = page.getRecords(); List compareLiteratureVOS = new ArrayList<>(); //根据项目id查询标的专利号 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ReportProject::getProjectId, projectId); ReportProject reportProject = reportProjectService.getOne(wrapper); compareLiteratureVOS = this.loadCompareLiterature(compareLiteratures, reportProject); //装载不同的类型的对比文献 Records records = new Records(); records.setData(compareLiteratureVOS); records.setTotal(page.getTotal()); records.setSize(Long.parseLong(literatureQueryDTO.getSize().toString())); records.setCurrent(Long.parseLong(literatureQueryDTO.getCurrent().toString())); return records; } private List loadCompareLiterature(List compareLiteratures, ReportProject reportProject) { String signPatentNo = reportProject.getSignPatentNo(); //查询标的专利号 List compareLiteratureVOS = new ArrayList<>(); //非专利文献列表 List fileLiterature = compareLiteratures.stream().filter(item -> item.getType().equals(2)).collect(Collectors.toList()); //专利文献列表 List patentNos = compareLiteratures.stream().filter(item -> item.getType().equals(1)).map(CompareLiterature::getLiteratureNo).collect(Collectors.toList()); List patentList = new ArrayList<>(); if (reportProject.getSignPatentNo() != null) { patentNos.add(reportProject.getSignPatentNo()); } if (patentNos.size() > 0) { try { patentList = esPatentService.getPatentsByNo(patentNos,false); } catch (Exception e) { throw new XiaoShiException("装载文献信息失败"); } } //获得标的专利信息 Patent signPatent = patentList.stream() .filter(item -> item.getAppNo().equals(signPatentNo) || item.getPublicNo().equals(signPatentNo) || item.getGrantNo().equals(signPatentNo)).findFirst().orElse(null); for (CompareLiterature compareLiterature : compareLiteratures) { Integer id = compareLiterature.getId(); String literatureNo = compareLiterature.getLiteratureNo(); CompareLiteratureVO compareLiteratureVO = new CompareLiteratureVO(); compareLiteratureVO.setId(id); compareLiteratureVO.setName(compareLiterature.getName()); //当为专利文献时 if (compareLiterature.getType().equals(1)) { compareLiteratureVO.setIfSignAppEarly(false); if (patentList.size() > 0) { Patent patent = patentList.stream() .filter(item -> item.getAppNo().equals(literatureNo) || item.getPublicNo().equals(literatureNo) || item.getGrantNo().equals(literatureNo)).findFirst().orElse(null); if (patent != null) { compareLiteratureVO.setAppNo(patent.getAppNo()); compareLiteratureVO.setAppDate(patent.getAppDate()); compareLiteratureVO.setPublicDate(patent.getPublicDate()); compareLiteratureVO.setPublicNo(patent.getPublicNo()); compareLiteratureVO.setGrantDate(patent.getGrantDate()); compareLiteratureVO.setGrantNo(patent.getGrantNo()); //比较标的专利的申请日和对比专利的公开或者公告日 if (signPatent.getAppDate() != null) { if (patent.getPublicDate() != null) { if (signPatent.getAppDate().compareTo(patent.getPublicDate()) >= 0) { compareLiteratureVO.setIfSignAppEarly(true); } } else if (patent.getGrantDate() != null) { if (signPatent.getAppDate().compareTo(patent.getGrantDate()) >= 0) { compareLiteratureVO.setIfSignAppEarly(true); } } } } } } compareLiteratureVOS.add(compareLiteratureVO); } return compareLiteratureVOS; } }