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

Merge remote-tracking branch 'origin/master' into prod_test

lwhhszx пре 1 година
родитељ
комит
2c0aa1214e
100 измењених фајлова са 3658 додато и 460 уклоњено
  1. 4 4
      src/main/java/cn/cslg/pas/common/config/WebSocketConfig.java
  2. 8 1
      src/main/java/cn/cslg/pas/common/dto/ExportTaskDTO.java
  3. 58 0
      src/main/java/cn/cslg/pas/common/dto/HightlightTemplateDTO.java
  4. 2 0
      src/main/java/cn/cslg/pas/common/dto/QueryFieldsDTO.java
  5. 74 0
      src/main/java/cn/cslg/pas/common/dto/business/LitigationHistoryDTO.java
  6. 26 0
      src/main/java/cn/cslg/pas/common/dto/business/OtherReferencesDTO.java
  7. 63 0
      src/main/java/cn/cslg/pas/common/dto/business/PermissionRecordDTO.java
  8. 0 1
      src/main/java/cn/cslg/pas/common/dto/business/ReportProjectDTO.java
  9. 54 0
      src/main/java/cn/cslg/pas/common/dto/business/ReviewHistoryDTO.java
  10. 1 0
      src/main/java/cn/cslg/pas/common/dto/business/UpdateScratchWordsDTO.java
  11. 9 13
      src/main/java/cn/cslg/pas/common/dto/customAnalyse/SchemaDataDTO.java
  12. 19 0
      src/main/java/cn/cslg/pas/common/dto/es/EsQueryPatentFieldsDTO.java
  13. 17 0
      src/main/java/cn/cslg/pas/common/dto/es/InnerFields.java
  14. 2 0
      src/main/java/cn/cslg/pas/common/dto/patentCount/GetTabelColumDTO.java
  15. 7 2
      src/main/java/cn/cslg/pas/common/utils/ParseByteToFileUtils.java
  16. 2 2
      src/main/java/cn/cslg/pas/common/utils/Response.java
  17. 3 1
      src/main/java/cn/cslg/pas/common/utils/ResponseEnum.java
  18. 58 0
      src/main/java/cn/cslg/pas/common/vo/HightlightTemplateVO.java
  19. 2 1
      src/main/java/cn/cslg/pas/common/vo/PatentWithIdVO.java
  20. 1 0
      src/main/java/cn/cslg/pas/common/vo/PersonSelfFieldVO.java
  21. 1 0
      src/main/java/cn/cslg/pas/common/vo/ScratchWordsVO.java
  22. 4 4
      src/main/java/cn/cslg/pas/common/vo/WebSocketMessageVO.java
  23. 2 0
      src/main/java/cn/cslg/pas/common/vo/business/AllCustomFieldVO.java
  24. 78 0
      src/main/java/cn/cslg/pas/common/vo/business/LitigationHistoryVO.java
  25. 48 0
      src/main/java/cn/cslg/pas/common/vo/business/OtherReferencesVO.java
  26. 71 0
      src/main/java/cn/cslg/pas/common/vo/business/PermissionRecordVO.java
  27. 51 0
      src/main/java/cn/cslg/pas/common/vo/business/ReviewHistoryVO.java
  28. 6 2
      src/main/java/cn/cslg/pas/common/vo/customAnalyse/SourceDataVO.java
  29. 12 0
      src/main/java/cn/cslg/pas/common/vo/es/EsPatentFieldsVO.java
  30. 14 0
      src/main/java/cn/cslg/pas/common/vo/es/EsProductPatentVO.java
  31. 13 0
      src/main/java/cn/cslg/pas/common/vo/es/InnerPatentFieldsVO.java
  32. 24 4
      src/main/java/cn/cslg/pas/controller/CustomAnalyseController.java
  33. 17 0
      src/main/java/cn/cslg/pas/controller/CustomFieldController.java
  34. 6 0
      src/main/java/cn/cslg/pas/controller/EventController.java
  35. 59 0
      src/main/java/cn/cslg/pas/controller/HightlightTemplateController.java
  36. 54 0
      src/main/java/cn/cslg/pas/controller/LitigationHistoryController.java
  37. 54 0
      src/main/java/cn/cslg/pas/controller/OtherReferencesController.java
  38. 72 29
      src/main/java/cn/cslg/pas/controller/PatentController.java
  39. 54 0
      src/main/java/cn/cslg/pas/controller/PermissionRecordController.java
  40. 11 4
      src/main/java/cn/cslg/pas/controller/ProductCategoryController.java
  41. 5 0
      src/main/java/cn/cslg/pas/controller/ProductController.java
  42. 7 0
      src/main/java/cn/cslg/pas/controller/ReportProjectController.java
  43. 56 0
      src/main/java/cn/cslg/pas/controller/ReviewHistoryController.java
  44. 4 4
      src/main/java/cn/cslg/pas/controller/outApi/PatentStarController.java
  45. 19 0
      src/main/java/cn/cslg/pas/domain/business/AssoOtherReferencesFile.java
  46. 11 3
      src/main/java/cn/cslg/pas/domain/business/CustomAnalysisItemSchema.java
  47. 10 4
      src/main/java/cn/cslg/pas/domain/business/CustomAnalysisItemSetting.java
  48. 10 4
      src/main/java/cn/cslg/pas/domain/business/CustomAnalysisItemSource.java
  49. 72 0
      src/main/java/cn/cslg/pas/domain/business/HightlightTemplate.java
  50. 95 0
      src/main/java/cn/cslg/pas/domain/business/LitigationHistory.java
  51. 53 0
      src/main/java/cn/cslg/pas/domain/business/OtherReferences.java
  52. 84 0
      src/main/java/cn/cslg/pas/domain/business/PermissionRecord.java
  53. 75 0
      src/main/java/cn/cslg/pas/domain/business/ReviewHistory.java
  54. 1 0
      src/main/java/cn/cslg/pas/domain/business/ScratchWords.java
  55. 2 0
      src/main/java/cn/cslg/pas/domain/es/Marking.java
  56. 1 1
      src/main/java/cn/cslg/pas/domain/es/Patent.java
  57. 8 5
      src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/PersonNameQueryBuilder.java
  58. 60 0
      src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/ProductQueryBuilder.java
  59. 28 0
      src/main/java/cn/cslg/pas/factorys/getSqlFactorys/GetComBoolSql.java
  60. 13 0
      src/main/java/cn/cslg/pas/mapper/AssoOtherReferencesFileMapper.java
  61. 13 0
      src/main/java/cn/cslg/pas/mapper/HightlightTemplateMapper.java
  62. 14 0
      src/main/java/cn/cslg/pas/mapper/LitigationHistoryMapper.java
  63. 13 0
      src/main/java/cn/cslg/pas/mapper/OtherReferencesMapper.java
  64. 13 0
      src/main/java/cn/cslg/pas/mapper/PermissionRecordMapper.java
  65. 13 0
      src/main/java/cn/cslg/pas/mapper/ReviewHistoryMapper.java
  66. 1 0
      src/main/java/cn/cslg/pas/service/PatentLabelService.java
  67. 16 0
      src/main/java/cn/cslg/pas/service/business/AssoOtherReferencesFileService.java
  68. 13 8
      src/main/java/cn/cslg/pas/service/business/CustomAnalyseService.java
  69. 23 0
      src/main/java/cn/cslg/pas/service/business/CustomAnalysisItemSchemaService.java
  70. 2 0
      src/main/java/cn/cslg/pas/service/business/CustomAnalysisItemSettingService.java
  71. 34 15
      src/main/java/cn/cslg/pas/service/business/CustomAnalysisItemSourceService.java
  72. 198 6
      src/main/java/cn/cslg/pas/service/business/CustomFieldService.java
  73. 22 1
      src/main/java/cn/cslg/pas/service/business/EventService.java
  74. 184 0
      src/main/java/cn/cslg/pas/service/business/HightlightTemplateService.java
  75. 31 14
      src/main/java/cn/cslg/pas/service/business/ImportTaskService.java
  76. 43 20
      src/main/java/cn/cslg/pas/service/business/InvalidStatutesService.java
  77. 127 0
      src/main/java/cn/cslg/pas/service/business/LitigationHistoryService.java
  78. 5 4
      src/main/java/cn/cslg/pas/service/business/MergePersonService.java
  79. 192 0
      src/main/java/cn/cslg/pas/service/business/OtherReferencesService.java
  80. 134 228
      src/main/java/cn/cslg/pas/service/business/PDFExportFirstPageService.java
  81. 2 0
      src/main/java/cn/cslg/pas/service/business/PatentDigProjectFilesService.java
  82. 19 0
      src/main/java/cn/cslg/pas/service/business/PatentDigProjectService.java
  83. 18 14
      src/main/java/cn/cslg/pas/service/business/PatentExportService.java
  84. 18 0
      src/main/java/cn/cslg/pas/service/business/PatentProjectService.java
  85. 127 0
      src/main/java/cn/cslg/pas/service/business/PermissionRecordService.java
  86. 24 0
      src/main/java/cn/cslg/pas/service/business/ProductCategoryService.java
  87. 24 0
      src/main/java/cn/cslg/pas/service/business/ProductService.java
  88. 18 0
      src/main/java/cn/cslg/pas/service/business/ProjectTaskService.java
  89. 18 1
      src/main/java/cn/cslg/pas/service/business/ReportProjectService.java
  90. 127 0
      src/main/java/cn/cslg/pas/service/business/ReviewHistoryService.java
  91. 5 0
      src/main/java/cn/cslg/pas/service/business/ScratchWordsService.java
  92. 1 0
      src/main/java/cn/cslg/pas/service/business/TaskHandleResultService.java
  93. 67 16
      src/main/java/cn/cslg/pas/service/business/es/EsCountService.java
  94. 211 7
      src/main/java/cn/cslg/pas/service/business/es/EsCustomFieldService.java
  95. 78 0
      src/main/java/cn/cslg/pas/service/business/es/EsProductPatentService.java
  96. 57 17
      src/main/java/cn/cslg/pas/service/business/es/EsScratchWordsService.java
  97. 22 0
      src/main/java/cn/cslg/pas/service/common/MessageService.java
  98. 49 20
      src/main/java/cn/cslg/pas/service/common/PatentStarApiService.java
  99. 7 0
      src/main/java/cn/cslg/pas/service/common/PersonFieldService.java
  100. 0 0
      src/main/resources/jsons/patent.json

+ 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();
+    }
 }

+ 8 - 1
src/main/java/cn/cslg/pas/common/dto/ExportTaskDTO.java

@@ -1,6 +1,7 @@
 package cn.cslg.pas.common.dto;
 
 import cn.cslg.pas.common.dto.es.EsCustomFieldDTO;
+import cn.cslg.pas.common.vo.es.EsCustomFieldBatchVO;
 import com.baomidou.mybatisplus.annotation.TableField;
 import lombok.Data;
 import lombok.experimental.Accessors;
@@ -18,7 +19,7 @@ import java.util.List;
 @Data
 public class ExportTaskDTO {
     private Integer projectId;
-
+    private Integer taskId;
     /**
      * 1 Excel导入
      * 2 专利号导入
@@ -49,4 +50,10 @@ public class ExportTaskDTO {
      * 完成时间
      */
     private Date finishTime;
+
+    private EsCustomFieldBatchVO EsVO;
+    private Integer state;
+    private String createId;
+    private String createName;
+    private Integer doneNum;
 }

+ 58 - 0
src/main/java/cn/cslg/pas/common/dto/HightlightTemplateDTO.java

@@ -0,0 +1,58 @@
+package cn.cslg.pas.common.dto;
+
+import cn.cslg.pas.domain.BaseEntity;
+import cn.cslg.pas.domain.business.HightlightTemplate;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 高亮
+ * @Author xiexiang
+ * @Date 2024/1/12
+ */
+@Data
+public class HightlightTemplateDTO {
+    private Integer id;
+
+    /**
+     * 模板名称
+     */
+    private String name;
+
+    /**
+     * 是否启用
+     */
+    private Boolean ifEnable;
+
+    /**
+     * 是否默认
+     */
+    private Boolean ifDefault;
+
+    /**
+     * description
+     */
+    private String description;
+
+    /**
+     * 创建人
+     */
+    private String createId;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * config
+     */
+    private String config;
+
+    private Integer projectId;
+
+    private List<HightlightTemplate.Config> configs;
+}

+ 2 - 0
src/main/java/cn/cslg/pas/common/dto/QueryFieldsDTO.java

@@ -15,4 +15,6 @@ import java.util.List;
 public class QueryFieldsDTO {
  private String tableName;
  private Integer projectId;
+ //商品化专利
+ private Integer productId;
 }

+ 74 - 0
src/main/java/cn/cslg/pas/common/dto/business/LitigationHistoryDTO.java

@@ -0,0 +1,74 @@
+package cn.cslg.pas.common.dto.business;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/15
+ */
+@Data
+public class LitigationHistoryDTO {
+    private Integer id;
+    /**
+     * 原告
+     */
+    private String plaintiff;
+
+    /**
+     * 被告
+     */
+    private String defendant;
+
+
+    /**
+     * 案由
+     */
+    private String causeOfAction;
+
+    /**
+     * 起诉时间
+     */
+    @JsonFormat(
+            pattern = "yyyy-MM-dd",
+            timezone = "GMT+8"
+    )
+    private Date indictTime;
+
+    /**
+     * 结果
+     */
+    private String result;
+
+    /**
+     * 案件详情
+     */
+    private String caseDetails;
+
+    /**
+     * 附件id
+     */
+    private String fileGuid;
+
+    /**
+     * projectId
+     */
+    private Integer projectId;
+
+    /**
+     * 专利号
+     */
+    private String patentNo;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 法院
+     */
+    private String court;
+}

+ 26 - 0
src/main/java/cn/cslg/pas/common/dto/business/OtherReferencesDTO.java

@@ -0,0 +1,26 @@
+package cn.cslg.pas.common.dto.business;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/17
+ */
+@Data
+public class OtherReferencesDTO {
+    private Integer id;
+
+    private String patentNo;
+
+    private Integer projectId;
+
+    private String remark;
+
+    private String referenceName;
+
+    private String referenceUrl;
+
+    private List<String> fileGuids;
+}

+ 63 - 0
src/main/java/cn/cslg/pas/common/dto/business/PermissionRecordDTO.java

@@ -0,0 +1,63 @@
+package cn.cslg.pas.common.dto.business;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 许可历史
+ * @Author xiexiang
+ * @Date 2024/1/16
+ */
+@Data
+public class PermissionRecordDTO {
+    private Integer id;
+    /**
+     * 专利号
+     */
+    private String patentNo;
+
+    /**
+     * 许可人 (默认为专利权利人)
+     */
+    private String licensor;
+
+    /**
+     * 被许可人
+     */
+    private String licensee;
+
+    /**
+     * 被许可人国家
+     */
+    private String licenseeCountry;
+
+    /**
+     * 许可时间
+     */
+    @JsonFormat(
+            pattern = "yyyy-MM-dd",
+            timezone = "GMT+8"
+    )
+    private Date licenseTime;
+
+    /**
+     * 许可费用(万元)
+     */
+    private Double licenseFee;
+
+    /**
+     * 截止时间
+     */
+    @JsonFormat(
+            pattern = "yyyy-MM-dd",
+            timezone = "GMT+8"
+    )
+    private Date licenseDeadLine;
+
+    /**
+     * 许可类型
+     */
+    private String licenseType;
+}

+ 0 - 1
src/main/java/cn/cslg/pas/common/dto/business/ReportProjectDTO.java

@@ -74,5 +74,4 @@ public class ReportProjectDTO {
     private Boolean ifSecondInvalid;
     @Schema(description = "主被动类型")
     private Integer actType;
-
 }

+ 54 - 0
src/main/java/cn/cslg/pas/common/dto/business/ReviewHistoryDTO.java

@@ -0,0 +1,54 @@
+package cn.cslg.pas.common.dto.business;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 审查历史
+ * @Author xiexiang
+ * @Date 2024/1/15
+ */
+@Data
+public class ReviewHistoryDTO {
+
+    private Integer id;
+
+    /**
+     * 时间
+     */
+    @JsonFormat(
+            pattern = "yyyy-MM-dd",
+            timezone = "GMT+8"
+    )
+    private Date reviewTime ;
+
+    /**
+     * 事件
+     */
+    private String reviewEvent;
+
+    /**
+     * 说明
+     */
+    private String reviewExplain;
+
+    /**
+     * 文件id
+     */
+    private String fileGuid;
+
+    /**
+     * 所属project
+     */
+    private Integer projectId;
+
+    /**
+     * 专利号
+     */
+    private String patentNo;
+
+}

+ 1 - 0
src/main/java/cn/cslg/pas/common/dto/business/UpdateScratchWordsDTO.java

@@ -67,4 +67,5 @@ public class UpdateScratchWordsDTO {
      * 标注租户id
      */
     private Integer publicTenantId;
+    private Integer  createFrom;
 }

+ 9 - 13
src/main/java/cn/cslg/pas/common/dto/customAnalyse/SchemaDataDTO.java

