Forráskód Böngészése

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/main/java/cn/cslg/pas/service/business/FeatureService.java
lwhhszx 1 éve
szülő
commit
c83c47d602
23 módosított fájl, 494 hozzáadás és 259 törlés
  1. 1 1
      src/main/java/cn/cslg/pas/common/dto/business/AvoidDesignDTO.java
  2. 5 0
      src/main/java/cn/cslg/pas/common/dto/business/AvoidDesignInsertDTO.java
  3. 1 1
      src/main/java/cn/cslg/pas/common/dto/business/EsCountDetailDTO.java
  4. 33 0
      src/main/java/cn/cslg/pas/common/dto/business/GetAvoidDesignDTO.java
  5. 2 1
      src/main/java/cn/cslg/pas/common/dto/business/ReportProjectDTO.java
  6. 64 0
      src/main/java/cn/cslg/pas/common/vo/business/AvoidDesignRightVO.java
  7. 19 3
      src/main/java/cn/cslg/pas/common/vo/business/AvoidDesignVO.java
  8. 4 4
      src/main/java/cn/cslg/pas/common/vo/business/AvoidDesignWholeVO.java
  9. 5 31
      src/main/java/cn/cslg/pas/controller/AvoidDesignController.java
  10. 32 1
      src/main/java/cn/cslg/pas/controller/FeatureController.java
  11. 2 0
      src/main/java/cn/cslg/pas/domain/business/Feature.java
  12. 4 2
      src/main/java/cn/cslg/pas/domain/business/PatentSplitMessage.java
  13. 12 5
      src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/DateHistogramBuilder.java
  14. 16 6
      src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/NestedCountBuilder.java
  15. 10 4
      src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/TermsCountBuilder.java
  16. 38 42
      src/main/java/cn/cslg/pas/service/business/AvoidDesignService.java
  17. 178 93
      src/main/java/cn/cslg/pas/service/business/AvoidDesignWholeService.java
  18. 13 5
      src/main/java/cn/cslg/pas/service/business/ReportProjectService.java
  19. 26 2
      src/main/java/cn/cslg/pas/service/business/es/EsCountService.java
  20. 3 3
      src/main/java/cn/cslg/pas/service/business/es/EsService.java
  21. 5 5
      src/main/resources/jsons/esCount.json
  22. 4 4
      src/test/java/cn/cslg/pas/service/AvoidDesignServiceTests.java
  23. 17 46
      src/test/java/cn/cslg/pas/service/EventServiceTests.java

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

