package cn.cslg.pas.service.business; import cn.cslg.pas.common.model.addPatentToReport.AddProjectPatentToReportDTO; import cn.cslg.pas.common.model.addPatentToReport.PatentNoWithIdVO; import cn.cslg.pas.common.model.cronModel.PersonnelVO; import cn.cslg.pas.common.model.request.StringRequest; import cn.cslg.pas.common.utils.CacheUtils; import cn.cslg.pas.common.utils.LoginUtils; import cn.cslg.pas.common.vo.PatentWithIdVO; import cn.cslg.pas.domain.business.AssoProjectPerson; import cn.cslg.pas.domain.business.Project; import cn.cslg.pas.domain.es.Patent; import cn.cslg.pas.domain.es.PatentJoin; import cn.cslg.pas.mapper.ProjectMapper; 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.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; /** * 项目业务层 * * @Author lirj * @Date 2023/11/1 */ @Service public class ProjectService extends ServiceImpl { @Autowired private ProjectMapper projectMapper; @Autowired private CacheUtils cacheUtils; @Autowired private LoginUtils loginUtils; @Autowired private AssoProjectPersonService assoProjectPersonService; @Autowired private EsPatentService esPatentService; @Autowired private EsService esService; public Optional getByIdOpt(Integer id) { Project project = projectMapper.selectById(id); return Optional.ofNullable(project); } public Map> getProjectPermissions(List projectIds) { Map> map = new HashMap<>(); if (projectIds == null || projectIds.size() == 0) { return map; } projectIds.forEach( item -> { map.put(item, new ArrayList<>()); } ); PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId()); String id = personnelVO.getId(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.select(Project::getId, Project::getCreateId, Project::getHeadId); queryWrapper.in(Project::getId, projectIds); List projects = this.list(queryWrapper); projects.forEach(item -> { Integer projectId = item.getId(); String createId = item.getCreateId(); String headId = item.getHeadId(); List roles = map.get(projectId); if (id.equals(createId)) { roles.add("0"); } if (id.equals(headId)) { roles.add("1"); } }); LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); queryWrapper1.in(AssoProjectPerson::getProjectId, projectIds); queryWrapper1.eq(AssoProjectPerson::getPersonId, id); List assoProjectPersonList = assoProjectPersonService.list(queryWrapper1); assoProjectPersonList.forEach(item -> { Integer projectId = item.getProjectId(); List roles = map.get(projectId); if (!roles.contains(item.getRole() + "")) { roles.add(item.getRole() + ""); } }); return map; } /** * 复制专利到另一个报告或专题库 * @param addProjectPatentToReportDTO */ public void addProjectPatentToReport(AddProjectPatentToReportDTO addProjectPatentToReportDTO) { //查询专利号 StringRequest stringRequest = addProjectPatentToReportDTO.getStringRequest(); Integer toProjectId = addProjectPatentToReportDTO.getToProjectId(); List notInNos = addProjectPatentToReportDTO.getNotInPatentNos(); List patentWithIdVOS = new ArrayList<>(); List InPatentNos = addProjectPatentToReportDTO.getInPatentNos(); try { patentWithIdVOS = esPatentService.getPatentIdsWithNotNo(stringRequest, notInNos); if (patentWithIdVOS != null && patentWithIdVOS.size() > 0) { this.addAssoToEs(patentWithIdVOS, toProjectId); } if(InPatentNos!=null&&InPatentNos.size()>0){ List patentNoWithIdVOS =new ArrayList<>(); InPatentNos.forEach(item->{ PatentNoWithIdVO patentNoWithIdVO =new PatentNoWithIdVO(); patentNoWithIdVO.setPatentNo(item); patentNoWithIdVOS.add(patentNoWithIdVO); }); this.addAssoToEs(patentNoWithIdVOS,toProjectId); } } catch (Exception e) { } } /** * 添加报告或专题库与专利关联 * @param patentWithIdVOS * @param projectId * @throws Exception */ private void addAssoToEs(List patentWithIdVOS, Integer projectId) throws Exception { if (patentWithIdVOS == null || patentWithIdVOS.size() == 0) { return; } else { patentWithIdVOS.forEach(item -> { if (item != null) { try { String id = item.getId(); if(id==null){ PatentWithIdVO patentWithIdVO = esService.getIdByPatentNo(item.getPatentNo()); id =patentWithIdVO.getId(); } Boolean ifInproject = esService.searchPatent(id, projectId); if (!ifInproject && id != null && !id.trim().equals("")) { Patent patent = new Patent(); PatentJoin patentJoin = new PatentJoin(); patentJoin.setParent(id); patentJoin.setName("project"); patent.setPatentJoin(patentJoin); patent.setProjectId(projectId); esService.addChildPatent(patent, id); } } catch (Exception e) { e.printStackTrace(); } } }); } } }