@@ -1,26 +1,22 @@
 package cn.cslg.pas.common.dto.customAnalyse;
 
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 @Data
+@NoArgsConstructor
 public class SchemaDataDTO {
-    private Integer field;
-    private Integer expand;
+    private String field;
+    private String expand;
     private Integer ptype;
-    private Integer type;
+    private String type;
     private Integer num;
     private Integer merge;
+    private String name;
+    private String groupBy;
+    private String fieldKind;
 
-    public SchemaDataDTO() {
-        this.field = 0;
-        this.expand = 0;
-        this.type = 0;
-        this.ptype = 0;
-        this.num = 0;
-        this.merge = 0;
-    }
-
-    public SchemaDataDTO(Integer field, Integer expand) {
+    public SchemaDataDTO(String field, String expand) {
         this.field = field;
         this.expand = expand;
     }

+ 19 - 0
src/main/java/cn/cslg/pas/common/dto/es/EsQueryPatentFieldsDTO.java

@@ -0,0 +1,19 @@
+package cn.cslg.pas.common.dto.es;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class EsQueryPatentFieldsDTO {
+
+    /**
+     * 专题库或报告id
+     */
+    Integer projectId;
+
+    List<String> patentNos;
+    List<InnerFields> innerFields;
+
+
+}

+ 17 - 0
src/main/java/cn/cslg/pas/common/dto/es/InnerFields.java

@@ -0,0 +1,17 @@
+package cn.cslg.pas.common.dto.es;
+
+import lombok.Data;
+
+@Data
+public class InnerFields {
+    /**
+     * 栏位类型
+     * 自定义栏位类型(0数字,1日期,2文本,4单选,5多选,6树,7产品8产品类别9技术分类 10标签)
+     */
+    private Integer fieldType;
+
+    /**
+     * 栏位
+     */
+    private String fieldId;
+}

+ 2 - 0
src/main/java/cn/cslg/pas/common/dto/patentCount/GetTabelColumDTO.java

@@ -12,4 +12,6 @@ public class GetTabelColumDTO {
     //任务id
     private Integer taskId;
     private String tableName;
+    //商品化专利
+    private Integer productId;
 }

+ 7 - 2
src/main/java/cn/cslg/pas/common/utils/ParseByteToFileUtils.java

@@ -33,10 +33,15 @@ public class ParseByteToFileUtils {
         return multipartFile;
     }
 
-    public String uploadFile(byte[] fileData) throws IOException {
+    public String uploadFile(byte[] fileData, Integer type) throws IOException {
         List<MultipartFile> multipartFiles = new ArrayList<>();
         //保存生成地址
-        String fileName = IdUtil.simpleUUID() + ".xls";
+        String fileName = "";
+        if (type.equals(1)) {
+            fileName = IdUtil.simpleUUID() + ".xls";
+        } else if (type.equals(2)) {
+            fileName = IdUtil.simpleUUID() + ".pdf";
+        }
         //文件原始名中的中文字符可能会乱码,对文件名进行URL编码
         String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
         MultipartFile multipartFile = this.convertBytesToMultipartFile(fileData, encodedFileName);

+ 2 - 2
src/main/java/cn/cslg/pas/common/utils/Response.java

@@ -76,12 +76,12 @@ public class Response {
         return response;
     }
 
-    public static String noPermissions(String message) {
+    public static Response noPermissions(String message) {
         Response response = new Response();
         response.setCode(ResponseEnum.NO_PERMISSION.getCode());
         response.setData(Boolean.FALSE);
         response.setMessage(message);
-        return JsonUtils.objectToJson(response);
+        return response;
     }
 
 

+ 3 - 1
src/main/java/cn/cslg/pas/common/utils/ResponseEnum.java

@@ -16,7 +16,9 @@ public enum ResponseEnum {
     COMPARE_LITERATURE_BATCH(600,"批量上传对比文献"),
     COMPARE_LITERATURE_BATCH_DONE(601,"批量上传对比文献完成"),
     PATENT_EXPORT_TASK(602,"导出专利信息"),
-    PATENT_EXPORT_TASK_DONE(603,"导出专利信息完成") ;
+    PATENT_EXPORT_TASK_DONE(603,"导出专利信息完成"),
+    PATENT_PDF_EXPORT_TASK(604,"导出PDF首页"),
+    PATENT_PDF_EXPORT_TASK_DONE(605,"导出PDF首页完成");
 
     private Integer code;
     private String message;

+ 58 - 0
src/main/java/cn/cslg/pas/common/vo/HightlightTemplateVO.java

@@ -0,0 +1,58 @@
+package cn.cslg.pas.common.vo;
+
+import cn.cslg.pas.domain.business.HightlightTemplate;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 高亮
+ * @Author xiexiang
+ * @Date 2024/1/12
+ */
+@Data
+public class HightlightTemplateVO {
+    private Integer id;
+
+    /**
+     * 模板名称
+     */
+    private String name;
+
+    /**
+     * 是否启用
+     */
+    private Boolean ifEnable;
+
+    /**
+     * 是否默认
+     */
+    private Boolean ifDefault;
+
+    /**
+     * description
+     */
+    private String description;
+
+    /**
+     * 创建人
+     */
+    private String createId;
+
+    private String createName;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * config
+     */
+    private String config;
+
+    private Integer projectId;
+
+    private List<HightlightTemplate.Config> configs;
+}

+ 2 - 1
src/main/java/cn/cslg/pas/common/vo/PatentWithIdVO.java

@@ -14,7 +14,8 @@ import java.util.Map;
 @Accessors(chain = true)
 @Data
 public class PatentWithIdVO {
-private String id;
+
+    private String id;
     /**
      * 专利摘要附图
      */

+ 1 - 0
src/main/java/cn/cslg/pas/common/vo/PersonSelfFieldVO.java

@@ -28,5 +28,6 @@ public class PersonSelfFieldVO {
     private Boolean ifHidden;
     private Integer createType;
     private Boolean  defaultHidden;
+    private Boolean ifPersonal;
 
 }

+ 1 - 0
src/main/java/cn/cslg/pas/common/vo/ScratchWordsVO.java

@@ -48,4 +48,5 @@ public class ScratchWordsVO {
     private String patentId;
     private String patentNo;
     private String patentTitle;
+    private Integer createFrom;
 }

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

@@ -9,11 +9,11 @@ import lombok.experimental.Accessors;
 @Data
 @Accessors(chain = true)
 public class WebSocketMessageVO {
-    private  Integer projectId;
-   private  Integer allNum;
-    private Integer   currentNum;
+    private Integer projectId;
+    private Integer allNum;
+    private Integer currentNum;
     private Integer code;
     private Integer state;
     private String createId;
-
+    private Integer taskId;
 }

+ 2 - 0
src/main/java/cn/cslg/pas/common/vo/business/AllCustomFieldVO.java

@@ -29,4 +29,6 @@ public class AllCustomFieldVO {
 
     private Integer sysOrder;
 
+    private Boolean ifPersonal;
+
 }

+ 78 - 0
src/main/java/cn/cslg/pas/common/vo/business/LitigationHistoryVO.java

@@ -0,0 +1,78 @@
+package cn.cslg.pas.common.vo.business;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/15
+ */
+@Data
+public class LitigationHistoryVO {
+    /**
+     * 原告
+     */
+    private String plaintiff;
+
+    /**
+     * 被告
+     */
+    private String defendant;
+
+
+    /**
+     * 案由
+     */
+    private String causeOfAction;
+
+    /**
+     * 起诉时间
+     */
+    private Date indictTime;
+
+    /**
+     * 结果
+     */
+    private String result;
+
+    /**
+     * 案件详情
+     */
+    private String caseDetails;
+
+    /**
+     * 附件id
+     */
+    private String fileGuid;
+
+    /**
+     * projectId
+     */
+    private Integer projectId;
+
+    /**
+     * 专利号
+     */
+    private String patentNo;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 法院
+     */
+    private String court;
+
+    /**
+     * 创建人id
+     */
+    private String createId;
+
+    private String createName;
+
+    private Date createTime;
+}

+ 48 - 0
src/main/java/cn/cslg/pas/common/vo/business/OtherReferencesVO.java

@@ -0,0 +1,48 @@
+package cn.cslg.pas.common.vo.business;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/17
+ */
+@Data
+public class OtherReferencesVO {
+    private Integer id;
+    /**
+     * 报告/专题库id
+     */
+    private Integer projectId;
+
+    private String patentNo;
+
+    /**
+     * 说明
+     */
+    private String remark;
+
+    /**
+     * 其他参考资料名称
+     */
+    private String referenceName;
+
+    private String referenceUrl;
+
+    /**
+     * 创建人id
+     */
+    private String createId;
+
+    private List<String> fileGuids;
+
+    private String createName;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+}

+ 71 - 0
src/main/java/cn/cslg/pas/common/vo/business/PermissionRecordVO.java

@@ -0,0 +1,71 @@
+package cn.cslg.pas.common.vo.business;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 许可历史
+ * @Author xiexiang
+ * @Date 2024/1/16
+ */
+@Data
+public class PermissionRecordVO {
+    /**
+     * 专利号
+     */
+    private String patentNo;
+
+    /**
+     * 许可人 (默认为专利权利人)
+     */
+    private String licensor;
+
+    /**
+     * 被许可人
+     */
+    private String licensee;
+
+    /**
+     * 被许可人国家
+     */
+    private String licenseeCountry;
+
+    /**
+     * 许可时间
+     */
+    private Date licenseTime;
+
+    /**
+     * 许可费用(万元)
+     */
+    private Double licenseFee;
+
+    /**
+     * 截止时间
+     */
+    private Date licenseDeadLine;
+
+    /**
+     * 许可类型
+     */
+    private String licenseType;
+
+    /**
+     * 租户id
+     */
+    private Integer tenantId;
+
+    /**
+     * 创建人id
+     */
+    private String createId;
+
+    private String createName;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+}

+ 51 - 0
src/main/java/cn/cslg/pas/common/vo/business/ReviewHistoryVO.java

@@ -0,0 +1,51 @@
+package cn.cslg.pas.common.vo.business;
+
+import lombok.Data;
+import org.apache.poi.hssf.record.DateWindow1904Record;
+
+import java.util.Date;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/15
+ */
+@Data
+public class ReviewHistoryVO {
+    private Integer id;
+
+    /**
+     * 时间
+     */
+    private Date reviewTime ;
+
+    /**
+     * 事件
+     */
+    private String reviewEvent;
+
+    /**
+     * 说明
+     */
+    private String reviewExplain;
+
+    /**
+     * 文件id
+     */
+    private String fileGuid;
+
+    /**
+     * 所属project
+     */
+    private Integer projectId;
+
+    /**
+     * 专利号
+     */
+    private String patentNo;
+
+    private String createId;
+
+    private String createName;
+
+    private Date createTime;
+}

+ 6 - 2
src/main/java/cn/cslg/pas/common/vo/customAnalyse/SourceDataVO.java

@@ -7,10 +7,14 @@ import java.util.List;
 
 @Data
 public class SourceDataVO {
-    private Integer expandId;
-    private Integer fieldId;
+    private String expand;
+    private String field;
     private String uid;
     private String patentKey;
     private String dimension;
+    private Boolean selected;
+    private Integer number;
+    private Integer topN;
+    private String name;
     private List<CustomAnalysisItemSource> source;
 }

+ 12 - 0
src/main/java/cn/cslg/pas/common/vo/es/EsPatentFieldsVO.java

@@ -0,0 +1,12 @@
+package cn.cslg.pas.common.vo.es;
+
+import cn.cslg.pas.common.vo.FieldValueVO;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class EsPatentFieldsVO {
+    private String patentNo;
+    private List<InnerPatentFieldsVO> innerClassFields;
+}

+ 14 - 0
src/main/java/cn/cslg/pas/common/vo/es/EsProductPatentVO.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.common.vo.es;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class EsProductPatentVO {
+
+    private List<Integer> productIds;
+
+    private List<String> patentNos;
+
+}

+ 13 - 0
src/main/java/cn/cslg/pas/common/vo/es/InnerPatentFieldsVO.java

@@ -0,0 +1,13 @@
+package cn.cslg.pas.common.vo.es;
+
+import cn.cslg.pas.common.vo.FieldValueVO;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class InnerPatentFieldsVO {
+    private Integer fieldType;
+    private String field;
+    private List<FieldValueVO> fieldValueVOS;
+}

+ 24 - 4
src/main/java/cn/cslg/pas/controller/CustomAnalyseController.java

@@ -28,7 +28,12 @@ public class CustomAnalyseController {
     @Operation(summary = "查询组别/分析项")
     @PostMapping("/queryAnalyseGroup")
     public Response queryAnalyseGroup(@RequestBody SelectCustomAnalyseVO vo) {
-        List<SelectCustomAnalyseListDTO> list = customAnalyseService.queryAnalyseGroup(vo);
+        List<SelectCustomAnalyseListDTO> list = null;
+        try {
+            list = customAnalyseService.queryAnalyseGroup(vo);
+        } catch (Exception e) {
+            return Response.success(e.getMessage());
+        }
         return Response.success(list);
     }
 
@@ -49,21 +54,36 @@ public class CustomAnalyseController {
     @Operation(summary = "添加组别/分析项")
     @PostMapping("/addAnalyseGroup")
     public Response addAnalyseGroup(@RequestBody CustomAnalyseDTO vo) throws Exception {
-        Integer groupId = customAnalyseService.addAnalyseGroup(vo);
+        Integer groupId = null;
+        try {
+            groupId = customAnalyseService.addAnalyseGroup(vo);
+        } catch (Exception e) {
+            return Response.success(e.getMessage());
+        }
         return Response.success(groupId);
     }
 
     @Operation(summary = "编辑组别")
     @PostMapping("/editAnalyseGroup")
     public Response editAnalyseGroup(@RequestBody CustomAnalyseDTO vo) throws Exception {
-        Integer groupId = customAnalyseService.editAnalyseGroup(vo);
+        Integer groupId = null;
+        try {
+            groupId = customAnalyseService.editAnalyseGroup(vo);
+        } catch (Exception e) {
+            return Response.success(e.getMessage());
+        }
         return Response.success(groupId);
     }
 
     @Operation(summary = "删除组别/分析项")
     @PostMapping("/delAnalyseGroup")
     public Response delAnalyseGroup(@RequestBody CustomAnalyseIdVO vo) throws Exception {
-        Integer groupId = customAnalyseService.delAnalyseGroup(vo);
+        Integer groupId = null;
+        try {
+            groupId = customAnalyseService.delAnalyseGroup(vo);
+        } catch (Exception e) {
+            return Response.success(e.getMessage());
+        }
         return Response.success(groupId);
     }
 }

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

@@ -5,12 +5,14 @@ import cn.cslg.pas.common.dto.AllFieldOrderDTO;
 import cn.cslg.pas.common.dto.business.CustomFieldDTO;
 import cn.cslg.pas.common.dto.business.UpdateCustomFieldDTO;
 import cn.cslg.pas.common.dto.es.EsCustomFieldDTO;
+import cn.cslg.pas.common.dto.es.EsQueryPatentFieldsDTO;
 import cn.cslg.pas.common.dto.es.QueryEsCustomFieldDTO;
 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.common.vo.es.EsPatentFieldsVO;
 import cn.cslg.pas.exception.ConditionException;
 import cn.cslg.pas.exception.UnLoginException;
 import cn.cslg.pas.exception.XiaoShiException;
@@ -145,4 +147,19 @@ public class CustomFieldController {
         records.setData(list);
         return Response.success(records);
     }
+
+    @PostMapping("/getPatentFields")
+    @Operation(summary = "批量获得专利的自定义栏位和值")
+    public Response getPatentFields(@RequestBody EsQueryPatentFieldsDTO esQueryPatentFieldsDTO) throws Exception {
+        Records records = new Records();
+        try {
+            List<EsPatentFieldsVO> list = esCustomFieldService.getPatentFields(esQueryPatentFieldsDTO);
+            records.setData(list);
+        }
+        catch (Exception e){
+            return Response.error(e.getMessage());
+        }
+
+        return Response.success(records);
+    }
 }

+ 6 - 0
src/main/java/cn/cslg/pas/controller/EventController.java

@@ -1,5 +1,6 @@
 package cn.cslg.pas.controller;
 
+import cn.cslg.pas.common.auth.checkAuth;
 import cn.cslg.pas.common.core.base.Constants;
 import cn.cslg.pas.common.dto.business.EventDTO;
 import cn.cslg.pas.common.dto.business.UpdateEventDTO;
@@ -38,6 +39,7 @@ public class EventController {
 
     @Operation(summary = "查询事件")
     @PostMapping("/queryEvent")
+    @checkAuth(FunId = "xiaoshi/event/search")
     public Response queryEvent(@RequestBody StringRequest stringRequest) throws Exception {
         Business business = businessFactory.getClass("eventService");
         Records records = (Records) business.queryMessage(stringRequest);
@@ -47,6 +49,7 @@ public class EventController {
 
     @Operation(summary = "添加事件")
     @PostMapping("/addEvent")
+    @checkAuth(FunId = "xiaoshi/event/add")
     public Response addEvent(String event, List<MultipartFile> files) throws Exception {
         if (event != null) {
             EventDTO eventDTO = JSONObject.parseObject(event, EventDTO.class);
@@ -71,6 +74,7 @@ public class EventController {
 
     @Operation(summary = "更新事件")
     @PostMapping("/updateEvent")
+    @checkAuth(FunId = "xiaoshi/event/edit")
     public Response updateEvent(String event, List<MultipartFile> files) throws Exception {
         if (event != null) {
             UpdateEventDTO updateEventDTO = JSONObject.parseObject(event, UpdateEventDTO.class);
@@ -85,6 +89,7 @@ public class EventController {
 
     @Operation(summary = "删除事件")
     @PostMapping("/deleteEvent")
+    @checkAuth(FunId = "xiaoshi/event/delete")
     public String deleteEvent(@RequestBody List<Integer> ids) throws Exception {
         Business business = businessFactory.getClass("eventService");
         business.deleteMessage(ids);
@@ -93,6 +98,7 @@ public class EventController {
 
     @Operation(summary = "分组事件")
     @PostMapping("/groupEvent")
+    @checkAuth(FunId = "xiaoshi/event/group")
     public Response groupEvent(@RequestBody StringGroupRequest stringGroupRequest) throws Exception {
         Business business = businessFactory.getClass("eventService");
         Records records = (Records)business.getGroup(stringGroupRequest,"event");

+ 59 - 0
src/main/java/cn/cslg/pas/controller/HightlightTemplateController.java

@@ -0,0 +1,59 @@
+package cn.cslg.pas.controller;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.HightlightTemplateDTO;
+import cn.cslg.pas.common.dto.ImportTaskDTO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.vo.HightlightTemplateVO;
+import cn.cslg.pas.domain.business.HightlightTemplate;
+import cn.cslg.pas.factorys.businessFactory.Business;
+import cn.cslg.pas.service.business.HightlightTemplateService;
+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.*;
+
+import java.util.List;
+
+/**
+ * 高亮
+ * @Author xiexiang
+ * @Date 2024/1/12
+ */
+@Slf4j
+@RequestMapping(Constants.API_XiaoSHI + "/hightlightTemplate")
+@RestController
+public class HightlightTemplateController {
+    @Autowired
+    private HightlightTemplateService hightlightTemplateService;
+
+    @Operation(summary = "添加高亮")
+    @PostMapping("/saveOrUpdate")
+    public Response saveOrUpdate(@RequestBody HightlightTemplateDTO hightlightTemplateDTO) throws Exception {
+        HightlightTemplate hightlightTemplate = hightlightTemplateService.saveOrUpdate(hightlightTemplateDTO);
+        Records records = new Records();
+        records.setData(hightlightTemplate);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "查询高亮")
+    @GetMapping("/query")
+    public Response queryHightlight(Integer projectId) throws Exception {
+       List<HightlightTemplateVO> hightlightTemplateVOS = hightlightTemplateService.getHightlight(projectId);
+        Records records = new Records();
+        records.setData(hightlightTemplateVOS);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "删除高亮")
+    @PostMapping("/delete")
+    public Response delete(@RequestBody List<Integer> ids) throws Exception {
+        List<Integer> deleteIds = hightlightTemplateService.deleteHightlight(ids);
+        Records records = new Records();
+        records.setData(deleteIds);
+        return Response.success(records);
+    }
+
+
+}

+ 54 - 0
src/main/java/cn/cslg/pas/controller/LitigationHistoryController.java

@@ -0,0 +1,54 @@
+package cn.cslg.pas.controller;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.business.LitigationHistoryDTO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.vo.business.LitigationHistoryVO;
+import cn.cslg.pas.service.business.LitigationHistoryService;
+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.*;
+
+import java.util.List;
+
+/**
+ * 诉讼历史
+ * @Author xiexiang
+ * @Date 2024/1/15
+ */
+@Slf4j
+@RequestMapping(Constants.API_XiaoSHI + "/litigationHistory")
+@RestController
+public class LitigationHistoryController {
+    @Autowired
+    private LitigationHistoryService litigationHistoryService;
+
+    @Operation(summary = "添加or更新诉讼历史")
+    @PostMapping("/saveOrUpdate")
+    public Response saveOrUpdate(@RequestBody LitigationHistoryDTO litigationHistoryDTO){
+        Integer id = litigationHistoryService.saveOrUpdate(litigationHistoryDTO);
+        Records records = new Records();
+        records.setData(id);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "查询诉讼历史")
+    @GetMapping("/query")
+    public Response queryLitigationHistory(String patentNo) throws Exception {
+        List<LitigationHistoryVO> litigationHistoryVOS = litigationHistoryService.getLitigationHistory(patentNo);
+        Records records = new Records();
+        records.setData(litigationHistoryVOS);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "删除诉讼历史")
+    @PostMapping("/delete")
+    public Response delete(@RequestBody List<Integer> ids) throws Exception {
+        List<Integer> deleteIds = litigationHistoryService.deleteLitigationHistory(ids);
+        Records records = new Records();
+        records.setData(deleteIds);
+        return Response.success(records);
+    }
+}

+ 54 - 0
src/main/java/cn/cslg/pas/controller/OtherReferencesController.java

@@ -0,0 +1,54 @@
+package cn.cslg.pas.controller;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.business.OtherReferencesDTO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.vo.business.OtherReferencesVO;
+import cn.cslg.pas.service.business.OtherReferencesService;
+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.*;
+
+import java.util.List;
+
+/**
+ * 其他参考资料
+ * @Author xiexiang
+ * @Date 2024/1/17
+ */
+@Slf4j
+@RequestMapping(Constants.API_XiaoSHI + "/otherReferences")
+@RestController
+public class OtherReferencesController {
+    @Autowired
+    private OtherReferencesService otherReferencesService;
+
+    @Operation(summary = "添加or更新其他参考资料")
+    @PostMapping("/saveOrUpdate")
+    public Response saveOrUpdate(@RequestBody OtherReferencesDTO otherReferencesDTO){
+        Integer id = otherReferencesService.saveOrUpdate(otherReferencesDTO);
+        Records records = new Records();
+        records.setData(id);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "查询其他参考资料")
+    @GetMapping("/query")
+    public Response queryOtherReferences(String patentNo) throws Exception {
+        List<OtherReferencesVO> otherReferencesVOS = otherReferencesService.getOtherReferences(patentNo);
+        Records records = new Records();
+        records.setData(otherReferencesVOS);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "删除其他参考资料")
+    @PostMapping("/delete")
+    public Response delete(@RequestBody List<Integer> ids) throws Exception {
+        List<Integer> deleteIds = otherReferencesService.deleteOtherReferences(ids);
+        Records records = new Records();
+        records.setData(deleteIds);
+        return Response.success(records);
+    }
+}

+ 72 - 29
src/main/java/cn/cslg/pas/controller/PatentController.java

@@ -7,6 +7,7 @@ import cn.cslg.pas.common.dto.PatentExport.TaskParams;
 import cn.cslg.pas.common.dto.business.EsCountDTO;
 import cn.cslg.pas.common.dto.business.SelectClaimDTO;
 import cn.cslg.pas.common.dto.es.EsDateRangeDTO;
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.request.StringRequest;
 import cn.cslg.pas.common.utils.*;
@@ -19,19 +20,25 @@ import cn.cslg.pas.common.vo.business.PatentKinVO;
 import cn.cslg.pas.common.vo.business.PatentNoVO;
 import cn.cslg.pas.common.vo.es.EsCustomFieldBatchVO;
 import cn.cslg.pas.common.vo.es.EsDateRangeVO;
+import cn.cslg.pas.common.vo.es.EsProductPatentVO;
+import cn.cslg.pas.domain.business.ImportTask;
+import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.factorys.businessFactory.Business;
 import cn.cslg.pas.factorys.businessFactory.BusinessFactory;
 import cn.cslg.pas.service.business.CustomAnalyseService;
+import cn.cslg.pas.service.business.ImportTaskService;
 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.EsProductPatentService;
 import cn.cslg.pas.service.business.es.EsService;
 import cn.cslg.pas.service.common.FileManagerService;
 import cn.cslg.pas.service.common.PatentStarApiService;
 import cn.hutool.core.util.IdUtil;
 import io.swagger.v3.oas.annotations.Operation;
+import org.apache.commons.io.input.XmlStreamReaderException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.InputStreamResource;
 import org.springframework.http.HttpHeaders;
@@ -66,6 +73,9 @@ public class PatentController {
     private EsService esService;
 
     @Autowired
+    private EsProductPatentService esProductPatentService;
+
+    @Autowired
     private PatentStarApiService patentStarApiService;
 
     @Autowired
@@ -74,6 +84,11 @@ public class PatentController {
     private PatentExportService patentExportService;
     @Autowired
     private PDFExportFirstPageService pdfExportFirstPageService;
+    @Autowired
+    private ImportTaskService importTaskService;
+    @Autowired
+    private LoginUtils loginUtils;
+
 
     @Operation(summary = "查询专利")
     @PostMapping("/queryPatent")
@@ -166,7 +181,12 @@ public class PatentController {
     @Operation(summary = "专利列表上新增发明人/权利人/申请人合并")
     @PostMapping("/mergePerson")
     public Response mergePerson(@RequestBody MergePersonVO personVO) throws Exception {
-        Integer personId = mergePersonService.mergePerson(personVO);
+        Integer personId = null;
+        try {
+            personId = mergePersonService.mergePerson(personVO);
+        } catch (Exception e) {
+            return Response.success(e.getMessage());
+        }
         return Response.success(personId);
     }
 
@@ -180,7 +200,12 @@ public class PatentController {
     @Operation(summary = "专利列表上编辑发明人/权利人/申请人合并")
     @PostMapping("/updateMergePerson")
     public Response updateMergePerson(@RequestBody MergePersonVO personVO) throws Exception{
-        Integer personId = mergePersonService.updateMergePerson(personVO);
+        Integer personId = null;
+        try {
+            personId = mergePersonService.updateMergePerson(personVO);
+        } catch (Exception e) {
+            return Response.success(e.getMessage());
+        }
         return Response.success(personId);
     }
 
@@ -237,38 +262,56 @@ public class PatentController {
     //--------------------导出-----------------------
     @PostMapping("/exportPDFFirstPage")
     @Operation(summary = "导出专利PDF")
-    public ResponseEntity<InputStreamResource> exportPDFFirstPage(@RequestBody EsCustomFieldBatchVO EsVO) throws IOException {
-        byte[] fileData = pdfExportFirstPageService.mergePdfFirstPage(EsVO);
-        //保存生成excel的地址
-        String fileName = IdUtil.simpleUUID() + ".pdf";
-        //文件原始名中的中文字符可能会乱码,对文件名进行URL编码
-        String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
-        return ResponseEntity.ok().contentLength(fileData.length)
-                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + encodedFileName + "\"")
-                .contentType(MediaType.parseMediaType("application/octet-stream"))
-                .body(new InputStreamResource(new ByteArrayInputStream(fileData)));
+    public Response exportPDFFirstPage(@RequestBody EsCustomFieldBatchVO EsVO) throws IOException {
+        ExportTaskDTO exportTaskDTO = new ExportTaskDTO();
+        exportTaskDTO.setProjectId(EsVO.getProjectId());
+        exportTaskDTO.setType(7);
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        exportTaskDTO.setCreateId(personnelVO.getId());
+        exportTaskDTO.setCreateName(personnelVO.getName());
+        Integer taskId = importTaskService.addExportTask(exportTaskDTO);
+        exportTaskDTO.setEsVO(EsVO);
+        exportTaskDTO.setTaskId(taskId);
+        try {
+            pdfExportFirstPageService.mergePdfFirstPage(exportTaskDTO);
+        } catch (Exception e) {
+            throw new XiaoShiException("导出失败");
+        }
+        Records records = new Records();
+        records.setData("正在导出PDF首页");
+        return Response.success(records);
     }
 
-//    @PostMapping("/exportPatentExcel")
-//    @Operation(summary = "导出专利")
-//    public ResponseEntity<InputStreamResource> export(@RequestBody EsCustomFieldBatchVO EsVO) throws IOException {
-//        byte[] fileData = patentExportService.exportPatent(EsVO);
-//        //保存生成excel的地址
-//        String fileName = IdUtil.simpleUUID() + ".xls";
-//        //文件原始名中的中文字符可能会乱码,对文件名进行URL编码
-//        String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
-//        return ResponseEntity.ok().contentLength(fileData.length)
-//                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + encodedFileName + "\"")
-//                .contentType(MediaType.parseMediaType("application/octet-stream"))
-//                .body(new InputStreamResource(new ByteArrayInputStream(fileData)));
-//    }
-
     @PostMapping("/exportPatentExcel")
     @Operation(summary = "导出专利")
-    public Response export(@RequestBody EsCustomFieldBatchVO EsVO) throws IOException {
-        patentExportService.exportPatent(EsVO);
+    public Response exportPatentExcel(@RequestBody EsCustomFieldBatchVO EsVO) throws IOException {
+        ExportTaskDTO exportTaskDTO = new ExportTaskDTO();
+        exportTaskDTO.setProjectId(EsVO.getProjectId());
+        exportTaskDTO.setType(6);
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        exportTaskDTO.setCreateId(personnelVO.getId());
+        exportTaskDTO.setCreateName(personnelVO.getName());
+        Integer taskId = importTaskService.addExportTask(exportTaskDTO);
+        exportTaskDTO.setEsVO(EsVO);
+        exportTaskDTO.setTaskId(taskId);
+        patentExportService.exportPatent(exportTaskDTO);
         Records records = new Records();
-        records.setData("导出成功");
+        records.setData("导出专利");
         return Response.success(records);
     }
+
+    //---------------------------------商品化专利----------------
+    @Operation(summary = "添加商品化专利")
+    @PostMapping("/addProductPatent")
+    public Response addProductPatent(EsProductPatentVO vo) throws Exception {
+        List<Integer> ids = esProductPatentService.addProductPatent(vo);
+        return Response.success(ids);
+    }
+
+    @Operation(summary = "删除商品化专利")
+    @PostMapping("/delProductPatent")
+    public Response delProductPatent(EsProductPatentVO vo) throws Exception {
+        List<Integer> ids = esProductPatentService.delProductPatent(vo);
+        return Response.success(ids);
+    }
 }

+ 54 - 0
src/main/java/cn/cslg/pas/controller/PermissionRecordController.java

@@ -0,0 +1,54 @@
+package cn.cslg.pas.controller;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.business.PermissionRecordDTO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.vo.business.PermissionRecordVO;
+import cn.cslg.pas.service.business.PermissionRecordService;
+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.*;
+
+import java.util.List;
+
+/**
+ * 许可历史
+ * @Author xiexiang
+ * @Date 2024/1/15
+ */
+@Slf4j
+@RequestMapping(Constants.API_XiaoSHI + "/permissionRecord")
+@RestController
+public class PermissionRecordController {
+    @Autowired
+    private PermissionRecordService permissionRecordService;
+
+    @Operation(summary = "添加or更新许可历史")
+    @PostMapping("/saveOrUpdate")
+    public Response saveOrUpdate(@RequestBody PermissionRecordDTO permissionRecordDTO){
+        Integer id = permissionRecordService.saveOrUpdate(permissionRecordDTO);
+        Records records = new Records();
+        records.setData(id);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "查询许可历史")
+    @GetMapping("/query")
+    public Response queryLitigationHistory(String patentNo) throws Exception {
+        List<PermissionRecordVO> permissionRecordVOS = permissionRecordService.getPermissionRecord(patentNo);
+        Records records = new Records();
+        records.setData(permissionRecordVOS);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "删除许可历史")
+    @PostMapping("/delete")
+    public Response delete(@RequestBody List<Integer> ids) throws Exception {
+        List<Integer> deleteIds = permissionRecordService.deletePermissionRecord(ids);
+        Records records = new Records();
+        records.setData(deleteIds);
+        return Response.success(records);
+    }
+}

+ 11 - 4
src/main/java/cn/cslg/pas/controller/ProductCategoryController.java

@@ -1,5 +1,6 @@
 package cn.cslg.pas.controller;
 
+import cn.cslg.pas.common.auth.checkAuth;
 import cn.cslg.pas.common.core.base.Constants;
 import cn.cslg.pas.common.dto.business.ProductCategoryDTO;
 import cn.cslg.pas.common.dto.business.UpdateProductCategoryDTO;
@@ -26,6 +27,7 @@ import java.util.List;
 
 /**
  * 产品类别的Controller层
+ *
  * @Author xiexiang
  * @Date 2023/10/24
  */
@@ -38,7 +40,8 @@ public class ProductCategoryController {
 
     @Operation(summary = "查询产品类别")
     @PostMapping("/queryProductCategory")
-    public Response queryProductCategory(@RequestBody  StringRequest stringRequest) throws Exception {
+    @checkAuth(FunId = "xiaoshi/product")
+    public Response queryProductCategory(@RequestBody StringRequest stringRequest) throws Exception {
         Business business = businessFactory.getClass("productCategoryService");
         Records records = (Records) business.queryMessage(stringRequest);
         return Response.success(records);
@@ -46,6 +49,7 @@ public class ProductCategoryController {
 
     @Operation(summary = "添加产品类别")
     @PostMapping("/addProductCategory")
+    @checkAuth(FunId = "xiaoshi/product")
     public Response addProductCategory(String productCategory, List<MultipartFile> files) throws Exception {
         if (productCategory != null && productCategory != "") {
             ProductCategoryDTO productCategoryDTO = JSONObject.parseObject(productCategory, ProductCategoryDTO.class);
@@ -53,8 +57,8 @@ public class ProductCategoryController {
             Integer id = null;
             try {
                 id = (Integer) business.addMessage(productCategoryDTO, files);
-            } catch (Exception e){
-                if(e instanceof XiaoShiException) {
+            } catch (Exception e) {
+                if (e instanceof XiaoShiException) {
                     return Response.error(e.getMessage());
                 } else if (e instanceof UnLoginException) {
                     return Response.unLogin(e.getMessage());
@@ -70,18 +74,21 @@ public class ProductCategoryController {
 
     @Operation(summary = "更新产品类别")
     @PostMapping("/updateProductCategory")
+    @checkAuth(FunId = "xiaoshi/product")
     public Response updateProductCategory(String productCategory, List<MultipartFile> files) throws Exception {
         if (productCategory != null) {
             UpdateProductCategoryDTO updateProductCategoryDTO = JSONObject.parseObject(productCategory, UpdateProductCategoryDTO.class);
             Business business = businessFactory.getClass("productCategoryService");
-            business.updateMessage(updateProductCategoryDTO,files);
+            business.updateMessage(updateProductCategoryDTO, files);
             return Response.success(1);
         } else {
             return Response.error("网络异常");
         }
     }
+
     @Operation(summary = "删除产品类别")
     @PostMapping("/deleteProductCategory")
+    @checkAuth(FunId = "xiaoshi/product")
     public String deleteProductCategory(@RequestBody List<Integer> ids) throws Exception {
         Business business = businessFactory.getClass("productCategoryService");
         business.deleteMessage(ids);

+ 5 - 0
src/main/java/cn/cslg/pas/controller/ProductController.java

@@ -1,5 +1,6 @@
 package cn.cslg.pas.controller;
 
+import cn.cslg.pas.common.auth.checkAuth;
 import cn.cslg.pas.common.core.base.Constants;
 import cn.cslg.pas.common.dto.business.ProductDTO;
 import cn.cslg.pas.common.dto.business.UpdateProductDTO;
@@ -42,6 +43,7 @@ public class ProductController {
 
     @Operation(summary = "查询产品")
     @PostMapping("/queryProduct")
+    @checkAuth(FunId = "xiaoshi/product")
     public Response queryProduct(@RequestBody StringRequest stringRequest) throws Exception {
         Business business = businessFactory.getClass("productService");
         Records records = (Records) business.queryMessage(stringRequest);
@@ -50,6 +52,7 @@ public class ProductController {
 
     @Operation(summary = "添加产品")
     @PostMapping("/addProduct")
+    @checkAuth(FunId = "xiaoshi/product")
     public Response addProduct(String product, List<MultipartFile> files) throws Exception {
         if (product != null && product != "") {
             ProductDTO productDTO = JSONObject.parseObject(product, ProductDTO.class);
@@ -74,6 +77,7 @@ public class ProductController {
 
     @Operation(summary = "更新产品")
     @PostMapping("/updateProduct")
+    @checkAuth(FunId = "xiaoshi/product")
     public Response updateProduct(String product, List<MultipartFile> files) throws Exception {
         if(product != null){
             UpdateProductDTO updateProductDTO = JSONObject.parseObject(product, UpdateProductDTO.class);
@@ -87,6 +91,7 @@ public class ProductController {
 
     @Operation(summary = "删除产品")
     @PostMapping("/deleteProduct")
+    @checkAuth(FunId = "xiaoshi/product")
     public String deleteProduct(@RequestBody List<Integer> ids) throws Exception {
         Business business = businessFactory.getClass("productService");
         business.deleteMessage(ids);

+ 7 - 0
src/main/java/cn/cslg/pas/controller/ReportProjectController.java

@@ -1,5 +1,6 @@
 package cn.cslg.pas.controller;
 
+import cn.cslg.pas.common.auth.checkAuth;
 import cn.cslg.pas.common.core.base.Constants;
 import cn.cslg.pas.common.dto.business.EventDTO;
 import cn.cslg.pas.common.dto.business.ReportProjectDTO;
@@ -43,6 +44,7 @@ public class ReportProjectController {
 
     @Operation(summary = "查询报告")
     @PostMapping("/queryReportProject")
+    @checkAuth(FunId = "xiaoshi/report")
     public Response queryPatentProject(@RequestBody StringRequest stringRequest) throws Exception {
         Business business = businessFactory.getClass("reportProjectService");
         Records records = (Records) business.queryMessage(stringRequest);
@@ -52,6 +54,7 @@ public class ReportProjectController {
 
     @Operation(summary = "添加报告")
     @PostMapping("/addReportProject")
+    @checkAuth(FunId = "xiaoshi/report")
     public Response addReportProject(@RequestBody ReportProjectDTO reportProjectDTO) throws Exception {
         if (reportProjectDTO != null) {
             Business business = businessFactory.getClass("reportProjectService");
@@ -75,6 +78,7 @@ public class ReportProjectController {
 
     @Operation(summary = "更新报告")
     @PostMapping("/updateReportProject")
+    @checkAuth(FunId = "xiaoshi/report")
     public Response updatePatentProject(@RequestBody UpdateReportProjectDTO updateReportProjectDTO) throws Exception {
         if (updateReportProjectDTO != null) {
             Business business = businessFactory.getClass("reportProjectService");
@@ -87,6 +91,7 @@ public class ReportProjectController {
 
     @Operation(summary = "删除报告")
     @PostMapping("/deleteReportProject")
+    @checkAuth(FunId = "xiaoshi/report")
     public String deletePatentProject(@RequestBody List<Integer> ids) throws Exception {
         Business business = businessFactory.getClass("reportProjectService");
         business.deleteMessage(ids);
@@ -95,6 +100,7 @@ public class ReportProjectController {
 
     @Operation(summary = "分组报告")
     @PostMapping("/groupReportProject")
+    @checkAuth(FunId = "xiaoshi/report")
     public Response groupPatentProject(@RequestBody StringGroupRequest stringGroupRequest) throws Exception {
         Business business = businessFactory.getClass("reportProjectService");
         Records records = (Records) business.getGroup(stringGroupRequest, "reportProject");
@@ -104,6 +110,7 @@ public class ReportProjectController {
 
     @Operation(summary = "更新是否第二次无效")
     @PostMapping("/updateIfSecondInvalid")
+    @checkAuth(FunId = "xiaoshi/report")
     public Response updateIfSecondInvalid(@RequestBody UpdateIfSecondInvalidDTO updateIfSecondInvalidDTO) throws Exception {
         try {
             reportProjectService.updateIfSecondInvalid(updateIfSecondInvalidDTO);

+ 56 - 0
src/main/java/cn/cslg/pas/controller/ReviewHistoryController.java

@@ -0,0 +1,56 @@
+package cn.cslg.pas.controller;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.business.ReviewHistoryDTO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.vo.HightlightTemplateVO;
+import cn.cslg.pas.common.vo.business.ReviewHistoryVO;
+import cn.cslg.pas.service.business.ReviewHistoryService;
+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.*;
+
+import java.util.List;
+
+/**
+ * 审查历史
+ * @Author xiexiang
+ * @Date 2024/1/15
+ */
+@Slf4j
+@RequestMapping(Constants.API_XiaoSHI + "/reviewHistory")
+@RestController
+public class ReviewHistoryController {
+    @Autowired
+    private ReviewHistoryService reviewHistoryService;
+
+    @Operation(summary = "添加or更新审查历史")
+    @PostMapping("/saveOrUpdate")
+    public Response saveOrUpdate(@RequestBody ReviewHistoryDTO reviewHistoryDTO){
+        Integer id = reviewHistoryService.saveOrUpdate(reviewHistoryDTO);
+        Records records = new Records();
+        records.setData(id);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "查询审查历史")
+    @GetMapping("/query")
+    public Response queryReviewHistory(String patentNo) throws Exception {
+        List<ReviewHistoryVO> reviewHistoryVOS = reviewHistoryService.getReviewHistory(patentNo);
+        Records records = new Records();
+        records.setData(reviewHistoryVOS);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "删除审查历史")
+    @PostMapping("/delete")
+    public Response delete(@RequestBody List<Integer> ids) throws Exception {
+        List<Integer> deleteIds = reviewHistoryService.deleteReviewHistory(ids);
+        Records records = new Records();
+        records.setData(deleteIds);
+        return Response.success(records);
+    }
+
+}

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

@@ -99,10 +99,10 @@ public class PatentStarController {
         return patentStarApiService.getCitedNumByPubNoApi(patentNo);
     }
 
-    @Operation(summary = "根据专利号查询外部权利要求")
-    @PostMapping("/queryExternalClaim")
-    public Response queryExternalClaim(@RequestBody QueryExternalFamilyVO vo) throws Exception {
-        SelectClaimDTO dto = patentStarApiService.selectClaim(vo);
+    @Operation(summary = "根据原始申请号查询外部权利要求")
+    @GetMapping("/queryExternalClaim")
+    public Response queryExternalClaim(String appNo) throws Exception {
+        SelectClaimDTO dto = patentStarApiService.queryExternalClaim(appNo);
         return Response.success(dto);
     }
 

+ 19 - 0
src/main/java/cn/cslg/pas/domain/business/AssoOtherReferencesFile.java

@@ -0,0 +1,19 @@
+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;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/17
+ */
+@Data
+@TableName("asso_other_references_file")
+public class AssoOtherReferencesFile extends BaseEntity<AssoOtherReferencesFile> {
+    @TableField(value = "file_guid")
+    private String fileGuid;
+    @TableField(value = "other_references_id")
+    private Integer otherReferencesId;
+}

+ 11 - 3
src/main/java/cn/cslg/pas/domain/business/CustomAnalysisItemSchema.java

@@ -27,13 +27,13 @@ public class CustomAnalysisItemSchema extends BaseEntity<CustomAnalysisItemSchem
     private String dimension;
 
     @TableField(value = "field")
-    private Integer field;
+    private String field;
 
     @TableField(value = "expand")
-    private Integer expand;
+    private String expand;
 
     @TableField(value = "type")
-    private Integer type;
+    private String type;
 
     @TableField(value = "ptype")
     private Integer ptype;
@@ -60,4 +60,12 @@ public class CustomAnalysisItemSchema extends BaseEntity<CustomAnalysisItemSchem
     @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
     private Date updateTime;
 
+    @TableField(value = "name")
+    private String name;
+
+    @TableField(value = "group_by")
+    private String groupBy;
+
+    @TableField(value = "field_kind")
+    private String fieldKind;
 }

+ 10 - 4
src/main/java/cn/cslg/pas/domain/business/CustomAnalysisItemSetting.java

@@ -63,9 +63,9 @@ public class CustomAnalysisItemSetting extends BaseEntity<CustomAnalysisItemSett
         this.fontSize2 = "13";
         this.fontColor = "#000000";
         this.fontColor2 = "#000000";
-        this.show = true;
+        this.show1 = true;
         this.show2 = true;
-        this.interval = true;
+        this.interval1 = true;
         this.interval2 = true;
         this.rotate = "0";
         this.rotate2 = "0";
@@ -303,7 +303,10 @@ public class CustomAnalysisItemSetting extends BaseEntity<CustomAnalysisItemSett
     /**
      * 坐标轴(X)显示
      */
-    @TableField(value = "show")
+    @TableField(value = "show1")
+    private Boolean show1;
+
+    @TableField(exist = false)
     private Boolean show;
 
     /**
@@ -318,7 +321,10 @@ public class CustomAnalysisItemSetting extends BaseEntity<CustomAnalysisItemSett
     /**
      * X轴信息全部显示
      */
-    @TableField(value = "interval")
+    @TableField(value = "interval1")
+    private Boolean interval1;
+
+    @TableField(exist = false)
     private Boolean interval;
 
     /**

+ 10 - 4
src/main/java/cn/cslg/pas/domain/business/CustomAnalysisItemSource.java

@@ -45,14 +45,14 @@ public class CustomAnalysisItemSource extends BaseEntity<CustomAnalysisItemSourc
     /**
      * 字段ID
      */
-    @TableField(value = "field_id")
-    private Integer fieldId;
+    @TableField(value = "field")
+    private String field;
 
     /**
      * 拓展ID
      */
-    @TableField(value = "expand_id")
-    private Integer expandId;
+    @TableField(value = "expand")
+    private String expand;
 
     /**
      * 开始时间
@@ -98,6 +98,12 @@ public class CustomAnalysisItemSource extends BaseEntity<CustomAnalysisItemSourc
     @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
     private Date updateTime;
 
+    @TableField(value = "number")
+    private Integer number;
+
+    @TableField(value = "topN")
+    private Integer topN;
+
     /**
      * 大于
      */

+ 72 - 0
src/main/java/cn/cslg/pas/domain/business/HightlightTemplate.java

@@ -0,0 +1,72 @@
+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;
+import java.util.List;
+
+/**
+ * 高亮
+ * @Author xiexiang
+ * @Date 2024/1/12
+ */
+@Data
+@TableName("hightlight_template")
+public class HightlightTemplate extends BaseEntity<HightlightTemplate> {
+    /**
+     * 模板名称
+     */
+    @TableField(value = "name")
+    private String name;
+
+    /**
+     * 是否启用
+     */
+    @TableField(value = "if_enable")
+    private Boolean ifEnable;
+
+    /**
+     * 是否默认
+     */
+    @TableField(value = "if_default")
+    private Boolean ifDefault;
+
+    /**
+     * description
+     */
+    @TableField(value = "description")
+    private String description;
+
+    /**
+     * 创建人
+     */
+    @TableField(value = "create_id")
+    private String createId;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time")
+    private Date createTime;
+
+    /**
+     * config
+     */
+    @TableField(value = "config")
+    private String config;
+
+    @TableField(value = "project_id")
+    private Integer projectId;
+
+    @TableField(exist = false)
+    private List<Config> configs;
+
+    @Data
+    public static class Config {
+        private String color;
+        private String keywords;
+    }
+}

+ 95 - 0
src/main/java/cn/cslg/pas/domain/business/LitigationHistory.java

@@ -0,0 +1,95 @@
+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 2024/1/15
+ */
+@Data
+@TableName("litigation_history")
+public class LitigationHistory extends BaseEntity<LitigationHistory> {
+    /**
+     * 原告
+     */
+    @TableField(value = "plaintiff")
+    private String plaintiff;
+
+    /**
+     * 被告
+     */
+    @TableField(value = "defendant")
+    private String defendant;
+
+
+    /**
+     * 案由
+     */
+    @TableField(value = "cause_of_action")
+    private String causeOfAction;
+
+    /**
+     * 起诉时间
+     */
+    @TableField(value = "indict_time")
+    private Date indictTime;
+
+    /**
+     * 结果
+     */
+    @TableField(value = "result")
+    private String result;
+
+    /**
+     * 案件详情
+     */
+    @TableField(value = "case_details")
+    private String caseDetails;
+
+    /**
+     * 附件id
+     */
+    @TableField(value = "file_guid")
+    private String fileGuid;
+
+    /**
+     * projectId
+     */
+    @TableField(value = "project_id")
+    private Integer projectId;
+
+    /**
+     * 专利号
+     */
+    @TableField(value = "patent_no")
+    private String patentNo;
+
+    /**
+     * 备注
+     */
+    @TableField(value = "remark")
+    private String remark;
+
+    /**
+     * 法院
+     */
+    @TableField(value = "court")
+    private String court;
+
+    /**
+     * 创建人id
+     */
+    @TableField(value = "create_id")
+    private String createId;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time")
+    private Date createTime;
+}

+ 53 - 0
src/main/java/cn/cslg/pas/domain/business/OtherReferences.java

@@ -0,0 +1,53 @@
+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 2024/1/17
+ */
+@Data
+@TableName("other_references")
+public class OtherReferences extends BaseEntity<OtherReferences> {
+    @TableField(value = "patent_no")
+    private String patentNo;
+
+    /**
+     * 报告/专题库id
+     */
+    @TableField(value = "project_id")
+    private Integer projectId;
+
+    /**
+     * 说明
+     */
+    @TableField(value = "remark")
+    private String remark;
+
+    /**
+     * 其他参考资料名称
+     */
+    @TableField(value = "reference_name")
+    private String referenceName;
+
+    @TableField(value = "reference_url")
+    private String referenceUrl;
+
+    /**
+     * 创建人id
+     */
+    @TableField(value = "create_id")
+    private String createId;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time")
+    private Date createTime;
+}

+ 84 - 0
src/main/java/cn/cslg/pas/domain/business/PermissionRecord.java

@@ -0,0 +1,84 @@
+package cn.cslg.pas.domain.business;
+
+import cn.cslg.pas.common.dto.business.PermissionRecordDTO;
+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 2024/1/16
+ */
+@Data
+@TableName("permission_record")
+public class PermissionRecord extends BaseEntity<PermissionRecord> {
+    /**
+     * 专利号
+     */
+    @TableField(value = "patent_no")
+    private String patentNo;
+
+    /**
+     * 许可人 (默认为专利权利人)
+     */
+    @TableField(value = "licensor")
+    private String licensor;
+
+    /**
+     * 被许可人
+     */
+    @TableField(value = "licensee")
+    private String licensee;
+
+    /**
+     * 被许可人国家
+     */
+    @TableField(value = "licensee_country")
+    private String licenseeCountry;
+
+    /**
+     * 许可时间
+     */
+    @TableField(value = "license_time")
+    private Date licenseTime;
+
+    /**
+     * 许可费用(万元)
+     */
+    @TableField(value = "license_fee")
+    private Double licenseFee;
+
+    /**
+     * 截止时间
+     */
+    @TableField(value = "license_dead_line")
+    private Date licenseDeadLine;
+
+    /**
+     * 许可类型
+     */
+    @TableField(value = "license_type")
+    private String licenseType;
+
+    /**
+     * 租户id
+     */
+    @TableField(value = "tenant_id")
+    private Integer tenantId;
+
+    /**
+     * 创建人id
+     */
+    @TableField(value = "create_id")
+    private String createId;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time")
+    private Date createTime;
+}

+ 75 - 0
src/main/java/cn/cslg/pas/domain/business/ReviewHistory.java

@@ -0,0 +1,75 @@
+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.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 审查历史
+ * @Author xiexiang
+ * @Date 2024/1/15
+ */
+@Data
+@TableName("review_history")
+public class ReviewHistory extends BaseEntity<ReviewHistory> {
+    /**
+     * 时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")
+    @TableField(value = "review_time")
+    private Date reviewTime;
+
+    /**
+     * 事件
+     */
+    @TableField(value = "review_event")
+    private String reviewEvent;
+
+    /**
+     * 说明
+     */
+    @TableField(value = "review_explain")
+    private String reviewExplain;
+
+    /**
+     * 文件id
+     */
+    @TableField(value = "file_guid")
+    private String fileGuid;
+
+    /**
+     * 所属project
+     */
+    @TableField(value = "project_id")
+    private Integer projectId;
+
+    /**
+     * 专利号
+     */
+    @TableField(value = "patent_no")
+    private String patentNo;
+
+    /**
+     * 租户id
+     */
+    @TableField(value = "tenant_id")
+    private Integer tenantId;
+
+    /**
+     * 创建人id
+     */
+    @TableField(value = "create_id")
+    private String createId;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time")
+    private Date createTime;
+}

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

@@ -81,6 +81,7 @@ public class ScratchWords {
     private Integer publicTenantId;
 
     private String patentTitle;
+    private Integer createFrom;
 
 
 }

+ 2 - 0
src/main/java/cn/cslg/pas/domain/es/Marking.java

@@ -89,4 +89,6 @@ public class Marking {
   private String patentNo;
   @JsonProperty("patent_title")
   private String patentTitle;
+  @JsonProperty("create_from")
+  private Integer createFrom;
 }

+ 1 - 1
src/main/java/cn/cslg/pas/domain/es/Patent.java

@@ -394,7 +394,7 @@ public class Patent {
      * 专题库或报告id
      */
     @JsonProperty("product_id")
-    private String productId;
+    private Integer productId;
 
     /**
      * 专题库或报告的任务

+ 8 - 5
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/PersonNameQueryBuilder.java

@@ -1,8 +1,8 @@
 package cn.cslg.pas.factorys.EsBuilderFactory;
 
 import cn.cslg.pas.service.permissions.PermissionService;
-import co.elastic.clients.elasticsearch._types.query_dsl.Query;
-import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import co.elastic.clients.elasticsearch._types.FieldValue;
+import co.elastic.clients.elasticsearch._types.query_dsl.*;
 import co.elastic.clients.json.JsonData;
 import com.alibaba.fastjson.JSON;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -34,10 +34,13 @@ public class PersonNameQueryBuilder implements IQueryBuilder {
             ids = new ArrayList<>();
             ids.add("0");
         }
-        List<String> aa =new ArrayList<>();
-        String strs = JsonData.of(ids).toString();
-        Query query = QueryBuilders.terms(t -> t.field(field));
+        List<FieldValue> fieldValues = new ArrayList<>();
 
+        ids.forEach(item -> {
+            fieldValues.add(FieldValue.of(item));
+        });
+
+        Query query = QueryBuilders.terms(t -> t.field(field).terms(new TermsQueryField.Builder().value(fieldValues).build()));
         return query;
     }
 

+ 60 - 0
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/ProductQueryBuilder.java

@@ -0,0 +1,60 @@
+package cn.cslg.pas.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+
+@Component
+public class ProductQueryBuilder implements IQueryBuilder {
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        return QueryBuilders.hasChild(child -> child.type("product").query(i -> i.match(j -> j.field(field).query(value))));
+    }
+
+    @Override
+    public String getField() {
+        return field;
+    }
+
+    @Override
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    @Override
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String getOperator() {
+        return operator;
+    }
+
+    @Override
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    @Override
+    public String getPath() {
+        return path;
+    }
+
+    @Override
+    public void setPath(String path) {
+        this.path = path;
+    }
+}

+ 28 - 0
src/main/java/cn/cslg/pas/factorys/getSqlFactorys/GetComBoolSql.java

@@ -0,0 +1,28 @@
+package cn.cslg.pas.factorys.getSqlFactorys;
+
+import cn.cslg.pas.common.model.cronModel.SqlObject;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+
+@Slf4j
+@Component
+public class GetComBoolSql implements GetSqlObject{
+
+ private SqlObject sqlObject;
+    @Override
+    public String getSql(String value) {
+      String filed= sqlObject.getSqlField();
+      String option =sqlObject.getOption();
+       return  filed+option+ " " +value + " ";
+    }
+
+    public void setSqlObject(SqlObject sqlObject)
+    {
+        this.sqlObject=sqlObject;
+    }
+
+    public SqlObject getSqlObject(){
+        return sqlObject;
+    }
+}

+ 13 - 0
src/main/java/cn/cslg/pas/mapper/AssoOtherReferencesFileMapper.java

@@ -0,0 +1,13 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.business.AssoOtherReferencesFile;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/17
+ */
+@Repository
+public interface AssoOtherReferencesFileMapper extends BaseMapper<AssoOtherReferencesFile> {
+}

+ 13 - 0
src/main/java/cn/cslg/pas/mapper/HightlightTemplateMapper.java

@@ -0,0 +1,13 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.business.HightlightTemplate;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/12
+ */
+@Repository
+public interface HightlightTemplateMapper extends BaseMapper<HightlightTemplate> {
+}

+ 14 - 0
src/main/java/cn/cslg/pas/mapper/LitigationHistoryMapper.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.business.LitigationHistory;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/15
+ */
+@Repository
+public interface LitigationHistoryMapper extends BaseMapper<LitigationHistory> {
+}

+ 13 - 0
src/main/java/cn/cslg/pas/mapper/OtherReferencesMapper.java

@@ -0,0 +1,13 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.business.OtherReferences;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/17
+ */
+@Repository
+public interface OtherReferencesMapper extends BaseMapper<OtherReferences> {
+}

+ 13 - 0
src/main/java/cn/cslg/pas/mapper/PermissionRecordMapper.java

@@ -0,0 +1,13 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.business.PermissionRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/16
+ */
+@Repository
+public interface PermissionRecordMapper extends BaseMapper<PermissionRecord> {
+}

+ 13 - 0
src/main/java/cn/cslg/pas/mapper/ReviewHistoryMapper.java

@@ -0,0 +1,13 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.business.ReviewHistory;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/15
+ */
+@Repository
+public interface ReviewHistoryMapper extends BaseMapper<ReviewHistory> {
+}

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

@@ -46,6 +46,7 @@ public class PatentLabelService {
                 esCustomField.setFieldType(10);
                 esCustomField.setCreateTime(new Date());
                 esCustomField.setProjectId(projectId);
+                esCustomField.setField("0");
                 esCustomField.setFieldValue(labels);
                 esCustomField.setStatsValue(labels);
                 id = esCustomFieldService.addEsCustomFieldToEs(esCustomField, patentNo, null);

+ 16 - 0
src/main/java/cn/cslg/pas/service/business/AssoOtherReferencesFileService.java

@@ -0,0 +1,16 @@
+package cn.cslg.pas.service.business;
+
+import cn.cslg.pas.domain.business.AssoOtherReferencesFile;
+import cn.cslg.pas.mapper.AssoOtherReferencesFileMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/17
+ */
+@Slf4j
+@Service
+public class AssoOtherReferencesFileService extends ServiceImpl<AssoOtherReferencesFileMapper, AssoOtherReferencesFile> {
+}

+ 13 - 8
src/main/java/cn/cslg/pas/service/business/CustomAnalyseService.java

@@ -13,6 +13,7 @@ import cn.cslg.pas.common.vo.customAnalyse.SelectAnalyseVO;
 import cn.cslg.pas.common.vo.customAnalyse.SelectCustomAnalyseVO;
 import cn.cslg.pas.domain.business.CustomAnalysisItem;
 import cn.cslg.pas.exception.UnLoginException;
+import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.CustomAnalysisItemMapper;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -20,6 +21,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -64,7 +66,7 @@ public class CustomAnalyseService extends ServiceImpl<CustomAnalysisItemMapper,
         try {
             personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
         } catch (Exception e) {
-            throw new UnLoginException("未登录");
+            throw new XiaoShiException("未登录");
         }
 
         SelectAnalyseVO analyseVO = new SelectAnalyseVO();
@@ -115,7 +117,7 @@ public class CustomAnalyseService extends ServiceImpl<CustomAnalysisItemMapper,
                 .eq(CustomAnalysisItem::getName, vo.getName())
                 .eq(CustomAnalysisItem::getType, vo.getType()));
         if (items.size() > 1) {
-            throw new Exception("名称不可重复");
+            throw new XiaoShiException("名称不可重复");
         }
 
         String uid = IdUtil.simpleUUID();
@@ -124,11 +126,11 @@ public class CustomAnalyseService extends ServiceImpl<CustomAnalysisItemMapper,
         try {
             personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
         } catch (Exception e) {
-            throw new UnLoginException("未登录");
+            throw new XiaoShiException("未登录");
         }
         CustomAnalysisItem item = new CustomAnalysisItem();
-        item.setUid(uid);
         BeanUtils.copyProperties(vo, item);
+        item.setUid(uid);
         if (vo.getType() == 1) {
             item.setParentId(0);
         } else {
@@ -140,9 +142,12 @@ public class CustomAnalyseService extends ServiceImpl<CustomAnalysisItemMapper,
         item.setCreateTime(new Date());
         item.setUpdateTime(new Date());
         item.insert();
+        if (StringUtils.isEmpty(vo.getUid())) {
+            vo.setUid(item.getUid());
+        }
         if (item.getType().equals(2)) {
-            itemSettingService.add(vo.getSetting(), uid);
             itemSchemaService.add(vo.getSchema(), uid);
+            itemSettingService.add(vo.getSetting(), uid);
             itemSourceService.edit(vo);
         }
         return item.getId();
@@ -155,14 +160,14 @@ public class CustomAnalyseService extends ServiceImpl<CustomAnalysisItemMapper,
                 .eq(CustomAnalysisItem::getName, vo.getName())
                 .eq(CustomAnalysisItem::getType, vo.getType()));
         if (items.size() > 1) {
-            throw new Exception("名称不可重复");
+            throw new XiaoShiException("名称不可重复");
         }
         //获取登陆人信息 用于设置创建人
         PersonnelVO personnelVO = new PersonnelVO();
         try {
             personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
         } catch (Exception e) {
-            throw new UnLoginException("未登录");
+            throw new XiaoShiException("未登录");
         }
 
         CustomAnalysisItem item = customAnalysisItemMapper.selectById(vo.getId());
@@ -187,7 +192,7 @@ public class CustomAnalyseService extends ServiceImpl<CustomAnalysisItemMapper,
         long count = this.count(new LambdaQueryWrapper<CustomAnalysisItem>()
                 .eq(CustomAnalysisItem::getParentId, vo.getId()));
         if (count > 0) {
-            throw new Exception("删除失败,请先删除子节点");
+            throw new XiaoShiException("删除失败,请先删除子节点");
         }
         this.removeById(vo.getId());
         itemSchemaService.deleteByUid(item.getUid());

+ 23 - 0
src/main/java/cn/cslg/pas/service/business/CustomAnalysisItemSchemaService.java

@@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -53,11 +54,17 @@ public class CustomAnalysisItemSchemaService extends ServiceImpl<CustomAnalysisI
         x.setPtype(d1.getPtype());
         x.setNum(d1.getNum());
         x.setType(d1.getType());
+        x.setGroupBy(d1.getGroupBy());
+        x.setFieldKind(d1.getFieldKind());
+        x.setName(d1.getName());
         y.setField(d2.getField());
         y.setExpand(d2.getExpand());
         y.setPtype(d2.getPtype());
         y.setNum(d2.getNum());
         y.setType(d2.getType());
+        y.setName(d2.getName());
+        y.setGroupBy(d2.getGroupBy());
+        y.setFieldKind(d2.getFieldKind());
         dto.setX(x);
         dto.setY(y);
         return dto;
@@ -82,8 +89,13 @@ public class CustomAnalysisItemSchemaService extends ServiceImpl<CustomAnalysisI
         d1.setPtype(dto.getX().getPtype());
         d1.setType(dto.getX().getType());
         d1.setNum(dto.getX().getNum());
+        d1.setName(dto.getX().getName());
+        d1.setGroupBy(dto.getX().getGroupBy());
+        d1.setFieldKind(dto.getX().getFieldKind());
         d1.setCreateId(personnelVO.getId());
         d1.setCreateName(personnelVO.getName());
+        d1.setCreateTime(new Date());
+        d1.setUpdateTime(new Date());
         d2.setUid(uid);
         d2.setDimension("y");
         d2.setField(dto.getY().getField());
@@ -91,8 +103,13 @@ public class CustomAnalysisItemSchemaService extends ServiceImpl<CustomAnalysisI
         d2.setPtype(dto.getY().getPtype());
         d2.setType(dto.getY().getType());
         d2.setNum(dto.getY().getNum());
+        d2.setName(dto.getY().getName());
+        d2.setGroupBy(dto.getY().getGroupBy());
+        d2.setFieldKind(dto.getY().getFieldKind());
         d2.setCreateId(personnelVO.getId());
         d2.setCreateName(personnelVO.getName());
+        d2.setCreateTime(new Date());
+        d2.setUpdateTime(new Date());
         customAnalysisItemSchema.add(d1);
         customAnalysisItemSchema.add(d2);
         this.saveBatch(customAnalysisItemSchema);
@@ -111,6 +128,9 @@ public class CustomAnalysisItemSchemaService extends ServiceImpl<CustomAnalysisI
                         item.setPtype(dto.getX().getPtype());
                         item.setNum(dto.getX().getNum());
                         item.setType(dto.getX().getType());
+                        item.setName(dto.getX().getName());
+                        item.setGroupBy(dto.getX().getGroupBy());
+                        item.setFieldKind(dto.getX().getFieldKind());
                         break;
                     case "y":
                         item.setField(dto.getY().getField());
@@ -118,6 +138,9 @@ public class CustomAnalysisItemSchemaService extends ServiceImpl<CustomAnalysisI
                         item.setPtype(dto.getY().getPtype());
                         item.setNum(dto.getY().getNum());
                         item.setType(dto.getY().getType());
+                        item.setName(dto.getY().getName());
+                        item.setGroupBy(dto.getY().getGroupBy());
+                        item.setFieldKind(dto.getY().getFieldKind());
                         break;
                 }
             });

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

@@ -67,6 +67,8 @@ public class CustomAnalysisItemSettingService extends ServiceImpl<CustomAnalysis
         }
         CustomAnalysisItemSetting customAnalysisItemSetting = new CustomAnalysisItemSetting();
         BeanUtils.copyProperties(setting, customAnalysisItemSetting);
+        customAnalysisItemSetting.setShow1(setting.getShow());
+        customAnalysisItemSetting.setInterval1(setting.getInterval());
         customAnalysisItemSetting.setUid(uid);
         customAnalysisItemSetting.setCreateId(personnelVO.getId());
         customAnalysisItemSetting.setCreateName(personnelVO.getName());

+ 34 - 15
src/main/java/cn/cslg/pas/service/business/CustomAnalysisItemSourceService.java

@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -50,12 +51,12 @@ public class CustomAnalysisItemSourceService extends ServiceImpl<CustomAnalysisI
         return sourceDataDTO;
     }
 
-    public List<CustomAnalysisItemSource> getItemSourceList(String uid, String dimension, Integer fieldId, Integer expandId) {
+    public List<CustomAnalysisItemSource> getItemSourceList(String uid, String dimension, String field, String expand) {
         LambdaQueryWrapper<CustomAnalysisItemSource> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(CustomAnalysisItemSource::getUid, uid);
         queryWrapper.eq(CustomAnalysisItemSource::getDimension, dimension);
-        queryWrapper.eq(CustomAnalysisItemSource::getFieldId, fieldId);
-        queryWrapper.eq(CustomAnalysisItemSource::getExpandId, expandId);
+        queryWrapper.eq(CustomAnalysisItemSource::getField, field);
+        queryWrapper.eq(CustomAnalysisItemSource::getExpand, expand);
         return this.list(queryWrapper);
     }
 
@@ -63,14 +64,17 @@ public class CustomAnalysisItemSourceService extends ServiceImpl<CustomAnalysisI
         list.forEach(item -> {
             item.setUid(null);
             item.setDimension(null);
-            item.setFieldId(null);
-            item.setExpandId(null);
+            item.setField(null);
+            item.setExpand(null);
             item.setCreateTime(null);
             item.setUpdateTime(null);
             item.setStatus(null);
             item.setId(null);
             item.setCreateId(null);
             item.setCreateName(null);
+            item.setName(null);
+            item.setNumber(null);
+            item.setTopN(null);
             if (StringUtils.isNotEmpty(item.getMaxData())) {
                 item.setMax(JsonUtils.jsonToPojo(item.getMaxData(), SourceMinAndMaxDataDTO.class));
                 item.setMaxData(null);
@@ -88,22 +92,34 @@ public class CustomAnalysisItemSourceService extends ServiceImpl<CustomAnalysisI
         SourceDataVO x = new SourceDataVO();
         SourceDataVO y = new SourceDataVO();
         SourceDataDTO sourceDataDTO = vo.getSource();
-        if (vo.getSchema().getX().getPtype().equals(3) || vo.getSchema().getX().getPtype().equals(4)
-                || vo.getSchema().getX().getType().equals(6)) {
+        Integer xPType = vo.getSchema().getX().getPtype();
+        String xType = vo.getSchema().getX().getType();
+        if ((xPType != null && (xPType.equals(3) || xPType.equals(4))) || (StringUtils.isNotEmpty(xType) && xType.equalsIgnoreCase("tree"))) {
             x.setUid(vo.getUid());
             x.setDimension("x");
-            x.setFieldId(vo.getSchema().getX().getField());
-            x.setExpandId(vo.getSchema().getX().getExpand());
+            x.setField(vo.getSchema().getX().getField());
+            x.setExpand(vo.getSchema().getX().getExpand());
+            x.setName(vo.getSchema().getX().getName());
+            x.setNumber(vo.getSchema().getX().getNum());
             x.setSource(sourceDataDTO.getX());
+            if (!CollectionUtils.isEmpty(sourceDataDTO.getX())) {
+                x.setSelected(true);
+            }
             this.updateSource(x);
         }
-        if (vo.getSchema().getY().getPtype().equals(3) || vo.getSchema().getY().getPtype().equals(4)
-                || vo.getSchema().getY().getType().equals(6)) {
+        Integer yPType = vo.getSchema().getY().getPtype();
+        String yType = vo.getSchema().getY().getType();
+        if ((yPType != null && (yPType.equals(3) || yPType.equals(4))) || (StringUtils.isNotEmpty(yType) && xType.equalsIgnoreCase("tree"))) {
             y.setUid(vo.getUid());
             y.setDimension("y");
-            y.setFieldId(vo.getSchema().getY().getField());
-            y.setExpandId(vo.getSchema().getY().getExpand());
+            y.setField(vo.getSchema().getY().getField());
+            y.setExpand(vo.getSchema().getY().getExpand());
+            y.setName(vo.getSchema().getY().getName());
+            y.setNumber(vo.getSchema().getY().getNum());
             y.setSource(sourceDataDTO.getY());
+            if (!CollectionUtils.isEmpty(sourceDataDTO.getY())) {
+                y.setSelected(true);
+            }
             this.updateSource(y);
         }
     }
@@ -128,12 +144,15 @@ public class CustomAnalysisItemSourceService extends ServiceImpl<CustomAnalysisI
             if (StringUtils.isNotNull(source.getMin())) {
                 source.setMinData(JsonUtils.objectToJson(source.getMin()));
             }
-            source.setFieldId(sourceDataVO.getFieldId());
-            source.setExpandId(sourceDataVO.getExpandId());
+            source.setField(sourceDataVO.getField());
+            source.setExpand(sourceDataVO.getExpand());
             source.setCreateId(finalPersonnelVO.getId());
             source.setCreateName(finalPersonnelVO.getName());
             source.setDimension(sourceDataVO.getDimension());
             source.setUid(sourceDataVO.getUid());
+            source.setName(sourceDataVO.getName());
+            source.setNumber(sourceDataVO.getNumber());
+            source.setSelected(sourceDataVO.getSelected());
             list.add(source);
         });
         this.saveOrUpdateBatch(list);

+ 198 - 6
src/main/java/cn/cslg/pas/service/business/CustomFieldService.java

@@ -20,14 +20,17 @@ import cn.cslg.pas.common.vo.business.CustomFieldVO;
 import cn.cslg.pas.common.vo.business.ProductVO;
 import cn.cslg.pas.common.vo.es.QueryESCustomFieldVO;
 import cn.cslg.pas.domain.business.*;
+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.CustomFieldMapper;
 import cn.cslg.pas.service.AssoTaskFieldService;
 import cn.cslg.pas.service.business.es.EsCustomFieldService;
+import cn.cslg.pas.service.business.es.EsService;
 import cn.cslg.pas.service.permissions.PermissionService;
 import cn.cslg.pas.service.query.FormatQueryService;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -39,10 +42,7 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -84,6 +84,8 @@ public class CustomFieldService extends ServiceImpl<CustomFieldMapper, CustomFie
     private TreeNodeService treeNodeService;
     @Autowired
     private AssoTaskFieldService assoTaskFieldService;
+    @Autowired
+    private EsService esService;
 
     @Override
     public Object queryMessage(QueryRequest queryRequest) throws Exception {
@@ -583,7 +585,7 @@ public class CustomFieldService extends ServiceImpl<CustomFieldMapper, CustomFie
                     case 6:
                         //TODO 根据名称和类型查询
                         fieldId = this.GetIdByName(name, projectId, type);
-                       value =treeNodeService.getIdByNames(value,fieldId,type);
+                        value = treeNodeService.getIdByNames(value, fieldId, type);
                         ;
                 }
 
@@ -628,8 +630,198 @@ public class CustomFieldService extends ServiceImpl<CustomFieldMapper, CustomFie
         return customField1.getId();
     }
 
-    public void copyCustomField(){
+    public void copyCustomField(Integer oldProject, Integer newProject) {
+        LambdaQueryWrapper<CustomField> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(CustomField::getProjectId, oldProject);
+        List<CustomField> fields = this.list(queryWrapper);
+        if (fields.size() != 0) {
+            for (CustomField customField : fields) {
+                CustomField newCustomField = new CustomField();
+                BeanUtils.copyProperties(fields, newCustomField);
+                newCustomField.setId(null);
+                newCustomField.setProjectId(newProject);
+                newCustomField.insert();
+                this.copyCustomFieldValues(customField, newCustomField);
+            }
+            this.saveBatch(fields);
+        }
+
+
+    }
+
+
+    public void copyCustomFieldValues(CustomField customField, CustomField newCustomField) {
+
+        Integer type = customField.getType();
+        switch (type) {
+            case 0:
+                ;
+            case 1:
+                ;
+            case 2:
+                ;
+            case 3:
+                this.copyTextValues(customField, newCustomField);
+                break;
+            case 4:
+
+
+            case 5:
+                this.copyOptionValues(customField, newCustomField);
+                break;
+            case 6:
+                this.copyTreeValues(customField, newCustomField);
+                break;
+
+        }
+
+
+    }
+
+    public void copyTextValues(CustomField customField, CustomField newCustomField) {
+
+        List<PatentWithIdVO> patents = esCustomFieldService.getEsCustomFields(customField.getId().toString(), customField.getType(), customField.getProjectId());
+        for (PatentWithIdVO patentWithIdVO : patents) {
+            Patent patent = patentWithIdVO.getPatent();
+            patent.getESCustomField().setField(newCustomField.getId().toString());
+            patent.getESCustomField().setCreateTime(new Date());
+            patent.getESCustomField().setTaskId(null);
+            patent.getESCustomField().setProjectId(newCustomField.getProjectId());
+            String parentId = patent.getPatentJoin().getParent();
+            try {
+                esService.addChildPatent(patent, parentId);
+            } catch (Exception e) {
+                throw new XiaoShiException("保存出错");
+            }
+
+        }
+
+
+    }
+
+    public void copyOptionValues(CustomField customField, CustomField newCustomField) {
+        Integer newId = newCustomField.getId();
+        //查询自定义栏位的选项值
+        Map<String, String> map = new HashMap<>();
+        LambdaQueryWrapper<CustomOption> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(CustomOption::getCustomFieldId, customField.getId());
+        List<CustomOption> customOptions = customOptionService.list(queryWrapper);
+        for (CustomOption customOption : customOptions) {
+            CustomOption customOption1 = new CustomOption();
+            BeanUtils.copyProperties(customOption, customOption1);
+            customOption1.setCustomFieldId(newId);
+            customOption1.insert();
+            map.put(customOption.getId().toString(), customOption1.getId().toString());
 
+        }
+        List<PatentWithIdVO> patents = esCustomFieldService.getEsCustomFields(customField.getId().toString(), customField.getType(), customField.getProjectId());
+        for (PatentWithIdVO patentWithIdVO : patents) {
+            Patent patent = patentWithIdVO.getPatent();
+            patent.getESCustomField().setField(customField.getId().toString());
+            patent.getESCustomField().setCreateTime(new Date());
+            patent.getESCustomField().setTaskId(null);
+            List<String> fieldValues = patent.getESCustomField().getFieldValue();
+            fieldValues.forEach(item -> item = map.get(item));
+            patent.getESCustomField().setFieldValue(fieldValues);
+            patent.getESCustomField().setStatsValue(fieldValues);
+            String parentId = patent.getPatentJoin().getParent();
+            try {
+                esService.addChildPatent(patent, parentId);
+            } catch (Exception e) {
+                throw new XiaoShiException("保存出错");
+            }
+
+        }
 
     }
+
+
+    public void copyTreeValues(CustomField customField, CustomField newCustomField) {
+        Integer newId = newCustomField.getId();
+        Map<String, String> map = new HashMap<>();
+        //查询自定义栏位的选项值
+        LambdaQueryWrapper<TreeNode> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(TreeNode::getTypeId, customField.getId())
+                .eq(TreeNode::getType, customField.getType())
+                .orderByAsc(TreeNode::getLevel);
+        List<TreeNode> treeNodes = treeNodeService.list(queryWrapper);
+        for (TreeNode treeNode : treeNodes) {
+            TreeNode treeNode1 = new TreeNode();
+            BeanUtils.copyProperties(treeNode, treeNode1);
+            treeNode1.setTypeId(newCustomField.getId());
+            treeNode1.setId(null);
+            String path = treeNode.getPath();
+            if (path != null && !path.trim().equals("")) {
+                List<String> paths = Arrays.asList(path.split("/"));
+                paths.forEach(item -> item = map.get(item));
+                path = StringUtils.join(paths, "/");
+                treeNode1.setPath(path);
+            }
+            treeNode1.insert();
+            map.put(treeNode.getId().toString(), treeNode1.getId().toString());
+
+        }
+        List<PatentWithIdVO> patents = esCustomFieldService.getEsCustomFields(customField.getId().toString(), customField.getType(), customField.getProjectId());
+        for (PatentWithIdVO patentWithIdVO : patents) {
+            Patent patent = patentWithIdVO.getPatent();
+            patent.getESCustomField().setField(customField.getId().toString());
+            patent.getESCustomField().setCreateTime(new Date());
+            patent.getESCustomField().setTaskId(null);
+            List<String> fieldValues = patent.getESCustomField().getFieldValue();
+            List<String> statusValues = patent.getESCustomField().getStatsValue();
+            fieldValues.forEach(item -> item = map.get(item));
+            statusValues.forEach(item -> item = map.get(item));
+            patent.getESCustomField().setFieldValue(fieldValues);
+            patent.getESCustomField().setStatsValue(statusValues);
+            String parentId = patent.getPatentJoin().getParent();
+            //TODO添加path
+            try {
+                esService.addChildPatent(patent, parentId);
+            } catch (Exception e) {
+                throw new XiaoShiException("保存出错");
+            }
+
+        }
+
+    }
+
+
+//    public void copyProductValues(CustomField customField,CustomField newCustomField) {
+//        Integer newId =newCustomField.getId();
+//        //查询自定义栏位的选项值
+//        List<Map<String,String>> maps =new ArrayList<>();
+//        LambdaQueryWrapper<TreeNode> queryWrapper =new LambdaQueryWrapper<>();
+//        queryWrapper.eq(TreeNode::getTypeId,customField.getId())
+//                .eq(TreeNode::getType,customField.getType())
+//                .orderByAsc(TreeNode::getLevel);
+//        List<TreeNode> treeNodes = treeNodeService.list(queryWrapper);
+//        for (TreeNode treeNode:treeNodes){
+//            TreeNode treeNode1 =new TreeNode();
+//            BeanUtils.copyProperties(treeNode,treeNode1);
+//            treeNode1.setTypeId(newCustomField.getId());
+//            treeNode1.setId(null);
+//            //TODO添加path
+//            Map<String,String> map =new HashMap<>();
+//            map.put(treeNode.getId().toString(),treeNode1.getId().toString());
+//
+//        }
+//        List<PatentWithIdVO> patents = esCustomFieldService.getEsCustomFields(customField.getId().toString(), customField.getType(), customField.getProjectId());
+//        for (PatentWithIdVO patentWithIdVO : patents) {
+//            Patent patent =patentWithIdVO.getPatent();
+//            patent.getESCustomField().setField(customField.getId().toString());
+//            patent.getESCustomField().setCreateTime(new Date());
+//            patent.getESCustomField().setTaskId(null);
+//            String parentId =patent.getPatentJoin().getParent();
+//            //TODO添加path
+//            try {
+//                esService.addChildPatent(patent,parentId);
+//            }
+//            catch (Exception e){
+//                throw new XiaoShiException("保存出错");
+//            }
+//
+//        }
+//
+//    }
+
 }

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

@@ -77,7 +77,8 @@ public class EventService extends ServiceImpl<EventMapper, Event> implements Bus
     public Object queryMessage(QueryRequest queryRequest) throws Exception {
 
        List<String> sqls = formatQueryService.reSqls(queryRequest,"event");
-        //根据sql查询事件信息
+        sqls=this.loadSearchSql(sqls);
+       //根据sql查询事件信息
         List<EventVO> eventVOS = eventMapper.getEvent(sqls.get(0),sqls.get(1),sqls.get(2));
 
         //查询总数
@@ -256,6 +257,7 @@ public class EventService extends ServiceImpl<EventMapper, Event> implements Bus
         StringRequest stringRequest =new StringRequest();
         BeanUtils.copyProperties(groupRequest,stringRequest);
         List<String> sqls = formatQueryService.reSqls(stringRequest,tableName);
+        sqls =this.loadSearchSql(sqls);
         //格式化 分组
         GroupConfig groupConfig=null;
         if (groupRequest.getGroupBy() != null) {
@@ -446,4 +448,23 @@ public List<Integer> getEventIdByName(String value,Boolean ifEqual){
 
 }
 
+
+    //装载查询语句
+    private List<String> loadSearchSql(List<String> sqls){
+        PersonnelVO personnelVO =cacheUtils.getLoginUser(loginUtils.getId());
+        Integer tenant_id =personnelVO.getTenantId();
+        String rootSql ="(tenant_id ="+tenant_id+")";
+        if(sqls.get(0)!=null&&!sqls.get(0).equals(""))
+        {
+            sqls.set(0,rootSql+" and"+"("+sqls.get(0)+")");
+
+        }
+        else {
+            sqls.set(0,rootSql);
+        }
+
+        return sqls;
+
+    }
+
 }

+ 184 - 0
src/main/java/cn/cslg/pas/service/business/HightlightTemplateService.java

@@ -0,0 +1,184 @@
+package cn.cslg.pas.service.business;
+
+import cn.cslg.pas.common.dto.HightlightTemplateDTO;
+import cn.cslg.pas.common.model.cronModel.Personnel;
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
+import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.JsonUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.common.utils.StringUtils;
+import cn.cslg.pas.common.vo.HightlightTemplateVO;
+import cn.cslg.pas.common.vo.business.ProjectTaskVO;
+import cn.cslg.pas.domain.business.HightlightTemplate;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.mapper.HightlightTemplateMapper;
+import cn.cslg.pas.service.permissions.PermissionService;
+import cn.cslg.pas.service.query.Query;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/12
+ */
+@Slf4j
+@Service
+public class HightlightTemplateService extends ServiceImpl<HightlightTemplateMapper, HightlightTemplate> {
+    @Autowired
+    private LoginUtils loginUtils;
+
+    @Autowired
+    private CacheUtils cacheUtils;
+
+    @Autowired
+    private PermissionService permissionService;
+
+    /**
+     * 添加or更新
+     * @param hightlightTemplateDTO
+     * @return
+     */
+    public HightlightTemplate saveOrUpdate(HightlightTemplateDTO hightlightTemplateDTO){
+        if (hightlightTemplateDTO == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        PersonnelVO personnelVO = new PersonnelVO();
+        try {
+            personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        } catch (Exception e) {
+            throw new XiaoShiException("未查询到当前登陆人");
+        }
+        Integer id = hightlightTemplateDTO.getId();
+        HightlightTemplate hightlightTemplate = new HightlightTemplate();
+        if (id != null) {
+            //update
+            hightlightTemplate = this.getById(id);
+            BeanUtils.copyProperties(hightlightTemplateDTO, hightlightTemplate);
+            hightlightTemplate.setConfig(JsonUtils.objectToJson(hightlightTemplateDTO.getConfigs()));
+            hightlightTemplate.updateById();
+        } else {
+            String name = hightlightTemplateDTO.getName();
+            if (name == null || StringUtils.isEmpty(name)) {
+                name = "新模板";
+                hightlightTemplateDTO.setName(name);
+            }
+            BeanUtils.copyProperties(hightlightTemplateDTO, hightlightTemplate);
+            this.setConfigs(hightlightTemplate);
+            if (hightlightTemplate.getCreateId() == null) {
+                hightlightTemplate.setCreateId(personnelVO.getId());
+            }
+            hightlightTemplate.insert();
+        }
+        return hightlightTemplate;
+    }
+
+    /**
+     * 查询
+     * @param projectId
+     * @return
+     * @throws IOException
+     */
+    public List<HightlightTemplateVO> getHightlight(Integer projectId) throws IOException {
+        if (projectId == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        PersonnelVO personnelVO = new PersonnelVO();
+        try {
+            personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        } catch (Exception e) {
+            throw new XiaoShiException("未查询到当前登陆人");
+        }
+
+        List<HightlightTemplateVO> hightlightTemplateVOS = new ArrayList<>();
+        LambdaQueryWrapper<HightlightTemplate> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(HightlightTemplate::getProjectId, projectId)
+                .eq(HightlightTemplate::getCreateId, personnelVO.getId());
+        List<HightlightTemplate> hightlightTemplates = this.list(queryWrapper);
+
+        if (!hightlightTemplates.isEmpty()) {
+            hightlightTemplates.forEach(item -> {
+                HightlightTemplateVO hightlightTemplateVO = new HightlightTemplateVO();
+                BeanUtils.copyProperties(item, hightlightTemplateVO);
+                hightlightTemplateVOS.add(hightlightTemplateVO);
+            });
+        } else {
+            HightlightTemplateVO hightlightTemplateVO = new HightlightTemplateVO();
+            HightlightTemplateDTO hightlightDTO = new HightlightTemplateDTO();
+            hightlightDTO.setName("默认模板");
+            hightlightDTO.setIfEnable(true);
+            hightlightDTO.setProjectId(projectId);
+            hightlightDTO.setCreateId(personnelVO.getId());
+            hightlightDTO.setIfEnable(true);
+            hightlightDTO.setIfDefault(true);
+            Integer id = this.saveOrUpdate(hightlightDTO).getId();
+            HightlightTemplate hightlightTemplate = this.getById(id);
+            BeanUtils.copyProperties(hightlightTemplate, hightlightTemplateVO);
+            hightlightTemplateVOS.add(hightlightTemplateVO);
+        }
+        this.loadHightlightVOS(hightlightTemplateVOS);
+        return hightlightTemplateVOS;
+    }
+
+    public void loadHightlightVOS(List<HightlightTemplateVO> hightlightTemplateVOS) throws IOException {
+        List<String> createIds = new ArrayList<>();
+        hightlightTemplateVOS.forEach(item -> {
+            if (item.getCreateId() != null) {
+                createIds.add(item.getCreateId());
+            }
+        });
+        List<Personnel> personnels = new ArrayList<>();
+        //查询发起人名称
+        if (createIds.size() != 0) {
+            String res = permissionService.getPersonnelByIdsFromPCS(createIds);
+            JSONObject jsonObject = JSONObject.parseObject(res);
+            personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
+        }
+        //装载信息
+        for (HightlightTemplateVO hightlightTemplateVO : hightlightTemplateVOS) {
+            //装载人员信息
+            Personnel personnel = personnels.stream().filter(item -> item.getId().equals(hightlightTemplateVO.getCreateId())).findFirst().orElse(null);
+            if (personnel != null) {
+                hightlightTemplateVO.setCreateName(personnel.getPersonnelName());
+            }
+            hightlightTemplateVO.setConfigs(JsonUtils.jsonToList(hightlightTemplateVO.getConfig(), HightlightTemplate.Config.class));
+            hightlightTemplateVO.setConfig(null);
+        }
+    }
+
+    public List<Integer> deleteHightlight(List<Integer> ids) {
+        if (!ids.isEmpty()) {
+            this.removeBatchByIds(ids);
+        }
+        return ids;
+    }
+
+
+    public void setConfigs(HightlightTemplate hightlightTemplate) {
+        List<HightlightTemplate.Config> configs = new ArrayList<>();
+        List<String> colors = new ArrayList<String>() {{
+            add("#5470c6");
+            add("#91cc75");
+            add("#fac858");
+            add("#ee6666");
+            add("#73c0de");
+        }};
+        for (String color : colors) {
+            HightlightTemplate.Config config = new HightlightTemplate.Config();
+            config.setKeywords("");
+            config.setColor(color);
+            configs.add(config);
+        }
+        hightlightTemplate.setConfig(JsonUtils.objectToJson(configs));
+        hightlightTemplate.setConfigs(configs);
+    }
+}

+ 31 - 14
src/main/java/cn/cslg/pas/service/business/ImportTaskService.java

@@ -76,6 +76,8 @@ public class ImportTaskService extends ServiceImpl<ImportTaskMapper, ImportTask>
     private ProductService productService;
     @Autowired
     private ProjectService projectService;
+    @Autowired
+    private ImportTaskConditionService importTaskConditionService;
 
     @Override
     public Object queryMessage(QueryRequest queryRequest) throws Exception {
@@ -386,43 +388,35 @@ public class ImportTaskService extends ServiceImpl<ImportTaskMapper, ImportTask>
 
     }
 
-    public Integer addExportExcel(ExportTaskDTO exportTaskDTO){
+    public Integer addExportTask(ExportTaskDTO exportTaskDTO){
         if (exportTaskDTO == null) {
             throw new XiaoShiException("入参不能为空");
         }
-//        PersonnelVO personnelVO = new PersonnelVO();
-//        try {
-//            personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
-//        } catch (Exception e) {
-//            throw new UnLoginException("未登录");
-//        }
         ImportTaskCondition importTaskCondition = new ImportTaskCondition();
-        importTaskCondition.setFileGuid(exportTaskDTO.getFileGuid());
         if (exportTaskDTO.getProjectId() != null) {
             importTaskCondition.setProjectId(exportTaskDTO.getProjectId());
         }
         importTaskCondition.setIfUpdate(false);
         importTaskCondition.setType(exportTaskDTO.getType());
-//        importTaskCondition.setCreateId(personnelVO.getId());
-        importTaskCondition.setCreateId("328");
+        importTaskCondition.setCreateId(exportTaskDTO.getCreateId());
         importTaskCondition.insert();
+
         Integer importTaskConditionId = importTaskCondition.getId();
         if (importTaskConditionId != null) {
             ImportTask importTask = new ImportTask();
             importTask.setImportTaskConditionId(importTaskConditionId);
             importTask.setType(exportTaskDTO.getType());
             importTask.setAllNum(exportTaskDTO.getAllNum());
-            importTask.setDefaultNum(exportTaskDTO.getDefaultNum());
             importTask.setFinishTime(exportTaskDTO.getFinishTime());
-            importTask.setCreateId("328");
+            importTask.setState(0);
+            importTask.setCreateId(exportTaskDTO.getCreateId());
             String name = "";
             if (exportTaskDTO.getType().equals(6)) {
                 name = "【专利】";
             } else if (exportTaskDTO.getType().equals(7)){
                 name = "【PDF首页】";
             }
-//            String importTaskName = "导出" + name + "-" + personnelVO.getName();
-            String importTaskName = "导出" + name + "-" + "朱豪";
+            String importTaskName = "导出" + name + "-" + exportTaskDTO.getCreateName();
             importTask.setName(importTaskName);
             importTask.insert();
             return importTask.getId();
@@ -430,4 +424,27 @@ public class ImportTaskService extends ServiceImpl<ImportTaskMapper, ImportTask>
             throw new XiaoShiException("导出任务记录失败");
         }
     }
+
+
+    public Integer updateExportTask(ExportTaskDTO exportTaskDTO){
+        if (exportTaskDTO == null) {
+            throw new XiaoShiException("入参不能为空");
+        }
+        ImportTask importTask = this.getById(exportTaskDTO.getTaskId());
+        if (importTask != null) {
+            Integer importTaskConditionId = importTask.getImportTaskConditionId();
+
+            ImportTaskCondition importTaskCondition = importTaskConditionService.getById(importTaskConditionId);
+            importTaskCondition.setFileGuid(exportTaskDTO.getFileGuid());
+            importTaskCondition.updateById();
+
+            importTask.setState(exportTaskDTO.getState());
+            importTask.setAllNum(exportTaskDTO.getAllNum());
+            importTask.setDoneNum(exportTaskDTO.getDoneNum());
+            importTask.setDefaultNum(exportTaskDTO.getDefaultNum());
+            importTask.setFinishTime(exportTaskDTO.getFinishTime());
+            importTask.updateById();
+        }
+        return importTask.getId();
+    }
 }

+ 43 - 20
src/main/java/cn/cslg/pas/service/business/InvalidStatutesService.java

@@ -3,7 +3,10 @@ package cn.cslg.pas.service.business;
 import cn.cslg.pas.common.dto.DomainFieldDTO;
 import cn.cslg.pas.common.dto.business.InvalidStatutesDTO;
 import cn.cslg.pas.common.dto.invalidDTO.UpdateMessageDTO;
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
+import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.GenerateObjectUtil;
+import cn.cslg.pas.common.utils.LoginUtils;
 import cn.cslg.pas.common.vo.invalidVO.InvalidStatutesVO;
 import cn.cslg.pas.domain.business.*;
 import cn.cslg.pas.exception.XiaoShiException;
@@ -25,6 +28,7 @@ import java.util.stream.Collectors;
 
 /**
  * 无效发条Service
+ *
  * @Author xiexiang
  * @Date 2023/12/22
  */
@@ -41,12 +45,19 @@ public class InvalidStatutesService extends ServiceImpl<InvalidStatutesMapper, I
     @Lazy
     private ProofGroupService proofGroupService;
 
+    @Autowired
+    private CacheUtils cacheUtils;
+    @Autowired
+    private LoginUtils loginUtils;
+
     /**
      * 添加无效法条
+     *
      * @param invalidStatutesDTO
      * @return
      */
     public List<Integer> addInvalidStatutes(InvalidStatutesDTO invalidStatutesDTO) {
+        Integer projectId =invalidStatutesDTO.getProjectId();
         List<Integer> ids = new ArrayList<>();
         if (invalidStatutesDTO != null) {
             if (invalidStatutesDTO.getProjectId() != null) {
@@ -71,11 +82,21 @@ public class InvalidStatutesService extends ServiceImpl<InvalidStatutesMapper, I
                     //涉及内容为说明书或者附图
                     InvalidStatutes invalidStatutes = new InvalidStatutes();
                     BeanUtils.copyProperties(invalidStatutesDTO, invalidStatutes);
+                    if (invalidStatutesDTO.getRelatedContent().equals(2)) {
+                        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+                        PatentClaim patentClaim = new PatentClaim();
+                        patentClaim.setCreateId(personnelVO.getId());
+                        patentClaim.setContentType(1);
+                        patentClaim.setProjectId(projectId);
+                        patentClaim.insert();
+                        invalidStatutes.setClaimId(patentClaim.getId());
+                    }
+
                     invalidStatutes.insert();
                     Integer id = invalidStatutes.getId();
                     ids.add(id);
-                }
-                else {
+
+                } else {
                     throw new XiaoShiException("涉及内容不能为空");
                 }
                 return ids;
@@ -88,10 +109,11 @@ public class InvalidStatutesService extends ServiceImpl<InvalidStatutesMapper, I
 
     /**
      * 查询无效法条
+     *
      * @param projectId
      * @return
      */
-    public List<InvalidStatutesVO> queryInvalidStatutes(Integer projectId){
+    public List<InvalidStatutesVO> queryInvalidStatutes(Integer projectId) {
         List<InvalidStatutesVO> invalidStatutesVOS = new ArrayList<>();
         if (projectId != null) {
             //根据报告id查询所有无效法条
@@ -116,9 +138,10 @@ public class InvalidStatutesService extends ServiceImpl<InvalidStatutesMapper, I
 
     /**
      * 装载法条
+     *
      * @param invalidStatutesVOS
      */
-    public void loadStatutes(List<InvalidStatutesVO> invalidStatutesVOS){
+    public void loadStatutes(List<InvalidStatutesVO> invalidStatutesVOS) {
         List<Integer> invalidStatutesIds = invalidStatutesVOS.stream().map(InvalidStatutesVO::getStatutesId).collect(Collectors.toList());
         if (!invalidStatutesIds.isEmpty()) {
             LambdaQueryWrapper<SystemDict> queryWrapper = new LambdaQueryWrapper<>();
@@ -147,9 +170,10 @@ public class InvalidStatutesService extends ServiceImpl<InvalidStatutesMapper, I
 
     /**
      * 装载权要
+     *
      * @param invalidStatutesVOS
      */
-    public void loadClaims(Integer projectId, List<InvalidStatutesVO> invalidStatutesVOS){
+    public void loadClaims(Integer projectId, List<InvalidStatutesVO> invalidStatutesVOS) {
         List<Integer> claimIds = invalidStatutesVOS.stream().filter(item -> item.getClaimId() != null).map(InvalidStatutesVO::getClaimId).collect(Collectors.toList());
         if (!claimIds.isEmpty()) {
             LambdaQueryWrapper<PatentClaim> queryWrapper = new LambdaQueryWrapper<>();
@@ -164,6 +188,7 @@ public class InvalidStatutesService extends ServiceImpl<InvalidStatutesMapper, I
                             .findFirst()
                             .orElse(null);
                     if (patentClaim != null) {
+                        invalidStatutesVO.setClaimId(patentClaim.getId());
                         invalidStatutesVO.setClaimSort(patentClaim.getSysOrder());
                         invalidStatutesVO.setClaimText(patentClaim.getContent());
                         invalidStatutesVO.setRbDecision(patentClaim.getRbDecision());
@@ -180,7 +205,6 @@ public class InvalidStatutesService extends ServiceImpl<InvalidStatutesMapper, I
     }
 
 
-
     /**
      * 更新信息
      *
@@ -214,27 +238,26 @@ public class InvalidStatutesService extends ServiceImpl<InvalidStatutesMapper, I
     }
 
     /**
-     *
      * @param id
      * @return
      */
     @Transactional(rollbackFor = Exception.class)
-    public Integer removeInvalidStatutes(Integer id){
-        if(id==null){
+    public Integer removeInvalidStatutes(Integer id) {
+        if (id == null) {
             throw new XiaoShiException("请输入无效法条");
         }
-        InvalidStatutes invalidStatutes =this.getById(id);
-        if(invalidStatutes==null){
+        InvalidStatutes invalidStatutes = this.getById(id);
+        if (invalidStatutes == null) {
             throw new XiaoShiException("无效法条不存在");
         }
-    //根据无效法条id 查询是否有证据组合
-        LambdaQueryWrapper<ProofGroup> queryWrapper =new LambdaQueryWrapper<>();
-        queryWrapper.eq(ProofGroup::getInvalidStatutesId,id);
-        List<ProofGroup> proofGroups =proofGroupService.list(queryWrapper);
-          if(proofGroups.size()>0){
-              throw new XiaoShiException("请先删除该法条的证据组合");
-          }
-          this.removeById(id);
-          return id;
+        //根据无效法条id 查询是否有证据组合
+        LambdaQueryWrapper<ProofGroup> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ProofGroup::getInvalidStatutesId, id);
+        List<ProofGroup> proofGroups = proofGroupService.list(queryWrapper);
+        if (proofGroups.size() > 0) {
+            throw new XiaoShiException("请先删除该法条的证据组合");
+        }
+        this.removeById(id);
+        return id;
     }
 }

+ 127 - 0
src/main/java/cn/cslg/pas/service/business/LitigationHistoryService.java

@@ -0,0 +1,127 @@
+package cn.cslg.pas.service.business;
+
+import cn.cslg.pas.common.dto.business.LitigationHistoryDTO;
+import cn.cslg.pas.common.dto.business.ReviewHistoryDTO;
+import cn.cslg.pas.common.model.cronModel.Personnel;
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
+import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.common.utils.StringUtils;
+import cn.cslg.pas.common.vo.business.LitigationHistoryVO;
+import cn.cslg.pas.common.vo.business.ReviewHistoryVO;
+import cn.cslg.pas.domain.business.LitigationHistory;
+import cn.cslg.pas.domain.business.ReviewHistory;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.mapper.LitigationHistoryMapper;
+import cn.cslg.pas.service.permissions.PermissionService;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/15
+ */
+@Slf4j
+@Service
+public class LitigationHistoryService extends ServiceImpl<LitigationHistoryMapper, LitigationHistory> {
+    @Autowired
+    private LoginUtils loginUtils;
+
+    @Autowired
+    private CacheUtils cacheUtils;
+
+    @Autowired
+    private PermissionService permissionService;
+
+    /**
+     * 新增or更新
+     * @param litigationHistoryDTO
+     * @return
+     */
+    public Integer saveOrUpdate(LitigationHistoryDTO litigationHistoryDTO){
+        if (litigationHistoryDTO == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        Integer id = litigationHistoryDTO.getId();
+        LitigationHistory litigationHistory = new LitigationHistory();
+        if (id != null) {
+            //update
+            litigationHistory = this.getById(id);
+            BeanUtils.copyProperties(litigationHistoryDTO, litigationHistory);
+            litigationHistory.updateById();
+        } else {
+            BeanUtils.copyProperties(litigationHistoryDTO, litigationHistory);
+            PersonnelVO personnelVO = new PersonnelVO();
+            try {
+                personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+            } catch (Exception e) {
+                throw new XiaoShiException("未查询到当前登陆人");
+            }
+            litigationHistory.setCreateId(personnelVO.getId());
+            litigationHistory.insert();
+        }
+        return litigationHistory.getId();
+    }
+
+    public List<LitigationHistoryVO> getLitigationHistory(String patentNo) throws IOException {
+        if (patentNo == null || StringUtils.isEmpty(patentNo)) {
+            throw new XiaoShiException("入参为空");
+        }
+        List<LitigationHistoryVO> litigationHistoryVOS = new ArrayList<>();
+        LambdaQueryWrapper<LitigationHistory> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(LitigationHistory::getPatentNo, patentNo);
+        List<LitigationHistory> litigationHistories = this.list(queryWrapper);
+
+        if (!litigationHistories.isEmpty()) {
+            litigationHistories.forEach(item -> {
+                LitigationHistoryVO litigationHistoryVO = new LitigationHistoryVO();
+                BeanUtils.copyProperties(item, litigationHistoryVO);
+                litigationHistoryVOS.add(litigationHistoryVO);
+            });
+            this.loadLitigationHistoryVOS(litigationHistoryVOS);
+        }
+        return litigationHistoryVOS;
+    }
+
+    public void loadLitigationHistoryVOS(List<LitigationHistoryVO> litigationHistoryVOS) throws IOException {
+        List<String> createIds = new ArrayList<>();
+        litigationHistoryVOS.forEach(item -> {
+            if (item.getCreateId() != null) {
+                createIds.add(item.getCreateId());
+            }
+        });
+        List<Personnel> personnels = new ArrayList<>();
+        //查询发起人名称
+        if (createIds.size() != 0) {
+            String res = permissionService.getPersonnelByIdsFromPCS(createIds);
+            JSONObject jsonObject = JSONObject.parseObject(res);
+            personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
+        }
+        //装载信息
+        for (LitigationHistoryVO litigationHistoryVO : litigationHistoryVOS) {
+            //装载人员信息
+            Personnel personnel = personnels.stream().filter(item -> item.getId().equals(litigationHistoryVO.getCreateId())).findFirst().orElse(null);
+            if (personnel != null) {
+                litigationHistoryVO.setCreateName(personnel.getPersonnelName());
+            }
+        }
+
+    }
+
+    public List<Integer> deleteLitigationHistory(List<Integer> ids) {
+        if (!ids.isEmpty()) {
+            this.removeBatchByIds(ids);
+        }
+        return ids;
+    }
+
+}

+ 5 - 4
src/main/java/cn/cslg/pas/service/business/MergePersonService.java

@@ -22,6 +22,7 @@ import cn.cslg.pas.domain.es.PatentMergePerson;
 import cn.cslg.pas.domain.es.PatentPerson;
 import cn.cslg.pas.domain.es.PersonAddress;
 import cn.cslg.pas.exception.UnLoginException;
+import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.MergePersonMapper;
 import cn.cslg.pas.mapper.SystemDictMapper;
 import cn.cslg.pas.service.business.es.EsPatentService;
@@ -92,7 +93,7 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         try {
             personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
         } catch (Exception e) {
-            throw new UnLoginException("未登录");
+            throw new XiaoShiException("未登录");
         }
         //判断是否名称重复
         LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
@@ -100,7 +101,7 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
                 .eq(MergePerson::getName, vo.getName());
         List<MergePerson> list = mergePersonMapper.selectList(wrapper);
         if (list.size() > 1) {
-            throw new Exception("合并名称不可重复");
+            throw new XiaoShiException("合并名称不可重复");
         }
 
         MergePerson person = new MergePerson();
@@ -227,7 +228,7 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         try {
             personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
         } catch (Exception e) {
-            throw new UnLoginException("未登录");
+            throw new XiaoShiException("未登录");
         }
         //判断是否名称重复
         LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
@@ -235,7 +236,7 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
                 .eq(MergePerson::getName, vo.getName());
         List<MergePerson> list = mergePersonMapper.selectList(wrapper);
         if (list.size() > 1) {
-            throw new Exception("合并名称不可重复");
+            throw new XiaoShiException("合并名称不可重复");
         }
         //获取老专利
         MergePerson person = this.getById(vo.getId());

+ 192 - 0
src/main/java/cn/cslg/pas/service/business/OtherReferencesService.java

@@ -0,0 +1,192 @@
+package cn.cslg.pas.service.business;
+
+import cn.cslg.pas.common.dto.business.OtherReferencesDTO;
+import cn.cslg.pas.common.model.cronModel.Personnel;
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
+import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.common.utils.StringUtils;
+import cn.cslg.pas.common.vo.business.LitigationHistoryVO;
+import cn.cslg.pas.common.vo.business.OtherReferencesVO;
+import cn.cslg.pas.domain.business.AssoOtherReferencesFile;
+import cn.cslg.pas.domain.business.LitigationHistory;
+import cn.cslg.pas.domain.business.OtherReferences;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.mapper.OtherReferencesMapper;
+import cn.cslg.pas.service.permissions.PermissionService;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 其他参考资料
+ * @Author xiexiang
+ * @Date 2024/1/17
+ */
+@Slf4j
+@Service
+public class OtherReferencesService extends ServiceImpl<OtherReferencesMapper, OtherReferences> {
+    @Autowired
+    private LoginUtils loginUtils;
+
+    @Autowired
+    private CacheUtils cacheUtils;
+
+    @Autowired
+    private PermissionService permissionService;
+
+    @Autowired
+    private AssoOtherReferencesFileService assoReferencesFileService;
+
+    /**
+     * 新增or更新其他参考资料
+     * @param otherReferencesDTO
+     * @return
+     */
+    public Integer saveOrUpdate(OtherReferencesDTO otherReferencesDTO){
+        if (otherReferencesDTO == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        Integer id = otherReferencesDTO.getId();
+        List<String> fileGuids = otherReferencesDTO.getFileGuids();
+        OtherReferences otherReferences = new OtherReferences();
+        if (id != null) {
+            //update
+            otherReferences = this.getById(id);
+            BeanUtils.copyProperties(otherReferencesDTO, otherReferences);
+            otherReferences.updateById();
+            //先删除 后添加
+            LambdaQueryWrapper<AssoOtherReferencesFile> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(AssoOtherReferencesFile::getOtherReferencesId, id);
+            assoReferencesFileService.remove(queryWrapper);
+            if (!fileGuids.isEmpty()) {
+                List<Integer> fileIds = this.addFile(otherReferences.getId(), fileGuids);
+            }
+        } else {
+            BeanUtils.copyProperties(otherReferencesDTO, otherReferences);
+            PersonnelVO personnelVO = new PersonnelVO();
+            try {
+                personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+            } catch (Exception e) {
+                throw new XiaoShiException("未查询到当前登陆人");
+            }
+            otherReferences.setCreateId(personnelVO.getId());
+            otherReferences.insert();
+            if (!fileGuids.isEmpty()) {
+                //先删除 后添加
+                List<Integer> fileIds = this.addFile(otherReferences.getId(), fileGuids);
+            }
+        }
+        return otherReferences.getId();
+    }
+
+    /**
+     * 新增文件与其他参考资料关联
+     * @param id
+     * @param fileGuids
+     * @return
+     */
+    public List<Integer> addFile(Integer id, List<String> fileGuids){
+        List<Integer> ids = new ArrayList<>();
+        if (!fileGuids.isEmpty()) {
+            List<AssoOtherReferencesFile> assoOtherReferencesFiles = new ArrayList<>();
+            fileGuids.forEach(item -> {
+                AssoOtherReferencesFile assoOtherReferencesFile = new AssoOtherReferencesFile();
+                assoOtherReferencesFile.setOtherReferencesId(id);
+                assoOtherReferencesFile.setFileGuid(item);
+                assoOtherReferencesFiles.add(assoOtherReferencesFile);
+            });
+            assoReferencesFileService.saveBatch(assoOtherReferencesFiles);
+        }
+        return ids;
+    }
+
+    /**
+     * 查询
+     * @param patentNo
+     * @return
+     * @throws IOException
+     */
+    public List<OtherReferencesVO> getOtherReferences(String patentNo) throws IOException {
+        if (patentNo == null || StringUtils.isEmpty(patentNo)) {
+            throw new XiaoShiException("入参为空");
+        }
+        List<OtherReferencesVO> otherReferencesVOS = new ArrayList<>();
+        LambdaQueryWrapper<OtherReferences> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(OtherReferences::getPatentNo, patentNo);
+        List<OtherReferences> otherReferencesList = this.list(queryWrapper);
+
+        if (!otherReferencesList.isEmpty()) {
+            otherReferencesList.forEach(item -> {
+                OtherReferencesVO otherReferencesVO = new OtherReferencesVO();
+                BeanUtils.copyProperties(item, otherReferencesVO);
+                otherReferencesVOS.add(otherReferencesVO);
+            });
+            this.loadOtherReferencesVOS(otherReferencesVOS);
+        }
+        return otherReferencesVOS;
+    }
+
+    /**
+     * 装载查询其他参考资料
+     * @param otherReferencesVOS
+     * @throws IOException
+     */
+    public void loadOtherReferencesVOS(List<OtherReferencesVO> otherReferencesVOS) throws IOException {
+        List<String> createIds = new ArrayList<>();
+        otherReferencesVOS.forEach(item -> {
+            if (item.getCreateId() != null) {
+                createIds.add(item.getCreateId());
+            }
+        });
+        List<Personnel> personnels = new ArrayList<>();
+        //查询发起人名称
+        if (createIds.size() != 0) {
+            String res = permissionService.getPersonnelByIdsFromPCS(createIds);
+            JSONObject jsonObject = JSONObject.parseObject(res);
+            personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
+        }
+        //装载信息
+        for (OtherReferencesVO otherReferencesVO : otherReferencesVOS) {
+            //装载人员信息
+            Personnel personnel = personnels.stream().filter(item -> item.getId().equals(otherReferencesVO.getCreateId())).findFirst().orElse(null);
+            if (personnel != null) {
+                otherReferencesVO.setCreateName(personnel.getPersonnelName());
+            }
+            LambdaQueryWrapper<AssoOtherReferencesFile> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(AssoOtherReferencesFile::getOtherReferencesId, otherReferencesVO.getId());
+            List<AssoOtherReferencesFile> assoOtherReferencesFiles = assoReferencesFileService.list(queryWrapper);
+            if (!assoOtherReferencesFiles.isEmpty()) {
+                List<String> fileGuids = assoOtherReferencesFiles.stream().map(AssoOtherReferencesFile::getFileGuid).collect(Collectors.toList());
+                otherReferencesVO.setFileGuids(fileGuids);
+            }
+        }
+
+    }
+
+    /**
+     * 删除其他参考资料
+     * @param ids
+     * @return
+     */
+    public List<Integer> deleteOtherReferences(List<Integer> ids) {
+        if (!ids.isEmpty()) {
+            //先删除附件
+            LambdaQueryWrapper<AssoOtherReferencesFile> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.in(AssoOtherReferencesFile::getOtherReferencesId, ids);
+            assoReferencesFileService.remove(queryWrapper);
+            this.removeBatchByIds(ids);
+        }
+        return ids;
+    }
+
+}

+ 134 - 228
src/main/java/cn/cslg/pas/service/business/PDFExportFirstPageService.java

@@ -1,10 +1,13 @@
 package cn.cslg.pas.service.business;
 
+import cn.cslg.pas.common.dto.ExportTaskDTO;
 import cn.cslg.pas.common.dto.PatentColumnDTO;
 import cn.cslg.pas.common.dto.PatentDTO;
 import cn.cslg.pas.common.dto.es.EsCustomFieldDTO;
 import cn.cslg.pas.common.model.request.QueryRequest;
 import cn.cslg.pas.common.utils.FormatUtil;
+import cn.cslg.pas.common.utils.ParseByteToFileUtils;
+import cn.cslg.pas.common.vo.WebSocketMessageVO;
 import cn.cslg.pas.common.vo.business.PatentNoVO;
 import cn.cslg.pas.common.vo.es.EsCustomFieldBatchVO;
 import cn.cslg.pas.exception.XiaoShiException;
@@ -12,6 +15,7 @@ import cn.cslg.pas.service.business.es.EsCustomFieldService;
 import cn.cslg.pas.service.business.es.EsPatentService;
 import cn.cslg.pas.service.business.es.EsService;
 import cn.cslg.pas.service.common.FileManagerService;
+import cn.cslg.pas.service.common.MessageService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.input.XmlStreamReaderException;
 import org.apache.pdfbox.multipdf.PDFMergerUtility;
@@ -20,6 +24,7 @@ import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.rendering.PDFRenderer;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
@@ -40,20 +45,139 @@ public class PDFExportFirstPageService {
     @Autowired
     private FileManagerService fileManagerService;
     @Autowired
-    private EsService esService;
-    @Autowired
     private EsCustomFieldService esCustomFieldService;
     @Autowired
     private EsPatentService patentService;
 
+    @Autowired
+    private ParseByteToFileUtils parseByteToFileUtils;
 
-    public byte[] mergePdfFirstPage(EsCustomFieldBatchVO EsVO){
-        try {
-            List<String> patentNos = this.getPatentNo(EsVO);
-            byte[] result = this.mergePerPatentPDF(patentNos);
-            return result;
-        } catch (Exception e) {
-            throw new XiaoShiException("合并错误");
+    @Autowired
+    private ImportTaskService importTaskService;
+
+    @Autowired
+    private MessageService messageService;
+
+
+    @Async
+    public void mergePdfFirstPage(ExportTaskDTO exportTask) throws IOException {
+        EsCustomFieldBatchVO EsVO = exportTask.getEsVO();
+        List<String> patentNos = this.getPatentNo(EsVO);
+        Integer total = patentNos.size();
+        Integer defaultNum = 0;
+        PDFMergerUtility merger = new PDFMergerUtility();
+        PDDocument resultDocument = new PDDocument();
+        for (int i = 0; i < patentNos.size(); i++) {
+            PatentNoVO patentNoVO = new PatentNoVO();
+            patentNoVO.setPatentNo(patentNos.get(i));
+            PatentColumnDTO patentColumnDTO = new PatentColumnDTO();
+            try {
+                patentColumnDTO = patentService.selectPatentDetail(patentNoVO);
+            } catch (Exception e) {
+                defaultNum++;
+                continue;
+            }
+            if (patentColumnDTO != null) {
+                //判断申请号是否为空
+                if (patentColumnDTO.getAppNo() != null) {
+                    String appNo = patentColumnDTO.getAppNo();
+                    Integer type = 1;
+                    //获取公告专利pdf文档guid
+                    String pdfGuid = FormatUtil.getPDFFormat(appNo, type);
+                    byte[] pdfData = new byte[0];
+                    try {
+                        pdfData = fileManagerService.downloadSystemFileFromFMS(pdfGuid);
+                        if (pdfData == null || pdfData.length == 0) {
+                            //获取公开专利pdf文档guid
+                            Integer type2 = 0;
+                            String pdfGuid2 = FormatUtil.getPDFFormat(appNo, type2);
+                            pdfData = fileManagerService.downloadSystemFileFromFMS(pdfGuid2);
+                            if (pdfData == null || pdfData.length == 0) {
+                                defaultNum++;
+                                continue;
+                            } else {
+                                // 加载输入的PDF文档
+                                PDDocument document = PDDocument.load(pdfData);
+                                // 获取第一页
+                                PDPage firstPage = document.getPage(0);
+                                // 创建一个新的文档用于保存第一页
+                                PDDocument firstPageDocument = new PDDocument();
+                                firstPageDocument.addPage(firstPage);
+                                // 将第一页添加到合并器中
+                                merger.appendDocument(resultDocument, firstPageDocument);
+                                // 关闭当前处理的文档
+                                document.close();
+                                firstPageDocument.close();
+                                WebSocketMessageVO webSocketMessageVO =new WebSocketMessageVO();
+                                webSocketMessageVO.setProjectId(EsVO.getProjectId());
+                                webSocketMessageVO.setCreateId("328");
+                                webSocketMessageVO.setCode(604);
+                                webSocketMessageVO.setAllNum(total);
+                                webSocketMessageVO.setCurrentNum(i+1);
+                                webSocketMessageVO.setState(1);
+                                messageService.sendPatentExportMessage(webSocketMessageVO);
+                            }
+                        } else {
+                            // 加载每个输入的PDF文档
+                            PDDocument document = PDDocument.load(pdfData);
+                            // 获取第一页
+                            PDPage firstPage = document.getPage(0);
+                            // 创建一个新的文档用于保存第一页
+                            PDDocument firstPageDocument = new PDDocument();
+                            firstPageDocument.addPage(firstPage);
+                            // 将第一页添加到合并器中
+                            merger.appendDocument(resultDocument, firstPageDocument);
+                            // 关闭当前处理的文档
+                            document.close();
+                            firstPageDocument.close();
+                            WebSocketMessageVO webSocketMessageVO = new WebSocketMessageVO();
+                            webSocketMessageVO.setProjectId(EsVO.getProjectId());
+                            webSocketMessageVO.setCreateId(exportTask.getCreateId());
+                            webSocketMessageVO.setCode(604);
+                            webSocketMessageVO.setAllNum(total);
+                            webSocketMessageVO.setCurrentNum(i+1);
+                            webSocketMessageVO.setState(1);
+                            webSocketMessageVO.setTaskId(exportTask.getTaskId());
+                            messageService.sendPDFExportMessage(webSocketMessageVO);
+                        }
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                        defaultNum++;
+                        continue;//继续处理下一件专利
+                    }
+                } else {
+                    defaultNum++;
+                    continue;
+                }
+            } else {
+                defaultNum++;
+                continue;
+            }
+        }
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        resultDocument.save(out);
+        resultDocument.close();
+        WebSocketMessageVO webSocketMessageVO = new WebSocketMessageVO();
+        webSocketMessageVO.setProjectId(EsVO.getProjectId());
+        webSocketMessageVO.setCreateId(exportTask.getCreateId());
+        webSocketMessageVO.setCode(605);
+        webSocketMessageVO.setAllNum(total);
+        webSocketMessageVO.setCurrentNum(total);
+        webSocketMessageVO.setTaskId(exportTask.getTaskId());
+        webSocketMessageVO.setState(2);
+        messageService.sendPDFExportMessage(webSocketMessageVO);
+        String fileGuid = "";
+        if (out.toByteArray() != null && out.toByteArray().length != 0) {
+            fileGuid = parseByteToFileUtils.uploadFile(out.toByteArray(), 2);
+        }
+        exportTask.setFileGuid(fileGuid);
+        exportTask.setAllNum(total);
+        exportTask.setDefaultNum(defaultNum);
+        exportTask.setState(2);
+        exportTask.setDoneNum(total - defaultNum);
+        Integer taskId = importTaskService.updateExportTask(exportTask);
+        if (taskId == null) {
+            throw new XiaoShiException("导出记录失败");
         }
     }
 
@@ -74,7 +198,7 @@ public class PDFExportFirstPageService {
                 isAdd.removeAll(isDel);
                 //创建一个输出流
                 return isAdd;
-            } else if (startNum > 1 && endNum > 0){
+            } else if (startNum >= 1 && endNum > 0){
                 List<String> patentNos = new ArrayList<>();
                 try {
                     patentNos = esCustomFieldService.getPatentNos(EsVO);
@@ -90,224 +214,6 @@ public class PDFExportFirstPageService {
         }
     }
 
-//    public byte[] mergePDFFirstPage(EsCustomFieldBatchVO EsVO) throws IOException {
-//        //初始化
-//        Integer startNum = EsVO.getStartNumber();
-//        Integer endNum = EsVO.getEndNumber();
-//        List<String> isAdd = EsVO.getIsAdd();
-//        List<String> isDel = EsVO.getIsDelete();
-//        try {
-//            if (!CollectionUtils.isEmpty(isAdd) && startNum <= 1 && endNum < 1) {
-//                isAdd.removeAll(isDel);
-//                //创建一个输出流
-//                byte[] result = this.mergePerPatentPDF(isAdd);
-//                return result;
-//            } else if (startNum > 1 && endNum > 0){
-//                List<String> patentNos = new ArrayList<>();
-//                try {
-//                    patentNos = esCustomFieldService.getPatentNos(EsVO);
-//                    byte[] result = this.mergePerPatentPDF(patentNos);
-//                    return result;
-//                } catch (Exception e) {
-//                    throw new XiaoShiException("");
-//                }
-//            } else {
-//                throw new XiaoShiException("入参错误");
-//            }
-//        } catch (FileNotFoundException e) {
-//            throw new FileNotFoundException();
-//        }
-//    }
-
-
-
-//    /**
-//     * 1
-//     * @param EsVO
-//     * @return
-//     * @throws IOException
-//     */
-//    public byte[] mergeAndExportPDFFirstPage(EsCustomFieldBatchVO EsVO) throws IOException {
-//        //根据projectId查询专利信息
-//        QueryRequest queryRequest = new QueryRequest();
-//        queryRequest.setProjectId(projectId);
-//        PatentDTO patentDTO;
-//        try {
-//            patentDTO = esService.esSearch(queryRequest);
-//        } catch (Exception e) {
-//            throw new XiaoShiException("检索专利错误");
-//        }
-//        List<PatentColumnDTO> patents = patentDTO.getPatents();
-//        byte[][] pdfDocuments = this.getPDFByteByAppNo(patents);
-//        byte[] pdfData = new byte[0];
-//        // 判断 byte[][] 数组是否为空
-//        if (!this.isByteEmpty(pdfDocuments)) {
-//            pdfData = this.mergeFirstPage(pdfDocuments);
-//        }
-//        return pdfData;
-//    }
-
-//    /**
-//     * 判断文件数组是否为空
-//     * @param pdfDocuments
-//     * @return
-//     */
-//    private boolean isByteEmpty(byte[][] pdfDocuments) {
-//        return pdfDocuments == null || pdfDocuments.length == 0 || Arrays.stream(pdfDocuments).allMatch(array -> array == null || array.length == 0);
-//    }
-
-//    /**
-//     * 3
-//     * @param pdfDatas
-//     * @return
-//     * @throws IOException
-//     */
-//    public byte[] mergeFirstPage(byte[][] pdfDatas) throws IOException{
-//        //创建一个输出流
-//        try {
-//            // 创建一个PDFMergerUtility实例
-//            PDFMergerUtility merger = new PDFMergerUtility();
-//            PDDocument resultDocument = new PDDocument();
-//            //逐个处理每个pdf文件
-//            for (byte[] pdfData : pdfDatas) {
-//                // 加载每个输入的PDF文档
-//                PDDocument document = PDDocument.load(pdfData);
-//                // 获取第一页
-//                PDPage firstPage = document.getPage(0);
-//                // 创建一个新的文档用于保存第一页
-//                PDDocument firstPageDocument = new PDDocument();
-//                firstPageDocument.addPage(firstPage);
-//                // 将第一页添加到合并器中
-//                merger.appendDocument(resultDocument, firstPageDocument);
-//                // 关闭当前处理的文档
-//                document.close();
-//                firstPageDocument.close();
-//            }
-//            ByteArrayOutputStream out = new ByteArrayOutputStream();
-//            resultDocument.save(out);
-//            resultDocument.close();
-//            return out.toByteArray();
-//        } catch (FileNotFoundException e) {
-//            throw new FileNotFoundException();
-//        }
-//    }
-
-//    /**
-//     * 2
-//     * 根据查询到的专利信息获取它公告或公开专利的pdf文档数据流
-//     * @param patents
-//     * @return
-//     */
-//    public byte[][] getPDFByteByAppNo(List<PatentColumnDTO> patents){
-//        List<byte[]> pdfDatas = new ArrayList<>();
-//        //遍历传入专利集合
-//        for (PatentColumnDTO item : patents) {
-//            //判断申请号是否为空
-//            if (item.getAppNo() != null) {
-//                String appNo = item.getAppNo();
-//                Integer type = 1;
-//                //获取公告专利pdf文档guid
-//                String pdfGuid = FormatUtil.getPDFFormat(appNo, type);
-//
-//                byte[] pdfData = new byte[0];
-//                try {
-//                    pdfData = fileManagerService.downloadSystemFileFromFMS(pdfGuid);
-//                    if (pdfData == null  || pdfData.length == 0) {
-//                        //获取公开专利pdf文档guid
-//                        Integer type2 = 0;
-//                        String pdfGuid2 = FormatUtil.getPDFFormat(appNo, type2);
-//                        pdfData = fileManagerService.downloadSystemFileFromFMS(pdfGuid2);
-//                        if (pdfData == null  || pdfData.length == 0) {
-//                            continue;
-//                        } else {
-//                            pdfDatas.add(pdfData);
-//                        }
-//                    } else {
-//                        pdfDatas.add(pdfData);
-//                    }
-//                } catch (IOException e) {
-//                    e.printStackTrace();
-//                    continue;//继续处理下一件专利
-//                }
-//            }
-//        }
-//        byte[][] pdfDataArray = new byte[pdfDatas.size()][];
-//        return pdfDatas.toArray(pdfDataArray);
-//    }
-
-    public byte[] mergePerPatentPDF(List<String> patentNos) throws IOException {
-        PDFMergerUtility merger = new PDFMergerUtility();
-        PDDocument resultDocument = new PDDocument();
-        for (String patentNo : patentNos) {
-            PatentNoVO patentNoVO = new PatentNoVO();
-            patentNoVO.setPatentNo(patentNo);
-            try {
-                PatentColumnDTO patentColumnDTO = patentService.selectPatentDetail(patentNoVO);
-                if (patentColumnDTO != null) {
-                    //判断申请号是否为空
-                    if (patentColumnDTO.getAppNo() != null) {
-                        String appNo = patentColumnDTO.getAppNo();
-                        Integer type = 1;
-                        //获取公告专利pdf文档guid
-                        String pdfGuid = FormatUtil.getPDFFormat(appNo, type);
-
-                        byte[] pdfData = new byte[0];
-                        try {
-                            pdfData = fileManagerService.downloadSystemFileFromFMS(pdfGuid);
-                            if (pdfData == null || pdfData.length == 0) {
-                                //获取公开专利pdf文档guid
-                                Integer type2 = 0;
-                                String pdfGuid2 = FormatUtil.getPDFFormat(appNo, type2);
-                                pdfData = fileManagerService.downloadSystemFileFromFMS(pdfGuid2);
-                                if (pdfData == null || pdfData.length == 0) {
-                                    continue;
-                                } else {
-                                    // 加载输入的PDF文档
-                                    PDDocument document = PDDocument.load(pdfData);
-                                    // 获取第一页
-                                    PDPage firstPage = document.getPage(0);
-                                    // 创建一个新的文档用于保存第一页
-                                    PDDocument firstPageDocument = new PDDocument();
-                                    firstPageDocument.addPage(firstPage);
-                                    // 将第一页添加到合并器中
-                                    merger.appendDocument(resultDocument, firstPageDocument);
-                                    // 关闭当前处理的文档
-                                    document.close();
-                                    firstPageDocument.close();
-                                }
-                            } else {
-                                // 加载每个输入的PDF文档
-                                PDDocument document = PDDocument.load(pdfData);
-                                // 获取第一页
-                                PDPage firstPage = document.getPage(0);
-                                // 创建一个新的文档用于保存第一页
-                                PDDocument firstPageDocument = new PDDocument();
-                                firstPageDocument.addPage(firstPage);
-                                // 将第一页添加到合并器中
-                                merger.appendDocument(resultDocument, firstPageDocument);
-                                // 关闭当前处理的文档
-                                document.close();
-                                firstPageDocument.close();
-                            }
-                        } catch (IOException e) {
-                            e.printStackTrace();
-                            continue;//继续处理下一件专利
-                        }
-                    } else {
-                        continue;
-                    }
-                } else {
-                    continue;
-                }
-            } catch (Exception e) {
-                continue;
-            }
-        }
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        resultDocument.save(out);
-        resultDocument.close();
-        return out.toByteArray();
-    }
 
 
 }

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

@@ -236,6 +236,8 @@ public class PatentDigProjectFilesService extends ServiceImpl<PatentDigProjectFi
         //其次调用新增任务接口
         patentDigProjectFilesDTO.getProjectTaskDTO().setProjectId(patentDigProjectFilesDTO.getProjectId());
         patentDigProjectFilesDTO.getProjectTaskDTO().setProcessId(patentDigProjectFilesDTO.getProcessId());
+        Integer taskType = 7;
+        patentDigProjectFilesDTO.getProjectTaskDTO().setType(taskType);
         Integer taskId = projectTaskService.addTask(patentDigProjectFilesDTO.getProjectTaskDTO());
         if (!ids.isEmpty()) {
             LambdaQueryWrapper<PatentDigProjectFiles> queryWrapper = new LambdaQueryWrapper<>();

+ 19 - 0
src/main/java/cn/cslg/pas/service/business/PatentDigProjectService.java

@@ -97,6 +97,7 @@ public class PatentDigProjectService extends ServiceImpl<PatentDigProjectMapper,
     public Object queryMessage(QueryRequest queryRequest) throws Exception {
         List<String> sqls = formatQueryService.reSqls(queryRequest, "patentDigProject");
         //根据sql查询专题库信息
+       sqls = this.loadSearchSql(sqls);
         List<PatentDigProjectVO> patentProjectVOS = patentDigProjectMapper.getPatentDigProject(sqls.get(0), sqls.get(1), sqls.get(2));
         Long total = patentDigProjectMapper.getPatentDigCount(sqls.get(0));
         //装载专利数据库信息
@@ -755,4 +756,22 @@ public class PatentDigProjectService extends ServiceImpl<PatentDigProjectMapper,
 
     }
 
+
+    //装载查询语句
+    private List<String> loadSearchSql(List<String> sqls){
+        PersonnelVO personnelVO =cacheUtils.getLoginUser(loginUtils.getId());
+        String id =personnelVO.getId();
+        String rootSql ="(p.create_id ="+id+" or p.head_id="+id+" or p.id in (select project_id from asso_project_person where person_id ="+id+"))";
+        if(sqls.get(0)!=null&&!sqls.get(0).equals(""))
+        {
+            sqls.set(0,rootSql+" and"+"("+sqls.get(0)+")");
+
+        }
+        else {
+            sqls.set(0,rootSql);
+        }
+
+        return sqls;
+
+    }
 }

+ 18 - 14
src/main/java/cn/cslg/pas/service/business/PatentExportService.java

@@ -8,6 +8,7 @@ import cn.cslg.pas.common.vo.ConfigVOS.PatentConfigVO;
 import cn.cslg.pas.common.vo.WebSocketMessageVO;
 import cn.cslg.pas.common.vo.business.PatentNoVO;
 import cn.cslg.pas.common.vo.es.EsCustomFieldBatchVO;
+import cn.cslg.pas.domain.business.ImportTask;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.factorys.PatentExportFactory.GetValueImp;
 import cn.cslg.pas.factorys.PatentExportFactory.PatentExportFactory;
@@ -60,12 +61,13 @@ public class PatentExportService {
     /**
      * 导出专利
      *
-     * @param EsVO
+     * @param exportTask
      * @return
      * @throws IOException
      */
     @Async
-    public void exportPatent(EsCustomFieldBatchVO EsVO) throws IOException {
+    public void exportPatent(ExportTaskDTO exportTask) throws IOException {
+        EsCustomFieldBatchVO EsVO = exportTask.getEsVO();
         try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             String esSelected = JsonUtils.objectToJson(EsVO.getSelected());
             //selected字符串转PatentExportVO集合
@@ -154,34 +156,36 @@ public class PatentExportService {
                         }
                     }
                 }
-                WebSocketMessageVO webSocketMessageVO =new WebSocketMessageVO();
+                WebSocketMessageVO webSocketMessageVO = new WebSocketMessageVO();
                 webSocketMessageVO.setProjectId(EsVO.getProjectId());
-                webSocketMessageVO.setCreateId("328");
+                webSocketMessageVO.setCreateId(exportTask.getCreateId());
                 webSocketMessageVO.setCode(602);
                 webSocketMessageVO.setAllNum(total);
                 webSocketMessageVO.setCurrentNum(i+1);
+                webSocketMessageVO.setTaskId(exportTask.getTaskId());
                 webSocketMessageVO.setState(1);
                 messageService.sendPatentExportMessage(webSocketMessageVO);
             }
             hssfWorkbook.write(out);
-            WebSocketMessageVO webSocketMessageVO =new WebSocketMessageVO();
+            WebSocketMessageVO webSocketMessageVO = new WebSocketMessageVO();
             webSocketMessageVO.setProjectId(EsVO.getProjectId());
-            webSocketMessageVO.setCreateId("328");
+            webSocketMessageVO.setCreateId(exportTask.getCreateId());
+            webSocketMessageVO.setCode(603);
             webSocketMessageVO.setAllNum(total);
             webSocketMessageVO.setCurrentNum(total);
+            webSocketMessageVO.setTaskId(exportTask.getTaskId());
             webSocketMessageVO.setState(2);
             messageService.sendPatentExportMessage(webSocketMessageVO);
             String fileGuid = "";
             if (out.toByteArray() != null && out.toByteArray().length != 0) {
-                fileGuid = parseByteToFileUtils.uploadFile(out.toByteArray());
+                fileGuid = parseByteToFileUtils.uploadFile(out.toByteArray(), 1);
             }
-            ExportTaskDTO exportTaskDTO = new ExportTaskDTO();
-            exportTaskDTO.setProjectId(EsVO.getProjectId());
-            exportTaskDTO.setType(6);
-            exportTaskDTO.setFileGuid(fileGuid);
-            exportTaskDTO.setAllNum(total);
-            exportTaskDTO.setDefaultNum(defaultNum);
-            Integer taskId = importTaskService.addExportExcel(exportTaskDTO);
+            exportTask.setFileGuid(fileGuid);
+            exportTask.setAllNum(total);
+            exportTask.setDefaultNum(defaultNum);
+            exportTask.setDoneNum(total - defaultNum);
+            exportTask.setState(2);
+            Integer taskId = importTaskService.updateExportTask(exportTask);
             if (taskId == null) {
                 throw new XiaoShiException("导出记录失败");
             }

+ 18 - 0
src/main/java/cn/cslg/pas/service/business/PatentProjectService.java

@@ -104,6 +104,7 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
     public Object queryMessage(QueryRequest queryRequest) throws Exception {
 
         List<String> sqls = formatQueryService.reSqls(queryRequest, "patentProject");
+        sqls =this.loadSearchSql(sqls);
         //根据sql查询专题库信息
         List<PatentProjectVO> patentProjectVOS = patentProjectMapper.getPatentProject(sqls.get(0), sqls.get(1), sqls.get(2));
         Long total = patentProjectMapper.getPatentProjectCount(sqls.get(0));
@@ -192,6 +193,7 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
         StringRequest stringRequest = new StringRequest();
         BeanUtils.copyProperties(groupRequest, stringRequest);
         List<String> sqls = formatQueryService.reSqls(stringRequest, tableName);
+        sqls=this.loadSearchSql(sqls);
         //格式化 分组
         GroupConfig groupConfig = null;
         if (groupRequest.getGroupBy() != null) {
@@ -867,6 +869,22 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
         }
 
     }
+    //装载查询语句
+    private List<String> loadSearchSql(List<String> sqls){
+        PersonnelVO personnelVO =cacheUtils.getLoginUser(loginUtils.getId());
+        String id =personnelVO.getId();
+        String rootSql ="(p.create_id ="+id+" or p.head_id="+id+" or p.id in (select project_id from asso_project_person where person_id ="+id+"))";
+        if(sqls.get(0)!=null&&!sqls.get(0).equals(""))
+        {
+            sqls.set(0,rootSql+" and"+"("+sqls.get(0)+")");
 
+        }
+        else {
+            sqls.set(0,rootSql);
+        }
+
+        return sqls;
+
+    }
 
 }

+ 127 - 0
src/main/java/cn/cslg/pas/service/business/PermissionRecordService.java

@@ -0,0 +1,127 @@
+package cn.cslg.pas.service.business;
+
+import cn.cslg.pas.common.dto.business.LitigationHistoryDTO;
+import cn.cslg.pas.common.dto.business.PermissionRecordDTO;
+import cn.cslg.pas.common.model.cronModel.Personnel;
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
+import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.common.utils.StringUtils;
+import cn.cslg.pas.common.vo.business.LitigationHistoryVO;
+import cn.cslg.pas.common.vo.business.PermissionRecordVO;
+import cn.cslg.pas.domain.business.LitigationHistory;
+import cn.cslg.pas.domain.business.PermissionRecord;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.mapper.PermissionRecordMapper;
+import cn.cslg.pas.service.permissions.PermissionService;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/16
+ */
+@Service
+@Slf4j
+public class PermissionRecordService extends ServiceImpl<PermissionRecordMapper, PermissionRecord> {
+    @Autowired
+    private LoginUtils loginUtils;
+
+    @Autowired
+    private CacheUtils cacheUtils;
+
+    @Autowired
+    private PermissionService permissionService;
+
+    /**
+     * 新增or更新
+     * @param permissionRecordDTO
+     * @return
+     */
+    public Integer saveOrUpdate(PermissionRecordDTO permissionRecordDTO){
+        if (permissionRecordDTO == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        Integer id = permissionRecordDTO.getId();
+        PermissionRecord permissionRecord = new PermissionRecord();
+        if (id != null) {
+            //update
+            permissionRecord = this.getById(id);
+            BeanUtils.copyProperties(permissionRecordDTO, permissionRecord);
+            permissionRecord.updateById();
+        } else {
+            BeanUtils.copyProperties(permissionRecordDTO, permissionRecord);
+            PersonnelVO personnelVO = new PersonnelVO();
+            try {
+                personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+            } catch (Exception e) {
+                throw new XiaoShiException("未查询到当前登陆人");
+            }
+            permissionRecord.setCreateId(personnelVO.getId());
+            permissionRecord.insert();
+        }
+        return permissionRecord.getId();
+    }
+
+    public List<PermissionRecordVO> getPermissionRecord(String patentNo) throws IOException {
+        if (patentNo == null || StringUtils.isEmpty(patentNo)) {
+            throw new XiaoShiException("入参为空");
+        }
+        List<PermissionRecordVO> permissionRecordVOS = new ArrayList<>();
+        LambdaQueryWrapper<PermissionRecord> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(PermissionRecord::getPatentNo, patentNo);
+        List<PermissionRecord> permissionRecords = this.list(queryWrapper);
+
+        if (!permissionRecords.isEmpty()) {
+            permissionRecords.forEach(item -> {
+                PermissionRecordVO permissionRecordVO = new PermissionRecordVO();
+                BeanUtils.copyProperties(item, permissionRecordVO);
+                permissionRecordVOS.add(permissionRecordVO);
+            });
+            this.loadPermissionRecordVOS(permissionRecordVOS);
+        }
+        return permissionRecordVOS;
+    }
+
+    public void loadPermissionRecordVOS(List<PermissionRecordVO> permissionRecordVOS) throws IOException {
+        List<String> createIds = new ArrayList<>();
+        permissionRecordVOS.forEach(item -> {
+            if (item.getCreateId() != null) {
+                createIds.add(item.getCreateId());
+            }
+        });
+        List<Personnel> personnels = new ArrayList<>();
+        //查询发起人名称
+        if (createIds.size() != 0) {
+            String res = permissionService.getPersonnelByIdsFromPCS(createIds);
+            JSONObject jsonObject = JSONObject.parseObject(res);
+            personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
+        }
+        //装载信息
+        for (PermissionRecordVO permissionRecordVO : permissionRecordVOS) {
+            //装载人员信息
+            Personnel personnel = personnels.stream().filter(item -> item.getId().equals(permissionRecordVO.getCreateId())).findFirst().orElse(null);
+            if (personnel != null) {
+                permissionRecordVO.setCreateName(personnel.getPersonnelName());
+            }
+        }
+
+    }
+
+    public List<Integer> deletePermissionRecord(List<Integer> ids) {
+        if (!ids.isEmpty()) {
+            this.removeBatchByIds(ids);
+        }
+        return ids;
+    }
+
+}

+ 24 - 0
src/main/java/cn/cslg/pas/service/business/ProductCategoryService.java

@@ -77,6 +77,7 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
     @Override
     public Object queryMessage(QueryRequest queryRequest) throws Exception {
         List<String> sqls = formatQueryService.reSqls(queryRequest,"productCategory");
+        sqls =this.loadSearchSql(sqls);
         //根据sql查询产品类别信息
         List<ProductCategoryVO> productCategoryVOS = productCategoryMapper.getProductCategory(sqls.get(0),sqls.get(1),sqls.get(2));
         //查询总数
@@ -502,4 +503,27 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
             productCategoryVO.setAdminIds(adminIds);
         }
     }
+
+    //装载查询语句
+    private List<String> loadSearchSql(List<String> sqls){
+        PersonnelVO personnelVO =cacheUtils.getLoginUser(loginUtils.getId());
+        String id =personnelVO.getId();
+        Integer tenantId =personnelVO.getTenantId();
+        String rootSql ="category.create_id="+id+" or(category.show_type =0 and category.tenant ="+tenantId+") or ( category.id in (select product_category_id from asso_product_category_person where" +
+                " person_id="+id+" and role=0)) or (category.show_type=2 and  category.id in (select product_category_id from asso_product_category_person where" +
+                " person_id="+id+" and role=1)) or(category.show_type =3 and category.id not in(select product_category_id from asso_product_category_person where" +
+                " person_id="+id+" and role=2))";
+        if(sqls.get(0)!=null&&!sqls.get(0).equals(""))
+        {
+            sqls.set(0,rootSql+" and"+"("+sqls.get(0)+")");
+
+        }
+        else {
+            sqls.set(0,rootSql);
+        }
+
+        return sqls;
+
+    }
+
 }

+ 24 - 0
src/main/java/cn/cslg/pas/service/business/ProductService.java

@@ -70,6 +70,7 @@ public class ProductService extends ServiceImpl<ProductMapper, Product> implemen
     @Transactional(rollbackFor = Exception.class)
     public Object queryMessage(QueryRequest queryRequest) throws Exception {
         List<String> sqls = formatQueryService.reSqls(queryRequest,"product");
+       sqls= this.loadSearchSql(sqls);
         //根据sql查询产品信息
         List<ProductVO> productVOS = productMapper.getProduct(sqls.get(0), sqls.get(1), sqls.get(2));
         //查询总数
@@ -493,4 +494,27 @@ public class ProductService extends ServiceImpl<ProductMapper, Product> implemen
             productVO.setAdminIds(adminIds);
         }
     }
+
+    //装载查询语句
+    //装载查询语句
+    private List<String> loadSearchSql(List<String> sqls){
+        PersonnelVO personnelVO =cacheUtils.getLoginUser(loginUtils.getId());
+        String id =personnelVO.getId();
+        Integer tenantId =personnelVO.getTenantId();
+        String rootSql ="product.create_id="+id+" or(product.show_type =0 and product.tenant_id ="+tenantId+") or ( product.id in (select product_id from asso_product_person where" +
+                " person_id="+id+" and role=0)) or (product.show_type=2 and  product.id in (select product_id from asso_product_person where" +
+                " person_id="+id+" and role=1)) or(product.show_type =3 and product.id not in(select product_id from asso_product_person where" +
+                " person_id="+id+" and role=2))";
+        if(sqls.get(0)!=null&&!sqls.get(0).equals(""))
+        {
+            sqls.set(0,rootSql+" and"+"("+sqls.get(0)+")");
+
+        }
+        else {
+            sqls.set(0,rootSql);
+        }
+
+        return sqls;
+
+    }
 }

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

@@ -238,6 +238,7 @@ public class ProjectTaskService extends ServiceImpl<ProjectTaskMapper, ProjectTa
     @Override
     public Object queryMessage(QueryRequest queryRequest) throws Exception {
         List<String> sqls = formatQueryService.reSqls(queryRequest, "projectTask");
+        sqls=this.loadSearchSql(sqls);
         //根据sql查询任务信息
         List<ProjectTaskVO> projectTaskVOS = projectTaskMapper.getProjectTask(sqls.get(0), sqls.get(1), sqls.get(2));
         //查询总数
@@ -1207,4 +1208,21 @@ public class ProjectTaskService extends ServiceImpl<ProjectTaskMapper, ProjectTa
         }
         return projectTask.getId();
     }
+    //装载查询语句
+    private List<String> loadSearchSql(List<String> sqls){
+        PersonnelVO personnelVO =cacheUtils.getLoginUser(loginUtils.getId());
+        String id =personnelVO.getId();
+        String rootSql ="(create_id ="+id+" or handler="+id+")";
+        if(sqls.get(0)!=null&&!sqls.get(0).equals(""))
+        {
+            sqls.set(0,rootSql+" and"+"("+sqls.get(0)+")");
+
+        }
+        else {
+            sqls.set(0,rootSql);
+        }
+
+        return sqls;
+
+    }
 }

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

@@ -106,7 +106,7 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
     @Transactional(rollbackFor = Exception.class)
     public Object queryMessage(QueryRequest queryRequest) throws Exception {
         List<String> sqls = formatQueryService.reSqls(queryRequest, "reportProject");
-
+             sqls=this.loadSearchSql(sqls);
         //根据sql查询事件信息
         List<ReportProjectVO> reportProject = reportProjectMapper.getReportProject(sqls.get(0), sqls.get(1), sqls.get(2));
         this.loadReportProjectVO(reportProject);
@@ -873,4 +873,21 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
         return true;
     }
 
+ //装载查询语句
+    private List<String> loadSearchSql(List<String> sqls){
+        PersonnelVO personnelVO =cacheUtils.getLoginUser(loginUtils.getId());
+        String id =personnelVO.getId();
+        String rootSql ="(p.create_id ="+id+" or p.head_id="+id+" or p.id in (select project_id from asso_project_person where person_id ="+id+"))";
+        if(sqls.get(0)!=null&&!sqls.get(0).equals(""))
+        {
+            sqls.set(0,rootSql+" and"+"("+sqls.get(0)+")");
+
+        }
+        else {
+            sqls.set(0,rootSql);
+        }
+
+        return sqls;
+
+    }
 }

+ 127 - 0
src/main/java/cn/cslg/pas/service/business/ReviewHistoryService.java

@@ -0,0 +1,127 @@
+package cn.cslg.pas.service.business;
+
+import cn.cslg.pas.common.dto.business.ReviewHistoryDTO;
+import cn.cslg.pas.common.model.cronModel.Personnel;
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
+import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.common.utils.StringUtils;
+import cn.cslg.pas.common.vo.HightlightTemplateVO;
+import cn.cslg.pas.common.vo.business.ReviewHistoryVO;
+import cn.cslg.pas.domain.business.HightlightTemplate;
+import cn.cslg.pas.domain.business.ReviewHistory;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.mapper.ReviewHistoryMapper;
+import cn.cslg.pas.service.permissions.PermissionService;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/15
+ */
+@Service
+@Slf4j
+public class ReviewHistoryService extends ServiceImpl<ReviewHistoryMapper, ReviewHistory> {
+    @Autowired
+    private LoginUtils loginUtils;
+
+    @Autowired
+    private CacheUtils cacheUtils;
+
+    @Autowired
+    private PermissionService permissionService;
+
+    /**
+     * 新增or更新
+     * @param reviewHistoryDTO
+     * @return
+     */
+    public Integer saveOrUpdate(ReviewHistoryDTO reviewHistoryDTO){
+        if (reviewHistoryDTO == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        Integer id = reviewHistoryDTO.getId();
+        ReviewHistory reviewHistory = new ReviewHistory();
+        if (id != null) {
+            //update
+            reviewHistory = this.getById(id);
+            BeanUtils.copyProperties(reviewHistoryDTO, reviewHistory);
+            reviewHistory.updateById();
+        } else {
+            BeanUtils.copyProperties(reviewHistoryDTO, reviewHistory);
+            PersonnelVO personnelVO = new PersonnelVO();
+            try {
+                personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+            } catch (Exception e) {
+                throw new XiaoShiException("未查询到当前登陆人");
+            }
+            reviewHistory.setCreateId(personnelVO.getId());
+            reviewHistory.setTenantId(personnelVO.getTenantId());
+            reviewHistory.insert();
+        }
+        return reviewHistory.getId();
+    }
+
+    public List<ReviewHistoryVO> getReviewHistory(String patentNo) throws IOException {
+        if (patentNo == null || StringUtils.isEmpty(patentNo)) {
+            throw new XiaoShiException("入参为空");
+        }
+        List<ReviewHistoryVO> reviewHistoryVOS = new ArrayList<>();
+        LambdaQueryWrapper<ReviewHistory> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ReviewHistory::getPatentNo, patentNo);
+        List<ReviewHistory> reviewHistories = this.list(queryWrapper);
+
+        if (!reviewHistories.isEmpty()) {
+            reviewHistories.forEach(item -> {
+                ReviewHistoryVO reviewHistoryVO = new ReviewHistoryVO();
+                BeanUtils.copyProperties(item, reviewHistoryVO);
+                reviewHistoryVOS.add(reviewHistoryVO);
+            });
+            this.loadReviewHistoryVOS(reviewHistoryVOS);
+        }
+        return reviewHistoryVOS;
+    }
+
+    public void loadReviewHistoryVOS(List<ReviewHistoryVO> reviewHistoryVOS) throws IOException {
+        List<String> createIds = new ArrayList<>();
+        reviewHistoryVOS.forEach(item -> {
+            if (item.getCreateId() != null) {
+                createIds.add(item.getCreateId());
+            }
+        });
+        List<Personnel> personnels = new ArrayList<>();
+        //查询发起人名称
+        if (createIds.size() != 0) {
+            String res = permissionService.getPersonnelByIdsFromPCS(createIds);
+            JSONObject jsonObject = JSONObject.parseObject(res);
+            personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
+        }
+        //装载信息
+        for (ReviewHistoryVO reviewHistoryVO : reviewHistoryVOS) {
+            //装载人员信息
+            Personnel personnel = personnels.stream().filter(item -> item.getId().equals(reviewHistoryVO.getCreateId())).findFirst().orElse(null);
+            if (personnel != null) {
+                reviewHistoryVO.setCreateName(personnel.getPersonnelName());
+            }
+        }
+
+    }
+
+    public List<Integer> deleteReviewHistory(List<Integer> ids) {
+        if (!ids.isEmpty()) {
+            this.removeBatchByIds(ids);
+        }
+        return ids;
+    }
+
+}

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

@@ -25,7 +25,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
+import org.springframework.data.annotation.AccessType;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -41,6 +43,9 @@ import java.util.stream.Collectors;
 @Service
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class ScratchWordsService extends ServiceImpl<ScratchWordsMapper, ScratchWords> {
+    @Autowired
+    private ScratchWordsMapper scratchWordsMapper;
+
     private final CacheUtils cacheUtils;
     private final LoginUtils loginUtils;
     private final EsScratchWordsService esScratchWordsService;

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

@@ -243,6 +243,7 @@ public class TaskHandleResultService extends ServiceImpl<TaskHandleResultMapper,
                     SystemFile systemFile = systemFiles.stream().filter(item -> item.getGuid().equals(assoHandleResultFile.getFileGuid())).findFirst().orElse(null);
                     if (systemFile != null) {
                         BeanUtils.copyProperties(assoHandleResultFile, handleResultFileVO);
+                        handleResultFileVO.setGuid(assoHandleResultFile.getFileGuid());
                         handleResultFileVO.setType(systemFile.getType());
                         handleResultFileVO.setOriginalName(systemFile.getOriginalName());
                         handleResultFileVOS.add(handleResultFileVO);

+ 67 - 16
src/main/java/cn/cslg/pas/service/business/es/EsCountService.java

@@ -70,6 +70,7 @@ public class EsCountService {
         if (countVOS.size() > 1) {
             EsCountVO countVO = countVOS.get(0);
             List<String> values = countVO.getValues();
+            values.removeIf(i -> i.equals("其他"));
             List<EsCountVO> esCountVOS = new ArrayList<>();
             esCountVOS.add(countVOS.get(1));
             if (StringUtils.isNotEmpty(countVO.getFieldId())) {
@@ -79,30 +80,80 @@ public class EsCountService {
                         valueDTO.setFieldId(countVO.getFieldId());
                         valueDTO.setFieldValue(Arrays.asList(value));
                         customFields.add(valueDTO);
-                        this.getReturnData(searchCondition, customFields, taskId, projectId, esCountVOS, detailDTOS, esCountDTO, value, map);
+                        this.getReturnData(searchCondition, "",customFields, taskId, projectId,
+                                esCountVOS, detailDTOS, esCountDTO, value, map);
                     }
                 }
             } else {
                 for (String value : values) {
-                    String condition = countVO.getField() + " = " + value;
-                    if (searchCondition != null && !"".equals(searchCondition.trim())) {
-                        searchCondition = condition + " AND " + searchCondition;
+                    String condition = "";
+                    if (dateList.contains(countVO.getField())) {
+                        condition = this.getDateFormat(countVO.getField(), value);
                     } else {
-                        searchCondition = condition;
+                        condition = countVO.getField() + " = " + value;
                     }
-                    this.getReturnData(searchCondition, customFields, taskId, projectId, esCountVOS, detailDTOS, esCountDTO, value, map);
+                    this.getReturnData(searchCondition, condition, customFields, taskId, projectId,
+                            esCountVOS, detailDTOS, esCountDTO, value, map);
                 }
             }
         } else {
-            this.getReturnData(searchCondition, customFields, taskId, projectId, countVOS, detailDTOS, esCountDTO, "", map);
+            this.getReturnData(searchCondition, "", customFields, taskId, projectId, countVOS,
+                    detailDTOS, esCountDTO, "", map);
         }
         esCountDTO.setDetailDTOS(detailDTOS);
         return esCountDTO;
     }
 
-    public void getReturnData(String searchCondition, List<EsCustomFieldValueDTO> customFields, Integer taskId,
+    public String getDateFormat(String field,String value) {
+        String condition = "";
+        if (value.contains("Q") || value.contains("H") || value.length() == 9) {
+            String year = value.substring(0, value.indexOf("-"));
+            int nextYear = Integer.parseInt(year) + 1;
+            String start = "";
+            String end = "";
+            if (value.contains("Q1")) {
+                start = year + "-01";
+                end = year + "-04";
+            } else if (value.contains("Q2")) {
+                start = year + "-04";
+                end = year + "-07";
+            } else if (value.contains("Q3")) {
+                start = year + "-07";
+                end = year + "-10";
+            } else if (value.contains("Q4")) {
+                start = year + "-10";
+                end = nextYear + "-01";
+            } else if (value.contains("H1")) {
+                start = year + "-01";
+                end = year + "-07";
+            } else if (value.contains("H2")) {
+                start = year + "-07";
+                end = nextYear + "-01";
+            } else if (value.length() == 9) {
+                start = year;
+                end = value.substring(value.indexOf("-") + 1);
+            }
+            condition = field + ">=" + start + " " + "AND" + " " + field + "<" + end;
+        } else {
+            condition = field + " = " + value;
+        }
+
+        return condition;
+    }
+
+    public void getReturnData(String searchCondition,String condition, List<EsCustomFieldValueDTO> customFields, Integer taskId,
                               Integer projectId, List<EsCountVO> countVOS, List<EsCountDetailDTO> detailDTOS,
                               EsCountDTO esCountDTO, String firstName, Map<String, List<EsCountDetailDTO>> map) throws Exception {
+
+        if (StringUtils.isNotEmpty(condition)) {
+            if (searchCondition != null && !"".equals(searchCondition.trim())) {
+                searchCondition = condition + " AND " + searchCondition;
+            } else {
+                searchCondition = condition;
+            }
+        }
+
+
         if (!CollectionUtils.isEmpty(customFields)) {
             searchCondition = esService.parseCustomField(customFields);
         }
@@ -164,7 +215,7 @@ public class EsCountService {
                         } else {
                             filtersBuckets.forEach(filtersBucket -> {
                                 Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
-                                this.getDateAnalysisDTOS(filtersAgg, field, topN, detailDTOS, esCountDTO, firstName, map,values);
+                                this.getDateAnalysisDTOS(filtersAgg, field, topN, detailDTOS, esCountDTO, firstName, map, values);
                             });
                         }
                     } else if (nestedList.contains(field)) {
@@ -187,7 +238,7 @@ public class EsCountService {
                             filtersBuckets.forEach(filtersBucket -> {
                                 Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
                                 this.getChildAnalysisDTOS(filtersAgg, field, finalFieldType1, topN,
-                                        detailDTOS, esCountDTO, firstName, map,values);
+                                        detailDTOS, esCountDTO, firstName, map, values);
                             });
                         }
                     } else if (numberList.contains(field)) {
@@ -196,13 +247,13 @@ public class EsCountService {
                         } else {
                             filtersBuckets.forEach(filtersBucket -> {
                                 Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
-                                this.getNumberAnalysisDTOS(filtersAgg, field, topN, detailDTOS, esCountDTO, firstName, map,values);
+                                this.getNumberAnalysisDTOS(filtersAgg, field, topN, detailDTOS, esCountDTO, firstName, map, values);
                             });
                         }
                     } else {
                         filtersBuckets.forEach(filtersBucket -> {
                             Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
-                            this.getTermCountDTOS(filtersAgg, field, topN, detailDTOS, esCountDTO, firstName, map,values);
+                            this.getTermCountDTOS(filtersAgg, field, topN, detailDTOS, esCountDTO, firstName, map, values);
                         });
                     }
                 } else {
@@ -213,7 +264,7 @@ public class EsCountService {
                     if (CollectionUtils.isEmpty(values)) {
                         this.getDateCountDTOS(agg, field, topN, format, detailDTOS, esCountDTO);
                     } else {
-                        this.getDateAnalysisDTOS(agg, field, topN, detailDTOS, esCountDTO, firstName, map,values);
+                        this.getDateAnalysisDTOS(agg, field, topN, detailDTOS, esCountDTO, firstName, map, values);
                     }
                 } else if (nestedList.contains(field)) {
                     this.getNestedCountDTOS(agg, field, topN, detailDTOS, esCountDTO, firstName, map, values);
@@ -225,12 +276,12 @@ public class EsCountService {
                         this.getChildCountDTOS(agg, field, fieldType, topN, detailDTOS, esCountDTO);
                     } else {
                         this.getChildAnalysisDTOS(agg, field, fieldType, topN,
-                                detailDTOS, esCountDTO, firstName, map,values);
+                                detailDTOS, esCountDTO, firstName, map, values);
                     }
                 } else if (numberList.contains(field)) {
-                    this.getNumberAnalysisDTOS(agg, field, topN, detailDTOS, esCountDTO, firstName, map,values);
+                    this.getNumberAnalysisDTOS(agg, field, topN, detailDTOS, esCountDTO, firstName, map, values);
                 } else {
-                    this.getTermCountDTOS(agg, field, topN, detailDTOS, esCountDTO, firstName, map,values);
+                    this.getTermCountDTOS(agg, field, topN, detailDTOS, esCountDTO, firstName, map, values);
                 }
             }
             esCountDTO.setCondition(searchCondition);

+ 211 - 7
src/main/java/cn/cslg/pas/service/business/es/EsCustomFieldService.java

@@ -8,15 +8,16 @@ 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.EsConfigVO;
+import cn.cslg.pas.common.vo.FieldValueVO;
 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.common.vo.es.*;
 import cn.cslg.pas.domain.business.CustomField;
+import cn.cslg.pas.domain.business.CustomOption;
 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.CommonService;
+import cn.cslg.pas.service.business.CustomOptionService;
 import cn.cslg.pas.service.business.TreeNodeService;
 import cn.cslg.pas.service.query.FormatQueryService;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
@@ -54,7 +55,7 @@ public class EsCustomFieldService {
     private final ElasticsearchClient client;
     private final EsService esService;
     private final TreeNodeService treeNodeService;
-
+    private final CustomOptionService customOptionService;
     @Autowired
     private FormatQueryService formatQueryService;
 
@@ -271,6 +272,7 @@ public class EsCustomFieldService {
 
     /**
      * 批量添加自定义栏位值
+     *
      * @param vo
      * @return
      * @throws Exception
@@ -292,7 +294,7 @@ public class EsCustomFieldService {
                 }
 
             }
-        } else if (startNum >= 1 && endNum > 0){
+        } else if (startNum >= 1 && endNum > 0) {
             List<String> patentNos = this.getPatentNos(vo);
             for (String patentNo : patentNos) {
                 for (EsCustomFieldDTO fieldDTO : fieldDTOS) {
@@ -307,6 +309,7 @@ public class EsCustomFieldService {
 
     /**
      * 获取专利号列表
+     *
      * @param vo
      * @return
      * @throws Exception
@@ -383,7 +386,7 @@ public class EsCustomFieldService {
 
         int number = endNum - startNum;
         if (startNum > 0 && endNum > startNum) {
-            builder.from(startNum-1).size(number);
+            builder.from(startNum - 1).size(number);
         }
 
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
@@ -617,6 +620,7 @@ public class EsCustomFieldService {
         return esCustomFieldHistoryHit;
 
     }
+
     public PatentWithIdVO getPatentLabel(AddPatentLabelDTO addPatentLabelDTO) throws Exception {
         PatentWithIdVO patentWithIdVO = new PatentWithIdVO();
         Integer projectId = addPatentLabelDTO.getProjectId();
@@ -644,7 +648,7 @@ public class EsCustomFieldService {
         Query q3 = QueryBuilders.hasParent(t -> t.parentType("patent").query(parentQ));
 
         Query bool = null;
-            bool = QueryBuilders.bool(i -> i.must(q1, q3, q4));
+        bool = QueryBuilders.bool(i -> i.must(q1, q3, q4));
 
 
         builder.query(bool);
@@ -662,4 +666,204 @@ public class EsCustomFieldService {
         return patentWithIdVO;
     }
 
+
+    public List<ESCustomField> getPatentCustomFields(String projectId, String patentId) {
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        Query q1 = QueryBuilders.term(t -> t.field("project_id").value(projectId));
+        Query q2 = QueryBuilders.parentId(parent -> parent.type("patent").id(patentId));
+        Query bool = QueryBuilders.bool(i -> i.must(q1, q2));
+        try {
+            SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+            List<Hit<Patent>> hits = response.hits().hits();
+            hits.forEach(item -> {
+            });
+        } catch (Exception e) {
+
+        }
+        return null;
+    }
+
+
+    /**
+     * 查询自定义栏位和值
+     *
+     * @param esQueryPatentFieldsDTO
+     * @return
+     * @throws Exception
+     */
+    public List<EsPatentFieldsVO> getPatentFields(EsQueryPatentFieldsDTO esQueryPatentFieldsDTO) throws Exception {
+        List<EsPatentFieldsVO> esPatentFieldsVOS = new ArrayList<>();
+
+        Integer projectId = esQueryPatentFieldsDTO.getProjectId();
+        List<String> patentNos = esQueryPatentFieldsDTO.getPatentNos();
+        List<InnerFields> innerFields = esQueryPatentFieldsDTO.getInnerFields();
+
+        for (String patentNo : patentNos) {
+            EsPatentFieldsVO esPatentFieldsVO = new EsPatentFieldsVO();
+            esPatentFieldsVO.setPatentNo(patentNo);
+            SearchRequest.Builder builder = new SearchRequest.Builder();
+
+            //设置查询索引
+            builder.index("patent");
+            builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+                    .field(fieldSortBuilder -> fieldSortBuilder
+                            .field("custom_field.create_time").order(SortOrder.Desc)));
+            Query queries = this.getQueries(patentNo, innerFields, projectId);
+            builder.size(999);
+            builder.query(queries);
+            SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+            long total = response.hits().total().value();
+            List<ESCustomField> esCustomFields = new ArrayList<>();
+            List<InnerPatentFieldsVO> innerPatentFieldsVOS = new ArrayList<>();
+            if (total > 0) {
+                List<Hit<Patent>> hits = response.hits().hits();
+                for (Hit<Patent> hit : hits) {
+                    Patent patent = hit.source();
+                    ESCustomField esCustomField = patent.getESCustomField();
+                    ESCustomField esCustomField1 = esCustomFields.stream()
+                            .filter(item -> item.getField().equals(esCustomField.getField()) && item.getFieldType().equals(esCustomField.getFieldType()))
+                            .findFirst().orElse(null);
+
+                    if (esCustomField1 == null) {
+                        esCustomFields.add(esCustomField);
+                        InnerPatentFieldsVO innerPatentFieldsVO = new InnerPatentFieldsVO();
+                        innerPatentFieldsVO.setField(esCustomField.getField());
+                        innerPatentFieldsVO.setFieldType(esCustomField.getFieldType());
+                        List<FieldValueVO> fieldValueVOS = this.getCustomFieldValues(esCustomField.getFieldType(), esCustomField.getFieldValue());
+                        innerPatentFieldsVO.setFieldValueVOS(fieldValueVOS);
+                        innerPatentFieldsVOS.add(innerPatentFieldsVO);
+                    }
+                }
+            }
+            esPatentFieldsVO.setInnerClassFields(innerPatentFieldsVOS);
+            esPatentFieldsVOS.add(esPatentFieldsVO);
+        }
+
+        return esPatentFieldsVOS;
+    }
+
+    private Query getQueries(String patentNo, List<InnerFields> innerFields, Integer projectId) {
+
+        Query parentQ1 = QueryBuilders.term(t -> t.field("app_no.keyword").value(patentNo));
+
+        //公开号
+        Query parentQ2 = QueryBuilders.term(t -> t.field("public_no.keyword").value(patentNo));
+
+        //授权号
+        Query parentQ3 = QueryBuilders.term(t -> t.field("grant_no.keyword").value(patentNo));
+
+        Query parentQ = QueryBuilders.bool(i -> i.should(parentQ1, parentQ2, parentQ3));
+        Query patentQ1 = QueryBuilders.hasParent(t -> t.parentType("patent").query(parentQ));
+        List<Query> queries = new ArrayList<>();
+        for (InnerFields innerField : innerFields) {
+            String filedId = innerField.getFieldId();
+            Integer fieldType = innerField.getFieldType();
+            Query q1 = QueryBuilders.term(t -> t.field("custom_field.project_id").value(projectId));
+            Query q2 = QueryBuilders.term((t -> t.field("custom_field.field").value(filedId)));
+            Query q3 = QueryBuilders.term(t -> t.field("custom_field.field_type").value(fieldType));
+
+            Query fQ = QueryBuilders.bool(i -> i.must(q1, q2, q3));
+            queries.add(fQ);
+        }
+        Query query = QueryBuilders.bool(i -> i.should(queries));
+        Query query1 = QueryBuilders.bool(i -> i.must(query, patentQ1));
+        return query1;
+    }
+
+
+    /**
+     * 获得自定义字段的值
+     *
+     * @param type
+     * @param value
+     * @return
+     */
+    public List<FieldValueVO> getCustomFieldValues(Integer type, List<String> value) {
+        List<FieldValueVO> fieldValueVOS = new ArrayList<>();
+        switch (type) {
+            case 0:
+            case 1:
+            case 2:
+                value.forEach(item -> {
+                    FieldValueVO fieldValueVO = new FieldValueVO();
+                    fieldValueVO.setValue(item);
+                    fieldValueVOS.add(fieldValueVO);
+                });
+                break;
+            case 3:
+            case 4:
+            case 5:
+                if (value != null && value.size() > 0) {
+                    List<Integer> ids = FormatUtil.StringTOIntegerList(value);
+                    LambdaQueryWrapper<CustomOption> queryWrapper = new LambdaQueryWrapper<>();
+                    queryWrapper.in(CustomOption::getId, ids);
+                    List<CustomOption> customOptions = customOptionService.list(queryWrapper);
+                    customOptions.forEach(item -> {
+                        FieldValueVO fieldValueVO = new FieldValueVO();
+                        fieldValueVO.setValueId(item.getId());
+                        fieldValueVO.setValue(item.getName());
+                        fieldValueVOS.add(fieldValueVO);
+                    });
+                }
+                break;
+            case 6:
+            case 7:
+            case 8:
+
+            case 9:
+                if (value != null && value.size() > 0) {
+                    List<Integer> ids = FormatUtil.StringTOIntegerList(value);
+                    LambdaQueryWrapper<TreeNode> queryWrapper = new LambdaQueryWrapper<>();
+                    queryWrapper.in(TreeNode::getId, ids);
+                    List<TreeNode> treeNodes = treeNodeService.list(queryWrapper);
+                    treeNodes.forEach(item -> {
+                        FieldValueVO fieldValueVO = new FieldValueVO();
+                        fieldValueVO.setValueId(item.getId());
+                        fieldValueVO.setValue(item.getName());
+                        fieldValueVO.setPath(item.getPath());
+                        fieldValueVOS.add(fieldValueVO);
+                    });
+                }
+                break;
+        }
+        return fieldValueVOS;
+
+    }
+
+    public List<PatentWithIdVO> getEsCustomFields(String filedId, Integer type, Integer projectId) {
+        List<PatentWithIdVO> patentWithIdVOS = new ArrayList<>();
+        Query q1 = QueryBuilders.term(t -> t.field("custom_field.project_id").value(projectId));
+        Query q2 = QueryBuilders.term((t -> t.field("custom_field.field").value(filedId)));
+        Query q3 = QueryBuilders.term(t -> t.field("custom_field.field_type").value(type));
+
+        Query fQ = QueryBuilders.bool(i -> i.must(q1, q2, q3));
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        builder.size(999);
+        builder.query(fQ);
+        builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+                .field(fieldSortBuilder -> fieldSortBuilder
+                        .field("custom_field.create_time").order(SortOrder.Desc)));
+        try {
+            SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+            long total = response.hits().total().value();
+            if (total > 0) {
+                List<Hit<Patent>> hits = response.hits().hits();
+                for (Hit<Patent> hit : hits) {
+                    PatentWithIdVO patentWithIdVO = new PatentWithIdVO();
+                    patentWithIdVO.setPatent(hit.source());
+                    patentWithIdVO.setId(hit.id());
+                    PatentWithIdVO patentWithIdVO1 = patentWithIdVOS.stream().filter(item -> item.getPatent().getPatentJoin().getParent().equals(hit.source().getPatentJoin().getParent())).findFirst().orElse(null);
+                    if (patentWithIdVO1 == null) {
+                        patentWithIdVOS.add(patentWithIdVO);
+                    }
+                }
+
+            }
+        } catch (Exception e) {
+        }
+
+        return patentWithIdVOS;
+    }
 }

+ 78 - 0
src/main/java/cn/cslg/pas/service/business/es/EsProductPatentService.java

@@ -0,0 +1,78 @@
+package cn.cslg.pas.service.business.es;
+
+
+import cn.cslg.pas.common.dto.business.SelectClaimDTO;
+import cn.cslg.pas.common.vo.PatentWithIdVO;
+import cn.cslg.pas.common.vo.es.EsProductPatentVO;
+import cn.cslg.pas.domain.es.Patent;
+import cn.cslg.pas.domain.es.PatentJoin;
+import cn.cslg.pas.service.query.FormatQueryService;
+import co.elastic.clients.elasticsearch.ElasticsearchClient;
+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 lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class EsProductPatentService {
+    private final ElasticsearchClient client;
+    private final FormatQueryService formatQueryService;
+
+    @Autowired
+    private EsService esService;
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
+    public List<Integer> addProductPatent(EsProductPatentVO vo) throws Exception {
+        List<Integer> ids = new ArrayList<>();
+        List<String> patentNos = vo.getPatentNos();
+        for (String patentNo : patentNos) {
+            PatentWithIdVO patentWithIdVO = esService.getIdByPatentNo(patentNo);
+            String id = patentWithIdVO.getId();
+            Patent patent = new Patent();
+            PatentJoin patentJoin = new PatentJoin();
+            patentJoin.setParent(id);
+            patentJoin.setName("product");
+            patent.setPatentJoin(patentJoin);
+            List<Integer> productIds = vo.getProductIds();
+            for (Integer productId : productIds) {
+                patent.setProductId(productId);
+                esService.addChildPatent(patent, id);
+                ids.add(productId);
+            }
+        }
+        return ids;
+    }
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
+    public List<Integer> delProductPatent(EsProductPatentVO vo) throws Exception {
+        List<Integer> ids = new ArrayList<>();
+        List<Integer> productIds = vo.getProductIds();
+        for (Integer productId : productIds) {
+            SearchRequest.Builder builder = new SearchRequest.Builder();
+            //设置查询索引
+            builder.index("patent");
+            Query q = QueryBuilders.term(n -> n.field("product_id").value(productId));
+            Query query = QueryBuilders.hasChild(i -> i.type("product").query(q));
+            builder.query(query);
+            SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+            List<Hit<Patent>> hits = response.hits().hits();
+            for (Hit<Patent> hit : hits) {
+                Patent patent = hit.source();
+
+            }
+        }
+
+        return ids;
+    }
+}

+ 57 - 17
src/main/java/cn/cslg/pas/service/business/es/EsScratchWordsService.java

@@ -23,11 +23,13 @@ import cn.cslg.pas.service.business.CommonService;
 import cn.cslg.pas.service.permissions.PermissionService;
 import cn.cslg.pas.service.query.FormatQueryService;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
+import co.elastic.clients.elasticsearch._types.Time;
 import co.elastic.clients.elasticsearch._types.aggregations.*;
 import co.elastic.clients.elasticsearch._types.query_dsl.Query;
 import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
 import co.elastic.clients.elasticsearch.core.*;
 import co.elastic.clients.elasticsearch.core.search.Hit;
+import co.elastic.clients.elasticsearch.nodes.Stats;
 import co.elastic.clients.json.JsonData;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
@@ -187,7 +189,7 @@ public class EsScratchWordsService {
                 reQuery = QueryBuilders.bool(i -> i.must(riBool, q));
             }
         } catch (Exception e) {
-          System.out.println(e.getMessage());
+            System.out.println(e.getMessage());
         }
         return reQuery;
     }
@@ -253,39 +255,77 @@ public class EsScratchWordsService {
         builder.index("patent_marking");
         builder.query(searchQuerys);
         Aggregation hits = AggregationBuilders.bucketSort(i -> i.size(size.intValue()).from((current.intValue() - 1) * size.intValue()));
-        Aggregation aggregation = new Aggregation.Builder().terms(new TermsAggregation.Builder()
-                .field(esGroupFiled).build()).aggregations(new HashMap() {{
-            put("pageAgg", hits);
-        }}).build();
-
+        Aggregation aggregation = null;
+        if (esGroupFiled.equals("mark_time")) {
+            aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder().field(esGroupFiled)
+                            .calendarInterval(CalendarInterval.Day).format("yyyy-MM-dd").build())
+                    .aggregations(new HashMap() {{
+                        put("pageAgg", hits);
+                    }}).build();
+        } else {
+           aggregation = new Aggregation.Builder().terms(new TermsAggregation.Builder()
+                    .field(esGroupFiled).build()).aggregations(new HashMap() {{
+                put("pageAgg", hits);
+            }}).build();
+        }
         builder.aggregations("agg", aggregation);
         builder.size(0);
 
         //查询总数聚合
-        Aggregation totalAggregation = AggregationBuilders.cardinality(i -> i.field(esGroupFiled));
+        /*Aggregation totalAggregation = null;
+        if (esGroupFiled.equals("mark_time")) {
+            Aggregation finalAggregation = aggregation;
+            Aggregation statsAgg = new Aggregation.Builder().statsBucket(new StatsBucketAggregation.Builder()
+                    .bucketsPath(m -> m.single("statsAgg._count")).build())
+                    .aggregations(new HashMap() {{
+                        put("statsAgg", finalAggregation);
+                    }}).build();
+            totalAggregation.aggregations().put("id", statsAgg);
+        } else {
+            totalAggregation = AggregationBuilders.cardinality(i -> i.field(esGroupFiled));
+        }*/
+//        Aggregation totalAggregation = AggregationBuilders.cardinality(i -> i.field(esGroupFiled));
+//        builder.aggregations("total", totalAggregation);
+        Aggregation totalAggregation = new Aggregation.Builder().statsBucket(new StatsBucketAggregation.Builder()
+                .bucketsPath(n -> n.single("agg._count")).build()).build();
         builder.aggregations("total", totalAggregation);
         try {
             SearchResponse<Marking> response = client.search(builder.build(), Marking.class);
             Aggregate agg = response.aggregations().get("agg");
-            List<StringTermsBucket> list = agg.sterms().buckets().array();
             List<Map<String, Object>> maps = new ArrayList<>();
-            for (StringTermsBucket bucket : list) {
-                String key = bucket.key().stringValue();
-                Long count = bucket.docCount();
-                Map map = new HashMap();
-                map.put("key", key);
-                map.put("count", count);
-                maps.add(map);
+            if (esGroupFiled.equals("mark_time")) {
+                List<DateHistogramBucket> list = agg.dateHistogram().buckets().array();
+                for (DateHistogramBucket bucket : list) {
+                    String key = bucket.keyAsString();
+                    Long count = bucket.docCount();
+                    Map map = new HashMap();
+                    map.put("key", key);
+                    map.put("count", count);
+                    maps.add(map);
+                }
             }
-          maps =this.loadNameMap(maps,groupField);
+            else {
+                List<StringTermsBucket> list = agg.sterms().buckets().array();
+                for (StringTermsBucket bucket : list) {
+                    String key = bucket.key().stringValue();
+                    Long count = bucket.docCount();
+                    Map map = new HashMap();
+                    map.put("key", key);
+                    map.put("count", count);
+                    maps.add(map);
+                }
+            }
+
+            maps = this.loadNameMap(maps, groupField);
             records.setData(maps);
 
             Aggregate totalAgg = response.aggregations().get("total");
-            long total = totalAgg.cardinality().value();
+            long total = totalAgg.statsBucket().count();
             records.setTotal(total);
             records.setCurrent(current);
             records.setSize(size);
         } catch (Exception e) {
+            System.out.println(e.getMessage());
         }
         return records;
     }

+ 22 - 0
src/main/java/cn/cslg/pas/service/common/MessageService.java

@@ -100,12 +100,34 @@ public class MessageService {
         taskWebSocketDTO.setComplete(flag);
         taskWebSocketDTO.setIndex(webSocketMessageVO.getCurrentNum());
         taskWebSocketDTO.setPercentage(percentage);
+        taskWebSocketDTO.setTaskId(webSocketMessageVO.getTaskId());
+        taskWebSocketDTO.setTaskStatus(webSocketMessageVO.getState());
         if(flag) {
             WebSocketServer.sendInfo(Response.websocket(taskWebSocketDTO, ResponseEnum.PATENT_EXPORT_TASK_DONE), webSocketMessageVO.getCreateId());
         return;
         }
         WebSocketServer.sendInfo(Response.websocket(taskWebSocketDTO, ResponseEnum.PATENT_EXPORT_TASK), webSocketMessageVO.getCreateId());
+    }
+
+
+    //发送导出PDF首页消息
+    public void sendPDFExportMessage(WebSocketMessageVO webSocketMessageVO) {
+        //通过WebSocket 在每一次循环结束后 向前端发送完成进度
+        //当任务状态为完成时,flag为true
+        long percentage = (long) Math.floor((webSocketMessageVO.getCurrentNum() + 0D) / webSocketMessageVO.getAllNum() * 100D);
+        boolean flag = webSocketMessageVO.getState().equals(2);
 
+        TaskWebSocketDTO taskWebSocketDTO = new TaskWebSocketDTO();
+        taskWebSocketDTO.setComplete(flag);
+        taskWebSocketDTO.setIndex(webSocketMessageVO.getCurrentNum());
+        taskWebSocketDTO.setPercentage(percentage);
+        taskWebSocketDTO.setTaskId(webSocketMessageVO.getTaskId());
+        taskWebSocketDTO.setTaskStatus(webSocketMessageVO.getState());
+        if(flag) {
+            WebSocketServer.sendInfo(Response.websocket(taskWebSocketDTO, ResponseEnum.PATENT_PDF_EXPORT_TASK_DONE), webSocketMessageVO.getCreateId());
+            return;
+        }
+        WebSocketServer.sendInfo(Response.websocket(taskWebSocketDTO, ResponseEnum.PATENT_PDF_EXPORT_TASK), webSocketMessageVO.getCreateId());
     }
 
 }

+ 49 - 20
src/main/java/cn/cslg/pas/service/common/PatentStarApiService.java

@@ -500,6 +500,32 @@ public class PatentStarApiService {
         return "{}";
     }
 
+    //获取权利要求文本
+    public String getExternalClaim(String str) throws DocumentException {
+        SAXReader reader = new SAXReader();
+        reader.setEntityResolver(new IgnoreDTDEntityResolver());
+        Reader stringReader = new StringReader(str);
+        Document document = reader.read(stringReader);
+        XPath xpath = document.createXPath("//claim-text");
+        List<Element> element = (List<Element>) xpath.selectNodes(document);
+        if (element.size() == 0) {
+            xpath = document.createXPath("//business:ClaimText");
+            element = (List<Element>) xpath.selectNodes(document);
+        }
+        List<String> reClaims = new ArrayList<>();
+        element.forEach(item -> {
+            String claim = item.getText();
+            claim =   claim.replaceAll("\r\n|\r|\n| ", "");
+            reClaims.add(claim);
+
+        });
+        String reClaim = "";
+        if (reClaims.size() != 0) {
+            reClaim = cn.cslg.pas.common.utils.StringUtils.join(reClaims, "\r\n");
+        }
+        return reClaim;
+    }
+
     //获取说明书文本
     public String getFullText(String str) throws DocumentException {
         SAXReader reader = new SAXReader();
@@ -922,28 +948,31 @@ public class PatentStarApiService {
 
     /**
      * 根据专利号查询外部权利要求
-     * @param vo
+     * @param appNo
      * @return
      * @throws IOException
      */
-    public SelectClaimDTO selectClaim(QueryExternalFamilyVO vo) throws IOException {
-        PatentStarListDTO patentStarListDTO = new PatentStarListDTO();
-        String condition = "AN=" + vo.getPatentNo();
-        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);
+    public SelectClaimDTO queryExternalClaim(String appNo) throws IOException {
+        List<Text> claimList = new ArrayList<>();
+        //获取公开说明书
+        String cnFullXmlApi = null;
+        try {
+            cnFullXmlApi = this.getCnFullXmlApi(appNo);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        try {
+            String fullText = this.getExternalClaim(cnFullXmlApi);
+            Text pubText = new Text();
+            pubText.setTextContent(fullText);
+            pubText.setIfOrigin(true);
+            claimList.add(pubText);
+        } catch (DocumentException e) {
+            e.printStackTrace();
+        }
         SelectClaimDTO dto = new SelectClaimDTO();
-        if (!CollectionUtils.isEmpty(list)) {
-            for (PatentColumnDTO columnDTO : list) {
-                dto.setClaimContent(columnDTO.getClaim());
-            }
+        if (!CollectionUtils.isEmpty(claimList)) {
+            dto.setClaimContent(claimList);
         }
         return dto;
     }
@@ -1171,8 +1200,8 @@ public class PatentStarApiService {
                 for (ExternalLegalStatusDTO dto : statusDTOS) {
                     LegalEvent event = new LegalEvent();
                     event.setCode(dto.getLegalCode());
-                    event.setName(dto.getLegalStatusInfo());
-                    event.setDescription(dto.getJUANQI());
+                    event.setName(dto.getLegalStatus());
+                    event.setDescription(dto.getLegalStatusInfo());
                     if (StringUtils.isNotEmpty(dto.getLegalDate())) {
                         SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
                         Date date = format.parse(dto.getLegalDate());

+ 7 - 0
src/main/java/cn/cslg/pas/service/common/PersonFieldService.java

@@ -300,6 +300,11 @@ public class PersonFieldService {
         if (PatentDictionary.NAME.equals(tableName)) {
             //获得所有自定义字段
             List<AllCustomFieldVO> allCustomFieldVOS = customFieldService.getAllProjectCustomField(projectId);
+            AllCustomFieldVO allCustomFieldVO =new AllCustomFieldVO();
+            allCustomFieldVO.setName("标签");
+            allCustomFieldVO.setId(0);
+            allCustomFieldVO.setType(10);
+            allCustomFieldVOS.add(allCustomFieldVO);
             if (allCustomFieldVOS.size() != 0) {
                 for (AllCustomFieldVO item : allCustomFieldVOS) {
                     PersonSelfFieldVO personSelfFieldVO = new PersonSelfFieldVO();
@@ -307,10 +312,12 @@ public class PersonFieldService {
                     personSelfFieldVO.setName(item.getName());
                     personSelfFieldVO.setType(item.getType().toString());
                     personSelfFieldVO.setValue(item.getId().toString());
+                    personSelfFieldVO.setIfPersonal(true);
                     personSelfFieldVO.setDefaultHidden(true);
                     fieldVOS.add(personSelfFieldVO);
                 }
             }
+
         }
         //装载顺序
         Integer order = 0;

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


Неке датотеке нису приказане због велике количине промена