@@ -14,7 +14,7 @@ public class AvoidDesignDTO {
      */
     private Integer featureId;
     private String content;
-    private String expalinText;
+    private String explainText;
     private Integer rightSort;
     private Integer rightType;
 

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

@@ -17,6 +17,11 @@ public class AvoidDesignInsertDTO {
     private Integer projectId;
 
     /**
+     * 内容
+     */
+    private String wholeContent;
+
+    /**
      * 特征信息与回避设计方向
      */
     private List<AvoidDesignDTO> avoidDesignDTOS;

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

@@ -7,6 +7,6 @@ public class EsCountDetailDTO {
     //名称
     private String name;
     //数量
-    private Integer number;
+    private Long number;
 
 }

+ 33 - 0
src/main/java/cn/cslg/pas/common/dto/business/GetAvoidDesignDTO.java

@@ -0,0 +1,33 @@
+package cn.cslg.pas.common.dto.business;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * 查询回避设计方案DTO
+ * @Author xiexiang
+ * @Date 2023/12/7
+ */
+@Data
+public class GetAvoidDesignDTO {
+    /**
+     * 报告id
+     */
+    private Integer projectId;
+
+    /**
+     * 是否重拆
+     */
+    private Boolean ifReSplit;
+
+    /**
+     * 拆分类型
+     * 0仅拆主权要 1全部拆分
+     */
+    private Integer splitType;
+    /**
+     * 拆分形式
+     * 0逗号拆分 1分号拆分 2逗号和分号拆分
+     */
+    private Integer splitBy;
+}

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

@@ -68,5 +68,6 @@ public class ReportProjectDTO {
     private String productOrTech;
     @Schema(description = "关联报告")
     private Integer AssoReportId;
-
+    @Schema(description = "是否直接完成")
+    private Boolean ifFinish;
 }

+ 64 - 0
src/main/java/cn/cslg/pas/common/vo/business/AvoidDesignRightVO.java

@@ -0,0 +1,64 @@
+package cn.cslg.pas.common.vo.business;
+
+import cn.cslg.pas.common.vo.CompareMessageVO;
+import cn.cslg.pas.domain.business.Feature;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 回避设计方案查询权要层
+ * @Author xiexiang
+ * @Date 2023/12/7
+ */
+@Data
+public class AvoidDesignRightVO {
+    /**
+     * 权要名
+     */
+    private String RightName;
+    /**
+     * 专利号
+     */
+    private String signPatentNo;
+    /**
+     * 特征拆分人ID
+     */
+    private Integer partnerId;
+    /**
+     * 专利ID
+     */
+    private String patentNo;
+
+    /**
+     * 内容
+     */
+    private String contentOut;
+
+    /**
+     * 内容
+     */
+    private String content;
+    /**
+     * 类型
+     */
+    private Integer type;
+
+    private Integer sort;
+
+    /**
+     * 所属报告
+     */
+    private Integer projectId;
+
+    /**
+     *
+     */
+    private List<CompareMessageVO> compareMessageVOS;
+
+
+    /**
+     * 特征与回避设计方向信息
+     */
+    private List<AvoidDesignVO> avoidDesignVOS;
+}

+ 19 - 3
src/main/java/cn/cslg/pas/common/vo/business/AvoidDesignVO.java

@@ -23,12 +23,28 @@ public class AvoidDesignVO {
      */
     private Integer featureId;
 
-    private Feature feature;
+    /**
+     * 特征内容
+     */
+    private String content;
+
+    /**
+     * 专利号
+     */
+    private String patentNo;
 
     /**
-     * 所属报告
+     *
      */
-    private Integer projectId;
+    private Integer rightSort;
+
+    private Integer rightType;
+
+    private String explainText;
+
+    private String formId;
+
+    private Integer sysOrder;
 
     /**
      * 回避设计方向

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

@@ -23,9 +23,9 @@ public class AvoidDesignWholeVO {
     private Integer projectType;
 
     /**
-     * 内容
+     * 回避设计总体方向内容
      */
-    private String content;
+    private String wholeContent;
 
     /**
      * 创建人id
@@ -43,7 +43,7 @@ public class AvoidDesignWholeVO {
     private Date createTime;
 
     /**
-     * 回避设计方向VO
+     * 权要信息
      */
-    private List<AvoidDesignVO> avoidDesignVOS;
+    private List<AvoidDesignRightVO> avoidDesignRightVOS;
 }

+ 5 - 31
src/main/java/cn/cslg/pas/controller/AvoidDesignController.java

@@ -1,16 +1,12 @@
 package cn.cslg.pas.controller;
 
 import cn.cslg.pas.common.core.base.Constants;
-import cn.cslg.pas.common.dto.business.AvoidDesignDTO;
-import cn.cslg.pas.common.dto.business.AvoidDesignInsertDTO;
-import cn.cslg.pas.common.dto.business.AvoidDesignWholeDTO;
-import cn.cslg.pas.common.dto.business.CustomFieldDTO;
+import cn.cslg.pas.common.dto.business.*;
 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.factorys.businessFactory.Business;
 import cn.cslg.pas.service.business.AvoidDesignService;
 import cn.cslg.pas.service.business.AvoidDesignWholeService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -36,7 +32,7 @@ public class AvoidDesignController {
     @Autowired
     private AvoidDesignWholeService avoidDesignWholeService;
 
-    @Operation(summary = "新增回避设计方案")
+    @Operation(summary = "保存回避设计方案")
     @PostMapping("/addAvoidDesign")
     public Response addAvoidDesign(@RequestBody AvoidDesignInsertDTO avoidDesignInsertDTO) throws Exception {
         if (avoidDesignInsertDTO != null) {
@@ -59,32 +55,10 @@ public class AvoidDesignController {
     }
 
     @Operation(summary = "查询回避设计方案")
-    @GetMapping("/getAvoidDesign")
-    public Response getAvoidDesign(Integer projectId) throws Exception {
-        AvoidDesignWholeVO avoidDesignWholeVO = avoidDesignWholeService.getAvoidDesignWhole(projectId);
+    @PostMapping("/getAvoidDesign")
+    public Response getAvoidDesign(@RequestBody GetAvoidDesignDTO getAvoidDesignDTO) throws Exception {
+        AvoidDesignWholeVO avoidDesignWholeVO = avoidDesignWholeService.getAvoidDesignWhole(getAvoidDesignDTO);
         return Response.success(avoidDesignWholeVO);
     }
 
-    @Operation(summary = "新增回避设计方案总体方向")
-    @PostMapping("/addAvoidDesignWhole")
-    public Response addAvoidDesignWhole(@RequestBody AvoidDesignWholeDTO avoidDesignWholeDTO) throws Exception {
-        if (avoidDesignWholeDTO != null) {
-            Integer id = null;
-            try {
-                id= avoidDesignWholeService.addAvoidDesignWhole(avoidDesignWholeDTO);
-            } catch (Exception e) {
-                if (e instanceof XiaoShiException) {
-                    return Response.error(e.getMessage());
-                } else if (e instanceof UnLoginException) {
-                    return Response.unLogin(e.getMessage());
-                } else if (e instanceof ConditionException) {
-                    return Response.conditionError(e.getMessage());
-                }
-            }
-            return Response.success(id);
-        } else {
-            return Response.error("入参为null");
-        }
-    }
-
 }

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

@@ -5,7 +5,11 @@ import cn.cslg.pas.common.dto.QuerySplitDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.common.vo.business.SplitVO;
+import cn.cslg.pas.domain.business.ReportProject;
+import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.service.business.FeatureService;
+import cn.cslg.pas.service.business.ReportProjectService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import io.swagger.v3.oas.annotations.Operation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,7 +29,10 @@ public class FeatureController {
     @Autowired
     private FeatureService featureService;
 
-    @Operation(summary = "查询特征")
+    @Autowired
+    private ReportProjectService reportProjectService;
+
+    @Operation(summary = "拆分查询特征")
     @PostMapping("/spiltFeature")
     public Response spiltFeature(@RequestBody SplitVO splitVO) throws Exception {
         try {
@@ -76,4 +83,28 @@ public class FeatureController {
         }
 
     }
+
+    @Operation(summary = "查询特征")
+    @PostMapping("/getFeatrues")
+    public Response getFeatrues(@RequestBody SplitVO splitVO) throws Exception {
+        try {
+            Records records = new Records();
+            splitVO.setIfReSplit(false);
+            if (splitVO.getProjectId() != null) {
+                LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper();
+                queryWrapper.eq(ReportProject::getProjectId, splitVO.getProjectId());
+                ReportProject reportProject = reportProjectService.getOne(queryWrapper, false);
+                if (reportProject != null) {
+                    splitVO.setPatentNo(reportProject.getSignPatentNo());
+                } else {
+                    throw new XiaoShiException("未查询到报告");
+                }
+            }
+            records.setData(featureService.splitPatentFeature(splitVO));
+            return Response.success(records);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
+    }
+
 }

+ 2 - 0
src/main/java/cn/cslg/pas/domain/business/Feature.java

@@ -73,4 +73,6 @@ public class Feature extends BaseEntity<Feature> {
     @TableField(value = "tenant_id")
     private Integer tenantId;
 
+    @TableField(value="sys_order")
+    private Integer sysOrder;
 }

+ 4 - 2
src/main/java/cn/cslg/pas/domain/business/PatentSplitMessage.java

@@ -10,14 +10,14 @@ import java.util.Date;
 
 /**
  * <p>
- * 事件
+ * 专利权要拆分条件记录
  * </p>
  *
  * @author 李仁杰
  * @since 2022-10-20
  */
 @Data
-@TableName("event")
+@TableName("patent_split_message")
 /*数据库中的表对应的类
  */
 public class PatentSplitMessage extends BaseEntity<PatentSplitMessage> {
@@ -31,4 +31,6 @@ public class PatentSplitMessage extends BaseEntity<PatentSplitMessage> {
     private Date createTime;
     @TableField(value = "tenant_id")
     private Integer tenantId;
+    @TableField(value = "task_id")
+    private Integer taskId;
 }

+ 12 - 5
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/DateHistogramBuilder.java

@@ -1,13 +1,15 @@
 package cn.cslg.pas.factorys.EsCountBuilderFactory;
 
-import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
-import co.elastic.clients.elasticsearch._types.aggregations.AggregationBuilders;
-import co.elastic.clients.elasticsearch._types.aggregations.CalendarInterval;
+import co.elastic.clients.elasticsearch._types.SortOrder;
+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.util.NamedValue;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
+import java.util.HashMap;
+
 @Component
 public class DateHistogramBuilder implements IEsCountBuilder{
     public String field = "";
@@ -19,10 +21,15 @@ public class DateHistogramBuilder implements IEsCountBuilder{
     @Override
     public Aggregation createAggregation() {
         Aggregation aggregation = AggregationBuilders.dateHistogram(i -> i.field(field).format("yyyy").calendarInterval(CalendarInterval.Year));
-        if (StringUtils.isNotEmpty(valueTwo)) {
+        if (StringUtils.isNotEmpty(valueOne) && StringUtils.isNotEmpty(valueTwo)) {
             Query query = QueryBuilders.range(j -> j.field(field).from(valueOne).to(valueTwo));
             Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-            aggregation.aggregations().put("filter_agg",filter);
+            aggregation = new Aggregation.Builder().dateHistogram(new DateHistogramAggregation.Builder()
+                    .field(field).format("yyyy")
+                    .calendarInterval(CalendarInterval.Year).build())
+                    .aggregations(new HashMap() {{
+                        put("filter_agg", filter);
+                    }}).build();
         }
         return aggregation;
     }

+ 16 - 6
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/NestedCountBuilder.java

@@ -1,12 +1,14 @@
 package cn.cslg.pas.factorys.EsCountBuilderFactory;
 
-import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
-import co.elastic.clients.elasticsearch._types.aggregations.AggregationBuilders;
+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 org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
+import java.util.HashMap;
+import java.util.Map;
+
 @Component
 public class NestedCountBuilder implements IEsCountBuilder {
     public String field = "";
@@ -17,15 +19,23 @@ public class NestedCountBuilder implements IEsCountBuilder {
 
     @Override
     public Aggregation createAggregation() {
-
-
         Aggregation terms = AggregationBuilders.terms(j -> j.field(field).size(topN));
         if (StringUtils.isNotEmpty(valueOne)) {
             Query query = QueryBuilders.term(j -> j.field(field).value(valueOne));
             Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-            terms.aggregations().put("filter_agg",filter);
+            terms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
+                    .field(field).size(topN).build())
+                    .aggregations(new HashMap() {{
+                        put("filter_agg", filter);
+                    }}).build();
         }
-        return AggregationBuilders.nested(i -> i.path(path)).aggregations().put("terms_agg", terms);
+        Aggregation finalTerms = terms;
+        Aggregation aggregation = new Aggregation.Builder().nested(new NestedAggregation.Builder().
+                path(path).build())
+                .aggregations(new HashMap() {{
+                    put("terms_agg", finalTerms);
+                }}).build();
+        return aggregation;
     }
 
     @Override

+ 10 - 4
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/TermsCountBuilder.java

@@ -2,11 +2,15 @@ package cn.cslg.pas.factorys.EsCountBuilderFactory;
 
 import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
 import co.elastic.clients.elasticsearch._types.aggregations.AggregationBuilders;
+import co.elastic.clients.elasticsearch._types.aggregations.NestedAggregation;
+import co.elastic.clients.elasticsearch._types.aggregations.TermsAggregation;
 import co.elastic.clients.elasticsearch._types.query_dsl.Query;
 import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
+import java.util.HashMap;
+
 @Component
 public class TermsCountBuilder implements IEsCountBuilder{
     public String field = "";
@@ -17,12 +21,14 @@ public class TermsCountBuilder implements IEsCountBuilder{
 
     @Override
     public Aggregation createAggregation() {
-
         Aggregation aggregation = AggregationBuilders.terms(i -> i.field(field).size(topN));
         if (StringUtils.isNotEmpty(valueOne)) {
-            Query query = QueryBuilders.term(j -> j.field(field).value(valueOne));
-            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-            aggregation.aggregations().put("filter_agg",filter);
+            Aggregation filter = AggregationBuilders.filter(n -> n.term(m -> m.field(field).value(valueOne)));
+            aggregation = new Aggregation.Builder().terms(new TermsAggregation.Builder()
+                    .field(field).size(topN).build())
+                    .aggregations(new HashMap() {{
+                        put("filter_agg", filter);
+                    }}).build();
         }
         return aggregation;
     }

+ 38 - 42
src/main/java/cn/cslg/pas/service/business/AvoidDesignService.java

@@ -2,11 +2,13 @@ package cn.cslg.pas.service.business;
 
 import cn.cslg.pas.common.dto.business.AvoidDesignDTO;
 import cn.cslg.pas.common.dto.business.AvoidDesignInsertDTO;
+import cn.cslg.pas.common.dto.business.AvoidDesignWholeDTO;
 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.vo.business.AvoidDesignVO;
 import cn.cslg.pas.domain.business.AvoidDesign;
+import cn.cslg.pas.domain.business.AvoidDesignWhole;
 import cn.cslg.pas.domain.business.Feature;
 import cn.cslg.pas.domain.business.ReportProject;
 import cn.cslg.pas.exception.UnLoginException;
@@ -16,6 +18,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -41,19 +44,22 @@ public class AvoidDesignService extends ServiceImpl<AvoidDesignMapper, AvoidDesi
     @Autowired
     private ReportProjectService reportProjectService;
 
+    @Autowired
+    private AvoidDesignWholeService avoidDesignWholeService;
+
     /**
      * 新增回避设计
      * @param avoidDesignInsertDTO
      * @return
      */
     public List<Integer> addAvoidDesign(AvoidDesignInsertDTO avoidDesignInsertDTO){
-//        //获取登录人信息
-//        PersonnelVO personnelVO = new PersonnelVO();
-//        try {
-//            personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
-//        } catch (Exception e) {
-//            throw new UnLoginException("未登录");
-//        }
+        //获取登录人信息
+        PersonnelVO personnelVO = new PersonnelVO();
+        try {
+            personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        } catch (Exception e) {
+            throw new UnLoginException("未登录");
+        }
         Integer projectId = avoidDesignInsertDTO.getProjectId();
         if (projectId == null) {
             throw new XiaoShiException("projectId不能为空");
@@ -72,13 +78,25 @@ public class AvoidDesignService extends ServiceImpl<AvoidDesignMapper, AvoidDesi
         List<AvoidDesignDTO> avoidDesignDTOS = avoidDesignInsertDTO.getAvoidDesignDTOS();
         //根据专利号和projectId,删除特征
         LambdaQueryWrapper<Feature> deleteWrapper =new LambdaQueryWrapper<>();
-        deleteWrapper.eq(Feature::getPatentNo,patentNo)
-                        .eq(Feature::getProjectId,projectId);
+        deleteWrapper.eq(Feature::getPatentNo, patentNo)
+                        .eq(Feature::getProjectId, projectId);
         featureService.remove(deleteWrapper);
         //根据projectId删除回避设计方向数据
         LambdaQueryWrapper<AvoidDesign> deleteWrapper2 = new LambdaQueryWrapper<>();
         deleteWrapper2.eq(AvoidDesign::getProjectId, projectId);
         this.remove(deleteWrapper2);
+        LambdaQueryWrapper<AvoidDesignWhole> deleteWrapper3 = new LambdaQueryWrapper<>();
+        deleteWrapper3.eq(AvoidDesignWhole::getProjectId, projectId);
+        avoidDesignWholeService.remove(deleteWrapper3);
+        //新增总体方向
+        //首先新增总体方向
+        AvoidDesignWholeDTO avoidDesignWholeDTO = new AvoidDesignWholeDTO();
+        avoidDesignWholeDTO.setContent(avoidDesignInsertDTO.getWholeContent());
+        avoidDesignWholeDTO.setProjectId(avoidDesignInsertDTO.getProjectId());
+        Integer wholeId = avoidDesignWholeService.addAvoidDesignWhole(avoidDesignWholeDTO);
+        if (wholeId == null) {
+            throw new XiaoShiException("总体方向添加失败");
+        }
         //新增插入回避设计方向集合
         List<AvoidDesign> avoidDesignList = new ArrayList<>();
         //遍历传入集合
@@ -88,21 +106,21 @@ public class AvoidDesignService extends ServiceImpl<AvoidDesignMapper, AvoidDesi
             feature.setPatentNo(patentNo);
             feature.setProjectId(projectId);
             feature.setContent(avoidDesignDTO.getContent());
-            feature.setExplainText(avoidDesignDTO.getExpalinText());
-//            feature.setCreateId(personnelVO.getId());
-            feature.setCreateId("328");
+            feature.setExplainText(avoidDesignDTO.getExplainText());
+            feature.setCreateId(personnelVO.getId());
             feature.setRightType(avoidDesignDTO.getRightType());
             feature.insert();
             //获取特征id
             Integer featureId = feature.getId();
-            //插入回避设计方向
-            AvoidDesign avoidDesign = new AvoidDesign();
-            avoidDesign.setProjectId(projectId);
-            avoidDesign.setFeatureId(featureId);
-            avoidDesign.setDirection(avoidDesignDTO.getDirection());
-//            avoidDesign.setCreateId(personnelVO.getId());
-            avoidDesign.setCreateId("328");
-            avoidDesignList.add(avoidDesign);
+            if (avoidDesignDTO.getDirection() != null) {
+                //插入回避设计方向
+                AvoidDesign avoidDesign = new AvoidDesign();
+                avoidDesign.setProjectId(projectId);
+                avoidDesign.setFeatureId(featureId);
+                avoidDesign.setDirection(avoidDesignDTO.getDirection());
+                avoidDesign.setCreateId(personnelVO.getId());
+                avoidDesignList.add(avoidDesign);
+            }
         }
         List<Integer> ids = new ArrayList<>();
         if (!avoidDesignList.isEmpty()) {
@@ -111,26 +129,4 @@ public class AvoidDesignService extends ServiceImpl<AvoidDesignMapper, AvoidDesi
         }
         return ids;
     }
-
-    /**
-     * 查询回避设计
-     */
-    public List<AvoidDesignVO> queryAvoidDesign(Integer projectId){
-        List<AvoidDesignVO> avoidDesignVOS = new ArrayList<>();
-        LambdaQueryWrapper<AvoidDesign> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(AvoidDesign::getProjectId, projectId);
-        List<AvoidDesign> avoidDesignList = this.list(queryWrapper);
-        if (!avoidDesignList.isEmpty()) {
-            avoidDesignList.forEach(item -> {
-                AvoidDesignVO avoidDesignVO = new AvoidDesignVO();
-                BeanUtils.copyProperties(item, avoidDesignVO);
-                avoidDesignVOS.add(avoidDesignVO);
-            });
-        }
-        return avoidDesignVOS;
-    }
-
-    public void deleteAvoidDesign(){
-
-    }
 }

+ 178 - 93
src/main/java/cn/cslg/pas/service/business/AvoidDesignWholeService.java

@@ -2,24 +2,25 @@ package cn.cslg.pas.service.business;
 
 import cn.cslg.pas.common.dto.business.AvoidDesignWholeDTO;
 import cn.cslg.pas.common.dto.business.AvoidDesignWholeUpdateDTO;
+import cn.cslg.pas.common.dto.business.GetAvoidDesignDTO;
 import cn.cslg.pas.common.model.cronModel.Personnel;
+import cn.cslg.pas.common.vo.PatentRightVo;
+import cn.cslg.pas.common.vo.business.AvoidDesignRightVO;
 import cn.cslg.pas.common.vo.business.AvoidDesignVO;
 import cn.cslg.pas.common.vo.business.AvoidDesignWholeVO;
-import cn.cslg.pas.domain.business.AvoidDesignWhole;
-import cn.cslg.pas.domain.business.Feature;
-import cn.cslg.pas.domain.business.Project;
-import cn.cslg.pas.domain.business.ProjectTask;
+import cn.cslg.pas.common.vo.business.SplitVO;
+import cn.cslg.pas.domain.business.*;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.AvoidDesignWholeMapper;
 import cn.cslg.pas.service.permissions.PermissionService;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.apache.xmlbeans.xml.stream.XMLStreamException;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
-import org.springframework.web.context.annotation.ApplicationScope;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -33,6 +34,7 @@ import java.util.List;
 @Service
 public class AvoidDesignWholeService extends ServiceImpl<AvoidDesignWholeMapper, AvoidDesignWhole> {
     @Autowired
+    @Lazy
     private AvoidDesignService avoidDesignService;
 
     @Autowired
@@ -44,6 +46,9 @@ public class AvoidDesignWholeService extends ServiceImpl<AvoidDesignWholeMapper,
     @Autowired
     private FeatureService featureService;
 
+    @Autowired
+    private ReportProjectService reportProjectService;
+
     /**
      * 新增回避设计方案总体方向
      * @param avoidDesignWholeDTO
@@ -66,105 +71,185 @@ public class AvoidDesignWholeService extends ServiceImpl<AvoidDesignWholeMapper,
     }
 
     /**
-     * 更新回避设计方案总体方向
-     * @param avoidDesignWholeUpdateDTO
-     * @return
-     */
-    public Integer updateAvoidDesignWhole(AvoidDesignWholeUpdateDTO avoidDesignWholeUpdateDTO){
-        if (avoidDesignWholeUpdateDTO.getId() == null) {
-            throw new XiaoShiException("id不能为空");
-        }
-        //根据id查询回避设计总体方向
-        AvoidDesignWhole avoidDesignWhole = this.getById(avoidDesignWholeUpdateDTO.getId());
-        BeanUtils.copyProperties(avoidDesignWholeUpdateDTO, avoidDesignWhole);
-        avoidDesignWhole.updateById();
-        return avoidDesignWhole.getId();
-    }
-
-    /**
      * 查询回避设计方案
-     * @param projectId
+     * @param getAvoidDesignDTO
      * @return
      */
-    public AvoidDesignWholeVO getAvoidDesignWhole(Integer projectId) throws IOException {
-        AvoidDesignWholeVO avoidDesignWholeVO = new AvoidDesignWholeVO();
-        //根据projectId查询回避设计方案总体方向
-        LambdaQueryWrapper<AvoidDesignWhole> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(AvoidDesignWhole::getProjectId, projectId);
-        List<AvoidDesignWhole> avoidDesignWholeList = this.list(queryWrapper);
-        if (!avoidDesignWholeList.isEmpty()) {
-            AvoidDesignWhole avoidDesignWhole = avoidDesignWholeList.get(0);
-            //复制总体方向数据
-            BeanUtils.copyProperties(avoidDesignWhole, avoidDesignWholeVO);
-            //根据projectId查询回避设计方向数据
-            List<AvoidDesignVO> avoidDesignVOS = avoidDesignService.queryAvoidDesign(projectId);
-            avoidDesignWholeVO.setAvoidDesignVOS(avoidDesignVOS);
-            //装载名称等信息
-            this.loadAvoidDesignWhole(avoidDesignWholeVO);
+    public AvoidDesignWholeVO getAvoidDesignWhole(GetAvoidDesignDTO getAvoidDesignDTO) throws IOException {
+        //判断参数不能为空
+        Integer projectId = getAvoidDesignDTO.getProjectId();
+        if (projectId == null) {
+            throw new XiaoShiException("projectId为空");
         }
-        return avoidDesignWholeVO;
-    }
-
-    /**
-     * 装载回避设计方案总数据(回避设计方案总体方向and回避设计方向集合)
-     * @param avoidDesignWholeVO
-     */
-    public void loadAvoidDesignWhole(AvoidDesignWholeVO avoidDesignWholeVO) throws IOException {
-        //创建需要查询的ids
-        List<String> createIds = new ArrayList<>();
-        List<Personnel> personnels = new ArrayList<>();
-        //将回避设计总体方向的人员id插入其中
-        createIds.add(avoidDesignWholeVO.getCreateId());
-        List<AvoidDesignVO> avoidDesignVOS = avoidDesignWholeVO.getAvoidDesignVOS();
-        //回避设计方向集合不为空,遍历将人员ids插入其中
-        if (!avoidDesignVOS.isEmpty()) {
-            avoidDesignVOS.forEach(item -> {
-                if (item.getCreateId() != null) {
-                    createIds.add(item.getCreateId());
-                }
-            });
+        if (getAvoidDesignDTO.getIfReSplit() == null) {
+            throw new XiaoShiException("ifReSplit不能为空");
         }
-        //查询创建人名称
-        if (createIds.size() != 0) {
-            String res = permissionService.getPersonnelByIdsFromPCS(createIds);
-            JSONObject jsonObject = JSONObject.parseObject(res);
-            personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
+        if (getAvoidDesignDTO.getSplitBy() == null) {
+            throw new XiaoShiException("splitBy不能为空");
         }
-        //首先装载回避设计总体方向的人员名称
-        Personnel personnelWhole = personnels.stream().filter(item -> item.getId().equals(avoidDesignWholeVO.getCreateId())).findFirst().orElse(null);
-        if (personnelWhole != null) {
-            avoidDesignWholeVO.setCreateName(personnelWhole.getPersonnelName());
+        if (getAvoidDesignDTO.getSplitType() == null) {
+            throw new XiaoShiException("splitType不能为空");
+        }
+        //返回的VO类
+        AvoidDesignWholeVO avoidDesignWholeVO = new AvoidDesignWholeVO();
+        avoidDesignWholeVO.setProjectId(projectId);
+        //根据projectId查询专利号
+        LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ReportProject::getProjectId, projectId);
+        ReportProject reportProject = reportProjectService.getOne(queryWrapper, false);
+        String patentNo = reportProject.getSignPatentNo();
+        //新建查询拆分特征DTO
+        SplitVO splitVO = new SplitVO();
+        BeanUtils.copyProperties(getAvoidDesignDTO, splitVO);
+        splitVO.setPatentNo(patentNo);
+        List<PatentRightVo> patentRightVos = new ArrayList<>();
+        //判断是否重拆
+        if (getAvoidDesignDTO.getIfReSplit() == true) {//重拆
+            //重拆需要清空原有特征表、回避设计方向表、回避设计总体方向表
+            //清空回避设计方向表
+            LambdaQueryWrapper<AvoidDesign> deleteWrapper = new LambdaQueryWrapper<>();
+            deleteWrapper.eq(AvoidDesign::getProjectId, projectId);
+            avoidDesignService.remove(deleteWrapper);
+            //清空回避设计总体方向表
+            LambdaQueryWrapper<AvoidDesignWhole> deleteWholeWapper = new LambdaQueryWrapper<>();
+            deleteWholeWapper.eq(AvoidDesignWhole::getProjectId, projectId);
+            this.remove(deleteWholeWapper);
+            //清空特征表
+            //根据重拆条件拆分权要保存到特征表
+            patentRightVos = featureService.splitPatentFeature(splitVO);
         } else {
-            throw new XiaoShiException("未获取到当前登陆人信息");
+            //不重拆
+            patentRightVos = featureService.splitPatentFeature(splitVO);
         }
-        //新建
-        List<Integer> projectIds = new ArrayList<>();
-        //将回避设计的projectId插入其中
-        projectIds.add(avoidDesignWholeVO.getProjectId());
-        List<Project> projects = projectTaskService.getProjectInfo(projectIds);
-        if (!projects.isEmpty()) {
-            Project project = projects.stream().filter(item -> item.getId().equals(avoidDesignWholeVO.getProjectId())).findFirst().orElse(null);
-            if (project != null) {
-                avoidDesignWholeVO.setProjectName(project.getName());
-                avoidDesignWholeVO.setProjectType(project.getType());
+        if (!patentRightVos.isEmpty()) {
+            //根据projectId查询回避设计方案总体方向
+            LambdaQueryWrapper<AvoidDesignWhole> getWholeWrapper = new LambdaQueryWrapper<>();
+            getWholeWrapper.eq(AvoidDesignWhole::getProjectId, projectId);
+            AvoidDesignWhole avoidDesignWhole = this.getOne(getWholeWrapper, false);
+            //复制总体方向数据
+            if (avoidDesignWhole != null) {
+                BeanUtils.copyProperties(avoidDesignWhole, avoidDesignWholeVO);
+                avoidDesignWholeVO.setWholeContent(avoidDesignWhole.getContent());
             } else {
-                throw new XiaoShiException("未查询到报告信息");
+                avoidDesignWholeVO.setWholeContent(null);
             }
+            //新建权要层信息
+            List<AvoidDesignRightVO> avoidDesignRightVOS = new ArrayList<>();
+            //遍历装载权要层信息
+            patentRightVos.forEach(item -> {
+                AvoidDesignRightVO avoidDesignRightVO = new AvoidDesignRightVO();
+                BeanUtils.copyProperties(item, avoidDesignRightVO);
+                //新建特征与回避设计方向VOS
+                List<AvoidDesignVO> avoidDesignVOS = new ArrayList<>();
+                //特征信息
+                List<Feature> features = item.getFeatures();
+                avoidDesignVOS = this.loadAvoidDesign(projectId, features);
+                avoidDesignRightVO.setAvoidDesignVOS(avoidDesignVOS);
+                avoidDesignRightVOS.add(avoidDesignRightVO);
+            });
+            avoidDesignWholeVO.setAvoidDesignRightVOS(avoidDesignRightVOS);
+        } else {
+            throw new XiaoShiException("特征查询错误");
         }
-        //遍历装载回避设计方向的人员名称
-        for (AvoidDesignVO avoidDesignVO : avoidDesignVOS) {
-            //装载人员信息
-            Personnel personnel = personnels.stream().filter(item -> item.getId().equals(avoidDesignVO.getCreateId())).findFirst().orElse(null);
-            if (personnel != null) {
-                avoidDesignVO.setCreateName(personnel.getPersonnelName());
-            } else {
-                throw new XiaoShiException("未获取到当前登陆人信息");
+//        //装载名称等信息
+//        this.loadAvoidDesignWhole(avoidDesignWholeVO);
+        return avoidDesignWholeVO;
+    }
+
+    public  List<AvoidDesignVO> loadAvoidDesign(Integer projectId, List<Feature> features) {
+        List<AvoidDesignVO> avoidDesignVOS = new ArrayList<>();
+        LambdaQueryWrapper<AvoidDesign> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AvoidDesign::getProjectId, projectId);
+        List<AvoidDesign> avoidDesignList = avoidDesignService.list(queryWrapper);
+        for (Feature feature : features) {
+            //新建特征与回避设计方向VO
+            AvoidDesignVO avoidDesignVO = new AvoidDesignVO();
+            //装载特征部分的信息
+            avoidDesignVO.setFeatureId(feature.getId());
+            avoidDesignVO.setContent(feature.getContent());
+            avoidDesignVO.setPatentNo(feature.getPatentNo());
+            avoidDesignVO.setRightSort(feature.getRightSort());
+            avoidDesignVO.setRightType(feature.getRightType());
+            avoidDesignVO.setExplainText(feature.getExplainText());
+            avoidDesignVO.setFormId(feature.getFromId());
+            avoidDesignVO.setSysOrder(feature.getSysOrder());
+            //装载回避设计部分(可能为空)
+            if (!avoidDesignList.isEmpty()) {
+                AvoidDesign avoidDesign = avoidDesignList.stream().filter(item -> item.getFeatureId() != null && item.getFeatureId().equals(feature.getId())).findFirst().orElse(null);
+                if (avoidDesign != null) {
+                    avoidDesignVO.setId(avoidDesign.getId());
+                    avoidDesignVO.setDirection(avoidDesign.getDirection());
+                    avoidDesignVO.setCreateId(avoidDesign.getCreateId());
+                    avoidDesignVO.setCreateTime(avoidDesign.getCreateTime());
+                }
             }
-            //装载特征集合
-            Feature feature = featureService.getById(avoidDesignVO.getFeatureId());
-            avoidDesignVO.setFeature(feature);
+            avoidDesignVOS.add(avoidDesignVO);
         }
-
-
+        return avoidDesignVOS;
     }
+
+//    /**
+//     * 装载回避设计方案总数据(回避设计方案总体方向and回避设计方向集合)
+//     * @param avoidDesignWholeVO
+//     */
+//    public void loadAvoidDesignWhole(AvoidDesignWholeVO avoidDesignWholeVO) throws IOException {
+//        //创建需要查询的ids
+//        List<String> createIds = new ArrayList<>();
+//        List<Personnel> personnels = new ArrayList<>();
+//        //将回避设计总体方向的人员id插入其中
+//        createIds.add(avoidDesignWholeVO.getCreateId());
+//        List<AvoidDesignVO> avoidDesignVOS = avoidDesignWholeVO.getAvoidDesignVOS();
+//        //回避设计方向集合不为空,遍历将人员ids插入其中
+//        if (!avoidDesignVOS.isEmpty()) {
+//            avoidDesignVOS.forEach(item -> {
+//                if (item.getCreateId() != null) {
+//                    createIds.add(item.getCreateId());
+//                }
+//            });
+//        }
+//        //查询创建人名称
+//        if (createIds.size() != 0) {
+//            String res = permissionService.getPersonnelByIdsFromPCS(createIds);
+//            JSONObject jsonObject = JSONObject.parseObject(res);
+//            personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
+//        }
+//        //首先装载回避设计总体方向的人员名称
+//        Personnel personnelWhole = personnels.stream().filter(item -> item.getId().equals(avoidDesignWholeVO.getCreateId())).findFirst().orElse(null);
+//        if (personnelWhole != null) {
+//            avoidDesignWholeVO.setCreateName(personnelWhole.getPersonnelName());
+//        } else {
+//            throw new XiaoShiException("未获取到当前登陆人信息");
+//        }
+//        //新建
+//        List<Integer> projectIds = new ArrayList<>();
+//        //将回避设计的projectId插入其中
+//        projectIds.add(avoidDesignWholeVO.getProjectId());
+//        List<Project> projects = projectTaskService.getProjectInfo(projectIds);
+//        if (!projects.isEmpty()) {
+//            Project project = projects.stream().filter(item -> item.getId().equals(avoidDesignWholeVO.getProjectId())).findFirst().orElse(null);
+//            if (project != null) {
+//                avoidDesignWholeVO.setProjectName(project.getName());
+//                avoidDesignWholeVO.setProjectType(project.getType());
+//            } else {
+//                throw new XiaoShiException("未查询到报告信息");
+//            }
+//        }
+//        //遍历装载回避设计方向的人员名称
+//        for (AvoidDesignVO avoidDesignVO : avoidDesignVOS) {
+//            //装载人员信息
+//            Personnel personnel = personnels.stream().filter(item -> item.getId().equals(avoidDesignVO.getCreateId())).findFirst().orElse(null);
+//            if (personnel != null) {
+//                avoidDesignVO.setCreateName(personnel.getPersonnelName());
+//            } else {
+//                throw new XiaoShiException("未获取到当前登陆人信息");
+//            }
+//            //装载特征集合
+//            Feature feature = featureService.getById(avoidDesignVO.getFeatureId());
+//            avoidDesignVO.setContent(feature.getContent());
+//            avoidDesignVO.setExplainText(feature.getExplainText());
+//            avoidDesignVO.setRightSort(feature.getRightSort());
+//            avoidDesignVO.setRightType(feature.getRightType());
+//            avoidDesignVO.setPatentNo(feature.getPatentNo());
+//        }
+//    }
 }

+ 13 - 5
src/main/java/cn/cslg/pas/service/business/ReportProjectService.java

@@ -298,7 +298,11 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
         ReportProject reportProject = new ReportProject();
         BeanUtils.copyProperties(reportProjectDTO, reportProject);
         reportProject.setProjectId(project.getId());
-        reportProject.setStatus(0);
+        if (reportProjectDTO.getIfFinish() == true) {
+            reportProject.setStatus(3);
+        } else {
+            reportProject.setStatus(2);
+        }
         reportProject.insert();
 
         /**
@@ -697,9 +701,11 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
             if (assoProjectFileTemp.size() != 0) {
                 List<String> guidTemp = assoProjectFileTemp.stream().map(AssoProjectFile::getFileGuid).collect(Collectors.toList());
                 if (guidTemp.size() != 0) {
-                    List<SystemFile> systemFileTemp = systemFiles.stream().filter(item -> guidTemp.contains(item.getGuid())).collect(Collectors.toList());
-                    if (systemFileTemp.size() != 0) {
-                        reportProjectVO.setSystemFileList(systemFileTemp);
+                    if (systemFiles != null) {
+                        List<SystemFile> systemFileTemp = systemFiles.stream().filter(item -> guidTemp.contains(item.getGuid())).collect(Collectors.toList());
+                        if (systemFileTemp.size() != 0) {
+                            reportProjectVO.setSystemFileList(systemFileTemp);
+                        }
                     }
                 }
             }
@@ -803,7 +809,9 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
             //装载报告状态
             SystemDict systemDictStatus = reportTypeList.stream().filter(item -> reportProjectVO.getReportType().equals(Integer.parseInt(item.getValue()))&&item.getType().equals("REPORT_STATE")).findFirst().orElse(null);
             if (systemDict != null) {
-                reportProjectVO.setStatusName(systemDictStatus.getLabel());
+                if (systemDictStatus != null) {
+                    reportProjectVO.setStatusName(systemDictStatus.getLabel());
+                }
             }
 
         }

+ 26 - 2
src/main/java/cn/cslg/pas/service/business/es/EsCountService.java

@@ -2,6 +2,7 @@ package cn.cslg.pas.service.business.es;
 
 import cn.cslg.pas.common.dto.PatentDTO;
 import cn.cslg.pas.common.dto.business.EsCountDTO;
+import cn.cslg.pas.common.dto.business.EsCountDetailDTO;
 import cn.cslg.pas.common.model.request.QueryRequest;
 import cn.cslg.pas.common.vo.EsConfigVO;
 import cn.cslg.pas.common.vo.business.EsCountVO;
@@ -15,6 +16,7 @@ import co.elastic.clients.elasticsearch._types.aggregations.*;
 import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
 import co.elastic.clients.elasticsearch.core.SearchRequest;
 import co.elastic.clients.elasticsearch.core.SearchResponse;
+import co.elastic.clients.json.JsonData;
 import com.alibaba.fastjson.JSON;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,11 +24,16 @@ import org.springframework.context.annotation.Lazy;
 import org.springframework.data.elasticsearch.client.elc.ElasticsearchAggregations;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 @Service
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class EsCountService {
+    private final List<String> termList = Arrays.asList();
+    private final List<String> nestedList = Arrays.asList();
+    private final List<String> dateList = Arrays.asList();
 
     private final ElasticsearchClient client;
 
@@ -47,7 +54,7 @@ public class EsCountService {
         EsCountDTO esCountDTO = new EsCountDTO();
 
         SearchRequest.Builder builder = new SearchRequest.Builder();
-        builder.index("patent");
+        builder.index("patent_v1");
         IEsCountBuilder iEsCountBuilder = null;
         String json = CommonService.readJsonFile("esCount.json");
         List<EsConfigVO> esConfigVOS = JSON.parseArray(json, EsConfigVO.class);
@@ -64,12 +71,29 @@ public class EsCountService {
             }
 
         }
-//        AggregationBuilders.t
         Aggregation aggregation = iEsCountBuilder.createAggregation();
         builder.aggregations("Agg", aggregation);
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
         Aggregate agg = response.aggregations().get("Agg");
+//        List<DateHistogramBucket> array = agg.autoDateHistogram().buckets().array();
+//        agg.nested().aggregations().get("terms_agg");
 
+        List<EsCountDetailDTO> detailDTOS = new ArrayList<>();
+        List<StringTermsBucket> list = agg.sterms().buckets().array();
+        list.forEach(bucket -> {
+            EsCountDetailDTO dto = new EsCountDetailDTO();
+            Aggregate aggregate = bucket.aggregations().get("filter_agg");
+            dto.setName(bucket.key().stringValue());
+            dto.setNumber(bucket.docCount());
+            if (aggregate != null) {
+                dto.setNumber(aggregate.filter().docCount());
+                dto.setName(bucket.key().stringValue());
+            }
+            if (dto.getNumber() > 0) {
+                detailDTOS.add(dto);
+            }
+        });
+        esCountDTO.setDetailDTOS(detailDTOS);
         return esCountDTO;
     }
 }

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

@@ -752,11 +752,11 @@ public class EsService {
         //原始数据
         Query q = QueryBuilders.term(t -> t.field("claim.if_origin").value(true));
         //申请号
-        Query q1 = QueryBuilders.term(t -> t.field("app_no").value(patentNo));
+        Query q1 = QueryBuilders.term(t -> t.field("app_no.keyword").value(patentNo));
         //公开号
-        Query q2 = QueryBuilders.term(t -> t.field("public_no").value(patentNo));
+        Query q2 = QueryBuilders.term(t -> t.field("public_no.keyword").value(patentNo));
         //授权号
-        Query q3 = QueryBuilders.term(t -> t.field("grant_no").value(patentNo));
+        Query q3 = QueryBuilders.term(t -> t.field("grant_no.keyword").value(patentNo));
         Query query = QueryBuilders.bool(i -> i.should(q1, q2, q3));
         Query bool = QueryBuilders.bool(i -> i.must(q,query));
         builder.query(bool);

+ 5 - 5
src/main/resources/jsons/esCount.json

@@ -4,7 +4,7 @@
     "type": "String",
     "value": "PA",
     "field": "PA",
-    "esField": "applicant.name",
+    "esField": "applicant.name.key",
     "esClass": "nestedCountBuilder",
     "ifSearch": "false",
     "ifGroup": "false",
@@ -16,7 +16,7 @@
     "type": "String",
     "value": "IN",
     "field": "IN",
-    "esField": "inventor.name",
+    "esField": "inventor.name.key",
     "esClass": "nestedCountBuilder",
     "ifSearch": "false",
     "ifGroup": "false",
@@ -28,7 +28,7 @@
     "type": "String",
     "value": "PE",
     "field": "PE",
-    "esField": "right_holder.name",
+    "esField": "right_holder.name.key",
     "esClass": "nestedCountBuilder",
     "ifSearch": "false",
     "ifGroup": "false",
@@ -281,7 +281,7 @@
     "value": "PD",
     "field": "PD",
     "esField": "public_date",
-    "esClass": "dateQueryBuilder",
+    "esClass": "dateHistogramBuilder",
     "ifSearch": "false",
     "ifGroup": "false",
     "ifShow": "true",
@@ -293,7 +293,7 @@
     "value": "AD",
     "field": "AD",
     "esField": "app_date",
-    "esClass": "dateQueryBuilder",
+    "esClass": "dateHistogramBuilder",
     "ifSearch": "false",
     "ifGroup": "false",
     "ifShow": "true",

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

@@ -33,7 +33,7 @@ public class AvoidDesignServiceTests {
             avoidDesignDTO.setContent("内容" + i);
             avoidDesignDTO.setRightSort(i);
             avoidDesignDTO.setRightType(0);
-            avoidDesignDTO.setExpalinText("解释" + i);
+            avoidDesignDTO.setExplainText("解释" + i);
             avoidDesignDTO.setDirection("回避设计方向" + i);
             avoidDesignDTOS.add(avoidDesignDTO);
         }
@@ -58,8 +58,8 @@ public class AvoidDesignServiceTests {
 
     @Test
     public void testGet() throws Exception {
-        Integer projectId = 49;
-        Response response = avoidDesignController.getAvoidDesign(projectId);
-        System.out.println("-----" + response.getData());
+//        Integer projectId = 49;
+//        Response response = avoidDesignController.getAvoidDesign(projectId);
+//        System.out.println("-----" + response.getData());
     }
 }

+ 17 - 46
src/test/java/cn/cslg/pas/service/EventServiceTests.java

@@ -1,16 +1,19 @@
 package cn.cslg.pas.service;
 
 import cn.cslg.pas.common.dto.PatentDTO;
+import cn.cslg.pas.common.dto.business.EsCountDTO;
 import cn.cslg.pas.common.dto.business.EsPatentFamilyDTO;
 import cn.cslg.pas.common.dto.business.SelectClaimDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.request.*;
 import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.vo.business.EsCountVO;
 import cn.cslg.pas.controller.EventController;
 import cn.cslg.pas.controller.PatentController;
 import cn.cslg.pas.domain.es.FamilyPatent;
 import cn.cslg.pas.domain.es.PatentFamilyMessage;
 import cn.cslg.pas.service.business.ProductMarketDataService;
+import cn.cslg.pas.service.business.es.EsCountService;
 import cn.cslg.pas.service.business.es.EsService;
 import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
 import co.elastic.clients.elasticsearch._types.aggregations.AggregationBuilders;
@@ -44,6 +47,8 @@ public class EventServiceTests {
     PatentController patentController;
     @Autowired
     private EsService esService;
+    @Autowired
+    private EsCountService esCountService;
 
 
 
@@ -205,54 +210,20 @@ public class EventServiceTests {
 
     @Test
     void test5() throws IOException {
-//        SelectClaimDTO dto = esService.selectClaim("CN102324864A");
-//        System.out.println(dto);
-
-        Aggregation range = AggregationBuilders.range(n -> n.field("app_date").format("yyyy"));
-        Aggregation aggregation = AggregationBuilders.dateHistogram(i -> i.field("app_date").format("yyyy").calendarInterval(CalendarInterval.Year));
-        Query query = QueryBuilders.range(j -> j.field("app_date").from("2021").to("2023"));
-        Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-        aggregation.aggregations().put("filter_agg",filter);
-
-        System.out.println(aggregation);
-
-    }
-
-    @Test
-    void test6() {
-        String valueOne = "H02";
-        Aggregation aggregation = AggregationBuilders.terms(i -> i.field("mipc.level2").size(10));
-        if (StringUtils.isNotEmpty(valueOne)) {
-            Query query = QueryBuilders.term(j -> j.field("mipc.level2").value(valueOne));
-            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-            Map<String, Aggregation> map = aggregation.aggregations();
-            System.out.println(map + "----------------");
-            map.put("filter_agg", filter);
-            System.out.println(map);
-        }
-        System.out.println(aggregation);
+        SelectClaimDTO dto = esService.selectClaim("CN102324864A");
+        System.out.println(dto);
     }
-
     @Test
-    void test7() {
-        String valueOne = "";
-        Aggregation terms = AggregationBuilders.terms(j -> j.field("applicant.name.key").size(10));
-        if (StringUtils.isNotEmpty(valueOne)) {
-            Query query = QueryBuilders.term(j -> j.field("applicant.name.key").value(valueOne));
-            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-            terms.aggregations().put("filter_agg",filter);
-        }
-        Aggregation aggregation = AggregationBuilders.nested(i -> i.path("applicant")).aggregations().put("terms_agg", terms);
-        System.out.println(aggregation);
-    }
+    void test8() throws Exception {
+        EsCountVO vo = new EsCountVO();
+//        vo.setField("PA");
+//        vo.setField("CO");
+        vo.setField("PT");
+//        vo.setValueOne("1");
+//        vo.setValueTwo("1");
+//        vo.setField("AD");
+        EsCountDTO esCountDTO = esCountService.esCountSearch(vo);
+        System.out.println(esCountDTO);
 
-    @Test
-    void test8() {
-        String valueOne = "";
-        String str = "*";
-        String s = str.concat(valueOne).concat("*");
-        Query query = QueryBuilders.wildcard(i -> i.field("").value(s));
-        Aggregation aggregation = AggregationBuilders.filter(i -> i.bool(j -> j.must(query)));
-        System.out.println(aggregation);
     }
 }