lwhhszx 2 سال پیش
والد
کامیت
52d8367a09

+ 1 - 1
RMS/src/main/java/cn/cslg/report/controller/CompareFilesController.java

@@ -37,7 +37,7 @@ public class CompareFilesController {
     @PostMapping("/index/setting")
     @Operation(summary = "获取专利标引情况")
     public String getPatentIndexSetting(@RequestBody PatentIndexSettingVO params) throws IOException {
-         compareFilesService.getPatentIndexSetting(params);
+            compareFilesService.getPatentIndexSetting(params);
        return Response.success();
     }
     @PostMapping("/index/setting/update")

+ 1 - 1
RMS/src/main/java/cn/cslg/report/controller/TaskController.java

@@ -109,7 +109,7 @@ public class TaskController {
 
     @RequestMapping(value = "/reImportTask", method = RequestMethod.POST)
     @Operation(summary = "根据报告Id和状态返回导入任务列表")
-    public String reImportTask(@RequestBody ImportTask importTask) {
+    public String reImportTask(@RequestBody ImportTask importTask) throws IOException {
         return importTaskService.reImportTask(importTask);
     }
 

+ 3 - 0
RMS/src/main/java/cn/cslg/report/entity/ImportTask.java

@@ -9,6 +9,7 @@ import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * 导入任务表
@@ -88,4 +89,6 @@ public class ImportTask extends BaseEntity<ImportTask> {
 
     @TableField(value = "TYPE")
     private Integer importType;
+    @TableField(exist = false)
+    private List<Integer> createIds;
 }

+ 1 - 0
RMS/src/main/java/cn/cslg/report/service/business/CompareFilesService.java

@@ -443,6 +443,7 @@ public class CompareFilesService extends ServiceImpl<CompareFilesMapper, Compare
             Task task = taskService.getById(params.getTaskID());
             params.setReportId(task.getReportId());
             reportFieldPatentLinkService.updatePatentIndexSetting(params);
+            //更新对比文件状态
             LambdaQueryWrapper<AssoTaskPersonel> queryWrapper = new LambdaQueryWrapper<>();
             queryWrapper.eq(AssoTaskPersonel::getTaskId, params.getTaskID())
                     .eq(AssoTaskPersonel::getPatentNo, params.getPatentNo());

+ 15 - 2
RMS/src/main/java/cn/cslg/report/service/business/ImportTaskService.java

@@ -5,6 +5,8 @@ import cn.cslg.report.entity.ImportTask;
 
 import cn.cslg.report.mapper.ImportTaskMapper;
 
+import cn.cslg.report.service.OutInterfaceService;
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -15,7 +17,9 @@ import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -35,12 +39,21 @@ public class ImportTaskService extends ServiceImpl<ImportTaskMapper, ImportTask>
      * @return importTask(导入任务)
      */
     private final ImportTaskMapper mapper;
-
-    public String reImportTask(ImportTask importTask) {
+    private final OutInterfaceService outInterfaceService;
+    public String reImportTask(ImportTask importTask) throws IOException {
         LambdaQueryWrapper<ImportTask> queryWrapper = new LambdaQueryWrapper<>();
         if (importTask.getReportId() != null) {
             queryWrapper.eq(ImportTask::getReportId, importTask.getReportId());
         }
+        if (importTask.getCreateUserName() != null && importTask.getCreateUserName() != "") {
+            String res = outInterfaceService.getPersonIdByNamePCS(importTask.getCreateUserName());
+            List<Integer> createIds = JSONArray.parseArray(res, Integer.class);
+            //当未查询到时直接返回空页
+            if (createIds == null || createIds.size() == 0) {
+                createIds=new ArrayList<>(Arrays.asList(-1));
+            }
+            queryWrapper.in(ImportTask::getCreateUserId,createIds);
+        }
         queryWrapper.orderByDesc(ImportTask::getCreateDate);
         if (importTask.getCurrent() != null && importTask.getSize() != null) {
             IPage<ImportTask> importTaskIPage = this.page(new Page<>(importTask.getCurrent(), importTask.getSize()), queryWrapper);

+ 377 - 2
RMS/src/main/java/cn/cslg/report/service/business/ReportDocumentService.java

@@ -105,7 +105,7 @@ public class ReportDocumentService extends ServiceImpl<ReportDocumentMapper, Rep
         String outPath = fileUtils.getSavePath(directoryName) + fileName;
         Report report = reportService.getById(reportId);
         XWPFTemplate template = null;
-        if (report.getType() == 0 || report.getType() == 2) {
+        if (report.getType() == 0 || report.getType() == 2|| report.getType() == 1) {
             template = this.getstabilityTemplate(report, filePath);
         } else if (report.getType() == 3) {
             template = this.FTOtemplate(reportId, filePath, templeId);
@@ -144,7 +144,18 @@ public class ReportDocumentService extends ServiceImpl<ReportDocumentMapper, Rep
      * @autor lrj
      * @description 装载稳定和无效模板信息
      */
+
     private XWPFTemplate getstabilityTemplate(Report report, String filePath) throws IOException {
+        List<PatentRight> patentRights =new ArrayList<>();
+        if(report.getType()==1) {
+          //权要(带拆分的特征)列表
+          List<PatentRightVo> patentRightVos = new ArrayList<>();
+          //从pas获得权要信息
+          String resBody = outInterfaceService.getPatentRightFromPAS(report.getSignPatentNo());
+          JSONObject jsonObject = JSONObject.parseObject(resBody);
+          //解析jason获得标的专利的权要
+         patentRights = JSON.parseArray(jsonObject.getString("data"), PatentRight.class);
+      }
         //装载标的专利信息
         Map<String, Object> signPatent = this.signPantentMess(report.getSignPatentNo());
         //根据报告Id获得报告信息
@@ -299,7 +310,10 @@ public class ReportDocumentService extends ServiceImpl<ReportDocumentMapper, Rep
                 temMap.put("rightName", "附属" + a);
             }
             temMap.put("rightId", item1.getRightId());
-
+            if(report.getType()==1){
+                String rightContent =patentRights.stream().filter(t->t.getSort().equals(item1.getRightId())).map(PatentRight::getContent).findFirst().orElse("");
+                temMap.put("rightContent",rightContent);
+            }
             temMap.put("remark", item1.getContrastResult());
             // 从关联数据里获得特征id
             if (!rightIds.contains(item1.getRightId())) {
@@ -425,6 +439,8 @@ public class ReportDocumentService extends ServiceImpl<ReportDocumentMapper, Rep
         }
         List<Map<String, Object>> allRightScenarios = new ArrayList<>();
         List<Map<String, Object>> resultMaps = new ArrayList<>();
+       // 存放创造性和新颖性的权要
+
         rightIds.forEach(tem -> {
             Map<String, Object> map = new HashMap<>();
             Map<String, Object> resultMap = new HashMap<>();
@@ -747,6 +763,364 @@ public class ReportDocumentService extends ServiceImpl<ReportDocumentMapper, Rep
         return template;
     }
 
+    private XWPFTemplate getThirdTemplate(Report report, String filePath) throws IOException {
+        List<PatentRight> patentRights =new ArrayList<>();
+            //权要(带拆分的特征)列表
+            List<PatentRightVo> patentRightVos = new ArrayList<>();
+            //从pas获得权要信息
+            String resBody = outInterfaceService.getPatentRightFromPAS(report.getSignPatentNo());
+            JSONObject jsonObject = JSONObject.parseObject(resBody);
+            //解析jason获得标的专利的权要
+            patentRights = JSON.parseArray(jsonObject.getString("data"), PatentRight.class);
+        //装载标的专利信息
+        Map<String, Object> signPatent = this.signPantentMess(report.getSignPatentNo());
+        //根据报告Id获得报告信息
+        // 根据拆分人(报告的创建人)Id和报告ID获得所有特征
+        LambdaQueryWrapper<Features> allFeaturesWrapper = new LambdaQueryWrapper<>();
+        allFeaturesWrapper.eq(Features::getReportId, report.getId());
+        allFeaturesWrapper.and(wrapper -> wrapper.eq(Features::getPartnerId, report.getPersonId()).or().eq(Features::getPartnerId, report.getCreatePersonId()));
+        List<Features> allFeatures = featureService.list(allFeaturesWrapper);
+        //根据报告Id 查询出报告下所有的方案
+        LambdaQueryWrapper<CompareScenarios> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(CompareScenarios::getReportId, report.getId());
+        List<CompareScenarios> compareScenarios = compareScenariosService.list(queryWrapper);
+        List<Integer> scenarioIds = compareScenarios.stream().map(CompareScenarios::getId).collect(Collectors.toList());
+        //根据对比方案Id 查询所有对比方案和(对比记录-特征)关联信息
+        List<AssoScenarIOS> scenariosRecords = new ArrayList<>();
+        if (scenarioIds != null && scenarioIds.size() != 0) {
+            LambdaQueryWrapper<AssoScenarIOS> queryRecordsByIDs = new LambdaQueryWrapper<>();
+            queryRecordsByIDs.in(AssoScenarIOS::getScenariosID, scenarioIds);
+            scenariosRecords = scenariosRecordsService.list(queryRecordsByIDs);
+        }
+        //获得对比记录-特征关联ID
+        List<Integer> recordfeatureRecordIds = scenariosRecords.stream().map(AssoScenarIOS::getFeatureRecordID).collect(Collectors.toList());
+        //从关联表里获得是公识的特征Id
+        List<Integer> knowedIds = scenariosRecords.stream().map(AssoScenarIOS::getFeaturesID).collect(Collectors.toList());
+        //根据对比记录-特征关联ID查出对比记录-特征关联信息
+        List<AssoRecordsFeature> assoRecordsFeatures = new ArrayList<>();
+        if (recordfeatureRecordIds != null && recordfeatureRecordIds.size() != 0) {
+            LambdaQueryWrapper<AssoRecordsFeature> wrapper = new LambdaQueryWrapper<>();
+            wrapper.in(AssoRecordsFeature::getId, recordfeatureRecordIds);
+            assoRecordsFeatures = assoRecordsFeatureService.list(wrapper);
+        }
+        List<AssoRecordsFeature> finalAsso = assoRecordsFeatures;
+        //从对比记录-特征关联信息里剔出对比记录Id
+        List<Integer> recordIds = assoRecordsFeatures.stream().map(AssoRecordsFeature::getRecordsId).collect(Collectors.toList());
+        //从对比记录-特征关联信息里剔出特征Id
+        List<Integer> sFeatureIds = assoRecordsFeatures.stream().map(AssoRecordsFeature::getFeatureId).collect(Collectors.toList());
+        sFeatureIds.addAll(knowedIds);
+        //根据特征ID查询出报告所有方案的特征
+        List<Features> sFeatures = new ArrayList<>();
+        LambdaQueryWrapper<Features> sFeaturesWrapper = new LambdaQueryWrapper<>();
+        sFeaturesWrapper.eq(Features::getId, sFeatureIds);
+        if (sFeatures != null && sFeatures.size() != 0) {
+            sFeatures = featureService.list(sFeaturesWrapper);
+        }
+        //根据对比记录ID查询出报告所有方案的对比记录
+        List<CompareRecords> compareRecords = new ArrayList<>();
+        if (recordIds != null && recordIds.size() != 0) {
+            LambdaQueryWrapper<CompareRecords> queryPatentByIDs = new LambdaQueryWrapper<>();
+            queryPatentByIDs.in(CompareRecords::getId, recordIds);
+            compareRecords = compareRecordsService.list(queryPatentByIDs);
+        }
+        //根据对比记录ID获得专利号
+        List<String> PatentNos = compareRecords.stream().map(CompareRecords::getPatentNo).collect(Collectors.toList());
+        PatentVO patentVO = new PatentVO();
+        patentVO.setPatentNos(PatentNos);
+        //根据专利号查询专利的排序
+        LambdaQueryWrapper<CompareFiles> comWrapper = new LambdaQueryWrapper<>();
+        comWrapper
+                .eq(CompareFiles::getReportId, report.getId())
+                .last("ORDER BY IF(isnull(SYS_ORDER),1,0), SYS_ORDER ASC");
+        ;
+        List<CompareFiles> compareFiles = compareFilesService.list(comWrapper);
+        //专利号别名的map
+        Map<String, Object> OtherName = new HashMap<>();
+        int flag = 1;
+        for (CompareFiles item : compareFiles) {
+            Integer order = item.getSysOrder() == null ? flag : item.getSysOrder();
+            OtherName.put(item.getPatentNo(), order);
+            flag++;
+        }
+        //根据专利号查询专利详细信息
+//        String resBody = outInterfaceService.getPatentDTOListForRMS(patentVO);
+//        JSONObject jsonObject = JSONObject.parseObject(resBody);
+        List<JSONObject> patentDTOS = JSON.parseArray(jsonObject.get("data").toString(), JSONObject.class);
+        //存放专利信息的map集合
+        List<Map<String, Object>> patentListMaps = new ArrayList<>();
+        //填充专利数据到patentListMap
+        for (int i = 0; i < patentDTOS.size(); i++) {
+            JSONObject item = patentDTOS.get(i);
+            Map<String, Object> patentListMap = new HashMap<>();
+            List<JSONObject> applicantJSONs = JSON.parseArray(item.get("applicant").toString(), JSONObject.class);
+            ;
+            StringBuilder applicants = new StringBuilder();
+            applicantJSONs.forEach(tem -> {
+                applicants.append(tem.get("name") + "\r");
+            });
+            //填充相关揭露(对比记录文字和特征组合)
+            StringBuffer disclosures = new StringBuffer("");
+            //根据专利号获得对比记录
+            List<CompareRecords> pantentRecords = compareRecords.stream().filter(tem -> tem.getPatentNo().equals(item.get("publicNo"))).collect(Collectors.toList());
+            //遍历对比记录根据对比记录获得对比记录-特征关联信息并获得特征ID
+            for (CompareRecords tem : pantentRecords) {
+                //填充对比记录文字
+                disclosures.append(tem.getContent());
+                disclosures.append("\r");
+                disclosures.append("(");
+                disclosures.append(tem.getFields());
+                disclosures.append("[" + (tem.getPosition()) + "]");
+                disclosures.append(")");
+                List<Integer> featuresIds = assoRecordsFeatures.stream().filter(te -> te.getRecordsId().equals(tem.getId())).map(AssoRecordsFeature::getFeatureId).collect(Collectors.toList());
+                //根据特征Id获得特征内容
+                List<String> feaListContent = sFeatures.stream().filter(te -> featuresIds.contains(te.getId())).map(Features::getContent).collect(Collectors.toList());
+                feaListContent.forEach(te -> disclosures.append("(" + te + ")"));
+                disclosures.append("\n");
+            }
+            int order = Integer.parseInt(OtherName.get(item.get("publicNo")).toString());
+
+            patentListMap.put("name", item.get("name"));
+            patentListMap.put("fileName", "D" + order);
+            patentListMap.put("publicDate", item.get("publicDate"));
+            patentListMap.put("publicNo", item.get("publicNo"));
+            patentListMap.put("SSIM", "");
+            patentListMap.put("applicant", applicants);
+            patentListMap.put("patentNo", item.get("publicNo"));
+            patentListMap.put("abstractStr", item.get("abstractStr"));
+            patentListMap.put("compareFileName", "对比文件" + (order));
+            patentListMap.put("applicationDate", item.get("applicationDate"));
+            patentListMap.put("abstractPath", pasFile + item.get("abstractPath"));
+            patentListMap.put("disclosures", disclosures);
+            patentListMap.put("order", order);
+            patentListMaps.add(patentListMap);
+
+        }
+        //存放对比方案信息的map集合
+        List<Map<String, Object>> scenariosMaps = new ArrayList<>(compareFiles.size());
+        //存放所有对比方案所有不重复的rightId
+        List<Integer> rightIds = new ArrayList<>();
+        for (int i = 0; i < compareScenarios.size(); i++) {
+            CompareScenarios item1 = compareScenarios.get(i);
+            //获得单个对比方案的
+            List<AssoScenarIOS> partScenariosRecords = scenariosRecords.stream().filter(item -> item.getScenariosID().equals(item1.getId())).collect(Collectors.toList());
+            List<Integer> featureRecordsIds = partScenariosRecords.stream().map(AssoScenarIOS::getFeatureRecordID).collect(Collectors.toList());
+            List<AssoRecordsFeature> assoRecordsFeatures1 = assoRecordsFeatures.stream().filter(item -> featureRecordsIds.contains(item.getId())).collect(Collectors.toList());
+            List<Integer> partRecordIds = assoRecordsFeatures1.stream().map(AssoRecordsFeature::getRecordsId).collect(Collectors.toList());
+            List<Integer> partFetIds = assoRecordsFeatures1.stream().map(AssoRecordsFeature::getFeatureId).collect(Collectors.toList());
+            //获得公识特征的ID
+            List<Integer> comFetIds = partScenariosRecords.stream().map(AssoScenarIOS::getFeaturesID).collect(Collectors.toList());
+            partFetIds.addAll(comFetIds);
+            //获得单个对比方案的权要的所有特征
+            List<Features> partFeatures = allFeatures.stream().filter(item -> partFetIds.contains(item.getId())).collect(Collectors.toList());
+            List<CompareRecords> records = compareRecords.stream().filter(item -> partRecordIds.contains(item.getId())).collect(Collectors.toList());
+            //获得单条权要所有的特征
+            List<Features> allRightFeatures = allFeatures.stream().filter(item -> item.getRightId().equals(item1.getRightId())).collect(Collectors.toList());
+            //存放单条对比结果的map
+            Map<String, Object> temMap = new HashMap<>();
+            String a = partFeatures.get(0).getRightName().replace("\r", "");
+            if (partFeatures.size() != 0 && partFeatures.get(0).getRightType().equals(1)) {
+                temMap.put("rightName", "独立" + a);
+            } else {
+                temMap.put("rightName", "附属" + a);
+            }
+            temMap.put("rightId", item1.getRightId());
+            if(report.getType()==1){
+                String rightContent =patentRights.stream().filter(t->t.getSort().equals(item1.getRightId())).map(PatentRight::getContent).findFirst().orElse("");
+                temMap.put("rightContent",rightContent);
+            }
+            temMap.put("remark", item1.getContrastResult());
+            // 从关联数据里获得特征id
+            if (!rightIds.contains(item1.getRightId())) {
+                rightIds.add(item1.getRightId());
+            }
+            //存放对比方案每一个特征记录
+            List<Map<String, Object>> maps = new ArrayList<>();
+            allRightFeatures.forEach(tem -> {
+
+                List<AssoRecordsFeature> assoRecordsFeatures2 = assoRecordsFeatures1.stream().filter(item -> item.getFeatureId().equals(tem.getId())).collect(Collectors.toList());
+                if (comFetIds.contains(tem.getId())) {
+                    Map<String, Object> map = new LinkedHashMap<>();
+                    map.put("featureContent", tem.getContent());
+                    map.put("compareResult", "公识");
+                    map.put("compareContent", "");
+                    maps.add(map);
+                } else if (assoRecordsFeatures2.size() != 0) {
+                    Map<String, Object> map = new LinkedHashMap<>();
+                    map.put("featureContent", tem.getContent());
+                    List<Map<String, Object>> temMap1 = new ArrayList<>();
+                    AssoRecordsFeature assoRecordsFeature = assoRecordsFeatures2.get(0);
+                    CompareRecords record = records.stream().filter(item -> item.getId().equals(assoRecordsFeature.getRecordsId())).findFirst().orElse(new CompareRecords());
+                    String compareContent = "";
+                    //获取对比内容
+                    String content = record.getContent() != null ? record.getContent() : "";
+                    //获得对比专利号
+                    String patentNo = record.getPatentNo() != null ? record.getPatentNo() : "";
+                    if (OtherName.containsKey(patentNo)) {
+                        patentNo = "D" + OtherName.get(patentNo).toString() + ":";
+                    } else if (!patentNo.equals("")) {
+                        patentNo += ":";
+                    }
+                    //获得解析过程
+                    String paresingProcess = record.getParesingProcess() != null ? "(" + record.getParesingProcess() + ")" : "";
+                    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", assoRecordsFeature.getComResult() != null ? assoRecordsFeature.getComResult() : "不公开");
+                            map.put("compareContent", compareContent);
+                            map.put("figure", fileUtils.getSystemPath() + record.getFilePath());
+                            if (record.getFields() == null && record.getPosition() == null) {
+                                map.put("position", "");
+                            } else {
+                                map.put("position", "\r" + "(" + record.getFields() + "[" + record.getPosition() + "]" + ")");
+                            }
+                            maps.add(map);
+                        }
+                    } else {
+                        map.put("compareResult", assoRecordsFeature.getComResult() != null ? assoRecordsFeature.getComResult() : "不公开");
+                        map.put("compareContent", compareContent);
+                        map.put("figure", fileUtils.getSystemPath() + record.getFilePath());
+                        if (record.getFields() == null && record.getPosition() == null) {
+                            map.put("position", "");
+                        } else {
+                            map.put("position", "\r" + "(" + record.getFields() + "[" + record.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<>();
+            records.forEach(item -> {
+                if (!patentNOs.contains(item.getPatentNo())) {
+                    patentNOs.add(item.getPatentNo());
+                }
+            });
+            //比较所有专利号和权要所有权要的大小,如果相等则将该专利加入到新颖性列表中
+            List<String> noveltyFiles = new ArrayList<>();
+            patentNOs.forEach(
+                    item -> {
+                        List<Integer> temRecordIds = records.stream().filter(tm -> tm.getPatentNo().equals(item)).map(CompareRecords::getId).collect(Collectors.toList());
+                        List<Integer> temFIds = finalAsso.stream().filter(tm -> temRecordIds.contains(tm.getRecordsId())).map(AssoRecordsFeature::getFeatureId).collect(Collectors.toList());
+                        String tmName = item;
+                        if (OtherName.containsKey(item)) {
+                            tmName = "D" + OtherName.get(item).toString();
+                        }
+                        if (temFIds.size() == allRightFeatures.size()) {
+                            noveltyFiles.add(tmName);
+                        }
+                    }
+            );
+            //创造性列表
+            List<String> creativeFiles = new ArrayList<>();
+            //当前方案所有的特征Id
+            records.forEach(
+                    item -> {
+                        String tmName = item.getPatentNo();
+                        if (OtherName.containsKey(tmName)) {
+                            tmName = "D" + OtherName.get(tmName).toString();
+                        }
+                        if (!creativeFiles.contains(tmName)) {
+                            creativeFiles.add(tmName);
+                        }
+                    }
+            );
+            List<AssoScenarIOS> andRecords = partScenariosRecords.stream().filter(tm -> tm.getScenariosID().equals(item1.getId()) && tm.getFeaturesID() != 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<>();
+        // 存放创造性和新颖性的权要
+
+        rightIds.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)) {
+                    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", rightScenarios.get(0).get("rightName"));
+            String creative = creaList.size() == 0 ? "" : StringUtils.join(creaList, "、");
+            String novelty = noveList.size() == 0 ? "" : StringUtils.join(noveList, "-");
+            resultMap.put("rightName", rightScenarios.get(0).get("rightName"));
+            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;
+    }
+
     /**
      * function:删除报告时删除
      */
@@ -804,6 +1178,7 @@ public class ReportDocumentService extends ServiceImpl<ReportDocumentMapper, Rep
             Map<String, Object> temMap = new HashMap<>();
             temMap.put("rightName", "权" + (item.getSort() + 1));
             temMap.put("content", item.getContent());
+            temMap.put("rightName","权利要求"+(item.getSort() + 1));
             rights.add(temMap);
         });
         patentMap.put("rights", rights);

+ 36 - 34
RMS/src/main/java/cn/cslg/report/service/business/ReportFieldPatentLinkService.java

@@ -260,40 +260,42 @@ public class ReportFieldPatentLinkService extends ServiceImpl<ReportFieldPatentL
                         .eq(ReportFieldPatentLink::getFieldId, params.getFieldId());
                 List<ReportFieldPatentLink> list = this.list(queryWrapper);
                 ReportFieldPatentLink reportFieldPatentLink;
-                if (list.size() != 0) {
-                    reportFieldPatentLink = list.get(0);
-                    Integer optionId = reportFieldPatentLink.getOptionId();
-                    List<ReportFieldText> reportFieldTexts = reportFieldTextService.get(optionId);
-                    ReportFieldText reportFieldText = reportFieldTexts.get(0);
-                    reportFieldText.setText(params.getSelected().get(0).getLabel());
-                    reportFieldText.updateById();
-                    reportFieldPatentLink.setFieldId(reportFieldText.getFieldId());
-                    reportFieldPatentLink.setOptionId(reportFieldText.getId());
-                    reportFieldPatentLink.setCreateBy(loginUtils.getId());
-                    reportFieldPatentLink.setPatentNo(params.getPatentNo());
-                    reportFieldPatentLink.setReportId(params.getReportId());
-                    reportFieldPatentLink.updateById();
-                } else {
-                    LambdaQueryWrapper<ReportFieldText> queryWrapper1 = new LambdaQueryWrapper<>();
-                    queryWrapper1.eq(ReportFieldText::getText, params.getSelected().get(0).getLabel())
-                            .eq(ReportFieldText::getFieldId, params.getFieldId());
-                    List<ReportFieldText> reportFieldTexts = reportFieldTextService.list(queryWrapper1);
-                    reportFieldPatentLink = new ReportFieldPatentLink();
-                    ReportFieldText reportFieldText = new ReportFieldText();
-                    if (reportFieldTexts != null && reportFieldTexts.size() != 0) {
-                        reportFieldText = reportFieldTexts.get(0);
-                    } else {
-                        reportFieldText.setText(params.getSelected().get(0).getLabel());
-                        reportFieldText.setFieldId(params.getFieldId());
-                        reportFieldText.insert();
-                    }
-                    reportFieldPatentLink.setFieldId(reportFieldText.getFieldId());
-                    reportFieldPatentLink.setOptionId(reportFieldText.getId());
-                    reportFieldPatentLink.setCreateBy(loginUtils.getId());
-                    reportFieldPatentLink.setPatentNo(params.getPatentNo());
-                    reportFieldPatentLink.setReportId(params.getReportId());
-                    reportFieldPatentLink.insert();
-                }
+               if(params.getSelected().get(0).getLabel()!=null) {
+                   if (list.size() != 0) {
+                       reportFieldPatentLink = list.get(0);
+                       Integer optionId = reportFieldPatentLink.getOptionId();
+                       List<ReportFieldText> reportFieldTexts = reportFieldTextService.get(optionId);
+                       ReportFieldText reportFieldText = reportFieldTexts.get(0);
+                       reportFieldText.setText(params.getSelected().get(0).getLabel());
+                       reportFieldText.updateById();
+                       reportFieldPatentLink.setFieldId(reportFieldText.getFieldId());
+                       reportFieldPatentLink.setOptionId(reportFieldText.getId());
+                       reportFieldPatentLink.setCreateBy(loginUtils.getId());
+                       reportFieldPatentLink.setPatentNo(params.getPatentNo());
+                       reportFieldPatentLink.setReportId(params.getReportId());
+                       reportFieldPatentLink.updateById();
+                   } else {
+                       LambdaQueryWrapper<ReportFieldText> queryWrapper1 = new LambdaQueryWrapper<>();
+                       queryWrapper1.eq(ReportFieldText::getText, params.getSelected().get(0).getLabel())
+                               .eq(ReportFieldText::getFieldId, params.getFieldId());
+                       List<ReportFieldText> reportFieldTexts = reportFieldTextService.list(queryWrapper1);
+                       reportFieldPatentLink = new ReportFieldPatentLink();
+                       ReportFieldText reportFieldText = new ReportFieldText();
+                       if (reportFieldTexts != null && reportFieldTexts.size() != 0) {
+                           reportFieldText = reportFieldTexts.get(0);
+                       } else {
+                           reportFieldText.setText(params.getSelected().get(0).getLabel());
+                           reportFieldText.setFieldId(params.getFieldId());
+                           reportFieldText.insert();
+                       }
+                       reportFieldPatentLink.setFieldId(reportFieldText.getFieldId());
+                       reportFieldPatentLink.setOptionId(reportFieldText.getId());
+                       reportFieldPatentLink.setCreateBy(loginUtils.getId());
+                       reportFieldPatentLink.setPatentNo(params.getPatentNo());
+                       reportFieldPatentLink.setReportId(params.getReportId());
+                       reportFieldPatentLink.insert();
+                   }
+               }
                 //将没有使用到的选项值删除
                 LambdaQueryWrapper<ReportFieldPatentLink> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
                 lambdaQueryWrapper1.eq(ReportFieldPatentLink::getReportId, params.getReportId())