123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371 |
- package cn.cslg.pas.service;
- import cn.cslg.pas.common.dto.PatentColumnDTO;
- import cn.cslg.pas.common.dto.PatentDTO;
- import cn.cslg.pas.common.dto.es.EsCustomFieldValueDTO;
- import cn.cslg.pas.common.model.SystemMO;
- import cn.cslg.pas.common.model.cronModel.PersonnelVO;
- import cn.cslg.pas.common.model.request.StringRequest;
- import cn.cslg.pas.common.utils.*;
- import cn.cslg.pas.common.vo.*;
- import cn.cslg.pas.common.vo.business.FTOCompareRecordVO;
- import cn.cslg.pas.common.vo.business.TortCompareRecordVO;
- import cn.cslg.pas.common.vo.business.TortRightVO;
- import cn.cslg.pas.common.vo.business.TortVO;
- import cn.cslg.pas.domain.ReportDocument;
- import cn.cslg.pas.domain.business.*;
- import cn.cslg.pas.domain.es.Patent;
- import cn.cslg.pas.domain.es.PatentPerson;
- import cn.cslg.pas.domain.es.Priorities;
- import cn.cslg.pas.domain.es.Text;
- import cn.cslg.pas.exception.XiaoShiException;
- import cn.cslg.pas.mapper.AvoidDesignMapper;
- import cn.cslg.pas.service.business.*;
- import cn.cslg.pas.service.business.es.*;
- import cn.cslg.pas.service.business.invalidReport.AssoReasonLiteratureService;
- import cn.cslg.pas.service.business.invalidReport.EvidenceReasonService;
- import cn.cslg.pas.service.business.stabilityReport.AssoGroupReasonService;
- import cn.cslg.pas.service.common.FileManagerService;
- import cn.hutool.core.util.IdUtil;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.deepoove.poi.XWPFTemplate;
- import com.deepoove.poi.config.Configure;
- import com.deepoove.poi.data.PictureRenderData;
- import com.deepoove.poi.data.PictureType;
- import com.deepoove.poi.data.Pictures;
- import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.collections4.CollectionUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.ddr.poi.html.HtmlRenderPolicy;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.text.SimpleDateFormat;
- import java.time.format.DateTimeFormatter;
- import java.util.*;
- import java.util.stream.Collectors;
- @Slf4j
- @Service
- public class ReportExportService {
- @Autowired
- private ReportTempleService templeService;
- @Autowired
- private FileUtils fileUtils;
- @Autowired
- private ReportProjectService reportProjectService;
- @Autowired
- private FileManagerService fileManagerService;
- @Autowired
- private EsPatentService esPatentService;
- @Autowired
- private AvoidDesignMapper avoidDesignMapper;
- @Autowired
- private TemplateConfigService templateConfigService;
- @Autowired
- private CustomFieldService customFieldService;
- @Autowired
- private EsService esService;
- @Autowired
- private FTOCompareRecordService ftoCompareRecordService;
- @Autowired
- private EsQuotePatentService esQuotePatentService;
- @Autowired
- private EsFamilyService esFamilyService;
- @Autowired
- private LoginUtils loginUtils;
- @Autowired
- private CacheUtils cacheUtils;
- @Autowired
- private EsLegalEventService esLegalEventService;
- @Autowired
- private FeatureService featureService;
- @Autowired
- private PatentSplitMessageService patentSplitMessageService;
- @Autowired
- private ProofGroupService proofGroupService;
- @Autowired
- private AssoGroupReasonService assoGroupReasonService;
- @Autowired
- private AssoReasonLiteratureService assoReasonLiteratureService;
- @Autowired
- private CompareLiteratureService compareLiteratureService;
- @Autowired
- private EvidenceReasonService evidenceReasonService;
- @Autowired
- private TortCompareRecordService tortCompareRecordService;
- /**
- * @param projectId
- * @param templeId
- * @return
- * @throws IOException
- * @function: 导出报告
- */
- public String exportReport(Integer projectId, Integer templeId) throws Exception {
- //根据模板ID获得模板
- ReportTemple reportTemplate = templeService.getById(templeId);
- //获得模板路径
- String templateFilePath = fileUtils.getPath(reportTemplate.getTemplatePath());
- //读取模板后保存生成word的地址
- String fileName = IdUtil.simpleUUID() + ".docx";
- String directoryName = fileUtils.createDirectory();
- String outPath = fileUtils.getSavePath(directoryName) + fileName;
- //根据ProjectId 获得报告
- LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(ReportProject::getProjectId, projectId);
- ReportProject report = reportProjectService.getOne(queryWrapper, false);
- if (report == null) {
- throw new XiaoShiException("报告不存在");
- }
- XWPFTemplate template = null;
- if (report.getReportType() == 0 || report.getReportType() == 2) {
- template = this.getstabilityTemplate(projectId, templateFilePath);
- } else if (report.getReportType() == 3) {
- template = this.FTOTemplate(projectId, templateFilePath, templeId);
- } else if (report.getReportType() == 4) {
- template = this.Torttemplate(projectId, templateFilePath);
- } else if (report.getReportType() == 5) {
- template = this.avoidDesignTemplate(projectId, templateFilePath);
- } else if (report.getReportType() == 1) {
- template = this.getThirdTemplate(projectId, templateFilePath);
- }
- if (template == null) {
- return null;
- }
- // 读取模板、数据并渲染
- // 文件是否已存在,则删除
- File file = new File(outPath);
- // 生成word保存在指定目录
- template.writeToFile(outPath);
- template.close();
- //导出成功后,导出报告记录入库
- List<String> ids = fileManagerService.uploadFileGetGuid2(Arrays.asList(file));
- if (ids == null || ids.size() == 0) {
- throw new XiaoShiException("保存记录失败");
- }
- PersonnelVO personnelVO = new PersonnelVO();
- personnelVO.setId("1");
- ReportDocument reportDocument = new ReportDocument();
- reportDocument.setProjectId(projectId);
- reportDocument.setFileName(fileName);
- reportDocument.setFileGuid(ids.get(0));
- reportDocument.setCreateId(personnelVO.getId());
- reportDocument.setTemplateId(reportTemplate.getId());
- reportDocument.setTemplateName(reportTemplate.getTemplateName());
- reportDocument.insert();
- if (file.exists()) {
- file.delete();
- }
- return ids.get(0);
- }
- private XWPFTemplate Torttemplate(Integer reportId, String filePath) throws Exception {
- //根据报告Id查询标的专利号
- LambdaQueryWrapper<ReportProject> projectLambdaQueryWrapper = new LambdaQueryWrapper<>();
- projectLambdaQueryWrapper.eq(ReportProject::getProjectId, reportId);
- ReportProject report = reportProjectService.getOne(projectLambdaQueryWrapper, false);
- String patentNo = report.getSignPatentNo();
- List<Patent> patentList = esPatentService.getPatentsByNo(Arrays.asList(patentNo), true, null, null);
- if (patentList == null || patentList.size() == 0) {
- return null;
- }
- //装载单个专利的信息
- Map<String, Object> patentMap = new HashMap<>();
- Patent patent = patentList.get(0);
- String applicants = "";
- String rightPerson = "";
- if (patent.getApplicant() != null && patent.getApplicant().size() != 0) {
- List<String> names =patent.getApplicant().stream().map(PatentPerson::getName).collect(Collectors.toList());
- applicants = StringUtils.join(names, "\n");
- }
- if (patent.getRightHolder() != null && patent.getRightHolder().size() != 0) {
- List<String> names =patent.getRightHolder().stream().map(PatentPerson::getName).collect(Collectors.toList());
- rightPerson = StringUtils.join(names, "\n");
- }
- //装载同族信息
- List<Map<String, Object>> familyMaps = esFamilyService.getPatentFamilyByNos(Arrays.asList(patent.getPatentNo()), "simple");
- if (familyMaps.size() <= 0) {
- familyMaps = esFamilyService.getPatentFamilyByNos(Arrays.asList(patent.getPatentNo()), "inpadoc");
- }
- if (familyMaps != null && familyMaps.size() > 0) {
- Map<String, Object> familyMap = familyMaps.get(0);
- if (familyMap.get("nos") != null) {
- List<String> nos = (List<String>) familyMap.get("nos");
- if (nos != null && nos.size() > 0) {
- String nosStr = StringUtils.join(nos, "\n");
- patentMap.put("simpleFamilys", nosStr);
- }
- }
- }
- //装载引用专利
- Map<String, Object> map = esQuotePatentService.getEsQutePatentByNos(patent.getPatentNo());
- if (map.get("nos") != null) {
- List<String> nos = (List<String>) map.get("nos");
- if (nos != null && nos.size() > 0) {
- String nosStr = StringUtils.join(nos, "\n");
- patentMap.put("quotePatents", nosStr);
- }
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
- if (patent.getGrantDate() != null) {
- patentMap.put("publicDate",dateFormat.format(patent.getGrantDate()));
- }
- else {
- patentMap.put("publicDate",dateFormat.format(patent.getPublicDate()));
- }
- }
- if (patent.getGrantNo() != null) {
- patentMap.put("publicNo", patent.getGrantNo());
- } else {
- patentMap.put("publicNo", patent.getPublicNo());
- }
- patentMap.put("applicant", applicants);
- patentMap.put("rightPerson", rightPerson);
- if (patent.getTitle() != null && patent.getTitle().size() > 0) {
- patentMap.put("name", patent.getTitle().get(0).getTextContent());
- }
- //图示
- String guid = FormatUtil.getPictureFormat(patent.getAppNo());
- PictureRenderData pictureData = this.guidToStream(guid);
- if (pictureData != null) {
- patentMap.put("abstractPath", pictureData);
- }
- if (patent.getPriorities() != null && patent.getPriorities().size() != 0) {
- List<String> dates = patent.getPriorities().stream().map(Priorities::getPriorityDate).collect(Collectors.toList());
- String nosStr = StringUtils.join(dates, ";");
- patentMap.put("priorityDate", nosStr);
- }
- //获得专利对比记录的信息
- TortCompareRecordVO tortCompareRecordVO = tortCompareRecordService.getAllTortTaskResult(reportId, null, 2);
- List<TortRightVO> tortRightVOS = tortCompareRecordVO.getTortRightVOS();
- List<Map<String, Object>> tortMaps = new ArrayList<>();
- Integer addI = 1;
- if (tortRightVOS != null && tortRightVOS.size() > 0) {
- addI =addI-tortRightVOS.get(0).getSort();
- }
- for (TortRightVO tortRightVO : tortRightVOS) {
- Integer sort = tortRightVO.getSort();
- List<TortVO> tortVOS = tortRightVO.getTortVOS();
- for (TortVO tortVO : tortVOS) {
- Map<String, Object> tortMap = new HashMap<>();
- tortMap.put("rightName", "权要" + (sort + addI));
- tortMap.put("content", tortVO.getContent());
- tortMap.put("explainText", tortVO.getExplainText());
- FTOCompareRecordVO ftoCompareRecordVO = tortVO.getFinalRecordVO();
- if (ftoCompareRecordVO != null) {
- tortMap.put("targetDescription", ftoCompareRecordVO.getTargetDescription());
- Integer result = ftoCompareRecordVO.getCompareResult();
- System.out.println(result);
- if(result!=null) {
- switch (result) {
- case 0:
- tortMap.put("resultStr", "字面相同");
- break;
- case 1:
- tortMap.put("resultStr", "等同");
- break;
- case 2:
- tortMap.put("resultStr", "不等同");
- break;
- case 3:
- tortMap.put("resultStr", "确定");
- break;
- }
- }
- tortMap.put("compareDescription", ftoCompareRecordVO.getCompareDescription());
- }
- tortMaps.add(tortMap);
- }
- }
- //装载对比记录的信息
- patentMap.put("cM", tortMaps);
- System.out.println(tortMaps);
- Map<String, Object> map1 = new HashMap<>();
- String date = DateUtils.formatDate(new Date(), DateUtils.YYYY_MM_DD);
- String[] ds = date.split("-");
- map1.put("sys", new SystemMO(ds[0], ds[1], ds[2], "", "reportName"));
- map1.put("patentMap", patentMap);
- System.out.println(patentMap);
- // 为表格的显示绑定行循环
- LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
- HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
- // 将bz设置为行循环绑定的数据源的key,即key是bz的value会在模板中的{{bz}}处进行解析
- Configure configure = Configure.builder().bind("cM", policy).bind("targetDescription", htmlRenderPolicy).bind("compareDescription",htmlRenderPolicy).build();
- XWPFTemplate template = XWPFTemplate.compile(filePath, configure).render(map1);
- return template;
- }
- private XWPFTemplate avoidDesignTemplate(Integer projectId, String path) throws IOException {
- String filePath = fileUtils.getPath(path);
- log.info("开始处理导出规避设计报告,参数为:{}, {}", projectId, filePath);
- LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(ReportProject::getProjectId, projectId);
- ReportProject report = reportProjectService.getOne(queryWrapper, false);
- String signPatentNo = report.getSignPatentNo();
- //装载年月日
- String date = DateUtils.formatDate(new Date(), DateUtils.YYYY_MM_DD);
- String[] dates = date.split("-");
- SystemMO systemMO = new SystemMO()
- .setYear(dates[0])
- .setMonth(dates[1])
- .setDay(dates[2]);
- //
- //装载特征、解释、回避设计方向、回避设计总体方向
- List<AvoidFeaturesVO> features = avoidDesignMapper.selectAvoidDesign(projectId);
- // String wholeDirection = avoidDesignWholeDirectionMapper.selectWholeDirectionByReportId(reportId);
- // map.put("wholeDirection", wholeDirection);
- //
- //绑定政策(绑定集合和元素循环遍历)
- LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
- //把指定元素内容识别传输成html格式
- HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
- Configure configure = Configure.builder()
- .bind("signPatent.rights", policy)
- .bind("features", policy)
- .bind("explainText", htmlRenderPolicy)
- .bind("littleDirection", htmlRenderPolicy)
- .bind("wholeDirection", htmlRenderPolicy)
- .build();
- XWPFTemplate template = XWPFTemplate.compile(filePath, configure).render(new HashMap<>());
- return template;
- }
- private PictureRenderData guidToStream(String guid) {
- PictureRenderData pictureRenderData = null;
- byte[] bytes = null;
- if (guid == null) {
- return pictureRenderData;
- }
- try {
- bytes = fileManagerService.downloadSystemFileFromFMS(guid);
- } catch (Exception e) {
- }
- FileInputStream fileInputStream = FileUtils.byteToFile(bytes);
- pictureRenderData = Pictures.ofStream(fileInputStream, PictureType.PNG)
- .create();
- return pictureRenderData;
- }
- private List<Map<String, Object>> getClaimMaps(List<Text> claims, String patentNo) {
- List<Map<String, Object>> rights = new ArrayList<>();
- if (claims == null || claims.size() == 0) {
- return rights;
- }
- Text claim = claims.stream().filter(item -> item.getIfOrigin().equals(true)).findFirst().orElse(null);
- if (claim == null) {
- return rights;
- }
- PatentRightParams params = new PatentRightParams();
- params.setContent(claim.getTextContent());
- params.setPatentNo(patentNo);
- List<RePatentClaim> patentRights = PatentRightUtils.formatPatentRight(params);
- //给权要进行格式更改
- patentRights.forEach(item -> {
- Map<String, Object> temMap = new HashMap<>();
- temMap.put("rightName", "权" + (item.getSort() + 1));
- temMap.put("content", item.getContent());
- temMap.put("rightNameLong", "权利要求" + (item.getSort() + 1));
- temMap.put("parentSort", item.getParentSort());
- temMap.put("sort", item.getSort());
- rights.add(temMap);
- });
- return rights;
- }
- /**
- * @param projectId
- * @param filePath
- * @return
- * @description 装载FTO模板
- */
- private XWPFTemplate FTOTemplate(Integer projectId, String filePath, Integer templateId) throws IOException {
- //获得模板的配置信息
- LambdaQueryWrapper<TemplateConfig> templateConfigWrapper = new LambdaQueryWrapper<TemplateConfig>();
- templateConfigWrapper.eq(TemplateConfig::getTemplateId, templateId);
- List<TemplateConfig> templateConfigs = templateConfigService.list(templateConfigWrapper);
- List<Map<String, Object>> classifyMaps = new ArrayList<>();
- for (TemplateConfig templateConfig : templateConfigs) {
- Map<String, Object> classifyMap = new HashMap<>();
- String value = templateConfig.getValueName();
- //根据value 查询专利
- List<EsCustomFieldValueDTO> esCustomFieldDTOS = customFieldService.getCustomFieldByValueName(value, projectId);
- if (esCustomFieldDTOS.size() != 0) {
- classifyMap.put("classify", templateConfig.getMapName());
- StringRequest stringRequest = new StringRequest();
- stringRequest.setCustomFields(esCustomFieldDTOS);
- stringRequest.setProjectId(projectId);
- stringRequest.setCurrent(1L);
- stringRequest.setSize(999L);
- List<PatentColumnDTO> patentColumnDTOS = new ArrayList<>();
- try {
- PatentDTO patentDTO = esService.esSearch(stringRequest);
- patentColumnDTOS = patentDTO.getPatents();
- } catch (Exception e) {
- return null;
- }
- //存放公告专利
- List<Map<String, Object>> announcePatents = new ArrayList<>();
- //存放公开专利
- List<Map<String, Object>> publicPatents = new ArrayList<>();
- //存放失效专利信息
- List<Map<String, Object>> lapsePatents = new ArrayList<>();
- for (PatentColumnDTO patent : patentColumnDTOS) {
- String applicants = "";
- String rightPerson = "";
- if (patent.getApplicant() != null && patent.getApplicant().size() != 0) {
- applicants = StringUtils.join(patent.getApplicant(), "\n");
- }
- if (patent.getRightHolder() != null && patent.getRightHolder().size() != 0) {
- rightPerson = StringUtils.join(patent.getRightHolder(), "\n");
- }
- String affairStrs = "";
- if (patent.getSimpleStatus() != null) {
- switch (patent.getSimpleStatus()) {
- case "3":
- patent.setSimpleStatus("3");
- affairStrs = "有效";
- break;
- case "1":
- patent.setSimpleStatus("1");
- affairStrs = "审中";
- break;
- case "2":
- patent.setSimpleStatus("2");
- affairStrs = "失效";
- break;
- }
- }
- //装载单个专利的信息
- Map<String, Object> patentMap = new HashMap<>();
- //同族专利
- try {
- //装载同族信息
- List<Map<String, Object>> familyMaps = esFamilyService.getPatentFamilyByNos(Arrays.asList(patent.getPatentNo()), "simple");
- if (familyMaps.size() <= 0) {
- familyMaps = esFamilyService.getPatentFamilyByNos(Arrays.asList(patent.getPatentNo()), "inpadoc");
- }
- if (familyMaps != null && familyMaps.size() > 0) {
- Map<String, Object> familyMap = familyMaps.get(0);
- if (familyMap.get("nos") != null) {
- List<String> nos = (List<String>) familyMap.get("nos");
- if (nos != null && nos.size() > 0) {
- String nosStr = StringUtils.join(nos, "\n");
- patentMap.put("simpleFamilys", nosStr);
- }
- }
- }
- } catch (Exception e) {
- }
- //引用专利
- try {
- Map<String, Object> map = esQuotePatentService.getEsQutePatentByNos(patent.getPatentNo());
- if (map.get("nos") != null) {
- List<String> nos = (List<String>) map.get("nos");
- if (nos != null && nos.size() > 0) {
- String nosStr = StringUtils.join(nos, "\n");
- patentMap.put("quotePatents", nosStr);
- }
- }
- } catch (Exception e) {
- }
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
- //申请日
- if (patent.getAppDate() != null) {
- patentMap.put("appDate", dateFormat.format(patent.getAppDate()));
- }
- //公开日
- if (patent.getPublicDate() != null || patent.getGrantDate() != null) {
- if (patent.getPublicDate() != null) {
- patentMap.put("publicDate", dateFormat.format(patent.getPublicDate()));
- } else if (patent.getGrantDate() != null) {
- patentMap.put("publicDate", dateFormat.format(patent.getGrantDate()));
- }
- }
- //专利号
- patentMap.put("publicNo", patent.getPatentNo());
- patentMap.put("firstPublicDate", patent.getPublicDate());
- patentMap.put("applicant", applicants);
- patentMap.put("rightPerson", rightPerson);
- patentMap.put("affair", affairStrs);
- if (patent.getTitle() != null && patent.getTitle().size() > 0) {
- patentMap.put("nameOut", patent.getTitle().get(0).getTextContent());
- }
- //优先权日
- // if (patent.getPriorities() != null && patent.getPriorities().size() != 0) {
- // List<String> dates = patent.getPriorities().stream().map(Priorities::getPriorityDate).collect(Collectors.toList());
- // String nosStr = StringUtils.join(dates, ";");
- // patentMap.put("priorityDate", nosStr);
- // }
- if (StringUtils.isNotEmpty(patent.getPriorityDate())) {
- String nosStr = patent.getPriorityDate().replace("<br>", ";");
- patentMap.put("priorityDate", nosStr);
- }
- //图示
- String guid = FormatUtil.getPictureFormat(patent.getAppNo());
- PictureRenderData pictureData = this.guidToStream(guid);
- if (pictureData != null) {
- patentMap.put("abstractPath", pictureData);
- }
- //获得专利对比记录的信息
- Map<String, Object> temMap = ftoCompareRecordService.LoadCompareMessageForExport(projectId, patent.getPatentNo());
- List<CompareMessageVO> compareMessageVOS = (List<CompareMessageVO>) temMap.get("compareMessageVOs");
- //装载对比记录的信息
- patentMap.put("cM", compareMessageVOS);
- patentMap.put("rightNum", temMap.get("rightNum"));
- patentMap.put("mainNum", temMap.get("mainRightNum"));
- if (patent.getSimpleStatus() == null) {
- patent.setSimpleStatus("1");
- }
- Integer status = Integer.parseInt(patent.getSimpleStatus());
- if (status == 1 || status == 5 || status == 6) {
- announcePatents.add(patentMap);
- } else if (status == 2) {
- lapsePatents.add(patentMap);
- } else if (status == 3) {
- publicPatents.add(patentMap);
- }
- classifyMap.put("publicPatents", publicPatents);
- classifyMap.put("lapsePatents", lapsePatents);
- classifyMap.put("announcePatents", announcePatents);
- }
- classifyMaps.add(classifyMap);
- }
- }
- Map<String, Object> map = new HashMap<>();
- 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], "", "reportName"));
- map.put("classifys", classifyMaps);
- // 为表格的显示绑定行循环
- LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
- HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
- // 将bz设置为行循环绑定的数据源的key,即key是bz的value会在模板中的{{bz}}处进行解析
- Configure configure = Configure.builder().bind("cM", policy).bind("targetDescription", htmlRenderPolicy).build();
- XWPFTemplate template = XWPFTemplate.compile(filePath, configure).render(map);
- return template;
- }
- private XWPFTemplate getstabilityTemplate(Integer projectId, String filePath) throws IOException {
- //装载标的专利信息
- LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(ReportProject::getProjectId, projectId);
- ReportProject report = reportProjectService.getOne(queryWrapper, false);
- String signPatentNo = report.getSignPatentNo();
- Map<String, Object> signPatent = this.signPantentMess(signPatentNo);
- PatentRightParams params = new PatentRightParams();
- List<RePatentClaim> patentRights = (List<RePatentClaim>) signPatent.get("claims");
- //获得特征
- List<Feature> allFeatures = new ArrayList<>();
- //获得拆分信息
- LambdaQueryWrapper<PatentSplitMessage> queryWrapper1 = new LambdaQueryWrapper<>();
- queryWrapper1.eq(PatentSplitMessage::getPatentNo, signPatentNo)
- .eq(PatentSplitMessage::getProjectId, report.getProjectId());
- List<PatentSplitMessage> patentSplitMessages = patentSplitMessageService.list(queryWrapper1);
- if (patentSplitMessages.size() > 0) {
- LambdaQueryWrapper<Feature> allFeaturesWrapper = new LambdaQueryWrapper<>();
- allFeaturesWrapper.eq(Feature::getSplitMessageId, patentSplitMessages.get(0).getId());
- allFeatures = featureService.list(allFeaturesWrapper);
- }
- //根据报告Id 查询出报告下所有的方案
- LambdaQueryWrapper<ProofGroup> proofGroupWrapper = new LambdaQueryWrapper<>();
- proofGroupWrapper.eq(ProofGroup::getProjectId, report.getProjectId());
- List<ProofGroup> compareScenarios = proofGroupService.list(proofGroupWrapper);
- List<Integer> scenarioIds = compareScenarios.stream().map(ProofGroup::getId).collect(Collectors.toList());
- //根据对比方案Id 查询所有对比方案和(对比记录-特征)关联信息
- List<AssoGroupReason> scenariosRecords = new ArrayList<>();
- if (scenarioIds != null && scenarioIds.size() != 0) {
- LambdaQueryWrapper<AssoGroupReason> queryRecordsByIDs = new LambdaQueryWrapper<>();
- queryRecordsByIDs.in(AssoGroupReason::getGroupId, scenarioIds);
- scenariosRecords = assoGroupReasonService.list(queryRecordsByIDs);
- }
- //获得对比记录id
- List<Integer> reasonIds = scenariosRecords.stream().map(AssoGroupReason::getReasonId).collect(Collectors.toList());
- //获得特征id
- List<Integer> featureIds = scenariosRecords.stream().map(AssoGroupReason::getFeatureId).collect(Collectors.toList());
- //查询对比记录
- List<EvidenceReason> evidenceReasons = new ArrayList<>();
- if (reasonIds != null && reasonIds.size() > 0) {
- LambdaQueryWrapper<EvidenceReason> evidenceReasonLambdaQueryWrapper = new LambdaQueryWrapper<>();
- evidenceReasonLambdaQueryWrapper.in(EvidenceReason::getId, reasonIds);
- evidenceReasons = evidenceReasonService.list(evidenceReasonLambdaQueryWrapper);
- }
- //查询特征
- List<Feature> features = new ArrayList<>();
- if (featureIds != null && featureIds.size() > 0) {
- LambdaQueryWrapper<Feature> featureLambdaQueryWrapper = new LambdaQueryWrapper<>();
- featureLambdaQueryWrapper.in(Feature::getId, featureIds);
- features = featureService.list(featureLambdaQueryWrapper);
- }
- //根据对比记录id获得对比文献
- List<String> patentNos = new ArrayList<>();
- List<AssoReasonLiterature> assoReasonLiteratures = new ArrayList<>();
- List<CompareLiteratureVO> compareLiteratures = new ArrayList<>();
- if (reasonIds.size() > 0) {
- LambdaQueryWrapper<AssoReasonLiterature> literatureLambdaQueryWrapper = new LambdaQueryWrapper<>();
- literatureLambdaQueryWrapper.in(AssoReasonLiterature::getReasonId, reasonIds);
- assoReasonLiteratures = assoReasonLiteratureService.list(literatureLambdaQueryWrapper);
- if (assoReasonLiteratures.size() > 0) {
- List<Integer> literatureIds = assoReasonLiteratures.stream().map(AssoReasonLiterature::getLiteratureId).collect(Collectors.toList());
- if (literatureIds.size() > 0) {
- compareLiteratures = compareLiteratureService.getByIds(literatureIds);
- if (compareLiteratures.size() > 0) {
- patentNos = compareLiteratures.stream().map(CompareLiteratureVO::getLiteratureNo).collect(Collectors.toList());
- }
- }
- }
- }
- //专利号别名的map
- Map<String, Object> OtherName = new HashMap<>();
- int flag = 1;
- for (CompareLiteratureVO item : compareLiteratures) {
- Integer order = item.getSysOrder() == null ? flag : item.getSysOrder();
- OtherName.put(item.getLiteratureNo(), order);
- flag++;
- }
- //根据专利号查询专利详细信息
- List<Patent> patentDTOS = new ArrayList<>();
- try {
- if (patentNos != null && patentNos.size() > 0) {
- patentDTOS = esPatentService.getPatentsByNo(patentNos, true, null, null);
- }
- } catch (Exception e) {
- }
- //存放专利信息的map集合
- List<Map<String, Object>> patentListMaps = new ArrayList<>();
- //填充专利数据到patentListMap
- for (int i = 0; i < patentDTOS.size(); i++) {
- Patent item = patentDTOS.get(i);
- Map<String, Object> patentListMap = new HashMap<>();
- List<PatentPerson> applicantJSONs = item.getApplicant();
- StringBuilder applicants = new StringBuilder();
- applicantJSONs.forEach(tem -> {
- applicants.append(tem.getName() + "\r");
- });
- CompareLiteratureVO compareLiteratureVO = compareLiteratures.stream().filter(t -> t.getLiteratureNo().equals(item.getPatentNo())).findFirst().orElse(null);
- List<AssoReasonLiterature> assoReasonLiteratures1 = new ArrayList<>();
- if (compareLiteratureVO != null) {
- assoReasonLiteratures1 = assoReasonLiteratures.stream().filter(t -> t.getLiteratureId().equals(compareLiteratureVO.getId())).collect(Collectors.toList());
- }
- //填充相关揭露(对比记录文字和特征组合)
- StringBuffer disclosures = new StringBuffer("");
- //根据专利号获得对比记录
- //遍历对比记录根据对比记录获得对比记录-特征关联信息并获得特征ID
- for (AssoReasonLiterature tem : assoReasonLiteratures1) {
- EvidenceReason evidenceReason = evidenceReasons.stream().filter(t -> t.getId().equals(tem.getReasonId())).findFirst().orElse(null);
- if (evidenceReason != null) {
- disclosures.append(evidenceReason.getEvidenceText());
- }
- //填充对比记录文字
- disclosures.append("\r");
- disclosures.append("(");
- disclosures.append(tem.getFieldName());
- disclosures.append("[" + (tem.getPosition()) + "]");
- disclosures.append(")");
- List<Integer> featuresIds = scenariosRecords.stream().filter(te -> te.getReasonId().equals(tem.getReasonId())).map(AssoGroupReason::getFeatureId).collect(Collectors.toList());
- //根据特征Id获得特征内容
- List<String> feaListContent = features.stream().filter(te -> featuresIds.contains(te.getId())).map(Feature::getContent).collect(Collectors.toList());
- feaListContent.forEach(te -> disclosures.append("(" + te + ")"));
- disclosures.append("\n");
- }
- int order = Integer.parseInt(OtherName.get(item.getPatentNo()).toString());
- if (item.getTitle() != null && item.getTitle().size() > 0) {
- patentListMap.put("name", item.getTitle().get(0).getTextContent());
- }
- patentListMap.put("fileName", "D" + order);
- patentListMap.put("publicDate", item.getPublicDate());
- patentListMap.put("publicNo", item.getPublicNo());
- patentListMap.put("SSIM", "");
- patentListMap.put("applicant", applicants);
- patentListMap.put("patentNo", item.getPatentNo());
- if (item.getAbstractStr() != null && item.getAbstractStr().size() > 0) {
- patentListMap.put("abstractStr", item.getAbstractStr().get(0).getTextContent());
- }
- patentListMap.put("compareFileName", "对比文件" + (order));
- patentListMap.put("applicationDate", item.getAppDate());
- //图示
- String guid = FormatUtil.getPictureFormat(item.getAppNo());
- PictureRenderData pictureData = this.guidToStream(guid);
- if (pictureData != null) {
- patentListMap.put("abstractPath", pictureData);
- }
- patentListMap.put("disclosures", disclosures);
- patentListMap.put("order", order);
- patentListMaps.add(patentListMap);
- }
- //存放对比方案信息的map集合
- List<Map<String, Object>> scenariosMaps = new ArrayList<>();
- //存放所有对比方案所有不重复的rightId
- for (int i = 0; i < compareScenarios.size(); i++) {
- ProofGroup item1 = compareScenarios.get(i);
- //获得单个对比方案的
- List<AssoGroupReason> partScenariosRecords = scenariosRecords.stream().filter(item -> item.getGroupId().equals(item1.getId())).collect(Collectors.toList());
- //获得单条权要所有的特征
- List<Feature> allRightFeatures = features.stream().filter(item -> item.getRightSort().equals(item1.getClaimSort())).collect(Collectors.toList());
- //存放单条对比结果的map
- Map<String, Object> temMap = new HashMap<>();
- String a = allRightFeatures.get(0).getRightSort() + "";
- if (allRightFeatures.size() != 0 && allRightFeatures.get(0).getRightType().equals(1)) {
- temMap.put("rightName", "独立权要" + a);
- } else {
- temMap.put("rightName", "附属权要" + a);
- }
- temMap.put("rightId", item1.getClaimSort());
- if (report.getReportType() == 1) {
- String rightContent = patentRights.stream().filter(t -> t.getSort().equals(item1.getClaimSort())).map(RePatentClaim::getContent).findFirst().orElse("");
- temMap.put("rightContent", rightContent);
- }
- temMap.put("remark", item1.getDescription());
- //存放对比方案每一个特征记录
- List<Map<String, Object>> maps = new ArrayList<>();
- for (Feature tem : allRightFeatures) {
- List<AssoGroupReason> assoGroupReasons = partScenariosRecords.stream().filter(item -> item.getFeatureId().equals(tem.getId())).collect(Collectors.toList());
- if (assoGroupReasons.size() > 0) {
- for (AssoGroupReason res : assoGroupReasons) {
- Map<String, Object> map = new LinkedHashMap<>();
- map.put("featureContent", tem.getContent());
- if (res.getReasonId().equals(0)) {
- map.put("compareResult", "公识");
- map.put("compareContent", "");
- maps.add(map);
- } else {
- EvidenceReason evidenceReason = evidenceReasons.stream().filter(t -> t.getId().equals(res.getReasonId())).findFirst().orElse(null);
- String content = evidenceReason.getEvidenceText() != null ? evidenceReason.getEvidenceText() : "";
- AssoReasonLiterature assoReasonLiterature = assoReasonLiteratures.stream().filter(t -> t.getReasonId().equals(res.getReasonId())).findFirst().orElse(null);
- String patentNo = "";
- if (assoReasonLiterature != null) {
- CompareLiteratureVO compareLiterature = compareLiteratures.stream().filter(t -> t.getId().equals(assoReasonLiterature.getLiteratureId())).findFirst().orElse(null);
- if (compareLiterature != null) {
- patentNo = compareLiterature.getLiteratureNo() != null ? compareLiterature.getLiteratureNo() : "";
- }
- if (OtherName.containsKey(patentNo)) {
- patentNo = "D" + OtherName.get(patentNo).toString() + ":";
- } else if (!patentNo.equals("")) {
- patentNo += ":";
- }
- }
- String paresingProcess = evidenceReason.getEvidenceText() != null ? "(" + evidenceReason.getEvidenceText() + ")" : "";
- String compareContent = patentNo + content + paresingProcess;
- //获取对比专利号
- if (maps.size() > 0) {
- Map<String, Object> lastMap = maps.get(maps.size() - 1);
- if (lastMap.get("compareContent").toString().equals(compareContent)) {
- lastMap.put("featureContent", lastMap.get("featureContent") + tem.getContent());
- } else {
- map.put("compareResult", res.getConclusion() != null ? res.getConclusion() : "不公开");
- map.put("compareContent", compareContent);
- PictureRenderData pictureData = this.guidToStream(evidenceReason.getFileGuid());
- if (pictureData != null) {
- map.put("figure", pictureData);
- }
- if (assoReasonLiterature.getFieldName() == null && assoReasonLiterature.getPosition() == null) {
- map.put("position", "");
- } else {
- map.put("position", "\r" + "(" + assoReasonLiterature.getFieldName() + "[" + assoReasonLiterature.getPosition() + "]" + ")");
- }
- maps.add(map);
- }
- } else {
- map.put("compareResult", res.getConclusion() != null ? res.getConclusion() : "不公开");
- map.put("compareContent", compareContent);
- PictureRenderData pictureData = this.guidToStream(evidenceReason.getFileGuid());
- if (pictureData != null) {
- map.put("figure", pictureData);
- }
- if (assoReasonLiterature.getFieldName() == null && assoReasonLiterature.getPosition() == null) {
- map.put("position", "");
- } else {
- map.put("position", "\r" + "(" + assoReasonLiterature.getFieldName() + "[" + assoReasonLiterature.getPosition() + "]" + ")");
- }
- maps.add(map);
- }
- }
- }
- } else {
- Map<String, Object> map = new LinkedHashMap<>();
- map.put("featureContent", tem.getContent());
- map.put("compareResult", "未公开");
- map.put("compareContent", "");
- maps.add(map);
- }
- }
- //方案内容
- temMap.put("fileDetails", maps);
- //新颖性模块
- //获得本方案所有的专利号
- List<String> patentNOs = new ArrayList<>();
- List<CompareLiteratureVO> partCompareLiterature = new ArrayList<>();
- List<Integer> partReasonIds = partScenariosRecords.stream().map(AssoGroupReason::getReasonId).collect(Collectors.toList());
- if (partReasonIds.size() != 0) {
- List<Integer> partLiteratureIds = assoReasonLiteratures.stream().filter(t -> partReasonIds.contains(t.getReasonId())).map(AssoReasonLiterature::getLiteratureId).collect(Collectors.toList());
- if (partLiteratureIds.size() != 0) {
- partCompareLiterature = compareLiteratures.stream().filter(t -> partLiteratureIds.contains(t.getId())).collect(Collectors.toList());
- }
- }
- //比较所有专利号和权要所有权要的大小,如果相等则将该专利加入到新颖性列表中
- List<String> noveltyFiles = new ArrayList<>();
- for (CompareLiteratureVO item : partCompareLiterature) {
- //根据id查询对比理由
- List<Integer> temReasonIds = assoReasonLiteratures.stream().filter(t -> t.getLiteratureId().equals(item.getId())).map(AssoReasonLiterature::getReasonId).collect(Collectors.toList());
- List<Integer> temFeatureIds = partScenariosRecords.stream().filter(t -> temReasonIds.contains(t.getReasonId())).map(AssoGroupReason::getFeatureId).distinct().collect(Collectors.toList());
- String tmName = item.getLiteratureNo();
- if (OtherName.containsKey(item)) {
- tmName = "D" + OtherName.get(item).toString();
- }
- if (temFeatureIds.size() == allRightFeatures.size()) {
- noveltyFiles.add(tmName);
- }
- }
- //创造性列表
- List<String> creativeFiles = new ArrayList<>();
- //当前方案所有的特征Id
- partCompareLiterature.forEach(
- item -> {
- String tmName = item.getLiteratureNo();
- if (OtherName.containsKey(tmName)) {
- tmName = "D" + OtherName.get(tmName).toString();
- }
- if (!creativeFiles.contains(tmName)) {
- creativeFiles.add(tmName);
- }
- }
- );
- List<AssoGroupReason> andRecords = partScenariosRecords.stream().filter(tm -> tm.getReasonId().equals(0)).collect(Collectors.toList());
- if (andRecords.size() != 0) {
- creativeFiles.add("C");
- }
- String creative = creativeFiles.size() == 0 ? "" : StringUtils.join(creativeFiles, "+");
- String novelty = noveltyFiles.size() == 0 ? "" : StringUtils.join(noveltyFiles, "-");
- //新颖性
- temMap.put("novelty", novelty);
- //创造性
- temMap.put("creative", creative);
- scenariosMaps.add(temMap);
- }
- List<Map<String, Object>> allRightScenarios = new ArrayList<>();
- List<Map<String, Object>> resultMaps = new ArrayList<>();
- // 存放创造性和新颖性的权要
- patentRights.forEach(tem -> {
- Map<String, Object> map = new HashMap<>();
- Map<String, Object> resultMap = new HashMap<>();
- List<Map<String, Object>> rightScenarios = new ArrayList<>();
- //存放新颖性信息
- List<String> noveList = new ArrayList<>();
- List<String> creaList = new ArrayList<>();
- //存放创造性信息
- for (int t = 0; t < scenariosMaps.size(); t++) {
- Map<String, Object> item = scenariosMaps.get(t);
- if (item.get("rightId").equals(tem.getSort())) {
- item.put("scenariosName", "对比组合" + (t + 1));
- rightScenarios.add(item);
- if (item.get("novelty").toString() != "") {
- if (!noveList.contains(item.get("novelty").toString())) {
- noveList.add(item.get("novelty").toString());
- }
- }
- if (item.get("creative").toString() != "") {
- if (!creaList.contains(item.get("creative").toString())) {
- creaList.add(item.get("creative").toString());
- }
- }
- }
- }
- map.put("rightScenrios", rightScenarios);
- map.put("rightName", tem.getRightName());
- String creative = creaList.size() == 0 ? "" : StringUtils.join(creaList, "、");
- String novelty = noveList.size() == 0 ? "" : StringUtils.join(noveList, "-");
- resultMap.put("rightName", tem.getRightName());
- resultMap.put("rightNovelty", novelty);
- resultMap.put("rightCreative", creative);
- allRightScenarios.add(map);
- resultMaps.add(resultMap);
- });
- //1.系统数据
- //存放单条对比结果的map
- Map<String, Object> map = new HashMap<>();
- 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], "", "reportName"));
- if (patentListMaps.size() > 1) {
- patentListMaps = this.sortMap(patentListMaps);
- }
- map.put("patentList", patentListMaps);
- map.put("combinations", allRightScenarios);
- map.put("allResults", resultMaps);
- map.put("signPatent", signPatent);
- map.put("pantentNo", report.getSignPatentNo());
- map.put("rights", signPatent.get("rights"));
- // 为表格的显示绑定行循环
- LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
- HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
- // 将bz设置为行循环绑定的数据源的key,即key是bz的value会在模板中的{{bz}}处进行解析
- Configure configure = Configure.builder()
- .bind("patentList", policy)
- .bind("fileDetails", policy)
- .bind("allResults", policy)
- .bind("signPatent.rights", policy)
- .bind("remark", htmlRenderPolicy)
- .build();
- // 读取模板、数据并渲染
- XWPFTemplate template = XWPFTemplate.compile(filePath, configure).render(map);
- return template;
- }
- //
- public Map<String, Object> signPantentMess(String patentNo) throws IOException {
- Patent patent = new Patent();
- try {
- List<Patent> patentList = esPatentService.getPatentsByNo(Arrays.asList(patentNo), true, null, null);
- if (patentList.size() > 0) {
- patent = patentList.get(0);
- }
- } catch (Exception e) {
- throw new IOException();
- }
- //装载单个专利的信息
- Map<String, Object> patentMap = new HashMap<>();
- StringBuilder applicants = new StringBuilder();
- StringBuilder rightPerson = new StringBuilder();
- if (patent.getApplicant() != null && patent.getApplicant().size() > 0) {
- patent.getApplicant().forEach(item -> {
- applicants.append(item.getName() + "\r");
- });
- }
- if (patent.getRightHolder() != null && patent.getRightHolder().size() > 0) {
- patent.getRightHolder().forEach(item -> {
- rightPerson.append(item.getName() + "\r");
- });
- }
- //申请日
- patentMap.put("applicationDate", patent.getAppDate());
- //公开日
- patentMap.put("publicDate", patent.getPublicDate());
- //公开号
- patentMap.put("publicNo", patent.getPublicNo());
- //专利号
- patentMap.put("patentNo", patent.getPatentNo());
- //专利权人
- patentMap.put("rightPerson", rightPerson);
- //图示
- String guid = FormatUtil.getPictureFormat(patent.getAppNo());
- PictureRenderData pictureData = this.guidToStream(guid);
- if (pictureData != null) {
- patentMap.put("abstractPath", pictureData);
- }
- if (patent.getTitle() != null && patent.getTitle().size() > 0) {
- patentMap.put("name", patent.getTitle().get(0).getTextContent());
- }
- //查询专利权要
- List<Text> patentRights = patent.getClaim();
- String patentRight = null;
- if (patentRights != null && patentRights.size() > 0) {
- patentRight = patentRights.get(0).getTextContent();
- }
- PatentRightParams params = new PatentRightParams();
- params.setContent(patentRight);
- params.setPatentNo(patentNo);
- List<RePatentClaim> claims = PatentRightUtils.formatPatentRight(params);
- List<Map<String, Object>> rights = new ArrayList<>();
- claims.forEach(item -> {
- Map<String, Object> temMap = new HashMap<>();
- temMap.put("rightName", "权" + (item.getSort() + 1));
- temMap.put("content", item.getContent());
- temMap.put("rightNameLong", "权利要求" + (item.getSort() + 1));
- temMap.put("parentSort", item.getParentSort());
- temMap.put("sort", item.getSort());
- rights.add(temMap);
- });
- patentMap.put("rights", rights);
- patentMap.put("claims", claims);
- return patentMap;
- }
- public List<Map<String, Object>> sortMap(List<Map<String, Object>> maps) {
- for (int i = 0; i < maps.size() - 1; i++) {
- for (int j = 0; j < maps.size() - i - 1; j++) {
- Integer order1 = Integer.parseInt(maps.get(j).get("order").toString());
- Integer order2 = Integer.parseInt(maps.get(j + 1).get("order").toString());
- if (order1 > order2) {
- Map<String, Object> temp = maps.get(j);
- maps.set(j, maps.get(j + 1));
- maps.set(j + 1, temp);
- }
- }
- }
- return maps;
- }
- private XWPFTemplate getThirdTemplate(Integer projectId, String filePath) throws IOException {
- //装载标的专利信息
- LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(ReportProject::getProjectId, projectId);
- ReportProject report = reportProjectService.getOne(queryWrapper, false);
- String signPatentNo = report.getSignPatentNo();
- Map<String, Object> signPatent = this.signPantentMess(signPatentNo);
- List<Map<String, Object>> rights = (List<Map<String, Object>>) signPatent.get("rights");
- List<Feature> allFeatures = new ArrayList<>();
- LambdaQueryWrapper<PatentSplitMessage> queryWrapper1 = new LambdaQueryWrapper<>();
- queryWrapper1.eq(PatentSplitMessage::getPatentNo, signPatentNo)
- .eq(PatentSplitMessage::getProjectId, report.getProjectId());
- List<PatentSplitMessage> patentSplitMessages = patentSplitMessageService.list(queryWrapper1);
- if (patentSplitMessages.size() > 0) {
- LambdaQueryWrapper<Feature> allFeaturesWrapper = new LambdaQueryWrapper<>();
- allFeaturesWrapper.eq(Feature::getSplitMessageId, patentSplitMessages.get(0).getId());
- allFeatures = featureService.list(allFeaturesWrapper);
- }
- //根据报告Id 查询出报告下所有的方案
- LambdaQueryWrapper<ProofGroup> proofGroupWrapper = new LambdaQueryWrapper<>();
- proofGroupWrapper.eq(ProofGroup::getProjectId, report.getProjectId());
- List<ProofGroup> compareScenarios = proofGroupService.list(proofGroupWrapper);
- List<Integer> scenarioIds = compareScenarios.stream().map(ProofGroup::getId).collect(Collectors.toList());
- //根据对比方案Id 查询所有对比方案和(对比记录-特征)关联信息
- List<AssoGroupReason> scenariosRecords = new ArrayList<>();
- if (scenarioIds != null && scenarioIds.size() != 0) {
- LambdaQueryWrapper<AssoGroupReason> queryRecordsByIDs = new LambdaQueryWrapper<>();
- queryRecordsByIDs.in(AssoGroupReason::getGroupId, scenarioIds);
- scenariosRecords = assoGroupReasonService.list(queryRecordsByIDs);
- }
- //获得对比记录id
- List<Integer> reasonIds = scenariosRecords.stream().map(AssoGroupReason::getReasonId).collect(Collectors.toList());
- //获得特征id
- List<Integer> featureIds = scenariosRecords.stream().map(AssoGroupReason::getFeatureId).collect(Collectors.toList());
- //查询对比记录
- List<EvidenceReason> evidenceReasons = new ArrayList<>();
- if (reasonIds != null && reasonIds.size() > 0) {
- LambdaQueryWrapper<EvidenceReason> evidenceReasonLambdaQueryWrapper = new LambdaQueryWrapper<>();
- evidenceReasonLambdaQueryWrapper.in(EvidenceReason::getId, reasonIds);
- evidenceReasons = evidenceReasonService.list(evidenceReasonLambdaQueryWrapper);
- }
- //查询特征
- List<Feature> features = new ArrayList<>();
- if (featureIds != null && featureIds.size() > 0) {
- LambdaQueryWrapper<Feature> featureLambdaQueryWrapper = new LambdaQueryWrapper<>();
- featureLambdaQueryWrapper.in(Feature::getId, featureIds);
- features = featureService.list(featureLambdaQueryWrapper);
- }
- //根据对比记录id获得对比文献
- List<String> patentNos = new ArrayList<>();
- List<AssoReasonLiterature> assoReasonLiteratures = new ArrayList<>();
- List<CompareLiteratureVO> compareLiteratures = new ArrayList<>();
- if (reasonIds.size() > 0) {
- LambdaQueryWrapper<AssoReasonLiterature> literatureLambdaQueryWrapper = new LambdaQueryWrapper<>();
- literatureLambdaQueryWrapper.in(AssoReasonLiterature::getReasonId, reasonIds);
- assoReasonLiteratures = assoReasonLiteratureService.list(literatureLambdaQueryWrapper);
- if (assoReasonLiteratures.size() > 0) {
- List<Integer> literatureIds = assoReasonLiteratures.stream().map(AssoReasonLiterature::getLiteratureId).collect(Collectors.toList());
- if (literatureIds.size() > 0) {
- compareLiteratures = compareLiteratureService.getByIds(literatureIds);
- if (compareLiteratures.size() > 0) {
- patentNos = compareLiteratures.stream().map(CompareLiteratureVO::getLiteratureNo).collect(Collectors.toList());
- }
- }
- }
- }
- //专利号别名的map
- Map<String, Object> OtherName = new HashMap<>();
- int flag = 1;
- for (CompareLiteratureVO item : compareLiteratures) {
- Integer order = item.getSysOrder() == null ? flag : item.getSysOrder();
- OtherName.put(item.getLiteratureNo(), order);
- flag++;
- }
- //根据专利号查询专利详细信息
- List<Patent> patentDTOS = new ArrayList<>();
- try {
- if (patentNos != null && patentNos.size() > 0) {
- patentDTOS = esPatentService.getPatentsByNo(patentNos, true, null, null);
- }
- } catch (Exception e) {
- }
- //存放专利信息的map集合
- List<Map<String, Object>> patentListMaps = new ArrayList<>();
- //填充专利数据到patentListMap
- for (int i = 0; i < patentDTOS.size(); i++) {
- Patent item = patentDTOS.get(i);
- Map<String, Object> patentListMap = new HashMap<>();
- List<PatentPerson> applicantJSONs = item.getApplicant();
- StringBuilder applicants = new StringBuilder();
- if(applicantJSONs!=null) {
- applicantJSONs.forEach(tem -> {
- applicants.append(tem.getName() + "\r");
- });
- }
- CompareLiteratureVO compareLiteratureVO = compareLiteratures.stream().filter(t -> t.getLiteratureNo().equals(item.getPatentNo())).findFirst().orElse(null);
- List<AssoReasonLiterature> assoReasonLiteratures1 = new ArrayList<>();
- if (compareLiteratureVO != null) {
- assoReasonLiteratures1 = assoReasonLiteratures.stream().filter(t -> t.getLiteratureId().equals(compareLiteratureVO.getId())).collect(Collectors.toList());
- }
- //填充相关揭露(对比记录文字和特征组合)
- StringBuffer disclosures = new StringBuffer("");
- //根据专利号获得对比记录
- //遍历对比记录根据对比记录获得对比记录-特征关联信息并获得特征ID
- for (AssoReasonLiterature tem : assoReasonLiteratures1) {
- EvidenceReason evidenceReason = evidenceReasons.stream().filter(t -> t.getId().equals(tem.getReasonId())).findFirst().orElse(null);
- if (evidenceReason != null) {
- disclosures.append(evidenceReason.getEvidenceText());
- }
- //填充对比记录文字
- disclosures.append("\r");
- disclosures.append("(");
- disclosures.append(tem.getFieldName());
- disclosures.append("[" + (tem.getPosition()) + "]");
- disclosures.append(")");
- List<Integer> featuresIds = scenariosRecords.stream().filter(te -> te.getReasonId().equals(tem.getReasonId())).map(AssoGroupReason::getFeatureId).collect(Collectors.toList());
- //根据特征Id获得特征内容
- List<String> feaListContent = features.stream().filter(te -> featuresIds.contains(te.getId())).map(Feature::getContent).collect(Collectors.toList());
- feaListContent.forEach(te -> disclosures.append("(" + te + ")"));
- disclosures.append("\n");
- }
- int order = Integer.parseInt(OtherName.get(item.getPatentNo()).toString());
- patentListMap.put("name", item.getTitle());
- patentListMap.put("fileName", "D" + order);
- patentListMap.put("publicDate", item.getPublicDate());
- patentListMap.put("publicNo", item.getPublicNo());
- patentListMap.put("SSIM", "");
- patentListMap.put("applicant", applicants);
- patentListMap.put("patentNo", item.getPatentNo());
- if (item.getAbstractStr() != null && item.getAbstractStr().size() > 0) {
- patentListMap.put("abstractStr", item.getAbstractStr().get(0).getTextContent());
- }
- patentListMap.put("compareFileName", "对比文件" + (order));
- patentListMap.put("applicationDate", item.getAppDate());
- //图示
- String guid = FormatUtil.getPictureFormat(item.getAppNo());
- PictureRenderData pictureData = this.guidToStream(guid);
- if (pictureData != null) {
- patentListMap.put("abstractPath", pictureData);
- }
- patentListMap.put("disclosures", disclosures);
- patentListMap.put("order", order);
- patentListMaps.add(patentListMap);
- }
- List<Map<String, Object>> rightMaps = new ArrayList<>();
- List<Integer> noveltyIds = new ArrayList<Integer>();
- List<Integer> creativeIds = new ArrayList<Integer>();
- for (Map<String, Object> right : rights) {
- String text = "";
- if (right.get("parentSort") != null && !right.get("parentSort").equals("-1")) {
- String parentSort = "";
- List<String> sorts = new ArrayList<>(Arrays.asList(right.get("parentSort").toString().split(",")));
- List<Integer> sortIds = new ArrayList<>();
- sorts.forEach(item -> {
- sortIds.add(Integer.parseInt(item) + 1);
- });
- parentSort = StringUtils.join(sortIds, "、");
- text = right.get("rightNameLong") + "为引用权" + parentSort + "的从属权利要求,";
- }
- for (int i = 0; i < compareScenarios.size(); i++) {
- ProofGroup item1 = compareScenarios.get(i);
- //判断是该权要的方案
- if (right.get("sort").equals(item1.getClaimSort())) {
- //根据方案id获得特征和记录关联表的id
- List<Integer> recordIds = scenariosRecords.stream().filter(item -> item.getGroupId().equals(item1.getId())).map(AssoGroupReason::getReasonId).collect(Collectors.toList());
- //获得记录
- List<EvidenceReason> compareRecords1 = new ArrayList<>();
- if (recordIds != null && recordIds.size() != 0) {
- compareRecords1 = evidenceReasons.stream().filter(item -> recordIds.contains(item.getId())).collect(Collectors.toList());
- }
- //判断方案是否具有创造性或者新颖性字眼
- if (item1.getDescription() != null && (item1.getDescription().contains("创造性") || item1.getDescription().contains("新颖性"))) {
- //装载对比记录
- List<Map<String, Object>> maps = new ArrayList<>();
- for (EvidenceReason record : compareRecords1) {
- Map<String, Object> map = new HashMap<>();
- PictureRenderData pictureData = this.guidToStream(record.getFileGuid());
- map.put("figure", pictureData);
- AssoReasonLiterature assoReasonLiterature = assoReasonLiteratures.stream().filter(t -> t.getReasonId().equals(record.getId())).findFirst().orElse(null);
- String patentNo = "";
- if (assoReasonLiterature != null) {
- if (assoReasonLiterature.getFieldName() == null && assoReasonLiterature.getPosition() == null) {
- map.put("position", "");
- } else {
- map.put("position", "\r" + "(" + assoReasonLiterature.getFieldName() + "[" + assoReasonLiterature.getPosition() + "]" + ")");
- }
- CompareLiteratureVO compareLiterature = compareLiteratures.stream().filter(t -> t.getId().equals(assoReasonLiterature.getLiteratureId())).findFirst().orElse(null);
- patentNo = compareLiterature.getLiteratureNo() != null ? compareLiterature.getLiteratureNo() : "";
- if (OtherName.containsKey(patentNo)) {
- patentNo = "D" + OtherName.get(patentNo).toString() + ":";
- } else if (!patentNo.equals("")) {
- patentNo += ":";
- }
- }
- String compareContent = "";
- //获取对比内容
- String content = record.getEvidenceText() != null ? record.getEvidenceText() : "";
- //获得对比专利号
- //获得解析过程
- String paresingProcess = record.getDescription() != null ? "(" + record.getDescription() + ")" : "";
- compareContent = patentNo + content + paresingProcess;
- map.put("compareContent", compareContent);
- maps.add(map);
- }
- if (item1.getDescription().contains("创造性")) {
- creativeIds.add(Integer.parseInt(right.get("sort").toString()) + 1);
- right.put("records", maps);
- right.put("text", "第3款的创造性的规定。\n" + text + right.get("rightNameLong") + "的附加技术特征为:");
- rightMaps.add(right);
- } else if (item1.getDescription().contains("新颖性")) {
- noveltyIds.add(Integer.parseInt(right.get("sort").toString()) + 1);
- right.put("text", "第2款的新颖性的规定。\n" + text + right.get("rightNameLong") + "保护的主体,具体:");
- right.put("records", compareRecords1);
- rightMaps.add(right);
- }
- }
- }
- }
- }
- String noveltyIdStr = StringUtils.join(noveltyIds, ",");
- String creativeIdStr = StringUtils.join(creativeIds, ",");
- Map<String, Object> map = new HashMap<>();
- 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], "", "reportName"));
- map.put("signPatent", signPatent);
- map.put("pantentNo", report.getSignPatentNo());
- map.put("rights", rightMaps);
- map.put("noveltyIdStr", noveltyIdStr);
- map.put("creativeIdStr", creativeIdStr);
- map.put("patentList", patentListMaps);
- // 为表格的显示绑定行循环
- LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
- HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
- // 将bz设置为行循环绑定的数据源的key,即key是bz的value会在模板中的{{bz}}处进行解析
- Configure configure = Configure.builder()
- .bind("patentList", policy)
- .bind("fileDetails", policy)
- .bind("allResults", policy)
- .bind("signPatent.rights", policy)
- .bind("remark", htmlRenderPolicy)
- .build();
- // 读取模板、数据并渲染
- XWPFTemplate template = XWPFTemplate.compile(filePath, configure).render(map);
- return template;
- }
- }
|