瀏覽代碼

Merge remote-tracking branch 'origin/master'

xiexiang 1 年之前
父節點
當前提交
b1089f9178

+ 15 - 0
src/main/java/cn/cslg/pas/common/dto/GetUnselectedDTO.java

@@ -0,0 +1,15 @@
+package cn.cslg.pas.common.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class GetUnselectedDTO {
+
+    private Integer number;
+
+    private List<String> existChildIds;
+
+    private List<String> beinglessChildIds;
+}

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.service.business.es;
 
+import cn.cslg.pas.common.dto.GetUnselectedDTO;
 import cn.cslg.pas.common.dto.business.EsCountDTO;
 import cn.cslg.pas.common.dto.business.EsCountDetailDTO;
 import cn.cslg.pas.common.dto.es.EsCustomFieldValueDTO;
@@ -18,7 +19,9 @@ import cn.cslg.pas.service.business.CommonService;
 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.IdsQuery;
 import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
 import co.elastic.clients.elasticsearch.core.SearchRequest;
 import co.elastic.clients.elasticsearch.core.SearchResponse;
 import co.elastic.clients.elasticsearch.core.search.Hit;
@@ -30,6 +33,7 @@ import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.io.IOException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -157,7 +161,7 @@ public class EsCountService {
         }
 
         if (!CollectionUtils.isEmpty(customFields)) {
-            searchCondition = esService.parseCustomField(customFields);
+            searchCondition = esService.parseCustomField(customFields,projectId,taskId);
         }
 
         searchCondition = this.getCondition(searchCondition, taskId, projectId);
@@ -260,7 +264,11 @@ public class EsCountService {
                             Integer finalFieldType = fieldType;
                             filtersBuckets.forEach(filtersBucket -> {
                                 Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
-                                this.getChildCountDTOS(filtersAgg, field, finalFieldType, topN, detailDTOS, esCountDTO);
+                                try {
+                                    this.getChildCountDTOS(filtersAgg, field, finalFieldType, topN, detailDTOS, esCountDTO,projectId,taskId);
+                                } catch (Exception e) {
+                                    e.printStackTrace();
+                                }
                             });
                         } else {
                             Integer finalFieldType1 = fieldType;
@@ -311,7 +319,7 @@ public class EsCountService {
                     }
                 } 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, projectId, taskId);
                     } else {
                         this.getChildAnalysisDTOS(agg, field, fieldType, topN,
                                 detailDTOS, esCountDTO, firstName, map, values);
@@ -332,7 +340,7 @@ public class EsCountService {
         String field = rangeVO.getField();
         List<EsCustomFieldValueDTO> customFields = rangeVO.getCustomFields();
         if (!CollectionUtils.isEmpty(customFields)) {
-            searchCondition = esService.parseCustomField(customFields);
+            searchCondition = esService.parseCustomField(customFields, rangeVO.getProjectId(), rangeVO.getTaskId());
         }
         Integer taskId = rangeVO.getTaskId();
         Integer projectId = rangeVO.getProjectId();
@@ -586,7 +594,7 @@ public class EsCountService {
      * @param detailDTOS
      */
     public void getChildCountDTOS(Aggregate agg, String field, Integer fieldType, Integer topN,
-                                  List<EsCountDetailDTO> detailDTOS, EsCountDTO esCountDTO) {
+                                  List<EsCountDetailDTO> detailDTOS, EsCountDTO esCountDTO,Integer projectId, Integer taskId) throws Exception {
         esCountDTO.setAllNumber(agg.children().docCount());
         Aggregate childAgg = agg.children().aggregations().get("childAgg");
         List<StringTermsBucket> list = childAgg.sterms().buckets().array();
@@ -605,47 +613,77 @@ public class EsCountService {
                     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);
-                            }
-                        }
                     }
                 }
             });
         });
