Przeglądaj źródła

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

lwhhszx 1 rok temu
rodzic
commit
1f46777ec6
79 zmienionych plików z 3142 dodań i 546 usunięć
  1. 11 0
      src/main/java/cn/cslg/pas/common/dto/AddProjectPersonDTO.java
  2. 12 0
      src/main/java/cn/cslg/pas/common/dto/QueryProjectPersonDTO.java
  3. 4 1
      src/main/java/cn/cslg/pas/common/dto/QueryScratchWordsDTO.java
  4. 3 0
      src/main/java/cn/cslg/pas/common/dto/business/EsCountDTO.java
  5. 2 1
      src/main/java/cn/cslg/pas/common/dto/business/EsCountDetailDTO.java
  6. 1 1
      src/main/java/cn/cslg/pas/common/dto/business/UpdateReportProjectDTO.java
  7. 59 0
      src/main/java/cn/cslg/pas/common/dto/customAnalyse/CustomAnalyseDTO.java
  8. 14 0
      src/main/java/cn/cslg/pas/common/dto/customAnalyse/CustomSettingColorConfigDTO.java
  9. 27 0
      src/main/java/cn/cslg/pas/common/dto/customAnalyse/CustomSettingConfigDTO.java
  10. 17 0
      src/main/java/cn/cslg/pas/common/dto/customAnalyse/CustomSettingLineConfigDTO.java
  11. 10 0
      src/main/java/cn/cslg/pas/common/dto/customAnalyse/CustomSettingTableConfigDTO.java
  12. 27 0
      src/main/java/cn/cslg/pas/common/dto/customAnalyse/SchemaDataDTO.java
  13. 22 0
      src/main/java/cn/cslg/pas/common/dto/customAnalyse/SchemaDimensionDTO.java
  14. 11 0
      src/main/java/cn/cslg/pas/common/dto/customAnalyse/SelectCustomAnalyseDTO.java
  15. 23 3
      src/main/java/cn/cslg/pas/common/dto/customAnalyse/SelectCustomAnalyseListDTO.java
  16. 33 0
      src/main/java/cn/cslg/pas/common/dto/customAnalyse/SourceDataDTO.java
  17. 14 0
      src/main/java/cn/cslg/pas/common/dto/customAnalyse/SourceMinAndMaxDataDTO.java
  18. 12 0
      src/main/java/cn/cslg/pas/common/dto/es/AddPatentLabelDTO.java
  19. 11 0
      src/main/java/cn/cslg/pas/common/dto/es/EsDateRangeDTO.java
  20. 17 1
      src/main/java/cn/cslg/pas/common/utils/FileUtils.java
  21. 34 0
      src/main/java/cn/cslg/pas/common/vo/ProjectPersonVO.java
  22. 51 0
      src/main/java/cn/cslg/pas/common/vo/ScratchWordsVO.java
  23. 0 1
      src/main/java/cn/cslg/pas/common/vo/customAnalyse/CustomAnalyseIdVO.java
  24. 5 0
      src/main/java/cn/cslg/pas/common/vo/customAnalyse/CustomAnalyseVO.java
  25. 2 1
      src/main/java/cn/cslg/pas/common/vo/customAnalyse/SelectCustomAnalyseVO.java
  26. 16 0
      src/main/java/cn/cslg/pas/common/vo/customAnalyse/SourceDataVO.java
  27. 16 0
      src/main/java/cn/cslg/pas/common/vo/es/EsDateRangeVO.java
  28. 2 0
      src/main/java/cn/cslg/pas/common/vo/patentCount/GetAllPatentCountVO.java
  29. 15 7
      src/main/java/cn/cslg/pas/controller/CustomAnalyseController.java
  30. 17 7
      src/main/java/cn/cslg/pas/controller/PatentController.java
  31. 37 0
      src/main/java/cn/cslg/pas/controller/PatentLabelController.java
  32. 89 0
      src/main/java/cn/cslg/pas/controller/ProjectShareController.java
  33. 29 0
      src/main/java/cn/cslg/pas/controller/ReportDocumentController.java
  34. 26 4
      src/main/java/cn/cslg/pas/controller/ScratchWordsController.java
  35. 1 1
      src/main/java/cn/cslg/pas/domain/business/AssoProjectPerson.java
  36. 16 6
      src/main/java/cn/cslg/pas/domain/business/CustomAnalysisItem.java
  37. 16 6
      src/main/java/cn/cslg/pas/domain/business/CustomAnalysisItemSchema.java
  38. 395 0
      src/main/java/cn/cslg/pas/domain/business/CustomAnalysisItemSetting.java
  39. 112 0
      src/main/java/cn/cslg/pas/domain/business/CustomAnalysisItemSource.java
  40. 7 1
      src/main/java/cn/cslg/pas/domain/business/ScratchWords.java
  41. 10 7
      src/main/java/cn/cslg/pas/domain/es/Marking.java
  42. 1 5
      src/main/java/cn/cslg/pas/domain/es/Patent.java
  43. 5 1
      src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/DateQueryBuilder.java
  44. 83 0
      src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/PersonNameQueryBuilder.java
  45. 0 1
      src/main/java/cn/cslg/pas/mapper/CustomAnalysisItemMapper.java
  46. 2 2
      src/main/java/cn/cslg/pas/mapper/CustomAnalysisItemSchemaMapper.java
  47. 14 0
      src/main/java/cn/cslg/pas/mapper/CustomAnalysisItemSettingMapper.java
  48. 15 0
      src/main/java/cn/cslg/pas/mapper/CustomAnalysisItemSourceMapper.java
  49. 65 0
      src/main/java/cn/cslg/pas/service/PatentLabelService.java
  50. 82 83
      src/main/java/cn/cslg/pas/service/ReportExportService.java
  51. 146 0
      src/main/java/cn/cslg/pas/service/business/AssoProjectPersonService.java
  52. 19 3
      src/main/java/cn/cslg/pas/service/business/CompareLiteratureService.java
  53. 97 17
      src/main/java/cn/cslg/pas/service/business/CustomAnalyseService.java
  54. 131 0
      src/main/java/cn/cslg/pas/service/business/CustomAnalysisItemSchemaService.java
  55. 95 0
      src/main/java/cn/cslg/pas/service/business/CustomAnalysisItemSettingService.java
  56. 146 0
      src/main/java/cn/cslg/pas/service/business/CustomAnalysisItemSourceService.java
  57. 4 0
      src/main/java/cn/cslg/pas/service/business/CustomFieldService.java
  58. 3 3
      src/main/java/cn/cslg/pas/service/business/PatentProjectService.java
  59. 49 15
      src/main/java/cn/cslg/pas/service/business/ScratchWordsService.java
  60. 428 75
      src/main/java/cn/cslg/pas/service/business/es/EsCountService.java
  61. 44 4
      src/main/java/cn/cslg/pas/service/business/es/EsCustomFieldService.java
  62. 19 0
      src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java
  63. 240 140
      src/main/java/cn/cslg/pas/service/business/es/EsScratchWordsService.java
  64. 7 5
      src/main/java/cn/cslg/pas/service/business/invalidReport/AssoGroupFeatureService.java
  65. 47 45
      src/main/java/cn/cslg/pas/service/business/invalidReport/EvidenceReasonService.java
  66. 1 1
      src/main/java/cn/cslg/pas/service/common/PersonFieldService.java
  67. 1 1
      src/main/java/cn/cslg/pas/service/importPatent/GetPatentPictureFromWebThread.java
  68. 2 1
      src/main/java/cn/cslg/pas/service/importPatent/SchedulingTaskService.java
  69. 20 0
      src/main/java/cn/cslg/pas/service/permissions/PermissionService.java
  70. 4 2
      src/main/resources/jsons/event.json
  71. 63 0
      src/main/resources/jsons/marking.json
  72. 49 49
      src/main/resources/jsons/patent.json
  73. 4 2
      src/main/resources/jsons/patentDigProject.json
  74. 4 2
      src/main/resources/jsons/patentProject.json
  75. 7 4
      src/main/resources/jsons/reportProject.json
  76. 7 6
      src/main/resources/mapper/CustomAnalyseMapper.xml
  77. 1 1
      src/main/resources/mapper/ReportProjectMapper.xml
  78. 5 1
      src/test/java/cn/cslg/pas/service/EsScratchWordsServiceTest.java
  79. 6 29
      src/test/java/cn/cslg/pas/service/EventServiceTests.java

+ 11 - 0
src/main/java/cn/cslg/pas/common/dto/AddProjectPersonDTO.java

@@ -0,0 +1,11 @@
+package cn.cslg.pas.common.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AddProjectPersonDTO {
+    private List<String> personIds;
+    private Integer projectId;
+}

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

@@ -0,0 +1,12 @@
+package cn.cslg.pas.common.dto;
+
+import lombok.Data;
+import org.junit.Test;
+
+@Data
+public class QueryProjectPersonDTO {
+    private Integer projectId;
+    private  String personName;
+    private Long size;
+    private Long current;
+}

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

@@ -15,5 +15,8 @@ public class QueryScratchWordsDTO {
     private String patentNo;
     private Date markTime;
     private String markSelectText;
+    private Long current;
+    private Long size;
+    private Integer projectId;
 
-}
+    }

+ 3 - 0
src/main/java/cn/cslg/pas/common/dto/business/EsCountDTO.java

@@ -3,6 +3,7 @@ package cn.cslg.pas.common.dto.business;
 import lombok.Data;
 
 import java.util.List;
