Преглед изворни кода

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/main/java/cn/cslg/pas/controller/PatentController.java
xiexiang пре 1 година
родитељ
комит
f020a04c7e
72 измењених фајлова са 2075 додато и 193 уклоњено
  1. 4 4
      src/main/java/cn/cslg/pas/common/config/WebSocketConfig.java
  2. 21 0
      src/main/java/cn/cslg/pas/common/dto/GetAllPersonDTO.java
  3. 21 0
      src/main/java/cn/cslg/pas/common/dto/MergePersonQueryDTO.java
  4. 4 4
      src/main/java/cn/cslg/pas/common/dto/PatentDetailDTO.java
  5. 4 2
      src/main/java/cn/cslg/pas/common/dto/PatentKinDTO.java
  6. 5 0
      src/main/java/cn/cslg/pas/common/dto/business/SelectClaimDTO.java
  7. 0 1
      src/main/java/cn/cslg/pas/common/dto/es/EsCustomFieldDTO.java
  8. 19 0
      src/main/java/cn/cslg/pas/common/dto/patentCount/GetEsAllPersonDTO.java
  9. 29 0
      src/main/java/cn/cslg/pas/common/dto/stabilityReport/AddCompareRecordDTO.java
  10. 14 0
      src/main/java/cn/cslg/pas/common/dto/stabilityReport/AddCompareRecordGroupDTO.java
  11. 8 0
      src/main/java/cn/cslg/pas/common/dto/stabilityReport/QueryAllCompareGroupDTO.java
  12. 8 0
      src/main/java/cn/cslg/pas/common/dto/stabilityReport/QueryAllCompareRecordDTO.java
  13. 12 0
      src/main/java/cn/cslg/pas/common/dto/stabilityReport/QueryCompareRecordDTO.java
  14. 1 2
      src/main/java/cn/cslg/pas/common/utils/parseQueryToTree/expressManager.java
  15. 3 2
      src/main/java/cn/cslg/pas/common/vo/CompareLiteratureVO.java
  16. 10 4
      src/main/java/cn/cslg/pas/common/vo/StarPatentVO.java
  17. 19 0
      src/main/java/cn/cslg/pas/common/vo/business/GetAllPersonVO.java
  18. 10 0
      src/main/java/cn/cslg/pas/common/vo/business/MergePersonIdVO.java
  19. 15 0
      src/main/java/cn/cslg/pas/common/vo/business/MergePersonQueryVO.java
  20. 50 0
      src/main/java/cn/cslg/pas/common/vo/business/MergePersonVO.java
  21. 4 0
      src/main/java/cn/cslg/pas/common/vo/business/PatentKinDetailVO.java
  22. 4 2
      src/main/java/cn/cslg/pas/common/vo/business/PatentKinVO.java
  23. 30 0
      src/main/java/cn/cslg/pas/common/vo/es/EsCustomFieldBatchVO.java
  24. 47 0
      src/main/java/cn/cslg/pas/common/vo/stabilityReport/AllCompareGroupVO.java
  25. 43 0
      src/main/java/cn/cslg/pas/common/vo/stabilityReport/AllCompareRecordVO.java
  26. 28 0
      src/main/java/cn/cslg/pas/common/vo/stabilityReport/CompareRecordVO.java
  27. 10 0
      src/main/java/cn/cslg/pas/controller/CustomFieldController.java
  28. 1 0
      src/main/java/cn/cslg/pas/controller/FeatureController.java
  29. 61 7
      src/main/java/cn/cslg/pas/controller/PatentController.java
  30. 139 0
      src/main/java/cn/cslg/pas/controller/StabilityReportController.java
  31. 8 0
      src/main/java/cn/cslg/pas/controller/outApi/PatentStarController.java
  32. 1 0
      src/main/java/cn/cslg/pas/domain/business/AssoGroupFeature.java
  33. 24 0
      src/main/java/cn/cslg/pas/domain/business/AssoGroupReason.java
  34. 9 1
      src/main/java/cn/cslg/pas/domain/business/AssoReasonLiterature.java
  35. 6 2
      src/main/java/cn/cslg/pas/domain/business/EvidenceReason.java
  36. 77 0
      src/main/java/cn/cslg/pas/domain/business/MergePerson.java
  37. 5 0
      src/main/java/cn/cslg/pas/domain/business/ProofGroup.java
  38. 1 1
      src/main/java/cn/cslg/pas/factorys/getOrderFactory/GetComOrder.java
  39. 1 1
      src/main/java/cn/cslg/pas/factorys/getOrderFactory/GetProjectScenarioOrder.java
  40. 21 0
      src/main/java/cn/cslg/pas/mapper/MergePersonMapper.java
  41. 16 0
      src/main/java/cn/cslg/pas/mapper/stabilityReport/AssoGroupReasonMapper.java
  42. 138 45
      src/main/java/cn/cslg/pas/service/business/CompareLiteratureService.java
  43. 2 1
      src/main/java/cn/cslg/pas/service/business/CustomFieldService.java
  44. 49 5
      src/main/java/cn/cslg/pas/service/business/FeatureService.java
  45. 225 0
      src/main/java/cn/cslg/pas/service/business/MergePersonService.java
  46. 0 12
      src/main/java/cn/cslg/pas/service/business/PatentService.java
  47. 5 0
      src/main/java/cn/cslg/pas/service/business/ProjectTaskService.java
  48. 26 0
      src/main/java/cn/cslg/pas/service/business/ProofGroupService.java
  49. 1 1
      src/main/java/cn/cslg/pas/service/business/SystemDictService.java
  50. 3 1
      src/main/java/cn/cslg/pas/service/business/TreeNodeService.java
  51. 110 0
      src/main/java/cn/cslg/pas/service/business/es/EsCustomFieldService.java
  52. 39 25
      src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java
  53. 25 4
      src/main/java/cn/cslg/pas/service/business/es/EsService.java
  54. 2 0
      src/main/java/cn/cslg/pas/service/business/invalidReport/AssoGroupFeatureService.java
  55. 1 0
      src/main/java/cn/cslg/pas/service/business/invalidReport/EvidenceReasonService.java
  56. 14 0
      src/main/java/cn/cslg/pas/service/business/stabilityReport/AssoGroupReasonService.java
  57. 469 0
      src/main/java/cn/cslg/pas/service/business/stabilityReport/CompareRecordService.java
  58. 3 1
      src/main/java/cn/cslg/pas/service/common/MessageService.java
  59. 81 1
      src/main/java/cn/cslg/pas/service/common/PatentStarApiService.java
  60. 0 1
      src/main/java/cn/cslg/pas/service/importPatent/GetRightAndFullTextFromWebThread.java
  61. 2 2
      src/main/java/cn/cslg/pas/service/importPatent/ImportFromWebToEsService.java
  62. 1 2
      src/main/java/cn/cslg/pas/service/importPatent/SavePatentToEsThread.java
  63. 2 2
      src/main/java/cn/cslg/pas/service/importPatent/TaskThread.java
  64. 16 8
      src/main/resources/jsons/event.json
  65. 0 13
      src/main/resources/jsons/patent.json
  66. 18 9
      src/main/resources/jsons/patentProject.json
  67. 18 9
      src/main/resources/jsons/productCategory.json
  68. 10 5
      src/main/resources/jsons/productMarketData.json
  69. 4 2
      src/main/resources/jsons/rdProject.json
  70. 6 3
      src/main/resources/jsons/reportProject.json
  71. 4 3
      src/test/java/cn/cslg/pas/service/EsPatentServiceTests.java
  72. 8 5
      src/test/java/cn/cslg/pas/service/EventServiceTests.java

+ 4 - 4
src/main/java/cn/cslg/pas/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();
+    }
 }

+ 21 - 0
src/main/java/cn/cslg/pas/common/dto/GetAllPersonDTO.java

@@ -0,0 +1,21 @@
+package cn.cslg.pas.common.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class GetAllPersonDTO {
+
+    private String name;
+
+    private String address;
+
+    private String country;
+
+    private String remark;
+
+    //类型  0 申请人  1 权利人  2 发明人
+    private Integer type;
+
+}

+ 21 - 0
src/main/java/cn/cslg/pas/common/dto/MergePersonQueryDTO.java

@@ -0,0 +1,21 @@
+package cn.cslg.pas.common.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class MergePersonQueryDTO {
+
+    private Integer id;
+
+    private String name;
+
+    private String country;
+
+    private String address;
+
+    private String remark;
+
+    private Date createTime;
+}

+ 4 - 4
src/main/java/cn/cslg/pas/common/dto/PatentDetailDTO.java

