Explorar o código

Merge remote-tracking branch 'origin/dev2' into prod

lwhhszx hai 1 ano
pai
achega
06c2bb6fb9
Modificáronse 55 ficheiros con 1058 adicións e 279 borrados
  1. 4 0
      RMS/pom.xml
  2. 4 4
      RMS/src/main/java/cn/cslg/report/common/config/WebSocketConfig.java
  3. 14 0
      RMS/src/main/java/cn/cslg/report/common/model/dto/QueryRecordsDTO.java
  4. 7 0
      RMS/src/main/java/cn/cslg/report/common/model/dto/ReportDTO.java
  5. 37 0
      RMS/src/main/java/cn/cslg/report/common/model/vo/CompareRecordDTO.java
  6. 28 0
      RMS/src/main/java/cn/cslg/report/common/model/vo/ReportTenantVO.java
  7. 26 0
      RMS/src/main/java/cn/cslg/report/common/model/vo/ReportUsedByTenantVO.java
  8. 5 0
      RMS/src/main/java/cn/cslg/report/common/model/vo/invalidReReport/QueryInvalidReasonVO.java
  9. 3 1
      RMS/src/main/java/cn/cslg/report/common/utils/PatentRightUtils.java
  10. 0 1
      RMS/src/main/java/cn/cslg/report/common/utils/SecurityUtils/LoginUtils.java
  11. 8 2
      RMS/src/main/java/cn/cslg/report/controller/CompareController.java
  12. 3 1
      RMS/src/main/java/cn/cslg/report/controller/CompareFilesController.java
  13. 1 0
      RMS/src/main/java/cn/cslg/report/controller/CompareRecordsController.java
  14. 7 0
      RMS/src/main/java/cn/cslg/report/controller/FeatureController.java
  15. 10 0
      RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/ArgumentsController.java
  16. 7 7
      RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/InvalidProcessController.java
  17. 9 6
      RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/InvalidReasonController.java
  18. 2 3
      RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/ProofGroupController.java
  19. 21 3
      RMS/src/main/java/cn/cslg/report/controller/ReportController.java
  20. 24 0
      RMS/src/main/java/cn/cslg/report/entity/ValueObject.java
  21. 1 1
      RMS/src/main/java/cn/cslg/report/entity/asso/AssoReferenceFile.java
  22. 5 0
      RMS/src/main/java/cn/cslg/report/entity/invalidReReport/InvalidReReport.java
  23. 14 5
      RMS/src/main/java/cn/cslg/report/mapper/CompareRecordsMapper.java
  24. 77 6
      RMS/src/main/java/cn/cslg/report/service/OutInterfaceService.java
  25. 4 4
      RMS/src/main/java/cn/cslg/report/service/business/AssoTaskPersonelService.java
  26. 56 67
      RMS/src/main/java/cn/cslg/report/service/business/CompareFilesService.java
  27. 1 2
      RMS/src/main/java/cn/cslg/report/service/business/CompareMessageService.java
  28. 1 1
      RMS/src/main/java/cn/cslg/report/service/business/CompareScenariosService.java
  29. 118 14
      RMS/src/main/java/cn/cslg/report/service/business/ExportArgumentsScenariosService.java
  30. 154 40
      RMS/src/main/java/cn/cslg/report/service/business/FeatureService.java
  31. 13 10
      RMS/src/main/java/cn/cslg/report/service/business/InvalidReReport/ArgumentsService.java
  32. 33 10
      RMS/src/main/java/cn/cslg/report/service/business/InvalidReReport/InvalidReasonService.java
  33. 16 1
      RMS/src/main/java/cn/cslg/report/service/business/InvalidReReport/ProofGroupService.java
  34. 2 2
      RMS/src/main/java/cn/cslg/report/service/business/ReferencesService.java
  35. 4 2
      RMS/src/main/java/cn/cslg/report/service/business/ReportDocumentService.java
  36. 217 18
      RMS/src/main/java/cn/cslg/report/service/business/ReportService.java
  37. 10 1
      RMS/src/main/java/cn/cslg/report/service/business/SystemDictItemService.java
  38. 0 49
      RMS/src/main/java/cn/cslg/report/service/business/TaskService.java
  39. 1 1
      RMS/src/main/java/cn/cslg/report/service/impl/AvoidDesignDirectionServiceImpl.java
  40. 55 8
      RMS/src/main/resources/mapper/CompareRecordsMapper.xml
  41. 1 1
      RMS/target/classes/application.yml
  42. BIN=BIN
      RMS/target/classes/cn/cslg/report/controller/CompareController.class
  43. BIN=BIN
      RMS/target/classes/cn/cslg/report/controller/CompareFilesController.class
  44. BIN=BIN
      RMS/target/classes/cn/cslg/report/controller/CompareRecordsController.class
  45. BIN=BIN
      RMS/target/classes/cn/cslg/report/controller/FeatureController.class
  46. BIN=BIN
      RMS/target/classes/cn/cslg/report/controller/ReportController.class
  47. BIN=BIN
      RMS/target/classes/cn/cslg/report/mapper/CompareRecordsMapper.class
  48. BIN=BIN
      RMS/target/classes/cn/cslg/report/service/business/AssoTaskPersonelService.class
  49. BIN=BIN
      RMS/target/classes/cn/cslg/report/service/business/CompareFilesService.class
  50. BIN=BIN
      RMS/target/classes/cn/cslg/report/service/business/CompareMessageService.class
  51. BIN=BIN
      RMS/target/classes/cn/cslg/report/service/business/FeatureService.class
  52. BIN=BIN
      RMS/target/classes/cn/cslg/report/service/business/ReportDocumentService.class
  53. BIN=BIN
      RMS/target/classes/cn/cslg/report/service/business/ReportService.class
  54. BIN=BIN
      RMS/target/classes/cn/cslg/report/service/business/SystemDictItemService.class
  55. 55 8
      RMS/target/classes/mapper/CompareRecordsMapper.xml

+ 4 - 0
RMS/pom.xml

@@ -178,6 +178,10 @@
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-test</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 4 - 4
RMS/src/main/java/cn/cslg/report/common/config/WebSocketConfig.java

@@ -6,8 +6,8 @@ import org.springframework.web.socket.server.standard.ServerEndpointExporter;
 
 @Configuration
 public class WebSocketConfig {
-    @Bean
-    public ServerEndpointExporter serverEndpointExporter() {
-        return new ServerEndpointExporter();
-    }
+//    @Bean
+//    public ServerEndpointExporter serverEndpointExporter() {
+//        return new ServerEndpointExporter();
+//    }
 }

+ 14 - 0
RMS/src/main/java/cn/cslg/report/common/model/dto/QueryRecordsDTO.java

@@ -0,0 +1,14 @@
+package cn.cslg.report.common.model.dto;
+
+import lombok.Data;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/7/7
+ */
+@Data
+public class QueryRecordsDTO {
+    private String patentNo;
+    private Integer current;
+    private Integer size;
+}

+ 7 - 0
RMS/src/main/java/cn/cslg/report/common/model/dto/ReportDTO.java