+import java.util.Map;
 
 @Data
 public class EsCountDTO {
@@ -10,4 +11,6 @@ public class EsCountDTO {
     private Long allNumber;
     private String condition;
     private List<EsCountDetailDTO> detailDTOS;
+    //多维分析返回数据
+    private Map<String, List<EsCountDetailDTO>> analyseMap;
 }

+ 2 - 1
src/main/java/cn/cslg/pas/common/dto/business/EsCountDetailDTO.java

@@ -18,5 +18,6 @@ public class EsCountDetailDTO {
     private Long number;
     //限制数量
     private Integer topN;
-
+    //在一维数据下显示的名称
+    private String firstName;
 }

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

@@ -44,7 +44,7 @@ public class UpdateReportProjectDTO {
     //0无效分析 1第三方意见 2稳定性分析 3FTO调查 4
     private Integer reportType;
     @Schema(description = "报告状态")
-    private Integer stauts;
+    private Integer status;
     @Schema(description = "案件编号")
     private String caseNumber;
     @Schema(description = "发文序号")

+ 59 - 0
src/main/java/cn/cslg/pas/common/dto/customAnalyse/CustomAnalyseDTO.java

@@ -0,0 +1,59 @@
+package cn.cslg.pas.common.dto.customAnalyse;
+
+import cn.cslg.pas.domain.business.CustomAnalysisItemSetting;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class CustomAnalyseDTO {
+
+    private Integer id;
+
+    private String uid;
+
+    private String name;
+
+    private Integer parentId;
+
+    private Integer permissions;
+
+    private Integer projectId;
+
+    private Integer tenantId;
+
+    private Integer sort;
+
+    private Integer type;
+
+    private Integer status;
+
+    private String createId;
+
+    private String createName;
+
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 维度数据
+     */
+    private SchemaDimensionDTO schema;
+
+    /**
+     * 图表设置
+     */
+    private CustomAnalysisItemSetting setting;
+
+    /**
+     * 数据源
+     */
+    private SourceDataDTO source;
+
+    private String parentName;
+
+}

+ 14 - 0
src/main/java/cn/cslg/pas/common/dto/customAnalyse/CustomSettingColorConfigDTO.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.common.dto.customAnalyse;
+
+import lombok.Data;
+
+@Data
+public class CustomSettingColorConfigDTO {
+    private String name;
+    private String color;
+
+    public CustomSettingColorConfigDTO() {
+        this.name = "";
+        this.color = "";
+    }
+}

+ 27 - 0
src/main/java/cn/cslg/pas/common/dto/customAnalyse/CustomSettingConfigDTO.java

@@ -0,0 +1,27 @@
+package cn.cslg.pas.common.dto.customAnalyse;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class CustomSettingConfigDTO {
+    private List<CustomSettingTableConfigDTO> table;
+    private CustomSettingLineConfigDTO line;
+    private List<CustomSettingColorConfigDTO> color;
+
+    public CustomSettingConfigDTO() {
+        this.line = new CustomSettingLineConfigDTO();
+        List<CustomSettingTableConfigDTO> configs = new ArrayList<>();
+        for (int i = 0; i < 10; i++) {
+            CustomSettingTableConfigDTO configDTO = new CustomSettingTableConfigDTO();
+            configDTO.setMax(0);
+            configDTO.setMin(0);
+            configDTO.setColor("");
+            configs.add(configDTO);
+        }
+        this.table = configs;
+        this.color = new ArrayList<>();
+    }
+}

+ 17 - 0
src/main/java/cn/cslg/pas/common/dto/customAnalyse/CustomSettingLineConfigDTO.java

@@ -0,0 +1,17 @@
+package cn.cslg.pas.common.dto.customAnalyse;
+
+import lombok.Data;
+
+@Data
+public class CustomSettingLineConfigDTO {
+
+    private String name;
+    private Integer operator;
+    private Boolean enable;
+
+    public CustomSettingLineConfigDTO() {
+        this.name = "";
+        this.operator = 0;
+        this.enable = false;
+    }
+}

+ 10 - 0
src/main/java/cn/cslg/pas/common/dto/customAnalyse/CustomSettingTableConfigDTO.java

@@ -0,0 +1,10 @@
+package cn.cslg.pas.common.dto.customAnalyse;
+
+import lombok.Data;
+
+@Data
+public class CustomSettingTableConfigDTO {
+    private Integer min;
+    private Integer max;
+    private String color;
+}

+ 27 - 0
src/main/java/cn/cslg/pas/common/dto/customAnalyse/SchemaDataDTO.java

@@ -0,0 +1,27 @@
+package cn.cslg.pas.common.dto.customAnalyse;
+
+import lombok.Data;
+
+@Data
+public class SchemaDataDTO {
+    private Integer field;
+    private Integer expand;
+    private Integer ptype;
+    private Integer type;
+    private Integer num;
+    private Integer merge;
+
+    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) {
+        this.field = field;
+        this.expand = expand;
+    }
+}

+ 22 - 0
src/main/java/cn/cslg/pas/common/dto/customAnalyse/SchemaDimensionDTO.java

@@ -0,0 +1,22 @@
+package cn.cslg.pas.common.dto.customAnalyse;
+
+public class SchemaDimensionDTO {
+    private SchemaDataDTO x;
+    private SchemaDataDTO y;
+
+    public SchemaDataDTO getX() {
+        return x;
+    }
+
+    public void setX(SchemaDataDTO x) {
+        this.x = x;
+    }
+
+    public SchemaDataDTO getY() {
+        return y;
+    }
+
+    public void setY(SchemaDataDTO y) {
+        this.y = y;
+    }
+}

+ 11 - 0
src/main/java/cn/cslg/pas/common/dto/customAnalyse/SelectCustomAnalyseDTO.java

@@ -5,4 +5,15 @@ import lombok.Data;
 @Data
 public class SelectCustomAnalyseDTO {
 
+    private String parentName;
+
+    private String name;
+
+    private Integer parentId;
+
+    private Integer permissions;
+
+    private Integer sort;
+
+    private Integer type;
 }

+ 23 - 3
src/main/java/cn/cslg/pas/common/dto/customAnalyse/SelectCustomAnalyseListDTO.java

@@ -1,16 +1,36 @@
 package cn.cslg.pas.common.dto.customAnalyse;
 
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
+import java.util.Date;
+import java.util.List;
+
 @Data
 public class SelectCustomAnalyseListDTO {
 
-    private String name;
+    private String uid;
 
+    private Integer id;
+    //名称
+    private String name;
+    //1系统公有 2系统私有 3数据库共有 4数据库私有
     private Integer permissions;
-
+    //顺序
     private Integer sort;
-
+    //类型 1组别  2分析项
     private Integer type;
+
+    private Integer parentId;
+    private Integer projectId;
+    private Integer tenantId;
+    private String createId;
+    private String createName;
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    private List<SelectCustomAnalyseListDTO> children;
 }

+ 33 - 0
src/main/java/cn/cslg/pas/common/dto/customAnalyse/SourceDataDTO.java

@@ -0,0 +1,33 @@
+package cn.cslg.pas.common.dto.customAnalyse;
+
+
+import cn.cslg.pas.domain.business.CustomAnalysisItemSource;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SourceDataDTO {
+    private List<CustomAnalysisItemSource> x;
+    private List<CustomAnalysisItemSource> y;
+
+    public SourceDataDTO() {
+        this.x = new ArrayList<>();
+        this.y = new ArrayList<>();
+    }
+
+    public List<CustomAnalysisItemSource> getX() {
+        return x;
+    }
+
+    public void setX(List<CustomAnalysisItemSource> x) {
+        this.x = x;
+    }
+
+    public List<CustomAnalysisItemSource> getY() {
+        return y;
+    }
+
+    public void setY(List<CustomAnalysisItemSource> y) {
+        this.y = y;
+    }
+}

+ 14 - 0
src/main/java/cn/cslg/pas/common/dto/customAnalyse/SourceMinAndMaxDataDTO.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.common.dto.customAnalyse;
+
+import lombok.Data;
+
+@Data
+public class SourceMinAndMaxDataDTO {
+    private Integer value;
+    private Integer operator;
+
+    public SourceMinAndMaxDataDTO() {
+        this.operator = 0;
+        this.value = 0;
+    }
+}

+ 12 - 0
src/main/java/cn/cslg/pas/common/dto/es/AddPatentLabelDTO.java

@@ -0,0 +1,12 @@
+package cn.cslg.pas.common.dto.es;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AddPatentLabelDTO {
+    private Integer projectId;
+    private String patentNo;
+    private List<String> labels;
+}

+ 11 - 0
src/main/java/cn/cslg/pas/common/dto/es/EsDateRangeDTO.java

@@ -0,0 +1,11 @@
+package cn.cslg.pas.common.dto.es;
+
+import lombok.Data;
+
+@Data
+public class EsDateRangeDTO {
+
+    private String minDate;
+
+    private String maxDate;
+}

+ 17 - 1
src/main/java/cn/cslg/pas/common/utils/FileUtils.java

@@ -110,7 +110,7 @@ public class FileUtils {
 
         URL url = new URL(dataUrl);  //想要读取的url地址
         InputStream in = url.openStream();
-        File file = File.createTempFile("new_url", ".jpg");  //创建文件
+        File file = File.createTempFile("new_url", ".pdf");  //创建文件
         OutputStream os = new FileOutputStream(file);  //创建文件输出流
         int bytesRead;
         byte[] buffer = new byte[8192];
@@ -123,7 +123,23 @@ public class FileUtils {
         in.close();
         return file;
     }
+    public static  File getPictureFileByUrl(String dataUrl) throws IOException {
 
+        URL url = new URL(dataUrl);  //想要读取的url地址
+        InputStream in = url.openStream();
+        File file = File.createTempFile("new_url", ".jpg");  //创建文件
+        OutputStream os = new FileOutputStream(file);  //创建文件输出流
+        int bytesRead;
+        byte[] buffer = new byte[8192];
+        int len = 8192;
+        while ((bytesRead = in.read(buffer, 0, len)) != -1) {
+            os.write(buffer, 0, bytesRead);
+        }
+        //关闭释放流
+        os.close();
+        in.close();
+        return file;
+    }
     public String getPath(String url) {
         return getStaticPath(COMMON_FILE) + url;
     }

+ 34 - 0
src/main/java/cn/cslg/pas/common/vo/ProjectPersonVO.java

@@ -0,0 +1,34 @@
+package cn.cslg.pas.common.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import org.joda.time.DateTime;
+
+import java.util.Date;
+
+@Data
+public class ProjectPersonVO {
+
+    /**
+     * 人员id
+     */
+    private String personId;
+
+    private String personName;
+    /**
+     * 人员角色
+     * 0管理员1查看人员2禁止查看人员3分享人员
+     */
+    private Integer role;
+
+    /**
+     * 创建人id
+     */
+    private String createId;
+    private String createName;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+}

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

@@ -0,0 +1,51 @@
+package cn.cslg.pas.common.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@Data
+public class ScratchWordsVO {
+    private String id;
+
+    private   Boolean isPublic;
+
+
+    private  String markColor;
+
+
+    private String markNoteText;
+
+
+    private  Integer markType;
+
+    private String markSelectField;
+
+
+    private  String markSelectText;
+
+
+    private Integer markSite;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date markTime;
+
+
+    private String markUserId;
+
+    private Integer publicScope;
+
+
+    private Integer projectId;
+
+
+    private Integer publicTenantId;
+    private String createName;
+    private String patentId;
+    private String patentNo;
+    private String patentTitle;
+}

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

@@ -7,5 +7,4 @@ public class CustomAnalyseIdVO {
 
     private Integer id;
 
-    private Integer type;
 }

+ 5 - 0
src/main/java/cn/cslg/pas/common/vo/customAnalyse/CustomAnalyseVO.java

@@ -1,8 +1,11 @@
 package cn.cslg.pas.common.vo.customAnalyse;
 
 
+import cn.cslg.pas.domain.business.CustomAnalysisItem;
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class CustomAnalyseVO {
 
@@ -23,4 +26,6 @@ public class CustomAnalyseVO {
     private Integer type;
 
     private Integer status;
+
+    private List<CustomAnalysisItem> children;
 }

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

@@ -5,7 +5,8 @@ import lombok.Data;
 @Data
 public class SelectCustomAnalyseVO {
 
+    //专题库id
     private Integer projectId;
-
+    //类型 1组别  2分析项
     private Integer type;
 }

+ 16 - 0
src/main/java/cn/cslg/pas/common/vo/customAnalyse/SourceDataVO.java

@@ -0,0 +1,16 @@
+package cn.cslg.pas.common.vo.customAnalyse;
+
+import cn.cslg.pas.domain.business.CustomAnalysisItemSource;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SourceDataVO {
+    private Integer expandId;
+    private Integer fieldId;
+    private String uid;
+    private String patentKey;
+    private String dimension;
+    private List<CustomAnalysisItemSource> source;
+}

+ 16 - 0
src/main/java/cn/cslg/pas/common/vo/es/EsDateRangeVO.java

@@ -0,0 +1,16 @@
+package cn.cslg.pas.common.vo.es;
+
+import cn.cslg.pas.common.dto.es.EsCustomFieldValueDTO;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class EsDateRangeVO {
+
+    private String condition;
+    private Integer projectId;
+    private List<EsCustomFieldValueDTO> customFields;
+    private Integer taskId;
+    private String field;
+}

+ 2 - 0
src/main/java/cn/cslg/pas/common/vo/patentCount/GetAllPatentCountVO.java

@@ -24,9 +24,11 @@ public class GetAllPatentCountVO {
      * 是否统计
      */
     private Boolean ifStats;
+    private Boolean ifGroup;
 
     //-1专利著录 0自定义字段 7产品 8产品类别 9技术分类
     private Integer filedKind;
     private Boolean defaultShowStats;
     private String field;
+    private String groupBy;
 }

+ 15 - 7
src/main/java/cn/cslg/pas/controller/CustomAnalyseController.java

@@ -1,6 +1,7 @@
 package cn.cslg.pas.controller;
 
 import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.customAnalyse.CustomAnalyseDTO;
 import cn.cslg.pas.common.dto.customAnalyse.SelectCustomAnalyseDTO;
 import cn.cslg.pas.common.dto.customAnalyse.SelectCustomAnalyseListDTO;
 import cn.cslg.pas.common.utils.Response;
@@ -24,37 +25,44 @@ public class CustomAnalyseController {
     @Autowired
     private CustomAnalyseService customAnalyseService;
 
-    @Operation(summary = "查询组别")
+    @Operation(summary = "查询组别/分析项")
     @PostMapping("/queryAnalyseGroup")
     public Response queryAnalyseGroup(@RequestBody SelectCustomAnalyseVO vo) {
         List<SelectCustomAnalyseListDTO> list = customAnalyseService.queryAnalyseGroup(vo);
         return Response.success(list);
     }
 
-    @Operation(summary = "查询组别详情")
+    @Operation(summary = "根据id查询组别/分析项详情")
     @PostMapping("/queryAnalyseGroupDetail")
     public Response queryAnalyseGroupDetail(@RequestBody CustomAnalyseIdVO vo) {
         SelectCustomAnalyseDTO dto = customAnalyseService.queryAnalyseGroupDetail(vo);
         return Response.success(dto);
     }
 
-    @Operation(summary = "添加组别")
+    @Operation(summary = "查询组别/分析项详情")
+    @PostMapping("/queryAnalyseDetail")
+    public Response queryAnalyseDetail(@RequestBody CustomAnalyseIdVO vo) {
+        CustomAnalyseDTO dto = customAnalyseService.queryAnalyseDetail(vo);
+        return Response.success(dto);
+    }
+
+    @Operation(summary = "添加组别/分析项")
     @PostMapping("/addAnalyseGroup")
-    public Response addAnalyseGroup(@RequestBody CustomAnalyseVO vo) {
+    public Response addAnalyseGroup(@RequestBody CustomAnalyseDTO vo) throws Exception {
         Integer groupId = customAnalyseService.addAnalyseGroup(vo);
         return Response.success(groupId);
     }
 
     @Operation(summary = "编辑组别")
     @PostMapping("/editAnalyseGroup")
-    public Response editAnalyseGroup(@RequestBody CustomAnalyseVO vo) {
+    public Response editAnalyseGroup(@RequestBody CustomAnalyseDTO vo) throws Exception {
         Integer groupId = customAnalyseService.editAnalyseGroup(vo);
         return Response.success(groupId);
     }
 
-    @Operation(summary = "删除组别")
+    @Operation(summary = "删除组别/分析项")
     @PostMapping("/delAnalyseGroup")
-    public Response delAnalyseGroup(@RequestBody CustomAnalyseIdVO vo) {
+    public Response delAnalyseGroup(@RequestBody CustomAnalyseIdVO vo) throws Exception {
         Integer groupId = customAnalyseService.delAnalyseGroup(vo);
         return Response.success(groupId);
     }

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

@@ -6,6 +6,7 @@ import cn.cslg.pas.common.dto.PatentExport.PatentExportParams;
 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.Records;
 import cn.cslg.pas.common.model.request.StringRequest;
 import cn.cslg.pas.common.utils.*;
@@ -17,6 +18,7 @@ import cn.cslg.pas.common.vo.business.EsAllCountVO;
 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.factorys.businessFactory.Business;
 import cn.cslg.pas.factorys.businessFactory.BusinessFactory;
 import cn.cslg.pas.service.business.CustomAnalyseService;
@@ -116,13 +118,6 @@ public class PatentController {
         return Response.success(records);
     }
 
-    @Operation(summary = "专利的聚合统计")
-    @PostMapping("/esCountAnalysis")
-    public Response esCountAnalysis(@RequestBody EsAllCountVO countVO) throws Exception {
-        EsCountDTO dto = esCountService.esCountAnalysis(countVO);
-        return Response.success(dto);
-    }
-
     @Operation(summary = "根据专利号查询内部专利")
     @GetMapping("/queryPatentByNo")
     public Response queryPatentByNo(String patentNo) throws Exception {
@@ -152,6 +147,21 @@ public class PatentController {
         return Response.success(dto);
     }
 
+    //----------------------------统计分析-------------------------
+    @Operation(summary = "专利的聚合统计")
+    @PostMapping("/esCountAnalysis")
+    public Response esCountAnalysis(@RequestBody EsAllCountVO countVO) throws Exception {
+        EsCountDTO dto = esCountService.esCountAnalysis(countVO);
+        return Response.success(dto);
+    }
+
+    @Operation(summary = "分析统计的栏位日期最大/最小值")
+    @PostMapping("/getFieldRange")
+    public Response getFieldRange(@RequestBody EsDateRangeVO rangeVO) throws Exception {
+        EsDateRangeDTO dto = esCountService.getFieldRange(rangeVO);
+        return Response.success(dto);
+    }
+
     //------------------------合并-----------------------------
     @Operation(summary = "专利列表上新增发明人/权利人/申请人合并")
     @PostMapping("/mergePerson")

+ 37 - 0
src/main/java/cn/cslg/pas/controller/PatentLabelController.java

@@ -0,0 +1,37 @@
+package cn.cslg.pas.controller;
+
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.es.AddPatentLabelDTO;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.service.PatentLabelService;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 专利标签管理
+ */
+@Slf4j
+@RequestMapping(Constants.API_XiaoSHI + "/patentLabel")
+@RestController
+public class PatentLabelController {
+    @Autowired
+    private PatentLabelService patentLabelService;
+
+    @Operation(summary = "添加标签接口")
+    @PostMapping("/addPatentLabel")
+    public Response addPatentLabel(@RequestBody AddPatentLabelDTO addPatentLabelDTO) {
+        String id = null;
+        try {
+            id = patentLabelService.addPatentLabel(addPatentLabelDTO);
+        } catch (Exception e) {
+
+        }
+        return Response.success(id);
+    }
+}

+ 89 - 0
src/main/java/cn/cslg/pas/controller/ProjectShareController.java

@@ -0,0 +1,89 @@
+package cn.cslg.pas.controller;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.AddProjectPersonDTO;
+import cn.cslg.pas.common.dto.QueryProjectPersonDTO;
+import cn.cslg.pas.common.dto.business.AvoidDesignInsertDTO;
+import cn.cslg.pas.common.dto.business.GetFeatureSplitDTO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.vo.business.AvoidDesignWholeVO;
+import cn.cslg.pas.exception.ConditionException;
+import cn.cslg.pas.exception.UnLoginException;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.business.AssoProjectPersonService;
+import cn.cslg.pas.service.business.AvoidDesignService;
+import cn.cslg.pas.service.business.AvoidDesignWholeService;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 项目分享管理
+ *
+ * @Author xiexiang
+ * @Date 2023/12/5
+ */
+@Slf4j
+@RequestMapping(Constants.API_XiaoSHI + "/patentShare")
+@RestController
+public class ProjectShareController {
+    @Autowired
+    private AssoProjectPersonService assoProjectPersonService;
+
+
+    @Operation(summary = "新增项目分享")
+    @PostMapping("/addProjectShare")
+    public Response addProjectShare(@RequestBody AddProjectPersonDTO addProjectPersonDTO) throws Exception {
+        if (addProjectPersonDTO == null) {
+            return Response.error("入参为null");
+        }
+            Records records =new Records();
+            try {
+              List<Integer>  ids = assoProjectPersonService.addProjectShare(addProjectPersonDTO);
+              records.setData(ids);
+            }
+            catch (Exception e) {
+                return Response.error(e.getMessage());
+          }
+            return Response.success(records);
+
+    }
+
+    @Operation(summary = "删除分享记录")
+    @PostMapping("/removeProjectShare")
+    public Response removeProjectShare(@RequestBody List<Integer> ids) throws Exception {
+        Records records = new Records();
+        try {
+            List<Integer> reIds = assoProjectPersonService.removeProjectShare(ids);
+            records.setData(reIds);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+
+        }
+
+        return Response.success(records);
+    }
+
+
+    @Operation(summary = "查询分享记录")
+    @PostMapping("/queryProjectShare")
+    public Response queryProjectShare(@RequestBody QueryProjectPersonDTO queryProjectPersonDTO) throws Exception {
+        Records records = new Records();
+        try {
+            records = assoProjectPersonService.queryProjectShare(queryProjectPersonDTO);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+
+        }
+
+        return Response.success(records);
+    }
+}

+ 29 - 0
src/main/java/cn/cslg/pas/controller/ReportDocumentController.java

@@ -0,0 +1,29 @@
+package cn.cslg.pas.controller;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.service.ReportExportService;
+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.io.IOException;
+
+@Slf4j
+@RequestMapping(Constants.API_XiaoSHI + "/reportDocument")
+@RestController
+public class ReportDocumentController {
+    @Autowired
+    private ReportExportService reportExportService;
+    @GetMapping(value = "/exportReport")
+    @Operation(summary = "导出报告")
+    public Response exportReport(Integer projectId, Integer templeId) throws IOException {
+        Records records =new Records();
+        String guid =reportExportService.exportReport(projectId, templeId);
+        records.setData(guid);
+        return Response.success(records);
+    }
+}

+ 26 - 4
src/main/java/cn/cslg/pas/controller/ScratchWordsController.java

@@ -1,12 +1,15 @@
 package cn.cslg.pas.controller;
 
 import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.QueryScratchWordsDTO;
 import cn.cslg.pas.common.dto.business.ScratchWordsDTO;
 import cn.cslg.pas.common.dto.business.UpdateScratchWordsDTO;
 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.domain.business.ScratchWords;
 import cn.cslg.pas.service.business.ScratchWordsService;
+import cn.cslg.pas.service.business.es.EsScratchWordsService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -27,7 +30,7 @@ import java.util.List;
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class ScratchWordsController {
     private final ScratchWordsService scratchWordsService;
-
+    private final EsScratchWordsService esScratchWordsService;
     @Operation(summary = "新增划词高亮")
     @PostMapping("/add")
     public Response add(@RequestBody ScratchWords scratchWords) {
@@ -55,8 +58,8 @@ public class ScratchWordsController {
     }
 
     @Operation(summary = "删除标注")
-    @PostMapping("/removeScratchWrods")
-    public Response removeScratchWrods(@RequestBody List<String> ids) {
+    @PostMapping("/removeScratchWords")
+    public Response removeScratchWords(@RequestBody List<String> ids) {
         if (ids != null && !ids.isEmpty()) {
             List<String> deleteIds = scratchWordsService.removeById(ids);
             Records records = new Records();
@@ -66,6 +69,25 @@ public class ScratchWordsController {
             return Response.error("删除失败");
         }
     }
+    @Operation(summary = "查询划词")
+    @PostMapping("/queryScratchWords")
+    public Response query(@RequestBody StringRequest stringRequest) {
+        if (stringRequest != null) {
+            Records records= scratchWordsService.query(stringRequest);
 
-
+            return Response.success(records);
+        } else {
+            return Response.error("请求参数为null");
+        }
+    }
+    @Operation(summary = "划词分组")
+    @PostMapping("/queryScratchWordsGroup")
+    public Response queryScratchWordsGroup(@RequestBody StringRequest stringRequest) {
+        if (stringRequest != null) {
+            Records records= esScratchWordsService.groupScratchWord(stringRequest);
+            return Response.success(records);
+        } else {
+            return Response.error("请求参数为null");
+        }
+    }
 }

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

@@ -16,7 +16,7 @@ import org.joda.time.DateTime;
 public class AssoProjectPerson extends BaseEntity<AssoProjectPerson> {
 
     /**
-     * 产品id
+     * 项目id
      */
     @TableField(value = "project_id")
     private Integer projectId;

+ 16 - 6
src/main/java/cn/cslg/pas/domain/business/CustomAnalysisItem.java

@@ -1,9 +1,12 @@
 package cn.cslg.pas.domain.business;
 
 import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.FieldFill;
 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;
 
@@ -17,6 +20,9 @@ import java.util.Date;
 @TableName("os_custom_analysis_item")
 public class CustomAnalysisItem extends BaseEntity<CustomAnalysisItem> {
 
+    @TableField(value = "uid")
+    private String uid;
+
     @TableField(value = "name")
     private String name;
 
@@ -41,15 +47,19 @@ public class CustomAnalysisItem extends BaseEntity<CustomAnalysisItem> {
     @TableField(value = "status")
     private Integer status;
 
-    @TableField(value = "creator_id")
-    private String creatorId;
+    @TableField(value = "create_id")
+    private String createId;
 
-    @TableField(value = "creator")
-    private String creator;
+    @TableField(value = "create_name")
+    private String createName;
 
-    @TableField(value = "create_time")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "create_time",fill = FieldFill.INSERT_UPDATE)
     private Date createTime;
 
-    @TableField(value = "update_time")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
     private Date updateTime;
 }

+ 16 - 6
src/main/java/cn/cslg/pas/domain/business/CustomAnalysisItemSchema.java

@@ -1,9 +1,12 @@
 package cn.cslg.pas.domain.business;
 
 import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.FieldFill;
 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;
 
@@ -17,6 +20,9 @@ import java.util.Date;
 @TableName("os_custom_analysis_item_schema")
 public class CustomAnalysisItemSchema extends BaseEntity<CustomAnalysisItemSchema> {
 
+    @TableField(value = "uid")
+    private String uid;
+
     @TableField(value = "dimension")
     private String dimension;
 
@@ -38,16 +44,20 @@ public class CustomAnalysisItemSchema extends BaseEntity<CustomAnalysisItemSchem
     @TableField(value = "status")
     private Integer status;
 
-    @TableField(value = "creator_id")
-    private Integer creatorId;
+    @TableField(value = "create_id")
+    private String createId;
 
-    @TableField(value = "creator")
-    private String creator;
+    @TableField(value = "create_name")
+    private String createName;
 
-    @TableField(value = "create_time")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "create_time",fill = FieldFill.INSERT_UPDATE)
     private Date createTime;
 
-    @TableField(value = "update_time")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
     private Date updateTime;
 
 }

+ 395 - 0
src/main/java/cn/cslg/pas/domain/business/CustomAnalysisItemSetting.java

@@ -0,0 +1,395 @@
+package cn.cslg.pas.domain.business;
+
+import cn.cslg.pas.common.dto.customAnalyse.CustomSettingConfigDTO;
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+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 zero
+ * @Date 2024/01/15
+ */
+@Data
+@TableName("os_custom_analysis_item_setting")
+public class CustomAnalysisItemSetting extends BaseEntity<CustomAnalysisItemSetting> {
+
+    public CustomAnalysisItemSetting() {
+        this.type = 1;
+        this.showType = 0;
+        this.tableType = 0;
+        this.theme = "customed";
+        this.titleSize = 14;
+        this.dataSize = 14;
+        this.axisSize = 14;
+        this.dataLabel = false;
+        this.dataLabel2 = false;
+        this.dataLabel3 = false;
+        this.title1Dir = 0;
+        this.title1 = "";
+        this.title2 = "";
+        this.dataPosition = "top";
+        this.fontFamily = "sans-serif";
+        this.fontFamily2 = "sans-serif";
+        this.fontFamily3 = "sans-serif";
+        this.fontFamily4 = "sans-serif";
+        this.fontWeight = false;
+        this.fontWeight2 = false;
+        this.nameLocation = "end";
+        this.nameLocation2 = "end";
+        this.width = "100";
+        this.height = "650";
+        this.widthUnit = "%";
+        this.heightUnit = "px";
+        this.splitLine = false;
+        this.splitLine2 = false;
+        this.legend = true;
+        this.gridTop = "0";
+        this.gridLeft = "0";
+        this.gridBottom = "0";
+        this.gridRight = "0";
+        this.labelColor = "#000000";
+        this.legendColor = "#000000";
+        this.legendLocation = "top";
+        this.legendFontSize = "13";
+        this.fontSize = "13";
+        this.fontSize2 = "13";
+        this.fontColor = "#000000";
+        this.fontColor2 = "#000000";
+        this.show = true;
+        this.show2 = true;
+        this.interval = true;
+        this.interval2 = true;
+        this.rotate = "0";
+        this.rotate2 = "0";
+        this.paddingTop = 0;
+        this.paddingBottom = 0;
+        this.paddingRight = 0;
+        this.paddingLeft = 0;
+        this.paddingTop2 = 0;
+        this.paddingLeft2 = 0;
+        this.paddingBottom2 = 0;
+        this.paddingRight2 = 0;
+        this.type2 = "scroll";
+        this.barWidth = "";
+        this.scatterSize = "0";
+        this.config = new CustomSettingConfigDTO();
+    }
+
+    @TableField(value = "uid")
+    private String uid;
+
+    @TableField(value = "type")
+    private Integer type;
+
+    @TableField(value = "show_type")
+    private Integer showType;
+
+    @TableField(value = "table_type")
+    private Integer tableType;
+
+    @TableField(value = "theme")
+    private String theme;
+
+    @TableField(value = "title1")
+    private String title1;
+
+    @TableField(value = "title2")
+    private String title2;
+
+    @TableField(value = "data_label")
+    private Boolean dataLabel;
+
+    @TableField(value = "data_position")
+    private String dataPosition;
+
+    @TableField(value = "data_size")
+    private Integer dataSize;
+
+    @TableField(value = "title_size")
+    private Integer titleSize;
+
+    @TableField(value = "axis_size")
+    private Integer axisSize;
+
+    @TableField(value = "title1_dir")
+    private Integer title1Dir;
+
+    @TableField(value = "status")
+    private Integer status;
+    /**
+     * 表格设置
+     */
+    @TableField(value = "table_config")
+    private String tableConfig;
+    /**
+     * 颜色
+     */
+    @TableField(value = "color_config")
+    private String colorConfig;
+
+    /**
+     * 辅助线
+     */
+    @TableField(value = "line_config")
+    private String lineConfig;
+
+    /**
+     * 字体
+     */
+    @TableField(value = "font_family")
+    private String fontFamily;
+
+    @TableField(exist = false)
+    private CustomSettingConfigDTO config;
+
+    @TableField(value = "create_id")
+    private String createId;
+
+    @TableField(value = "create_name")
+    private String createName;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "create_time",fill = FieldFill.INSERT_UPDATE)
+    private Date createTime;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+
+    /**
+     * 坐标轴(X)加粗
+     */
+    @TableField(value = "font_weight")
+    private Boolean fontWeight;
+
+    /**
+     * 坐标轴(Y)加粗
+     */
+    @TableField(value = "font_weight2")
+    private Boolean fontWeight2;
+
+    @TableField(value = "name_location")
+    private String nameLocation;
+    /**
+     * 高
+     */
+    @TableField(value = "height")
+    private String height;
+
+    /**
+     * 宽
+     */
+    @TableField(value = "width")
+    private String width;
+
+    /**
+     * 高(单位)
+     */
+    @TableField(value = "height_unit")
+    private String heightUnit;
+
+    /**
+     * 宽(单位)
+     */
+    @TableField(value = "width_unit")
+    private String widthUnit;
+
+    /**
+     * 坐标轴X(线)是否显示
+     */
+    @TableField(value = "split_line")
+    private Boolean splitLine;
+
+    /**
+     * 坐标轴Y(线)是否显示
+     */
+    @TableField(value = "split_line2")
+    private Boolean splitLine2;
+
+    /**
+     * 图例是否显示
+     */
+    @TableField(value = "legend")
+    private Boolean legend;
+
+    /**
+     * 图例位置
+     */
+    @TableField(value = "legend_location")
+    private String legendLocation;
+
+    /**
+     * 图表位置
+     */
+    @TableField(value = "grid_top")
+    private String gridTop;
+    @TableField(value = "grid_left")
+    private String gridLeft;
+    @TableField(value = "grid_right")
+    private String gridRight;
+    @TableField(value = "grid_bottom")
+    private String gridBottom;
+
+    /**
+     * 标签字体
+     */
+    @TableField(value = "font_family2")
+    private String fontFamily2;
+
+    /**
+     * 标签字体颜色
+     */
+    @TableField(value = "label_color")
+    private String labelColor;
+
+    /**
+     * 图例字体
+     */
+    @TableField(value = "font_family3")
+    private String fontFamily3;
+
+    /**
+     * 图例字体大小
+     */
+    @TableField(value = "legend_font_size")
+    private String legendFontSize;
+
+    /**
+     * 图例字体颜色
+     */
+    @TableField(value = "legend_color")
+    private String legendColor;
+
+    /**
+     * 坐标轴(Y)字体
+     */
+    @TableField(value = "font_family4")
+    private String fontFamily4;
+
+    /**
+     * 坐标轴(X)字体大小
+     */
+    @TableField(value = "font_size")
+    private String fontSize;
+
+    /**
+     * 坐标轴(Y)字体大小
+     */
+    @TableField(value = "font_size2")
+    private String fontSize2;
+
+    /**
+     * 坐标轴(X)字体颜色
+     */
+    @TableField(value = "font_color")
+    private String fontColor;
+
+    /**
+     * 坐标轴(Y)字体颜色
+     */
+    @TableField(value = "font_color2")
+    private String fontColor2;
+
+    /**
+     * 坐标轴(X)显示
+     */
+    @TableField(value = "show")
+    private Boolean show;
+
+    /**
+     * 坐标轴(Y)显示
+     */
+    @TableField(value = "show2")
+    private Boolean show2;
+
+    @TableField(value = "name_location2")
+    private String nameLocation2;
+
+    /**
+     * X轴信息全部显示
+     */
+    @TableField(value = "interval")
+    private Boolean interval;
+
+    /**
+     * X轴倾斜角度
+     */
+    @TableField(value = "rotate")
+    private String rotate;
+
+    /**
+     * Y轴信息全部显示
+     */
+    @TableField(value = "interval2")
+    private Boolean interval2;
+
+    /**
+     * Y轴倾斜角度
+     */
+    @TableField(value = "rotate2")
+    private String rotate2;
+
+    /**
+     * X轴标题padding
+     */
+    @TableField(value = "padding_top")
+    private Integer paddingTop;
+    @TableField(value = "padding_left")
+    private Integer paddingLeft;
+    @TableField(value = "padding_bottom")
+    private Integer paddingBottom;
+    @TableField(value = "padding_right")
+    private Integer paddingRight;
+
+    /**
+     * Y轴标题padding
+     */
+    @TableField(value = "padding_top2")
+    private Integer paddingTop2;
+    @TableField(value = "padding_right2")
+    private Integer paddingLeft2;
+    @TableField(value = "padding_bottom2")
+    private Integer paddingBottom2;
+    @TableField(value = "padding_left2")
+    private Integer paddingRight2;
+
+    /**
+     * 图例类型
+     */
+    @TableField(value = "type2")
+    private String type2;
+
+    /**
+     * 饼图(环形图)数值
+     */
+    @TableField(value = "data_label2")
+    private Boolean dataLabel2;
+
+    /**
+     * 饼图(环形图)百分比
+     */
+    @TableField(value = "data_label3")
+    private Boolean dataLabel3;
+
+    /**
+     * 柱形图宽度
+     */
+    @TableField(value = "bar_width")
+    private String barWidth;
+
+    /**
+     * 气泡比例
+     */
+    @TableField(value = "scatter_size")
+    private String scatterSize;
+}

+ 112 - 0
src/main/java/cn/cslg/pas/domain/business/CustomAnalysisItemSource.java

@@ -0,0 +1,112 @@
+package cn.cslg.pas.domain.business;
+
+import cn.cslg.pas.common.dto.customAnalyse.SourceMinAndMaxDataDTO;
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+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 zero
+ * @Date 2024/01/14
+ */
+@Data
+@TableName("os_custom_analysis_item_source")
+public class CustomAnalysisItemSource extends BaseEntity<CustomAnalysisItemSource> {
+
+    @TableField(value = "uid")
+    private String uid;
+
+    /**
+     * 维度
+     */
+    @TableField(value = "dimension")
+    private String dimension;
+
+    /**
+     * 名称
+     */
+    @TableField(value = "name")
+    private String name;
+
+    /**
+     * 是否选择
+     */
+    @TableField(value = "selected")
+    private Boolean selected;
+
+    /**
+     * 字段ID
+     */
+    @TableField(value = "field_id")
+    private Integer fieldId;
+
+    /**
+     * 拓展ID
+     */
+    @TableField(value = "expand_id")
+    private Integer expandId;
+
+    /**
+     * 开始时间
+     */
+    @TableField(value = "start_time")
+    private String startTime;
+
+    /**
+     * 结束时间
+     */
+    @TableField(value = "end_time")
+    private String endTime;
+
+    /**
+     * 大于
+     */
+
+    @TableField(value = "min_data")
+    private String minData;
+
+    /**
+     * 小于
+     */
+    @TableField(value = "max_data")
+    private String maxData;
+
+    @TableField(value = "status")
+    private Integer status;
+
+    @TableField(value = "create_id")
+    private String createId;
+
+    @TableField(value = "create_name")
+    private String createName;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "create_time",fill = FieldFill.INSERT_UPDATE)
+    private Date createTime;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+
+    /**
+     * 大于
+     */
+    @TableField(exist = false)
+    private SourceMinAndMaxDataDTO min;
+
+    /**
+     * 小于
+     */
+    @TableField(exist = false)
+    private SourceMinAndMaxDataDTO max;
+}

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

@@ -3,9 +3,11 @@ 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 com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import org.joda.time.DateTime;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
 
@@ -32,7 +34,7 @@ public class ScratchWords {
     /**
      * 标注备注
      */
-    private String markOteText;
+    private String markNoteText;
 
     /**
      * 标注类型
@@ -54,6 +56,8 @@ public class ScratchWords {
     /**
      * 标注时间
      */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
     private Date markTime;
 
     /**
@@ -76,5 +80,7 @@ public class ScratchWords {
      */
     private Integer publicTenantId;
 
+    private String patentTitle;
+
 
 }

+ 10 - 7
src/main/java/cn/cslg/pas/domain/es/Marking.java

@@ -26,14 +26,14 @@ public class Marking {
     /**
      * 标注颜色
      */
-    @JsonProperty("mark_Color")
+    @JsonProperty("mark_color")
     private  String markColor;
 
     /**
      * 标注备注
      */
-    @JsonProperty("mark_noteText")
-    private String markOteText;
+    @JsonProperty("mark_note_text")
+    private String markNoteText;
 
     /**
      * 标注类型
@@ -44,13 +44,13 @@ public class Marking {
     /**
      * 标注栏位
      */
-    @JsonProperty("mark_selectField")
+    @JsonProperty("mark_select_field")
     private String markSelectField;
 
     /**
      * 标注选择文本
      */
-    @JsonProperty("mark_selectText")
+    @JsonProperty("mark_select_text")
     private  String markSelectText;
 
     @JsonProperty("mark_site")
@@ -75,7 +75,7 @@ public class Marking {
     private Integer publicScope;
 
     /**
-     * 标注专利数据库id/报告id
+     * 标注专利数据库id/报告id/0接口检索/-1本地检索
      */
     @JsonProperty("public_project_id")
     private Integer projectId;
@@ -85,5 +85,8 @@ public class Marking {
      */
     @JsonProperty("public_tenant_id")
     private Integer publicTenantId;
-
+  @JsonProperty("patent_no")
+  private String patentNo;
+  @JsonProperty("patent_title")
+  private String patentTitle;
 }

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

@@ -414,11 +414,7 @@ public class Patent {
     @JsonProperty("legal_status")
     List<String> legalStatus;
 
-    /**
-     * 标注
-     */
-    @JsonProperty("markings")
-    Marking markings;
+
     @JsonProperty("patent_join")
     PatentJoin patentJoin;
 

+ 5 - 1
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/DateQueryBuilder.java

@@ -108,7 +108,10 @@ public class DateQueryBuilder implements IQueryBuilder {
                     SimpleDateFormat format1 = new SimpleDateFormat("yyyyMMdd");
                     day = format1.parse(value);
                 }
+                calendar.setTime(day);
                 String dayTime = String.valueOf(day.getTime());
+                calendar.add(Calendar.DAY_OF_MONTH, 1);
+                String nextDayTime = String.valueOf(calendar.getTime().getTime());
                 switch (operator) {
                     case NumberQueryBuilder.LT:
                         query = QueryBuilders
@@ -127,7 +130,8 @@ public class DateQueryBuilder implements IQueryBuilder {
                                 .range(range -> range.field(field).gte(JsonData.of(dayTime)));
                         break;
                     default:
-                        query = QueryBuilders.match(dayQuery -> dayQuery.field(field).query(dayTime));
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gte(JsonData.of(dayTime)).lte(JsonData.of(nextDayTime)));
                         break;
                 }
             }

+ 83 - 0
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/PersonNameQueryBuilder.java

@@ -0,0 +1,83 @@
+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.json.JsonData;
+import com.alibaba.fastjson.JSON;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Component
+public class PersonNameQueryBuilder implements IQueryBuilder {
+    @Autowired
+    private PermissionService permissionService;
+
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        List<String> ids = new ArrayList<>();
+        try {
+            String json = permissionService.getPersonIdByNamePCS(value, true);
+            ids = JSON.parseArray(json, String.class);
+        } catch (Exception e) {
+        }
+        if (ids == null || ids.size() == 0) {
+            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));
+
+        return query;
+    }
+
+    @Override
+    public String getField() {
+        return this.field;
+    }
+
+    @Override
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    @Override
+    public String getValue() {
+        return null;
+    }
+
+    @Override
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String getOperator() {
+        return null;
+    }
+
+    @Override
+    public void setOperator(String operator) {
+
+    }
+
+    @Override
+    public String getPath() {
+        return null;
+    }
+
+    @Override
+    public void setPath(String path) {
+
+    }
+}

+ 0 - 1
src/main/java/cn/cslg/pas/mapper/CustomAnalysisItemMapper.java

@@ -2,7 +2,6 @@ package cn.cslg.pas.mapper;
 
 import cn.cslg.pas.common.dto.customAnalyse.SelectCustomAnalyseListDTO;
 import cn.cslg.pas.common.vo.customAnalyse.SelectAnalyseVO;
-import cn.cslg.pas.common.vo.customAnalyse.SelectCustomAnalyseVO;
 import cn.cslg.pas.domain.business.CustomAnalysisItem;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;

+ 2 - 2
src/main/java/cn/cslg/pas/mapper/CustomAnalysisItemSchemaMapper.java

@@ -5,9 +5,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.springframework.stereotype.Repository;
 
 /**
- * 自定义分析项目维度数据mapper
+ * 自定义分析项目图表设置mapper
  * @Author zero
- * @Date 2024/01/12
+ * @Date 2024/01/14
  */
 @Repository
 public interface CustomAnalysisItemSchemaMapper extends BaseMapper<CustomAnalysisItemSchema> {

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

@@ -0,0 +1,14 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.business.CustomAnalysisItemSetting;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 自定义分析项目维度数据mapper
+ * @Author zero
+ * @Date 2024/01/12
+ */
+@Repository
+public interface CustomAnalysisItemSettingMapper extends BaseMapper<CustomAnalysisItemSetting> {
+}

+ 15 - 0
src/main/java/cn/cslg/pas/mapper/CustomAnalysisItemSourceMapper.java

@@ -0,0 +1,15 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.business.CustomAnalysisItemSource;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 自定义分析项目数据源mapper
+ * @Author zero
+ * @Date 2024/01/12
+ */
+@Mapper
+public interface CustomAnalysisItemSourceMapper extends BaseMapper<CustomAnalysisItemSource> {
+}

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

@@ -0,0 +1,65 @@
+package cn.cslg.pas.service;
+
+import cn.cslg.pas.common.dto.es.AddPatentLabelDTO;
+import cn.cslg.pas.common.vo.PatentWithIdVO;
+import cn.cslg.pas.domain.es.ESCustomField;
+import cn.cslg.pas.domain.es.Patent;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.business.es.EsCustomFieldService;
+import cn.cslg.pas.service.business.es.EsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class PatentLabelService {
+    @Autowired
+    private EsCustomFieldService esCustomFieldService;
+    @Autowired
+    private EsService esService;
+
+    /**
+     * 添加专利标签
+     *
+     * @param addPatentLabelDTO
+     * @return
+     */
+    public String addPatentLabel(AddPatentLabelDTO addPatentLabelDTO) {
+        String id = null;
+        Integer projectId = addPatentLabelDTO.getProjectId();
+        List<String> labels = addPatentLabelDTO.getLabels();
+        String patentNo = addPatentLabelDTO.getPatentNo();
+        try {
+            PatentWithIdVO patentWithIdVO = esCustomFieldService.getPatentLabel(addPatentLabelDTO);
+            if (patentWithIdVO != null) {
+                Patent patent = patentWithIdVO.getPatent();
+                ESCustomField esCustomField = patent.getESCustomField();
+                esCustomField.setStatsValue(labels);
+                esCustomField.setFieldValue(labels);
+                patent.setESCustomField(esCustomField);
+                esService.updatePatent(patent, patentWithIdVO.getId());
+                id = patentWithIdVO.getId();
+            } else {
+                ESCustomField esCustomField = new ESCustomField();
+                esCustomField.setFieldType(10);
+                esCustomField.setCreateTime(new Date());
+                esCustomField.setProjectId(projectId);
+                esCustomField.setFieldValue(labels);
+                esCustomField.setStatsValue(labels);
+                id = esCustomFieldService.addEsCustomFieldToEs(esCustomField, patentNo, null);
+
+            }
+        } catch (Exception e) {
+            throw new XiaoShiException("查询失败");
+        }
+        return id;
+    }
+
+public void queryPatentLabel(){
+
+
+
+}
+}

+ 82 - 83
src/main/java/cn/cslg/pas/service/ReportExportService.java

@@ -98,15 +98,14 @@ public class ReportExportService {
             throw new XiaoShiException("报告不存在");
         }
         XWPFTemplate template = null;
-        template = this.avoidDesignTemplate(projectId);
         if (report.getReportType() == 0 || report.getReportType() == 2) {
 //           template = this.getstabilityTemplate(report, filePath);
         } else if (report.getReportType() == 3) {
             template = this.FTOTemplate(projectId, templateFilePath, templeId);
         } else if (report.getReportType() == 4) {
-//         template = this.Torttemplate(reportId, filePath, templeId);
+         template = this.Torttemplate(projectId, templateFilePath);
         } else if (report.getReportType() == 5) {
-//           template = this.avoidDesignTemplate(reportId, filePath);
+         template = this.avoidDesignTemplate(projectId, templateFilePath);
         } else if (report.getReportType() == 1) {
 //          template = this.getThirdTemplate(report, filePath);
         }
@@ -137,89 +136,89 @@ public class ReportExportService {
         if (file.exists()) {
             file.delete();
         }
-        return "";
+        return ids.get(0);
     }
 
 
-//    private XWPFTemplate Torttemplate(Integer reportId, String filePath, Integer templateId) throws IOException {
-//        //根据报告Id查询标的专利号
-//        ReportProject report = reportProjectService.getById(reportId);
-//        String patentNo = report.getSignPatentNo();
-////        PatentVO patentVO = new PatentVO();
-////        patentVO.setPatentNos(Arrays.asList(patentNo));
-////        //根据专利号查询专利详细信息
-////        String resBody = outInterfaceService.getPatentDTOListForRMS(patentVO);
-////        JSONObject jsonObject = JSONObject.parseObject(resBody);
-////        List<JSONObject> patentDTOS = JSON.parseArray(jsonObject.get("data").toString(), JSONObject.class);
-////        //装载单个专利的信息
-//        Map<String, Object> patentMap = new HashMap<>();
-////        JSONObject patent = patentDTOS.get(0);
-////        List<JSONObject> applicantJSONs = JSON.parseArray(patent.get("applicant").toString(), JSONObject.class);
-////        StringBuilder applicants = new StringBuilder();
-////        StringBuilder rightPerson = new StringBuilder();
-////        applicantJSONs.forEach(tem -> {
-////            if (Integer.parseInt(tem.get("dataType").toString()) == 1) {
-////                applicants.append(tem.get("name") + "\r");
-////            } else {
-////                rightPerson.append(tem.get("name") + "\r");
-////            }
-////        });
-////        //装载同族信息
-////        JSONObject familys = JSONObject.parseObject(patent.get("family").toString());
-////        List<String> patSnaps = JSON.parseArray(familys.get("patSnap").toString(), String.class);
-////        List<String> simples = JSON.parseArray(familys.get("simple").toString(), String.class);
-////        List<String> inpadocs = JSON.parseArray(familys.get("inpadoc").toString(), String.class);
-////        patSnaps.addAll(simples);
-////        patSnaps.addAll(inpadocs);
-////        String familyStr = StringUtils.join(patSnaps, ",");
-////        //装载法律状态
-////        StringBuilder affair = new StringBuilder();
-////        List<JSONObject> affaires = JSON.parseArray(patent.get("affair").toString(), JSONObject.class);
-////        affaires.forEach(item -> {
-////                    affair.append(item.get("status") + "\r");
-////                }
-////        );
-////        //同族专利
-////        patentMap.put("simpleFamilys", familyStr);
-////        //引用专利
-////        patentMap.put("quotePatents", patent.get("quote"));
-////        //申请日
-////        patentMap.put("applicationDate", patent.get("applicationDate"));
-////        //公开日
-////        patentMap.put("publicDate", patent.get("publicDate"));
-////        //专利号
-////        patentMap.put("publicNo", patent.get("publicNo"));
-////        patentMap.put("firstPublicDate", patent.get("firstPublicDate"));
-////        patentMap.put("applicant", applicants);
-////        patentMap.put("rightPerson", rightPerson);
-////        patentMap.put("affair", affair);
-////        patentMap.put("name", patent.get("name"));
-//        //图示
-//        patentMap.put("abstractPath", "");
-//        //获得专利对比记录的信息
-////        Map<String, Object> temMap = compareMessageService.queryforTemplate(patent.get("patentNo").toString(), reportId);
-////        List<CompareMessageVO> compareMessageVOS = (List<CompareMessageVO>) temMap.get("compareMessageVOs");
-//        //装载对比记录的信息
-////        patentMap.put("cM", compareMessageVOS);
-////        patentMap.put("rightNum", temMap.get("right"));
-////        patentMap.put("mainRightNum", temMap.get("mainRight"));
-//        Map<String, Object> map = new HashMap<>();
-//        String date = DateUtils.formatDate(new Date(), DateUtils.YYYY_MM_DD);
-//        String[] ds = date.split("-");
-//        map.put("sys", new SystemMO(ds[0], ds[1], ds[2], "", "reportName"));
-//        map.put("patentMap", patentMap);
-//        map.put("", patentNo);
-//        // 为表格的显示绑定行循环
-//        LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
-//        HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
-//        // 将bz设置为行循环绑定的数据源的key,即key是bz的value会在模板中的{{bz}}处进行解析
-//        Configure configure = Configure.builder().bind("cM", policy).bind("targetDescription", htmlRenderPolicy).build();
-//        XWPFTemplate template = XWPFTemplate.compile(filePath, configure).render(map);
-//        return template;
-//    }
-
-    private XWPFTemplate avoidDesignTemplate(Integer projectId) throws IOException {
-        String filePath = fileUtils.getPath("/11.docx");
+    private XWPFTemplate Torttemplate(Integer reportId, String filePath) throws IOException {
+        //根据报告Id查询标的专利号
+        ReportProject report = reportProjectService.getById(reportId);
+        String patentNo = report.getSignPatentNo();
+//        PatentVO patentVO = new PatentVO();
+//        patentVO.setPatentNos(Arrays.asList(patentNo));
+//        //根据专利号查询专利详细信息
+//        String resBody = outInterfaceService.getPatentDTOListForRMS(patentVO);
+//        JSONObject jsonObject = JSONObject.parseObject(resBody);
+//        List<JSONObject> patentDTOS = JSON.parseArray(jsonObject.get("data").toString(), JSONObject.class);
+//        //装载单个专利的信息
+        Map<String, Object> patentMap = new HashMap<>();
+//        JSONObject patent = patentDTOS.get(0);
+//        List<JSONObject> applicantJSONs = JSON.parseArray(patent.get("applicant").toString(), JSONObject.class);
+//        StringBuilder applicants = new StringBuilder();
+//        StringBuilder rightPerson = new StringBuilder();
+//        applicantJSONs.forEach(tem -> {
+//            if (Integer.parseInt(tem.get("dataType").toString()) == 1) {
+//                applicants.append(tem.get("name") + "\r");
+//            } else {
+//                rightPerson.append(tem.get("name") + "\r");
+//            }
+//        });
+//        //装载同族信息
+//        JSONObject familys = JSONObject.parseObject(patent.get("family").toString());
+//        List<String> patSnaps = JSON.parseArray(familys.get("patSnap").toString(), String.class);
+//        List<String> simples = JSON.parseArray(familys.get("simple").toString(), String.class);
+//        List<String> inpadocs = JSON.parseArray(familys.get("inpadoc").toString(), String.class);
+//        patSnaps.addAll(simples);
+//        patSnaps.addAll(inpadocs);
+//        String familyStr = StringUtils.join(patSnaps, ",");
+//        //装载法律状态
+//        StringBuilder affair = new StringBuilder();
+//        List<JSONObject> affaires = JSON.parseArray(patent.get("affair").toString(), JSONObject.class);
+//        affaires.forEach(item -> {
+//                    affair.append(item.get("status") + "\r");
+//                }
+//        );
+//        //同族专利
+//        patentMap.put("simpleFamilys", familyStr);
+//        //引用专利
+//        patentMap.put("quotePatents", patent.get("quote"));
+//        //申请日
+//        patentMap.put("applicationDate", patent.get("applicationDate"));
+//        //公开日
+//        patentMap.put("publicDate", patent.get("publicDate"));
+//        //专利号
+//        patentMap.put("publicNo", patent.get("publicNo"));
+//        patentMap.put("firstPublicDate", patent.get("firstPublicDate"));
+//        patentMap.put("applicant", applicants);
+//        patentMap.put("rightPerson", rightPerson);
+//        patentMap.put("affair", affair);
+//        patentMap.put("name", patent.get("name"));
+        //图示
+        patentMap.put("abstractPath", "");
+        //获得专利对比记录的信息
+//        Map<String, Object> temMap = compareMessageService.queryforTemplate(patent.get("patentNo").toString(), reportId);
+//        List<CompareMessageVO> compareMessageVOS = (List<CompareMessageVO>) temMap.get("compareMessageVOs");
+        //装载对比记录的信息
+//        patentMap.put("cM", compareMessageVOS);
+//        patentMap.put("rightNum", temMap.get("right"));
+//        patentMap.put("mainRightNum", temMap.get("mainRight"));
+        Map<String, Object> map = new HashMap<>();
+        String date = DateUtils.formatDate(new Date(), DateUtils.YYYY_MM_DD);
+        String[] ds = date.split("-");
+        map.put("sys", new SystemMO(ds[0], ds[1], ds[2], "", "reportName"));
+        map.put("patentMap", patentMap);
+        map.put("", patentNo);
+        // 为表格的显示绑定行循环
+        LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
+        HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
+        // 将bz设置为行循环绑定的数据源的key,即key是bz的value会在模板中的{{bz}}处进行解析
+        Configure configure = Configure.builder().bind("cM", policy).bind("targetDescription", htmlRenderPolicy).build();
+        XWPFTemplate template = XWPFTemplate.compile(filePath, configure).render(map);
+        return template;
+    }
+
+    private XWPFTemplate avoidDesignTemplate(Integer projectId,String path) throws IOException {
+        String filePath = fileUtils.getPath(path);
 
         log.info("开始处理导出规避设计报告,参数为:{}, {}", projectId, filePath);
         LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();

+ 146 - 0
src/main/java/cn/cslg/pas/service/business/AssoProjectPersonService.java

@@ -1,17 +1,163 @@
 package cn.cslg.pas.service.business;
 
+import cn.cslg.pas.common.dto.AddProjectPersonDTO;
+import cn.cslg.pas.common.dto.QueryProjectPersonDTO;
+import cn.cslg.pas.common.model.cronModel.Personnel;
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.common.vo.ProjectPersonVO;
 import cn.cslg.pas.domain.business.AssoProductPerson;
 import cn.cslg.pas.domain.business.AssoProjectPerson;
+import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.AssoProductPersonMapper;
 import cn.cslg.pas.mapper.AssoProjectPersonMapper;
+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.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * 项目与可见人员关联表Service层
+ *
  * @Author lrj
  * @Date 2023/11/10
  */
 @Service
 public class AssoProjectPersonService extends ServiceImpl<AssoProjectPersonMapper, AssoProjectPerson> {
+    @Autowired
+    private PermissionService permissionService;
+    @Autowired
+    private CacheUtils cacheUtils;
+    @Autowired
+    private LoginUtils loginUtils;
+    /**
+     * 添加分享人
+     *
+     * @param addProjectPersonDTO
+     * @return
+     */
+    public List<Integer> addProjectShare(AddProjectPersonDTO addProjectPersonDTO) {
+        PersonnelVO personnelVO =cacheUtils.getLoginUser(loginUtils.getId());
+
+        List<Integer> reIds = new ArrayList<>();
+        List<String> personIds = addProjectPersonDTO.getPersonIds();
+        Integer projectId = addProjectPersonDTO.getProjectId();
+        //根据ids查询是否存在
+        LambdaQueryWrapper<AssoProjectPerson> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.select(AssoProjectPerson::getPersonId);
+        queryWrapper.in(AssoProjectPerson::getPersonId, personIds);
+        List<AssoProjectPerson> assoProjectPersonList = this.list(queryWrapper);
+        List<String> ids = assoProjectPersonList.stream().map(AssoProjectPerson::getPersonId).collect(Collectors.toList());
+        if (ids != null) {
+            personIds.removeAll(ids);
+        }
+        if (personIds.size() != 0) {
+            for (String personId : personIds) {
+                AssoProjectPerson assoProjectPerson = new AssoProjectPerson();
+                assoProjectPerson.setProjectId(projectId);
+                assoProjectPerson.setPersonId(personId);
+                assoProjectPerson.setCreateId(personnelVO.getId());
+                assoProjectPerson.insert();
+                reIds.add(assoProjectPerson.getId());
+            }
+        }
+        return reIds;
+    }
+
+    /**
+     * 批量删除分享记录
+     *
+     * @param ids
+     * @return
+     */
+    public List<Integer> removeProjectShare(List<Integer> ids) {
+        if (ids == null || ids.size() == 0) {
+            throw new XiaoShiException("请选择分享记录");
+        }
+        this.removeBatchByIds(ids);
+        return ids;
+    }
+
+    /**
+     * 查询分享记录
+     *
+     * @param queryProjectPersonDTO
+     * @return
+     */
+    public Records queryProjectShare(QueryProjectPersonDTO queryProjectPersonDTO) {
+        Records records = new Records();
+        Integer projectId = queryProjectPersonDTO.getProjectId();
+        String personName = queryProjectPersonDTO.getPersonName();
+        Long current = queryProjectPersonDTO.getCurrent();
+        Long size = queryProjectPersonDTO.getSize();
+        LambdaQueryWrapper<AssoProjectPerson> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoProjectPerson::getProjectId, projectId);
+        List<String> ids = new ArrayList<>();
+        if (personName != null && personName.trim() != "") {
+            ids = permissionService.getPersonIdsByName(personName);
+        }
+        if (ids.size() != 0) {
+            queryWrapper.in(AssoProjectPerson::getProjectId, ids);
+        }
+        Page<AssoProjectPerson> page = this.page(new Page<>(current, size), queryWrapper);
+
+        List<AssoProjectPerson> assoProjectPersonList = page.getRecords();
+        List<ProjectPersonVO> projectPersonVOS = this.loadData(assoProjectPersonList);
+        records.setData(projectPersonVOS);
+        records.setTotal(page.getTotal());
+        records.setCurrent(current);
+        records.setSize(size);
+        return records;
+    }
+
+    private List<ProjectPersonVO> loadData(List<AssoProjectPerson> assoProjectPersonList) {
+
+        List<ProjectPersonVO> projectPersonVOS = new ArrayList<>();
+        if (assoProjectPersonList == null || assoProjectPersonList.size() == 0) {
+            return projectPersonVOS;
+        }
+        List<String> personIds = new ArrayList<>();
+        assoProjectPersonList.forEach(item -> {
+            if (item.getPersonId() != null) {
+                personIds.add(item.getPersonId());
+            }
+            if (item.getCreateId() != null) {
+                personIds.add(item.getCreateId());
+            }
+        });
+        List<Personnel> personnels = new ArrayList<>();
+        if (personIds.size() != 0) {
+            try {
+                String res = permissionService.getPersonnelByIdsFromPCS(personIds);
+                JSONObject jsonObject = JSONObject.parseObject(res);
+                personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
+            } catch (Exception e) {
+
+            }
+        }
+        for (AssoProjectPerson assoProjectPerson : assoProjectPersonList) {
+            ProjectPersonVO projectPersonVO = new ProjectPersonVO();
+            Personnel personnel1 = personnels.stream().filter(item -> item.getId().equals(assoProjectPerson.getPersonId())).findFirst().orElse(null);
+            Personnel personnel2 = personnels.stream().filter(item -> item.getId().equals(assoProjectPerson.getCreateId())).findFirst().orElse(null);
+            BeanUtils.copyProperties(assoProjectPerson, projectPersonVO);
+            if (personnel1 != null) {
+                projectPersonVO.setPersonName(personnel1.getPersonnelName());
+            }
+            if (personnel2 != null) {
+                projectPersonVO.setCreateName(personnel2.getPersonnelName());
+            }
+            projectPersonVOS.add(projectPersonVO);
+        }
+        return projectPersonVOS;
+    }
 }

+ 19 - 3
src/main/java/cn/cslg/pas/service/business/CompareLiteratureService.java

@@ -100,7 +100,7 @@ public class CompareLiteratureService extends ServiceImpl<CompareLiteratureMappe
                 }
                 if (patent != null) {
                     if (patent.getTitle() != null && patent.getTitle().size() != 0) {
-                        name += "(" + patent.getTitle().get(0).getTextContent()+")";
+                        name += "(" + patent.getTitle().get(0).getTextContent() + ")";
                     }
                     compareLiterature.setAppDate(patent.getAppDate());
                     compareLiterature.setPublicDate(patent.getPublicDate());
@@ -465,7 +465,7 @@ public class CompareLiteratureService extends ServiceImpl<CompareLiteratureMappe
         String name = literatureNo;
         if (patent != null) {
             if (patent.getTitle() != null && patent.getTitle().size() != 0) {
-                name += "(" + patent.getTitle().get(0).getTextContent()+")";
+                name += "(" + patent.getTitle().get(0).getTextContent() + ")";
             }
             compareLiterature.setAppDate(patent.getAppDate());
             compareLiterature.setPublicDate(patent.getPublicDate());
@@ -530,7 +530,7 @@ public class CompareLiteratureService extends ServiceImpl<CompareLiteratureMappe
     public List<CompareLiteratureVO> getByIds(List<Integer> ids) {
         LambdaQueryWrapper<CompareLiterature> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.in(CompareLiterature::getId, ids)
-                   .orderByAsc(CompareLiterature::getSysOrder);
+                .orderByAsc(CompareLiterature::getSysOrder);
         List<CompareLiterature> compareLiteratures = this.list(queryWrapper);
         List<CompareLiteratureVO> compareLiteratureVOS = this.loadBaseMessage(compareLiteratures);
         return compareLiteratureVOS;
@@ -614,4 +614,20 @@ public class CompareLiteratureService extends ServiceImpl<CompareLiteratureMappe
 
         return compareLiteratureVOS;
     }
+
+
+    public Boolean copyCompareLiterature(Integer copiedProjectId, Integer projectId) {
+        //根据报告id获得对比文件列表
+        LambdaQueryWrapper<CompareLiterature> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CompareLiterature::getProjectId, copiedProjectId);
+        List<CompareLiterature> compareFilesList = this.list(wrapper);
+        if (compareFilesList.size() != 0) {
+            for (CompareLiterature compareFile : compareFilesList) {
+                compareFile.setId(null);
+                compareFile.setProjectId(projectId);
+            }
+            return this.saveBatch(compareFilesList);
+        }
+        return true;
+    }
 }

+ 97 - 17
src/main/java/cn/cslg/pas/service/business/CustomAnalyseService.java

@@ -1,10 +1,12 @@
 package cn.cslg.pas.service.business;
 
+import cn.cslg.pas.common.dto.customAnalyse.CustomAnalyseDTO;
 import cn.cslg.pas.common.dto.customAnalyse.SelectCustomAnalyseDTO;
 import cn.cslg.pas.common.dto.customAnalyse.SelectCustomAnalyseListDTO;
 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.Response;
 import cn.cslg.pas.common.vo.customAnalyse.CustomAnalyseIdVO;
 import cn.cslg.pas.common.vo.customAnalyse.CustomAnalyseVO;
 import cn.cslg.pas.common.vo.customAnalyse.SelectAnalyseVO;
@@ -12,15 +14,22 @@ 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.mapper.CustomAnalysisItemMapper;
+import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
+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.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 自定义分析项目Service层
@@ -40,8 +49,16 @@ public class CustomAnalyseService extends ServiceImpl<CustomAnalysisItemMapper,
     @Autowired
     private CustomAnalysisItemMapper customAnalysisItemMapper;
 
+    @Autowired
+    private CustomAnalysisItemSchemaService itemSchemaService;
+
+    @Autowired
+    private CustomAnalysisItemSourceService itemSourceService;
+
+    @Autowired
+    private CustomAnalysisItemSettingService itemSettingService;
+
     public List<SelectCustomAnalyseListDTO> queryAnalyseGroup(SelectCustomAnalyseVO vo) {
-        List<SelectCustomAnalyseListDTO> list = new ArrayList<>();
         //获取登陆人信息 用于设置创建人
         PersonnelVO personnelVO = new PersonnelVO();
         try {
@@ -52,25 +69,56 @@ public class CustomAnalyseService extends ServiceImpl<CustomAnalysisItemMapper,
 
         SelectAnalyseVO analyseVO = new SelectAnalyseVO();
         analyseVO.setProjectId(vo.getProjectId());
-        analyseVO.setType(vo.getType());
         analyseVO.setTenantId(personnelVO.getTenantId());
         analyseVO.setCreatorId(personnelVO.getId());
-        customAnalysisItemMapper.queryAnalyseGroup(analyseVO);
-        return list;
+        List<SelectCustomAnalyseListDTO> list = customAnalysisItemMapper.queryAnalyseGroup(analyseVO);
+        List<SelectCustomAnalyseListDTO> returnList = list.stream().filter(item -> item.getParentId().equals(0)).collect(Collectors.toList());
+        returnList.forEach(item -> {
+            item.setChildren(list.stream().filter(c -> c.getParentId().equals(item.getId())).collect(Collectors.toList()));
+        });
+        return returnList;
     }
 
 
     public SelectCustomAnalyseDTO queryAnalyseGroupDetail(CustomAnalyseIdVO vo) {
         SelectCustomAnalyseDTO dto = new SelectCustomAnalyseDTO();
         CustomAnalysisItem item = customAnalysisItemMapper.selectById(vo.getId());
-        if (ObjectUtil.isNotEmpty(item)) {
-            BeanUtils.copyProperties(item, dto);
+        if (item.getParentId() != null && item.getParentId() != 0) {
+            CustomAnalysisItem parentItem = customAnalysisItemMapper.selectById(item.getParentId());
+            dto.setParentId(item.getParentId());
+            dto.setParentName(parentItem.getName());
         }
+        BeanUtils.copyProperties(item, dto);
         return dto;
     }
 
-    public Integer addAnalyseGroup(CustomAnalyseVO vo) {
+    public CustomAnalyseDTO queryAnalyseDetail(CustomAnalyseIdVO vo) {
+        CustomAnalyseDTO dto = new CustomAnalyseDTO();
+        CustomAnalysisItem item = customAnalysisItemMapper.selectById(vo.getId());
+        BeanUtils.copyProperties(item, dto);
+        if (item.getType().equals(2)) {
+            dto.setSchema(itemSchemaService.getItemSchemaByUid(item.getUid()));
+            dto.setSetting(itemSettingService.getItemSettingByUid(item.getUid()));
+            dto.setSource(itemSourceService.getItemSourceData(dto));
+        } else {
+            dto.setSchema(null);
+            dto.setSetting(null);
+            dto.setSource(null);
+        }
+        return dto;
+    }
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
+    public Integer addAnalyseGroup(CustomAnalyseDTO vo) throws Exception {
+        List<CustomAnalysisItem> items = customAnalysisItemMapper.selectList(new QueryWrapper<CustomAnalysisItem>()
+                .lambda()
+                .eq(CustomAnalysisItem::getName, vo.getName())
+                .eq(CustomAnalysisItem::getType, vo.getType()));
+        if (items.size() > 1) {
+            throw new Exception("名称不可重复");
+        }
+
+        String uid = IdUtil.simpleUUID();
         //获取登陆人信息 用于设置创建人
         PersonnelVO personnelVO = new PersonnelVO();
         try {
@@ -78,20 +126,37 @@ public class CustomAnalyseService extends ServiceImpl<CustomAnalysisItemMapper,
         } catch (Exception e) {
             throw new UnLoginException("未登录");
         }
-
         CustomAnalysisItem item = new CustomAnalysisItem();
+        item.setUid(uid);
         BeanUtils.copyProperties(vo, item);
+        if (vo.getType() == 1) {
+            item.setParentId(0);
+        } else {
+            item.setParentId(vo.getParentId());
+        }
         item.setTenantId(personnelVO.getTenantId());
-        item.setCreatorId(personnelVO.getId());
-        item.setCreator(personnelVO.getName());
+        item.setCreateId(personnelVO.getId());
+        item.setCreateName(personnelVO.getName());
         item.setCreateTime(new Date());
         item.setUpdateTime(new Date());
         item.insert();
+        if (item.getType().equals(2)) {
+            itemSettingService.add(vo.getSetting(), uid);
+            itemSchemaService.add(vo.getSchema(), uid);
+            itemSourceService.edit(vo);
+        }
         return item.getId();
     }
 
-    public Integer editAnalyseGroup(CustomAnalyseVO vo) {
-
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
+    public Integer editAnalyseGroup(CustomAnalyseDTO vo) throws Exception {
+        List<CustomAnalysisItem> items = customAnalysisItemMapper.selectList(new QueryWrapper<CustomAnalysisItem>()
+                .lambda()
+                .eq(CustomAnalysisItem::getName, vo.getName())
+                .eq(CustomAnalysisItem::getType, vo.getType()));
+        if (items.size() > 1) {
+            throw new Exception("名称不可重复");
+        }
         //获取登陆人信息 用于设置创建人
         PersonnelVO personnelVO = new PersonnelVO();
         try {
@@ -103,16 +168,31 @@ public class CustomAnalyseService extends ServiceImpl<CustomAnalysisItemMapper,
         CustomAnalysisItem item = customAnalysisItemMapper.selectById(vo.getId());
         BeanUtils.copyProperties(vo, item);
         item.setTenantId(personnelVO.getTenantId());
-        item.setCreatorId(personnelVO.getId());
-        item.setCreator(personnelVO.getName());
+        item.setCreateId(personnelVO.getId());
+        item.setCreateName(personnelVO.getName());
         item.setUpdateTime(new Date());
-        item.insert();
+        item.updateById();
+
+        if (item.getType().equals(2)) {
+            itemSettingService.edit(vo.getSetting(), item.getUid());
+            itemSchemaService.edit(vo.getSchema(), item.getUid());
+            itemSourceService.edit(vo);
+        }
         return item.getId();
     }
 
-    public Integer delAnalyseGroup(CustomAnalyseIdVO vo) {
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
+    public Integer delAnalyseGroup(CustomAnalyseIdVO vo) throws Exception {
         CustomAnalysisItem item = customAnalysisItemMapper.selectById(vo.getId());
-        customAnalysisItemMapper.deleteById(vo.getId());
+        long count = this.count(new LambdaQueryWrapper<CustomAnalysisItem>()
+                .eq(CustomAnalysisItem::getParentId, vo.getId()));
+        if (count > 0) {
+            throw new Exception("删除失败,请先删除子节点");
+        }
+        this.removeById(vo.getId());
+        itemSchemaService.deleteByUid(item.getUid());
+        itemSettingService.deleteByUid(item.getUid());
+        itemSourceService.deleteByUid(item.getUid());
         return item.getId();
     }
 

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

@@ -0,0 +1,131 @@
+package cn.cslg.pas.service.business;
+
+import cn.cslg.pas.common.dto.customAnalyse.SchemaDataDTO;
+import cn.cslg.pas.common.dto.customAnalyse.SchemaDimensionDTO;
+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.domain.business.CustomAnalysisItemSchema;
+import cn.cslg.pas.exception.UnLoginException;
+import cn.cslg.pas.mapper.CustomAnalysisItemSchemaMapper;
+import cn.dev33.satoken.stp.StpUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * 自定义分析项目维度数据 服务实现类
+ * </p>
+ */
+@Service
+public class CustomAnalysisItemSchemaService extends ServiceImpl<CustomAnalysisItemSchemaMapper, CustomAnalysisItemSchema> {
+
+    @Autowired
+    private CacheUtils cacheUtils;
+
+    @Autowired
+    private LoginUtils loginUtils;
+
+    @Autowired
+    private CustomAnalysisItemSchemaMapper customAnalysisItemSchemaMapper;
+
+    public List<CustomAnalysisItemSchema> getListByUid(String uid) {
+        LambdaQueryWrapper<CustomAnalysisItemSchema> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(CustomAnalysisItemSchema::getUid, uid);
+        return this.list(queryWrapper);
+    }
+
+    public SchemaDimensionDTO getItemSchemaByUid(String uid) {
+        List<CustomAnalysisItemSchema> schemaList = this.getListByUid(uid);
+        CustomAnalysisItemSchema d1 = schemaList.stream().filter(item -> item.getDimension().equals("x")).findFirst().orElse(new CustomAnalysisItemSchema());
+        CustomAnalysisItemSchema d2 = schemaList.stream().filter(item -> item.getDimension().equals("y")).findFirst().orElse(new CustomAnalysisItemSchema());
+        SchemaDimensionDTO dto = new SchemaDimensionDTO();
+        SchemaDataDTO x = new SchemaDataDTO();
+        SchemaDataDTO y = new SchemaDataDTO();
+        x.setField(d1.getField());
+        x.setExpand(d1.getExpand());
+        x.setPtype(d1.getPtype());
+        x.setNum(d1.getNum());
+        x.setType(d1.getType());
+        y.setField(d2.getField());
+        y.setExpand(d2.getExpand());
+        y.setPtype(d2.getPtype());
+        y.setNum(d2.getNum());
+        y.setType(d2.getType());
+        dto.setX(x);
+        dto.setY(y);
+        return dto;
+    }
+
+    public void add(SchemaDimensionDTO dto, String uid) {
+        //获取登陆人信息 用于设置创建人
+        PersonnelVO personnelVO = new PersonnelVO();
+        try {
+            personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        } catch (Exception e) {
+            throw new UnLoginException("未登录");
+        }
+
+        List<CustomAnalysisItemSchema> customAnalysisItemSchema = new ArrayList<>();
+        CustomAnalysisItemSchema d1 = new CustomAnalysisItemSchema();
+        CustomAnalysisItemSchema d2 = new CustomAnalysisItemSchema();
+        d1.setUid(uid);
+        d1.setDimension("x");
+        d1.setField(dto.getX().getField());
+        d1.setExpand(dto.getX().getExpand());
+        d1.setPtype(dto.getX().getPtype());
+        d1.setType(dto.getX().getType());
+        d1.setNum(dto.getX().getNum());
+        d1.setCreateId(personnelVO.getId());
+        d1.setCreateName(personnelVO.getName());
+        d2.setUid(uid);
+        d2.setDimension("y");
+        d2.setField(dto.getY().getField());
+        d2.setExpand(dto.getY().getExpand());
+        d2.setPtype(dto.getY().getPtype());
+        d2.setType(dto.getY().getType());
+        d2.setNum(dto.getY().getNum());
+        d2.setCreateId(personnelVO.getId());
+        d2.setCreateName(personnelVO.getName());
+        customAnalysisItemSchema.add(d1);
+        customAnalysisItemSchema.add(d2);
+        this.saveBatch(customAnalysisItemSchema);
+    }
+
+    public void edit(SchemaDimensionDTO dto, String uid) {
+        List<CustomAnalysisItemSchema> schemaList = this.getListByUid(uid);
+        if (schemaList.size() == 0) {
+            this.add(dto, uid);
+        } else {
+            schemaList.forEach(item -> {
+                switch (item.getDimension()) {
+                    case "x":
+                        item.setField(dto.getX().getField());
+                        item.setExpand(dto.getX().getExpand());
+                        item.setPtype(dto.getX().getPtype());
+                        item.setNum(dto.getX().getNum());
+                        item.setType(dto.getX().getType());
+                        break;
+                    case "y":
+                        item.setField(dto.getY().getField());
+                        item.setExpand(dto.getY().getExpand());
+                        item.setPtype(dto.getY().getPtype());
+                        item.setNum(dto.getY().getNum());
+                        item.setType(dto.getY().getType());
+                        break;
+                }
+            });
+            this.saveOrUpdateBatch(schemaList);
+        }
+    }
+
+    public void deleteByUid(String uid) {
+        this.remove(Wrappers.<CustomAnalysisItemSchema>lambdaQuery().eq(CustomAnalysisItemSchema::getUid, uid));
+    }
+}

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

@@ -0,0 +1,95 @@
+package cn.cslg.pas.service.business;
+
+import cn.cslg.pas.common.dto.customAnalyse.CustomSettingColorConfigDTO;
+import cn.cslg.pas.common.dto.customAnalyse.CustomSettingConfigDTO;
+import cn.cslg.pas.common.dto.customAnalyse.CustomSettingLineConfigDTO;
+import cn.cslg.pas.common.dto.customAnalyse.CustomSettingTableConfigDTO;
+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.domain.business.CustomAnalysisItemSetting;
+import cn.cslg.pas.exception.UnLoginException;
+import cn.cslg.pas.mapper.CustomAnalysisItemSettingMapper;
+import cn.dev33.satoken.stp.StpUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 自定义分析项目图表设置 服务实现类
+ * </p>
+ */
+@Service
+public class CustomAnalysisItemSettingService extends ServiceImpl<CustomAnalysisItemSettingMapper, CustomAnalysisItemSetting> {
+
+    @Autowired
+    private CacheUtils cacheUtils;
+
+    @Autowired
+    private LoginUtils loginUtils;
+
+    @Autowired
+    private CustomAnalysisItemSettingMapper customAnalysisItemSettingMapper;
+
+    public CustomAnalysisItemSetting getItemSettingByUid(String uid) {
+        CustomAnalysisItemSetting temp = this.getOne(Wrappers.<CustomAnalysisItemSetting>lambdaQuery().eq(CustomAnalysisItemSetting::getUid, uid));
+        if (temp == null) {
+            temp = this.add(new CustomAnalysisItemSetting(), uid);
+        }
+        CustomSettingConfigDTO configDTO = new CustomSettingConfigDTO();
+        configDTO.setColor(JsonUtils.jsonToList(temp.getColorConfig(), CustomSettingColorConfigDTO.class));
+        configDTO.setLine(JsonUtils.jsonToPojo(temp.getLineConfig(), CustomSettingLineConfigDTO.class));
+        configDTO.setTable(JsonUtils.jsonToList(temp.getTableConfig(), CustomSettingTableConfigDTO.class));
+        temp.setConfig(configDTO);
+        temp.setColorConfig(null);
+        temp.setLineConfig(null);
+        temp.setTableConfig(null);
+        temp.setId(null);
+        temp.setUid(null);
+        temp.setCreateTime(null);
+        temp.setUpdateTime(null);
+        temp.setStatus(null);
+        return temp;
+    }
+
+    public CustomAnalysisItemSetting add(CustomAnalysisItemSetting setting, String uid) {
+
+        //获取登陆人信息 用于设置创建人
+        PersonnelVO personnelVO = new PersonnelVO();
+        try {
+            personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        } catch (Exception e) {
+            throw new UnLoginException("未登录");
+        }
+        CustomAnalysisItemSetting customAnalysisItemSetting = new CustomAnalysisItemSetting();
+        BeanUtils.copyProperties(setting, customAnalysisItemSetting);
+        customAnalysisItemSetting.setUid(uid);
+        customAnalysisItemSetting.setCreateId(personnelVO.getId());
+        customAnalysisItemSetting.setCreateName(personnelVO.getName());
+        customAnalysisItemSetting.setColorConfig(JsonUtils.objectToJson(setting.getConfig().getColor()));
+        customAnalysisItemSetting.setTableConfig(JsonUtils.objectToJson(setting.getConfig().getTable()));
+        customAnalysisItemSetting.setLineConfig(JsonUtils.objectToJson(setting.getConfig().getLine()));
+        customAnalysisItemSetting.insert();
+        return customAnalysisItemSetting;
+    }
+
+    public void edit(CustomAnalysisItemSetting customAnalysisItemSetting, String uid) {
+        CustomAnalysisItemSetting temp = this.getOne(Wrappers.<CustomAnalysisItemSetting>lambdaQuery().eq(CustomAnalysisItemSetting::getUid, uid));
+        if (temp == null) {
+            temp = this.add(customAnalysisItemSetting, uid);
+        }
+        customAnalysisItemSetting.setId(temp.getId());
+        customAnalysisItemSetting.setColorConfig(JsonUtils.objectToJson(customAnalysisItemSetting.getConfig().getColor()));
+        customAnalysisItemSetting.setTableConfig(JsonUtils.objectToJson(customAnalysisItemSetting.getConfig().getTable()));
+        customAnalysisItemSetting.setLineConfig(JsonUtils.objectToJson(customAnalysisItemSetting.getConfig().getLine()));
+        customAnalysisItemSetting.updateById();
+    }
+
+    public void deleteByUid(String uid) {
+        this.remove(Wrappers.<CustomAnalysisItemSetting>lambdaQuery().eq(CustomAnalysisItemSetting::getUid, uid));
+    }
+}

+ 146 - 0
src/main/java/cn/cslg/pas/service/business/CustomAnalysisItemSourceService.java

@@ -0,0 +1,146 @@
+package cn.cslg.pas.service.business;
+
+import cn.cslg.pas.common.dto.customAnalyse.CustomAnalyseDTO;
+import cn.cslg.pas.common.dto.customAnalyse.SchemaDimensionDTO;
+import cn.cslg.pas.common.dto.customAnalyse.SourceDataDTO;
+import cn.cslg.pas.common.dto.customAnalyse.SourceMinAndMaxDataDTO;
+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.customAnalyse.SourceDataVO;
+import cn.cslg.pas.domain.business.CustomAnalysisItem;
+import cn.cslg.pas.domain.business.CustomAnalysisItemSource;
+import cn.cslg.pas.exception.UnLoginException;
+import cn.cslg.pas.mapper.CustomAnalysisItemSourceMapper;
+import cn.dev33.satoken.stp.StpUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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 java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * 自定义分析项目数据源 服务实现类
+ * </p>
+ */
+@Service
+public class CustomAnalysisItemSourceService extends ServiceImpl<CustomAnalysisItemSourceMapper, CustomAnalysisItemSource> {
+
+    @Autowired
+    private CacheUtils cacheUtils;
+
+    @Autowired
+    private LoginUtils loginUtils;
+
+    @Autowired
+    private CustomAnalysisItemSourceMapper customAnalysisItemSourceMapper;
+
+    public SourceDataDTO getItemSourceData(CustomAnalyseDTO customAnalysisItem) {
+        SourceDataDTO sourceDataDTO = new SourceDataDTO();
+        SchemaDimensionDTO schema = customAnalysisItem.getSchema();
+        sourceDataDTO.setX(this.setReturnData(this.getItemSourceList(customAnalysisItem.getUid(), "x", schema.getX().getField(), schema.getX().getExpand())));
+        sourceDataDTO.setY(this.setReturnData(this.getItemSourceList(customAnalysisItem.getUid(), "y", schema.getY().getField(), schema.getY().getExpand())));
+        return sourceDataDTO;
+    }
+
+    public List<CustomAnalysisItemSource> getItemSourceList(String uid, String dimension, Integer fieldId, Integer expandId) {
+        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);
+        return this.list(queryWrapper);
+    }
+
+    public List<CustomAnalysisItemSource> setReturnData(List<CustomAnalysisItemSource> list) {
+        list.forEach(item -> {
+            item.setUid(null);
+            item.setDimension(null);
+            item.setFieldId(null);
+            item.setExpandId(null);
+            item.setCreateTime(null);
+            item.setUpdateTime(null);
+            item.setStatus(null);
+            item.setId(null);
+            item.setCreateId(null);
+            item.setCreateName(null);
+            if (StringUtils.isNotEmpty(item.getMaxData())) {
+                item.setMax(JsonUtils.jsonToPojo(item.getMaxData(), SourceMinAndMaxDataDTO.class));
+                item.setMaxData(null);
+            }
+            if (StringUtils.isNotEmpty(item.getMinData())) {
+                item.setMin(JsonUtils.jsonToPojo(item.getMinData(), SourceMinAndMaxDataDTO.class));
+                item.setMinData(null);
+            }
+        });
+        return list;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void edit(CustomAnalyseDTO vo) {
+        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)) {
+            x.setUid(vo.getUid());
+            x.setDimension("x");
+            x.setFieldId(vo.getSchema().getX().getField());
+            x.setExpandId(vo.getSchema().getX().getExpand());
+            x.setSource(sourceDataDTO.getX());
+            this.updateSource(x);
+        }
+        if (vo.getSchema().getY().getPtype().equals(3) || vo.getSchema().getY().getPtype().equals(4)
+                || vo.getSchema().getY().getType().equals(6)) {
+            y.setUid(vo.getUid());
+            y.setDimension("y");
+            y.setFieldId(vo.getSchema().getY().getField());
+            y.setExpandId(vo.getSchema().getY().getExpand());
+            y.setSource(sourceDataDTO.getY());
+            this.updateSource(y);
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void updateSource(SourceDataVO sourceDataVO) {
+        this.remove(Wrappers.<CustomAnalysisItemSource>lambdaQuery().eq(CustomAnalysisItemSource::getUid, sourceDataVO.getUid())
+                .eq(CustomAnalysisItemSource::getDimension, sourceDataVO.getDimension()));
+        //获取登陆人信息 用于设置创建人
+        PersonnelVO personnelVO = new PersonnelVO();
+        try {
+            personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        } catch (Exception e) {
+            throw new UnLoginException("未登录");
+        }
+        List<CustomAnalysisItemSource> list = new ArrayList<>();
+        PersonnelVO finalPersonnelVO = personnelVO;
+        sourceDataVO.getSource().forEach(source -> {
+            if (StringUtils.isNotNull(source.getMax())) {
+                source.setMaxData(JsonUtils.objectToJson(source.getMax()));
+            }
+            if (StringUtils.isNotNull(source.getMin())) {
+                source.setMinData(JsonUtils.objectToJson(source.getMin()));
+            }
+            source.setFieldId(sourceDataVO.getFieldId());
+            source.setExpandId(sourceDataVO.getExpandId());
+            source.setCreateId(finalPersonnelVO.getId());
+            source.setCreateName(finalPersonnelVO.getName());
+            source.setDimension(sourceDataVO.getDimension());
+            source.setUid(sourceDataVO.getUid());
+            list.add(source);
+        });
+        this.saveOrUpdateBatch(list);
+    }
+
+    public void deleteByUid(String uid) {
+        this.remove(Wrappers.<CustomAnalysisItemSource>lambdaQuery().eq(CustomAnalysisItemSource::getUid, uid));
+    }
+
+}

+ 4 - 0
src/main/java/cn/cslg/pas/service/business/CustomFieldService.java

@@ -628,4 +628,8 @@ public class CustomFieldService extends ServiceImpl<CustomFieldMapper, CustomFie
         return customField1.getId();
     }
 
+    public void copyCustomField(){
+
+
+    }
 }

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

@@ -846,8 +846,8 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
                     if (assoProjectTreeNode.getTreeType().equals(2)) {
                         Product product = products.stream().filter(item -> item.getId().equals(assoProjectTreeNode.getFieldId())).findFirst().orElse(null);
                         if (product != null) {
-                            ProductOrCategoryVO productOrCategoryVO =new ProductOrCategoryVO();
-                             productOrCategoryVO.setName(product.getName());
+                            ProductOrCategoryVO productOrCategoryVO = new ProductOrCategoryVO();
+                            productOrCategoryVO.setName(product.getName());
                             productOrCategoryVO.setId(product.getId());
                             productOrCategoryVO.setType(2);
                             patentProjectVO.setProductOrCategory(productOrCategoryVO);
@@ -855,7 +855,7 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
                     } else if (assoProjectTreeNode.getTreeType().equals(3)) {
                         ProductCategory productCategory = productCategories.stream().filter(item -> item.getId().equals(assoProjectTreeNode.getFieldId())).findFirst().orElse(null);
                         if (productCategory != null) {
-                            ProductOrCategoryVO productOrCategoryVO =new ProductOrCategoryVO();
+                            ProductOrCategoryVO productOrCategoryVO = new ProductOrCategoryVO();
                             productOrCategoryVO.setName(productCategory.getName());
                             productOrCategoryVO.setId(productCategory.getId());
                             productOrCategoryVO.setType(3);

+ 49 - 15
src/main/java/cn/cslg/pas/service/business/ScratchWordsService.java

@@ -1,16 +1,26 @@
 package cn.cslg.pas.service.business;
 
+import cn.cslg.pas.common.dto.QueryScratchWordsDTO;
 import cn.cslg.pas.common.dto.SwQueryDTO;
 import cn.cslg.pas.common.dto.business.UpdateScratchWordsDTO;
+import cn.cslg.pas.common.model.cronModel.Personnel;
 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.CacheUtils;
 import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.common.vo.ScratchWordsVO;
 import cn.cslg.pas.domain.business.ScratchWords;
 import cn.cslg.pas.domain.es.Marking;
+import cn.cslg.pas.domain.es.Patent;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.ScratchWordsMapper;
+import cn.cslg.pas.service.business.es.EsPatentService;
 import cn.cslg.pas.service.business.es.EsScratchWordsService;
 import cn.cslg.pas.service.business.es.EsService;
+import cn.cslg.pas.service.permissions.PermissionService;
+import co.elastic.clients.elasticsearch.core.search.Hit;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -18,7 +28,9 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -32,7 +44,8 @@ public class ScratchWordsService extends ServiceImpl<ScratchWordsMapper, Scratch
     private final CacheUtils cacheUtils;
     private final LoginUtils loginUtils;
     private final EsScratchWordsService esScratchWordsService;
-    private final EsService esService;
+    private final EsPatentService esPatentService;
+    private final PermissionService permissionService;
 
     /**
      * 新增划词高亮
@@ -40,8 +53,6 @@ public class ScratchWordsService extends ServiceImpl<ScratchWordsMapper, Scratch
      * @param scratchWords
      */
     public String add(ScratchWords scratchWords) {
-
-        scratchWords = new ScratchWords();
         //获取当前登陆人信息
         PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
         if (personnelVO != null) {
@@ -74,20 +85,21 @@ public class ScratchWordsService extends ServiceImpl<ScratchWordsMapper, Scratch
     /**
      * 查询划词高亮
      *
-     * @param swQueryDTO
+     * @param stringRequest
      * @return
      */
-    public List<String> queryAll(SwQueryDTO swQueryDTO) {
-        if (swQueryDTO.getPatentNo() != null) {
-            //获取当前登陆人信息
-            PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
-            Integer tenantId = personnelVO.getTenantId();
-            String createId = personnelVO.getId();
+    public Records query(StringRequest stringRequest) {
 
-        } else {
-            throw new XiaoShiException("传入参数不可为空");
+        Records records = esScratchWordsService.queryScratchWord(stringRequest);
+        List<ScratchWordsVO> scratchWordsVOS = (List<ScratchWordsVO>) records.getData();
+        if(scratchWordsVOS!=null) {
+            this.loadData(scratchWordsVOS);
         }
-        return null;
+        records.setData(scratchWordsVOS);
+        records.setSize(stringRequest.getSize());
+        records.setCurrent(stringRequest.getCurrent());
+        return records;
+
     }
 
 
@@ -100,11 +112,33 @@ public class ScratchWordsService extends ServiceImpl<ScratchWordsMapper, Scratch
         ids.forEach(item -> {
             try {
                 esScratchWordsService.removeById(item);
-            }catch (Exception e){
+            } catch (Exception e) {
                 throw new XiaoShiException("删除错误");
             }
 
         });
         return ids;
     }
-}
+
+    private void loadData(List<ScratchWordsVO> scratchWordsVOS) {
+        List<String> ids = scratchWordsVOS.stream().map(ScratchWordsVO::getMarkUserId).collect(Collectors.toList());
+        //查询创建人名称
+        List<Personnel> personnels = new ArrayList<>();
+        if (ids.size() != 0) {
+            try {
+                String res = permissionService.getPersonnelByIdsFromPCS(ids);
+                JSONObject jsonObject = JSONObject.parseObject(res);
+                personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
+            } catch (Exception e) {
+
+            }
+        }
+        for (ScratchWordsVO scratchWordsVO : scratchWordsVOS) {
+            Personnel personnel = personnels.stream().filter(item -> item.getId().equals(scratchWordsVO.getMarkUserId())).findFirst().orElse(null);
+            if (personnel != null) {
+                scratchWordsVO.setCreateName(personnel.getPersonnelName());
+            }
+        }
+    }
+
+        }

+ 428 - 75
src/main/java/cn/cslg/pas/service/business/es/EsCountService.java

@@ -3,12 +3,14 @@ package cn.cslg.pas.service.business.es;
 import cn.cslg.pas.common.dto.business.EsCountDTO;
 import cn.cslg.pas.common.dto.business.EsCountDetailDTO;
 import cn.cslg.pas.common.dto.es.EsCustomFieldValueDTO;
+import cn.cslg.pas.common.dto.es.EsDateRangeDTO;
 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.business.EsAllCountVO;
 import cn.cslg.pas.common.vo.business.EsCountVO;
+import cn.cslg.pas.common.vo.es.EsDateRangeVO;
 import cn.cslg.pas.domain.es.Patent;
 import cn.cslg.pas.factorys.EsCountAnalyseBuilderFactory.EsCountAnalysisBuilderFactory;
 import cn.cslg.pas.factorys.EsCountAnalyseBuilderFactory.IEsCountAnalysisBuilder;
@@ -36,7 +38,7 @@ import java.util.stream.Collectors;
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class EsCountService {
     private final List<String> childList = Arrays.asList("field");
-    private final List<String> nestedList = Arrays.asList("PA", "IN", "PE", "SAT", "MAT", "SRH", "MRH","MIN");
+    private final List<String> nestedList = Arrays.asList("PA", "IN", "PE", "SAT", "MAT", "SRH", "MRH", "MIN");
     private final List<String> dateList = Arrays.asList("PD", "AD", "GD");
     private final List<String> numberList = Arrays.asList("QPN", "QDPN", "SFN", "IFN", "PFN");
 
@@ -51,18 +53,60 @@ public class EsCountService {
 
     /**
      * 聚合统计
+     *
      * @param vo
      * @return
      * @throws Exception
      */
     public EsCountDTO esCountAnalysis(EsAllCountVO vo) throws Exception {
+        List<EsCountVO> countVOS = vo.getCountVOS();
         String searchCondition = vo.getCondition();
         List<EsCustomFieldValueDTO> customFields = vo.getCustomFields();
+        Integer taskId = vo.getTaskId();
+        Integer projectId = vo.getProjectId();
+        EsCountDTO esCountDTO = new EsCountDTO();
+        HashMap<String, List<EsCountDetailDTO>> map = new HashMap<>();
+        List<EsCountDetailDTO> detailDTOS = new ArrayList<>();
+        if (countVOS.size() > 1) {
+            EsCountVO countVO = countVOS.get(0);
+            List<String> values = countVO.getValues();
+            List<EsCountVO> esCountVOS = new ArrayList<>();
+            esCountVOS.add(countVOS.get(1));
+            if (StringUtils.isNotEmpty(countVO.getFieldId())) {
+                if (!CollectionUtils.isEmpty(values)) {
+                    for (String value : values) {
+                        EsCustomFieldValueDTO valueDTO = new EsCustomFieldValueDTO();
+                        valueDTO.setFieldId(countVO.getFieldId());
+                        valueDTO.setFieldValue(Arrays.asList(value));
+                        customFields.add(valueDTO);
+                        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;
+                    } else {
+                        searchCondition = condition;
+                    }
+                    this.getReturnData(searchCondition, customFields, taskId, projectId, esCountVOS, detailDTOS, esCountDTO, value, map);
+                }
+            }
+        } else {
+            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,
+                              Integer projectId, List<EsCountVO> countVOS, List<EsCountDetailDTO> detailDTOS,
+                              EsCountDTO esCountDTO, String firstName, Map<String, List<EsCountDetailDTO>> map) throws Exception {
         if (!CollectionUtils.isEmpty(customFields)) {
             searchCondition = esService.parseCustomField(customFields);
         }
-        Integer taskId = vo.getTaskId();
-        Integer projectId = vo.getProjectId();
+
         searchCondition = this.getCondition(searchCondition, taskId, projectId);
 
         SearchRequest.Builder builder = new SearchRequest.Builder();
@@ -78,9 +122,6 @@ public class EsCountService {
             query = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
         }
 
-        EsCountDTO esCountDTO = new EsCountDTO();
-        List<EsCountDetailDTO> detailDTOS = new ArrayList<>();
-        List<EsCountVO> countVOS = vo.getCountVOS();
         for (EsCountVO countVO : countVOS) {
             String field = countVO.getField();
             Integer topN = countVO.getTopN();
@@ -113,7 +154,6 @@ public class EsCountService {
                     if (dateList.contains(field)) {
                         if (CollectionUtils.isEmpty(values)) {
                             filtersBuckets.forEach(filtersBucket -> {
-//                                this.getFiltersCountDTO(filtersBucket, finalSearchCondition, detailDTOS);
                                 Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
                                 try {
                                     this.getDateCountDTOS(filtersAgg, field, topN, format, detailDTOS, esCountDTO);
@@ -123,16 +163,14 @@ public class EsCountService {
                             });
                         } else {
                             filtersBuckets.forEach(filtersBucket -> {
-//                                this.getFiltersCountDTO(filtersBucket, finalSearchCondition, detailDTOS);
                                 Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
-                                this.getDateAnalysisDTOS(filtersAgg, field, topN, detailDTOS,esCountDTO);
+                                this.getDateAnalysisDTOS(filtersAgg, field, topN, detailDTOS, esCountDTO, firstName, map,values);
                             });
                         }
                     } else if (nestedList.contains(field)) {
                         filtersBuckets.forEach(filtersBucket -> {
-//                            this.getFiltersCountDTO(filtersBucket, finalSearchCondition, detailDTOS);
                             Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
-                            this.getNestedCountDTOS(filtersAgg, field,topN, detailDTOS);
+                            this.getNestedCountDTOS(filtersAgg, field, topN, detailDTOS, esCountDTO, firstName, map, values);
                             if (!CollectionUtils.isEmpty(values)) {
                                 esCountDTO.setAllNumber(filtersAgg.nested().docCount());
                             }
@@ -141,16 +179,15 @@ public class EsCountService {
                         if (CollectionUtils.isEmpty(values)) {
                             Integer finalFieldType = fieldType;
                             filtersBuckets.forEach(filtersBucket -> {
-//                                this.getFiltersCountDTO(filtersBucket, finalSearchCondition, detailDTOS);
                                 Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
-                                this.getChildCountDTOS(filtersAgg, field, finalFieldType, topN,detailDTOS,esCountDTO);
+                                this.getChildCountDTOS(filtersAgg, field, finalFieldType, topN, detailDTOS, esCountDTO);
                             });
                         } else {
                             Integer finalFieldType1 = fieldType;
                             filtersBuckets.forEach(filtersBucket -> {
-//                                this.getFiltersCountDTO(filtersBucket, finalSearchCondition, detailDTOS);
                                 Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
-                                this.getChildAnalysisDTOS(filtersAgg, field, finalFieldType1, topN,detailDTOS, esCountDTO);
+                                this.getChildAnalysisDTOS(filtersAgg, field, finalFieldType1, topN,
+                                        detailDTOS, esCountDTO, firstName, map,values);
                             });
                         }
                     } else if (numberList.contains(field)) {
@@ -158,16 +195,14 @@ public class EsCountService {
 
                         } else {
                             filtersBuckets.forEach(filtersBucket -> {
-//                                this.getFiltersCountDTO(filtersBucket, finalSearchCondition, detailDTOS);
                                 Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
-                                this.getNumberAnalysisDTOS(filtersAgg, field,topN, detailDTOS);
+                                this.getNumberAnalysisDTOS(filtersAgg, field, topN, detailDTOS, esCountDTO, firstName, map,values);
                             });
                         }
                     } else {
                         filtersBuckets.forEach(filtersBucket -> {
-//                            this.getFiltersCountDTO(filtersBucket, finalSearchCondition, detailDTOS);
                             Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
-                            this.getTermCountDTOS(filtersAgg, field, topN,detailDTOS);
+                            this.getTermCountDTOS(filtersAgg, field, topN, detailDTOS, esCountDTO, firstName, map,values);
                         });
                     }
                 } else {
@@ -176,35 +211,118 @@ public class EsCountService {
             } else {
                 if (dateList.contains(field)) {
                     if (CollectionUtils.isEmpty(values)) {
-                        this.getDateCountDTOS(agg, field, topN,format, detailDTOS,esCountDTO);
+                        this.getDateCountDTOS(agg, field, topN, format, detailDTOS, esCountDTO);
                     } else {
-                        this.getDateAnalysisDTOS(agg, field, topN, detailDTOS,esCountDTO);
+                        this.getDateAnalysisDTOS(agg, field, topN, detailDTOS, esCountDTO, firstName, map,values);
                     }
                 } else if (nestedList.contains(field)) {
-                    this.getNestedCountDTOS(agg, field,topN, detailDTOS);
+                    this.getNestedCountDTOS(agg, field, topN, detailDTOS, esCountDTO, firstName, map, values);
                     if (!CollectionUtils.isEmpty(values)) {
                         esCountDTO.setAllNumber(agg.nested().docCount());
                     }
                 } else if (childList.contains(field)) {
                     if (CollectionUtils.isEmpty(values)) {
-                        this.getChildCountDTOS(agg, field, fieldType,topN, detailDTOS, esCountDTO);
+                        this.getChildCountDTOS(agg, field, fieldType, topN, detailDTOS, esCountDTO);
                     } else {
-                        this.getChildAnalysisDTOS(agg, field, fieldType,topN, detailDTOS, esCountDTO);
+                        this.getChildAnalysisDTOS(agg, field, fieldType, topN,
+                                detailDTOS, esCountDTO, firstName, map,values);
                     }
                 } else if (numberList.contains(field)) {
-                    this.getNumberAnalysisDTOS(agg, field,topN, detailDTOS);
+                    this.getNumberAnalysisDTOS(agg, field, topN, detailDTOS, esCountDTO, firstName, map,values);
                 } else {
-                    this.getTermCountDTOS(agg, field,topN, detailDTOS);
+                    this.getTermCountDTOS(agg, field, topN, detailDTOS, esCountDTO, firstName, map,values);
                 }
             }
+            esCountDTO.setCondition(searchCondition);
+            esCountDTO.setAnalyseMap(map);
         }
-        esCountDTO.setDetailDTOS(detailDTOS);
-        esCountDTO.setCondition(searchCondition);
-        return esCountDTO;
+    }
+
+    public EsDateRangeDTO getFieldRange(EsDateRangeVO rangeVO) throws Exception {
+        String searchCondition = rangeVO.getCondition();
+        String field = rangeVO.getField();
+        List<EsCustomFieldValueDTO> customFields = rangeVO.getCustomFields();
+        if (!CollectionUtils.isEmpty(customFields)) {
+            searchCondition = esService.parseCustomField(customFields);
+        }
+        Integer taskId = rangeVO.getTaskId();
+        Integer projectId = rangeVO.getProjectId();
+        searchCondition = this.getCondition(searchCondition, taskId, projectId);
+
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        //设置查询索引
+        Query query = null;
+        if (StringUtils.isNotEmpty(searchCondition)) {
+            //1. 解析检索条件
+            treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
+            //格式化检索式
+            //3. 从es中检索数据
+            query = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
+        }
+        String esField = "";
+        if (StringUtils.isNotEmpty(field)) {
+            switch (field) {
+                case "AD":
+                    esField = "app_date";
+                    break;
+                case "PD":
+                    esField = "public_date";
+                    break;
+                case "GD":
+                    esField = "grant_date";
+                    break;
+            }
+        }
+        EsDateRangeDTO rangeDTO = new EsDateRangeDTO();
+        if (StringUtils.isNotEmpty(esField)) {
+            String finalEsField = esField;
+            Query finalQuery = query;
+            Aggregation min = AggregationBuilders.min(i -> i.field(finalEsField).format("yyyy"));
+            Aggregation filtersAgg = new Aggregation.Builder().filters(new FiltersAggregation.Builder()
+                    .filters(i -> i.array(Arrays.asList(finalQuery))).build())
+                    .aggregations(new HashMap() {{
+                        put("filters_agg", min);
+                    }}).build();
+
+            Aggregation max = AggregationBuilders.max(i -> i.field(finalEsField).format("yyyy"));
+            Aggregation maxFilters = new Aggregation.Builder().filters(new FiltersAggregation.Builder()
+                    .filters(i -> i.array(Arrays.asList(finalQuery))).build())
+                    .aggregations(new HashMap() {{
+                        put("max_agg", max);
+                    }}).build();
+
+
+            builder.aggregations("minAgg", filtersAgg);
+            builder.aggregations("maxAgg", maxFilters);
+            SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+            Aggregate minAgg = response.aggregations().get("minAgg");
+            if (minAgg != null) {
+                List<FiltersBucket> list = minAgg.filters().buckets().array();
+                for (FiltersBucket bucket : list) {
+                    Aggregate aggregate = bucket.aggregations().get("filters_agg");
+                    String minValue = aggregate.min().valueAsString();
+                    rangeDTO.setMinDate(minValue);
+                }
+            }
+
+            Aggregate maxAgg = response.aggregations().get("maxAgg");
+            if (maxAgg != null) {
+                List<FiltersBucket> list = maxAgg.filters().buckets().array();
+                for (FiltersBucket bucket : list) {
+                    Aggregate aggregate = bucket.aggregations().get("max_agg");
+                    String maxValue = aggregate.max().valueAsString();
+                    rangeDTO.setMaxDate(maxValue);
+                }
+            }
+        }
+        return rangeDTO;
     }
 
     /**
      * 查询共用Aggregation
+     *
      * @param countVO
      * @return
      * @throws Exception
@@ -302,7 +420,10 @@ public class EsCountService {
      * @param field
      * @param detailDTOS
      */
-    public void getTermCountDTOS(Aggregate agg, String field, Integer topN, List<EsCountDetailDTO> detailDTOS) {
+    public void getTermCountDTOS(Aggregate agg, String field, Integer topN, List<EsCountDetailDTO> detailDTOS,
+                                 EsCountDTO esCountDTO, String firstName,
+                                 Map<String, List<EsCountDetailDTO>> map,List<String> values) {
+        List<EsCountDetailDTO> countDetailDTOS = new ArrayList<>();
         EsCountDetailDTO countDTO = new EsCountDetailDTO();
         countDTO.setField(field);
         countDTO.setName("其他");
@@ -317,13 +438,49 @@ public class EsCountService {
             dto.setName(bucket.key().stringValue());
             dto.setNumber(bucket.docCount());
             dto.setTopN(topN);
+            dto.setFirstName(firstName);
             if (aggregate != null) {
                 dto.setNumber(aggregate.filter().docCount());
             }
             if (dto.getNumber() > 0) {
-                detailDTOS.add(dto);
+                countDetailDTOS.add(dto);
             }
         });
+
+        List<String> strs = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(values)) {
+            strs.addAll(values);
+        }
+        if (StringUtils.isNotEmpty(firstName)) {
+            countDetailDTOS.removeIf(dto -> dto.getName().equals("其他"));
+            if (countDetailDTOS.size() != values.size()) {
+                for (EsCountDetailDTO detailDTO : countDetailDTOS) {
+                    strs.removeIf(i -> i.equals(detailDTO.getName()));
+                }
+                for (String value : strs) {
+                    EsCountDetailDTO detailDTO = new EsCountDetailDTO();
+                    detailDTO.setName(value);
+                    detailDTO.setFirstName(firstName);
+                    detailDTO.setField(field);
+                    detailDTO.setNumber(0L);
+                    detailDTO.setTopN(topN);
+                    countDetailDTOS.add(detailDTO);
+                }
+            } else if (countDetailDTOS.isEmpty()) {
+                for (String value : values) {
+                    EsCountDetailDTO detailDTO = new EsCountDetailDTO();
+                    detailDTO.setName(value);
+                    detailDTO.setFirstName(firstName);
+                    detailDTO.setField(field);
+                    detailDTO.setNumber(0L);
+                    detailDTO.setTopN(topN);
+                    countDetailDTOS.add(detailDTO);
+                }
+            }
+            map.put(firstName, countDetailDTOS);
+        } else {
+            detailDTOS.addAll(countDetailDTOS);
+        }
     }
 
     /**
@@ -333,7 +490,7 @@ public class EsCountService {
      * @param field
      * @param detailDTOS
      */
-    public void getChildCountDTOS(Aggregate agg, String field,Integer fieldType, Integer topN,
+    public void getChildCountDTOS(Aggregate agg, String field, Integer fieldType, Integer topN,
                                   List<EsCountDetailDTO> detailDTOS, EsCountDTO esCountDTO) {
         esCountDTO.setAllNumber(agg.children().docCount());
         Aggregate childAgg = agg.children().aggregations().get("childAgg");
@@ -377,8 +534,10 @@ public class EsCountService {
      * @param field
      * @param detailDTOS
      */
-    public void getChildAnalysisDTOS(Aggregate agg, String field,Integer fieldType,Integer topN,
-                                     List<EsCountDetailDTO> detailDTOS, EsCountDTO esCountDTO) {
+    public void getChildAnalysisDTOS(Aggregate agg, String field, Integer fieldType, Integer topN,
+                                     List<EsCountDetailDTO> detailDTOS, EsCountDTO esCountDTO,
+                                     String firstName, Map<String, List<EsCountDetailDTO>> map,List<String> values) {
+        List<EsCountDetailDTO> countDetailDTOS = new ArrayList<>();
         Aggregate childAgg = agg.children().aggregations().get("childAgg");
         List<StringTermsBucket> list = childAgg.sterms().buckets().array();
         list.forEach(bucket -> {
@@ -390,23 +549,72 @@ public class EsCountService {
                 dto.setField(field);
                 dto.setName(termsBucket.key().stringValue());
                 dto.setNumber(termsBucket.docCount());
+                dto.setFirstName(firstName);
                 dto.setTopN(topN);
-                if (dto.getNumber() > 0) {
-                    detailDTOS.add(dto);
-                    if (fieldType == null || fieldType != 6) {
-                        Long docCount = aggregate.sterms().sumOtherDocCount();
-                        EsCountDetailDTO detail = new EsCountDetailDTO();
-                        detail.setField(field);
-                        detail.setName("未选择");
-                        detail.setNumber(docCount);
-                        detail.setTopN(topN);
-                        if (!detailDTOS.contains(detail)) {
-                            detailDTOS.add(detail);
-                        }
+                countDetailDTOS.add(dto);
+                if (fieldType == null || fieldType != 6) {
+                    Long docCount = aggregate.sterms().sumOtherDocCount();
+                    EsCountDetailDTO detail = new EsCountDetailDTO();
+                    detail.setField(field);
+                    detail.setName("未选择");
+                    detail.setNumber(docCount);
+                    detail.setTopN(topN);
+                    if (!countDetailDTOS.contains(detail)) {
+                        countDetailDTOS.add(detail);
                     }
                 }
+//                if (dto.getNumber() > 0) {
+//                    detailDTOS.add(dto);
+//                    if (fieldType == null || fieldType != 6) {
+//                        Long docCount = aggregate.sterms().sumOtherDocCount();
+//                        EsCountDetailDTO detail = new EsCountDetailDTO();
+//                        detail.setField(field);
+//                        detail.setName("未选择");
+//                        detail.setNumber(docCount);
+//                        detail.setTopN(topN);
+//                        if (!detailDTOS.contains(detail)) {
+//                            detailDTOS.add(detail);
+//                        }
+//                    }
+//                }
             });
         });
+
+        List<String> strs = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(values)) {
+            strs.addAll(values);
+        }
+        if (StringUtils.isNotEmpty(firstName)) {
+            countDetailDTOS.removeIf(dto -> dto.getName().equals("其他"));
+            if (countDetailDTOS.size() != values.size()) {
+                for (EsCountDetailDTO detailDTO : countDetailDTOS) {
+                    strs.removeIf(i -> i.equals(detailDTO.getName()));
+                }
+                for (String value : strs) {
+                    EsCountDetailDTO detailDTO = new EsCountDetailDTO();
+                    detailDTO.setName(value);
+                    detailDTO.setFirstName(firstName);
+                    detailDTO.setField(field);
+                    detailDTO.setNumber(0L);
+                    detailDTO.setTopN(topN);
+                    countDetailDTOS.add(detailDTO);
+                }
+            } else if (countDetailDTOS.isEmpty()) {
+                for (String value : values) {
+                    EsCountDetailDTO detailDTO = new EsCountDetailDTO();
+                    detailDTO.setName(value);
+                    detailDTO.setFirstName(firstName);
+                    detailDTO.setField(field);
+                    detailDTO.setNumber(0L);
+                    detailDTO.setTopN(topN);
+                    countDetailDTOS.add(detailDTO);
+                }
+            }
+            map.put(firstName, countDetailDTOS);
+        } else {
+            detailDTOS.addAll(countDetailDTOS);
+        }
+
     }
 
     /**
@@ -416,7 +624,10 @@ public class EsCountService {
      * @param field
      * @param detailDTOS
      */
-    public void getNumberAnalysisDTOS(Aggregate agg, String field,Integer topN, List<EsCountDetailDTO> detailDTOS) {
+    public void getNumberAnalysisDTOS(Aggregate agg, String field, Integer topN, List<EsCountDetailDTO> detailDTOS,
+                                      EsCountDTO esCountDTO, String firstName,
+                                      Map<String, List<EsCountDetailDTO>> map,List<String> values) {
+        List<EsCountDetailDTO> countDetailDTOS = new ArrayList<>();
         List<RangeBucket> list = agg.range().buckets().array();
         for (RangeBucket bucket : list) {
             EsCountDetailDTO dto = new EsCountDetailDTO();
@@ -424,9 +635,46 @@ public class EsCountService {
             dto.setName(bucket.key());
             dto.setNumber(bucket.docCount());
             dto.setTopN(topN);
-            if (dto.getNumber() > 0) {
-                detailDTOS.add(dto);
+            dto.setFirstName(firstName);
+            countDetailDTOS.add(dto);
+//            if (dto.getNumber() > 0) {
+//                detailDTOS.add(dto);
+//            }
+        }
+
+        List<String> strs = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(values)) {
+            strs.addAll(values);
+        }
+        if (StringUtils.isNotEmpty(firstName)) {
+            countDetailDTOS.removeIf(dto -> dto.getName().equals("其他"));
+            if (countDetailDTOS.size() != values.size()) {
+                for (EsCountDetailDTO detailDTO : countDetailDTOS) {
+                    strs.removeIf(i -> i.equals(detailDTO.getName()));
+                }
+                for (String value : strs) {
+                    EsCountDetailDTO detailDTO = new EsCountDetailDTO();
+                    detailDTO.setName(value);
+                    detailDTO.setFirstName(firstName);
+                    detailDTO.setField(field);
+                    detailDTO.setNumber(0L);
+                    detailDTO.setTopN(topN);
+                    countDetailDTOS.add(detailDTO);
+                }
+            } else if (countDetailDTOS.isEmpty()) {
+                for (String value : values) {
+                    EsCountDetailDTO detailDTO = new EsCountDetailDTO();
+                    detailDTO.setName(value);
+                    detailDTO.setFirstName(firstName);
+                    detailDTO.setField(field);
+                    detailDTO.setNumber(0L);
+                    detailDTO.setTopN(topN);
+                    countDetailDTOS.add(detailDTO);
+                }
             }
+            map.put(firstName, countDetailDTOS);
+        } else {
+            detailDTOS.addAll(countDetailDTOS);
         }
     }
 
@@ -473,7 +721,7 @@ public class EsCountService {
                         h1Count += histogramBucket.docCount();
                         dto.setNumber(h1Count);
                     }
-                    if (month.after(halfYearDate)){
+                    if (month.after(halfYearDate)) {
                         h2Count += histogramBucket.docCount();
                         dto2.setNumber(h2Count);
                     }
@@ -489,6 +737,37 @@ public class EsCountService {
                 detailDTO.setNumber(sum);
                 esCountDetailDTOS.add(detailDTO);
             }
+        } else if (StringUtils.isNotEmpty(format) && format.equals("季")) {
+            for (DateHistogramBucket bucket : list) {
+                String yearMonth = bucket.keyAsString();
+                String year = yearMonth.substring(0, yearMonth.indexOf("-"));
+                String firstQuarter = year + "-01";
+                String secondQuarter = year + "-04";
+                String thirdQuarter = year + "-07";
+                String forthQuarter = year + "-10";
+                String firstQ = year + "-Q1";
+                String secondQ = year + "-Q2";
+                String thirdQ = year + "-Q3";
+                String forthQ = year + "-Q4";
+                EsCountDetailDTO dto = new EsCountDetailDTO();
+                dto.setField(field);
+                Aggregate aggregate = bucket.aggregations().get("filter_agg");
+                if (yearMonth.equals(firstQuarter)) {
+                    dto.setName(firstQ);
+                } else if (yearMonth.equals(secondQuarter)) {
+                    dto.setName(secondQ);
+                } else if (yearMonth.equals(thirdQuarter)) {
+                    dto.setName(thirdQ);
+                } else if (yearMonth.equals(forthQuarter)) {
+                    dto.setName(forthQ);
+                }
+                dto.setNumber(bucket.docCount());
+                dto.setTopN(topN);
+                if (aggregate != null) {
+                    dto.setNumber(aggregate.filter().docCount());
+                }
+                esCountDetailDTOS.add(dto);
+            }
         } else {
             list.forEach(bucket -> {
                 EsCountDetailDTO dto = new EsCountDetailDTO();
@@ -500,9 +779,7 @@ public class EsCountService {
                 if (aggregate != null) {
                     dto.setNumber(aggregate.filter().docCount());
                 }
-                if (dto.getNumber() > 0) {
-                    esCountDetailDTOS.add(dto);
-                }
+                esCountDetailDTOS.add(dto);
             });
         }
 
@@ -512,17 +789,18 @@ public class EsCountService {
             detailDTOS.addAll(collect);
         }
 
-        EsCountDetailDTO countDTO = new EsCountDetailDTO();
-        countDTO.setField(field);
-        countDTO.setName("其他");
-        if (list.size() > topN) {
-            countDTO.setNumber((long)(list.size() - topN));
-
-        } else {
-            countDTO.setNumber((long)0);
-        }
-        countDTO.setTopN(topN);
-        detailDTOS.add(countDTO);
+//        EsCountDetailDTO countDTO = new EsCountDetailDTO();
+//        countDTO.setField(field);
+//        countDTO.setName("其他");
+//        if (list.size() > topN) {
+//            int sum = list.size() - topN;
+//            countDTO.setNumber(Long.valueOf(String.valueOf(sum)));
+//
+//        } else {
+//            countDTO.setNumber(0L);
+//        }
+//        countDTO.setTopN(topN);
+//        detailDTOS.add(countDTO);
     }
 
     /**
@@ -533,23 +811,59 @@ public class EsCountService {
      * @param topN
      * @param detailDTOS
      */
-    public void getDateAnalysisDTOS(Aggregate agg, String field, Integer topN, List<EsCountDetailDTO> detailDTOS,EsCountDTO esCountDTO) {
+    public void getDateAnalysisDTOS(Aggregate agg, String field, Integer topN, List<EsCountDetailDTO> detailDTOS,
+                                    EsCountDTO esCountDTO, String firstName,
+                                    Map<String, List<EsCountDetailDTO>> map,List<String> values) {
         List<RangeBucket> list1 = agg.dateRange().buckets().array();
         List<EsCountDetailDTO> esCountDetailDTOS = new ArrayList<>();
         for (RangeBucket bucket : list1) {
             EsCountDetailDTO dto = new EsCountDetailDTO();
+            dto.setFirstName(firstName);
             dto.setField(field);
             dto.setName(bucket.key());
             dto.setNumber(bucket.docCount());
             dto.setTopN(topN);
-            if (dto.getNumber() > 0) {
-                esCountDetailDTOS.add(dto);
-            }
+            esCountDetailDTOS.add(dto);
         }
         if (!CollectionUtils.isEmpty(esCountDetailDTOS)) {
             List<EsCountDetailDTO> collect = esCountDetailDTOS.stream()
                     .sorted(Comparator.comparing(EsCountDetailDTO::getName).reversed()).limit(topN).collect(Collectors.toList());
-            detailDTOS.addAll(collect);
+
+            List<String> strs = new ArrayList<>();
+            if (!CollectionUtils.isEmpty(values)) {
+                strs.addAll(values);
+            }
+            if (StringUtils.isNotEmpty(firstName)) {
+                collect.removeIf(dto -> dto.getName().equals("其他"));
+                if (collect.size() != values.size()) {
+                    for (EsCountDetailDTO detailDTO : collect) {
+                        strs.removeIf(i -> i.equals(detailDTO.getName()));
+                    }
+                    for (String value : strs) {
+                        EsCountDetailDTO detailDTO = new EsCountDetailDTO();
+                        detailDTO.setName(value);
+                        detailDTO.setFirstName(firstName);
+                        detailDTO.setField(field);
+                        detailDTO.setNumber(0L);
+                        detailDTO.setTopN(topN);
+                        collect.add(detailDTO);
+                    }
+                } else if (collect.isEmpty()) {
+                    for (String value : values) {
+                        EsCountDetailDTO detailDTO = new EsCountDetailDTO();
+                        detailDTO.setName(value);
+                        detailDTO.setFirstName(firstName);
+                        detailDTO.setField(field);
+                        detailDTO.setNumber(0L);
+                        detailDTO.setTopN(topN);
+                        collect.add(detailDTO);
+                    }
+                }
+                map.put(firstName, collect);
+            } else {
+                detailDTOS.addAll(collect);
+            }
+
         }
     }
 
@@ -560,14 +874,17 @@ public class EsCountService {
      * @param field
      * @param detailDTOS
      */
-    public void getNestedCountDTOS(Aggregate agg, String field, Integer topN, List<EsCountDetailDTO> detailDTOS) {
+    public void getNestedCountDTOS(Aggregate agg, String field, Integer topN, List<EsCountDetailDTO> detailDTOS,
+                                   EsCountDTO esCountDTO, String firstName,
+                                   Map<String, List<EsCountDetailDTO>> map, List<String> values) {
         Aggregate termsAgg = agg.nested().aggregations().get("terms_agg");
+        List<EsCountDetailDTO> countDetailDTOS = new ArrayList<>();
         EsCountDetailDTO countDTO = new EsCountDetailDTO();
         countDTO.setField(field);
         countDTO.setName("其他");
         countDTO.setNumber(termsAgg.sterms().sumOtherDocCount());
         countDTO.setTopN(topN);
-        detailDTOS.add(countDTO);
+        countDetailDTOS.add(countDTO);
         List<StringTermsBucket> list = termsAgg.sterms().buckets().array();
         list.forEach(bucket -> {
             EsCountDetailDTO dto = new EsCountDetailDTO();
@@ -576,14 +893,50 @@ public class EsCountService {
             dto.setName(bucket.key().stringValue());
             dto.setNumber(bucket.docCount());
             dto.setTopN(topN);
+            dto.setFirstName(firstName);
             if (aggregate != null) {
                 dto.setNumber(aggregate.filter().docCount());
             }
-            if (dto.getNumber() > 0) {
-                detailDTOS.add(dto);
-            }
+            countDetailDTOS.add(dto);
+//            if (dto.getNumber() > 0) {
+//                detailDTOS.add(dto);
+//            }
         });
-    }
 
+        List<String> strs = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(values)) {
+            strs.addAll(values);
+        }
+        if (StringUtils.isNotEmpty(firstName)) {
+            countDetailDTOS.removeIf(dto -> dto.getName().equals("其他"));
+            if (countDetailDTOS.size() != values.size()) {
+                for (EsCountDetailDTO detailDTO : countDetailDTOS) {
+                    strs.removeIf(i -> i.equals(detailDTO.getName()));
+                }
+                for (String value : strs) {
+                    EsCountDetailDTO detailDTO = new EsCountDetailDTO();
+                    detailDTO.setName(value);
+                    detailDTO.setFirstName(firstName);
+                    detailDTO.setField(field);
+                    detailDTO.setNumber(0L);
+                    detailDTO.setTopN(topN);
+                    countDetailDTOS.add(detailDTO);
+                }
+            } else if (countDetailDTOS.isEmpty()) {
+                for (String value : values) {
+                    EsCountDetailDTO detailDTO = new EsCountDetailDTO();
+                    detailDTO.setName(value);
+                    detailDTO.setFirstName(firstName);
+                    detailDTO.setField(field);
+                    detailDTO.setNumber(0L);
+                    detailDTO.setTopN(topN);
+                    countDetailDTOS.add(detailDTO);
+                }
+            }
+            map.put(firstName, countDetailDTOS);
+        } else {
+            detailDTOS.addAll(countDetailDTOS);
+        }
+    }
 
 }

+ 44 - 4
src/main/java/cn/cslg/pas/service/business/es/EsCustomFieldService.java

@@ -1,10 +1,7 @@
 package cn.cslg.pas.service.business.es;
 
 import cn.cslg.pas.common.core.base.IfConstant;
-import cn.cslg.pas.common.dto.es.EsCustomFieldDTO;
-import cn.cslg.pas.common.dto.es.EsCustomFieldValueDTO;
-import cn.cslg.pas.common.dto.es.FieldHistoryDTO;
-import cn.cslg.pas.common.dto.es.QueryEsCustomFieldDTO;
+import cn.cslg.pas.common.dto.es.*;
 import cn.cslg.pas.common.model.request.OrderDTO;
 import cn.cslg.pas.common.utils.FormatUtil;
 import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
@@ -620,6 +617,49 @@ public class EsCustomFieldService {
         return esCustomFieldHistoryHit;
 
     }
+    public PatentWithIdVO getPatentLabel(AddPatentLabelDTO addPatentLabelDTO) throws Exception {
+        PatentWithIdVO patentWithIdVO = new PatentWithIdVO();
+        Integer projectId = addPatentLabelDTO.getProjectId();
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        String patentNo = addPatentLabelDTO.getPatentNo();
+        //设置查询索引
+        builder.index("patent");
+
+        //栏位
+        Query q1 = QueryBuilders.term(t -> t.field("custom_field.project_id").value(projectId));
+
+
+        Query q4 = QueryBuilders.term(t -> t.field("custom_field.field_type").value(10));
+
+        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 q3 = QueryBuilders.hasParent(t -> t.parentType("patent").query(parentQ));
+
+        Query bool = null;
+            bool = QueryBuilders.bool(i -> i.must(q1, q3, q4));
+
+
+        builder.query(bool);
+        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();
+            Hit<Patent> hit = hits.get(0);
+            Patent patent = hit.source();
+            patentWithIdVO.setPatent(patent);
+            patentWithIdVO.setId(hit.id());
+        } else {
+            patentWithIdVO = null;
+        }
+        return patentWithIdVO;
+    }
 
 }

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

@@ -47,6 +47,7 @@ import org.springframework.util.CollectionUtils;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -353,6 +354,7 @@ public class EsPatentService {
         rePatentSource.add("public_date");
         rePatentSource.add("grant_no");
         rePatentSource.add("grant_date");
+        rePatentSource.add("title");
         return rePatentSource;
     }
 
@@ -520,4 +522,21 @@ public class EsPatentService {
         }
         return queryList;
     }
+
+
+
+    public List<Hit<Patent>>  getById(List<String> ids) throws Exception {
+        List<Hit<Patent>> patents =new ArrayList<>();
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        builder.index("patent");
+        Query q = QueryBuilders.ids(i -> i.values(ids));
+        builder.query(q);
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        long total = response.hits().total().value();
+        if (total > 0) {
+            patents  = response.hits().hits();
+            }
+        return patents;
+        }
+
 }

+ 240 - 140
src/main/java/cn/cslg/pas/service/business/es/EsScratchWordsService.java

@@ -1,32 +1,44 @@
 package cn.cslg.pas.service.business.es;
 
+import cn.cslg.pas.common.dto.PatentColumnDTO;
 import cn.cslg.pas.common.dto.QueryScratchWordsDTO;
+import cn.cslg.pas.common.model.cronModel.Personnel;
+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.CacheUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
+import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
+import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
+import cn.cslg.pas.common.vo.EsConfigVO;
 import cn.cslg.pas.common.vo.PatentWithIdVO;
+import cn.cslg.pas.common.vo.ScratchWordsVO;
 import cn.cslg.pas.domain.business.ScratchWords;
 import cn.cslg.pas.domain.es.Marking;
 import cn.cslg.pas.domain.es.Patent;
 import cn.cslg.pas.domain.es.PatentJoin;
 import cn.cslg.pas.exception.XiaoShiException;
+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.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.DeleteResponse;
-import co.elastic.clients.elasticsearch.core.SearchRequest;
-import co.elastic.clients.elasticsearch.core.SearchResponse;
+import co.elastic.clients.elasticsearch.core.*;
 import co.elastic.clients.elasticsearch.core.search.Hit;
 import co.elastic.clients.json.JsonData;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.ibatis.javassist.bytecode.stackmap.MapMaker;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 @Service
 public class EsScratchWordsService {
@@ -36,6 +48,12 @@ public class EsScratchWordsService {
     private ElasticsearchClient client;
     @Autowired
     private PermissionService permissionService;
+    @Autowired
+    private CacheUtils cacheUtils;
+    @Autowired
+    private LoginUtils loginUtils;
+    @Autowired
+    private FormatQueryService formatQueryService;
 
     //添加划词标注
     public String addScratchWords(ScratchWords scratchWords) {
@@ -43,30 +61,13 @@ public class EsScratchWordsService {
         if (patentNo == null) {
             throw new XiaoShiException("请输入专利号");
         }
-        //根据专利号查询专利
-        String patentId = null;
-        try {
-            PatentWithIdVO patentWithIdVO = esService.getIdByPatentNo(patentNo);
-            if (patentWithIdVO != null) {
-                patentId = patentWithIdVO.getId();
-            }
-        } catch (Exception e) {
-            throw new XiaoShiException("未获取到专利");
-        }
-        if (patentId == null) {
-            throw new XiaoShiException("未获取到专利");
-        }
+
         Marking marking = new Marking();
         BeanUtils.copyProperties(scratchWords, marking);
-        Patent patent = new Patent();
-        patent.setMarkings(marking);
-        PatentJoin patentJoin = new PatentJoin();
-        patentJoin.setParent(patentId);
-        patentJoin.setName("marking");
-        patent.setPatentJoin(patentJoin);
+        marking.setMarkTime(new Date());
         String id = null;
         try {
-            id = esService.addChildPatent(patent, patentId);
+            id = this.saveToEs(marking);
         } catch (Exception e) {
             throw new XiaoShiException("保存失败");
         }
@@ -75,165 +76,264 @@ public class EsScratchWordsService {
 
     public String updateScratchWords(String id, Marking marking) {
         //根据id查询
-        Patent patent = null;
+        Marking markingLast = null;
         try {
-            patent = this.getById(id);
+            markingLast = this.getById(id);
         } catch (Exception e) {
             throw new XiaoShiException("错误");
         }
-        if (patent == null) {
+        if (markingLast == null) {
             throw new XiaoShiException("划词信息不存在");
         }
-        Marking marking1 = patent.getMarkings();
-        BeanUtils.copyProperties(marking, marking1);
-        patent.setMarkings(marking1);
-        esService.updatePatent(patent, id);
+        BeanUtils.copyProperties(marking, markingLast);
+        this.updateToEs(marking, id);
         return id;
     }
 
-    public void queryScratchWord(QueryScratchWordsDTO queryScratchWordsDTO) {
-        String createId = "1";
-        Integer tenantId = 1;
-        String createName = queryScratchWordsDTO.getCreateName();
-        String patentNo = queryScratchWordsDTO.getPatentNo();
-        String content = queryScratchWordsDTO.getMarkSelectText();
-        Date marketTime = queryScratchWordsDTO.getMarkTime();
-        Integer projectId = 1;
-        //公开
-        Query q1 = QueryBuilders.term(t -> t.field("markings.is_public").value(true));
-        //不公开
-        Query q2 = QueryBuilders.term(t -> t.field("markings.is_public").value(false));
-        //创建人id
-        Query q3 = QueryBuilders.term(t -> t.field("markings.mark_user_id").value(createId));
-        //租户id
-        Query q4 = QueryBuilders.term(t -> t.field("markings.public_tenant_id").value(tenantId));
-        //公开范围为全部
-        Query q5 = QueryBuilders.term(t -> t.field("markings.public_scope").value(0));
-        //公开范围为所在地
-        Query q6 = QueryBuilders.term(t -> t.field("markings.public_scope").value(1));
-        //数据库id
-        Query q7 = QueryBuilders.term(t -> t.field("public_project_id").value(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 qPatent = QueryBuilders.hasParent(t -> t.parentType("patent").query(parentQ));
-        //公开并且全部范围
-        Query bool1 = QueryBuilders.bool(i -> i.must(q1, q6, q4));
-        // 公开并且所在地
-        Query bool2 = QueryBuilders.bool(i -> i.must(q1, q6, q7));
-        //不公开
-        Query bool3 = QueryBuilders.bool(i -> i.must(q2, q3, q7));
-        List<Query> queries = new ArrayList<>();
-        queries.add(bool1);
-        queries.add(bool2);
-        queries.add(bool3);
-        if (patentNo != null) {
-            Query query = this.getPatentNoQuery(patentNo);
-            queries.add(query);
-        }
-        if (createName != null && createName.trim() != "") {
-            Query query = this.getCreateQuery(createName);
-            queries.add(query);
-        }
-        if (content != null && content.trim() != "") {
-            Query query = this.getContentQuery(content);
-            queries.add(query);
-        }
-        if(marketTime!=null){
-            Query query =this.getMarkTimeQuery(marketTime);
-            queries.add(query);
-        }
-        Query searchBool = QueryBuilders.bool(i -> i.must(queries));
+    public Records queryScratchWord(StringRequest stringRequest) {
+        Long current = stringRequest.getCurrent();
+        Long size = stringRequest.getSize();
+        Records records = new Records();
+        List<ScratchWordsVO> scratchWordsVOS = new ArrayList<>();
+        Query searchQuerys = this.getSearchQuerys(stringRequest);
         SearchRequest.Builder builder = new SearchRequest.Builder();
+        builder.index("patent_marking");
+        if (current == null || size == null || current < 0 || size < 0) {
+            current = Long.parseLong(1 + "");
+            size = Long.parseLong(1000 + "");
+        }
+        builder.from((current.intValue() - 1) * size.intValue()).size(size.intValue());
+        builder.query(searchQuerys);
 
-        builder.index("patent");
-        builder.query(searchBool);
+        long total = 0;
         try {
-            SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
-            List<Hit<Patent>> hits = response.hits().hits();
-            List<Patent> patentList = new ArrayList<>();
-            for (Hit<Patent> hit : hits) {
-                Patent patent = hit.source();
-                patentList.add(patent);
+            SearchResponse<Marking> response = client.search(builder.build(), Marking.class);
+            List<Hit<Marking>> hits = response.hits().hits();
+            total = response.hits().total().value();
+            for (Hit<Marking> hit : hits) {
+                Marking marking = hit.source();
+                ScratchWordsVO scratchWordsVO = new ScratchWordsVO();
+                BeanUtils.copyProperties(marking, scratchWordsVO);
+                scratchWordsVO.setId(hit.id());
+                scratchWordsVOS.add(scratchWordsVO);
             }
         } catch (Exception e) {
-            System.out.println("aa");
-        }
 
+        }
+        records.setTotal(total);
+        records.setData(scratchWordsVOS);
+        return records;
     }
 
+    public Query getSearchQuerys(StringRequest stringRequest) {
+//      PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        PersonnelVO personnelVO = new PersonnelVO();
+        personnelVO.setId("328");
+        personnelVO.setTenantId(1);
+        String createId = personnelVO.getId();
+        Integer tenantId = personnelVO.getTenantId();
+        String searchCondition = stringRequest.getSearchQuery();
+        //1. 解析检索条件
+        Query reQuery = null;
+        try {
+
+            Query q = this.getSearchQQuery(searchCondition);
+            Integer projectId = stringRequest.getProjectId();
+            //公开
+            Query q1 = QueryBuilders.term(t -> t.field("is_public").value(true));
+            //不公开
+            Query q2 = QueryBuilders.term(t -> t.field("is_public").value(false));
+            //创建人id
+            Query q3 = QueryBuilders.term(t -> t.field("mark_user_id").value(createId));
+            //租户id
+            Query q4 = QueryBuilders.term(t -> t.field("public_tenant_id").value(tenantId));
+            //公开范围为全部
+            Query q5 = QueryBuilders.term(t -> t.field("public_scope").value(0));
+            //公开范围为所在地
+            Query q6 = QueryBuilders.term(t -> t.field("public_scope").value(1));
+            //数据库id
+            Query q7 = null;
+            if (projectId != null) {
+                q7 = QueryBuilders.term(t -> t.field("public_project_id").value(projectId));
+            }
+
+            //公开并且全部范围
+            Query bool1 = QueryBuilders.bool(i -> i.must(q1, q5, q4));
+            // 公开并且所在地
+            List<Query> bool2Querys = new ArrayList<>();
+            bool2Querys.add(q1);
+            bool2Querys.add(q6);
+            if (projectId != null) {
+                bool2Querys.add(q7);
+            }
+            bool2Querys.add(q4);
+            Query bool2 = QueryBuilders.bool(i -> i.must(bool2Querys));
+
+            //不公开并且全部范围
+            Query bool3 = QueryBuilders.bool(i -> i.must(q2, q5, q3));
+            //不公开并且所在地
+            List<Query> bool3Querys = new ArrayList<>();
+            bool3Querys.add(q2);
+            bool3Querys.add(q6);
+            if (projectId != null) {
+                bool3Querys.add(q7);
+            }
+            bool3Querys.add(q3);
+            Query bool4 = QueryBuilders.bool(i -> i.must(bool3Querys));
+            Query riBool = QueryBuilders.bool(i -> i.should(bool1, bool2, bool3, bool4));
+            if (q == null) {
+                reQuery = riBool;
+            } else {
+                reQuery = QueryBuilders.bool(i -> i.must(riBool, q));
+            }
+        } catch (Exception e) {
+          System.out.println(e.getMessage());
+        }
+        return reQuery;
+    }
 
     //查询栏位历史
-    public Patent getById(String wordsId) throws Exception {
-        Patent patent = null;
+    public Marking getById(String wordsId) throws Exception {
+        Marking marking = null;
         SearchRequest.Builder builder = new SearchRequest.Builder();
-        builder.index("patent");
+        builder.index("patent_marking");
         Query q = QueryBuilders.ids(i -> i.values(Arrays.asList(wordsId)));
         builder.query(q);
-        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        SearchResponse<Marking> response = client.search(builder.build(), Marking.class);
         long total = response.hits().total().value();
         if (total > 0) {
-            patent = response.hits().hits().get(0).source();
+            marking = response.hits().hits().get(0).source();
         }
-        return patent;
+        return marking;
     }
 
 
     public void removeById(String id) throws IOException {
         DeleteResponse deleteResponse = client.delete(deleteRequest ->
-                deleteRequest.index("patent").id(id)
+                deleteRequest.index("patent_marking").id(id)
         );
 
     }
 
 
-    //获得专利号检索式
-    public Query getPatentNoQuery(String patentNo) {
-        Query parentQ1 = QueryBuilders.term(t -> t.field("app_no.keyword").value(patentNo));
+    //保存
+    public String saveToEs(Marking marking) throws Exception {
+        IndexResponse indexResponse = client.index(i -> i
+                .index("patent_marking")
+                .document(marking)
+        );
+        return indexResponse.id();
 
-        //公开号
-        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 qPatent = QueryBuilders.hasParent(t -> t.parentType("patent").query(parentQ));
-        return qPatent;
     }
 
-    //获得创建时间检索式
-    public Query getMarkTimeQuery(Date markTime) {
-        SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");
-        String time = format2.format(markTime);
-        Query query = QueryBuilders.term(t -> t.field("mark_time").value(time));
-        return query;
+    public Integer updateToEs(Marking marking, String id) {
+        UpdateRequest<Marking, Marking> req;
+        req = UpdateRequest.of(
+                b -> b.index("patent_marking").id(id)
+                        .doc(marking)
+        );
+        try {
+            client.update(req, Marking.class);
+            return 1;
+        } catch (IOException e) {
+            return -1;
+        }
     }
 
-    //获得创建人检索式
-    public Query getCreateQuery(String createName) {
-        List<String> ids = new ArrayList<>();
+    public Records groupScratchWord(StringRequest stringRequest) {
+        Records records = new Records();
+        Query searchQuerys = this.getSearchQuerys(stringRequest);
+        Long current = stringRequest.getCurrent();
+        Long size = stringRequest.getSize();
+        String groupField = stringRequest.getGroupField();
+        String esGroupFiled = this.getGroupField(groupField);
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+
+        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();
+
+        builder.aggregations("agg", aggregation);
+        builder.size(0);
+
+        //查询总数聚合
+        Aggregation totalAggregation = AggregationBuilders.cardinality(i -> i.field(esGroupFiled));
+        builder.aggregations("total", totalAggregation);
         try {
-            String json = permissionService.getPersonIdByNamePCS(createName, false);
-            ids = JSON.parseArray(json, String.class);
+            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);
+            }
+          maps =this.loadNameMap(maps,groupField);
+            records.setData(maps);
+
+            Aggregate totalAgg = response.aggregations().get("total");
+            long total = totalAgg.cardinality().value();
+            records.setTotal(total);
+            records.setCurrent(current);
+            records.setSize(size);
         } catch (Exception e) {
         }
-        if (ids == null || ids.size() == 0) {
-            ids = new ArrayList<>();
-            ids.add("0");
+        return records;
+    }
+
+    public String getGroupField(String field) {
+        String json = CommonService.readJsonFile("marking" + ".json");
+        List<EsConfigVO> esConfigVOS = JSON.parseArray(json, EsConfigVO.class);
+        EsConfigVO esConfigVO = esConfigVOS.stream().filter(item -> item.getField().equals(field)).findFirst().orElse(null);
+
+        return esConfigVO.getEsField();
+    }
+
+    public Query getSearchQQuery(String searchCondition) throws Exception {
+        Query q = null;
+        if (searchCondition != null && searchCondition != "") {
+            treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
+            //格式化检索式
+            //3. 从es中检索数据
+            q = formatQueryService.EsQueryToQuery((operateNode) tree, "marking");
+
         }
-        String strs = JsonData.of(ids).toString();
-        Query query = QueryBuilders.term(t -> t.field("mark_time").value(strs));
-        return query;
+        return q;
     }
 
-    //获得内容检索式
-    public Query getContentQuery(String content) {
-        Query query = QueryBuilders.match(t -> t.field("mark_selectText").query(content));
-        return query;
+    public List<Map<String, Object>> loadNameMap(List<Map<String, Object>> maps, String groupField) {
+        if (maps.size() == 0) {
+            return maps;
+        }
+        if (groupField.equals("createName")) {
+            try {
+                List<String> ids = new ArrayList<>();
+                maps.forEach(item -> ids.add(item.get("key").toString()));
+                String res = permissionService.getPersonnelByIdsFromPCS(ids);
+                JSONObject jsonObject = JSONObject.parseObject(res);
+                List<Personnel> personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
+                maps.forEach(item ->
+                        {
+                            Personnel personnel = personnels.stream().filter(i -> i.getId().equals(item.get("key"))).findFirst().orElse(null);
+                            if (personnel != null) {
+                                item.put("key", personnel.getPersonnelName());
+                            }
+                        }
+
+                );
+            } catch (Exception e) {
+            }
+        }
+        return maps;
+
     }
 }

+ 7 - 5
src/main/java/cn/cslg/pas/service/business/invalidReport/AssoGroupFeatureService.java

@@ -85,10 +85,9 @@ public class AssoGroupFeatureService extends ServiceImpl<AssoGroupFeatureMapper,
             featureGen = 2;
         }
         //获得上一个世代值
-        Integer lastGen = featureGen - 1;
         //根据特征id查询证据组合和特征关联
         LambdaQueryWrapper<AssoGroupFeature> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(AssoGroupFeature::getFeatureId, featureId).eq(AssoGroupFeature::getFeatureGen, lastGen);
+        queryWrapper.eq(AssoGroupFeature::getFeatureId, featureId);
         List<AssoGroupFeature> assoGroupFeatures = this.list(queryWrapper);
         Integer newFeatureId = this.addFeature(featureContent);
         //更新特征内容
@@ -388,7 +387,7 @@ public class AssoGroupFeatureService extends ServiceImpl<AssoGroupFeatureMapper,
     }
 
 
-    public Boolean removeAssoWithHistory(List<Integer> assoIds) {
+    public Boolean removeAssoWithHistory(List<Integer> assoIds,List<Integer> notInAssoIds) {
         List<Integer> ids = new ArrayList<>();
         //查询
         if (assoIds == null || assoIds.size() == 0) {
@@ -399,8 +398,11 @@ public class AssoGroupFeatureService extends ServiceImpl<AssoGroupFeatureMapper,
             queryFeatureHistoryDTO.setFeatureGroupId(item);
             List<AssoGroupFeature> assoGroupFeatures = this.getHistory(queryFeatureHistoryDTO);
             if (assoGroupFeatures.size() > 0) {
-                List<Integer> temIds = assoGroupFeatures.stream().map(AssoGroupFeature::getId).collect(Collectors.toList());
-                ids.addAll(temIds);
+                AssoGroupFeature assoGroupFeatures1 =assoGroupFeatures.stream().filter(i->notInAssoIds.contains(i.getId())).findFirst().orElse(null);
+                if(assoGroupFeatures1==null) {
+                    List<Integer> temIds = assoGroupFeatures.stream().map(AssoGroupFeature::getId).collect(Collectors.toList());
+                    ids.addAll(temIds);
+                }
             }
         });
         if (ids.size() > 0) {

+ 47 - 45
src/main/java/cn/cslg/pas/service/business/invalidReport/EvidenceReasonService.java

@@ -63,32 +63,31 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
 
         List<AddEvidenceReasonsDTO> addEvidenceReasonsDTOList = new ArrayList<>();
 
-            // 遍历装载不同的特征
-            addEvidenceReasonsDTOs.forEach(item -> {
-                AddEvidenceReasonsDTO tem = addEvidenceReasonsDTOList.stream().filter(i -> i.getFeatureOrder().equals(item.getFeatureOrder())).findFirst().orElse(null);
-                if (tem == null) {
-                    addEvidenceReasonsDTOList.add(item);
-                }
+        // 遍历装载不同的特征
+        addEvidenceReasonsDTOs.forEach(item -> {
+            AddEvidenceReasonsDTO tem = addEvidenceReasonsDTOList.stream().filter(i -> i.getFeatureOrder().equals(item.getFeatureOrder())).findFirst().orElse(null);
+            if (tem == null) {
+                addEvidenceReasonsDTOList.add(item);
+            }
 
-            });
-            //遍历插入无id特征
-            addEvidenceReasonsDTOList.forEach(item -> {
-                if (item.getFeatureId() == null) {
-                    Feature feature = new Feature();
-                    feature.setContent(item.getFeatureText());
-                    feature.insert();
-                    item.setFeatureId(feature.getId());
-                }
-            });
+        });
+        //遍历插入无id特征
+        addEvidenceReasonsDTOList.forEach(item -> {
+            if (item.getFeatureId() == null) {
+                Feature feature = new Feature();
+                feature.setContent(item.getFeatureText());
+                feature.insert();
+                item.setFeatureId(feature.getId());
+            }
+        });
 
         List<Integer> assoIds = new ArrayList<>();
-
-            LambdaQueryWrapper<AssoGroupFeature> queryWrapper = new LambdaQueryWrapper<>();
-            queryWrapper.eq(AssoGroupFeature::getGroupId, groupId)
-                    .eq(AssoGroupFeature::getFeatureGen,0);
-            List<AssoGroupFeature> assoGroupFeatures = assoGroupFeatureService.list(queryWrapper);
-            assoIds = assoGroupFeatures.stream().map(AssoGroupFeature::getId).collect(Collectors.toList());
-
+        List<Integer> notInAssoIds = new ArrayList<>();
+        LambdaQueryWrapper<AssoGroupFeature> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoGroupFeature::getGroupId, groupId)
+                .eq(AssoGroupFeature::getFeatureGen, 0);
+        List<AssoGroupFeature> assoGroupFeatures = assoGroupFeatureService.list(queryWrapper);
+        assoIds = assoGroupFeatures.stream().map(AssoGroupFeature::getId).collect(Collectors.toList());
 
 
         for (AddEvidenceReasonsDTO addEvidenceReasonsDTO : addEvidenceReasonsDTOs) {
@@ -97,32 +96,35 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
             Integer featureOrder = addEvidenceReasonsDTO.getFeatureOrder();
             Integer featureGroupId = addEvidenceReasonsDTO.getFeatureGroupId();
 
-                //判断
-                AddEvidenceReasonsDTO tem = addEvidenceReasonsDTOList.stream()
-                        .filter(item -> addEvidenceReasonsDTO.getFeatureOrder().equals(item.getFeatureOrder())).findFirst().orElse(null);
-                if (tem != null) {
-                    featureId = tem.getFeatureId();
-                }
+            //判断
+            AddEvidenceReasonsDTO tem = addEvidenceReasonsDTOList.stream()
+                    .filter(item -> addEvidenceReasonsDTO.getFeatureOrder().equals(item.getFeatureOrder())).findFirst().orElse(null);
+            if (tem != null) {
+                featureId = tem.getFeatureId();
+            }
 
-                //当特征和证据组合关联id未存在时
-                if (featureGroupId == null) {
-                    AssoGroupFeature assoGroupFeature = new AssoGroupFeature();
-                    assoGroupFeature.setFeatureId(featureId);
-                    assoGroupFeature.setFeatureOrder(featureOrder);
-                    assoGroupFeature.setGroupId(groupId);
-                    assoGroupFeature.setFeatureGen(0);
-                    assoGroupFeature.insert();
-                    featureGroupId = assoGroupFeature.getId();
-                }
-                else {
-                    AssoGroupFeature assoGroupFeature = assoGroupFeatureService.getById(featureGroupId);
-                    if(assoGroupFeature.getOperateMode()==null||(assoGroupFeature.getOperateMode()!=null&&!assoGroupFeature.getOperateMode().equals(1))){
+            //当特征和证据组合关联id未存在时
+            if (featureGroupId == null) {
+                AssoGroupFeature assoGroupFeature = new AssoGroupFeature();
+                assoGroupFeature.setFeatureId(featureId);
+                assoGroupFeature.setFeatureOrder(featureOrder);
+                assoGroupFeature.setGroupId(groupId);
+                assoGroupFeature.setFeatureGen(0);
+                assoGroupFeature.insert();
+                featureGroupId = assoGroupFeature.getId();
+            } else {
+                AssoGroupFeature assoGroupFeature = assoGroupFeatureService.getById(featureGroupId);
+                if (assoGroupFeature.getOperateMode() == null || (assoGroupFeature.getOperateMode() != null && !assoGroupFeature.getOperateMode().equals(1))) {
                     assoGroupFeature.setFeatureId(featureId);
                     assoGroupFeature.setFeatureOrder(featureOrder);
                     assoGroupFeature.updateById();
-                    assoIds.remove(featureGroupId);
+                    if (assoIds.contains(featureGroupId)) {
+                        assoIds.remove(featureGroupId);
+                    } else {
+                        notInAssoIds.add(featureGroupId);
                     }
                 }
+            }
 
 
             //添加无效理由
@@ -142,7 +144,7 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
 
         if (assoIds.size() != 0) {
             //删除关联以及历史
-            assoGroupFeatureService.removeAssoWithHistory(assoIds);
+            assoGroupFeatureService.removeAssoWithHistory(assoIds,notInAssoIds);
         }
         return true;
 
@@ -266,7 +268,7 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
                         if (evidenceReason != null) {
                             queryEvidenceReasonVO.setEvidenceText(evidenceReason.getEvidenceText());
                             queryEvidenceReasonVO.setEvidenceDescription(evidenceReason.getDescription());
-                           queryEvidenceReasonVO.setErRbSummary(evidenceReason.getRbSummary());
+                            queryEvidenceReasonVO.setErRbSummary(evidenceReason.getRbSummary());
                             queryEvidenceReasonVO.setErPresentOpinions1(evidenceReason.getPresentOpinions1());
                             queryEvidenceReasonVO.setErRbDecisionKey(evidenceReason.getRbDecisionKey());
                             queryEvidenceReasonVO.setErIfPresentOpinions1(evidenceReason.getIfPresentOpinions1());

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

@@ -403,7 +403,7 @@ public class PersonFieldService {
         }
         Boolean flag = true;
         List<GetAllPatentCountVO> fieldVOS = JSON.parseArray(fieldJson, GetAllPatentCountVO.class);
-        fieldVOS = fieldVOS.stream().filter(item -> flag.equals(item.getIfStats())).collect(Collectors.toList());
+        fieldVOS = fieldVOS.stream().filter(item -> flag.equals(item.getIfStats()) || flag.equals(item.getIfGroup())).collect(Collectors.toList());
         fieldVOS.forEach(item -> item.setFiledKind(-1));
 
         //当专题库id或者报告id不为null时

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

@@ -61,7 +61,7 @@ public class GetPatentPictureFromWebThread extends Thread {
                 PatentStarApiService patentStarApiService = applicationContext.getBean(PatentStarApiService.class);
                 String pictureUrl = patentStarApiService.getPictureApi(uploadPatentWebDTO.getStarPatentVO().getRowApplicationNo());
                 if (pictureUrl != null && pictureUrl != "{}") {
-                    File file = FileUtils.getFileByUrl(pictureUrl);
+                    File file = FileUtils.getPictureFileByUrl(pictureUrl);
                     FileManagerService fileManagerService = applicationContext.getBean(FileManagerService.class);
                     String guid = FormatUtil.getPictureFormat(uploadPatentWebDTO.getStarPatentVO().getApplicationNo());
                     fileManagerService.uploadFileWithGuid(file, guid);

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

@@ -46,6 +46,7 @@ public class SchedulingTaskService {
             //查找任务
             LambdaQueryWrapper<ImportTask> queryWrapper = new LambdaQueryWrapper<>();
             queryWrapper.in(ImportTask::getState, new ArrayList<>(Arrays.asList(0)))
+                    .in((ImportTask::getType),new ArrayList<>(Arrays.asList(1,2,3,4,5)))
                     .orderByDesc(ImportTask::getState);
             List<ImportTask> importTaskList = importTaskService.list(queryWrapper);
             if (importTaskList.size() > freeCount) {
@@ -88,7 +89,7 @@ public class SchedulingTaskService {
 
             ImportTaskCondition importTaskCondition = importTaskConditions.stream().filter(item -> item.getId().equals(importTask.getImportTaskConditionId())).findFirst().orElse(null);
             ImportTaskAMVO importTaskAMVO = new ImportTaskAMVO();
-            BeanUtils.copyProperties(importTask, importTaskAMVO);
+            BeanUtils.copyProperties(importTask,importTaskAMVO);
             if (importTaskCondition != null) {
                 importTaskAMVO.setFileGuid(importTaskCondition.getFileGuid());
                 importTaskAMVO.setSourceId(importTaskCondition.getSourceId());

+ 20 - 0
src/main/java/cn/cslg/pas/service/permissions/PermissionService.java

@@ -2,6 +2,10 @@ package cn.cslg.pas.service.permissions;
 
 import cn.cslg.pas.common.dto.ClientDTO;
 import cn.cslg.pas.common.utils.LoginUtils;
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import co.elastic.clients.json.JsonData;
+import com.alibaba.fastjson.JSON;
 import com.google.gson.Gson;
 import okhttp3.MediaType;
 import okhttp3.OkHttpClient;
@@ -11,6 +15,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
@@ -252,4 +257,19 @@ public class PermissionService {
         return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
     }
 
+    public List<String> getPersonIdsByName(String name){
+
+        List<String> ids = new ArrayList<>();
+        try {
+            String json = this.getPersonIdByNamePCS(name, false);
+            ids = JSON.parseArray(json, String.class);
+        } catch (Exception e) {
+        }
+        if (ids == null || ids.size() == 0) {
+            ids = new ArrayList<>();
+            ids.add("0");
+        }
+        return ids;
+
+    }
 }

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

@@ -142,7 +142,8 @@
     "groupClass": "getTimeGroup",
     "ifSearch": "false",
     "ifGroup": "true",
-    "ifShow": "false"
+    "ifShow": "false",
+    "ifAsCondition": "true"
   },
   {
     "name": "发生月份",
@@ -155,6 +156,7 @@
     "groupClass": "getTimeGroup",
     "ifSearch": "false",
     "ifGroup": "true",
-    "ifShow": "false"
+    "ifShow": "false",
+    "ifAsCondition": "true"
   }
 ]

+ 63 - 0
src/main/resources/jsons/marking.json

@@ -0,0 +1,63 @@
+[
+  {
+    "name": "专利号",
+    "type": "String",
+    "value": "patentNo",
+    "field": "patentNo",
+    "esField": "patent_no",
+    "esClass": "keyWordQueryBuilder",
+    "ifSearch": "true",
+    "ifGroup": "false",
+    "ifShow": "true",
+    "ifAsCondition": "true",
+    "ifStats": "false",
+    "groupBy": "number",
+    "exportClass": "getCommonValue"
+  },
+  {
+    "name": "创建人",
+    "type": "String",
+    "value": "createName",
+    "field": "createName",
+    "esField": "mark_user_id",
+    "esClass": "personNameQueryBuilder",
+    "ifSearch": "true",
+    "ifGroup": "false",
+    "ifShow": "true",
+    "ifAsCondition": "true",
+    "ifStats": "false",
+    "groupBy": "number",
+    "exportClass": "getCommonValue"
+  },
+  {
+    "name": "创建时间",
+    "type": "DateTime",
+    "value": "markTime",
+    "field": "markTime",
+    "esField": "mark_time",
+    "esClass": "dateQueryBuilder",
+    "ifSearch": "true",
+    "ifGroup": "false",
+    "ifShow": "true",
+    "ifAsCondition": "true",
+    "ifStats": "true",
+    "groupBy": "dateType",
+    "exportClass": "getDateValue"
+  }
+,
+  {
+    "name": "标注内容",
+    "type": "String",
+    "value": "markNoteText",
+    "field": "markNoteText",
+    "esField": "mark_note_text",
+    "esClass": "matchQueryBuilder",
+    "ifSearch": "true",
+    "ifGroup": "false",
+    "ifShow": "true",
+    "ifAsCondition": "true",
+    "ifStats": "true",
+    "groupBy": "dateType",
+    "exportClass": "getDateValue"
+  }
+]

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

@@ -7,7 +7,7 @@
     "esField": "patent_no.keyword",
     "esClass": "wildcardQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifAsCondition": "true",
     "ifStats": "false",
@@ -22,7 +22,7 @@
     "esField": "app_no.keyword",
     "esClass": "wildcardQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifAsCondition": "true",
     "ifStats": "false",
@@ -37,7 +37,7 @@
     "esField": "public_no.keyword",
     "esClass": "wildcardQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifAsCondition": "true",
     "ifStats": "false",
@@ -52,7 +52,7 @@
     "esField": "grant_no.keyword",
     "esClass": "wildcardQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifAsCondition": "true",
     "ifStats": "false",
@@ -67,7 +67,7 @@
     "esField": "public_date",
     "esClass": "dateQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifAsCondition": "true",
     "ifStats": "true",
@@ -82,7 +82,7 @@
     "esField": "app_date",
     "esClass": "dateQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifAsCondition": "true",
     "ifStats": "true",
@@ -97,7 +97,7 @@
     "esField": "grant_date",
     "esClass": "dateQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifAsCondition": "true",
     "ifStats": "true",
@@ -125,7 +125,7 @@
     "esField": "abstract_str.text_content",
     "esClass": "matchQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifAsCondition": "true",
     "defaultHidden": "true",
@@ -140,7 +140,7 @@
     "esField": "title.text_content",
     "esClass": "matchQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifAsCondition": "true",
     "groupBy": "text"
@@ -153,7 +153,7 @@
     "esField": "examination_date",
     "esClass": "dateQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifAsCondition": "true",
     "groupBy": "dateType"
@@ -166,7 +166,7 @@
     "esField": "applicant.name",
     "esClass": "nestedQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifAsCondition": "true",
     "ifStats": "true",
@@ -182,7 +182,7 @@
     "esField": "stander_applicant.name",
     "esClass": "nestedQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -196,7 +196,7 @@
     "esField": "merge_applicant.name",
     "esClass": "nestedQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -210,7 +210,7 @@
     "esField": "inventor.name",
     "esClass": "nestedQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -224,7 +224,7 @@
     "esField": "merge_inventor.name",
     "esClass": "nestedQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -238,7 +238,7 @@
     "esField": "right_holder.name",
     "esClass": "nestedQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -252,7 +252,7 @@
     "esField": "stander_right_holder.name",
     "esClass": "nestedQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -266,7 +266,7 @@
     "esField": "merge_right_holder.name",
     "esClass": "nestedQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -280,7 +280,7 @@
     "esField": "public_full_text.text_content",
     "esClass": "matchQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "false",
     "ifStats": "false",
     "ifAsCondition": "true",
@@ -294,7 +294,7 @@
     "esField": "grant_full_text.text_content",
     "esClass": "matchQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "false",
     "ifStats": "false",
     "ifAsCondition": "true",
@@ -308,7 +308,7 @@
     "esField": "agency",
     "esClass": "matchQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -322,7 +322,7 @@
     "esField": "agent.key",
     "esClass": "keyWordQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -336,7 +336,7 @@
     "esField": "simple_family_num",
     "esClass": "numberQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifAsCondition": "true",
     "groupBy": "amount"
@@ -349,7 +349,7 @@
     "esField": "inpadoc_family_num",
     "esClass": "numberQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifAsCondition": "true",
     "groupBy": "amount"
@@ -362,7 +362,7 @@
     "esField": "patsnap_family_num",
     "esClass": "numberQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifAsCondition": "true",
     "groupBy": "amount"
@@ -375,7 +375,7 @@
     "esField": "quote_patent_no_num",
     "esClass": "numberQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifAsCondition": "true",
     "groupBy": "amount"
@@ -388,7 +388,7 @@
     "esField": "quoted_patent_no_num",
     "esClass": "numberQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifAsCondition": "true",
     "groupBy": "amount"
@@ -401,7 +401,7 @@
     "esField": "applicant_addr.address",
     "esClass": "matchQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "false",
     "ifStats": "false",
     "ifAsCondition": "true",
@@ -415,7 +415,7 @@
     "esField": "app_country",
     "esClass": "keyWordQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "false",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -429,7 +429,7 @@
     "esField": "applicant_addr.country",
     "esClass": "keyWordQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "false",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -443,7 +443,7 @@
     "esField": "applicant_addr.province",
     "esClass": "prefixQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "false",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -457,7 +457,7 @@
     "esField": "applicant_addr.city",
     "esClass": "prefixQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "false",
     "ifStats": "false",
     "ifAsCondition": "true",
@@ -471,7 +471,7 @@
     "esField": "applicant_addr.district",
     "esClass": "prefixQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "false",
     "ifAsCondition": "true",
     "groupBy": "nation"
@@ -484,7 +484,7 @@
     "esField": "right_holder_addr.address",
     "esClass": "matchQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "false",
     "ifStats": "false",
     "ifAsCondition": "true",
@@ -498,7 +498,7 @@
     "esField": "right_holder_addr.country",
     "esClass": "keyWordQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "false",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -512,7 +512,7 @@
     "esField": "right_holder_addr.province",
     "esClass": "prefixQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "false",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -526,7 +526,7 @@
     "esField": "right_holder_addr.city",
     "esClass": "prefixQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "false",
     "ifStats": "false",
     "ifAsCondition": "true",
@@ -540,7 +540,7 @@
     "esField": "right_holder_addr.district",
     "esClass": "prefixQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "false",
     "ifAsCondition": "true",
     "groupBy": "nation"
@@ -553,7 +553,7 @@
     "esField": "mipc",
     "esClass": "prefixQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -632,7 +632,7 @@
     "esField": "mcpc",
     "esClass": "prefixQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -711,7 +711,7 @@
     "esField": "mupc",
     "esClass": "prefixQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -764,7 +764,7 @@
     "esField": "mloc",
     "esClass": "prefixQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -817,7 +817,7 @@
     "esField": "claim.text_content",
     "esClass": "matchQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "false",
     "ifAsCondition": "true",
     "groupBy": "text"
@@ -830,7 +830,7 @@
     "esField": "simple_status",
     "esClass": "keyWordQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifAsCondition": "true",
     "ifStats": "true",
@@ -845,7 +845,7 @@
     "esField": "patent_type",
     "esClass": "keyWordQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifAsCondition": "true",
     "ifStats": "true",
@@ -860,7 +860,7 @@
     "esField": "legal_status.raw",
     "esClass": "keyWordQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifStats": "true",
     "ifAsCondition": "true",
@@ -874,7 +874,7 @@
     "esField": "examiner.key",
     "esClass": "keyWordQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifStats": "false",
     "ifAsCondition": "true",
@@ -888,7 +888,7 @@
     "esField": "aid_examiner.key",
     "esClass": "keyWordQueryBuilder",
     "ifSearch": "true",
-    "ifGroup": "false",
+    "ifGroup": "true",
     "ifShow": "true",
     "ifStats": "false",
     "ifAsCondition": "true",
@@ -1079,5 +1079,5 @@
     "ifGroup": "false",
     "ifShow": "false",
     "ifAsCondition": "true"
-  },
+  }
 ]

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

@@ -110,7 +110,8 @@
     "ifSearch": "false",
     "ifGroup": "true",
     "ifShow": "false",
-    "defaultHidden": "false"
+    "defaultHidden": "false",
+    "ifAsCondition": "true"
   },
   {
     "name": "负责人名称",
@@ -303,7 +304,8 @@
     "groupClass": "getTimeGroup",
     "ifSearch": "false",
     "ifGroup": "true",
-    "ifShow": "false"
+    "ifShow": "false",
+    "ifAsCondition": "true"
   },
   {
     "name": "调查类型",

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

@@ -125,7 +125,8 @@
     "ifSearch": "false",
     "ifGroup": "true",
     "ifShow": "false",
-    "defaultHidden": "false"
+    "defaultHidden": "false",
+    "ifAsCondition": "true"
   },
   {
     "name": "应用场景",
@@ -276,6 +277,7 @@
     "groupClass": "getTimeGroup",
     "ifSearch": "false",
     "ifGroup": "true",
-    "ifShow": "false"
+    "ifShow": "false",
+    "ifAsCondition": "true"
   }
 ]

+ 7 - 4
src/main/resources/jsons/reportProject.json

@@ -22,7 +22,8 @@
     "groupClass":"getTimeGroup",
     "ifSearch":"false",
     "ifGroup": "true",
-    "ifShow":"false"
+    "ifShow":"false",
+    "ifAsCondition": "true"
   },
   {"name":"报告名称",
   "type":"String",
@@ -107,7 +108,8 @@
     "ifSearch":"false",
     "ifGroup": "true",
     "ifShow":"false",
-    "defaultHidden": "false"
+    "defaultHidden": "false",
+    "ifAsCondition": "true"
   },
   {"name":"创建时间",
     "type":"DateTime",
@@ -144,7 +146,8 @@
     "groupClass":"getReportTypeGroup",
     "ifSearch":"false",
     "ifGroup": "true",
-    "ifShow":"true"
+    "ifShow":"true",
+    "ifAsCondition": "true"
   },
   {"name":"报告类型",
     "type":"Array",
@@ -292,6 +295,6 @@
     "ifSearch":"true",
     "ifGroup": "true",
     "ifShow":"true",
-    "ifAsCondition": "true",
+    "ifAsCondition": "true"
   }
 ]

+ 7 - 6
src/main/resources/mapper/CustomAnalyseMapper.xml

@@ -2,13 +2,14 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="cn.cslg.pas.mapper.CustomAnalysisItemMapper">
 
+    <sql id="Base_Column_Analyse_Item">
+        id,uid,name,parent_id,permissions,project_id,tenant_id,sort,type,status,create_id,create_name,create_time,update_time
+    </sql>
+
     <select id="queryAnalyseGroup" resultType="cn.cslg.pas.common.dto.customAnalyse.SelectCustomAnalyseListDTO">
-        select id,name,parent_id,permissions,project_id,tenant_id,sort,type,status,creator
+        select <include refid="Base_Column_Analyse_Item"/>
         from os_custom_analysis_item
         <where>
-            <if test="vo.type != null">
-                AND type = #{vo.type}
-            </if>
             and (
             <if test="vo.tenantId != null">
                 /*系统公开情况*/
@@ -16,7 +17,7 @@
             </if>
             <if test="vo.creatorId != null">
                 /*系统私有公开*/
-                or (permissions = 2 AND creator_id = #{vo.creatorId})
+                or (permissions = 2 AND create_id = #{vo.creatorId})
             </if>
             <if test="vo.tenantId != null and vo.projectId != null">
                 /*数据库公开*/
@@ -24,7 +25,7 @@
             </if>
             <if test="vo.projectId != null and vo.creatorId != null">
                 /*数据库私有*/
-                or (permissions = 4 AND creator_id = #{vo.creatorId} AND project_id = #{vo.projectId})
+                or (permissions = 4 AND create_id = #{vo.creatorId} AND project_id = #{vo.projectId})
             </if>
             )
         </where>

+ 1 - 1
src/main/resources/mapper/ReportProjectMapper.xml

@@ -17,7 +17,7 @@
         on rp.project_id =p.id left join asso_report_cron arc on p.id =arc.project_id
         left join asso_project_event as aspe on p.id =aspe.project_id
         <if test="sql1!=''">
-            where ${sql1}
+            where  (${sql1})
         </if>
         ${sql2} ${sql3}
     </select>

+ 5 - 1
src/test/java/cn/cslg/pas/service/EsScratchWordsServiceTest.java

@@ -1,5 +1,6 @@
 package cn.cslg.pas.service;
 
+import cn.cslg.pas.common.dto.QueryScratchWordsDTO;
 import cn.cslg.pas.common.dto.business.UpdateScratchWordsDTO;
 import cn.cslg.pas.domain.business.ScratchWords;
 import cn.cslg.pas.domain.es.Marking;
@@ -38,7 +39,7 @@ private EsService esService;
         scratchWords.setMarkUserId("1");
         scratchWords.setIsPublic(true);
         scratchWords.setMarkColor("#qeqrqr");
-        scratchWords.setMarkOteText("测试标引");
+        scratchWords.setMarkNoteText("测试标引");
         scratchWords.setMarkSite(10);
         scratchWords.setMarkTime(new Date());
         scratchWords.setPublicScope(1);
@@ -65,4 +66,7 @@ private EsService esService;
         esScratchWordsService.removeById("noU2_YwBmzIo81_4JOrU");
 
     }
+    @Test
+    public  void group() throws Exception{
+    }
 }

+ 6 - 29
src/test/java/cn/cslg/pas/service/EventServiceTests.java

@@ -464,35 +464,12 @@ public class EventServiceTests {
 
     @Test
     public void test101() {
-        List<Integer> list = new ArrayList<>();
-        list.add(1);
-        list.add(2);
-        list.add(3);
-        list.add(4);
-        this.tran(list);
+        Date date = new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(Calendar.DAY_OF_MONTH, 1);
+        Date date1 = calendar.getTime();
+        System.out.println(date1);
     }
 
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
-    public void tran(List<Integer> list) {
-        int i = 0;
-        for (Integer key : list) {
-            if (i == 3) {
-                this.tran1(i);
-            } else {
-                i += key;
-            }
-        }
-        System.out.println(i);
-
-    }
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
-    public Integer tran1(int m) {
-        System.out.println(m);
-        m = m+1;
-        if (m > 0) {
-
-        }
-        return m;
-    }
 }