package cn.cslg.pas.service; import cn.cslg.pas.common.core.base.Constants; import cn.cslg.pas.common.model.dto.report.*; import cn.cslg.pas.common.model.vo.ReportVO; import cn.cslg.pas.common.utils.*; import cn.cslg.pas.domain.*; import cn.cslg.pas.mapper.ReportMapper; import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.deepoove.poi.data.PictureRenderData; import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.io.FileOutputStream; import java.util.*; import java.util.stream.Collectors; /** *

* 报告表 服务实现类 *

* * @author 王岩 * @since 2021-12-27 */ @Service @RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class ReportService extends ServiceImpl { private final PatentService patentService; private final ReportTemplateService reportTemplateService; private final ReportTemplateLabelService reportTemplateLabelService; private final ProjectService projectService; private final PatentAffairService patentAffairService; private final PatentApplicantService patentApplicantService; private final PatentApplicantLinkService patentApplicantLinkService; private final PatentInventorService patentInventorService; private final PatentInventorLinkService patentInventorLinkService; private final PatentLicensorService patentLicensorService; private final SystemDictService systemDictService; private final PatentAgencyService patentAgencyService; private final PatentAgentService patentAgentService; private final FileUtils fileUtils; private final ProjectFolderPatentLinkService projectFolderPatentLinkService; private final ProjectFieldPatentLinkService projectFieldPatentLinkService; private final PatentLabelService patentLabelService; private final PatentClassNumberLinkService patentClassNumberLinkService; private final PatentInstructionTextService patentInstructionTextService; private final PatentRightService patentRightService; private final PatentSimpleFamilyLinkService patentSimpleFamilyLinkService; public List getReportList(ReportVO params) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.isNotEmpty(params.getPatentKey())) { queryWrapper.eq(Report::getPatentKey, params.getPatentKey()); } queryWrapper.orderByDesc(Report::getCreateTime); List dataList = this.list(queryWrapper); dataList.forEach(item -> item.setCfg(null)); return dataList; } public Report getReportById(Integer id) { Report report = this.getById(id); report.setCfg(null); return report; } public List getReportByIds(List ids) { if (ids == null || ids.size() == 0) { return new ArrayList<>(); } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(Report::getId, ids); return this.list(queryWrapper); } public List getReportIdsLikeName(String name) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.like(Report::getName, name); List ids = this.list(queryWrapper).stream().map(Report::getId).collect(Collectors.toList()); if (ids.size() == 0) { ids.add(0); } return ids; } @Async public void add(Report report) { try { LoopRowTableRenderPolicy hackLoopSameLineTableRenderPolicy = new LoopRowTableRenderPolicy(true); Configure config = Configure.builder() .bind("content", hackLoopSameLineTableRenderPolicy)//权利要求行循环 .bind("selfcontent", hackLoopSameLineTableRenderPolicy)//独权合并行 .bind("patents", hackLoopSameLineTableRenderPolicy) .useSpringEL()//使用spring表达式 .setValidErrorHandler(new Configure.AbortHandler()) .build(); //获取模板 ReportTemplate reportTemplate = reportTemplateService.getTemplateById(report.getTemplateId()); XWPFTemplate template = XWPFTemplate.compile(fileUtils.getPath(reportTemplate.getPath()), config); //数据整合 Map map = this.assemData(report); //渲染数据 template.render(map); //导出 String fileName = IdUtil.simpleUUID() + ".docx"; String directoryName = fileUtils.createDirectory(); String savePath = fileUtils.getSavePath(directoryName); template.writeAndClose(new FileOutputStream(savePath + fileName)); String url = fileUtils.getDirectory2(directoryName) + fileName; //保存文件地址到报表表 report.setPath(url); report.setStatus(1); report.updateById(); this.getReturnData(String.valueOf(report.getCreateBy())); } catch (Exception e) { e.printStackTrace(); report.setStatus(2); report.updateById(); this.getReturnData(String.valueOf(report.getCreateBy())); } } private void getReturnData(String userId) { Map map = new HashMap<>(); map.put("success", true); WebSocketServer.sendInfo(Response.success(map), userId); } //组建数据 private Map assemData(Report report) { //数据整合 Map map = new HashMap<>(); //1.系统数据 String date = DateUtils.formatDate(new Date(), DateUtils.YYYY_MM_DD); String[] ds = date.split("-"); map.put("sys", new SystemMO(ds[0], ds[1], ds[2], "", report.getName())); //2专题库信息 ThematicMO thematicMO = this.formatThematic(report); map.put("thematic", thematicMO); //3 分类,专利数据 List classifyMOS = this.formatClassify(report); if (classifyMOS.size() > 0) { for (ClassifyMO m : classifyMOS) { map.put(m.getKey(), m); } } //4.所有专利 List patentList = new ArrayList<>(); List patents = patentService.getPatentListByIds(report.getPatentIds()); ParameModel parameModel = getParame(report.getPatentIds()); if (patents != null && patents.size() > 0) { for (Patent p : patents) { patentList.add(this.formatPatentMO(p, parameModel.getAllApplicant(), parameModel.getAllAffair(), parameModel.getAllInventor(), parameModel.getAllInventorRelation(), parameModel.getAllLicensorRelation())); } } map.put("patents", patentList); return map; } private List formatClassify(Report report) { List list = new ArrayList<>(); //获取分类 List reportTemplateLabelList = reportTemplateLabelService.getTemplateLabelByTemplateIds(Collections.singletonList(report.getTemplateId())); List reportLabelCfg = JsonUtils.jsonToList(report.getCfg(), ReportPatentLabelDTO.class); ClassifyMO classifyMO; for (ReportTemplateLabel label : reportTemplateLabelList) { classifyMO = new ClassifyMO(); classifyMO.setKey(label.getLabel().replace("-", "")); classifyMO.setClassify_name(label.getName()); //此分类的配置的专利 ReportPatentLabelDTO lscfg = null; if (reportLabelCfg != null) { lscfg = reportLabelCfg.stream().filter(m -> m.getLabel().equals(label.getId())).findFirst().orElse(null); } if (lscfg == null || lscfg.getId() == null || lscfg.getId().size() == 0) { continue; } List patentIDS = lscfg.getId(); List patentList = patentService.getPatentListByIds(patentIDS); if (patentList == null || patentList.size() == 0) { continue; } ParameModel parameModel = this.getParame(patentIDS); List arrys = new ArrayList<>(); for (Patent p : patentList) { arrys.add(this.formatPatentMO(p, parameModel.getAllApplicant(), parameModel.getAllAffair(), parameModel.getAllInventor(), parameModel.getAllInventorRelation(), parameModel.getAllLicensorRelation())); } classifyMO.setArrys(arrys); list.add(classifyMO); } //补齐其他标记 if (reportTemplateLabelList.size() != list.size()) { for (ReportTemplateLabel lb : reportTemplateLabelList) { String lkey = lb.getLabel().replace("-", ""); long count = list.stream().filter(m -> m.getKey().equalsIgnoreCase(lkey)).count(); if (count == 0) { classifyMO = new ClassifyMO(); classifyMO.setKey(lkey); classifyMO.setClassify_name(lb.getName()); classifyMO.setArrys(new ArrayList<>()); list.add(classifyMO); } } } return list; } private ParameModel getParame(List ids) { List attrList = patentApplicantLinkService.getApplicantAttributesListByPatentIds(ids); List affList = patentAffairService.getPatentAffairListByPatentIds(ids); List inventorList = patentInventorService.getPatentInventorByPatentIds(ids); List inventorRelationList = patentInventorLinkService.getPatentInventorLinkByPatentIds(ids); List licensorList = patentLicensorService.getPatentLicensorByPatentIds(ids); ParameModel m = new ParameModel(); m.setAllAffair(affList); m.setAllApplicant(attrList); m.setAllInventor(inventorList); m.setAllInventorRelation(inventorRelationList); m.setAllLicensorRelation(licensorList); return m; } private ThematicMO formatThematic(Report report) { Project project = projectService.getProjectById(report.getProjectId()); ThematicMO thematicMO = new ThematicMO(); thematicMO.setTname(FormatUtil.toString(project.getName()));//专题库名称 thematicMO.setTechnical_theme(FormatUtil.toString(project.getTechnicalTheme()));//技术主题 thematicMO.setInnerfile(FormatUtil.toString(project.getInnerFile()));//内部案卷 thematicMO.setUpdate_cycle(project.getUpdate().equals(1) ? "是" : "否");//是否更新 thematicMO.setTreat_status(FormatUtil.toString(project.getStatus()));//处理状态 thematicMO.setContract_no(FormatUtil.toString(project.getContractNo()));//合同号 thematicMO.setCase_data(FormatUtil.toString(project.getCaseDate()));//委案日 thematicMO.setTupdate_time(FormatUtil.toString(project.getUpdateTime()));//更新周期 thematicMO.setTremark(FormatUtil.toString(project.getRemark()));//备注 thematicMO.setTcreate_time(DateUtils.formatDate(project.getCreateTime(), DateUtils.YYYY_MM_DD_HH_MM_SS));//TODO:创建时间 thematicMO.setSurvey_type(FormatUtil.toString(project.getTypeName()));//调查类型 thematicMO.setScenario(FormatUtil.toString(project.getScenarioName()));//委托场景 thematicMO.setClient(FormatUtil.toString(project.getClientName()));//委托方 return thematicMO; } public PatentMO formatPatentMO(Patent p, List allApplicant, List allAffair, List allInventor, List allInventorRelation, List allLicensorRelation ) { PatentMO patentMO = new PatentMO(); patentMO.setPname(FormatUtil.toString(p.getName()));//专利名称(标题) patentMO.setTranslate_name(FormatUtil.toString(p.getNameOut()));//专利名称(标题)(译) patentMO.setPatentno(FormatUtil.toString(p.getPatentNo()));//专利号 patentMO.setAbstracts(FormatUtil.toString(p.getAbstractStr()));//摘要 patentMO.setAbstractout(FormatUtil.toString(p.getAbstractOut()));//摘要(译) patentMO.setApplicationno(FormatUtil.toString(p.getApplicationNo()));//申请号 patentMO.setAppdate(DateUtils.formatDate(p.getApplicationDate(), DateUtils.YYYY_MM_DD));//申请日 patentMO.setPublicno(FormatUtil.toString(p.getPublicNo()));//公开号 patentMO.setPublicdate(DateUtils.formatDate(p.getPublicDate(), DateUtils.YYYY_MM_DD));//:公开日 patentMO.setFpublicdate(DateUtils.formatDate(p.getFirstPublicDate(), DateUtils.YYYY_MM_DD));//:首次公开日 patentMO.setPublictono(FormatUtil.toString(p.getPublicAccreditNo()));//公开授权号 patentMO.setPublictodate(DateUtils.formatDate(p.getPublicAccreditDate(), DateUtils.YYYY_MM_DD));//:公开授权日 patentMO.setBureau(FormatUtil.toString(p.getBureau()));//受理局 List patentClassNumberLinkList = patentClassNumberLinkService.getPatentClassNumberLinkByPatentIds(Collections.singletonList(p.getId())); patentMO.setIntclassno(FormatUtil.toString(StringUtils.join(patentClassNumberLinkList.stream().filter(item -> item.getType().equals(Constants.PATENT_CLASS_NUMBER_IPC)).map(PatentClassNumberLink::getCode).collect(Collectors.toList()), "\n")));//IPC分类号 patentMO.setIntclasscpcno(FormatUtil.toString(StringUtils.join(patentClassNumberLinkList.stream().filter(item -> item.getType().equals(Constants.PATENT_CLASS_NUMBER_CPC)).map(PatentClassNumberLink::getCode).collect(Collectors.toList()), "\n")));//CPC分类号 patentMO.setIntclassupcno(FormatUtil.toString(StringUtils.join(patentClassNumberLinkList.stream().filter(item -> item.getType().equals(Constants.PATENT_CLASS_NUMBER_UPC)).map(PatentClassNumberLink::getCode).collect(Collectors.toList()), "\n")));//UPC分类号 patentMO.setIntclasslocno(FormatUtil.toString(StringUtils.join(patentClassNumberLinkList.stream().filter(item -> item.getType().equals(Constants.PATENT_CLASS_NUMBER_LOC)).map(PatentClassNumberLink::getCode).collect(Collectors.toList()), "\n")));//LOC分类号 patentMO.setPstatus(systemDictService.getSystemDictLabelByTypeAndValue(Constants.PATENT_SIMPLE_STATUS, p.getSimpleStatus()));//状态 patentMO.setPtype(systemDictService.getSystemDictLabelByTypeAndValue(Constants.PATENT_TYPE, p.getType()));//类型 patentMO.setCode(FormatUtil.toString(p.getCode()));//文献代码 PatentInstructionText patentInstructionText = patentInstructionTextService.getPatentInstructionTextByPatentId(p.getId()); if (patentInstructionText != null) { patentMO.setManual(FormatUtil.toString(patentInstructionText.getManual()));//说明书 patentMO.setManualout(FormatUtil.toString(patentInstructionText.getManualOut()));//说明书(译) } patentMO.setPage(FormatUtil.toString(p.getDocPage()));//文献页数 patentMO.setInventornum(FormatUtil.toString(p.getInventorNum()));//发明人数量 patentMO.setNum2(FormatUtil.toString(p.getSelfRightContentNum()));//权利要求数量 patentMO.setNum3(FormatUtil.toString(p.getSelfRightNum()));//独立权利要求数量 这个字段是没有数据的 List patentRightList = patentRightService.getPatentRightByPatentId(p.getId()); List cs = formatContent(patentRightList.stream().filter(item -> item.getType().equals(1)).collect(Collectors.toList())); patentMO.setSelfcontent(cs);//独立权利要求 patentMO.setPriorityno(FormatUtil.toString(p.getPriorityNo()));//优先权号 patentMO.setPrioritycountry(FormatUtil.toString(p.getPriorityCountry()));//优先权国家 patentMO.setPrioritydate(DateUtils.formatDate(p.getPriorityDate(), DateUtils.YYYY_MM_DD)); patentMO.setSimplefamilynum(FormatUtil.toString(p.getSimpleFamilyNum()));//:简单同族数量 patentMO.setInpadocfamilynum(FormatUtil.toString(p.getInpadocFamilyNum()));//:Inpadoc同族数量 patentMO.setQuoteno(FormatUtil.toString(p.getQuoteNum()));//:引用专利数量 patentMO.setQuotedno(FormatUtil.toString(p.getQuotedNum()));//:被引用数量 patentMO.setQuotedno3(FormatUtil.toString(p.getQuotedNum3()));//:三年内被引用数量 patentMO.setQuotedno5(FormatUtil.toString(p.getQuotedNum5()));//:五年内被引用数量 List patentSimpleFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(Arrays.asList(p.getSimpleFamily(), p.getInpadocFamily())); patentMO.setSfamily(FormatUtil.toString(StringUtils.join(patentSimpleFamilyLinkList.stream().filter(item -> item.getFamilyId().equals(p.getSimpleFamily())).map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()), " | ")));//简单同族 patentMO.setIfamily(FormatUtil.toString(StringUtils.join(patentSimpleFamilyLinkList.stream().filter(item -> item.getFamilyId().equals(p.getInpadocFamily())).map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()), " | ")));//i同族 if (StringUtils.isNotEmpty(p.getAgencyId())) { PatentAgency a = patentAgencyService.getById(p.getAgencyId()); if (a != null) { patentMO.setAgency(a.getName());//:代理机构 } } List b = patentAgentService.getPatentAgentByPatentId(p.getId()); if (b != null && b.size() != 0) { patentMO.setAgent(StringUtils.join(b.stream().map(PatentAgent::getName).collect(Collectors.toList()), ",")); } patentMO.setWonational(FormatUtil.toString(p.getWo()));//WO国家阶段 patentMO.setExaminer(p.getExaminer());//审查员 patentMO.setAssexaminer(p.getAidExaminer());//助理审查员 patentMO.setQuote(FormatUtil.toString(p.getQuote()));//引用专利 patentMO.setQuoted(FormatUtil.toString(p.getQuoted()));//被引用专利 patentMO.setNonpatentquote(FormatUtil.toString(p.getNotPatentQuote()));//非专利引用文献 if (StringUtils.isNotEmpty(p.getAbstractPath())) { PictureRenderData pic = new PictureRenderData(100, 100, fileUtils.getPath(p.getAbstractPath())); patentMO.setAbstract_path(pic);//摘要附图 } patentMO.setEpcountry(FormatUtil.toString(p.getEpStatus()));//指定国状态 //1是权利人 2是申请人 List applyList = allApplicant.stream().filter(m -> m.getPatentId().equals(p.getId()) && m.getType().equals(2)).collect(Collectors.toList()); if (applyList.size() > 0) { //申请人 当前 List currAppIDS = applyList.stream().map(PatentApplicantLink::getApplicantId).collect(Collectors.toList()); List alist = patentApplicantService.getPatentApplicantByIds(currAppIDS); List names = alist.stream().map(PatentApplicant::getName).collect(Collectors.toList()); patentMO.setApplicant_names_current(FormatUtil.toString(StringUtils.join(names, ","))); List aplist = new ArrayList<>(); PatentApplyMO mo; for (PatentApplicant a : alist) { mo = new PatentApplyMO(); mo.setName(a.getName()); mo.setBname(a.getShortName()); mo.setRemark(a.getRemark()); aplist.add(mo); } PatentApplicantLink firstApplicantLink = applyList.stream().filter(item -> item.getOrder().equals(0)).findFirst().orElse(null); if (firstApplicantLink != null) { PatentApplicant firstApplicant = alist.stream().filter(item -> item.getId().equals(firstApplicantLink.getApplicantId())).findFirst().orElse(null); if (firstApplicant != null) { if (firstApplicant.getName() == null || firstApplicant.getName().equals("")) { patentMO.setFirstapplicant("无"); } else { patentMO.setFirstapplicant(FormatUtil.toString(firstApplicant.getName())); } } } patentMO.setApplicant_list_current(aplist); //申请人 标准 List names2 = alist.stream().map(PatentApplicant::getShortName).collect(Collectors.toList()); patentMO.setApplicant_names_standard(FormatUtil.toString(StringUtils.join(names2, ",")));//赋值 List aplist2 = new ArrayList<>(); PatentApplyMO mo2; for (PatentApplicant a : alist) { mo2 = new PatentApplyMO(); mo2.setName(a.getName()); mo2.setBname(a.getShortName()); mo2.setRemark(a.getRemark()); aplist2.add(mo2); } patentMO.setApplicant_list_standard(aplist2); } //权利人 List obligeeList = allApplicant.stream().filter(m -> m.getPatentId().equals(p.getId()) && m.getType().equals(1)).collect(Collectors.toList()); if (obligeeList.size() > 0) { //权利人 当前 List currAppIDS = obligeeList.stream().map(PatentApplicantLink::getApplicantId).collect(Collectors.toList()); List alist = patentApplicantService.getPatentApplicantByIds(currAppIDS); List names = alist.stream().map(PatentApplicant::getName).collect(Collectors.toList()); patentMO.setObligee_names_current(FormatUtil.toString(StringUtils.join(names, ",")));//赋值 List aplist = new ArrayList<>(); PatentApplyMO mo; for (PatentApplicant a : alist) { mo = new PatentApplyMO(); mo.setName(a.getName()); mo.setBname(a.getShortName()); mo.setRemark(a.getRemark()); aplist.add(mo); } patentMO.setObligee_list_current(aplist); //权利人 标准 List names2 = alist.stream().map(PatentApplicant::getName).collect(Collectors.toList()); patentMO.setObligee_names_standard(FormatUtil.toString(StringUtils.join(names2, ",")));//赋值 List aplist2 = new ArrayList<>(); PatentApplyMO mo2; for (PatentApplicant a : alist) { mo2 = new PatentApplyMO(); mo2.setName(a.getName()); mo2.setBname(a.getShortName()); mo2.setRemark(a.getRemark()); aplist2.add(mo2); } patentMO.setObligee_list_standard(aplist2); } //法律事务 List affairMoList = new ArrayList<>(); List affairList = allAffair.stream().filter(m -> m.getPatentId().equals(p.getId())).collect(Collectors.toList()); if (affairList.size() > 0) { PatentLawMO m; for (PatentAffair a : affairList) { m = new PatentLawMO(); m.setLaw_content(a.getContent()); m.setLaw_datetime(DateUtils.formatDate(a.getDateTime(), DateUtils.YYYY_MM_DD)); m.setLaw_remark(a.getRemark()); m.setLaw_simplestatus(systemDictService.getSystemDictLabelByTypeAndValue(Constants.PATENT_SIMPLE_STATUS, a.getSimpleStatus())); m.setLaw_status(systemDictService.getSystemDictLabelByTypeAndValue(Constants.PATENT_STATUS, a.getStatus())); affairMoList.add(m); } } patentMO.setLawArrys(affairMoList);//法律事务 //发明人 List inventorMoList = new ArrayList<>(); List inventorReloationList = allInventorRelation.stream().filter(m -> m.getPatentId().equals(p.getId())).collect(Collectors.toList()); if (inventorReloationList.size() > 0) { List ids = inventorReloationList.stream().map(PatentInventorLink::getInventorId).collect(Collectors.toList()); List inventorList = allInventor.stream().filter(m -> ids.contains(m.getId())).collect(Collectors.toList()); List inventorNames = inventorList.stream().map(PatentInventor::getName).collect(Collectors.toList()); patentMO.setInventor_names(FormatUtil.toString(StringUtils.join(inventorNames, ",")));//赋值 InventorMO m; for (PatentInventor a : inventorList) { m = new InventorMO(); m.setName(a.getName()); inventorMoList.add(m); } } patentMO.setInventor_list(inventorMoList);//发明人 List permitMoList = new ArrayList<>(); //许可人 List licentorMoList = new ArrayList<>();//被许可 List permitRelation = allLicensorRelation.stream().filter(m -> m.getPatentId().equals(p.getId())).collect(Collectors.toList()); permitRelation.forEach(item -> { PermitMO m1 = new PermitMO(); m1.setName(item.getLicensor()); PermitMO m2 = new PermitMO(); m2.setName(item.getLicensee()); m1.setPermittype(item.getType()); m2.setPermittype(item.getType()); permitMoList.add(m1); licentorMoList.add(m2); }); patentMO.setPermit_list(permitMoList);//许可 patentMO.setLicensed_list(licentorMoList);//被许可 return patentMO; } //独立权利要求格式化 private List formatContent(List content) { if (content == null || content.size() == 0) { return new ArrayList<>(); } List list = new ArrayList<>(); for (int i = 0; i < content.size(); i++) { PatentMO.ContentMO m = new PatentMO.ContentMO(); m.setTitle("独权" + (i + 1)); m.setItem(Collections.singletonList(content.get(i).getContent())); m.setOut(Collections.singletonList(content.get(i).getContentOut())); list.add(m); } List rlist = new ArrayList<>(); if (list.size() > 0) { for (PatentMO.ContentMO cm : list) { StringBuilder sb = new StringBuilder(); StringBuilder sbb = new StringBuilder(); for (String s : cm.getItem()) { sb.append(s); } for (String s : cm.getOut()) { sbb.append(s); } String dcode = sb.toString().replace("\n", "").replace(";", ";"); String code; if (sbb.toString().contains("。")) { code = sbb.toString().replace("\n", "").replace("。", ";"); } else { code = sbb.toString().replace("\n", "").replace(";", ";"); } List sarry = Arrays.asList(dcode.split(";")); List out = Arrays.asList(code.split(";")); for (int i = 0, sarrySize = sarry.size(); i < sarrySize; i++) { String s = sarry.get(i); if (sarrySize - 1 == i) { if (out.size() > i) { rlist.add(new PatentMO.ContentMO2(cm.getTitle(), s + ".", out.get(i))); } else { rlist.add(new PatentMO.ContentMO2(cm.getTitle(), s + ".", "")); } } else { if (out.size() > i) { rlist.add(new PatentMO.ContentMO2(cm.getTitle(), s + ";", out.get(i))); } else { rlist.add(new PatentMO.ContentMO2(cm.getTitle(), s + ";", "")); } } } } } return rlist; } public List getPatentList(List patentIds, Integer projectId) { List dataList = new ArrayList<>(); List patentList = patentService.getPatentListByIds(patentIds); List patentApplicantList = patentApplicantService.getPatentApplicantByPatentIds(patentIds); List projectFolderPatentLinkList = projectFolderPatentLinkService.getProjectFolderLinkListByProjectIdAndPatentIds(projectId, patentIds); List projectFieldPatentLinkList = projectFieldPatentLinkService.getProjectPatentLinkByPatentIdsAndProjectId(patentIds, projectId); List patentLabelList = patentLabelService.getPatentLabelByPatentIdsAndProjectId(patentIds, projectId); patentList.forEach(item -> { List patentApplicants = patentApplicantList.stream().filter(patentApplicant -> patentApplicant.getPatentId().equals(item.getId())).collect(Collectors.toList()); List projectFieldPatentLinks = projectFieldPatentLinkList.stream().filter(projectFieldPatentLink -> projectFieldPatentLink.getPatentId().equals(item.getId())).collect(Collectors.toList()); ReportPatentDTO patentDTO = new ReportPatentDTO(); List fieldList = new ArrayList<>(); patentDTO.setName(item.getName()); patentDTO.setPatentno(item.getPatentNo()); patentDTO.setApplicationno(item.getApplicationNo()); patentDTO.setPublicno(item.getPublicNo()); patentDTO.setId(item.getId()); patentDTO.setType(item.getType()); patentDTO.setStatus(item.getSimpleStatus()); patentDTO.setFolder(projectFolderPatentLinkList.stream().filter(projectFolderPatentLink -> projectFolderPatentLink.getPatentId().equals(item.getId())).map(ProjectFolderPatentLink::getFolderId).distinct().collect(Collectors.toList())); patentDTO.setApplicant(patentApplicants.stream().filter(patentApplicant -> patentApplicant.getDataType().equals(2)).map(PatentApplicant::getName).collect(Collectors.toList())); patentDTO.setObligee(patentApplicants.stream().filter(patentApplicant -> patentApplicant.getDataType().equals(1)).map(PatentApplicant::getName).collect(Collectors.toList())); List fieldIds = projectFieldPatentLinks.stream().map(ProjectFieldPatentLink::getFieldId).distinct().collect(Collectors.toList()); fieldIds.forEach(fieldId -> { ReportPatentDTO.Field field = new ReportPatentDTO.Field(); field.setId(fieldId); field.setValue(projectFieldPatentLinks.stream().filter(projectFieldPatentLink -> projectFieldPatentLink.getFieldId().equals(fieldId)).map(ProjectFieldPatentLink::getOptionId).distinct().collect(Collectors.toList())); fieldList.add(field); }); patentDTO.setLabel(patentLabelList.stream().filter(patentLabel -> patentLabel.getPatentId().equals(item.getId())).map(PatentLabel::getName).collect(Collectors.toList())); patentDTO.setField(fieldList); dataList.add(patentDTO); }); return dataList; } //根据Id删除报告 public String deleteById(List ids) { this.deleteById(ids); return Response.success(); } }