@@ -79,7 +79,7 @@ public class PatentDetailDTO {
     private List<String> agent;
 
     //IPC分类号(主)
-    private PatentClassify MC;
+    private PatentClassify mipc;
 
     //IPC集合
     private List<PatentClassify> ipc;
@@ -94,11 +94,11 @@ public class PatentDetailDTO {
     private List<Text> grantFullText;
 
     //专利状态
-    private String SS;
+    private String simpleStatus;
 
     //专利类型
-    private String PT;
+    private String patentType;
 
     //法律状态
-    private List<String> LG;
+    private List<String> legalStatus;
 }

+ 4 - 2
src/main/java/cn/cslg/pas/common/dto/PatentKinDTO.java

@@ -11,7 +11,7 @@ import java.util.List;
 public class PatentKinDTO {
 
     //摘要
-    private ContentVO abstractStr;
+    private List<Text> abstractStr;
 
     //专利号
     private String patentNo;
@@ -32,5 +32,7 @@ public class PatentKinDTO {
     private List<String> rightHolder;
 
     //标题--专利名称
-    private ContentVO title;
+    private List<Text> title;
+    //摘要附图
+    private String pictureGuid;
 }

+ 5 - 0
src/main/java/cn/cslg/pas/common/dto/business/SelectClaimDTO.java

@@ -1,9 +1,14 @@
 package cn.cslg.pas.common.dto.business;
 
+import cn.cslg.pas.domain.es.Text;
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class SelectClaimDTO {
     //权利要求
     private String claim;
+    //统一格式的权利要求
+    private List<Text> claimContent;
 }

+ 0 - 1
src/main/java/cn/cslg/pas/common/dto/es/EsCustomFieldDTO.java

@@ -39,7 +39,6 @@ public class EsCustomFieldDTO {
     /**
      * 操作类型 0取消 1增加 2覆盖
      */
-
     Integer optionType;
 
     String patentNo;

+ 19 - 0
src/main/java/cn/cslg/pas/common/dto/patentCount/GetEsAllPersonDTO.java

@@ -0,0 +1,19 @@
+package cn.cslg.pas.common.dto.patentCount;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class GetEsAllPersonDTO {
+
+    private List<String> applicant;
+
+    private List<String> rightHolder;
+
+    private List<String> inventor;
+
+    private String address;
+
+    private String country;
+}

+ 29 - 0
src/main/java/cn/cslg/pas/common/dto/stabilityReport/AddCompareRecordDTO.java

@@ -0,0 +1,29 @@
+package cn.cslg.pas.common.dto.stabilityReport;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AddCompareRecordDTO {
+    private Integer literatureId;
+    private String evidenceText;
+    private String fieldName;
+    private String common;
+    private Integer id;
+    private List<AssoFeature> assoFeatureList;
+
+    private Integer position;
+
+    private String markType;
+
+    private String markColor;
+    private String fileGuid;
+    @Data
+    public static  class  AssoFeature{
+        private Integer featureId;
+        private String conclusion;
+
+    }
+}

+ 14 - 0
src/main/java/cn/cslg/pas/common/dto/stabilityReport/AddCompareRecordGroupDTO.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.common.dto.stabilityReport;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AddCompareRecordGroupDTO {
+
+    private String common;
+    private  Integer claimSort;
+    private  Integer projectId;
+    private  List<Integer> groupReasonIds;
+}

+ 8 - 0
src/main/java/cn/cslg/pas/common/dto/stabilityReport/QueryAllCompareGroupDTO.java

@@ -0,0 +1,8 @@
+package cn.cslg.pas.common.dto.stabilityReport;
+
+import lombok.Data;
+
+@Data
+public class QueryAllCompareGroupDTO {
+    private Integer projectId;
+}

+ 8 - 0
src/main/java/cn/cslg/pas/common/dto/stabilityReport/QueryAllCompareRecordDTO.java

@@ -0,0 +1,8 @@
+package cn.cslg.pas.common.dto.stabilityReport;
+
+import lombok.Data;
+
+@Data
+public class QueryAllCompareRecordDTO {
+    private Integer projectId;
+}

+ 12 - 0
src/main/java/cn/cslg/pas/common/dto/stabilityReport/QueryCompareRecordDTO.java

@@ -0,0 +1,12 @@
+package cn.cslg.pas.common.dto.stabilityReport;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class QueryCompareRecordDTO {
+    private Integer literatureId;
+    private String common;
+
+}

+ 1 - 2
src/main/java/cn/cslg/pas/common/utils/parseQueryToTree/expressManager.java

@@ -9,6 +9,7 @@ public class expressManager {
     HashMap<String, Symbol> hSymbols = new HashMap<String, Symbol>();
     private static expressManager instance = new expressManager();
 
+
     private expressManager() {
         //#region 添加逻辑符号
         operate oAnd = new operate();
@@ -91,7 +92,6 @@ public class expressManager {
         oOR.operateValue = 2;
         hSymbols.put(oOR.Code, oOR);
 
-
         oOR = new operate();
         oOR.Code = "CONTAIN";
         oOR.ShowName = " LIKE ";
@@ -106,7 +106,6 @@ public class expressManager {
         first.Code = "(";
         first.isEndSymbol = false;
 
-
         pairSymbol end = new pairSymbol();
         end.Code = ")";
         end.previewSymbol = first;

+ 3 - 2
src/main/java/cn/cslg/pas/common/vo/CompareLiteratureVO.java

@@ -21,10 +21,11 @@ import java.util.Date;
  * @since 2022-12-8
  */
 @Data
-@TableName("compare_literature")
+
 /*数据库中的表对应的类
  */
-public class CompareLiteratureVO extends BaseEntity<CompareLiteratureVO> {
+public class CompareLiteratureVO  {
+    private Integer id;
     private Integer projectId;
     private String literatureNo;
     private String name;

+ 10 - 4
src/main/java/cn/cslg/pas/common/vo/StarPatentVO.java

@@ -24,10 +24,6 @@ public class StarPatentVO implements Serializable {
     @JSONField(name = "PT")
     private Integer patentType;
     /**
-     * 专利类型
-     */
-    private String type;
-    /**
      * 申请人地址
      */
     @JSONField(name = "DZ")
@@ -53,6 +49,11 @@ public class StarPatentVO implements Serializable {
     @JSONField(name = "AB")
     private String abstractStr;
     /**
+     * 权利要求
+     */
+    @JSONField(name = "CL")
+    private String claimStr;
+    /**
      * 申请日
      */
     @JSONField(name = "AD")
@@ -142,11 +143,16 @@ public class StarPatentVO implements Serializable {
      */
     @JSONField(name = "CO")
     private String provinceStr;
+
     private List<PatentInventor> inventor;
+
     private List<String> ipcList;
+
     private List<PatentApplicant> applicant;
 //    private PatentAgency agency;
+
     private List<PatentAgent> agent;
+
     private String simpleStatus;
     /**
      * 摘要附图路径

+ 19 - 0
src/main/java/cn/cslg/pas/common/vo/business/GetAllPersonVO.java

@@ -0,0 +1,19 @@
+package cn.cslg.pas.common.vo.business;
+
+import lombok.Data;
+
+@Data
+public class GetAllPersonVO {
+
+    private Integer projectId;
+
+    private Integer taskId;
+
+    private String field;
+
+    private String name;
+
+    private Integer pageNum;
+
+    private Integer pageSize;
+}

+ 10 - 0
src/main/java/cn/cslg/pas/common/vo/business/MergePersonIdVO.java

@@ -0,0 +1,10 @@
+package cn.cslg.pas.common.vo.business;
+
+import lombok.Data;
+
+@Data
+public class MergePersonIdVO {
+
+    private Integer id;
+
+}

+ 15 - 0
src/main/java/cn/cslg/pas/common/vo/business/MergePersonQueryVO.java

@@ -0,0 +1,15 @@
+package cn.cslg.pas.common.vo.business;
+
+import lombok.Data;
+
+@Data
+public class MergePersonQueryVO {
+
+    private String name;
+
+    private String country;
+
+    private Integer pageNum;
+
+    private Integer pageSize;
+}

+ 50 - 0
src/main/java/cn/cslg/pas/common/vo/business/MergePersonVO.java

@@ -0,0 +1,50 @@
+package cn.cslg.pas.common.vo.business;
+
+import lombok.Data;
+
+@Data
+public class MergePersonVO {
+    /**
+     * id
+     */
+    private Integer id;
+    /**
+     * 专题库id
+     */
+    private Integer projectId;
+    /**
+     * 类型
+     * 0 申请人
+     * 1 权利人
+     * 2 发明人
+     */
+    private Integer type;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 被合并的名称
+     */
+    private String mergedName;
+    /**
+     * 简称
+     */
+    private String abbreviation;
+    /**
+     * 地址国家
+     */
+    private String country;
+    /**
+     * 地址省份
+     */
+    private String province;
+    /**
+     * 地址
+     */
+    private String address;
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 4 - 0
src/main/java/cn/cslg/pas/common/vo/business/PatentKinDetailVO.java

@@ -4,6 +4,10 @@ import lombok.Data;
 
 @Data
 public class PatentKinDetailVO {
+    //页码
+    private Integer pageNum;
+    //页的大小
+    private Integer pageSize;
     //申请号
     private String appNo;
     //公开号

+ 4 - 2
src/main/java/cn/cslg/pas/common/vo/business/PatentKinVO.java

@@ -5,11 +5,13 @@ import lombok.Data;
 @Data
 public class PatentKinVO {
     //专利号
-    private String patentNo;
-    //专利号
+    private String no;
+    //同族类型
     private String type;
     //页码
     private Integer pageNum;
     //页的大小
     private Integer pageSize;
+    //查询专利号--支持模糊
+    private String patentNo;
 }

+ 30 - 0
src/main/java/cn/cslg/pas/common/vo/es/EsCustomFieldBatchVO.java

@@ -0,0 +1,30 @@
+package cn.cslg.pas.common.vo.es;
+
+import cn.cslg.pas.common.dto.es.EsCustomFieldDTO;
+import cn.cslg.pas.common.dto.es.EsCustomFieldValueDTO;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class EsCustomFieldBatchVO {
+
+    private Integer projectId;
+
+    private Integer taskId;
+
+    private List<String> isAdd;
+
+    private List<String> isDelete;
+
+    private Integer startNumber;
+
+    private Integer endNumber;
+
+    private String searchQuery;
+
+    private List<EsCustomFieldValueDTO> customFields;
+
+    private List<EsCustomFieldDTO> esCustomFieldDTOS;
+
+}

+ 47 - 0
src/main/java/cn/cslg/pas/common/vo/stabilityReport/AllCompareGroupVO.java

@@ -0,0 +1,47 @@
+package cn.cslg.pas.common.vo.stabilityReport;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AllCompareGroupVO {
+    private String rightName;
+    /**
+     * 内容
+     */
+    private String rightContent;
+    private Integer rightSort;
+    private Integer groupId;
+    private String common;
+    private List<AllCompareGroupVO.FeatureMessage> featureMessages;
+    @Data
+    public static class FeatureMessage{
+        private String content;
+        private Integer sysOrder;
+        private String featureName;
+        private List<AllCompareGroupVO.EvidenceReason> evidenceReasons;
+    }
+    @Data
+    public static class EvidenceReason {
+        private Integer position;
+
+        private String markType;
+
+        private String markColor;
+        private String fileGuid;
+
+        private Integer literatureId;
+
+        private String evidenceText;
+
+        private String fieldName;
+
+        private String common;
+
+        private String literatureNo;
+        private String literatureName;
+        private Integer literatureType;
+        private Integer literatureSysOrder;
+    }
+}

+ 43 - 0
src/main/java/cn/cslg/pas/common/vo/stabilityReport/AllCompareRecordVO.java

@@ -0,0 +1,43 @@
+package cn.cslg.pas.common.vo.stabilityReport;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AllCompareRecordVO {
+    private String rightName;
+    /**
+     * 内容
+     */
+    private String rightContent;
+    private Integer rightSort;
+    private Integer rightType;
+    private String featureContent;
+    private Integer featureSysOrder;
+    private String featureName;
+    private Integer featureId;
+   private List<AllCompareRecordVO.EvidenceReason> evidenceReasons;
+    @Data
+    public static class EvidenceReason {
+        private Integer position;
+
+        private String markType;
+
+        private String markColor;
+        private String fileGuid;
+
+        private Integer literatureId;
+
+        private String evidenceText;
+
+        private String fieldName;
+
+        private String common;
+
+        private String literatureNo;
+        private String literatureName;
+        private Integer literatureType;
+        private Integer literatureSysOrder;
+    }
+}

+ 28 - 0
src/main/java/cn/cslg/pas/common/vo/stabilityReport/CompareRecordVO.java

@@ -0,0 +1,28 @@
+package cn.cslg.pas.common.vo.stabilityReport;
+
+import cn.cslg.pas.common.dto.stabilityReport.AddCompareRecordDTO;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CompareRecordVO {
+    private Integer literatureId;
+    private String evidenceText;
+    private String fieldName;
+    private String common;
+    private List<AssoFeature> assoFeatureList;
+
+    private Integer position;
+
+    private String markType;
+
+    private String markColor;
+    private String fileGuid;
+    private  Integer id;
+    @Data
+    public static class AssoFeature{
+        private Integer featureId;
+        private String conclusion;
+    }
+}

+ 10 - 0
src/main/java/cn/cslg/pas/controller/CustomFieldController.java

@@ -10,6 +10,7 @@ import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.request.StringRequest;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.common.vo.business.AllCustomFieldVO;
+import cn.cslg.pas.common.vo.es.EsCustomFieldBatchVO;
 import cn.cslg.pas.exception.ConditionException;
 import cn.cslg.pas.exception.UnLoginException;
 import cn.cslg.pas.exception.XiaoShiException;
@@ -135,4 +136,13 @@ public class CustomFieldController {
         records.setData(field);
         return Response.success(records);
     }
+
+    @PostMapping("/batchAddCustomField")
+    @Operation(summary = "标引/批量标引添加")
+    public Response batchAddCustomField(@RequestBody EsCustomFieldBatchVO vo) throws Exception {
+        List<String> list = esCustomFieldService.batchAddCustomField(vo);
+        Records records = new Records();
+        records.setData(list);
+        return Response.success(records);
+    }
 }

+ 1 - 0
src/main/java/cn/cslg/pas/controller/FeatureController.java

@@ -14,6 +14,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import io.swagger.v3.oas.annotations.Operation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 

+ 61 - 7
src/main/java/cn/cslg/pas/controller/PatentController.java

@@ -1,17 +1,20 @@
 package cn.cslg.pas.controller;
 
 import cn.cslg.pas.common.core.base.Constants;
-import cn.cslg.pas.common.dto.PatentDTO;
+import cn.cslg.pas.common.dto.GetAllPersonDTO;
+import cn.cslg.pas.common.dto.PatentColumnDTO;
 import cn.cslg.pas.common.dto.PatentDetailDTO;
 import cn.cslg.pas.common.dto.PatentExport.PatentExportParams;
 import cn.cslg.pas.common.dto.PatentExport.TaskParams;
 import cn.cslg.pas.common.dto.PatentKinDTO;
 import cn.cslg.pas.common.dto.business.EsCountDTO;
-import cn.cslg.pas.common.dto.es.EsCustomFieldValueDTO;
+import cn.cslg.pas.common.dto.business.SelectClaimDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.request.QueryRequest;
 import cn.cslg.pas.common.model.request.StringRequest;
 import cn.cslg.pas.common.utils.*;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.vo.business.*;
 import cn.cslg.pas.common.vo.PatentPageMessageVO;
 import cn.cslg.pas.common.vo.PatentWithIdVO;
 import cn.cslg.pas.common.vo.StarPatentVO;
@@ -23,6 +26,7 @@ import cn.cslg.pas.factorys.businessFactory.Business;
 import cn.cslg.pas.factorys.businessFactory.BusinessFactory;
 import cn.cslg.pas.service.business.PDFExportFirstPageService;
 import cn.cslg.pas.service.business.PatentExportService;
+import cn.cslg.pas.service.business.MergePersonService;
 import cn.cslg.pas.service.business.es.EsCountService;
 import cn.cslg.pas.service.business.es.EsPatentService;
 import cn.cslg.pas.service.business.es.EsService;
@@ -57,6 +61,13 @@ public class PatentController {
     private EsPatentService patentService;
     @Autowired
     private EsService esService;
+
+    @Autowired
+    private MergePersonService mergePersonService;
+
+    @Autowired
+    private EsService esService;
+
     @Autowired
     private PatentStarApiService patentStarApiService;
 
@@ -78,7 +89,7 @@ public class PatentController {
     @Operation(summary = "查询专利详情")
     @PostMapping("/selectPatentDetail")
     public Response selectPatentDetail(@RequestBody PatentNoVO vo) throws Exception {
-        PatentDetailDTO dto = patentService.selectPatentDetail(vo);
+        PatentColumnDTO dto = patentService.selectPatentDetail(vo);
         return Response.success(dto);
     }
 
@@ -92,7 +103,7 @@ public class PatentController {
     @Operation(summary = "查询分页信息")
     @PostMapping("/getPatentPageMessage")
     public Response getPatentPageMessage(@RequestBody StringRequest stringRequest) throws Exception {
-    Records records= patentService.getPatentPageMessage(stringRequest);
+        Records records = patentService.getPatentPageMessage(stringRequest);
         return Response.success(records);
     }
 
@@ -107,10 +118,10 @@ public class PatentController {
     @GetMapping("/queryPatentByNo")
     public Response queryPatentByNo(String patentNo) throws Exception {
         PatentWithIdVO patentWithIdVO = esService.getIdByPatentNo(patentNo);
-        if(patentWithIdVO==null){
+        if (patentWithIdVO == null) {
             return Response.success(null);
         }
-       return Response.success(patentWithIdVO.getPatent());
+        return Response.success(patentWithIdVO.getPatent());
 
     }
 
@@ -118,7 +129,7 @@ public class PatentController {
     @GetMapping("/queryPatentByNoFromWeb")
     public Response queryPatentByNoFromWeb(String patentNo) throws Exception {
         StarPatentVO starPatentVO = patentStarApiService.getPatentByNo(patentNo);
-        if(starPatentVO==null){
+        if (starPatentVO == null) {
             return Response.success(null);
         }
         return Response.success(starPatentVO);
@@ -149,6 +160,49 @@ public class PatentController {
     }
 
 
+    }
+
+    @Operation(summary = "根据专利号查询内部权利要求")
+    @GetMapping("/queryClaimByPatentNo")
+    public Response queryClaimByPatentNo(String patentNo) throws Exception {
+        SelectClaimDTO dto = esService.selectClaim(patentNo);
+        return Response.success(dto);
+    }
+
+    //------------------------合并-----------------------------
+    @Operation(summary = "专利列表上新增发明人/权利人/申请人合并")
+    @PostMapping("/mergePerson")
+    public Response mergePerson(@RequestBody MergePersonVO personVO) {
+        Integer personId = mergePersonService.mergePerson(personVO);
+        return Response.success(personId);
+    }
+
+    @Operation(summary = "专利列表上编辑发明人/权利人/申请人合并")
+    @PostMapping("/updateMergePerson")
+    public Response updateMergePerson(@RequestBody MergePersonVO personVO) {
+        Integer personId = mergePersonService.updateMergePerson(personVO);
+        return Response.success(personId);
+    }
+
+    @Operation(summary = "发明人/权利人/申请人合并列表查询")
+    @PostMapping("/selectMergePerson")
+    public Response selectMergePerson(@RequestBody MergePersonQueryVO vo) {
+        Records records = mergePersonService.selectMergePersonList(vo);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "获取所有发明人/权利人/申请人")
+    @PostMapping("/getMergePerson")
+    public Response getMergePerson(@RequestBody GetAllPersonVO vo) throws Exception {
+        Records records = mergePersonService.getMergePerson(vo);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "发明人/权利人/申请人合并记录删除")
+    @PostMapping("/delMergePerson")
+    public Response delMergePerson(@RequestBody MergePersonIdVO vo) {
+        Integer id = mergePersonService.delMergePerson(vo);
+        return Response.success(id);
 //    @GetMapping("/pdf")
 //    @Operation(summary = "导出专利")
 //    public ResponseEntity<InputStreamResource> pdf(Integer projectId) throws IOException {

+ 139 - 0
src/main/java/cn/cslg/pas/controller/StabilityReportController.java

@@ -0,0 +1,139 @@
+package cn.cslg.pas.controller;
+
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.business.ReportTempleDTO;
+import cn.cslg.pas.common.dto.stabilityReport.*;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.vo.CompareLiteratureVO;
+import cn.cslg.pas.common.vo.business.TempleByReportTypeVO;
+import cn.cslg.pas.common.vo.stabilityReport.AllCompareGroupVO;
+import cn.cslg.pas.common.vo.stabilityReport.AllCompareRecordVO;
+import cn.cslg.pas.common.vo.stabilityReport.CompareRecordVO;
+import cn.cslg.pas.service.business.ProofGroupService;
+import cn.cslg.pas.service.business.stabilityReport.CompareRecordService;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@Slf4j
+@RequestMapping(Constants.API_XiaoSHI + "/stabilityReport")
+@RestController
+public class StabilityReportController {
+    @Autowired
+    private CompareRecordService compareRecordService;
+    @Autowired
+    private ProofGroupService proofGroupService;
+
+    @Operation(summary = "添加对比记录")
+    @PostMapping("/addCompareRecord")
+    public Response addCompareRecord(@RequestBody AddCompareRecordDTO addCompareRecordDTO) {
+        Integer id = null;
+        try {
+            id = compareRecordService.addCompareRecord(addCompareRecordDTO);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
+        return Response.success(id);
+    }
+
+    @Operation(summary = "查询对比文献对比记录")
+    @PostMapping("/queryCompareRecord")
+    public Response queryCompareRecord(@RequestBody QueryCompareRecordDTO queryCompareRecordDTO) {
+        Records records = new Records();
+        try {
+            List<CompareRecordVO> compareRecordVOS = compareRecordService.queryCompareRecord(queryCompareRecordDTO);
+            records.setData(compareRecordVOS);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
+        return Response.success(records);
+    }
+
+    @Operation(summary = "删除对比文献记录")
+    @PostMapping("/removeCompareRecord")
+    public Response removeCompareRecord(@RequestBody List<Integer> ids) {
+        try {
+            compareRecordService.removeCompareRecord(ids);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
+        return Response.success("");
+    }
+
+    @Operation(summary = "查询对比结果")
+    @PostMapping("/queryAllCompareRecord")
+    public Response queryAllCompareRecord(@RequestBody QueryAllCompareRecordDTO queryAllCompareRecordDTO) {
+        Records records = new Records();
+        try {
+            List<AllCompareRecordVO> compareRecordVOS = compareRecordService.queryAllCompareRecord(queryAllCompareRecordDTO);
+            records.setData(compareRecordVOS);
+
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
+        return Response.success(records);
+    }
+
+
+    @Operation(summary = "添加对比方案")
+    @PostMapping("/addCompareRecordGroup")
+    public Response addCompareRecordGroup(@RequestBody AddCompareRecordGroupDTO addCompareRecordDTO) {
+        try {
+            Boolean flag = proofGroupService.addCompareRecordGroup(addCompareRecordDTO);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
+        return Response.success("添加成功");
+    }
+
+    @Operation(summary = "删除对比方案")
+    @PostMapping("/removeCompareGroups")
+    public Response removeCompareGroups(@RequestBody List<Integer> ids) {
+        try {
+            Boolean flag = compareRecordService.removeCompareGroups(ids);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
+
+        return Response.success("删除成功");
+    }
+
+
+    @Operation(summary = "查询对比方案")
+    @PostMapping("/getCompareGroups")
+    public Response getCompareGroups(@RequestBody QueryAllCompareGroupDTO queryAllCompareGroupDTO) {
+        Records records = new Records();
+        try {
+            List<AllCompareGroupVO> vos = compareRecordService.getCompareGroups(queryAllCompareGroupDTO);
+            records.setData(vos);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
+
+        return Response.success(records);
+    }
+
+    @Operation(summary = " 查询已经对比过的文献信息")
+    @PostMapping("/getComparedLiteratures")
+    public Response getComparedLiteratures(Integer projectId) {
+        Records records = new Records();
+        try {
+            List<CompareLiteratureVO> compareLiteratureVOS = compareRecordService.getComparedLiteratures(projectId);
+            records.setData(compareLiteratureVOS);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
+
+        return Response.success(records);
+    }
+
+
+}

+ 8 - 0
src/main/java/cn/cslg/pas/controller/outApi/PatentStarController.java

@@ -2,6 +2,7 @@ package cn.cslg.pas.controller.outApi;
 
 import cn.cslg.pas.common.core.base.Constants;
 import cn.cslg.pas.common.dto.PatentStarListDTO;
+import cn.cslg.pas.common.dto.business.SelectClaimDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.service.common.PatentStarApiService;
@@ -90,4 +91,11 @@ public class PatentStarController {
     public String getCitedNumByPubNo(String patentNo) throws IOException {
         return patentStarApiService.getCitedNumByPubNoApi(patentNo);
     }
+
+    @Operation(summary = "根据专利号查询外部权利要求")
+    @GetMapping("/queryExternalClaim")
+    public Response queryExternalClaim(String patentNo) throws Exception {
+        SelectClaimDTO dto = patentStarApiService.selectClaim(patentNo);
+        return Response.success(dto);
+    }
 }

+ 1 - 0
src/main/java/cn/cslg/pas/domain/business/AssoGroupFeature.java

@@ -127,4 +127,5 @@ public class AssoGroupFeature  extends BaseEntity<AssoGroupFeature> {
      */
     @TableField(value = "court_opinions2")
     private String courtOpinions2;
+
 }

+ 24 - 0
src/main/java/cn/cslg/pas/domain/business/AssoGroupReason.java

@@ -0,0 +1,24 @@
+package cn.cslg.pas.domain.business;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("asso_group_reason")
+public class AssoGroupReason extends BaseEntity<AssoGroupReason> {
+
+    @TableField(value = "reason_id")
+    private Integer reasonId;
+
+    @TableField(value = "feature_id")
+    private Integer featureId;
+
+    //证据组合
+    @TableField(value = "group_id")
+    private Integer groupId;
+
+    @TableField(value = "conclusion")
+    private String conclusion;
+}

+ 9 - 1
src/main/java/cn/cslg/pas/domain/business/AssoReasonLiterature.java

@@ -7,10 +7,18 @@ import lombok.Data;
 
 @Data
 @TableName("asso_reason_literature")
-public class AssoReasonLiterature  extends BaseEntity<AssoReasonLiterature> {
+public class AssoReasonLiterature extends BaseEntity<AssoReasonLiterature> {
 
     @TableField(value = "reason_id")
     private Integer reasonId;
     @TableField(value = "literature_id")
     private Integer literatureId;
+    @TableField(value = "position")
+    private Integer position;
+    @TableField(value = "field_name")
+    private String fieldName;
+    @TableField(value = "mark_type")
+    private String markType;
+    @TableField(value = "mark_color")
+    private String markColor;
 }

+ 6 - 2
src/main/java/cn/cslg/pas/domain/business/EvidenceReason.java

@@ -3,6 +3,7 @@ package cn.cslg.pas.domain.business;
 import cn.cslg.pas.domain.BaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.mchange.v1.cachedstore.Vacuumable;
 import lombok.Data;
 
 import java.util.Date;
@@ -23,7 +24,7 @@ public class EvidenceReason extends BaseEntity<EvidenceReason> {
     @TableField(value = "description")
     private String description;
     @TableField(value = "create_id")
-    private  String createId;
+    private String createId;
     @TableField(value = "create_time")
     private String createTime;
 
@@ -54,7 +55,7 @@ public class EvidenceReason extends BaseEntity<EvidenceReason> {
     private String rbDecisionKey;
 
     /**
-     *复审委概括
+     * 复审委概括
      */
     @TableField(value = "rb_summary")
     private String rbSummary;
@@ -106,4 +107,7 @@ public class EvidenceReason extends BaseEntity<EvidenceReason> {
      */
     @TableField(value = "court_opinions2")
     private String courtOpinions2;
+
+    @TableField(value = "file_guid")
+    private String fileGuid;
 }

+ 77 - 0
src/main/java/cn/cslg/pas/domain/business/MergePerson.java

@@ -0,0 +1,77 @@
+package cn.cslg.pas.domain.business;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 合并人员信息类
+ * @Author xiexiang
+ * @Date 2023/10/26
+ */
+@Data
+@TableName("merge_person")
+public class MergePerson extends BaseEntity<MergePerson> {
+    /**
+     * 专题库id
+     */
+    @TableField(value = "project_id")
+    private Integer projectId;
+    /**
+     * 类型
+     * 0 申请人
+     * 1 权利人
+     * 2 发明人
+     */
+    @TableField(value = "type")
+    private Integer type;
+    /**
+     * 名称
+     */
+    @TableField(value = "name")
+    private String name;
+    /**
+     * 被合并的名称
+     */
+    @TableField(value = "merged_name")
+    private String mergedName;
+    /**
+     * 简称
+     */
+    @TableField(value = "abbreviation")
+    private String abbreviation;
+    /**
+     * 地址国家
+     */
+    @TableField(value = "country")
+    private String country;
+    /**
+     * 地址省份
+     */
+    @TableField(value = "province")
+    private String province;
+    /**
+     * 地址
+     */
+    @TableField(value = "address")
+    private String address;
+    /**
+     * 备注
+     */
+    @TableField(value = "remark")
+    private String remark;
+    /**
+     * 创建人
+     */
+    @TableField(value = "create_id")
+    private String createId;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time")
+    private Date createTime;
+}

+ 5 - 0
src/main/java/cn/cslg/pas/domain/business/ProofGroup.java

@@ -130,4 +130,9 @@ public class ProofGroup extends BaseEntity<ProofGroup> {
     @TableField(value = "court_opinions2")
     private String courtOpinions2;
 
+    @TableField(value = "claim_sort")
+    private Integer claimSort;
+
+    @TableField(value = "project_id")
+    private Integer projectId;
 }

+ 1 - 1
src/main/java/cn/cslg/pas/factorys/getOrderFactory/GetComOrder.java

@@ -12,7 +12,7 @@ public class GetComOrder implements GetOrderObject {
 
     @Override
     public String getOrderString(String orderBy,Integer orderType) {
-     if(orderType.equals(0)){
+     if(orderType!=null&&orderType.equals(0)){
       return orderBy+" asc";
 
      }

+ 1 - 1
src/main/java/cn/cslg/pas/factorys/getOrderFactory/GetProjectScenarioOrder.java

@@ -32,7 +32,7 @@ public class GetProjectScenarioOrder implements GetOrderObject {
         orderBy =" COALESCE("+orderBy+",'null')";
         String idStr = StringUtils.join(idsStr, ",");
         String orderStr = " field(" + orderBy + "," + idStr + ")";
-        if(orderType.equals(0)){
+        if(orderType!=null&&orderType.equals(0)){
 
             orderStr+=" asc";
         }

+ 21 - 0
src/main/java/cn/cslg/pas/mapper/MergePersonMapper.java

@@ -0,0 +1,21 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.common.vo.business.MergePersonQueryVO;
+import cn.cslg.pas.domain.business.MergePerson;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 合并人员信息mapper
+ * @Author zero
+ * @Date 2023/11/7
+ */
+@Repository
+public interface MergePersonMapper extends BaseMapper<MergePerson> {
+
+    List<MergePerson> selectMergePersonList(@Param("page") IPage<MergePerson> page, @Param("vo") MergePersonQueryVO vo);
+}

+ 16 - 0
src/main/java/cn/cslg/pas/mapper/stabilityReport/AssoGroupReasonMapper.java

@@ -0,0 +1,16 @@
+package cn.cslg.pas.mapper.stabilityReport;
+
+import cn.cslg.pas.domain.business.AssoEventFile;
+import cn.cslg.pas.domain.business.AssoGroupReason;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 任务可见栏位表
+ *
+ * @author chenyu
+ * @date 2023/10/20
+ */
+@Repository
+public interface AssoGroupReasonMapper extends BaseMapper<AssoGroupReason> {
+}

+ 138 - 45
src/main/java/cn/cslg/pas/service/business/CompareLiteratureService.java

@@ -35,6 +35,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -71,52 +72,56 @@ public class CompareLiteratureService extends ServiceImpl<CompareLiteratureMappe
     private MessageService messageService;
 
     //添加专利对比文献
+
     public Integer addPatentCompareLiterature(Patent patent, Integer projectId, String createId) {
-        Integer id = null;
-        id = this.getHaveAddIdByNos(projectId, patent.getPatentNo());
-
-        //根据专利号和报告id查询是否已经保存
-        if (id == null) {
-            CompareLiterature compareLiterature = new CompareLiterature();
-            compareLiterature.setCreateId(createId);
-            //报告id
-            compareLiterature.setProjectId(projectId);
-            //文档guid
-            compareLiterature.setLiteratureNo(patent.getPatentNo());
-            //文档名称
-            String name = patent.getPatentNo();
-
-            //作者
-            String authorName = "";
-            Integer order = 1;
-            //根据报告id获得最大序号
-            LambdaQueryWrapper<CompareLiterature> queryWrapper = new LambdaQueryWrapper<>();
-            queryWrapper.eq(CompareLiterature::getProjectId, projectId);
-            CompareLiterature compareLiteratureBig = this.getOne(queryWrapper, false);
-            if (compareLiteratureBig != null && compareLiteratureBig.getSysOrder() != null) {
-                order = compareLiteratureBig.getSysOrder() + 1;
-            }
-            if (patent != null) {
-                if (patent.getTitle() != null && patent.getTitle().size() != 0) {
-                    name += "(" + patent.getTitle().get(0).getTextContent();
+        synchronized ("导入任务是否完成") {
+            Integer id = null;
+            id = this.getHaveAddIdByNos(projectId, patent.getPatentNo());
+
+            //根据专利号和报告id查询是否已经保存
+            if (id == null) {
+                CompareLiterature compareLiterature = new CompareLiterature();
+                compareLiterature.setCreateId(createId);
+                //报告id
+                compareLiterature.setProjectId(projectId);
+                //文档guid
+                compareLiterature.setLiteratureNo(patent.getPatentNo());
+                //文档名称
+                String name = patent.getPatentNo();
+
+                //作者
+                String authorName = "";
+                Integer order = 1;
+                //根据报告id获得最大序号
+                LambdaQueryWrapper<CompareLiterature> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.eq(CompareLiterature::getProjectId, projectId).orderByDesc(CompareLiterature::getSysOrder);
+                CompareLiterature compareLiteratureBig = this.getOne(queryWrapper, false);
+                if (compareLiteratureBig != null && compareLiteratureBig.getSysOrder() != null) {
+                    order = compareLiteratureBig.getSysOrder() + 1;
                 }
-                compareLiterature.setAppDate(patent.getAppDate());
-                compareLiterature.setPublicDate(patent.getPublicDate());
-                if (patent.getRightHolder() != null && patent.getRightHolder().size() != 0) {
-                    authorName = patent.getRightHolder().get(0).getName();
+                if (patent != null) {
+                    if (patent.getTitle() != null && patent.getTitle().size() != 0) {
+                        name += "(" + patent.getTitle().get(0).getTextContent();
+                    }
+                    compareLiterature.setAppDate(patent.getAppDate());
+                    compareLiterature.setPublicDate(patent.getPublicDate());
+                    if (patent.getRightHolder() != null && patent.getRightHolder().size() != 0) {
+                        authorName = patent.getRightHolder().get(0).getName();
+                    }
                 }
+                compareLiterature.setName(name);
+                //描述
+                //作者
+                compareLiterature.setAuthorName(authorName);
+                //类型
+                compareLiterature.setType(0);
+                //装载排序
+                compareLiterature.setSysOrder(order);
+                compareLiterature.insert();
+                return compareLiterature.getId();
             }
-            compareLiterature.setName(name);
-            //描述
-            //作者
-            compareLiterature.setAuthorName(authorName);
-            //类型
-            compareLiterature.setType(1);
-            //装载排序
-            compareLiterature.setSysOrder(order);
-            return compareLiterature.getId();
+            return id;
         }
-        return id;
     }
 
     //添加非对比文献
@@ -168,7 +173,7 @@ public class CompareLiteratureService extends ServiceImpl<CompareLiteratureMappe
         //根据对比projectId 查询对比文献
         LambdaQueryWrapper<CompareLiterature> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(CompareLiterature::getProjectId, projectId)
-                    .orderByAsc(CompareLiterature::getSysOrder);
+                .orderByAsc(CompareLiterature::getSysOrder);
         List<CompareLiterature> compareLiteratures = new ArrayList<>();
 
         if (literatureQueryDTO.getCurrent() != null && literatureQueryDTO.getSize() != null) {
@@ -513,11 +518,99 @@ public class CompareLiteratureService extends ServiceImpl<CompareLiteratureMappe
         return null;
     }
 
-    public Boolean deleteCompareLiterature(List<Integer> ids){
-        if(ids==null||ids.size()<=0){
+    public Boolean deleteCompareLiterature(List<Integer> ids) {
+        if (ids == null || ids.size() <= 0) {
             throw new XiaoShiException("请选择对比文献");
         }
-       return this.removeBatchByIds(ids);
+        return this.removeBatchByIds(ids);
+
+    }
+
+
+    public List<CompareLiteratureVO> getByIds(List<Integer> ids) {
+        LambdaQueryWrapper<CompareLiterature> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(CompareLiterature::getId, ids);
+        List<CompareLiterature> compareLiteratures = this.list(queryWrapper);
+        List<CompareLiteratureVO> compareLiteratureVOS = this.loadBaseMessage(compareLiteratures);
+        return compareLiteratureVOS;
+    }
+
+
+    public List<CompareLiteratureVO> loadBaseMessage(List<CompareLiterature> compareLiteratures) {
+
+        //查询标的专利号
+        List<CompareLiteratureVO> compareLiteratureVOS = new ArrayList<>();
+
+        //非专利文献列表
+        List<String> guids = compareLiteratures.stream().filter(item -> item.getType().equals(1)).map(CompareLiterature::getLiteratureNo).collect(Collectors.toList());
+
+        //专利文献列表
+        List<String> patentNos = compareLiteratures.stream().filter(item -> item.getType().equals(0)).map(CompareLiterature::getLiteratureNo).collect(Collectors.toList());
+        List<Patent> patentList = new ArrayList<>();
+
+
+        if (patentNos.size() > 0) {
+            try {
+                patentList = esPatentService.getPatentsByNo(patentNos, false, null, null);
+            } catch (Exception e) {
+                throw new XiaoShiException("装载文献信息失败");
+            }
+        }
+
+
+        //查询文件
+        List<SystemFile> systemFiles = new ArrayList<>();
+
+        //查询文件
+        if (guids.size() != 0) {
+            try {
+                String res = fileManagerService.getSystemFileFromFMS(guids);
+                if (res != null && !res.trim().equals("")) {
+                    systemFiles = JSONObject.parseArray(res, SystemFile.class);
+                }
+            } catch (Exception e) {
+                throw new XiaoShiException("装载错误");
+            }
+        }
+        for (CompareLiterature compareLiterature : compareLiteratures) {
+            Integer id = compareLiterature.getId();
+            String literatureNo = compareLiterature.getLiteratureNo();
+            Date publicDate = compareLiterature.getPublicDate();
+            CompareLiteratureVO compareLiteratureVO = new CompareLiteratureVO();
+            BeanUtils.copyProperties(compareLiterature, compareLiteratureVO);
+            //当为专利文献时
+            if (compareLiterature.getType().equals(0)) {
+                compareLiteratureVO.setFitType(0);
+                if (patentList.size() > 0) {
+                    Patent patent = patentList.stream()
+                            .filter(item -> literatureNo.equals(item.getAppNo())
+                                    || literatureNo.equals(item.getPublicNo()) ||
+                                    literatureNo.equals(item.getGrantNo())).findFirst().orElse(null);
+                    if (patent != null) {
+                        compareLiteratureVO.setAppNo(patent.getAppNo());
+                        compareLiteratureVO.setAppDate(patent.getAppDate());
+                        compareLiteratureVO.setPublicDate(patent.getPublicDate());
+                        compareLiteratureVO.setPublicNo(patent.getPublicNo());
+                        compareLiteratureVO.setGrantDate(patent.getGrantDate());
+                        compareLiteratureVO.setGrantNo(patent.getGrantNo());
+
+                    }
+                }
+
+            }
+            //非专利文献
+            else {
+                //装载文件
+                if (literatureNo != null && systemFiles != null && systemFiles.size() != 0) {
+                    SystemFile systemFile = systemFiles.stream().filter(item -> item.getGuid().equals(literatureNo)).findFirst().orElse(null);
+                    if (systemFile != null) {
+                        compareLiteratureVO.setSystemFile(systemFile);
+                    }
+                }
+            }
+            compareLiteratureVOS.add(compareLiteratureVO);
+        }
 
+        return compareLiteratureVOS;
     }
 }

+ 2 - 1
src/main/java/cn/cslg/pas/service/business/CustomFieldService.java

@@ -35,6 +35,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
@@ -246,7 +247,7 @@ public class CustomFieldService extends ServiceImpl<CustomFieldMapper, CustomFie
     public List<AllCustomFieldVO> getAllProjectCustomField(Integer projectId) {
         Integer order = 0;
         List<AllCustomFieldVO> allCustomFieldVOS = cacheUtils.getPatentCustomField(projectId);
-        if (allCustomFieldVOS == null) {
+        if (CollectionUtils.isEmpty(allCustomFieldVOS)) {
             allCustomFieldVOS = new ArrayList<>();
             //根据 project获得栏位值
             List<CustomField> customFields = new ArrayList<>();

+ 49 - 5
src/main/java/cn/cslg/pas/service/business/FeatureService.java

@@ -7,6 +7,7 @@ import cn.cslg.pas.common.dto.invalidDTO.QueryClaimSplitHistoryDTO;
 import cn.cslg.pas.common.model.cronModel.PersonnelVO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
 import cn.cslg.pas.common.utils.PatentRightUtils;
 import cn.cslg.pas.common.vo.*;
 import cn.cslg.pas.common.vo.business.SplitVO;
@@ -37,6 +38,8 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Feature> {
     @Autowired
     private CacheUtils cacheUtils;
     @Autowired
+    private LoginUtils loginUtils;
+    @Autowired
     private EsService esService;
     @Autowired
     private ReportProjectService reportProjectService;
@@ -53,7 +56,7 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Feature> {
     private AssoGroupFeatureService assoGroupFeatureService;
 
     @Transactional(rollbackFor = Exception.class)
-    public List<PatentRightVo> splitPatentFeature(SplitVO splitVO) throws IOException {
+    public List<PatentRightVo>  splitPatentFeature(SplitVO splitVO) throws IOException {
         String patentNo = splitVO.getPatentNo();
         Integer projectId = splitVO.getProjectId();
         Integer splitType = splitVO.getSplitType();
@@ -61,10 +64,8 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Feature> {
         Integer taskId = splitVO.getTaskId();
         Boolean ifReSplit = splitVO.getIfReSplit();
 
-//        PersonnelVO personnelVO = cacheUtils.getLoginUser(StpUtil.getLoginIdAsInt());
-        PersonnelVO personnelVO = new PersonnelVO();
-        personnelVO.setId("1");
-        personnelVO.setTenantId(1);
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+
         //根据报告ID查询报告
         LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper();
         queryWrapper.eq(ReportProject::getProjectId, projectId);
@@ -419,4 +420,47 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Feature> {
         return records;
     }
 
+
+    /**
+     * 获得已经拆分过的特征
+     *
+     * @param splitVO
+     */
+    public List<Feature> getSplitedFeature(SplitVO splitVO) {
+        List<PatentRightVo> patentRightVos = new ArrayList<>();
+        Integer projectId = splitVO.getProjectId();
+        String patentNo = splitVO.getPatentNo();
+
+        //当未传入专利号时,从报告里拿标的专利
+        if (patentNo == null || patentNo.equals("")) {
+            LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(ReportProject::getProjectId, projectId);
+            ReportProject reportProject = reportProjectService.getOne(queryWrapper, false);
+            if (reportProject == null) {
+                throw new XiaoShiException("未查到报告");
+            }
+            patentNo = reportProject.getSignPatentNo();
+        }
+
+
+        LambdaQueryWrapper<PatentSplitMessage> splitWrapper = new LambdaQueryWrapper<>();
+        splitWrapper.eq(PatentSplitMessage::getPatentNo, patentNo);
+        splitWrapper.eq(PatentSplitMessage::getProjectId, projectId);
+
+        PatentSplitMessage patentSplitMessage = patentSplitMessageService.getOne(splitWrapper, false);
+
+        LambdaQueryWrapper<Feature> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(Feature::getProjectId, projectId)
+                .eq(Feature::getPatentNo, patentNo)
+                .eq(Feature::getSplitMessageId, patentSplitMessage.getId());
+        List<Feature> allFeatures = this.list(wrapper);
+        return allFeatures;
+    }
+
+    public void saveBatchFeature(){
+
+
+
+
+    }
 }

+ 225 - 0
src/main/java/cn/cslg/pas/service/business/MergePersonService.java

@@ -0,0 +1,225 @@
+package cn.cslg.pas.service.business;
+
+import cn.cslg.pas.common.dto.GetAllPersonDTO;
+import cn.cslg.pas.common.dto.MergePersonQueryDTO;
+import cn.cslg.pas.common.dto.PatentColumnDTO;
+import cn.cslg.pas.common.dto.patentCount.GetEsAllPersonDTO;
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
+import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
+import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
+import cn.cslg.pas.common.vo.business.GetAllPersonVO;
+import cn.cslg.pas.common.vo.business.MergePersonIdVO;
+import cn.cslg.pas.common.vo.business.MergePersonQueryVO;
+import cn.cslg.pas.common.vo.business.MergePersonVO;
+import cn.cslg.pas.domain.BaseEntity;
+import cn.cslg.pas.domain.business.FollowUp;
+import cn.cslg.pas.domain.business.MergePerson;
+import cn.cslg.pas.domain.es.Patent;
+import cn.cslg.pas.domain.es.PersonAddress;
+import cn.cslg.pas.exception.UnLoginException;
+import cn.cslg.pas.mapper.MergePersonMapper;
+import cn.cslg.pas.service.business.es.EsPatentService;
+import cn.cslg.pas.service.query.FormatQueryService;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.PageUtil;
+import co.elastic.clients.elasticsearch.ElasticsearchClient;
+import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
+import co.elastic.clients.elasticsearch._types.aggregations.AggregationBuilders;
+import co.elastic.clients.elasticsearch._types.aggregations.NestedAggregation;
+import co.elastic.clients.elasticsearch._types.aggregations.TermsAggregation;
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import co.elastic.clients.elasticsearch.core.SearchRequest;
+import co.elastic.clients.elasticsearch.core.SearchResponse;
+import co.elastic.clients.elasticsearch.core.search.Hit;
+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 com.github.pagehelper.PageHelper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/01/02
+ */
+@Slf4j
+@Service
+public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePerson> {
+    @Autowired
+    private ElasticsearchClient client;
+    @Autowired
+    private CacheUtils cacheUtils;
+    @Autowired
+    private LoginUtils loginUtils;
+    @Autowired
+    private MergePersonMapper mergePersonMapper;
+    @Autowired
+    private FormatQueryService formatQueryService;
+    @Autowired
+    private EsPatentService esPatentService;
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
+    public Integer mergePerson(MergePersonVO vo) {
+        //获取登陆人信息 用于设置创建人
+        PersonnelVO personnelVO = new PersonnelVO();
+        try {
+            personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        } catch (Exception e) {
+            throw new UnLoginException("未登录");
+        }
+        MergePerson person = new MergePerson();
+        BeanUtils.copyProperties(vo, person);
+        person.setCreateId(personnelVO.getId());
+        person.setCreateTime(new Date());
+        person.insert();
+        //todo  关联相关专利
+
+        return person.getId();
+    }
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
+    public Integer updateMergePerson(MergePersonVO vo) {
+        //获取登陆人信息 用于设置创建人
+        PersonnelVO personnelVO = new PersonnelVO();
+        try {
+            personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        } catch (Exception e) {
+            throw new UnLoginException("未登录");
+        }
+        MergePerson person = this.getById(vo.getId());
+        if (ObjectUtil.isNotEmpty(person)) {
+            BeanUtils.copyProperties(vo, person);
+            person.setCreateId(personnelVO.getId());
+            person.setCreateTime(new Date());
+            person.updateById();
+            //todo  关联相关专利
+        } else {
+            person = new MergePerson();
+        }
+        return person.getId();
+    }
+
+    public Records selectMergePersonList(MergePersonQueryVO vo) {
+        List<MergePersonQueryDTO> list = new ArrayList<>();
+        IPage<MergePerson> page = new Page<>(vo.getPageNum(), vo.getPageSize());
+        LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
+                .eq(StringUtils.isNotEmpty(vo.getCountry()), MergePerson::getCountry, vo.getCountry())
+                .like(StringUtils.isNotEmpty(vo.getName()), MergePerson::getName, vo.getName());
+        IPage<MergePerson> record = mergePersonMapper.selectPage(page, wrapper);
+        for (MergePerson person : record.getRecords()) {
+            MergePersonQueryDTO dto = new MergePersonQueryDTO();
+            dto.setId(person.getId());
+            dto.setName(person.getName());
+            dto.setAddress(person.getAddress());
+            dto.setCountry(person.getCountry());
+            dto.setRemark(person.getRemark());
+            dto.setCreateTime(person.getCreateTime());
+            list.add(dto);
+        }
+        Records records = new Records();
+        records.setCurrent(record.getCurrent());
+        records.setSize(record.getSize());
+        records.setData(list);
+        records.setTotal(record.getTotal());
+        return records;
+    }
+
+    public Records getMergePerson(GetAllPersonVO vo) throws Exception {
+        String searchCondition = "";
+        Integer projectId = vo.getProjectId();
+        Integer taskId = vo.getTaskId();
+        String name = vo.getName();
+        String field = vo.getField();
+        Integer pageNum = vo.getPageNum();
+        Integer pageSize = vo.getPageSize();
+        if (taskId != null) {
+            searchCondition = "taskId = " + taskId;
+        } else {
+            if (projectId != null) {
+                searchCondition = "projectId = " + projectId;
+            }
+        }
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        //1. 解析检索条件
+        treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
+        //格式化检索式
+        //3. 从es中检索数据
+        Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
+        //分页
+        if (pageNum > 0 && pageSize > 0) {
+            builder.from((pageNum - 1) * pageSize).size(pageSize);
+        }
+        builder.query(q);
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        List<Hit<Patent>> hits = response.hits().hits();
+        List<GetEsAllPersonDTO> personDTOS = new ArrayList<>();
+        for (Hit<Patent> hit : hits) {
+            Patent esMess = hit.source();
+            PersonAddress applicantAddr = esMess.getApplicantAddr();
+            GetEsAllPersonDTO personDTO = new GetEsAllPersonDTO();
+            personDTO.setAddress(applicantAddr.getAddress());
+            personDTO.setCountry(applicantAddr.getCountry());
+            personDTO.setApplicant(esPatentService.loadName(esMess.getApplicant()));
+            personDTO.setRightHolder(esPatentService.loadName(esMess.getRightHolder()));
+            personDTO.setInventor(esPatentService.loadName(esMess.getInventor()));
+            personDTOS.add(personDTO);
+        }
+        List<GetAllPersonDTO> allPersonDTOS = new ArrayList<>();
+        List<String> applicants = new ArrayList<>();
+        List<String> inventors = new ArrayList<>();
+        for (GetEsAllPersonDTO personDTO : personDTOS) {
+            applicants.addAll(personDTO.getApplicant());
+            inventors.addAll(personDTO.getInventor());
+        }
+        List<String> applicantList = applicants.stream().distinct().collect(Collectors.toList());
+        List<String> inventorList = inventors.stream().distinct().collect(Collectors.toList());
+        for (String applicant : applicantList) {
+            GetAllPersonDTO dto = new GetAllPersonDTO();
+            dto.setName(applicant);
+            dto.setType(0);
+            allPersonDTOS.add(dto);
+        }
+        for (String inventor : inventorList) {
+            GetAllPersonDTO dto = new GetAllPersonDTO();
+            dto.setName(inventor);
+            dto.setType(2);
+            allPersonDTOS.add(dto);
+        }
+//        List<GetAllPersonDTO> list = allPersonDTOS.stream().distinct().collect(Collectors.toList());
+        Records records = new Records();
+//        records.setCurrent(queryRequest.getCurrent());
+//        records.setSize(queryRequest.getSize());
+//        records.setData(patentDTO.getPatents());
+//        records.setTotal(patentDTO.getTotal());
+        return records;
+    }
+
+    public Integer delMergePerson(MergePersonIdVO vo) {
+        LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
+                .eq(BaseEntity::getId, vo.getId());
+        this.remove(wrapper);
+
+        //todo 删掉相关合并的名称
+        return vo.getId();
+    }
+}

+ 0 - 12
src/main/java/cn/cslg/pas/service/business/PatentService.java

@@ -1,22 +1,10 @@
 package cn.cslg.pas.service.business;
 
 import cn.cslg.pas.common.dto.PatentDTO;
-import cn.cslg.pas.common.dto.business.EventDTO;
-import cn.cslg.pas.common.dto.business.UpdateEventDTO;
 import cn.cslg.pas.common.model.cronModel.*;
 import cn.cslg.pas.common.model.request.GroupRequest;
 import cn.cslg.pas.common.model.request.QueryRequest;
-import cn.cslg.pas.common.model.request.StringRequest;
-import cn.cslg.pas.common.utils.CacheUtils;
-import cn.cslg.pas.common.utils.LoginUtils;
-import cn.cslg.pas.common.vo.business.EventCountVO;
-import cn.cslg.pas.common.vo.business.EventVO;
-import cn.cslg.pas.domain.business.AssoEventFile;
-import cn.cslg.pas.domain.business.Event;
-import cn.cslg.pas.domain.business.SystemDict;
 import cn.cslg.pas.domain.es.Patent;
-import cn.cslg.pas.exception.UnLoginException;
-import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.factorys.businessFactory.Business;
 import cn.cslg.pas.mapper.PatentMapper;
 import cn.cslg.pas.service.business.es.EsService;

+ 5 - 0
src/main/java/cn/cslg/pas/service/business/ProjectTaskService.java

@@ -727,6 +727,11 @@ public class ProjectTaskService extends ServiceImpl<ProjectTaskMapper, ProjectTa
                     projectTask.updateById();
                 }
 
+            } else {
+                if (type.equals(1)) {
+                    projectTask.setStatus(5);
+                    projectTask.updateById();
+                }
             }
         } else {
             throw new XiaoShiException("该任务不存在");

+ 26 - 0
src/main/java/cn/cslg/pas/service/business/ProofGroupService.java

@@ -4,13 +4,17 @@ import cn.cslg.pas.common.dto.DomainFieldDTO;
 import cn.cslg.pas.common.dto.invalidDTO.AddProofGroupDTO;
 import cn.cslg.pas.common.dto.invalidDTO.GetProofGroupDTO;
 import cn.cslg.pas.common.dto.invalidDTO.UpdateMessageDTO;
+import cn.cslg.pas.common.dto.stabilityReport.AddCompareRecordGroupDTO;
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
 import cn.cslg.pas.common.utils.GenerateObjectUtil;
 import cn.cslg.pas.common.vo.invalidVO.ProofGroupVO;
 import cn.cslg.pas.domain.business.AssoGroupFeature;
+import cn.cslg.pas.domain.business.AssoGroupReason;
 import cn.cslg.pas.domain.business.InvalidStatutes;
 import cn.cslg.pas.domain.business.ProofGroup;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.ProofGroupMapper;
+import cn.cslg.pas.service.business.stabilityReport.AssoGroupReasonService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
@@ -35,6 +39,8 @@ public class ProofGroupService extends ServiceImpl<ProofGroupMapper, ProofGroup>
     @Autowired
     private InvalidStatutesService invalidStatutesService;
 
+    @Autowired
+    private AssoGroupReasonService assoGroupReasonService;
     /**
      * 添加or修改证据组合
      *
@@ -207,4 +213,24 @@ public class ProofGroupService extends ServiceImpl<ProofGroupMapper, ProofGroup>
 
 
     }
+
+    public Boolean addCompareRecordGroup(AddCompareRecordGroupDTO addCompareRecordGroupDTO){
+      List<Integer> groupReasonIds =addCompareRecordGroupDTO.getGroupReasonIds();
+            //添加对比方案
+        PersonnelVO personnelVO =new PersonnelVO();
+        personnelVO.setId("1");
+        ProofGroup proofGroup =new ProofGroup();
+        proofGroup.setCommon1(addCompareRecordGroupDTO.getCommon());
+        proofGroup.setProjectId(addCompareRecordGroupDTO.getProjectId());
+        proofGroup.setClaimSort(addCompareRecordGroupDTO.getClaimSort());
+        proofGroup.insert();
+
+        //遍历特征和无效理由关联
+        groupReasonIds.forEach(item->{
+          AssoGroupReason assoGroupReason= assoGroupReasonService.getById(item);
+             assoGroupReason.setGroupId(proofGroup.getId());
+            assoGroupReason.insert();
+        });
+        return  true;
+    }
 }

+ 1 - 1
src/main/java/cn/cslg/pas/service/business/SystemDictService.java

@@ -71,7 +71,7 @@ public class SystemDictService extends ServiceImpl<SystemDictMapper, SystemDict>
         LambdaQueryWrapper<SystemDict> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.select(SystemDict::getValue);
         queryWrapper.eq(SystemDict::getType, "ENTERPRISE_APPLICATION_SCENARIO");
-        if(orderType.equals(0)){
+        if(orderType!=null&&orderType.equals(0)){
             queryWrapper.orderByAsc(SystemDict::getLabel);
         }
         else{

+ 3 - 1
src/main/java/cn/cslg/pas/service/business/TreeNodeService.java

@@ -480,7 +480,9 @@ public class TreeNodeService extends ServiceImpl<TreeNodeMapper, TreeNode> imple
         //查询文件
         if (guids.size() != 0) {
             String res = fileManagerService.getSystemFileFromFMS(guids);
-            systemFiles = JSONObject.parseArray(res, SystemFile.class);
+            if (res != null && !res.equals("")) {
+                systemFiles = JSONObject.parseArray(res, SystemFile.class);
+            }
         }
 
         //装载信息

+ 110 - 0
src/main/java/cn/cslg/pas/service/business/es/EsCustomFieldService.java

@@ -1,10 +1,15 @@
 package cn.cslg.pas.service.business.es;
 
 import cn.cslg.pas.common.dto.es.EsCustomFieldDTO;
+import cn.cslg.pas.common.dto.es.EsCustomFieldValueDTO;
 import cn.cslg.pas.common.dto.es.FieldHistoryDTO;
 import cn.cslg.pas.common.dto.es.QueryEsCustomFieldDTO;
 import cn.cslg.pas.common.utils.FormatUtil;
+import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
+import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
+import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
 import cn.cslg.pas.common.vo.PatentWithIdVO;
+import cn.cslg.pas.common.vo.es.EsCustomFieldBatchVO;
 import cn.cslg.pas.common.vo.es.FieldHistoryVO;
 import cn.cslg.pas.common.vo.es.QueryESCustomFieldVO;
 import cn.cslg.pas.domain.business.CustomField;
@@ -12,6 +17,7 @@ import cn.cslg.pas.domain.business.TreeNode;
 import cn.cslg.pas.domain.es.*;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.service.business.TreeNodeService;
+import cn.cslg.pas.service.query.FormatQueryService;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
 import co.elastic.clients.elasticsearch._types.SortOrder;
 import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
@@ -27,13 +33,18 @@ import co.elastic.clients.json.JsonData;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.RequiredArgsConstructor;
 import lombok.Value;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import java.io.IOException;
 import java.lang.reflect.Array;
+import java.text.ParseException;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
@@ -42,6 +53,9 @@ public class EsCustomFieldService {
     private final EsService esService;
     private final TreeNodeService treeNodeService;
 
+    @Autowired
+    private FormatQueryService formatQueryService;
+
     //添加自定义栏位值
     public String addCustomField(EsCustomFieldDTO esCustomFieldDTO) throws Exception {
         ESCustomField esCustomField = new ESCustomField();
@@ -253,6 +267,102 @@ public class EsCustomFieldService {
         return id;
     }
 
+    /**
+     * 批量添加自定义栏位值
+     * @param vo
+     * @return
+     * @throws Exception
+     */
+    public List<String> batchAddCustomField(EsCustomFieldBatchVO vo) throws Exception {
+        Integer startNum = vo.getStartNumber();
+        Integer endNum = vo.getEndNumber();
+        List<String> isAdd = vo.getIsAdd();
+        List<String> isDel = vo.getIsDelete();
+        List<String> ids = new ArrayList<>();
+        List<EsCustomFieldDTO> fieldDTOS = vo.getEsCustomFieldDTOS();
+        if (!CollectionUtils.isEmpty(isAdd) && startNum <= 1 && endNum < 1) {
+            isAdd.removeAll(isDel);
+            for (String patentNo : isAdd) {
+                for (EsCustomFieldDTO fieldDTO : fieldDTOS) {
+                    fieldDTO.setPatentNo(patentNo);
+                    String field = this.addCustomField(fieldDTO);
+                    ids.add(field);
+                }
+
+            }
+        } else if (startNum > 1 && endNum > 0){
+            List<String> patentNos = this.getPatentNos(vo);
+            for (String patentNo : patentNos) {
+                for (EsCustomFieldDTO fieldDTO : fieldDTOS) {
+                    fieldDTO.setPatentNo(patentNo);
+                    String field = this.addCustomField(fieldDTO);
+                    ids.add(field);
+                }
+            }
+        }
+        return ids;
+    }
+
+    /**
+     * 获取专利号列表
+     * @param vo
+     * @return
+     * @throws Exception
+     */
+    public List<String> getPatentNos(EsCustomFieldBatchVO vo) throws Exception {
+        Integer taskId = vo.getTaskId();
+        Integer projectId = vo.getProjectId();
+        Integer startNum = vo.getStartNumber();
+        Integer endNum = vo.getEndNumber();
+        List<String> isAdd = vo.getIsAdd();
+        List<String> isDel = vo.getIsDelete();
+        String searchCondition = "";
+        if (StringUtils.isNotEmpty(vo.getSearchQuery())) {
+            searchCondition = vo.getSearchQuery();
+        }
+        List<EsCustomFieldValueDTO> customFields = vo.getCustomFields();
+        if (!CollectionUtils.isEmpty(customFields)) {
+            searchCondition = esService.parseCustomField(customFields);
+        }
+        if (taskId != null) {
+            if (searchCondition != null && !"".equals(searchCondition.trim())) {
+                searchCondition = "taskId = " + taskId + " AND " + searchCondition;
+            } else {
+                searchCondition = "taskId = " + taskId;
+            }
+        } else {
+            if (projectId != null) {
+                if (searchCondition != null && !"".equals(searchCondition.trim())) {
+                    searchCondition = "projectId = " + projectId + " AND " + searchCondition;
+                } else {
+                    searchCondition = "projectId = " + projectId;
+                }
+            }
+        }
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        //1. 解析检索条件
+        treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
+        //格式化检索式
+        //3. 从es中检索数据
+        Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
+        builder.query(q);
+        if (startNum > 0 && endNum > 0) {
+            builder.from(startNum-1).size(endNum);
+        }
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        List<Hit<Patent>> hits = response.hits().hits();
+        List<String> patentNos = new ArrayList<>();
+        for (Hit<Patent> hit : hits) {
+            Patent patent = hit.source();
+            patentNos.add(patent.getPatentNo());
+        }
+        patentNos.addAll(isAdd);
+        patentNos.removeAll(isDel);
+        return patentNos.stream().distinct().collect(Collectors.toList());
+    }
+
 
     //添加操作历史
     public String addCustomFieldHistory(ESCustomFieldHistory customFieldHistory) throws Exception {

+ 39 - 25
src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java

@@ -11,6 +11,7 @@ import cn.cslg.pas.common.model.request.MapRequest;
 import cn.cslg.pas.common.model.request.OrderDTO;
 import cn.cslg.pas.common.model.request.QueryRequest;
 import cn.cslg.pas.common.model.request.StringRequest;
+import cn.cslg.pas.common.utils.FormatUtil;
 import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
 import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
 import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
@@ -39,6 +40,7 @@ import com.alibaba.fastjson2.JSONObject;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -63,8 +65,8 @@ public class EsPatentService {
      * @return
      * @throws IOException
      */
-    public PatentDetailDTO selectPatentDetail(PatentNoVO vo) throws IOException {
-        PatentDetailDTO dto = new PatentDetailDTO();
+    public PatentColumnDTO selectPatentDetail(PatentNoVO vo) throws IOException {
+        PatentColumnDTO dto = new PatentColumnDTO();
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
         builder.index("patent");
@@ -76,19 +78,8 @@ public class EsPatentService {
         for (Hit<Patent> hit : hits) {
             Patent esMess = hit.source();
             BeanUtils.copyProperties(esMess, dto);
-            dto.setMC(esMess.getMipc());
-            dto.setLG(esMess.getLegalStatus());
-            dto.setSS(esMess.getSimpleStatus());
-            dto.setPT(esMess.getPatentType());
-            if (!CollectionUtils.isEmpty(esMess.getTitle())) {
-                dto.setTitle(this.loadContent(esMess.getTitle()));
-            }
-            if (!CollectionUtils.isEmpty(esMess.getAbstractStr())) {
-                dto.setAbstractStr(this.loadContent(esMess.getAbstractStr()));
-            }
-            if (!CollectionUtils.isEmpty(esMess.getClaim())) {
-                dto.setClaim(this.loadContent(esMess.getClaim()));
-            }
+            dto.setRightHolderAddr(esMess.getRightHolderAddr());
+            dto.setApplicantAddr(esMess.getApplicantAddr());
             if (!CollectionUtils.isEmpty(esMess.getApplicant())) {
                 dto.setApplicant(this.loadName(esMess.getApplicant()));
             }
@@ -99,6 +90,7 @@ public class EsPatentService {
                 dto.setInventor(this.loadName(esMess.getInventor()));
             }
         }
+        dto.setPictureGuid(FormatUtil.getPictureFormat(dto.getAppNo()));
         return dto;
     }
 
@@ -113,7 +105,11 @@ public class EsPatentService {
 
     //通用返回申请人、权利人、发明人
     public List<String> loadName(List<PatentPerson> list) {
-        return list.stream().map(PatentPerson::getName).collect(Collectors.toList());
+        List<String> collect = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(list)) {
+            collect = list.stream().map(PatentPerson::getName).collect(Collectors.toList());
+        }
+        return collect;
     }
 
     /**
@@ -125,10 +121,11 @@ public class EsPatentService {
      */
     public List<PatentKinDTO> selectKinByPatentNo(PatentKinVO vo) throws IOException {
         //1.根据专利号查询出同族
-        String no = vo.getPatentNo();
+        String no = vo.getNo();
         Integer pageNum = vo.getPageNum();
         Integer pageSize = vo.getPageSize();
         String type = vo.getType();
+        String patentNo = vo.getPatentNo();
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
         builder.index("patent_family");
@@ -155,10 +152,12 @@ public class EsPatentService {
             if (!CollectionUtils.isEmpty(patentList)) {
                 for (FamilyPatent familyPatent : patentList) {
                     PatentKinDetailVO kinDetailVO = new PatentKinDetailVO();
+                    kinDetailVO.setPageNum(vo.getPageNum());
+                    kinDetailVO.setPageSize(vo.getPageSize());
                     kinDetailVO.setAppNo(familyPatent.getAppNo());
                     kinDetailVO.setPublicNo(familyPatent.getPublicNo());
                     kinDetailVO.setGrantNo(familyPatent.getGrantNo());
-                    PatentKinDTO kinDTO = this.selectPatentKindDetail(kinDetailVO)
+                    PatentKinDTO kinDTO = this.selectPatentKindDetail(kinDetailVO,patentNo)
                             .stream().findFirst().orElse(null);
                     if (kinDTO != null) {
                         kinDTOS.add(kinDTO);
@@ -170,22 +169,33 @@ public class EsPatentService {
         return kinDTOS;
     }
 
-    public List<PatentKinDTO> selectPatentKindDetail(PatentKinDetailVO vo) throws IOException {
+    public List<PatentKinDTO> selectPatentKindDetail(PatentKinDetailVO vo, String patentNo) throws IOException {
+        Integer pageNum = vo.getPageNum();
+        Integer pageSize = vo.getPageSize();
         List<PatentKinDTO> list = new ArrayList<>();
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
         builder.index("patent");
         //申请号
-        if (StringUtils.isNotEmpty(vo.getAppNo())) {
-
-        }
         Query q1 = QueryBuilders.term(t -> t.field("patent_no.keyword").value(vo.getAppNo()));
         //公开号
         Query q2 = QueryBuilders.term(t -> t.field("patent_no.keyword").value(vo.getPublicNo()));
         //授权号
 //        Query q3 = QueryBuilders.term(t -> t.field("patent_no.keyword").value(vo.getGrantNo()));
-        Query bool = QueryBuilders.bool(i -> i.should(q1, q2));
+        Query bool = null;
+        if (StringUtils.isNotEmpty(patentNo)) {
+            String str = "*";
+            String s = str.concat(patentNo).concat("*");
+            Query query = QueryBuilders.wildcard(i -> i.field(patentNo).value(s));
+            bool = QueryBuilders.bool(i -> i.should(q1, q2).must(query));
+        } else {
+            bool = QueryBuilders.bool(i -> i.should(q1, q2));
+        }
         builder.query(bool);
+        //分页
+        if (pageNum > 0 && pageSize > 0) {
+            builder.from((pageNum - 1) * pageSize).size(pageSize);
+        }
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
         List<Hit<Patent>> hits = response.hits().hits();
         for (Hit<Patent> hit : hits) {
@@ -196,10 +206,11 @@ public class EsPatentService {
                 kinDTO.setAppNo(patent.getAppNo());
                 kinDTO.setPublicNo(patent.getPublicNo());
                 kinDTO.setGrantNo(patent.getGrantNo());
-                kinDTO.setTitle(this.loadContent(patent.getTitle()));
-                kinDTO.setAbstractStr(this.loadContent(patent.getAbstractStr()));
+                kinDTO.setTitle(patent.getTitle());
+                kinDTO.setAbstractStr(patent.getAbstractStr());
                 kinDTO.setApplicant(this.loadName(patent.getApplicant()));
                 kinDTO.setRightHolder(this.loadName(patent.getRightHolder()));
+                kinDTO.setPictureGuid(FormatUtil.getPictureFormat(kinDTO.getAppNo()));
                 list.add(kinDTO);
             }
         }
@@ -239,6 +250,9 @@ public class EsPatentService {
         if (current!=null&&size!=null&&current > 0 && size > 0) {
             builder.from((current.intValue() - 1) * size.intValue()).size(size.intValue());
         }
+        else {
+            builder.from(0).size(10000);
+        }
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
         List<Hit<Patent>> hits = response.hits().hits();
         if (hits != null && hits.size() > 0) {

+ 25 - 4
src/main/java/cn/cslg/pas/service/business/es/EsService.java

@@ -23,6 +23,7 @@ import cn.cslg.pas.service.business.CommonService;
 import cn.cslg.pas.service.common.PatentStarApiService;
 import cn.cslg.pas.service.query.FormatQueryService;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
+import co.elastic.clients.elasticsearch._types.SortOptions;
 import co.elastic.clients.elasticsearch._types.SortOrder;
 import co.elastic.clients.elasticsearch._types.aggregations.*;
 import co.elastic.clients.elasticsearch._types.query_dsl.*;
@@ -54,6 +55,8 @@ public class EsService {
     private FormatQueryService formatQueryService;
     @Autowired
     private PatentStarApiService patentStarApiService;
+    @Autowired
+    private EsPatentService esPatentService;
 
 
     /**
@@ -177,8 +180,8 @@ public class EsService {
         //3. 从es中检索数据
         Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
         //判断同族分组
+        String str = "";
         if (StringUtils.isNotEmpty(groupField)) {
-            String str = "";
             switch (groupField) {
                 case "simpleFamilyId":
                     str = "simple_family_id";
@@ -190,8 +193,13 @@ public class EsService {
                     str = "patsnap_family_id";
                     break;
             }
-            String esField = str;
-            Aggregation hits = AggregationBuilders.topHits(i -> i.size(1));
+        }
+        String esField = str;
+        if (StringUtils.isNotEmpty(esField)) {
+            List<SortOptions> options = new ArrayList<>();
+            SortOptions appDate = SortOptions.of(i -> i.field(j -> j.field("app_date").order(SortOrder.Asc)));
+            options.add(appDate);
+            Aggregation hits = AggregationBuilders.topHits(i -> i.size(1).sort(options));
             Aggregation aggregation = new Aggregation.Builder().terms(new TermsAggregation.Builder()
                     .field(esField).build())
                     .aggregations(new HashMap() {{
@@ -241,7 +249,7 @@ public class EsService {
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
         List<PatentColumnDTO> list = new ArrayList<>();
         long total = 0L;
-        if (StringUtils.isNotEmpty(groupField)) {
+        if (StringUtils.isNotEmpty(esField)) {
             Aggregate agg = response.aggregations().get("Agg");
             List<FiltersBucket> buckets = agg.filters().buckets().array();
             for (FiltersBucket bucket : buckets) {
@@ -256,6 +264,9 @@ public class EsService {
                         Patent patent1 = JSONObject.parseObject(String.valueOf(data), Patent.class);
                         PatentColumnDTO columnDTO = new PatentColumnDTO();
                         BeanUtils.copyProperties(patent1, columnDTO);
+                        columnDTO.setApplicant(esPatentService.loadName(patent1.getApplicant()));
+                        columnDTO.setRightHolder(esPatentService.loadName(patent1.getRightHolder()));
+                        columnDTO.setInventor(esPatentService.loadName(patent1.getInventor()));
                         list.add(columnDTO);
                     });
                 }
@@ -268,6 +279,9 @@ public class EsService {
                 PatentColumnDTO columnDTO = new PatentColumnDTO();
 //            columnDTO.setPatentNo(esMess.getPatentNo());
                 BeanUtils.copyProperties(esMess, columnDTO);
+                columnDTO.setApplicant(esPatentService.loadName(esMess.getApplicant()));
+                columnDTO.setRightHolder(esPatentService.loadName(esMess.getRightHolder()));
+                columnDTO.setInventor(esPatentService.loadName(esMess.getInventor()));
                 list.add(columnDTO);
 
             }
@@ -911,6 +925,7 @@ public class EsService {
         for (Hit<Patent> hit : hits) {
             Patent esMess = hit.source();
             if (esMess != null) {
+                dto.setClaimContent(esMess.getClaim());
                 String claim = StringUtils.strip(JSON.toJSONString(esMess.getClaim()), "[]");
                 ContentDetailDTO contentDetailDTO = JSONObject.parseObject(claim, ContentDetailDTO.class);
                 if (contentDetailDTO.getIfOrigin()) {
@@ -921,6 +936,12 @@ public class EsService {
         return dto;
     }
 
+    /**
+     * 装载摘要附图
+     *
+     * @param patentColumnDTOS
+     * @return
+     */
     public List<PatentColumnDTO> loadCoulumnDTO(List<PatentColumnDTO> patentColumnDTOS) {
         patentColumnDTOS.forEach(item -> {
             item.setPictureGuid(FormatUtil.getPictureFormat(item.getAppNo()));

+ 2 - 0
src/main/java/cn/cslg/pas/service/business/invalidReport/AssoGroupFeatureService.java

@@ -7,6 +7,8 @@ import cn.cslg.pas.common.model.cronModel.PersonnelVO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.utils.GenerateObjectUtil;
 import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.vo.PatentRightVo;
+import cn.cslg.pas.common.vo.business.SplitVO;
 import cn.cslg.pas.common.vo.invalidVO.GroupFeatureHistoryVO;
 import cn.cslg.pas.domain.business.*;
 import cn.cslg.pas.exception.XiaoShiException;

+ 1 - 0
src/main/java/cn/cslg/pas/service/business/invalidReport/EvidenceReasonService.java

@@ -240,6 +240,7 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
                         queryEvidenceReasonVO.setFeInvalidReasonDetail2(item.getInvalidReasonDetail2());
                         queryEvidenceReasonVO.setFeRbDecisionKey(item.getRbDecisionKey());
                         queryEvidenceReasonVO.setFeRbOpinions(item.getRbOpinions());
+                        queryEvidenceReasonVO.setFeRbSummary(item.getRbSummary());
 
                         queryEvidenceReasonVO.setFeCourtOpinions1(item.getCourtOpinions1());
                         queryEvidenceReasonVO.setFeCourtOpinions2(item.getCourtOpinions2());

+ 14 - 0
src/main/java/cn/cslg/pas/service/business/stabilityReport/AssoGroupReasonService.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.service.business.stabilityReport;
+
+
+import cn.cslg.pas.domain.business.AssoEventFile;
+import cn.cslg.pas.domain.business.AssoGroupReason;
+import cn.cslg.pas.mapper.AssoEventFileMapper;
+import cn.cslg.pas.mapper.stabilityReport.AssoGroupReasonMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AssoGroupReasonService extends ServiceImpl<AssoGroupReasonMapper, AssoGroupReason> {
+
+}

+ 469 - 0
src/main/java/cn/cslg/pas/service/business/stabilityReport/CompareRecordService.java

@@ -0,0 +1,469 @@
+package cn.cslg.pas.service.business.stabilityReport;
+
+import cn.cslg.pas.common.dto.stabilityReport.AddCompareRecordDTO;
+import cn.cslg.pas.common.dto.stabilityReport.QueryAllCompareGroupDTO;
+import cn.cslg.pas.common.dto.stabilityReport.QueryAllCompareRecordDTO;
+import cn.cslg.pas.common.dto.stabilityReport.QueryCompareRecordDTO;
+import cn.cslg.pas.common.model.importTaskModel.PatentRight;
+import cn.cslg.pas.common.vo.CompareLiteratureVO;
+import cn.cslg.pas.common.vo.PatentRightVo;
+import cn.cslg.pas.common.vo.RePatentClaim;
+import cn.cslg.pas.common.vo.business.SplitVO;
+import cn.cslg.pas.common.vo.stabilityReport.AllCompareGroupVO;
+import cn.cslg.pas.common.vo.stabilityReport.AllCompareRecordVO;
+import cn.cslg.pas.common.vo.stabilityReport.CompareRecordVO;
+import cn.cslg.pas.domain.business.*;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.business.CompareLiteratureService;
+import cn.cslg.pas.service.business.FeatureService;
+import cn.cslg.pas.service.business.ProofGroupService;
+import cn.cslg.pas.service.business.ReportProjectService;
+import cn.cslg.pas.service.business.invalidReport.AssoGroupFeatureService;
+import cn.cslg.pas.service.business.invalidReport.AssoReasonLiteratureService;
+import cn.cslg.pas.service.business.invalidReport.EvidenceReasonService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.apache.commons.math3.ml.neuralnet.FeatureInitializerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ */
+@Service
+public class CompareRecordService {
+    @Autowired
+    private AssoGroupReasonService assoGroupReasonService;
+    @Autowired
+    private AssoReasonLiteratureService assoReasonLiteratureService;
+    @Autowired
+    private EvidenceReasonService evidenceReasonService;
+
+    @Autowired
+    private FeatureService featureService;
+
+    @Autowired
+    private ReportProjectService reportProjectService;
+
+    @Autowired
+    private CompareLiteratureService compareLiteratureService;
+    @Autowired
+    private ProofGroupService proofGroupService;
+
+    public Integer addCompareRecord(AddCompareRecordDTO addCompareRecordDTO) {
+        List<AddCompareRecordDTO.AssoFeature> assoFeatureList = addCompareRecordDTO.getAssoFeatureList();
+        Integer id = addCompareRecordDTO.getId();
+        //添加对比记录
+        EvidenceReason evidenceReason = new EvidenceReason();
+        if (id != null) {
+            evidenceReason = evidenceReasonService.getById(id);
+            evidenceReason.setEvidenceText(addCompareRecordDTO.getEvidenceText());
+            evidenceReason.setDescription(addCompareRecordDTO.getCommon());
+            evidenceReason.setFileGuid(addCompareRecordDTO.getFileGuid());
+            evidenceReason.updateById();
+            LambdaQueryWrapper<AssoReasonLiterature> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(AssoReasonLiterature::getReasonId, id);
+            assoReasonLiteratureService.remove(queryWrapper);
+            LambdaQueryWrapper<AssoGroupReason> queryWrapper1 = new LambdaQueryWrapper<>();
+            queryWrapper1.eq(AssoGroupReason::getReasonId, id);
+            assoGroupReasonService.remove(queryWrapper1);
+        } else {
+            evidenceReason.setEvidenceText(addCompareRecordDTO.getEvidenceText());
+            evidenceReason.setDescription(addCompareRecordDTO.getCommon());
+            evidenceReason.setFileGuid(addCompareRecordDTO.getFileGuid());
+            evidenceReason.insert();
+        }
+        AssoReasonLiterature assoReasonLiterature = new AssoReasonLiterature();
+        assoReasonLiterature.setReasonId(evidenceReason.getId());
+        assoReasonLiterature.setLiteratureId(addCompareRecordDTO.getLiteratureId());
+        assoReasonLiterature.setMarkColor(addCompareRecordDTO.getMarkColor());
+        assoReasonLiterature.setMarkType(addCompareRecordDTO.getMarkType());
+        assoReasonLiterature.setPosition(addCompareRecordDTO.getPosition());
+        assoReasonLiterature.setFieldName(addCompareRecordDTO.getFieldName());
+        assoReasonLiterature.insert();
+
+        if (assoFeatureList != null && assoFeatureList.size() != 0) {
+            for (AddCompareRecordDTO.AssoFeature item : assoFeatureList) {
+                //根据特征id 查询证据组合和特征关联
+                AssoGroupReason assoGroupReason = new AssoGroupReason();
+                assoGroupReason.setFeatureId(item.getFeatureId());
+                assoGroupReason.setConclusion(item.getConclusion());
+                assoGroupReason.setReasonId(evidenceReason.getId());
+                assoGroupReason.insert();
+            }
+        }
+        return id;
+    }
+
+
+    /**
+     * 批量删除证据组合
+     *
+     * @param ids
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean removeCompareRecord(List<Integer> ids) {
+        if (ids == null || ids.size() == 0) {
+            throw new XiaoShiException("请至少选择一个记录");
+        }
+        //根据对比记录id
+        LambdaQueryWrapper<AssoGroupReason> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(AssoGroupReason::getReasonId, ids);
+        queryWrapper.isNotNull(AssoGroupReason::getGroupId);
+        List<AssoGroupReason> assoGroupReasons = assoGroupReasonService.list(queryWrapper);
+        if (assoGroupReasons.size() != 0) {
+            List<Integer> reasonIds = assoGroupReasons.stream().map(AssoGroupReason::getReasonId).collect(Collectors.toList());
+            throw new XiaoShiException("对比记录与方案有关联,请先删除方案");
+
+        }
+        //删除证据组合关联
+        LambdaQueryWrapper<AssoGroupReason> queryWrapper1 = new LambdaQueryWrapper<>();
+        queryWrapper.in(AssoGroupReason::getReasonId, ids);
+        assoGroupReasonService.remove(queryWrapper);
+
+        //删除和对比文献关联
+        LambdaQueryWrapper<AssoReasonLiterature> queryWrapper2 = new LambdaQueryWrapper<>();
+        queryWrapper2.in(AssoReasonLiterature::getReasonId, ids);
+        assoReasonLiteratureService.remove(queryWrapper2);
+        //删除无效理由
+        evidenceReasonService.removeBatchByIds(ids);
+        return true;
+
+    }
+
+    /**
+     * 查询对比记录
+     * lrj
+     *
+     * @param queryCompareRecordDTO
+     * @return
+     */
+    public List<CompareRecordVO> queryCompareRecord(QueryCompareRecordDTO queryCompareRecordDTO) {
+        List<CompareRecordVO> recordVOS = new ArrayList<>();
+        //根据对比文献id 查询无效理由和特征
+        Integer literatureId = queryCompareRecordDTO.getLiteratureId();
+        LambdaQueryWrapper<AssoReasonLiterature> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoReasonLiterature::getLiteratureId, literatureId);
+        List<AssoReasonLiterature> assoReasonLiteratures = assoReasonLiteratureService.list(queryWrapper);
+
+        for (AssoReasonLiterature assoReasonLiterature : assoReasonLiteratures) {
+            Integer reasonId = assoReasonLiterature.getReasonId();
+            CompareRecordVO compareRecordVO = new CompareRecordVO();
+            compareRecordVO.setFieldName(assoReasonLiterature.getFieldName());
+            compareRecordVO.setMarkColor(assoReasonLiterature.getMarkColor());
+            compareRecordVO.setMarkType(assoReasonLiterature.getMarkType());
+            compareRecordVO.setPosition(assoReasonLiterature.getPosition());
+            compareRecordVO.setLiteratureId(literatureId);
+            //根据对比记录id查询对比记录
+            EvidenceReason evidenceReason = evidenceReasonService.getById(reasonId);
+            compareRecordVO.setEvidenceText(evidenceReason.getEvidenceText());
+            compareRecordVO.setCommon(evidenceReason.getDescription());
+            compareRecordVO.setId(evidenceReason.getId());
+            compareRecordVO.setFileGuid(evidenceReason.getFileGuid());
+            //根据对比记录id查询特征
+            LambdaQueryWrapper<AssoGroupReason> queryWrapper1 = new LambdaQueryWrapper<>();
+            queryWrapper1.eq(AssoGroupReason::getReasonId, reasonId)
+                    .isNull(AssoGroupReason::getGroupId);
+            List<AssoGroupReason> assoGroupReasons = assoGroupReasonService.list(queryWrapper1);
+            List<CompareRecordVO.AssoFeature> assoFeatureList = new ArrayList<>();
+            assoGroupReasons.forEach(item -> {
+                CompareRecordVO.AssoFeature assoFeature = new CompareRecordVO.AssoFeature();
+                assoFeature.setFeatureId(item.getFeatureId());
+                assoFeature.setConclusion(item.getConclusion());
+                assoFeatureList.add(assoFeature);
+            });
+            compareRecordVO.setAssoFeatureList(assoFeatureList);
+        recordVOS.add(compareRecordVO);
+        }
+        return recordVOS;
+    }
+
+
+    public List<AllCompareRecordVO> queryAllCompareRecord(QueryAllCompareRecordDTO dto) {
+        List<AllCompareRecordVO> vos = new ArrayList<>();
+        Integer projectId = dto.getProjectId();
+
+        //查询标的专利号
+        LambdaQueryWrapper<ReportProject> reportWrapper = new LambdaQueryWrapper<>();
+        reportWrapper.eq(ReportProject::getProjectId, projectId);
+        ReportProject reportProject = reportProjectService.getOne(reportWrapper, false);
+        if (reportProject == null) {
+            throw new XiaoShiException("未查到报告");
+        }
+        String patentNo = reportProject.getSignPatentNo();
+
+
+        //获得特征
+        SplitVO splitVO = new SplitVO();
+        splitVO.setProjectId(dto.getProjectId());
+        splitVO.setPatentNo(patentNo);
+        List<Feature> features = featureService.getSplitedFeature(splitVO);
+        List<Integer> ids = features.stream().map(Feature::getId).collect(Collectors.toList());
+
+        //查询拆分下的权要
+        List<RePatentClaim> patentRights = new ArrayList<>();
+        try {
+            patentRights = featureService.getRightListByNo(patentNo);
+        } catch (Exception e) {
+            throw new XiaoShiException("获得权要失败");
+        }
+
+        //根据特征id 查询对比记录
+        LambdaQueryWrapper<AssoGroupReason> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoGroupReason::getFeatureId, ids)
+                .isNull(AssoGroupReason::getGroupId);
+        List<AssoGroupReason> assoGroupReasons = assoGroupReasonService.list(queryWrapper);
+
+        //遍历特征获得内容
+        for (Feature feature : features) {
+
+            // 装载特征信息
+            AllCompareRecordVO allCompareRecordVO = new AllCompareRecordVO();
+            allCompareRecordVO.setFeatureContent(feature.getContent());
+            allCompareRecordVO.setFeatureSysOrder(feature.getSysOrder());
+            allCompareRecordVO.setFeatureName("特征" + feature.getSysOrder());
+            allCompareRecordVO.setFeatureId(feature.getId());
+
+            //装载权要信息
+            RePatentClaim rePatentClaim = patentRights.stream().filter(item -> item.getSort().equals(feature.getRightSort())).findFirst().orElse(null);
+            if (rePatentClaim != null) {
+                allCompareRecordVO.setRightName(rePatentClaim.getRightName());
+                allCompareRecordVO.setRightContent(rePatentClaim.getContent());
+                allCompareRecordVO.setRightSort(rePatentClaim.getSort());
+                allCompareRecordVO.setRightType(rePatentClaim.getType());
+            }
+
+            //装载无效理由
+            List<AssoGroupReason> assoGroupReasons1 = assoGroupReasons.stream()
+                    .filter(item -> item.getFeatureId().equals(feature.getId()))
+                    .collect(Collectors.toList());
+            List<Integer> reasonIds = assoGroupReasons1.stream().map(AssoGroupReason::getReasonId).collect(Collectors.toList());
+            //根据无效理由id 查询无效理由
+            LambdaQueryWrapper<EvidenceReason> queryWrapper1 = new LambdaQueryWrapper<>();
+            queryWrapper1.in(EvidenceReason::getId, reasonIds);
+            List<EvidenceReason> evidenceReasons = evidenceReasonService.list(queryWrapper1);
+
+            //根据无效理由id 查询无效理由和文献关联
+            LambdaQueryWrapper<AssoReasonLiterature> queryWrapper2 = new LambdaQueryWrapper<>();
+            queryWrapper2.in(AssoReasonLiterature::getReasonId, reasonIds);
+            List<AssoReasonLiterature> assoReasonLiteratures = assoReasonLiteratureService.list(queryWrapper2);
+            //根据文献id查询文献列表
+            List<Integer> literatureIds = assoReasonLiteratures.stream().map(AssoReasonLiterature::getLiteratureId).collect(Collectors.toList());
+            List<CompareLiteratureVO> compareLiteratureVOS = compareLiteratureService.getByIds(literatureIds);
+
+            List<AllCompareRecordVO.EvidenceReason> evidenceReasonList = new ArrayList<>();
+
+            //装载无效理由
+            evidenceReasons.forEach(item -> {
+                AllCompareRecordVO.EvidenceReason evidenceReason = new AllCompareRecordVO.EvidenceReason();
+                evidenceReason.setEvidenceText(item.getEvidenceText());
+                evidenceReason.setCommon(item.getDescription());
+                //根据无效理由id 查询无效理由和文献关联
+                AssoReasonLiterature assoReasonLiteratureTmp = assoReasonLiteratures.stream()
+                        .filter(t -> t.getReasonId().equals(item.getId())).findFirst().orElse(null);
+                //装载划词信息
+                if (assoReasonLiteratureTmp != null) {
+                    evidenceReason.setLiteratureId(assoReasonLiteratureTmp.getLiteratureId());
+                    evidenceReason.setFieldName(assoReasonLiteratureTmp.getFieldName());
+                    evidenceReason.setPosition(assoReasonLiteratureTmp.getPosition());
+                    //装载文献信息
+                    CompareLiteratureVO compareLiteratureVO = compareLiteratureVOS.stream()
+                            .filter(t -> t.getId().equals(assoReasonLiteratureTmp.getLiteratureId()))
+                            .findFirst().orElse(null);
+                    if (compareLiteratureVO != null) {
+                        evidenceReason.setLiteratureNo(compareLiteratureVO.getLiteratureNo());
+                        evidenceReason.setLiteratureName(compareLiteratureVO.getName());
+                        evidenceReason.setLiteratureSysOrder(compareLiteratureVO.getSysOrder());
+                        evidenceReason.setLiteratureType(compareLiteratureVO.getType());
+                    }
+                }
+
+                evidenceReasonList.add(evidenceReason);
+            });
+            allCompareRecordVO.setEvidenceReasons(evidenceReasonList);
+            vos.add(allCompareRecordVO);
+        }
+        return vos;
+    }
+
+    public List<AllCompareGroupVO> getCompareGroups(QueryAllCompareGroupDTO queryCompareRecordDTO) {
+        List<AllCompareGroupVO> allCompareGroupVOS = new ArrayList<>();
+        Integer projectId = queryCompareRecordDTO.getProjectId();
+        //根据ProjectId查询对比组合
+        LambdaQueryWrapper<ProofGroup> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ProofGroup::getProjectId, projectId);
+        List<ProofGroup> proofGroups = proofGroupService.list(queryWrapper);
+
+        //查询标的专利号
+        LambdaQueryWrapper<ReportProject> reportWrapper = new LambdaQueryWrapper<>();
+        reportWrapper.eq(ReportProject::getProjectId, projectId);
+        ReportProject reportProject = reportProjectService.getOne(reportWrapper, false);
+        if (reportProject == null) {
+            throw new XiaoShiException("未查到报告");
+        }
+        String patentNo = reportProject.getSignPatentNo();
+
+        //查询拆分下的权要
+        List<RePatentClaim> patentRights = new ArrayList<>();
+        try {
+            patentRights = featureService.getRightListByNo(patentNo);
+        } catch (Exception e) {
+            throw new XiaoShiException("获得权要失败");
+        }
+
+        //获得特征
+        SplitVO splitVO = new SplitVO();
+        splitVO.setProjectId(projectId);
+        List<Feature> features = featureService.getSplitedFeature(splitVO);
+
+        //装载证据组合
+        for (ProofGroup proofGroup : proofGroups) {
+            AllCompareGroupVO allCompareGroupVO = new AllCompareGroupVO();
+            Integer id = proofGroup.getId();
+            Integer claimSort = proofGroup.getClaimSort();
+            allCompareGroupVO.setGroupId(id);
+            allCompareGroupVO.setCommon(proofGroup.getCommon1());
+            //获得权要并装载
+            RePatentClaim rePatentClaim = patentRights.stream().filter(item -> item.getSort().equals(claimSort)).findFirst().orElse(null);
+            if (rePatentClaim != null) {
+                allCompareGroupVO.setRightName(rePatentClaim.getRightName());
+                allCompareGroupVO.setRightSort(rePatentClaim.getSort());
+                allCompareGroupVO.setRightContent(rePatentClaim.getContent());
+            }
+            //根据组合id 查询对比记录
+            LambdaQueryWrapper<AssoGroupReason> queryWrapper1 = new LambdaQueryWrapper<>();
+            queryWrapper1.eq(AssoGroupReason::getGroupId, id);
+            List<AssoGroupReason> assoGroupReasons = assoGroupReasonService.list(queryWrapper1);
+            //获得特征
+            List<Feature> featuresList = features.stream()
+                    .filter(item -> item.getRightSort().equals(claimSort)).collect(Collectors.toList());
+            List<AllCompareGroupVO.FeatureMessage> featureMessages = new ArrayList<>();
+            for (Feature feature : featuresList) {
+                AllCompareGroupVO.FeatureMessage featureMessage = new AllCompareGroupVO.FeatureMessage();
+                featureMessage.setFeatureName("特征" + feature.getSysOrder());
+                featureMessage.setSysOrder(feature.getSysOrder());
+                featureMessage.setContent(feature.getContent());
+                List<AllCompareGroupVO.EvidenceReason> evidenceReasons = new ArrayList<>();
+                //根据特征id查询无效理由
+                List<AssoGroupReason> assoGroupReasonList = assoGroupReasons.stream()
+                        .filter(item -> item.getFeatureId().equals(feature.getId()))
+                        .collect(Collectors.toList());
+                //获得无效理由id
+                if (assoGroupReasonList.size() != 0) {
+                    List<Integer> reasonIds = assoGroupReasonList.stream().map(AssoGroupReason::getReasonId).collect(Collectors.toList());
+                    //根据无效理由id 查询无效理由
+                    LambdaQueryWrapper<EvidenceReason> queryWrapper2 = new LambdaQueryWrapper<>();
+                    queryWrapper2.in(EvidenceReason::getId, reasonIds);
+                    List<EvidenceReason> evidenceReasonList = evidenceReasonService.list(queryWrapper2);
+
+                    //根据无效理由id 查询无效理由和文献关联
+                    LambdaQueryWrapper<AssoReasonLiterature> queryWrapper3 = new LambdaQueryWrapper<>();
+                    queryWrapper3.in(AssoReasonLiterature::getReasonId, reasonIds);
+                    List<AssoReasonLiterature> assoReasonLiteratures = assoReasonLiteratureService.list(queryWrapper3);
+                    //根据文献id查询文献列表
+                    List<Integer> literatureIds = assoReasonLiteratures.stream().map(AssoReasonLiterature::getLiteratureId).collect(Collectors.toList());
+                    List<CompareLiteratureVO> compareLiteratureVOS = compareLiteratureService.getByIds(literatureIds);
+
+
+                    //装载无效理由
+                    evidenceReasonList.forEach(item -> {
+                        AllCompareGroupVO.EvidenceReason evidenceReason = new AllCompareGroupVO.EvidenceReason();
+                        evidenceReason.setEvidenceText(item.getEvidenceText());
+                        evidenceReason.setCommon(item.getDescription());
+                        //根据无效理由id 查询无效理由和文献关联
+                        AssoReasonLiterature assoReasonLiteratureTmp = assoReasonLiteratures.stream()
+                                .filter(t -> t.getReasonId().equals(item.getId())).findFirst().orElse(null);
+                        //装载划词信息
+                        if (assoReasonLiteratureTmp != null) {
+                            evidenceReason.setLiteratureId(assoReasonLiteratureTmp.getLiteratureId());
+                            evidenceReason.setFieldName(assoReasonLiteratureTmp.getFieldName());
+                            evidenceReason.setPosition(assoReasonLiteratureTmp.getPosition());
+                            //装载文献信息
+                            CompareLiteratureVO compareLiteratureVO = compareLiteratureVOS.stream()
+                                    .filter(t -> t.getId().equals(assoReasonLiteratureTmp.getLiteratureId()))
+                                    .findFirst().orElse(null);
+                            if (compareLiteratureVO != null) {
+                                evidenceReason.setLiteratureNo(compareLiteratureVO.getLiteratureNo());
+                                evidenceReason.setLiteratureName(compareLiteratureVO.getName());
+                                evidenceReason.setLiteratureSysOrder(compareLiteratureVO.getSysOrder());
+                                evidenceReason.setLiteratureType(compareLiteratureVO.getType());
+                            }
+                        }
+
+                        evidenceReasons.add(evidenceReason);
+                    });
+
+                }
+                featureMessage.setEvidenceReasons(evidenceReasons);
+                allCompareGroupVO.setFeatureMessages(featureMessages);
+            }
+            allCompareGroupVOS.add(allCompareGroupVO);
+        }
+        return allCompareGroupVOS;
+    }
+
+    /**
+     * 批量删除证据组合
+     *
+     * @param ids
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean removeCompareGroups(List<Integer> ids) {
+        if (ids == null || ids.size() == 0) {
+            throw new XiaoShiException("请至少选择一个方案");
+        }
+        //删除证据组合关联
+        LambdaQueryWrapper<AssoGroupReason> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(AssoGroupReason::getGroupId, ids);
+        assoGroupReasonService.remove(queryWrapper);
+        //删除证据组合
+        proofGroupService.removeBatchByIds(ids);
+        return true;
+
+    }
+
+
+    /**
+     * 获得已对比的文献
+     */
+    public List<CompareLiteratureVO> getComparedLiteratures(Integer projectId) {
+
+        List<CompareLiteratureVO> compareLiteratureVOS = new ArrayList<>();
+        //查询标的专利号
+        LambdaQueryWrapper<ReportProject> reportWrapper = new LambdaQueryWrapper<>();
+        reportWrapper.eq(ReportProject::getProjectId, projectId);
+        ReportProject reportProject = reportProjectService.getOne(reportWrapper, false);
+        if (reportProject == null) {
+            throw new XiaoShiException("未查到报告");
+        }
+
+        //获得特征
+        SplitVO splitVO = new SplitVO();
+        splitVO.setProjectId(projectId);
+        List<Feature> features = featureService.getSplitedFeature(splitVO);
+        List<Integer> ids = features.stream().map(Feature::getId).collect(Collectors.toList());
+        LambdaQueryWrapper<AssoGroupReason> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(AssoGroupReason::getFeatureId, ids);
+        List<AssoGroupReason> assoGroupReasons = assoGroupReasonService.list(queryWrapper);
+        if (assoGroupReasons != null) {
+            List<Integer> reasonIds = assoGroupReasons.stream().map(AssoGroupReason::getReasonId).collect(Collectors.toList());
+            //根据reasonIds查询对比文献id
+            LambdaQueryWrapper<AssoReasonLiterature> queryWrapper1 = new LambdaQueryWrapper<>();
+            queryWrapper1.in(AssoReasonLiterature::getReasonId, reasonIds);
+            List<AssoReasonLiterature> assoReasonLiteratures = assoReasonLiteratureService.list(queryWrapper1);
+            if (assoReasonLiteratures.size() != 0) {
+                List<Integer> literatureIds = assoReasonLiteratures.stream().map(AssoReasonLiterature::getLiteratureId).collect(Collectors.toList());
+                compareLiteratureVOS = compareLiteratureService.getByIds(literatureIds);
+            }
+        }
+        return compareLiteratureVOS;
+    }
+
+
+}

+ 3 - 1
src/main/java/cn/cslg/pas/service/common/MessageService.java

@@ -34,9 +34,11 @@ public class MessageService {
         } else if (type.equals(1)) {
             doneNum = patentProcess.getPatentMessageDoneNum();
         } else if (type.equals(2)) {
-
             doneNum = patentProcess.getPictureDoneNum();
         }
+        else if(type.equals(-1)){
+             doneNum=patentProcess.getPatentDoneNum();
+        }
         long percentage = (long) Math.floor((doneNum + 0D) / importTaskAMVO.getAllNum() * 100D);
         //通过WebSocket 在每一次循环结束后 向前端发送完成进度
         //当任务状态为完成时,flag为true

+ 81 - 1
src/main/java/cn/cslg/pas/service/common/PatentStarApiService.java

@@ -5,6 +5,7 @@ import cn.cslg.pas.common.config.XDns;
 import cn.cslg.pas.common.dto.PatentColumnDTO;
 import cn.cslg.pas.common.dto.PatentStarDTO;
 import cn.cslg.pas.common.dto.PatentStarListDTO;
+import cn.cslg.pas.common.dto.business.SelectClaimDTO;
 import cn.cslg.pas.common.model.cronModel.PersonnelVO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.importTaskModel.PatentApplicant;
@@ -13,9 +14,13 @@ import cn.cslg.pas.common.vo.ContentVO;
 import cn.cslg.pas.common.vo.StarPatentVO;
 import cn.cslg.pas.domain.WebLoginConfig;
 import cn.cslg.pas.domain.business.RetrieveRecord;
+import cn.cslg.pas.domain.es.PatentClassify;
 import cn.cslg.pas.domain.es.PatentPerson;
+import cn.cslg.pas.domain.es.PersonAddress;
+import cn.cslg.pas.domain.es.Text;
 import cn.cslg.pas.service.WebLoginConfigService;
 
+import cn.cslg.pas.service.importPatent.ImportFromWebToEsService;
 import cn.cslg.pas.service.query.FormatQueryService;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -31,7 +36,9 @@ import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import java.io.IOException;
 import java.util.*;
@@ -50,6 +57,8 @@ import java.util.regex.Pattern;
 @Service
 
 public class PatentStarApiService {
+    private ApplicationContext applicationContext;
+    private PatentStarApiService patentStarApiService;
     @Autowired
     private RetrieveRecordService retrieveRecordService;
     @Autowired
@@ -758,6 +767,30 @@ public class PatentStarApiService {
             patentColumnDTO.setPublicNo(item.getPublicNo());
             //装载公告号
             patentColumnDTO.setGrantNo(item.getPublicAccreditNo());
+            //装载专利状态
+            patentColumnDTO.setSimpleStatus(item.getLG().toString());
+            //装载摘要
+            List<Text> abstractList = new ArrayList<>();
+            Text text = new Text();
+            text.setTextContent(item.getAbstractStr());
+            text.setIfOrigin(true);
+            abstractList.add(text);
+            patentColumnDTO.setAbstractStr(abstractList);
+            //装载标题
+            List<Text> titleList = new ArrayList<>();
+            Text title = new Text();
+            title.setTextContent(item.getName());
+            title.setIfOrigin(true);
+            titleList.add(title);
+//            text.setLanguage(patent.getAppCountry());
+            patentColumnDTO.setTitle(titleList);
+            //装载权利要求
+            List<Text> claimList = new ArrayList<>();
+            Text claim = new Text();
+            claim.setTextContent(item.getClaimStr());
+            claim.setIfOrigin(true);
+            claimList.add(claim);
+            patentColumnDTO.setClaim(claimList);
             //装载专利号
             if (patentColumnDTO.getAppNo() != null) {
                 if (patentColumnDTO.getAppNo().trim().startsWith("CN")) {
@@ -778,7 +811,26 @@ public class PatentStarApiService {
             if (item.getApplicationDate() != null && !item.getApplicationDate().trim().equals("")) {
                 patentColumnDTO.setAppDate(DateUtils.strToDate(item.getApplicationDate()));
             }
-
+            //装载申请人地址
+            PersonAddress appAddress = new PersonAddress();
+            appAddress.setAddress(item.getApplicationAddress());
+            appAddress.setProvince(item.getProvinceStr());
+            patentColumnDTO.setApplicantAddr(appAddress);
+            //装载ipc(主)分类号
+            PatentClassify mipcClassify = new PatentClassify();
+            mipcClassify.setLevel5(item.getMainIpc());
+            patentColumnDTO.setMipc(mipcClassify);
+            //装载ipc分类号
+            List<PatentClassify> classifies = new ArrayList<>();
+            String[] split = item.getIpcListStr().split(";");
+            for (String ipc : split) {
+                PatentClassify ipcClassify = new PatentClassify();
+                ipcClassify.setLevel5(ipc);
+            }
+            patentColumnDTO.setIpc(classifies);
+            //获取摘要附图
+            String pictureApi = this.getPictureApi(patentColumnDTO.getAppNo());
+            patentColumnDTO.setPictureGuid(pictureApi);
             //装载公开日
             if (item.getPublicDate() != null && !item.getPublicDate().trim().equals("")) {
                 patentColumnDTO.setPublicDate(DateUtils.strToDate(item.getPublicDate()));
@@ -823,4 +875,32 @@ public class PatentStarApiService {
 
     }
 
+    /**
+     * 根据专利号查询外部权利要求
+     * @param patentNo
+     * @return
+     * @throws IOException
+     */
+    public SelectClaimDTO selectClaim(String patentNo) throws IOException {
+        PatentStarListDTO patentStarListDTO = new PatentStarListDTO();
+        String condition = "AN=" + patentNo;
+        patentStarListDTO.setCurrentQuery(condition);
+        patentStarListDTO.setDBType("CN");
+        patentStarListDTO.setOrderBy("AD");
+        patentStarListDTO.setOrderByType("DESC");
+        patentStarListDTO.setPageNum(1);
+        patentStarListDTO.setRowCount(10);
+        Records records = this.patentStarSearchLocal(patentStarListDTO);
+        Object data = records.getData();
+        String s = JSONArray.toJSONString(data);
+        List<PatentColumnDTO> list = JSONArray.parseArray(s, PatentColumnDTO.class);
+        SelectClaimDTO dto = new SelectClaimDTO();
+        if (!CollectionUtils.isEmpty(list)) {
+            for (PatentColumnDTO columnDTO : list) {
+                dto.setClaimContent(columnDTO.getClaim());
+            }
+        }
+        return dto;
+    }
+
 }

+ 0 - 1
src/main/java/cn/cslg/pas/service/importPatent/GetRightAndFullTextFromWebThread.java

@@ -86,7 +86,6 @@ public class GetRightAndFullTextFromWebThread extends Thread {
         UploadPatentWebDTO uploadPatentWebDTO1=new UploadPatentWebDTO();
         BeanUtils.copyProperties(uploadPatentWebDTO,uploadPatentWebDTO1);
         uploadPatentWebDTOs.add(uploadPatentWebDTO1);
-        uploadPatentWebDTOs.add(uploadPatentWebDTO);
         if (taskLock.tryLock()) {
             taskCondition.signalAll();
             taskLock.unlock();

+ 2 - 2
src/main/java/cn/cslg/pas/service/importPatent/ImportFromWebToEsService.java

@@ -167,7 +167,7 @@ public class ImportFromWebToEsService implements PatentImportImp {
                 Integer startPage = calculate.getStartPage();
                 Integer endPage = calculate.getEndPage();
 
-                for (int i = startPage; i <= endPage; i++) {
+                for (int i = startPage; i < endPage; i++) {
                     PatentStarListDTO patentStarListDTOTemp = new PatentStarListDTO();
                     BeanUtils.copyProperties(patentStarListDto, patentStarListDTOTemp);
                     patentStarListDTOTemp.setPageNum(i + 1);
@@ -260,7 +260,7 @@ public class ImportFromWebToEsService implements PatentImportImp {
                     BeanUtils.copyProperties(patent, orgPatent, FormatUtil.getNullPropertyNames(patent));
                     Patent patent1 = new Patent();
                     BeanUtils.copyProperties(orgPatent, patent1);
-                    dtos.removeIf(i->i.getIndex().equals(uploadPatentWebDTO.getIndex()));
+                    uploadPatentWebDTOS.removeIf(i->i.getIndex().equals(uploadPatentWebDTO.getIndex()));
                     savePatentToEsThread.awakeTask(patent1);
                 }
                 else {

+ 1 - 2
src/main/java/cn/cslg/pas/service/importPatent/SavePatentToEsThread.java

@@ -84,7 +84,7 @@ public class SavePatentToEsThread extends Thread {
 
                         //添加报告对比文件
                         if (importTaskAMVO.getProjectType() != null && importTaskAMVO.getProjectType().equals(1)) {
-                            if (importTaskAMVO.getType().equals(7)) {
+                            if (importTaskAMVO.getReportType().equals(7)||importTaskAMVO.getReportType().equals(1)||importTaskAMVO.getReportType().equals(2)) {
                                 CompareLiteratureService compareLiteratureService = applicationContext.getBean(CompareLiteratureService.class);
                                 compareLiteratureService.addPatentCompareLiterature(patent, importTaskAMVO.getProjectId(), importTaskAMVO.getCreateId());
                             }
@@ -118,7 +118,6 @@ public class SavePatentToEsThread extends Thread {
             }
         }
         taskThread.awakeTaskThread();
-        System.out.println("done");
     }
 
     public SavePatentToEsThread(TaskThread taskThread, ApplicationContext applicationContext) {

+ 2 - 2
src/main/java/cn/cslg/pas/service/importPatent/TaskThread.java

@@ -149,7 +149,7 @@ public class TaskThread extends Thread {
                     taskThreadLock.unlock();
                 }
                 MessageService messageService = applicationContext.getBean(MessageService.class);
-                messageService.sendWebsocketMessage(importTaskAMVO, 0, patentProcess);
+                messageService.sendWebsocketMessage(importTaskAMVO, -1, patentProcess);
             }
         }
     }
@@ -196,7 +196,7 @@ public class TaskThread extends Thread {
                 patentProcess.setPatentDoneNum(min);
                 importTaskAMVO.setDoneNum(min);
                 MessageService messageService = applicationContext.getBean(MessageService.class);
-                messageService.sendWebsocketMessage(importTaskAMVO, 1, this.patentProcess);
+                messageService.sendWebsocketMessage(importTaskAMVO, -1, this.patentProcess);
             }
         }
     }

+ 16 - 8
src/main/resources/jsons/event.json

@@ -10,7 +10,8 @@
     "groupClass": "",
     "ifSearch": "true",
     "ifGroup": "false",
-    "ifShow": "false"
+    "ifShow": "false",
+    "ifAsCondition": "true"
   },
   {
     "name": "事件名称",
@@ -23,7 +24,8 @@
     "groupClass": "getComGroup",
     "ifSearch": "true",
     "ifGroup": "false",
-    "ifShow": "true"
+    "ifShow": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "报告数量",
@@ -56,7 +58,8 @@
     "orderClass": "getClientNameOrder",
     "ifSearch": "true",
     "ifGroup": "false",
-    "ifShow": "true"
+    "ifShow": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "发生时间",
@@ -69,7 +72,8 @@
     "groupClass": "getTimeGroup",
     "ifSearch": "true",
     "ifGroup": "false",
-    "ifShow": "true"
+    "ifShow": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "应用场景",
@@ -82,7 +86,8 @@
     "groupClass": "getScenarioGroup",
     "ifSearch": "true",
     "ifGroup": "true",
-    "ifShow": "true"
+    "ifShow": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "创建人",
@@ -95,7 +100,8 @@
     "groupClass": "getComGroup",
     "ifSearch": "true",
     "ifGroup": "false",
-    "ifShow": "true"
+    "ifShow": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "创建时间",
@@ -108,7 +114,8 @@
     "groupClass": "getTimeGroup",
     "ifSearch": "true",
     "ifGroup": "false",
-    "ifShow": "true"
+    "ifShow": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "描述",
@@ -120,7 +127,8 @@
     "orderClass": "getComOrder",
     "ifSearch": "true",
     "ifGroup": "false",
-    "ifShow": "true"
+    "ifShow": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "创建月份",

+ 0 - 13
src/main/resources/jsons/patent.json

@@ -98,19 +98,6 @@
     "groupBy": "dateType"
   },
   {
-    "name": "家族数量",
-    "type": "String",
-    "value": "simpleFamilyNum",
-    "field": "simpleFamilyNum",
-    "esField": "simple_family_num",
-    "esClass": "numberQueryBuilder",
-    "ifSearch": "false",
-    "ifGroup": "false",
-    "ifShow": "true",
-    "ifAsCondition": "true",
-    "ifStats": "false"
-  },
-  {
     "name": "项目id",
     "type": "String",
     "value": "projectId",

+ 18 - 9
src/main/resources/jsons/patentProject.json

@@ -52,7 +52,8 @@
     "groupClass": "getScenarioGroup",
     "ifSearch": "false",
     "ifGroup": "false",
-    "ifShow": "true"
+    "ifShow": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "相关事件",
@@ -65,7 +66,8 @@
     "groupClass": "getScenarioGroup",
     "ifSearch": "true",
     "ifGroup": "false",
-    "ifShow": "false"
+    "ifShow": "false",
+    "ifAsCondition": "true"
   },
   {
     "name": "负责人名称",
@@ -79,7 +81,8 @@
     "ifSearch": "true",
     "ifGroup": "false",
     "ifShow": "true",
-    "defaultHidden": "true"
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "负责部门",
@@ -93,7 +96,8 @@
     "ifSearch": "true",
     "ifGroup": "false",
     "ifShow": "true",
-    "defaultHidden": "true"
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "委托方",
@@ -107,7 +111,8 @@
     "ifSearch": "true",
     "ifGroup": "false",
     "ifShow": "true",
-    "defaultHidden": "true"
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "委托方",
@@ -134,7 +139,8 @@
     "groupClass": "getScenarioGroup",
     "ifSearch": "true",
     "ifGroup": "true",
-    "ifShow": "true"
+    "ifShow": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "调查类型",
@@ -148,7 +154,8 @@
     "ifSearch": "true",
     "ifGroup": "true",
     "ifShow": "true",
-    "defaultHidden": "true"
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "产品或产品类别名称",
@@ -230,7 +237,8 @@
     "groupClass": "getComGroup",
     "ifSearch": "true",
     "ifGroup": "false",
-    "ifShow": "true"
+    "ifShow": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "创建时间",
@@ -243,7 +251,8 @@
     "groupClass": "getTimeGroup",
     "ifSearch": "true",
     "ifGroup": "false",
-    "ifShow": "true"
+    "ifShow": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "描述",

+ 18 - 9
src/main/resources/jsons/productCategory.json

@@ -9,7 +9,8 @@
     "groupClass":"",
     "ifSearch":"true",
     "ifGroup": "false",
-    "ifShow":"true"
+    "ifShow":"true",
+    "ifAsCondition": "true"
   },
   {"name":"产品类别名称",
     "type":"String",
@@ -21,7 +22,8 @@
     "groupClass":"",
     "ifSearch":"true",
     "ifGroup": "false",
-    "ifShow":"true"
+    "ifShow":"true",
+    "ifAsCondition": "true"
   },
   {"name":"产品类别参考许可费率",
     "type":"Double",
@@ -67,7 +69,8 @@
     "orderClass": "getCreateNameOrder",
     "ifSearch":"true",
     "ifGroup": "false",
-    "ifShow":"true"
+    "ifShow":"true",
+    "ifAsCondition": "true"
   },
   {
     "name":"产品类别创建时间",
@@ -79,7 +82,8 @@
     "sqlClass": "getDateTimeSql",
     "ifSearch":"true",
     "ifGroup": "false",
-    "ifShow":"true"
+    "ifShow":"true",
+    "ifAsCondition": "true"
   },
   {"name":"产品Id",
     "type":"Integer",
@@ -91,7 +95,8 @@
     "groupClass":"",
     "ifSearch":"true",
     "ifGroup": "false",
-    "ifShow":"false"
+    "ifShow":"false",
+    "ifAsCondition": "true"
   },
   {"name":"产品名称",
     "type":"String",
@@ -103,7 +108,8 @@
     "groupClass":"",
     "ifSearch":"true",
     "ifGroup": "false",
-    "ifShow":"false"
+    "ifShow":"false",
+    "ifAsCondition": "true"
   },
   {"name":"产品上市时间",
     "type":"DateTime",
@@ -114,7 +120,8 @@
     "orderClass": "",
     "ifSearch":"true",
     "ifGroup": "false",
-    "ifShow":"false"
+    "ifShow":"false",
+    "ifAsCondition": "true"
   },
   {"name":"产品创建人",
     "type":"String",
@@ -125,7 +132,8 @@
     "orderClass": "",
     "ifSearch":"true",
     "ifGroup": "false",
-    "ifShow":"false"
+    "ifShow":"false",
+    "ifAsCondition": "true"
   },
   {
     "name":"产品创建时间",
@@ -137,6 +145,7 @@
     "orderClass": "",
     "ifSearch":"true",
     "ifGroup": "false",
-    "ifShow":"false"
+    "ifShow":"false",
+    "ifAsCondition": "true"
   }
 ]

+ 10 - 5
src/main/resources/jsons/productMarketData.json

@@ -49,7 +49,8 @@
     "groupClass": "",
     "ifSearch": "true",
     "ifGroup": "false",
-    "ifShow": "true"
+    "ifShow": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "销售量",
@@ -99,7 +100,8 @@
     "groupClass": "getComGroup",
     "ifSearch": "true",
     "ifGroup": "false",
-    "ifShow": "true"
+    "ifShow": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "创建时间",
@@ -112,7 +114,8 @@
     "groupClass": "getTimeGroup",
     "ifSearch": "true",
     "ifGroup": "false",
-    "ifShow": "true"
+    "ifShow": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "年",
@@ -164,7 +167,8 @@
     "groupClass": "",
     "ifSearch": "true",
     "ifGroup": "false",
-    "ifShow": "true"
+    "ifShow": "true",
+    "ifAsCondition": "true"
   },
   {
     "name": "公司名称",
@@ -177,6 +181,7 @@
     "groupClass": "",
     "ifSearch": "true",
     "ifGroup": "false",
-    "ifShow": "true"
+    "ifShow": "true",
+    "ifAsCondition": "true"
   }
 ]

+ 4 - 2
src/main/resources/jsons/rdProject.json

@@ -9,7 +9,8 @@
     "groupClass":"",
     "ifSearch":"true",
     "ifGroup": "true",
-    "ifShow":"true"
+    "ifShow":"true",
+    "ifAsCondition": "true"
   },
   {"name":"事件名称",
   "type":"String",
@@ -21,6 +22,7 @@
     "groupClass":"getComGroup",
   "ifSearch":"true",
   "ifGroup": "true",
-    "ifShow":"true"
+    "ifShow":"true",
+    "ifAsCondition": "true"
 }
 ]

+ 6 - 3
src/main/resources/jsons/reportProject.json

@@ -215,7 +215,8 @@
     "groupClass":"getScenarioGroup",
     "ifSearch":"true",
     "ifGroup": "false",
-    "ifShow":"false"
+    "ifShow":"false",
+    "ifAsCondition": "true"
   },
   {"name":"内部卷号",
     "type":"String",
@@ -266,7 +267,8 @@
     "ifSearch":"true",
     "ifGroup": "true",
     "ifShow":"false",
-    "defaultHidden": "true"
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
   },
   {"name":"应用场景",
     "type":"Array",
@@ -278,6 +280,7 @@
     "groupClass":"getScenarioGroup",
     "ifSearch":"true",
     "ifGroup": "true",
-    "ifShow":"true"
+    "ifShow":"true",
+    "ifAsCondition": "true"
   }
 ]

+ 4 - 3
src/test/java/cn/cslg/pas/service/EsPatentServiceTests.java

@@ -1,6 +1,7 @@
 package cn.cslg.pas.service;
 
 import cn.cslg.pas.controller.AvoidDesignController;
+import cn.cslg.pas.domain.es.Patent;
 import cn.cslg.pas.service.business.AvoidDesignService;
 import cn.cslg.pas.service.business.es.EsFamilyService;
 import cn.cslg.pas.service.business.es.EsPatentService;
@@ -37,9 +38,9 @@ public class EsPatentServiceTests {
     @Test
     public void getPatentsByNo() throws Exception {
         List<String> patentNos =new ArrayList<>();
-        patentNos.add("CN201910069334.7");
-        patentNos.add("CN201110286649.0");
-        esPatentService.getPatentsByNo(patentNos,true,null,null);
+        patentNos.add("CN201721042063.9");
+        List<Patent> patentList= esPatentService.getPatentsByNo(patentNos,true,null,null);
+    System.out.println(patentList);
     }
     @Test
     public  void getFamilys() throws Exception{

+ 8 - 5
src/test/java/cn/cslg/pas/service/EventServiceTests.java

@@ -1,5 +1,6 @@
 package cn.cslg.pas.service;
 
+import cn.cslg.pas.common.dto.PatentColumnDTO;
 import cn.cslg.pas.common.dto.PatentDTO;
 import cn.cslg.pas.common.dto.PatentDetailDTO;
 import cn.cslg.pas.common.dto.PatentKinDTO;
@@ -257,7 +258,7 @@ public class EventServiceTests {
     void test9() throws IOException {
         PatentNoVO vo = new PatentNoVO();
         vo.setPatentNo("CN201910069334.7");
-        PatentDetailDTO columnDTO = patentService.selectPatentDetail(vo);
+        PatentColumnDTO columnDTO = patentService.selectPatentDetail(vo);
         System.out.println(columnDTO);
 
 //        String s = "asfassafsafe";
@@ -373,10 +374,12 @@ public class EventServiceTests {
         return replace;
     }
 
-@Test
+    @Test
     public void aaaaa() throws Exception {
-        String searchCondition = "AD=[2008~201009]";
-        treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
-System.out.println(tree);
+        String s = "C07K14/135;C12N15/45;A61K39/155;A61P31/14;C12R1/93";
+        String[] split = s.split(";");
+        for (String s1 : split) {
+            System.out.println(s1);
+        }
     }
 }