@@ -191,6 +191,9 @@ public class ReportDTO {
      * 后续事项
      */
     private List<FollowUpDTO> followUps;
+    /**
+     * 是否添加追踪报告
+     */
     private Boolean track;
 
     //以下是无效应对报告使用的字段 ↓
@@ -214,5 +217,9 @@ public class ReportDTO {
      * 无效宣告请求人
      */
     private String invalidApplication;
+    /**
+     * 案件梳理意见
+     */
+    private String suggestion;
 
 }

+ 37 - 0
RMS/src/main/java/cn/cslg/report/common/model/vo/CompareRecordDTO.java

@@ -0,0 +1,37 @@
+package cn.cslg.report.common.model.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+public class CompareRecordDTO {
+
+    private String patentNo;
+
+
+    private String position;
+
+    private String fields;
+
+    private String content;
+
+
+    private Integer personId;
+
+    private String paresingProcess;
+
+
+    private String filePath;
+
+
+
+    private int reportId;
+
+    private Integer taskId;
+
+   private String featureContent;
+
+
+}

+ 28 - 0
RMS/src/main/java/cn/cslg/report/common/model/vo/ReportTenantVO.java

@@ -0,0 +1,28 @@
+package cn.cslg.report.common.model.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 租户报告表
+ * @Author xiexiang
+ * @Date 2023/8/2
+ */
+@Data
+public class ReportTenantVO {
+    /**
+     * 租户id
+     */
+    private Integer tenantId;
+
+    /**
+     * 租户名
+     */
+    private String tenantName;
+
+    /**
+     * 人员ids
+     */
+    private List<Integer> personnelIds;
+}

+ 26 - 0
RMS/src/main/java/cn/cslg/report/common/model/vo/ReportUsedByTenantVO.java

@@ -0,0 +1,26 @@
+package cn.cslg.report.common.model.vo;
+
+import lombok.Data;
+
+/**
+ * 租户报告使用情况
+ * @Author xiexiang
+ * @Date 2023/8/2
+ */
+@Data
+public class ReportUsedByTenantVO {
+    /**
+     * 租户名
+     */
+    private String tenantName;
+
+    /**
+     * 报告数量
+     */
+    private Integer reportNum;
+
+    /**
+     * 报告名称
+     */
+    private String reportName;
+}

+ 5 - 0
RMS/src/main/java/cn/cslg/report/common/model/vo/invalidReReport/QueryInvalidReasonVO.java

@@ -29,6 +29,11 @@ public class QueryInvalidReasonVO {
     private Integer content;
 
     /**
+     * 权要内容
+     */
+    private String rightContent;
+
+    /**
      * 陈述意见
      */
     private String argumentStr;

+ 3 - 1
RMS/src/main/java/cn/cslg/report/common/utils/PatentRightUtils.java

@@ -316,7 +316,9 @@ public class PatentRightUtils {
             return patentRights;
         } catch (Exception e) {
             e.printStackTrace();
-            return new ArrayList<>();
+            ArrayList<PatentRight> patentRights = new ArrayList<>();
+            patentRights.add(new PatentRight().setPatentId(params.getPatentId()).setContent(params.getContent()).setContentOut(params.getContentOut()).setType(1).setSort(0).setParentSort("-1"));
+            return patentRights;
         }
     }
 

+ 0 - 1
RMS/src/main/java/cn/cslg/report/common/utils/SecurityUtils/LoginUtils.java

@@ -16,7 +16,6 @@ import java.util.Objects;
 public class LoginUtils {
     @Resource
     private RedisUtil redisUtil;
-
     public static String getToken() {
         RequestAttributes ra = RequestContextHolder.getRequestAttributes();
         ServletRequestAttributes sra = (ServletRequestAttributes) ra;

+ 8 - 2
RMS/src/main/java/cn/cslg/report/controller/CompareController.java

@@ -44,8 +44,8 @@ public class CompareController {
 
     @RequestMapping(value = "/addSingle", method = RequestMethod.GET)
     @Operation(summary = "添加单个对比文件")
-    public Integer addSingle(Integer reportId, String patentNo,String name) throws IOException {
-        Integer res = compareFilesService.addSingle(reportId, patentNo,name);
+    public Integer addSingle(Integer reportId, String patentNo, String name, Integer asCompare) throws IOException {
+        Integer res = compareFilesService.addSingle(reportId, patentNo, name, asCompare);
         return res;
     }
 
@@ -92,4 +92,10 @@ public class CompareController {
         compareFilesService.addProofByFile(proofAddNewDTO, files);
         return Response.success();
     }
+
+    @Operation(summary = "删除专利证据文献")
+    @PostMapping("/deleteCompareFile")
+    public String deleteCompareFile(@RequestBody List<Integer> ids) {
+        return compareFilesService.deleteCompareFile(ids);
+    }
 }

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

@@ -49,7 +49,7 @@ public class CompareFilesController {
 
     @PostMapping("/index/setting/update")
     @Operation(summary = "获取专利标引情况")
-    public String getPatentIndexSetting2(@RequestBody PatentIndexSettingVO params)  {
+    public String getPatentIndexSetting2(@RequestBody PatentIndexSettingVO params) {
         fieldPatentLinkService.updatePatentIndexSetting2(params);
         return Response.success();
     }
@@ -60,12 +60,14 @@ public class CompareFilesController {
         compareFilesService.addOrder(compareOrderDTO);
         return Response.success();
     }
+
     @PostMapping("/order/addProodOrder")
     @Operation(summary = "给对比证据添加顺序")
     public String addProodOrder(@RequestBody ProofOrderDTO proofOrderDTO) throws IOException {
         compareFilesService.addProofOrder(proofOrderDTO);
         return Response.success();
     }
+
     @GetMapping("/order/query")
     @Operation(summary = "查找顺序列表")
     public String getOrder(Integer reportId) throws IOException {

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

@@ -33,6 +33,7 @@ public class CompareRecordsController {
         CompareRecords compareRecords = JSONObject.parseObject(jsons,CompareRecords.class);
         return compareRecordsService.addCompareRecord(compareRecords,files);
     }
+
     @RequestMapping(value = "/deleCompareRecords", method = RequestMethod.GET)
     @Operation(summary = "删除对比记录数据")
     public String deleCompareRecords(Integer id) throws IOException{

+ 7 - 0
RMS/src/main/java/cn/cslg/report/controller/FeatureController.java

@@ -2,6 +2,7 @@ package cn.cslg.report.controller;
 
 import cn.cslg.report.common.core.base.Constants;
 import cn.cslg.report.common.model.dto.FeaturesDTO;
+import cn.cslg.report.common.model.dto.QueryRecordsDTO;
 import cn.cslg.report.common.model.vo.PatentRightVo;
 import cn.cslg.report.common.model.vo.PatentVO;
 
@@ -62,6 +63,12 @@ public class FeatureController {
         return Response.success(featureService.querySimFeaturePatent(patentVO));
     }
 
+    @RequestMapping(value = "/querySimFeaturePatentByPatentNo", method = RequestMethod.POST)
+    @Operation(summary = "根据专利号获得相似特征的专利")
+    public String querySimFeaturePatentByPatentNo(@RequestBody QueryRecordsDTO queryRecordsDTO) throws IOException {
+        return Response.success(featureService.querySimFeaturePatentByPatentNo(queryRecordsDTO));
+    }
+
     @RequestMapping(value = "/getSplitMessage", method = RequestMethod.GET)
     @Operation(summary = "根据专利号和任务Id获得拆分信息")
     public String getSplitMessage(Integer taskId, String patentNo, Integer reportId) throws IOException {

+ 10 - 0
RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/ArgumentsController.java

@@ -82,4 +82,14 @@ public class ArgumentsController {
         return Response.success(proofStrService.queryProofStr(proofId,featureId));
     }
 
+    @Operation(summary = "删除陈述意见")
+    @PostMapping("/deleteArguments")
+    public String deleteArgument(@RequestBody List<Integer> ids) throws IOException {
+       Boolean flag= argumentsService.deleteArguments(ids);
+       if(flag){
+           return Response.success("删除成功");
+       }
+            return Response.error("删除失败");
+
+    }
 }

+ 7 - 7
RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/InvalidProcessController.java

@@ -31,7 +31,7 @@ public class InvalidProcessController {
 
     @Operation(summary = "添加无效事务")
     @PostMapping("/add")
-    public String add( String invalidProcessStr, MultipartFile file) {
+    public String add(String invalidProcessStr, MultipartFile file) {
         if (invalidProcessStr != null && invalidProcessStr != "") {
             invalidProcessService.addInvalidProcess(invalidProcessStr, file);
             return Response.success("添加成功");
@@ -43,7 +43,7 @@ public class InvalidProcessController {
     @Operation(summary = "删除无效事务")
     @GetMapping("/delete")
     public String delete(Integer id) {
-        if(id != null && id > 0) {
+        if (id != null && id > 0) {
             invalidProcessService.removeInvalidProcess(id);
             return Response.success("删除成功");
         } else {
@@ -53,8 +53,8 @@ public class InvalidProcessController {
 
     @Operation(summary = "修改无效事务")
     @PostMapping("/update")
-    public String update(String invalidProcessStr,MultipartFile file) throws IOException {
-        if(invalidProcessStr != null && invalidProcessStr != "") {
+    public String update(String invalidProcessStr, MultipartFile file) throws IOException {
+        if (invalidProcessStr != null && invalidProcessStr != "") {
             invalidProcessService.updateInvalidProcess(invalidProcessStr, file);
             return Response.success("修改无效事务成功");
         } else {
@@ -64,9 +64,9 @@ public class InvalidProcessController {
 
     @Operation(summary = "查询无效事务")
     @GetMapping("/query")
-    public String query(Integer reportId, Integer orderBy,Integer type) throws IOException {
-        if(reportId != null && reportId != 0){
-            return Response.success(invalidProcessService.queryInvalidProcess(reportId, orderBy,type));
+    public String query(Integer reportId, Integer orderBy, Integer type) throws IOException {
+        if (reportId != null && reportId != 0) {
+            return Response.success(invalidProcessService.queryInvalidProcess(reportId, orderBy, type));
         } else {
             return Response.error("传入报告id不可为空");
         }

+ 9 - 6
RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/InvalidReasonController.java

@@ -34,10 +34,11 @@ public class InvalidReasonController {
     private final InvalidReasonService invalidReasonService;
     private final InvalidReasonFieldValueService invalidReasonFieldValueService;
     private final ExportArgumentsScenariosService exportArgumentsScenariosService;
+
     @Operation(summary = "添加无效理由和证据")
     @PostMapping("/addInvalidReason")
     public String addInvalidReason(@RequestBody InvalidReasonDTO invalidReasonDTO) {
-        if(invalidReasonDTO != null) {
+        if (invalidReasonDTO != null) {
             invalidReasonService.addInvalidReason(invalidReasonDTO);
             return Response.success("新增成功");
         } else {
@@ -48,7 +49,7 @@ public class InvalidReasonController {
     @Operation(summary = "删除无效理由和证据")
     @PostMapping("/deleteInvalidReason")
     public String deleteInvalidReason(@RequestBody List<Integer> ids) {
-        if(ids != null && ids.size() != 0){
+        if (ids != null && ids.size() != 0) {
             invalidReasonService.deleteInvalidReason(ids);
             return Response.success("删除成功");
         } else {
@@ -59,14 +60,14 @@ public class InvalidReasonController {
     @Operation(summary = "更新无效理由和证据")
     @PostMapping("/updateInvalidReason")
     public String updateInvalidReason(@RequestBody InvalidReasonDTO invalidReasonDTO) throws IOException {
-             invalidReasonService.updateInvalidReason(invalidReasonDTO);
+        invalidReasonService.updateInvalidReason(invalidReasonDTO);
         return Response.success();
     }
 
     @Operation(summary = "查找无效理由和证据")
     @GetMapping("/queryInvalidReason")
     public String queryInvalidReason(Integer reportId) throws IOException {
-        if(reportId != null && reportId > 0) {
+        if (reportId != null && reportId > 0) {
             List<QueryInvalidReasonVO> queryInvalidReasonVOS = invalidReasonService.queryInvalidReason(reportId);
             return Response.success(queryInvalidReasonVOS);
         } else {
@@ -92,21 +93,23 @@ public class InvalidReasonController {
     @PostMapping("/addOrUpdateValue")
     public String addOrUpdateValue(@RequestBody List<InvalidReasonFieldValueDTO> invalidReasonFieldValueDTOS) throws IOException {
         Boolean isFlag = invalidReasonFieldValueService.addOrUpdate(invalidReasonFieldValueDTOS);
-        if(!isFlag){
+        if (!isFlag) {
             Response.error("添加失败");
         }
         return Response.success("添加成功");
     }
+
     @Operation(summary = "更新无效理由和证据")
     @PostMapping("/updateArgumentStr")
     public String updateArgumentStr(@RequestBody UpdateArgumentStrDTO updateArgumentStrDTO) throws IOException {
         invalidReasonService.updateArgumentStr(updateArgumentStrDTO);
         return Response.success();
     }
+
     @Operation(summary = "导出无效理由")
     @GetMapping("/exportInvalid")
     public String exportInvalid(Integer reportId) throws IOException {
-       String url =  exportArgumentsScenariosService.ExportToWord(reportId);
+        String url = exportArgumentsScenariosService.ExportToWord(reportId);
         return url;
     }
 }

+ 2 - 3
RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/ProofGroupController.java

@@ -82,8 +82,7 @@ public class ProofGroupController {
 
     @Operation(summary = "查询证据组合详情")
     @GetMapping("/queryDetailByInvalidId")
-    public String queryDetailByInvalidId(Integer invalidReasonId) throws IOException {
-        return Response.success( proofGroupService.queryDetailByInvalidId(invalidReasonId));
-
+    public String queryDetailByInvalidId(Integer invalidReasonId,Integer proofGroupId) throws IOException {
+        return Response.success( proofGroupService.queryDetailByInvalidId(invalidReasonId,proofGroupId));
     }
 }

+ 21 - 3
RMS/src/main/java/cn/cslg/report/controller/ReportController.java

@@ -4,6 +4,7 @@ import cn.cslg.report.common.core.base.Constants;
 import cn.cslg.report.common.model.dto.ConclusionDTO;
 import cn.cslg.report.common.model.dto.ReportDTO;
 import cn.cslg.report.common.model.vo.ReportDeVO;
+import cn.cslg.report.common.model.vo.ReportUsedByTenantVO;
 import cn.cslg.report.common.model.vo.ReportVO;
 import cn.cslg.report.common.utils.Response;
 import cn.cslg.report.common.utils.StringUtils;
@@ -12,7 +13,6 @@ import cn.cslg.report.entity.Report;
 import cn.cslg.report.entity.ReportReferences;
 import cn.cslg.report.service.business.*;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -78,6 +78,12 @@ public class ReportController {
         return reportService.queryReport(reportVO);
     }
 
+    @Operation(summary = "查询报告清单,供分析系统查询标注清单接口业务层调用(获取登陆人有权查看的报告ids)")
+    @GetMapping("/queryReportByPAS")
+    public String queryReportByPAS() {
+        return reportService.queryReportByPAS();
+    }
+
     @RequestMapping(value = "/deleReport", method = RequestMethod.GET)
     @Operation(summary = "删除报告")
     public String deleReport(Integer id) throws IOException {
@@ -153,7 +159,7 @@ public class ReportController {
     @GetMapping(value = "/reReportDetail")
     @Operation(summary = "返回报告详情")
     @Transactional(rollbackFor = Exception.class)
-    public String addConclusions(Integer reportId) throws IOException {
+    public String reReportDetail(Integer reportId) throws IOException {
         ReportDeVO reportDeDTO = reportService.reReportDetail(reportId);
         if (reportDeDTO == null) {
             return Response.error("报告不存在");
@@ -161,7 +167,19 @@ public class ReportController {
         return Response.success(reportDeDTO);
     }
 
-    @Operation(summary = "根据报告ids获得报告详情")
+    @Operation(summary = "查询租户报告使用情况")
+    @PostMapping("/queryReportNameUsedByTenant")
+    public List<ReportUsedByTenantVO> queryReportNameUsedByTenant(@RequestBody List<Integer> tenantIds) throws IOException {
+        return reportService.getReportUsedByTenant(tenantIds);
+    }
+
+    @Operation(summary = "查询汇总报表的报告数量")
+    @GetMapping("/queryReportNumOfTotal")
+    public Integer queryReportNumOfTotal(Integer tenantId) throws IOException {
+        return reportService.getReportNumOfTotal(tenantId);
+    }
+
+    @Operation(summary = "根据报告ids获得报告列表")
     @PostMapping(value = "/getReportsByIds")
     public String getReportsByIds(@RequestBody List<Integer> reportIds) {
         List<Report> reports = reportService.getReportsByReportIds(reportIds);

+ 24 - 0
RMS/src/main/java/cn/cslg/report/entity/ValueObject.java

@@ -0,0 +1,24 @@
+package cn.cslg.report.entity;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 后续事项
+ *
+ * @Author xiexiang
+ * @Date 2023/3/31
+ */
+@Accessors(chain = true)
+@Data
+public class ValueObject {
+
+
+    private List<String> prosecutor;
+    private List<String> respondent;
+    private List<String> institution;
+    private List<String> court;
+}

+ 1 - 1
RMS/src/main/java/cn/cslg/report/entity/asso/AssoReferenceFile.java

@@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
 /**
- * 对比方案与对比记录关联表
+ * 参考资料与文件关联表
  */
 @Data
 @Accessors(chain = true)

+ 5 - 0
RMS/src/main/java/cn/cslg/report/entity/invalidReReport/InvalidReReport.java

@@ -47,6 +47,11 @@ public class InvalidReReport extends BaseEntity<InvalidReReport> {
     @TableField("INVALID_APPLICATION")
     private String invalidApplication;
     /**
+     * 案件梳理意见
+     */
+    @TableField("SUGGESTION")
+    private String suggestion;
+    /**
      * 创建人
      */
     @TableField("CREATE_ID")

+ 14 - 5
RMS/src/main/java/cn/cslg/report/mapper/CompareRecordsMapper.java

@@ -1,6 +1,7 @@
 package cn.cslg.report.mapper;
 
 
+import cn.cslg.report.common.model.vo.CompareRecordDTO;
 import cn.cslg.report.entity.CompareRecords;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -11,9 +12,17 @@ import java.util.List;
 
 
 @Mapper
-public interface CompareRecordsMapper  extends BaseMapper<CompareRecords> {
-     List<CompareRecords> find(@Param("reportId") int reportId,@Param("patentNo") String  patentNo,@Param("personId") int personId);
-     CompareRecords getCompareRecords(@Param("reportId") int reportId);
-     List<CompareRecords> findCompareRecords(@Param("personId") int personId);
-     int updateCompareRecords(@Param("featuresId")String featuresId,@Param("id")int id);
+public interface CompareRecordsMapper extends BaseMapper<CompareRecords> {
+    List<CompareRecords> find(@Param("reportId") int reportId, @Param("patentNo") String patentNo, @Param("personId") int personId);
+
+    CompareRecords getCompareRecords(@Param("reportId") int reportId);
+
+    List<CompareRecords> findCompareRecords(@Param("personId") int personId);
+
+    int updateCompareRecords(@Param("featuresId") String featuresId, @Param("id") int id);
+
+    List<String> getCompareNos(List<Integer> featuresIds,Integer current,Integer size);
+    List<CompareRecordDTO> getCompareRecordsByNo(List<Integer> featuresIds, String patentNo);
+    Integer getCompareNosCount(List<Integer> featuresIds);
+
 }

+ 77 - 6
RMS/src/main/java/cn/cslg/report/service/OutInterfaceService.java

@@ -77,6 +77,7 @@ public class OutInterfaceService {
         map.put("uuid", loginVO.getUuid());
         map.put("username", loginVO.getUsername());
         map.put("password", loginVO.getPassword());
+        map.put("loginSystem", 2);
         JSONObject json = new JSONObject(map);
         RequestBody requestBody = RequestBody.create(JSON, String.valueOf(json));
         OkHttpClient okHttpClient = new OkHttpClient();
@@ -256,7 +257,7 @@ public class OutInterfaceService {
      * @title 获取部分客户(有权限控制)
      * @description 接口来源:PCS
      */
-    // TODO: 2022/11/2 未开发
+
     public String getPartClientFromPCS() throws IOException {
         OkHttpClient okHttpClient = new OkHttpClient();
         Request request = new Request.Builder()
@@ -294,6 +295,22 @@ public class OutInterfaceService {
         return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
     }
 
+    /**
+     * 获取拆分后的权要
+     *
+     * @param patentNo
+     * @return
+     * @throws IOException
+     */
+    public String formatPatentRights(String patentNo) throws IOException {
+        OkHttpClient okHttpClient = new OkHttpClient();
+        Request request = new Request.Builder()
+                .url(PASUrl + "/api/v2/patentRight/formatPatentRights?patentNo=" + patentNo)
+                .get()
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
     public String getDeparts(List<Integer> ids) throws IOException {
         OkHttpClient okHttpClient = new OkHttpClient.Builder()
                 .connectTimeout(60, TimeUnit.SECONDS)
@@ -351,12 +368,11 @@ public class OutInterfaceService {
     public String getPatentFromPAS(PatentVO patentVO, int type) throws IOException {
         LambdaQueryWrapper<ImportTask> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(ImportTask::getReportId, patentVO.getReportId());
-        List<ImportTask> importTasks = importTaskService.list(queryWrapper);
-        List<Integer> taskIds = importTasks.stream().map(ImportTask::getId).collect(Collectors.toList());
         Report report = reportService.getById(patentVO.getReportId());
+        patentVO.setReportId(null);
         if (type == 0) {
             patentVO.setProjectId(report.getProjectId());
-            patentVO.setImportTaskId(taskIds);
+            patentVO.setReportId(report.getId());
         }
         String param = new Gson().toJson(patentVO);
         RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
@@ -452,17 +468,34 @@ public class OutInterfaceService {
                 .writeTimeout(60, TimeUnit.SECONDS)
                 .readTimeout(60, TimeUnit.SECONDS)
                 .build();
-        ;
-        ;
         Request request = new Request.Builder()
                 .url(PASUrl + "/api/v2/system/getPatentDTOListForRMS")
                 .post(requestBody)
                 .build();
         return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
 
+    }
+
+    public String getPatentList(PatentVO patentVO) throws IOException {
+        Map<String, Object> map = new HashMap<>();
+        map.put("patentNos", patentVO.getPatentNos());
+        JSONObject json = new JSONObject(map);
+        RequestBody requestBody = RequestBody.create(JSON, String.valueOf(json));
+        OkHttpClient okHttpClient = new OkHttpClient
+                .Builder()
+                .connectTimeout(60, TimeUnit.SECONDS)
+                .writeTimeout(60, TimeUnit.SECONDS)
+                .readTimeout(60, TimeUnit.SECONDS)
+                .build();
+        Request request = new Request.Builder()
+                .url(PASUrl + "/api/v2/system/getPatentList")
+                .post(requestBody)
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
 
     }
 
+    //根据专利号获得专利基本信息详情
     public String getComPatentNos(PatentVO patentVO) throws IOException {
         if (patentVO.getReportId() != null) {
             LambdaQueryWrapper<ImportTask> queryWrapper = new LambdaQueryWrapper<>();
@@ -645,6 +678,31 @@ public class OutInterfaceService {
         return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
     }
 
+    public String getConPantentsCount(PatentVO patentVO, int type) throws IOException {
+        LambdaQueryWrapper<ImportTask> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ImportTask::getReportId, patentVO.getReportId());
+        List<ImportTask> importTasks = importTaskService.list(queryWrapper);
+        List<Integer> taskIds = importTasks.stream().map(ImportTask::getId).collect(Collectors.toList());
+        Report report = reportService.getById(patentVO.getReportId());
+        if (type == 0) {
+            patentVO.setProjectId(report.getProjectId());
+            patentVO.setImportTaskId(taskIds);
+
+        }
+        String param = new Gson().toJson(patentVO);
+        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
+        OkHttpClient okHttpClient = new OkHttpClient.Builder()
+                .connectTimeout(60, TimeUnit.SECONDS)
+                .writeTimeout(60, TimeUnit.SECONDS)
+                .readTimeout(60, TimeUnit.SECONDS)
+                .build();
+        Request request = new Request.Builder()
+                .url(PASUrl + "/api/v2/system/getConPantentsCount")
+                .post(requestBody)
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
     /**
      * 调用分析系统根据任务id查询任务接口
      *
@@ -676,4 +734,17 @@ public class OutInterfaceService {
         return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
     }
 
+    public String deleteReportTasks(Integer reportId) throws IOException {
+        OkHttpClient okHttpClient = new OkHttpClient.Builder()
+                .connectTimeout(60, TimeUnit.SECONDS)
+                .writeTimeout(60, TimeUnit.SECONDS)
+                .readTimeout(60, TimeUnit.SECONDS)
+                .build();
+        Request request = new Request.Builder()
+                .url(PASUrl + "/api/v2/task/deleteReportTasks?reportId=" + reportId)
+                .get()
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
 }

+ 4 - 4
RMS/src/main/java/cn/cslg/report/service/business/AssoTaskPersonelService.java

@@ -94,11 +94,11 @@ public class AssoTaskPersonelService extends ServiceImpl<AssoTaskPersonelMapper,
             patentNumber = reportFieldService.getPatentNo1(patentVO.getFiledOptions(), patentVO.getReportId(), patentVO.getTaskId(), patentVO.getTaskStatus());
         }
 
-        patentVO.setPatentNos(patentNumber);
-        String resNum = outInterfaceService.getConPantents(patentVO, 1);
+                patentVO.setPatentNos(patentNumber);
+        patentVO.setReportId(null);
+        String resNum = outInterfaceService.getConPantentsCount(patentVO, 1);
         JSONObject jsonObjectNum = JSONObject.parseObject(resNum);
-        List<JSONObject> jsonObjectNums = JSONArray.parseArray(jsonObjectNum.get("data").toString(), JSONObject.class);
-        Integer totalNumber = jsonObjectNums.size();
+        Integer totalNumber = Integer.parseInt(jsonObjectNum.get("data").toString());
         if (patentVO.getLocPosition() == 1) {
             patentVO.setStartNumber(patentVO.getLocPosition() - 1);
             patentVO.setEndNumber(patentVO.getLocPosition());

+ 56 - 67
RMS/src/main/java/cn/cslg/report/service/business/CompareFilesService.java

@@ -38,6 +38,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
@@ -136,40 +137,6 @@ public class CompareFilesService extends ServiceImpl<CompareFilesMapper, Compare
         return Response.success();
     }
 
-    /**
-     * @param compareFilesVO
-     * @return
-     * @throws IOException
-     * @Autor lrj
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public String addFTOCompareFile(CompareFilesVO compareFilesVO) throws IOException {
-
-        List<CompareFiles> compareFiles = new ArrayList<>();
-        PatentVO patentVO = new PatentVO();
-        patentVO.setStartNumber(compareFilesVO.getStartNumber() - 1);
-        patentVO.setEndNumber(compareFilesVO.getEndNumber());
-        patentVO.setReportId(compareFilesVO.getReportId());
-
-        // 见outInterfaceService getComPatentNos接口
-        String res = outInterfaceService.getComPatentNos(patentVO);
-        JSONObject jsonObject = JSONObject.parseObject(res);
-        List<String> patentNos = JSONArray.parseArray(jsonObject.get("data").toString(), String.class);
-        //删除原有的
-        patentNos.removeAll(compareFilesVO.getIsDelete());
-        //添加新的
-        patentNos.addAll(compareFilesVO.getIsAdd());
-        for (int i = 0; i < patentNos.size(); i++) {
-            CompareFiles compareFiles1 = new CompareFiles();
-            //根据专利号和报告id造对象
-            compareFiles1.setPatentNo(patentNos.get(i));
-            compareFiles1.setReportId(compareFilesVO.getReportId());
-            compareFiles.add(compareFiles1);
-        }
-        // 批量添加
-        this.saveBatch(compareFiles);
-        return Response.success();
-    }
 
     @Transactional(rollbackFor = Exception.class)
     public String addFTOFile(PatentVO patentVO) throws IOException {
@@ -220,6 +187,7 @@ public class CompareFilesService extends ServiceImpl<CompareFilesMapper, Compare
      * @function 根据PatentVO里的条件(分页)模糊查询标的专利号和数量
      */
     public String getCompareFile(PatentVO patentVO) throws IOException {
+        Integer reportId = patentVO.getReportId();
         LambdaQueryWrapper<CompareFiles> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(CompareFiles::getReportId, patentVO.getReportId());
         //根据报告id 获取文件对比表的详情
@@ -256,7 +224,7 @@ public class CompareFilesService extends ServiceImpl<CompareFilesMapper, Compare
             }
         }
         //根据报告id获取对比文件的数量
-        int i = compareFilesMapper.selectedTotal(patentVO.getReportId());
+        int i = compareFilesMapper.selectedTotal(reportId);
         Map<String, Object> map = new HashMap<>();
         map.put("datas", resData);
         map.put("select", temNos);
@@ -339,7 +307,7 @@ public class CompareFilesService extends ServiceImpl<CompareFilesMapper, Compare
         List<JSONObject> jsonObjects2 = new ArrayList<>();
         for (JSONObject jsonObject2 : jsonObjects) {
             for (CompareFiles com : compareFiles) {
-                if (jsonObject2.get("publicNo").toString().equals(com.getPatentNo())) {
+                if (jsonObject2.get("patentNo").toString().equals(com.getPatentNo())) {
                     jsonObject2.put("SysOrder", com.getSysOrder());
                 }
             }
@@ -635,36 +603,45 @@ public class CompareFilesService extends ServiceImpl<CompareFilesMapper, Compare
      * @throws IOException
      * @function 根据PatentVO里的条件(分页)模糊查询标的专利号和数量
      */
-    public Integer addSingle(Integer reportId, String patentNo, String name) throws IOException {
-        //先查询,若没有才去入库
-        List<CompareFiles> compareFiless = this.list(new LambdaQueryWrapper<CompareFiles>().eq(CompareFiles::getReportId, reportId).eq(CompareFiles::getPatentNo, patentNo));
-        CompareFiles compareFiles = new CompareFiles();
-        if (compareFiless == null || compareFiless.size() == 0) {
-            try {
-                compareFiles.setPatentNo(patentNo);
-                List<CompareFiles> proofList = this.list(new LambdaQueryWrapper<CompareFiles>().eq(CompareFiles::getReportId, reportId).orderByDesc(CompareFiles::getSysOrder).last("limit 1"));
-                Integer biggestSort;
-                //若该报告目前没有证据,则最大排序序号设为0;若有则最大排序序号就是当前按序号倒序的第一个证据的排序序号
-                if (proofList == null || proofList.size() == 0) {
-                    biggestSort = 0;
-                } else {
-                    if (proofList.get(0).getSysOrder() == null) {
+    @Transactional(rollbackFor = Exception.class)
+    public Integer addSingle(Integer reportId, String patentNo, String name, Integer asCompare) throws IOException {
+        Integer flag = 0;
+        //根据报告id查询报告类型
+        Report report = reportService.getById(reportId);
+        int reportType = report.getType();
+        if (reportType == 7 || (asCompare != null && asCompare == 1)) {
+            //先查询,若没有才去入库
+            List<CompareFiles> compareFiless = this.list(new LambdaQueryWrapper<CompareFiles>().eq(CompareFiles::getReportId, reportId).eq(CompareFiles::getPatentNo, patentNo));
+            CompareFiles compareFiles = new CompareFiles();
+            if (compareFiless == null || compareFiless.size() == 0) {
+                try {
+                    compareFiles.setPatentNo(patentNo);
+                    List<CompareFiles> proofList = this.list(new LambdaQueryWrapper<CompareFiles>().eq(CompareFiles::getReportId, reportId).orderByDesc(CompareFiles::getSysOrder).last("limit 1"));
+                    Integer biggestSort;
+                    //若该报告目前没有证据,则最大排序序号设为0;若有则最大排序序号就是当前按序号倒序的第一个证据的排序序号
+                    if (proofList == null || proofList.size() == 0) {
                         biggestSort = 0;
                     } else {
-                        biggestSort = proofList.get(0).getSysOrder();
-                    }
+                        if (proofList.get(0).getSysOrder() == null) {
+                            biggestSort = 0;
+                        } else {
+                            biggestSort = proofList.get(0).getSysOrder();
+                        }
 
+                    }
+                    compareFiles.setSysOrder(++biggestSort);
+                    compareFiles.setFileType(1);
+                    compareFiles.setReportId(reportId);
+                    compareFiles.setFileName(patentNo + "(" + name + ")");
+                    compareFiles.insert();
+                } catch (Exception e) {
+                    return -1;
                 }
-                compareFiles.setSysOrder(++biggestSort);
-                compareFiles.setFileType(1);
-                compareFiles.setReportId(reportId);
-                compareFiles.setFileName(patentNo + "(" + name + ")");
-                compareFiles.insert();
-            } catch (Exception e) {
-                return -1;
             }
+        } else {
+            return 1;
         }
-        return compareFiles.getId();
+        return flag;
     }
 
     /**
@@ -713,7 +690,9 @@ public class CompareFilesService extends ServiceImpl<CompareFilesMapper, Compare
                 proofVO.setProofConditions(item.getPatentNo());
             } else if (item.getFileType().equals(2)) {
                 ReportFiles reportFiles1 = reportFile.stream().filter(tem -> tem.getId().equals(item.getFileId())).findFirst().orElse(null);
-                proofVO.setProofConditions(reportFiles1.getUrl());
+                if (reportFiles1 != null) {
+                    proofVO.setProofConditions(reportFiles1.getUrl());
+                }
                 proofVO.setProofType("非专利文献");
             }
             proofVO.setSortStr("D" + item.getSysOrder());
@@ -728,14 +707,11 @@ public class CompareFilesService extends ServiceImpl<CompareFilesMapper, Compare
 
     //上传非专利文献证据
     public void addProofByFile(ProofAddNewDTO proofAddNewDTO, List<MultipartFile> files) {
-        log.info("开始处理【上传非专利文献证据】的业务,参数为:{}, {}", proofAddNewDTO, files);
         //检查本次请求合法性(是否有上传非专利文献证据)
-        if (files == null || files.size() == 0) {
-            ThrowException.throwXiaoShiException("未上传文件");
+        if (proofAddNewDTO == null || proofAddNewDTO.getFileName() == null || proofAddNewDTO.getFileName() == "") {
+            ThrowException.throwXiaoShiException("请填写文件名");
         }
         ArrayList<Proof> proofs = new ArrayList<>();
-        //上传非专利文献证据文件附件,附件信息入报告系统文件表后,返回附件ids
-        List<Integer> fileIds = reportFileService.uploadFiles(files);
         //查询证据表,取出该报告已有证据最大排序序号
         List<CompareFiles> proofList = this.list(new LambdaQueryWrapper<CompareFiles>().eq(CompareFiles::getReportId, proofAddNewDTO.getReportId()).orderByDesc(CompareFiles::getSysOrder).last("limit 1"));
         Integer biggestSort;
@@ -753,7 +729,11 @@ public class CompareFilesService extends ServiceImpl<CompareFilesMapper, Compare
         CompareFiles proof = new CompareFiles();
         BeanUtils.copyProperties(proofAddNewDTO, proof);  //DTO赋值给实体类(装载报告id、证据名称、备注)
         proof.setFileType(2);  //装载证据类型
-        proof.setFileId(fileIds.get(0));  //装载文件id
+        if (files != null && files.size() > 0) {
+            //上传非专利文献证据文件附件,附件信息入报告系统文件表后,返回附件ids
+            List<Integer> fileIds = reportFileService.uploadFiles(files);
+            proof.setFileId(fileIds.get(0));  //装载文件id
+        }
         proof.setSysOrder(++biggestSort);
         proof.insert();
 
@@ -761,4 +741,13 @@ public class CompareFilesService extends ServiceImpl<CompareFilesMapper, Compare
 
     }
 
+
+    //删除证据文献
+    public String deleteCompareFile(List<Integer> ids) {
+        if (ids == null || ids.size() == 0) {
+            return Response.error("请至少选择一个证据文献");
+        }
+        this.removeByIds(ids);
+        return Response.success("删除成功");
+    }
 }

+ 1 - 2
RMS/src/main/java/cn/cslg/report/service/business/CompareMessageService.java

@@ -207,7 +207,7 @@ public class CompareMessageService extends ServiceImpl<CompareMessageMapper, Com
         if (patentNos.size() == 0) {
             ipage.setRecords(new ArrayList<>());
             ipage.setSize(0);
-            ipage.setCurrent(queryCMVO.getCurrent());
+            ipage.setCurrent(1);
             ipage.setTotal(0);
 
             return ipage;
@@ -364,7 +364,6 @@ public class CompareMessageService extends ServiceImpl<CompareMessageMapper, Com
             this.remove(queryWrapper);
         }
         return this.saveBatch(compareMessages);
-
     }
 
     /**

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

@@ -116,7 +116,7 @@ public class CompareScenariosService extends ServiceImpl<CompareScenariosMapper,
             //获得对比方案的特征列表
             List<Features> featuresLists =allFeatures.stream().filter(item->item.getRightId().equals(a.getRightId())).collect(Collectors.toList());
             //根据对比方案ID获得所有对比方案和对比记录关联信息
-            List<AssoScenarIOS> select = selects.stream().filter(item->item.getScenariosID()==a.getId()).collect(Collectors.toList());
+            List<AssoScenarIOS> select = selects.stream().filter(item->item.getScenariosID().equals(a.getId())).collect(Collectors.toList());
             //获得Id不为0的对比记录和特征关联Id
             List<Integer> featureRecordIds = select.stream().filter(item->item.getFeatureRecordID()!=0).map(AssoScenarIOS::getFeatureRecordID).collect(Collectors.toList());
             //根据关联Id获得特征Id和对比记录ID

+ 118 - 14
RMS/src/main/java/cn/cslg/report/service/business/ExportArgumentsScenariosService.java

@@ -8,10 +8,12 @@ import cn.cslg.report.common.utils.*;
 import cn.cslg.report.common.utils.SecurityUtils.LoginUtils;
 import cn.cslg.report.entity.Report;
 import cn.cslg.report.entity.ReportDocument;
+import cn.cslg.report.entity.ValueObject;
 import cn.cslg.report.entity.invalidReReport.InvalidReasonField;
 import cn.cslg.report.service.business.InvalidReReport.InvalidReasonFieldService;
 import cn.cslg.report.service.business.InvalidReReport.InvalidReasonService;
 import cn.hutool.core.util.IdUtil;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.deepoove.poi.XWPFTemplate;
 import com.deepoove.poi.config.Configure;
@@ -93,19 +95,48 @@ public class ExportArgumentsScenariosService {
         WordUtil.setParagraph(doc, report.getName() + "无效理由", "宋体", 16, 10, true, ParagraphAlignment.CENTER);
         //设置副标题
         WordUtil.setParagraph(doc, "生成时间:" + new Date().toString(), "宋体", 10, 10, true, ParagraphAlignment.RIGHT);
-        int colTotalCount = fields.size() + 5;
+        int fieldTableCount = 0;
+        if (fields.size() > 1) {
+            fieldTableCount = (fields.size() - 1) * 4 + 1;
+        }
+        int colTotalCount = fieldTableCount + 5;
+
         //总条数
         int dataCount = queryInvalidReasonVOS.size();
         //创建表格
-        XWPFTable xTable = doc.createTable(1, colTotalCount);
+        XWPFTable xTable = doc.createTable(2, colTotalCount);
         CTTblPr tblPr = xTable.getCTTbl().addNewTblPr();
         tblPr.addNewJc().setVal(STJc.CENTER);
         //设置边框
         WordUtil.setTableBolder(xTable, 10, "000000");
         // 创建表头数据
+        int startIndex = 6;
+        int nameListIndex = 6;
+        String[] valueArr = new String[4];
+        valueArr[0] = "起诉人意见";
+        valueArr[1] = "被诉人意见";
+        valueArr[2] = "第三方机构意见";
+        valueArr[3] = "法院意见";
+        int valueArrIndex = 0;
         for (int j = 0; j < colTotalCount; j++) {
-            WordUtil.setCellText(xTable.getRow(0).getCell(j), nameList.get(j), 1200, "宋体", 10, true);
+            if (j < 6) {
+                WordUtil.setCellText(xTable.getRow(0).getCell(j), nameList.get(j), 1200, "宋体", 10, true);
+                WordUtil.setCellText(xTable.getRow(1).getCell(j), nameList.get(j), 1200, "宋体", 10, true);
+                WordUtil.mergeCellsVertically(xTable, j, 0, 1);
+            } else {
+                WordUtil.setCellText(xTable.getRow(0).getCell(j), nameList.get(nameListIndex), 1200, "宋体", 10, true);
+                WordUtil.setCellText(xTable.getRow(1).getCell(j), valueArr[valueArrIndex], 1200, "宋体", 10, true);
+                valueArrIndex++;
+                if (j - startIndex == 3) {
+                    valueArrIndex = 0;
+                    WordUtil.mergeCellsHorizontal(xTable, 0, startIndex, j);
+                    startIndex = j + 1;
+                    nameListIndex++;
+                }
+
+            }
         }
+
         //记录对比文件文件内容map
         Map<Integer, String> fileMap = new TreeMap<>();
         //记录合并数据map
@@ -121,7 +152,10 @@ public class ExportArgumentsScenariosService {
                 map.put(name, map.get(name) + 1);
             }
             List<InvalidReasonFieldValueDTO> fieldValueDTOS = queryInvalidReasonVO.getFields();
-            XWPFTableRow row = xTable.insertNewTableRow(i2 + 1);
+            XWPFTableRow row = xTable.insertNewTableRow(i2 + 2);
+            startIndex = 6;
+            valueArrIndex = 0;
+            nameListIndex = 0;
             for (int j = 0; j < colTotalCount; j++) {
                 XWPFTableCell cell = row.createCell();
                 XWPFRun run;
@@ -137,10 +171,12 @@ public class ExportArgumentsScenariosService {
                         run.setText("不具备创造性");
                     } else if (name == 3) {
                         run.setText("不具备新颖性");
+                    } else if (name == 4) {
+                        run.setText("重复授权");
                     }
                 } else if (j == 2) {
-                    int content = queryInvalidReasonVO.getContent();
-                    if (content == -1) {
+                    Integer content = queryInvalidReasonVO.getContent();
+                    if (content == null || content == -1) {
                         run.setText("说明书");
                     } else {
                         run.setText("权要" + (content + 1));
@@ -179,7 +215,7 @@ public class ExportArgumentsScenariosService {
                                     }
                                 }
                                 //记录对比文件名称字典
-                                if (fileMap.get(proofIn.getSort()) == null&&proofIn.getId()!=0) {
+                                if (fileMap.get(proofIn.getSort()) == null && proofIn.getId() != 0) {
                                     fileMap.put(proofIn.getSort(), proofIn.getFileName());
                                 }
                             }
@@ -189,20 +225,88 @@ public class ExportArgumentsScenariosService {
                         run.setText(stringBuilder.toString());
                     }
                 } else if (j == 4) {
-                    map1.put("argument" + nameCount, queryInvalidReasonVO.getArgumentStr());
+                    String value = queryInvalidReasonVO.getArgumentStr();
+                    String argumentStr = "";
+                    try {
+                        List<String> list = JSONObject.parseObject(value, List.class);
+                        argumentStr = list.get(0);
+                        if (argumentStr == null) {
+                            argumentStr = "";
+                        }
+                    } catch (Exception e) {
+                        argumentStr = value;
+                    }
+                    map1.put("argument" + nameCount, argumentStr);
                     run.setText("{{argument" + nameCount + "}}");
                     nameCount = nameCount + 1;
                 } else {
-                    InvalidReasonField field = fields.get(j - 5);
+                    InvalidReasonField field;
+                    if (j == 5) {
+                        field = fields.get(nameListIndex);
+                        nameListIndex++;
+                    } else {
+                        field = fields.get(nameListIndex);
+                        if (j - startIndex == 3) {
+                            nameListIndex++;
+                        }
+                    }
                     InvalidReasonFieldValueDTO valueDTO = fieldValueDTOS.stream().filter(item -> item.getFieldId().equals(field.getId())).findFirst().orElse(new InvalidReasonFieldValueDTO());
-                    map1.put(valueDTO.getFieldKey() + nameCount, valueDTO.getFieldValue());
-                    run.setText("{{" + valueDTO.getFieldKey() + nameCount + "}}");
+                    String value = valueDTO.getFieldValue();
+                    String str = "";
+                    if (j == 5) {  //复审委意见
+                        try {
+                            List<String> list = JSONObject.parseObject(value, List.class);
+                            str = list.get(0);
+                            if (str == null) {
+                                str = "";
+                            }
+                        } catch (Exception e) {
+                            str = value;
+                        }
+                    } else {
+                        int count = j - startIndex;
+                        try {
+                            ValueObject valueObject = JSONObject.parseObject(value, ValueObject.class);
+                            List<String> suggestion = null;
+                            switch (count) {
+                                case 0:
+                                    suggestion = valueObject.getProsecutor();
+                                    break;
+                                case 1:
+                                    suggestion = valueObject.getRespondent();
+                                    break;
+                                case 2:
+                                    suggestion = valueObject.getInstitution();
+                                    break;
+                                case 3:
+                                    suggestion = valueObject.getCourt();
+                                    startIndex = j + 1;
+                                    break;
+                            }
+                            if (suggestion == null) {
+                                str = "";
+                            } else {
+                                str = suggestion.get(0);
+                            }
+                        } catch (Exception e) {
+                            if (j - startIndex == 3) {
+                                startIndex = j + 1;
+                            }
+                            if (count == 3) {
+                                str = value;
+                            } else {
+                                str = "";
+                            }
+                        }
+                    }
+                    map1.put(valueDTO.getFieldKey() + j + nameCount, str);
+                    run.setText("{{" + valueDTO.getFieldKey() + j + nameCount + "}}");
                     nameCount = nameCount + 1;
                 }
             }
         }
         //添加文件说明行
-        XWPFTableRow row = xTable.insertNewTableRow(dataCount + 1);
+        XWPFTableRow row = xTable.insertNewTableRow(dataCount + 2);
         XWPFTableCell cell = row.createCell();
         XWPFRun run;
         run = WordUtil.setTableCellStyle(cell, "1200", ParagraphAlignment.CENTER, "微软雅黑", 9, false);
@@ -217,9 +321,9 @@ public class ExportArgumentsScenariosService {
             XWPFRun runTem;
             runTem = WordUtil.setTableCellStyle(cellTem, "1200", ParagraphAlignment.CENTER, "微软雅黑", 9, false);
         }
-        WordUtil.mergeCellsHorizontal(xTable, dataCount + 1, 0, colTotalCount - 1);
+        WordUtil.mergeCellsHorizontal(xTable, dataCount + 2, 0, colTotalCount - 1);
         //记录合并起始位置
-        Integer t = 1;
+        Integer t = 2;
         for (int i : map.keySet()) {
             int end = t + map.get(i) - 1;
             WordUtil.mergeCellsVertically(xTable, 1, t, end);

+ 154 - 40
RMS/src/main/java/cn/cslg/report/service/business/FeatureService.java

@@ -2,11 +2,9 @@ package cn.cslg.report.service.business;
 
 import cn.cslg.report.common.model.PatentRightParams;
 import cn.cslg.report.common.model.dto.FeaturesDTO;
+import cn.cslg.report.common.model.dto.QueryRecordsDTO;
 import cn.cslg.report.common.model.dto.invalidReReport.CheckReFeaturesDTO;
-import cn.cslg.report.common.model.vo.PatentRightVo;
-import cn.cslg.report.common.model.vo.PatentVO;
-import cn.cslg.report.common.model.vo.PersonnelVO;
-import cn.cslg.report.common.model.vo.SplitVO;
+import cn.cslg.report.common.model.vo.*;
 import cn.cslg.report.common.model.vo.invalidReReport.QueryAllFeaturesVO;
 import cn.cslg.report.common.utils.CacheUtils;
 import cn.cslg.report.common.utils.PatentRightUtils;
@@ -29,6 +27,8 @@ import cn.dev33.satoken.stp.StpUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -68,24 +68,16 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Features> {
      * @return List<PatentRight>
      * @function 对权要进行合并操作
      */
-
     public List<PatentRight> FormatPatentRights(List<PatentRight> patentRights, String patentNo) {
-        StringBuilder stringBuilder = new StringBuilder();
-        patentRights.forEach(item -> {
-            stringBuilder.append(item.getContent());
-        });
-
-        StringBuilder stringBuilder2 = new StringBuilder();
-        patentRights.forEach(item -> {
-            stringBuilder2.append(item.getContentOut());
-        });
-
-        PatentRightParams params = new PatentRightParams();
-        params.setPatentNo(patentNo);
-        params.setPatentId(-1);
-        params.setContent(stringBuilder.toString());
-        params.setContentOut(stringBuilder2.toString());
-        patentRights = patentRightUtils.formatPatentRight(params);
+        //从pas获得拆分后的权要
+        String resBody = null;
+        try {
+            resBody = outInterfaceService.formatPatentRights(patentNo);
+            JSONObject jsonObject = JSONObject.parseObject(resBody);
+            patentRights = JSON.parseArray(jsonObject.getString("data"), PatentRight.class);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
         return patentRights;
     }
 
@@ -98,7 +90,7 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Features> {
      * @throws IOException
      * @function 从PAS系统上获得权要并拆分
      */
-    @Transactional(rollbackFor = Exception.class, timeout = 10)
+    @Transactional(rollbackFor = Exception.class)
     public String splitPatentRight(SplitVO splitVO) throws IOException {
         String patentNo = splitVO.getPatentNo();
         Integer reportId = splitVO.getReportId();
@@ -168,35 +160,34 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Features> {
         //权要(带拆分的特征)列表
         List<PatentRightVo> patentRightVos = new ArrayList<>();
         //从pas获得权要信息
-        String resBody = outInterfaceService.getPatentRightFromPAS(patentNo);
+//        String resBody = outInterfaceService.getPatentRightFromPAS(patentNo);
+//        JSONObject jsonObject = JSONObject.parseObject(resBody);
+//        //解析jason获得标的专利的权要
+//        List<PatentRight> patentRightsOrgin = JSON.parseArray(jsonObject.getString("data"), PatentRight.class);
+//        //给权要进行格式更改
+//        List<PatentRight> patentRights = FormatPatentRights(patentRightsOrgin, patentNo);
+        //从pas获得拆分后的权要
+        String resBody = outInterfaceService.formatPatentRights(patentNo);
         JSONObject jsonObject = JSONObject.parseObject(resBody);
-        //解析jason获得标的专利的权要
-        List<PatentRight> patentRightsOrgin = JSON.parseArray(jsonObject.getString("data"), PatentRight.class);
-        //给权要进行格式更改
-        List<PatentRight> patentRights = FormatPatentRights(patentRightsOrgin, patentNo);
+        List<PatentRight> patentRights = JSON.parseArray(jsonObject.getString("data"), PatentRight.class);
+
         //List<Integer> partRightIds = new ArrayList<>();  //权要ids
         List<Integer> partRightSorts = new ArrayList<>();  //权要sorts
         List<String> flags = new ArrayList<>();
-        // 当splitType=0仅拆解主权要
-        if (splitType.equals(0)) {
-            //partRightIds = patentRights.stream().filter(item -> item.getType().equals(1)).map(PatentRight::getId).collect(Collectors.toList());
+
+        if (splitType.equals(0)) {  //当splitType=0仅拆解主权要
             partRightSorts = patentRights.stream().filter(item -> item.getType().equals(1)).map(PatentRight::getSort).collect(Collectors.toList());
-        }// 当splitType=1拆解全部权要
-        else if (splitType.equals(1)) {
-            //partRightIds = patentRights.stream().map(PatentRight::getId).collect(Collectors.toList());
+        } else if (splitType.equals(1)) {  //当splitType=1拆解全部权要
             partRightSorts = patentRights.stream().map(PatentRight::getSort).collect(Collectors.toList());
         }
-        //当splitBy=0时仅仅根据“,”拆解
-        if (splitBy == 0) {
+
+        if (splitBy == 0) {  //当splitBy=0时仅仅根据“,”拆解
             flags.add(",");
             flags.add(",");
-        }
-        //当splitBy=1时仅仅根据“;“拆解
-        else if (splitBy == 1) {
+        } else if (splitBy == 1) {  //当splitBy=1时仅仅根据“;“拆解
             flags.add(";");
             flags.add(";");
-        }//当splitBy=2时根据“;“和”,”拆解
-        else if (splitBy == 2) {
+        } else if (splitBy == 2) {  //当splitBy=2时根据“;“和”,”拆解
             flags.add(";");
             flags.add(";");
             flags.add(",");
@@ -539,6 +530,60 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Features> {
         return mapList;
     }
 
+    public Map<String, Object> querySimFeaturePatentByPatentNo(QueryRecordsDTO queryRecordsDTO) throws IOException {
+        Map<String, Object> reMap = new HashMap<>();
+        reMap.put("current", queryRecordsDTO.getCurrent());
+        reMap.put("size", queryRecordsDTO.getSize());
+        reMap.put("total", 0);
+        reMap.put("records", new ArrayList());
+        //根据专利号获得权要
+        String patentNo = queryRecordsDTO.getPatentNo();
+        SplitVO splitVO = new SplitVO();
+        splitVO.setPatentNo(patentNo);
+        splitVO.setSplitBy(2);
+        List<Features> features = this.splitFeatures(splitVO);
+        //获得特征内容
+        List<String> contents = features.stream().map(Features::getContent).collect(Collectors.toList());
+        List<Features> featuresList = featureMapper.getSignPatentNo(contents, patentNo);
+        if (featuresList.size() == 0) {
+            return reMap;
+        }
+        //根据特征Id 查询 对比记录特征关联信息
+        List<Integer> featureIds = featuresList.stream().map(Features::getId).collect(Collectors.toList());
+        //分页查询专利
+        List<String> patentNos = compareRecordsService.getBaseMapper().getCompareNos(featureIds, queryRecordsDTO.getCurrent(), queryRecordsDTO.getSize());
+        // 获得总数
+        Integer total = compareRecordsService.getBaseMapper().getCompareNosCount(featureIds);
+        reMap.put("total", total);
+        //根据专利号查询专利详情
+        PatentVO patentVO = new PatentVO();
+        patentVO.setPatentNos(patentNos);
+        String resBody = outInterfaceService.getPatentList(patentVO);
+        JSONObject jsonObject = JSONObject.parseObject(resBody);
+        List<JSONObject> patentDTOS = JSON.parseArray(jsonObject.get("data").toString(), JSONObject.class);
+        //装载专利信息
+        List<Map<String, Object>> patentMaps = new ArrayList<>();
+        patentNos.forEach(item -> {
+            Map<String, Object> patentMap = new HashMap<>();
+            //根据专利号查询对比记录
+            List<CompareRecordDTO> compareRecords = compareRecordsService.getBaseMapper().getCompareRecordsByNo(featureIds, item);
+            JSONObject jsonObject1 = patentDTOS.stream().filter(tem -> item.equals(tem.get("patentNo"))).findFirst().orElse(null);
+
+            patentMap.put("patentNo", item);
+            if (jsonObject1 != null) {
+                patentMap.put("publicNo", jsonObject1.get("publicNo"));
+                patentMap.put("title", jsonObject1.get("name"));
+            }
+            patentMap.put("compareRecords", compareRecords);
+            patentMaps.add(patentMap);
+
+        });
+
+        reMap.put("records", patentMaps);
+        return reMap;
+    }
+
+
     public Features select(int id) {
         LambdaQueryWrapper<Features> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(Features::getId, id);
@@ -749,4 +794,73 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Features> {
 
         return Response.success(mapList);
     }
+
+    //拆分特征
+    List<Features> splitFeatures(SplitVO splitVO) throws IOException {
+        List<String> flags = new ArrayList<>();
+        String patentNo = splitVO.getPatentNo();
+        Integer splitBy = splitVO.getSplitBy();
+        String resBody = outInterfaceService.getPatentRightFromPAS(patentNo);
+        JSONObject jsonObject = JSONObject.parseObject(resBody);
+        //解析jason获得标的专利的权要
+        List<PatentRight> patentRightsOrgin = JSON.parseArray(jsonObject.getString("data"), PatentRight.class);
+        //给权要进行格式更改
+        List<PatentRight> patentRights = FormatPatentRights(patentRightsOrgin, patentNo);
+
+        if (splitBy == 0) {
+            flags.add(",");
+            flags.add(",");
+        }
+        //当splitBy=1时仅仅根据“;“拆解
+        else if (splitBy == 1) {
+            flags.add(";");
+            flags.add(";");
+        }//当splitBy=2时根据“;“和”,”拆解
+        else if (splitBy == 2) {
+            flags.add(";");
+            flags.add(";");
+            flags.add(",");
+            flags.add(",");
+        }
+        List<Features> featuresList = new ArrayList<>();
+        //将拆解的权要和特征装载到对象PatentRightVo
+        for (int i = 0; i < patentRights.size(); i++) {
+            //特征序号
+            Integer order = 1;
+
+            int rightId = patentRights.get(i).getSort();
+            String name = "权要" + (patentRights.get(i).getSort() + 1);
+            //对需要拆解的权要进行拆解
+            //如果数据库里无拆解记录则手动插入一条
+            List<String> contentOuts = Arrays.asList(patentRights.get(i).getContentOut());
+            List<String> contents = Arrays.asList(patentRights.get(i).getContent());
+            //如果是需要拆解的权要
+
+            //获得权要的译文并且拆解
+            contentOuts = this.splitStringByFlags(patentRights.get(i).getContentOut(), flags);
+            //获得权要的原文并且拆解
+            contents = this.splitStringByFlags(patentRights.get(i).getContent(), flags);
+
+            //遍历拆解出来的内容并装载到features最后存入列表
+            for (int t = 0; t < contents.size(); t++) {
+                Features features = new Features();
+                features.setRightId(patentRights.get(i).getSort());
+                features.setIsFinal(0);
+                features.setSignPatentNo(patentNo);
+                String countOut = contentOuts.size() - 1 >= t ? contentOuts.get(t) : "";
+                features.setContentOut(countOut);
+                features.setContent(contents.get(t));
+                features.setSplitBy(splitBy);
+                features.setRightName(name);
+                features.setFeaturesOrder(order);
+                features.setRightType(patentRights.get(i).getType());
+
+                featuresList.add(features);
+                order += 1;
+            }
+
+        }
+        return featuresList;
+
+    }
 }

+ 13 - 10
RMS/src/main/java/cn/cslg/report/service/business/InvalidReReport/ArgumentsService.java

@@ -89,7 +89,7 @@ public class ArgumentsService extends ServiceImpl<ArgumentsMapper, Arguments> {
             proof.setProofStr(argumentsDTO.getProofStr());
             proof.updateById();
         }
-        if (argumentsDTO.getArgumentStr() != null) {
+
             Integer loginId = loginUtils.getId();
             //装载陈述意见实体类
             Arguments arguments = new Arguments();
@@ -122,7 +122,7 @@ public class ArgumentsService extends ServiceImpl<ArgumentsMapper, Arguments> {
                 scratch.setScratchColor(argumentsDTO.getColor());
                 scratch.insertOrUpdate();
             }
-        }
+
         return Response.success("添加成功");
     }
 
@@ -131,17 +131,17 @@ public class ArgumentsService extends ServiceImpl<ArgumentsMapper, Arguments> {
      *
      * @param argumentsIds
      */
-    public void deleteArguments(List<Integer> argumentsIds) {
+    public boolean deleteArguments(List<Integer> argumentsIds) {
         //判断argumentsId是否为空
         if (argumentsIds == null || argumentsIds.size() == 0) {
-            return;
+            return false;
         }
         //判断陈述意见方案中是否有正在使用的陈述意见
         LambdaQueryWrapper<AssoArguments> assoArgumentsWrapper = new LambdaQueryWrapper<>();
         assoArgumentsWrapper.in(AssoArguments::getArgumentId, argumentsIds);
         List<AssoArguments> assoArguments = assoArgumentsService.list(assoArgumentsWrapper);
         if (assoArguments.size() > 0) {
-            return;
+            return false;
         }
         //根据argumentsId查询陈述意见
         LambdaQueryWrapper<Arguments> argumentsWrapper = new LambdaQueryWrapper<>();
@@ -161,7 +161,7 @@ public class ArgumentsService extends ServiceImpl<ArgumentsMapper, Arguments> {
             scratchService.remove(scratchLambdaQueryWrapper);
         }
         this.remove(argumentsWrapper);
-        return;
+        return true;
     }
 
     /**
@@ -185,10 +185,13 @@ public class ArgumentsService extends ServiceImpl<ArgumentsMapper, Arguments> {
         List<Integer> featureIds = features.stream().map(Features::getId).collect(Collectors.toList());
 
         //根据特征和文件id获得证据
-        LambdaQueryWrapper<ProofStr> featureProofWrapper = new LambdaQueryWrapper<>();
-        featureProofWrapper.in(ProofStr::getFeatureId, featureIds)
-                .eq(ProofStr::getCompareFileId, fileId);
-        List<ProofStr> proofStrs = assoFeatureProofService.list(featureProofWrapper);
+        List<ProofStr> proofStrs =new ArrayList<>();
+        if(featureIds.size()!=0) {
+            LambdaQueryWrapper<ProofStr> featureProofWrapper = new LambdaQueryWrapper<>();
+            featureProofWrapper.in(ProofStr::getFeatureId, featureIds)
+                    .eq(ProofStr::getCompareFileId, fileId);
+            proofStrs = assoFeatureProofService.list(featureProofWrapper);
+        }
         //查询划词信息
         LambdaQueryWrapper<Scratch> scratchLambdaQueryWrapper = new LambdaQueryWrapper<>();
         scratchLambdaQueryWrapper.eq(Scratch::getPatentNo, patentNo);

+ 33 - 10
RMS/src/main/java/cn/cslg/report/service/business/InvalidReReport/InvalidReasonService.java

@@ -9,13 +9,17 @@ import cn.cslg.report.common.utils.Response;
 import cn.cslg.report.common.utils.SecurityUtils.LoginUtils;
 import cn.cslg.report.entity.CompareFiles;
 import cn.cslg.report.entity.Features;
+import cn.cslg.report.entity.PatentRight;
 import cn.cslg.report.entity.Report;
 import cn.cslg.report.entity.invalidReReport.*;
 import cn.cslg.report.mapper.FeatureMapper;
 import cn.cslg.report.mapper.InvalidReReport.InvalidReasonMapper;
+import cn.cslg.report.service.OutInterfaceService;
 import cn.cslg.report.service.business.CompareFilesService;
 import cn.cslg.report.service.business.FeatureService;
 import cn.cslg.report.service.business.ReportService;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -50,6 +54,7 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
     private final CompareFilesService compareFilesService;
     private final InvalidReasonFieldValueService invalidReasonFieldValueService;
     private final AssoProofGroupStrService assoProofGroupStrService;
+    private final OutInterfaceService outInterfaceService;
     /**
      * 判断特征是否有重复的方法
      *
@@ -136,8 +141,7 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
             invalidReason.setCreateId(personnelVO.getId());
             //说明书公开不充分入表
             invalidReason.insert();
-        } else if (invalidName.equals(0)) {//若类型为0,则为“权利要求不清楚”,需要选择涉及内容(content)并输入相关证据(proofStr)
-            if (invalidReasonDTO.getProofStr() != null && invalidReasonDTO.getProofStr() != "") {
+        } else if (invalidName.equals(0)||invalidName.equals(5)) {//若类型为0,则为“权利要求不清楚”,需要选择涉及内容(content)并输入相关证据(proofStr)
                 if (invalidReasonDTO.getInvalidName() == 1) {
                     invalidReasonDTO.setContent(-1);
                 }
@@ -199,10 +203,7 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
                         assoPositionFeatures.insert();
                     }
                 }
-            } else {
-                return Response.error("相关证据不能为空");
-            }
-        } else if (invalidName.equals(2) || invalidName.equals(3)) {//若类型为2,3则proofGroups不能为空
+        } else if (invalidName.equals(2) || invalidName.equals(3)||invalidName.equals(4)) {//若类型为2,3则proofGroups不能为空
             if (invalidReasonDTO.getProofGroups() != null) {
                 //复制DTO类字段到InvalidReason实体类并保存入库
                 BeanUtils.copyProperties(invalidReasonDTO, invalidReason);
@@ -248,7 +249,16 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
         LambdaQueryWrapper<ProofGroup> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.select(ProofGroup::getId);
         queryWrapper.in(ProofGroup::getInvalidReasonId, ids);
-        proofGroupService.remove(queryWrapper);
+      List<ProofGroup> proofGroups =proofGroupService.list(queryWrapper);
+      List<Integer> proofGroupIds =proofGroups.stream().map(ProofGroup::getId).collect(Collectors.toList());
+      if(proofGroupIds.size()!=0){
+          proofGroupService.deleteProofGroup(proofGroupIds);
+      }
+      //删除自定义字段栏位值
+        LambdaQueryWrapper<InvalidReasonFieldValue> valueWrapper =new LambdaQueryWrapper<>();
+      valueWrapper.in(InvalidReasonFieldValue::getInvalidReasonId,ids);
+        invalidReasonFieldValueService.remove(valueWrapper);
+      //
         //根据ids删除InvalidReason内容
         this.removeByIds(ids);
         return Response.success("删除成功");
@@ -272,7 +282,7 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
             //说明书公开不充分入表
             invalidReason.setContent(-1);
             invalidReason.updateById();
-        } else if (invalidName.equals(0)) {//若类型为0,则为“权利要求不清楚”,需要选择涉及内容(content)并输入相关证据(proofStr)
+        } else if (invalidName.equals(0)||invalidName.equals(5)) {//若类型为0,则为“权利要求不清楚”,需要选择涉及内容(content)并输入相关证据(proofStr)
             if (invalidReasonDTO.getProofStr() != null && invalidReasonDTO.getProofStr() != "") {
                 if (invalidReasonDTO.getInvalidName() == 1) {
                     invalidReasonDTO.setContent(-1);
@@ -338,7 +348,8 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
             } else {
                 return Response.error("相关证据不能为空");
             }
-        } else if (invalidName.equals(2) || invalidName.equals(3)) {//若类型为2,3则proofGroups不能为空
+
+        } else if (invalidName.equals(2) || invalidName.equals(3)|| invalidName.equals(4)) {//若类型为2,3则proofGroups不能为空
             if (invalidReasonDTO.getProofGroups() != null) {
                 //复制DTO类字段到InvalidReason实体类并保存入库
                 BeanUtils.copyProperties(invalidReasonDTO, invalidReason);
@@ -395,7 +406,15 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
      * @return
      */
     @Transactional(rollbackFor = Exception.class)
-    public List<QueryInvalidReasonVO> queryInvalidReason(Integer reportId) {
+    public List<QueryInvalidReasonVO> queryInvalidReason(Integer reportId) throws IOException {
+       Report report = reportService.getById(reportId);
+       String patentNo =report.getSignPatentNo();
+        String resBody = outInterfaceService.getPatentRightFromPAS(patentNo);
+        JSONObject jsonObject = JSONObject.parseObject(resBody);
+        //解析jason获得标的专利的权要
+        List<PatentRight> patentRightsOrgin = JSON.parseArray(jsonObject.getString("data"), PatentRight.class);
+        //给权要进行格式更改
+        List<PatentRight> patentRights = featureService.FormatPatentRights(patentRightsOrgin, patentNo);
         List<QueryInvalidReasonVO> queryInvalidReasonVOS = new ArrayList<>();
         //根据报告id查询无效理由
         List<InvalidReason> invalidReasons = new ArrayList<>();
@@ -407,6 +426,10 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
         for (InvalidReason invalidReason : invalidReasons) {
             QueryInvalidReasonVO queryInvalidReasonVO = new QueryInvalidReasonVO();
             BeanUtils.copyProperties(invalidReason, queryInvalidReasonVO);
+       PatentRight patentRight =  patentRights.stream().filter(item->item.getSort().equals(invalidReason.getContent())).findFirst().orElse(null);
+            if(patentRight!=null){
+                queryInvalidReasonVO.setRightContent(patentRight.getContent());
+            }
             queryInvalidReasonVOS.add(queryInvalidReasonVO);
         }
         if (queryInvalidReasonVOS.size() > 0) {

+ 16 - 1
RMS/src/main/java/cn/cslg/report/service/business/InvalidReReport/ProofGroupService.java

@@ -102,6 +102,10 @@ public class ProofGroupService extends ServiceImpl<ProofGroupMapper, ProofGroup>
             LambdaQueryWrapper<AssoProofGroup> queryWrapper = new LambdaQueryWrapper<>();
             queryWrapper.in(AssoProofGroup::getGroupId, ids);
             assoProofGroupService.remove(queryWrapper);
+            //根据证据组合删除证据组合-无效证据关联
+            LambdaQueryWrapper<AssoProofGroupStr> strWrapper =new LambdaQueryWrapper<>();
+            strWrapper.in(AssoProofGroupStr::getProofGroupId,ids);
+            assoProofGroupStrService.remove(strWrapper);
             //根据ids批量删除证据组合
             this.removeByIds(ids);
         } else {
@@ -224,11 +228,14 @@ public class ProofGroupService extends ServiceImpl<ProofGroupMapper, ProofGroup>
      * @param invalidReasonId 无效理由id
      * @return
      */
-    public List<ProofGroupDetailVO> queryDetailByInvalidId(Integer invalidReasonId) {
+    public List<ProofGroupDetailVO> queryDetailByInvalidId(Integer invalidReasonId,Integer proofGroupId) {
         List<ProofGroupDetailVO> proofDetailVOS = new ArrayList<>();
         //根据无效理由和证据id查询证据组合
         LambdaQueryWrapper<ProofGroup> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         lambdaQueryWrapper.eq(ProofGroup::getInvalidReasonId, invalidReasonId);
+        if(proofGroupId!=null){
+            lambdaQueryWrapper.eq(ProofGroup::getId, proofGroupId);
+        }
         List<ProofGroup> proofGroups = proofGroupService.list(lambdaQueryWrapper);
         if (proofGroups.size() == 0) {
             return new ArrayList<>();
@@ -289,6 +296,14 @@ public class ProofGroupService extends ServiceImpl<ProofGroupMapper, ProofGroup>
                 proofIn.setPatentNo(compareFile.getPatentNo());
                 proofIns.add(proofIn);
             }
+            if(proofIdsPart.contains(0)){
+                ProofGroupDetailVO.ProofIn proofIn = new ProofGroupDetailVO.ProofIn();
+                proofIn.setId(0);
+                proofIns.add(proofIn);
+                proofIn.setSort(compareFilesPart.size()+1);
+
+
+            }
            //获得证据组合里的无效证据
             List<Integer> proofStrIdsPart =assoProofGroupStrs.stream().filter(item->item.getProofGroupId().equals(proofGroup.getId())).map(AssoProofGroupStr::getProofStrId).collect(Collectors.toList());
             List<ProofStr> proofStrsPart =proofStrs.stream().filter(item->proofStrIdsPart.contains(item.getId())).collect(Collectors.toList());

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

@@ -44,9 +44,9 @@ public class ReferencesService extends ServiceImpl<ReferencesMapper, References>
         wrapper.eq(AssoReferenceFile::getReferenceId,references.getId());
         List<AssoReferenceFile> assoes= assoReferenceFileService.list(wrapper);
         List<Integer> fileIds =assoes.stream().map(AssoReferenceFile::getFileId).collect(Collectors.toList());
-        //删除对应的对比文件
+        //删除对应的参考资料文件
         reportFileService.removeByIds(fileIds);
-        //关联的对比方案与对比记录的删除
+        //参考资料与文件关联表删除数据
         assoReferenceFileService.remove(wrapper);
         return Response.success();
     }

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

@@ -256,7 +256,7 @@ public class ReportDocumentService extends ServiceImpl<ReportDocumentMapper, Rep
                 feaListContent.forEach(te -> disclosures.append("(" + te + ")"));
                 disclosures.append("\n");
             }
-            int order = Integer.parseInt(OtherName.get(item.get("publicNo")).toString());
+            int order = Integer.parseInt(OtherName.get(item.get("patentNo")).toString());
 
             patentListMap.put("name", item.get("name"));
             patentListMap.put("fileName", "D" + order);
@@ -264,7 +264,7 @@ public class ReportDocumentService extends ServiceImpl<ReportDocumentMapper, Rep
             patentListMap.put("publicNo", item.get("publicNo"));
             patentListMap.put("SSIM", "");
             patentListMap.put("applicant", applicants);
-            patentListMap.put("patentNo", item.get("publicNo"));
+            patentListMap.put("patentNo", item.get("patentNo"));
             patentListMap.put("abstractStr", item.get("abstractStr"));
             patentListMap.put("compareFileName", "对比文件" + (order));
             patentListMap.put("applicationDate", item.get("applicationDate"));
@@ -590,6 +590,8 @@ public class ReportDocumentService extends ServiceImpl<ReportDocumentMapper, Rep
                 patentMap.put("applicant", applicants);
                 patentMap.put("rightPerson", rightPerson);
                 patentMap.put("affair", affair);
+                //优先权日
+                patentMap.put("priorityDate", patent.get("priorityDate"));
                 //图示
                 patentMap.put("abstractPath", "http://139.224.24.90:8081" + patent.get("abstractPath"));
                 //获得专利对比记录的信息

+ 217 - 18
RMS/src/main/java/cn/cslg/report/service/business/ReportService.java

@@ -10,14 +10,11 @@ import cn.cslg.report.entity.*;
 
 import cn.cslg.report.entity.asso.AssoReportFile;
 import cn.cslg.report.entity.asso.AssoReportPerson;
-import cn.cslg.report.entity.invalidReReport.InvalidReReport;
-import cn.cslg.report.entity.invalidReReport.InvalidReason;
+import cn.cslg.report.entity.invalidReReport.*;
 import cn.cslg.report.exception.XiaoShiException;
 import cn.cslg.report.mapper.ReportMapper;
 import cn.cslg.report.service.*;
-import cn.cslg.report.service.business.InvalidReReport.InvalidReReportService;
-import cn.cslg.report.service.business.InvalidReReport.InvalidReasonFieldService;
-import cn.cslg.report.service.business.InvalidReReport.InvalidReasonService;
+import cn.cslg.report.service.business.InvalidReReport.*;
 import cn.cslg.report.service.business.asso.AssoReportPersonService;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -25,9 +22,15 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
+import okhttp3.MediaType;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.RequestBody;
 import org.springframework.beans.BeanUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
@@ -35,7 +38,9 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.lang.reflect.Type;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -71,6 +76,14 @@ public class ReportService extends ServiceImpl<ReportMapper, Report> {
     private final InvalidReReportService invalidReReportService;
     private final InvalidReasonFieldService invalidReasonFieldService;
     private final InvalidReasonService invalidReasonService;
+    private final ArgumentsService argumentsService;
+    private final AssoPositionFeaturesService assoPositionFeaturesService;
+    private final ProofGroupService proofGroupService;
+    private final AssoProofGroupStrService assoProofGroupStrService;
+    private final InvalidProcessService invalidProcessService;
+    private final ProofStrService proofStrService;
+    private final ArgumentsScenarioService argumentsScenarioService;
+    private final ScratchService scratchService;
 
     private Report loadReport(ReportDTO reportDto) {
         Report report = new Report();
@@ -140,12 +153,7 @@ public class ReportService extends ServiceImpl<ReportMapper, Report> {
         }
         //新增报告
         Report report = this.loadReport(reportDto);
-        if (reportDto.getTrack() != null && reportDto.getTrack()) {
-            report.setCronConclusion(null);
-            report.setConclusionId(null);
-        }
         report.insert();
-        //TODO 当是无效应对报告时,在无效应对报告里插入信息
         if (files != null && files.size() != 0) {
             //当
             if (report.getStatus() != 3) {
@@ -185,12 +193,38 @@ public class ReportService extends ServiceImpl<ReportMapper, Report> {
                     copyService.CopyPatentLabels(oldFields, fields);
                 }
             }
+            if (report.getType() == 7) {
+                invalidReasonFieldService.addDefault(report.getId());
+                // 当是无效应对报告时,在无效应对报告里插入信息
+                InvalidReReport invalidReReport = new InvalidReReport();
+                invalidReReport.setReportId(report.getId());
+                invalidReReport.setCreateId(loginUtils.getId());
+                invalidReReport.setInvalidApplication(reportDto.getInvalidApplication());
+                invalidReReport.setCaseNumber(reportDto.getCaseNumber());
+                invalidReReport.setIssueNumber(reportDto.getIssueNumber());
+                invalidReReport.setInventionName(reportDto.getInventionName());
+                invalidReReport.setCurrentApplication(reportDto.getCurrentApplication());
+                invalidReReport.setInvalidApplication(reportDto.getInvalidApplication());
+                invalidReReport.setSuggestion(reportDto.getSuggestion());
+                invalidReReport.insert();
+            }
         } else {
             if (report.getType() != 7) {
                 reportFieldService.addDefaultField(report.getId(), report.getType());
             } else {
                 invalidReasonFieldService.addDefault(report.getId());
-
+                // 当是无效应对报告时,在无效应对报告里插入信息
+                InvalidReReport invalidReReport = new InvalidReReport();
+                invalidReReport.setReportId(report.getId());
+                invalidReReport.setCreateId(loginUtils.getId());
+                invalidReReport.setInvalidApplication(reportDto.getInvalidApplication());
+                invalidReReport.setCaseNumber(reportDto.getCaseNumber());
+                invalidReReport.setIssueNumber(reportDto.getIssueNumber());
+                invalidReReport.setInventionName(reportDto.getInventionName());
+                invalidReReport.setCurrentApplication(reportDto.getCurrentApplication());
+                invalidReReport.setInvalidApplication(reportDto.getInvalidApplication());
+                invalidReReport.setSuggestion(reportDto.getSuggestion());
+                invalidReReport.insert();
             }
         }
 
@@ -283,6 +317,18 @@ public class ReportService extends ServiceImpl<ReportMapper, Report> {
         }
     }
 
+    //查询报告,由分析系统调用使用
+    public String queryReportByPAS() {
+        LambdaQueryWrapper<Report> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.ne(Report::getId, 0);
+        queryWrapper.orderByDesc(Report::getCreateTime);
+        SecurityUtils.startDataScope("/pcs/report/query");
+        List<Report> reports = this.list(queryWrapper);
+        List<Integer> reportIds = reports.stream().map(Report::getId).collect(Collectors.toList());
+        long count = this.count(queryWrapper);
+        return Response.success(reportIds, DataUtils.setPageColumn(0, 0, Math.toIntExact(count)));
+    }
+
     /**
      * @param reports
      * @return
@@ -444,6 +490,23 @@ public class ReportService extends ServiceImpl<ReportMapper, Report> {
             List<Integer> fileIdList = reportFileService.uploadFiles(files);
             assoReportFileService.addAsso(reportDto.getId(), fileIdList);
         }
+        if (report.getType() == 7) {
+            LambdaQueryWrapper<InvalidReReport> wrapper1 = new LambdaQueryWrapper<>();
+            wrapper1.eq(InvalidReReport::getReportId, report.getId());
+            List<InvalidReReport> invalidReReports = invalidReReportService.list(wrapper1);
+            if (invalidReReports.size() > 0) {
+                InvalidReReport invalidReReport = invalidReReports.get(0);
+                invalidReReport.setInvalidApplication(reportDto.getInvalidApplication());
+                invalidReReport.setCaseNumber(reportDto.getCaseNumber());
+                invalidReReport.setIssueNumber(reportDto.getIssueNumber());
+                invalidReReport.setInventionName(reportDto.getInventionName());
+                invalidReReport.setCurrentApplication(reportDto.getCurrentApplication());
+                invalidReReport.setInvalidApplication(reportDto.getInvalidApplication());
+                invalidReReport.setSuggestion(reportDto.getSuggestion());
+                invalidReReport.updateById();
+
+            }
+        }
         return report.updateById();
 
     }
@@ -458,8 +521,16 @@ public class ReportService extends ServiceImpl<ReportMapper, Report> {
     public String reportDele(int id) throws IOException {
         //删除所有和报告有关的任务
         taskService.deleteTaskByreportId(id);
+        //删除陈述意见表数据
+        argumentsService.remove(new LambdaQueryWrapper<Arguments>().eq(Arguments::getReportId, id));
         //删除所有和报告有关的特征
-        featureService.delByReportId(id);
+        List<Features> features = featureService.list(new LambdaQueryWrapper<Features>().eq(Features::getReportId, id));
+        //删除特征位置关联表数据
+        if (features != null && features.size() > 0) {
+            List<Integer> featureIds = features.stream().map(Features::getId).collect(Collectors.toList());
+            assoPositionFeaturesService.remove(new LambdaQueryWrapper<AssoPositionFeatures>().in(AssoPositionFeatures::getFeaturesID, featureIds));
+            featureService.delByReportId(id);
+        }
         //删除所有和报告有关的自定义字段
         reportFieldService.deleteByReportId(id);
         //删除所有和报告有关的对比方案
@@ -474,6 +545,8 @@ public class ReportService extends ServiceImpl<ReportMapper, Report> {
         compareFilesService.delete(id);
         //导入删除导入任务
         importTaskService.deleteByRortID(id);
+        //删除分析系统该报告的所有导入导出任务
+        outInterfaceService.deleteReportTasks(id);
 
         //删除报告文件导出
         reportDocumentService.deleteByReportId(id);
@@ -481,12 +554,31 @@ public class ReportService extends ServiceImpl<ReportMapper, Report> {
         reportReferencesService.deleteByReportId(id);
         //删除对比信息
         compareMessageService.deleteByreportID(id);
-        //TODO 当时无效应对报告时
-
         //删除与报告关联的表数据
         invalidReReportService.remove(new LambdaQueryWrapper<InvalidReReport>().eq(InvalidReReport::getReportId, id));
         //删除无效理由表数据
-        invalidReasonService.remove(new LambdaQueryWrapper<InvalidReason>().eq(InvalidReason::getReportId, id));
+        List<InvalidReason> invalidReasons = invalidReasonService.list(new LambdaQueryWrapper<InvalidReason>().eq(InvalidReason::getReportId, id));
+        if (invalidReasons != null && invalidReasons.size() > 0) {
+            List<Integer> invalidReasonIds = invalidReasons.stream().map(InvalidReason::getId).collect(Collectors.toList());
+            //删除证据组合表数据
+            List<ProofGroup> proofGroups = proofGroupService.list(new LambdaQueryWrapper<ProofGroup>().in(ProofGroup::getInvalidReasonId, invalidReasonIds));
+            if (proofGroups != null && proofGroups.size() > 0) {
+                List<Integer> proofGroupIds = proofGroups.stream().map(ProofGroup::getId).collect(Collectors.toList());
+                //删除证据组合无效证据关联表数据
+                assoProofGroupStrService.remove(new LambdaQueryWrapper<AssoProofGroupStr>().in(AssoProofGroupStr::getProofGroupId, proofGroupIds));
+                proofGroupService.removeByIds(proofGroupIds);
+            }
+            //删除无效理由表数据
+            invalidReasonService.removeByIds(invalidReasons);
+        }
+        //删除无效事务表数据
+        invalidProcessService.remove(new LambdaQueryWrapper<InvalidProcess>().eq(InvalidProcess::getReportId, id));
+        //删除无效理由证据表数据
+        proofStrService.remove(new LambdaQueryWrapper<ProofStr>().eq(ProofStr::getReportId, id));
+        //删除陈述意见方案表数据
+        argumentsScenarioService.remove(new LambdaQueryWrapper<ArgumentsScenarios>().eq(ArgumentsScenarios::getReportId, id));
+        //删除"SCRATCH"表数据
+        scratchService.remove(new LambdaQueryWrapper<Scratch>().eq(Scratch::getReportId, id));
 
         Boolean dele = this.removeById(id);
         if (dele == true) {
@@ -741,8 +833,8 @@ public class ReportService extends ServiceImpl<ReportMapper, Report> {
         reports.add(report);
         try {
             //调用this.reportData装载报告
-            List<Report> reports1 = this.reportData(reports);
-            Report report1 = reports1.get(0);
+//            List<Report> reports1 = this.reportData(reports);
+            Report report1 = reports.get(0);
             //若报告为无效应对报告则从无效应对报告表中获得无效对应报告拓展信息
             if (report1.getType().equals(7)) {
                 LambdaQueryWrapper<InvalidReReport> queryWrapper = new LambdaQueryWrapper<>();
@@ -757,12 +849,119 @@ public class ReportService extends ServiceImpl<ReportMapper, Report> {
             } else {
                 BeanUtils.copyProperties(report1, reportDeVO);
             }
-        } catch (IOException e) {
+            reportDeVO.setId(report.getId());
+        } catch (Exception e) {
             e.printStackTrace();
         }
         return reportDeVO;
     }
 
+    /**
+     * 查询租户报告使用报表
+     *
+     * @return
+     * @throws IOException
+     */
+    public List<ReportUsedByTenantVO> getReportUsedByTenant(List<Integer> tenantIds) throws IOException {
+        List<ReportUsedByTenantVO> reportUsedByTenantVOS = new ArrayList<>();
+        //调用权限系统接口获取租户下人员ids
+        String reData = this.getReportTenantVOFromPCS(tenantIds);
+        //字符串转对象集合
+        Gson gson = new Gson();
+        Type listType = new TypeToken<List<ReportTenantVO>>() {
+        }.getType();
+        List<ReportTenantVO> reportTenantVOS = gson.fromJson(reData, listType);
+        //遍历
+        for (ReportTenantVO rT : reportTenantVOS) {
+            //人员ids
+            List<Integer> personnelIds = rT.getPersonnelIds();
+            if (personnelIds.size() > 0) {
+                //查出所有人员ids名下的报告以及数量
+                LambdaQueryWrapper<Report> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.in(Report::getCreatePersonId, personnelIds);
+                //所有人员ids名下报告的数量
+                Long count = this.count(queryWrapper);
+                //查询出所有人员ids名下的报告集合
+                List<Report> reports = this.list(queryWrapper);
+                if (reports.size() > 0) {
+                    for (Report report : reports) {
+                        ReportUsedByTenantVO reportUsedByTenantVO = new ReportUsedByTenantVO();
+                        //租户名
+                        reportUsedByTenantVO.setTenantName(rT.getTenantName());
+                        //报告名
+                        reportUsedByTenantVO.setReportName(report.getName());
+                        Integer reportNum = Long.valueOf(count).intValue();
+                        //报告数量
+                        reportUsedByTenantVO.setReportNum(reportNum);
+                        reportUsedByTenantVOS.add(reportUsedByTenantVO);
+                    }
+                } else {
+                    ReportUsedByTenantVO reportUsedByTenantVO = new ReportUsedByTenantVO();
+                    //租户名
+                    reportUsedByTenantVO.setTenantName(rT.getTenantName());
+                    //报告数量
+                    reportUsedByTenantVO.setReportNum(0);
+                    reportUsedByTenantVOS.add(reportUsedByTenantVO);
+                }
+            }
+        }
+        return reportUsedByTenantVOS;
+    }
+
+    /**
+     * 调用权限系统查询租户人员ids接口
+     *
+     * @return
+     * @throws IOException
+     */
+    public String getReportTenantVOFromPCS(List<Integer> tenantIds) throws IOException {
+        String param = new Gson().toJson(tenantIds);
+        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
+        OkHttpClient okHttpClient = new OkHttpClient.Builder()
+                .connectTimeout(60, TimeUnit.SECONDS)
+                .writeTimeout(60, TimeUnit.SECONDS)
+                .readTimeout(60, TimeUnit.SECONDS)
+                .build();
+        Request request = new Request.Builder()
+                .url("http://localhost:8871" + "/permission/api/exportExcel/getTenantPerson")
+                .post(requestBody)
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
+    /**
+     * 传入租户id,返回报告数量
+     *
+     * @param tenantId
+     * @return
+     * @throws IOException
+     */
+    public Integer getReportNumOfTotal(Integer tenantId) throws IOException {
+        //字符串转对象!
+        List<Integer> tenantIds = new ArrayList<>();
+        tenantIds.add(tenantId);
+        String reData = this.getReportTenantVOFromPCS(tenantIds);
+        //字符串转对象集合
+        Gson gson = new Gson();
+        Type listType = new TypeToken<List<ReportTenantVO>>() {
+        }.getType();
+        List<ReportTenantVO> reportTenantVOS = gson.fromJson(reData, listType);
+        ReportTenantVO reportTenantVO = reportTenantVOS.get(0);
+        //人员ids
+        List<Integer> personnelIds = reportTenantVO.getPersonnelIds();
+        if (personnelIds.size() > 0) {
+            //查出所有人员ids名下的报告以及数量
+            LambdaQueryWrapper<Report> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.in(Report::getCreatePersonId, personnelIds);
+            //所有人员ids名下报告的数量
+            Long count = this.count(queryWrapper);
+            Integer reportNum = Long.valueOf(count).intValue();
+            return reportNum;
+        } else {
+            return 0;
+        }
+    }
+
     public List<Report> getReportsByReportIds(List<Integer> reportIds) {
         List<Report> reports = this.list(new LambdaQueryWrapper<Report>().in(Report::getId, reportIds));
         return reports;

+ 10 - 1
RMS/src/main/java/cn/cslg/report/service/business/SystemDictItemService.java

@@ -55,7 +55,7 @@ public class SystemDictItemService extends ServiceImpl<SystemDictItemMapper, Sys
 
     public List<Map<String, Object>> getCronConClusions(List<Integer> types) {
         if(types==null||types.size()==0){
-            types=Arrays.asList(0,1,2,3,4,5);
+            types=Arrays.asList(0,1,2,3,4,5,6);
         }
         List<String> keys = new ArrayList<>();
         for (Integer type : types) {
@@ -78,6 +78,9 @@ public class SystemDictItemService extends ServiceImpl<SystemDictItemMapper, Sys
                 case 5:
                     keys.add("AVOID_ASSESS");
                     break;
+                case 6:
+                    keys.add("REINVALID_ASSESS");
+                    break;
             }
         }
         //根据key值查
@@ -112,6 +115,12 @@ public class SystemDictItemService extends ServiceImpl<SystemDictItemMapper, Sys
                     map.put("rType", 5);
                     map.put("rTypeName", "回避设计");
                     break;
+
+                case "REINVALID_ASSESS":
+                    map.put("rType", 6);
+                    map.put("rTypeName", "无效应对");
+                    break;
+
             }
             map.put("cTypeId", item.getId());
             map.put("cTypeName", item.getDictChildLabel());

+ 0 - 49
RMS/src/main/java/cn/cslg/report/service/business/TaskService.java

@@ -465,55 +465,6 @@ public class TaskService extends ServiceImpl<TaskMapper, Task> {
         return Response.success();
     }
 
-    //返回任务专利清单
-    @Transactional(rollbackFor = Exception.class)
-    public String reTaskPatents(PatentVO patentVO) throws ParseException, IOException {
-        List<String> taskPatentNos = new ArrayList<>();
-        //根据报告Id和类型获得任务的清单
-        LambdaQueryWrapper<AssoTaskPersonel> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(AssoTaskPersonel::getReportId, patentVO.getReportId());
-        //当taskID存在时
-        if (patentVO.getTaskId() != null) {
-            queryWrapper.eq(AssoTaskPersonel::getTaskId, patentVO.getTaskId());
-            if (patentVO.getTaskStatus() != 3) {
-                queryWrapper.eq(AssoTaskPersonel::getState, patentVO.getTaskStatus());
-            }
-            List<AssoTaskPersonel> assoTaskPersonels = assoTaskPersonelService.list(queryWrapper);
-            if (patentVO.getTaskStatus() != 3) {
-                taskPatentNos = assoTaskPersonels.stream().filter(item -> item.getState() == patentVO.getTaskStatus()).map(AssoTaskPersonel::getPatentNo).collect(Collectors.toList());
-            } else {
-                taskPatentNos = assoTaskPersonels.stream().map(AssoTaskPersonel::getPatentNo).collect(Collectors.toList());
-            }
-        }
-        //当taskId不存在时
-        else {
-            List<AssoTaskPersonel> assoTaskPersonels = assoTaskPersonelService.list(queryWrapper);
-            taskPatentNos = assoTaskPersonels.stream().map(AssoTaskPersonel::getPatentNo).collect(Collectors.toList());
-        }
-        //无查询条件
-        if (patentVO.getFiledOptions().size() == 0 || patentVO.getFiledOptions() == null) {
-            patentVO.setPatentNos(taskPatentNos);
-        }
-        //有查询条件时,自定义字段的专利号和任务的专利号取交集
-        else {
-            List<String> patentNos = reportFieldService.getPatentNo(patentVO.getFiledOptions(), taskPatentNos);
-            List<String> jiaoList = new ArrayList<>(taskPatentNos);
-            jiaoList.retainAll(patentNos);
-            patentVO.setPatentNos(jiaoList);
-        }
-        String res = outInterfaceService.getPatentFromPAS(patentVO, 1);
-        JSONObject jsonObject = JSONObject.parseObject(res);
-        JSONObject jsonObject1 = JSONObject.parseObject(jsonObject.get("data").toString());
-        List<JSONObject> jsonObjects = JSONArray.parseArray(jsonObject1.get("records").toString(), JSONObject.class);
-        for (int i = 0; i < jsonObjects.size(); i++) {
-            jsonObjects.get(i).put("field", reportFieldService.getPatentFieldByPatentIdAndProjectId(patentVO.getReportId(), jsonObjects.get(i).getString("patentNo")));
-        }
-        jsonObject1.put("records", jsonObjects);
-        jsonObject.put("data", jsonObject1);
-
-
-        return jsonObject.toString();
-    }
 
     //返回任务专利清单
     @Transactional(rollbackFor = Exception.class)

+ 1 - 1
RMS/src/main/java/cn/cslg/report/service/impl/AvoidDesignDirectionServiceImpl.java

@@ -174,7 +174,7 @@ public class AvoidDesignDirectionServiceImpl implements IAvoidDesignDirectionSer
         //解析jason获得标的专利的权要
         List<PatentRight> patentRightsOrgin = JSON.parseArray(jsonObject.getString("data"), PatentRight.class);
         //给权要进行格式更改
-        List<PatentRight> patentRights = featureService.FormatPatentRights(patentRightsOrgin,signPatentNo);
+        List<PatentRight> patentRights = featureService.FormatPatentRights(patentRightsOrgin, signPatentNo);
 
         ArrayList<AvoidDesignRightVO> rights = new ArrayList<>();
         for (PatentRight patentRight : patentRights) {

+ 55 - 8
RMS/src/main/resources/mapper/CompareRecordsMapper.xml

@@ -1,18 +1,65 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="cn.cslg.report.mapper.CompareRecordsMapper">
-   <select id="find" resultType="cn.cslg.report.entity.CompareRecords">
-       select *  from COMPARE_RECORDS where PATENT_NO=#{patentNo} and PERSON_ID=#{personId} and REPORT_ID=#{reportId}
-   </select>
+    <select id="find" resultType="cn.cslg.report.entity.CompareRecords">
+        select *
+        from COMPARE_RECORDS
+        where PATENT_NO = #{patentNo}
+          and PERSON_ID = #{personId}
+          and REPORT_ID = #{reportId}
+    </select>
 
-<select id="getCompareRecords" resultType="cn.cslg.report.entity.CompareRecords">
-    select * from COMPARE_RECORDS where REPORT_ID=#{reportId}
-</select>
+    <select id="getCompareRecords" resultType="cn.cslg.report.entity.CompareRecords">
+        select *
+        from COMPARE_RECORDS
+        where REPORT_ID = #{reportId}
+    </select>
     <select id="findCompareRecords" resultType="cn.cslg.report.entity.CompareRecords">
-        select * from COMPARE_RECORDS where PERSON_ID=#{personId}
+        select *
+        from COMPARE_RECORDS
+        where PERSON_ID = #{personId}
     </select>
     <update id="updateCompareRecords">
-        update COMPARE_RECORDS set FEATURES_ID=#{featuresId} where ID=#{id}
+        update COMPARE_RECORDS
+        set FEATURES_ID=#{featuresId}
+        where ID = #{id}
     </update>
 
+
+    <select id="getCompareNos" resultType="java.lang.String">
+        select r.PATENT_NO from ASSO_RECORDS_FEATURES f left join COMPARE_RECORDS r on f.RECORDS_ID = r.ID
+        <where>
+           f.FEATURE_ID in
+            <foreach item="item" collection="featuresIds" index="index" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+          group by r.PATENT_NO
+            <if test="current!=null and size!=null">
+                limit ${(current -1)*size},${current*size}
+            </if>
+        </where>
+    </select>
+    <select id="getCompareNosCount" resultType="java.lang.Integer">
+        select count(*) from (select r.PATENT_NO from ASSO_RECORDS_FEATURES f left join COMPARE_RECORDS r on f.RECORDS_ID = r.ID
+        <where>
+            f.FEATURE_ID in
+            <foreach item="item" collection="featuresIds" index="index" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+            group by r.PATENT_NO
+        </where>
+        ) T
+    </select>
+
+    <select id="getCompareRecordsByNo" resultType="cn.cslg.report.common.model.vo.CompareRecordDTO">
+        select r.*,t.CONTENT as featureContent from ASSO_RECORDS_FEATURES f left join COMPARE_RECORDS r on f.RECORDS_ID = r.ID
+        left join FEATURES t on f.FEATURE_ID = t.ID
+        <where>
+<!--            f.FEATURE_ID in-->
+<!--            <foreach item="item" collection="featuresIds" index="index" open="(" separator="," close=")">-->
+<!--                #{item}-->
+<!--            </foreach>-->
+           and r.PATENT_NO= #{patentNo}
+        </where>
+    </select>
 </mapper>

+ 1 - 1
RMS/target/classes/application.yml

@@ -26,7 +26,7 @@ spring:
       max-file-size: 1000MB
       max-request-size: 1000MB
   profiles:
-    active: prodNetIn
+    active: dev
   jackson:
     default-property-inclusion: non_null
     serialization:

BIN=BIN
RMS/target/classes/cn/cslg/report/controller/CompareController.class


BIN=BIN
RMS/target/classes/cn/cslg/report/controller/CompareFilesController.class


BIN=BIN
RMS/target/classes/cn/cslg/report/controller/CompareRecordsController.class


BIN=BIN
RMS/target/classes/cn/cslg/report/controller/FeatureController.class


BIN=BIN
RMS/target/classes/cn/cslg/report/controller/ReportController.class


BIN=BIN
RMS/target/classes/cn/cslg/report/mapper/CompareRecordsMapper.class


BIN=BIN
RMS/target/classes/cn/cslg/report/service/business/AssoTaskPersonelService.class


BIN=BIN
RMS/target/classes/cn/cslg/report/service/business/CompareFilesService.class


BIN=BIN
RMS/target/classes/cn/cslg/report/service/business/CompareMessageService.class


BIN=BIN
RMS/target/classes/cn/cslg/report/service/business/FeatureService.class


BIN=BIN
RMS/target/classes/cn/cslg/report/service/business/ReportDocumentService.class


BIN=BIN
RMS/target/classes/cn/cslg/report/service/business/ReportService.class


BIN=BIN
RMS/target/classes/cn/cslg/report/service/business/SystemDictItemService.class


+ 55 - 8
RMS/target/classes/mapper/CompareRecordsMapper.xml

@@ -1,18 +1,65 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="cn.cslg.report.mapper.CompareRecordsMapper">
-   <select id="find" resultType="cn.cslg.report.entity.CompareRecords">
-       select *  from COMPARE_RECORDS where PATENT_NO=#{patentNo} and PERSON_ID=#{personId} and REPORT_ID=#{reportId}
-   </select>
+    <select id="find" resultType="cn.cslg.report.entity.CompareRecords">
+        select *
+        from COMPARE_RECORDS
+        where PATENT_NO = #{patentNo}
+          and PERSON_ID = #{personId}
+          and REPORT_ID = #{reportId}
+    </select>
 
-<select id="getCompareRecords" resultType="cn.cslg.report.entity.CompareRecords">
-    select * from COMPARE_RECORDS where REPORT_ID=#{reportId}
-</select>
+    <select id="getCompareRecords" resultType="cn.cslg.report.entity.CompareRecords">
+        select *
+        from COMPARE_RECORDS
+        where REPORT_ID = #{reportId}
+    </select>
     <select id="findCompareRecords" resultType="cn.cslg.report.entity.CompareRecords">
-        select * from COMPARE_RECORDS where PERSON_ID=#{personId}
+        select *
+        from COMPARE_RECORDS
+        where PERSON_ID = #{personId}
     </select>
     <update id="updateCompareRecords">
-        update COMPARE_RECORDS set FEATURES_ID=#{featuresId} where ID=#{id}
+        update COMPARE_RECORDS
+        set FEATURES_ID=#{featuresId}
+        where ID = #{id}
     </update>
 
+
+    <select id="getCompareNos" resultType="java.lang.String">
+        select r.PATENT_NO from ASSO_RECORDS_FEATURES f left join COMPARE_RECORDS r on f.RECORDS_ID = r.ID
+        <where>
+           f.FEATURE_ID in
+            <foreach item="item" collection="featuresIds" index="index" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+          group by r.PATENT_NO
+            <if test="current!=null and size!=null">
+                limit ${(current -1)*size},${current*size}
+            </if>
+        </where>
+    </select>
+    <select id="getCompareNosCount" resultType="java.lang.Integer">
+        select count(*) from (select r.PATENT_NO from ASSO_RECORDS_FEATURES f left join COMPARE_RECORDS r on f.RECORDS_ID = r.ID
+        <where>
+            f.FEATURE_ID in
+            <foreach item="item" collection="featuresIds" index="index" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+            group by r.PATENT_NO
+        </where>
+        ) T
+    </select>
+
+    <select id="getCompareRecordsByNo" resultType="cn.cslg.report.common.model.vo.CompareRecordDTO">
+        select r.*,t.CONTENT as featureContent from ASSO_RECORDS_FEATURES f left join COMPARE_RECORDS r on f.RECORDS_ID = r.ID
+        left join FEATURES t on f.FEATURE_ID = t.ID
+        <where>
+<!--            f.FEATURE_ID in-->
+<!--            <foreach item="item" collection="featuresIds" index="index" open="(" separator="," close=")">-->
+<!--                #{item}-->
+<!--            </foreach>-->
+           and r.PATENT_NO= #{patentNo}
+        </where>
+    </select>
 </mapper>