+        if (fieldType == null || fieldType != 6) {
+            GetUnselectedDTO unselectedDTO = this.getUnselectedCustomNum(projectId, taskId);
+            EsCountDetailDTO detail = new EsCountDetailDTO();
+            detail.setField(field);
+            detail.setName("未选择");
+            detail.setNumber(unselectedDTO.getNumber().longValue());
+            detail.setTopN(topN);
+            if (!detailDTOS.contains(detail)) {
+                detailDTOS.add(detail);
+            }
+        }
     }
 
-    public Integer getUnselectedCustomNum(Integer projectId,Integer taskId) throws Exception {
-        String condition = "";
-        if (taskId != null) {
-            condition = "taskId = " + taskId;
-        } else {
-            condition = "projectId = " + projectId;
-        }
+    public GetUnselectedDTO getUnselectedCustomNum(Integer projectId, Integer taskId) throws Exception {
+        GetUnselectedDTO dto = new GetUnselectedDTO();
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
         builder.index("patent");
-        treeNode tree = expressManager.getInstance().Parse(condition, false);
-        //格式化检索式
-        //3. 从es中检索数据
-        Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
+        Query q = null;
+        if (taskId != null) {
+            Query query = QueryBuilders.term(i -> i.field("project_task.task_id").value(taskId));
+            q = QueryBuilders.hasChild(i -> i.type("task").query(query));
+        } else {
+            Query query = QueryBuilders.term(i -> i.field("project_id").value(projectId));
+            q = QueryBuilders.hasChild(i -> i.type("project").query(query));
+        }
+        builder.size(9999);
         builder.query(q);
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
         List<Hit<Patent>> hits = response.hits().hits();
-        Long total = response.hits().total().value();
         List<String> list = new ArrayList<>();
         for (Hit<Patent> hit : hits) {
             String id = hit.id();
             list.add(id);
         }
-        return null;
+        if (!CollectionUtils.isEmpty(list)) {
+            dto = this.ifExistChild(list);
+        }
+        return dto;
+    }
+
+    public GetUnselectedDTO ifExistChild(List<String> list) throws IOException {
+        GetUnselectedDTO dto = new GetUnselectedDTO();
+        List<String> existChildIds = new ArrayList<>();
+        List<String> beinglessChildIds = new ArrayList<>();
+        int count = 0;
+        for (String id : list) {
+            SearchRequest.Builder builder = new SearchRequest.Builder();
+            //设置查询索引
+            builder.index("patent");
+            Query q1 = QueryBuilders.parentId(i -> i.type("project_customfield").id(id));
+            Query q2 = QueryBuilders.exists(i -> i.field("custom_field"));
+            Query bool = QueryBuilders.bool(i -> i.must(q1, q2));
+            builder.query(bool);
+            SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+            Long total = response.hits().total().value();
+            if (total > 0) {
+                existChildIds.add(id);
+            } else {
+                beinglessChildIds.add(id);
+                count++;
+            }
+        }
+        dto.setNumber(count);
+        dto.setExistChildIds(existChildIds);
+        dto.setBeinglessChildIds(beinglessChildIds);
+        return dto;
     }
 
     /**
@@ -684,20 +722,6 @@ public class EsCountService {
                         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);
-//                        }
-//                    }
-//                }
             });
         });
 

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

@@ -333,7 +333,7 @@ public class EsCustomFieldService {
         }
         List<EsCustomFieldValueDTO> customFields = vo.getCustomFields();
         if (!CollectionUtils.isEmpty(customFields)) {
-            searchCondition = esService.parseCustomField(customFields);
+            searchCondition = esService.parseCustomField(customFields,projectId,taskId);
         }
         if (taskId != null) {
             if (searchCondition != null && !"".equals(searchCondition.trim())) {

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

@@ -128,6 +128,9 @@ public class EsPatentService {
             if (!CollectionUtils.isEmpty(esMess.getInventor())) {
                 dto.setInventor(this.loadName(esMess.getInventor()));
             }
+            if (esMess.getPatentNo().equals(vo.getPatentNo())) {
+                break;
+            }
         }
         dto.setPictureGuid(FormatUtil.getPictureFormat(dto.getAppNo()));
         List<LegalEvent> legalEvents = this.getLegalEvents(dto.getPatentNo());

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

@@ -1,6 +1,7 @@
 package cn.cslg.pas.service.business.es;
 
 import cn.cslg.pas.common.core.base.IfConstant;
+import cn.cslg.pas.common.dto.GetUnselectedDTO;
 import cn.cslg.pas.common.dto.PatentColumnDTO;
 import cn.cslg.pas.common.dto.PatentDTO;
 //import cn.cslg.pas.common.dto.business.EsPatentFamilyDTO;
@@ -61,6 +62,9 @@ public class EsService {
     private PatentStarApiService patentStarApiService;
     @Autowired
     private EsPatentService esPatentService;
+    @Lazy
+    @Autowired
+    private EsCountService esCountService;
 
 
     /**
@@ -158,7 +162,7 @@ public class EsService {
         }
         List<EsCustomFieldValueDTO> customFields = queryRequest.getCustomFields();
         if (!CollectionUtils.isEmpty(customFields)) {
-            searchCondition = this.parseCustomField(customFields);
+            searchCondition = this.parseCustomField(customFields,projectId,taskId);
         }
         if (taskId != null) {
             if (searchCondition != null && !"".equals(searchCondition.trim())) {
@@ -388,7 +392,7 @@ public class EsService {
      * @param customFields
      * @return
      */
-    public String parseCustomField(List<EsCustomFieldValueDTO> customFields) {
+    public String parseCustomField(List<EsCustomFieldValueDTO> customFields, Integer projectId, Integer taskId) throws Exception {
         int m = 1;
         int n = 0;
         StringBuilder builder = new StringBuilder();
@@ -398,10 +402,10 @@ public class EsService {
                 EsCustomFieldValueDTO customField = customFields.get(i);
                 if (i != n) {
                     builder.append(" ").append("and").append(" ").append("(");
-                    this.appendStr(customField, builder, m, customField.getIfHaveChild());
+                    this.appendStr(customField, builder, m, customField.getIfHaveChild(), projectId, taskId);
                 } else {
                     builder.append("(");
-                    this.appendStr(customField, builder, m, customField.getIfHaveChild());
+                    this.appendStr(customField, builder, m, customField.getIfHaveChild(), projectId, taskId);
                 }
             }
         } else {
@@ -409,10 +413,10 @@ public class EsService {
                 EsCustomFieldValueDTO customField = customFields.get(i);
                 if (i != n) {
                     builder.append(" ").append("and").append(" ");
-                    this.appendStr(customField, builder, m, customField.getIfHaveChild());
+                    this.appendStr(customField, builder, m, customField.getIfHaveChild(), projectId, taskId);
                 } else {
                     builder.append("(");
-                    this.appendStr(customField, builder, m, customField.getIfHaveChild());
+                    this.appendStr(customField, builder, m, customField.getIfHaveChild(), projectId, taskId);
                 }
             }
         }
@@ -422,9 +426,14 @@ public class EsService {
         return builder.toString();
     }
 
-    public void appendStr(EsCustomFieldValueDTO customField, StringBuilder builder, int m, boolean ifHaveChild) {
+    public void appendStr(EsCustomFieldValueDTO customField, StringBuilder builder, int m, boolean ifHaveChild,
+                          Integer projectId, Integer taskId) throws Exception {
         builder.append("field").append("=").append(customField.getFieldId());
         List<String> values = customField.getFieldValue();
+        if (values.contains("未选择")) {
+            values.removeIf(value -> value.equals("未选择"));
+            values.add("未选择");
+        }
         if (!CollectionUtils.isEmpty(values)) {
             builder.append(" ").append("and").append(" ");
             if (ifHaveChild) {
@@ -440,12 +449,29 @@ public class EsService {
                     if (j != values.size() - m) {
                         builder.append(s).append(" ").append("or").append(" ");
                     } else {
-                        builder.append(s).append(")").append(")");
+                        if (s.equals("未选择")) {
+                            GetUnselectedDTO unselectedDTO = esCountService.getUnselectedCustomNum(projectId, taskId);
+                            List<String> childIds = unselectedDTO.getBeinglessChildIds();
+                            List<String> nos = this.getPatentNos(childIds);
+                            String noCondition = this.appendPatentNo(nos);
+                            builder.append(s).append(")").append(" ").append("or")
+                                    .append(" ").append("(").append(noCondition).append(")").append(")");
+                        } else {
+                            builder.append(s).append(")").append(")");
+                        }
                     }
                 }
             } else {
                 for (String value : values) {
-                    builder.append(value).append(")");
+                    if (value.equals("未选择")) {
+                        GetUnselectedDTO unselectedDTO = esCountService.getUnselectedCustomNum(projectId, taskId);
+                        List<String> childIds = unselectedDTO.getBeinglessChildIds();
+                        List<String> nos = this.getPatentNos(childIds);
+                        String noCondition = this.appendPatentNo(nos);
+                        builder.append(value).append(" ").append("or").append(" ").append(noCondition).append(")");
+                    } else {
+                        builder.append(value).append(")");
+                    }
                 }
             }
         } else {
@@ -1337,6 +1363,43 @@ public class EsService {
         }
         return null;
     }
+
+    public List<String> getPatentNos(List<String> ids) throws IOException {
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        Query q = QueryBuilders.ids(i -> i.values(ids));
+        builder.size(9999);
+        builder.query(q);
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        List<Hit<Patent>> hits = response.hits().hits();
+        List<String> list = new ArrayList<>();
+        for (Hit<Patent> hit : hits) {
+            Patent patent = hit.source();
+            list.add(patent.getPatentNo());
+        }
+        return list;
+    }
+
+    public String appendPatentNo(List<String> nos) {
+        String str = "NO = ";
+        if (nos.size() > 1) {
+            str = str + "(";
+            for (int i = 0; i < nos.size(); i++) {
+                String s = nos.get(i);
+                if (i != nos.size() - 1) {
+                    str = str + s + " " + "OR" + " ";
+                } else {
+                    str = str + s + ")";
+                }
+            }
+        } else {
+            for (String no : nos) {
+                str = str + no;
+            }
+        }
+        return str;
+    }
 }
 
 

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

@@ -317,7 +317,7 @@ public class EsValueCurveService {
         }
         List<EsCustomFieldValueDTO> customFields = vo.getCustomFields();
         if (!CollectionUtils.isEmpty(customFields)) {
-            searchCondition = esService.parseCustomField(customFields);
+            searchCondition = esService.parseCustomField(customFields, projectId, taskId);
         }
         if (taskId != null) {
             if (searchCondition != null && !"".equals(searchCondition.trim())) {

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

@@ -36,6 +36,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
@@ -303,7 +304,7 @@ public class EventServiceTests {
     }
 
     @Test
-    void test16() {
+    void test16() throws Exception {
         List<EsCustomFieldValueDTO> customFields = new ArrayList<>();
         EsCustomFieldValueDTO dto1 = new EsCustomFieldValueDTO();
         dto1.setFieldId("1");
@@ -313,7 +314,7 @@ public class EventServiceTests {
         dto2.setFieldValue(Arrays.asList("a"));
         customFields.add(dto1);
         customFields.add(dto2);
-        String s = esService.parseCustomField(customFields);
+        String s = esService.parseCustomField(customFields,null,null);
         System.out.println("结果为:" + s);
         System.out.println("-----------------------------");
         List<EsCustomFieldValueDTO> fields = new ArrayList<>();
@@ -503,8 +504,14 @@ public class EventServiceTests {
 
     @Test
     public void test103() throws IOException {
-        List<String> fms = Arrays.asList("CN200880110903.8_p");
-        String systemFileFromFMS = fileManagerService.getSystemFileFromFMS(fms);
-        System.out.println(systemFileFromFMS);
+        List<String> values = new ArrayList<>();
+        values.add("48");
+        values.add("45");
+        values.add("未选择");
+        values.add("Test测试");
+        values.removeIf(value -> value.equals("未选择"));
+
+        System.out.println(values);
+
     }
 }