zero 1 рік тому
батько
коміт
0cfaef999a

+ 5 - 0
src/main/java/cn/cslg/pas/common/dto/es/EsCustomFieldValueDTO.java

@@ -23,4 +23,9 @@ public class EsCustomFieldValueDTO {
      */
     List<String> fieldValue;
 
+    /**
+     * 开关
+     */
+    Boolean ifHaveChild = false;
+
 }

+ 0 - 1
src/main/java/cn/cslg/pas/common/model/request/QueryRequest.java

@@ -17,7 +17,6 @@ public class QueryRequest {
     private String groupFieldValue;
     private List<OrderDTO> orderDTOList;
     private Integer projectId;
-    private Boolean ifHaveChild = false;
     private List<EsCustomFieldValueDTO> customFields;
     private Integer taskId;
     private List<String> patentNos;

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

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

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

@@ -6,8 +6,6 @@ import java.util.List;
 
 @Data
 public class EsCountVO {
-    //条件
-    private String condition;
     //栏位
     private String field;
     //栏位

+ 5 - 4
src/main/java/cn/cslg/pas/controller/PatentController.java

@@ -11,6 +11,7 @@ import cn.cslg.pas.common.model.request.QueryRequest;
 import cn.cslg.pas.common.model.request.StringRequest;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.common.vo.PatentPageMessageVO;
+import cn.cslg.pas.common.vo.business.EsAllCountVO;
 import cn.cslg.pas.common.vo.business.EsCountVO;
 import cn.cslg.pas.common.vo.business.PatentKinVO;
 import cn.cslg.pas.common.vo.business.PatentNoVO;
@@ -76,15 +77,15 @@ public class PatentController {
 
     @Operation(summary = "专利的聚合统计")
     @PostMapping("/esCountSearch")
-    public Response esCountSearch(@RequestBody List<EsCountVO> countVOS) throws Exception {
-        EsCountDTO dto = esCountService.esCountSearch(countVOS);
+    public Response esCountSearch(@RequestBody EsAllCountVO countVO) throws Exception {
+        EsCountDTO dto = esCountService.esCountSearch(countVO);
         return Response.success(dto);
     }
 
     @Operation(summary = "专利的聚合分析")
     @PostMapping("/esAnalysisSearch")
-    public Response esCount(@RequestBody List<EsCountVO> countVOS) throws Exception {
-        EsCountDTO patentDTO = esCountService.esAnalysisSearch(countVOS);
+    public Response esCount(@RequestBody EsAllCountVO countVO) throws Exception {
+        EsCountDTO patentDTO = esCountService.esAnalysisSearch(countVO);
         return Response.success(patentDTO);
     }
 

+ 15 - 7
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/ChildCountBuilder.java

@@ -3,13 +3,13 @@ package cn.cslg.pas.factorys.EsCountBuilderFactory;
 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.json.JsonData;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 @Component
 public class ChildCountBuilder implements IEsCountBuilder{
@@ -23,7 +23,7 @@ public class ChildCountBuilder implements IEsCountBuilder{
     public String fieldId = null;
 
     @Override
-    public Aggregation createAggregation() {
+    public Aggregation createAggregation() throws ParseException {
         Aggregation terms = null;
         if (ifHaveChild) {
             Aggregation agg = null;
@@ -34,7 +34,11 @@ public class ChildCountBuilder implements IEsCountBuilder{
                 Query query = QueryBuilders.wildcard(i -> i.field("custom_field.field_value.raw").value(s));
                 queryList.add(query);
             } else if (StringUtils.isNotEmpty(valueOne) && StringUtils.isNotEmpty(valueTwo)) {
-
+                String start = valueOne.substring(0, valueOne.indexOf("-"));
+                String end = valueOne.substring(valueOne.indexOf("-") + 1);
+                Query query = QueryBuilders.range(range -> range.field("custom_field.field_value.raw")
+                        .gte(JsonData.of(start)).lte(JsonData.of(end)));
+                queryList.add(query);
             }
             terms = this.getAggregation(queryList);
 
@@ -47,7 +51,11 @@ public class ChildCountBuilder implements IEsCountBuilder{
                 Query query = QueryBuilders.wildcard(i -> i.field("custom_field.field_value.raw").value(s));
                 queryList.add(query);
             } else if (StringUtils.isNotEmpty(valueOne) && StringUtils.isNotEmpty(valueTwo)) {
-
+                String start = valueOne.substring(0, valueOne.indexOf("-"));
+                String end = valueOne.substring(valueOne.indexOf("-") + 1);
+                Query query = QueryBuilders.range(range -> range.field("custom_field.field_value.raw")
+                        .gte(JsonData.of(start)).lte(JsonData.of(end)));
+                queryList.add(query);
             }
             terms = this.getAggregation(queryList);
         }

+ 52 - 22
src/main/java/cn/cslg/pas/service/business/es/EsCountService.java

@@ -2,10 +2,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.model.request.MapRequest;
+import cn.cslg.pas.common.model.request.StringRequest;
 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.domain.es.Patent;
 import cn.cslg.pas.factorys.EsAnalysisBuilderFactory.EsAnalysisBuilderFactory;
@@ -49,39 +53,64 @@ public class EsCountService {
     private EsAnalysisBuilderFactory esAnalysisBuilderFactory;
     @Autowired
     private FormatQueryService formatQueryService;
+    @Autowired
+    private EsService esService;
 
     /**
      * 查询专利库中的专利分组聚合统计
      *
-     * @param countVOS
+     * @param countVO
      * @return
      * @throws Exception
      */
-    public EsCountDTO esCountSearch(List<EsCountVO> countVOS) throws Exception {
+    public EsCountDTO esCountSearch(EsAllCountVO countVO) throws Exception {
+        String searchCondition = countVO.getCondition();
+        List<EsCustomFieldValueDTO> customFields = countVO.getCustomFields();
+        if (!CollectionUtils.isEmpty(customFields)) {
+            searchCondition = esService.parseCustomField(customFields);
+        }
+        Integer taskId = countVO.getTaskId();
+        Integer projectId = countVO.getProjectId();
+        if( taskId != null){
+            if (searchCondition != null && !"".equals(searchCondition.trim())) {
+                searchCondition = "taskId = " + taskId + " AND " + searchCondition;
+            } else {
+                searchCondition = "taskId = " + taskId;
+            }
+        } else {
+            if (projectId != null) {
+                if (searchCondition != null && !"".equals(searchCondition.trim())) {
+                    searchCondition = "projectId = " + projectId + " AND " + searchCondition;
+                } else {
+                    searchCondition = "projectId = " + projectId;
+                }
+            }
+        }
+
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        //1. 解析检索条件
+        treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
+        //格式化检索式
+        //3. 从es中检索数据
+        Query query = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
+
         EsCountDTO esCountDTO = new EsCountDTO();
         List<EsCountDetailDTO> detailDTOS = new ArrayList<>();
+        List<EsCountVO> countVOS = countVO.getCountVOS();
         for (EsCountVO vo : countVOS) {
             String field = vo.getField();
             Integer topN = vo.getTopN();
-            String condition = vo.getCondition();
+            String condition = searchCondition;
             //查询es返回数据
-            SearchRequest.Builder builder = new SearchRequest.Builder();
             Aggregation aggregation = this.selectAggregation(builder, vo);
-            if (StringUtils.isNotEmpty(condition)) {
-                //解析检索条件
-                treeNode tree = expressManager.getInstance().Parse(condition, false);
-                //从es中检索数据
-                Query query = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
-                Aggregation filtersAgg = null;
-                if (aggregation != null) {
-                    filtersAgg = new Aggregation.Builder().filters(new FiltersAggregation.Builder()
-                            .filters(i -> i.array(Arrays.asList(query))).build())
-                            .aggregations(new HashMap() {{
-                                put("filters_agg", aggregation);
-                            }}).build();
-                } else {
-                    filtersAgg = AggregationBuilders.filter(i -> i.bool(j -> j.must(query)));
-                }
+            if (query != null) {
+                Aggregation filtersAgg = new Aggregation.Builder().filters(new FiltersAggregation.Builder()
+                        .filters(i -> i.array(Arrays.asList(query))).build())
+                        .aggregations(new HashMap() {{
+                            put("filters_agg", aggregation);
+                        }}).build();
                 builder.aggregations("Agg", filtersAgg);
             } else {
                 builder.aggregations("Agg", aggregation);
@@ -89,7 +118,7 @@ public class EsCountService {
             SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
 
             Aggregate agg = response.aggregations().get("Agg");
-            if (StringUtils.isNotEmpty(condition)) {
+            if (query != null) {
                 if (StringUtils.isNotEmpty(field)) {
                     List<FiltersBucket> filtersBuckets = agg.filters().buckets().array();
                     if (dateList.contains(field)) {
@@ -139,13 +168,14 @@ public class EsCountService {
     /**
      * 专利的聚合分析
      *
-     * @param countVOS
+     * @param countVO
      * @return
      * @throws Exception
      */
-    public EsCountDTO esAnalysisSearch(List<EsCountVO> countVOS) throws Exception {
+    public EsCountDTO esAnalysisSearch(EsAllCountVO countVO) throws Exception {
         EsCountDTO esCountDTO = new EsCountDTO();
         List<EsCountDetailDTO> detailDTOS = new ArrayList<>();
+        List<EsCountVO> countVOS = countVO.getCountVOS();
         for (EsCountVO vo : countVOS) {
             String field = vo.getField();
             Integer topN = vo.getTopN();

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

@@ -130,7 +130,7 @@ public class EsService {
         String searchCondition = "";
         List<EsCustomFieldValueDTO> customFields = queryRequest.getCustomFields();
         if (!CollectionUtils.isEmpty(customFields)) {
-            searchCondition = this.parseCustomField(customFields,queryRequest.getIfHaveChild());
+            searchCondition = this.parseCustomField(customFields);
         }
         Integer projectId = queryRequest.getProjectId();
         Long current = queryRequest.getCurrent();
@@ -244,7 +244,7 @@ public class EsService {
      * @param customFields
      * @return
      */
-    public String parseCustomField(List<EsCustomFieldValueDTO> customFields,Boolean ifHaveChild) {
+    public String parseCustomField(List<EsCustomFieldValueDTO> customFields) {
         int m = 1;
         int n = 0;
         StringBuilder builder = new StringBuilder();
@@ -254,10 +254,10 @@ public class EsService {
                 EsCustomFieldValueDTO customField = customFields.get(i);
                 if (i != n) {
                     builder.append(" ").append("and").append(" ").append("(");
-                    this.appendStr(customField, builder, m,ifHaveChild);
+                    this.appendStr(customField, builder, m,customField.getIfHaveChild());
                 } else {
                     builder.append("(");
-                    this.appendStr(customField, builder, m,ifHaveChild);
+                    this.appendStr(customField, builder, m,customField.getIfHaveChild());
                 }
             }
         } else {
@@ -265,10 +265,10 @@ public class EsService {
                 EsCustomFieldValueDTO customField = customFields.get(i);
                 if (i != n) {
                     builder.append(" ").append("and").append(" ");
-                    this.appendStr(customField, builder, m,ifHaveChild);
+                    this.appendStr(customField, builder, m,customField.getIfHaveChild());
                 } else {
                     builder.append("(");
-                    this.appendStr(customField, builder, m,ifHaveChild);
+                    this.appendStr(customField, builder, m,customField.getIfHaveChild());
                 }
             }
         }

+ 24 - 0
src/main/resources/jsons/esAnalysis.json

@@ -562,5 +562,29 @@
     "ifGroup": "false",
     "ifShow": "true",
     "ifAsCondition": "true"
+  },
+  {
+    "name": "业务任务",
+    "type": "String",
+    "value": "taskId",
+    "field": "taskId",
+    "esField": "project_task.task_id",
+    "esClass": "projectTaskQueryBuilder",
+    "ifSearch": "false",
+    "ifGroup": "false",
+    "ifShow": "false",
+    "ifAsCondition": "true"
+  },
+  {
+    "name": "子文档号",
+    "type": "String",
+    "value": "projectId",
+    "field": "projectId",
+    "esField": "project_id",
+    "esClass": "childQueryBuilder",
+    "ifSearch": "false",
+    "ifGroup": "false",
+    "ifShow": "false",
+    "ifAsCondition": "true"
   }
 ]

+ 24 - 0
src/main/resources/jsons/esCount.json

@@ -358,5 +358,29 @@
     "ifGroup": "false",
     "ifShow": "true",
     "ifAsCondition": "true"
+  },
+  {
+    "name": "业务任务",
+    "type": "String",
+    "value": "taskId",
+    "field": "taskId",
+    "esField": "project_task.task_id",
+    "esClass": "projectTaskQueryBuilder",
+    "ifSearch": "false",
+    "ifGroup": "false",
+    "ifShow": "false",
+    "ifAsCondition": "true"
+  },
+  {
+    "name": "子文档号",
+    "type": "String",
+    "value": "projectId",
+    "field": "projectId",
+    "esField": "project_id",
+    "esClass": "childQueryBuilder",
+    "ifSearch": "false",
+    "ifGroup": "false",
+    "ifShow": "false",
+    "ifAsCondition": "true"
   }
 ]

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

@@ -244,8 +244,8 @@ public class EventServiceTests {
         vo2.setValueTwo("2023");
         countVOS.add(vo1);
 //        countVOS.add(vo2);
-        EsCountDTO esCountDTO = esCountService.esCountSearch(countVOS);
-        System.out.println(esCountDTO);
+//        EsCountDTO esCountDTO = esCountService.esCountSearch(countVOS);
+//        System.out.println(esCountDTO);
 
     }
 
@@ -307,7 +307,7 @@ public class EventServiceTests {
         dto2.setFieldValue(Arrays.asList("a"));
         customFields.add(dto1);
         customFields.add(dto2);
-        String s = esService.parseCustomField(customFields,Boolean.FALSE);
+        String s = esService.parseCustomField(customFields);
         System.out.println("结果为:" + s);
         System.out.println("-----------------------------");
         List<EsCustomFieldValueDTO> fields = new ArrayList<>();