lwhhszx 1 anno fa
parent
commit
a8d22f05f5

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@@ -8,15 +8,16 @@ import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
 import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
 import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
 import cn.cslg.pas.common.vo.EsConfigVO;
+import cn.cslg.pas.common.vo.FieldValueVO;
 import cn.cslg.pas.common.vo.PatentWithIdVO;
-import cn.cslg.pas.common.vo.es.EsCustomFieldBatchVO;
-import cn.cslg.pas.common.vo.es.FieldHistoryVO;
-import cn.cslg.pas.common.vo.es.QueryESCustomFieldVO;
+import cn.cslg.pas.common.vo.es.*;
 import cn.cslg.pas.domain.business.CustomField;
+import cn.cslg.pas.domain.business.CustomOption;
 import cn.cslg.pas.domain.business.TreeNode;
 import cn.cslg.pas.domain.es.*;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.service.business.CommonService;
+import cn.cslg.pas.service.business.CustomOptionService;
 import cn.cslg.pas.service.business.TreeNodeService;
 import cn.cslg.pas.service.query.FormatQueryService;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
@@ -54,7 +55,7 @@ public class EsCustomFieldService {
     private final ElasticsearchClient client;
     private final EsService esService;
     private final TreeNodeService treeNodeService;
-
+    private final CustomOptionService customOptionService;
     @Autowired
     private FormatQueryService formatQueryService;
 
@@ -685,39 +686,62 @@ public class EsCustomFieldService {
     }
 
 
-    //查询自定义字段
-    public PatentWithIdVO getPatentFields(EsQueryPatentFieldsDTO esQueryPatentFieldsDTO) throws Exception {
-        PatentWithIdVO patentWithIdVO = new PatentWithIdVO();
+    /**
+     * 查询自定义栏位和值
+     *
+     * @param esQueryPatentFieldsDTO
+     * @return
+     * @throws Exception
+     */
+    public List<EsPatentFieldsVO> getPatentFields(EsQueryPatentFieldsDTO esQueryPatentFieldsDTO) throws Exception {
+        List<EsPatentFieldsVO> esPatentFieldsVOS = new ArrayList<>();
+
         Integer projectId = esQueryPatentFieldsDTO.getProjectId();
         List<String> patentNos = esQueryPatentFieldsDTO.getPatentNos();
         List<InnerFields> innerFields = esQueryPatentFieldsDTO.getInnerFields();
 
-        for (String patentNo:patentNos) {
+        for (String patentNo : patentNos) {
+            EsPatentFieldsVO esPatentFieldsVO = new EsPatentFieldsVO();
+            esPatentFieldsVO.setPatentNo(patentNo);
             SearchRequest.Builder builder = new SearchRequest.Builder();
 
             //设置查询索引
             builder.index("patent");
             builder.sort(sortOptionsBuilder -> sortOptionsBuilder
                     .field(fieldSortBuilder -> fieldSortBuilder
-                            .field("create_time").order(SortOrder.Desc)));
-           Query queries = this.getQueries(patentNo,innerFields,projectId);
-           builder.size(999);
+                            .field("custom_field.create_time").order(SortOrder.Desc)));
+            Query queries = this.getQueries(patentNo, innerFields, projectId);
+            builder.size(999);
             builder.query(queries);
             SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
             long total = response.hits().total().value();
-            List<ESCustomField> esCustomFields =new ArrayList<>();
+            List<ESCustomField> esCustomFields = new ArrayList<>();
+            List<InnerPatentFieldsVO> innerPatentFieldsVOS = new ArrayList<>();
             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 {
-
+                for (Hit<Patent> hit : hits) {
+                    Patent patent = hit.source();
+                    ESCustomField esCustomField = patent.getESCustomField();
+                    ESCustomField esCustomField1 = esCustomFields.stream()
+                            .filter(item -> item.getField().equals(esCustomField.getField()) && item.getFieldType().equals(esCustomField.getFieldType()))
+                            .findFirst().orElse(null);
+
+                    if (esCustomField1 == null) {
+                        esCustomFields.add(esCustomField);
+                        InnerPatentFieldsVO innerPatentFieldsVO = new InnerPatentFieldsVO();
+                        innerPatentFieldsVO.setField(esCustomField.getField());
+                        innerPatentFieldsVO.setFieldType(esCustomField.getFieldType());
+                        List<FieldValueVO> fieldValueVOS = this.getCustomFieldValues(esCustomField.getFieldType(), esCustomField.getFieldValue());
+                        innerPatentFieldsVO.setFieldValueVOS(fieldValueVOS);
+                        innerPatentFieldsVOS.add(innerPatentFieldsVO);
+                    }
+                }
             }
+            esPatentFieldsVO.setInnerClassFields(innerPatentFieldsVOS);
+            esPatentFieldsVOS.add(esPatentFieldsVO);
         }
 
-        return patentWithIdVO;
+        return esPatentFieldsVOS;
     }
 
     private Query getQueries(String patentNo, List<InnerFields> innerFields, Integer projectId) {
@@ -731,7 +755,7 @@ public class EsCustomFieldService {
         Query parentQ3 = QueryBuilders.term(t -> t.field("grant_no.keyword").value(patentNo));
 
         Query parentQ = QueryBuilders.bool(i -> i.should(parentQ1, parentQ2, parentQ3));
-
+        Query patentQ1 = QueryBuilders.hasParent(t -> t.parentType("patent").query(parentQ));
         List<Query> queries = new ArrayList<>();
         for (InnerFields innerField : innerFields) {
             String filedId = innerField.getFieldId();
@@ -739,11 +763,107 @@ public class EsCustomFieldService {
             Query q1 = QueryBuilders.term(t -> t.field("custom_field.project_id").value(projectId));
             Query q2 = QueryBuilders.term((t -> t.field("custom_field.field").value(filedId)));
             Query q3 = QueryBuilders.term(t -> t.field("custom_field.field_type").value(fieldType));
+
             Query fQ = QueryBuilders.bool(i -> i.must(q1, q2, q3));
             queries.add(fQ);
         }
         Query query = QueryBuilders.bool(i -> i.should(queries));
-        Query query1 = QueryBuilders.bool(i -> i.must(query, parentQ));
+        Query query1 = QueryBuilders.bool(i -> i.must(query, patentQ1));
         return query1;
     }
+
+
+    /**
+     * 获得自定义字段的值
+     *
+     * @param type
+     * @param value
+     * @return
+     */
+    public List<FieldValueVO> getCustomFieldValues(Integer type, List<String> value) {
+        List<FieldValueVO> fieldValueVOS = new ArrayList<>();
+        switch (type) {
+            case 0:
+            case 1:
+            case 2:
+                value.forEach(item -> {
+                    FieldValueVO fieldValueVO = new FieldValueVO();
+                    fieldValueVO.setValue(item);
+                    fieldValueVOS.add(fieldValueVO);
+                });
+                break;
+            case 3:
+            case 4:
+            case 5:
+                if (value != null && value.size() > 0) {
+                    List<Integer> ids = FormatUtil.StringTOIntegerList(value);
+                    LambdaQueryWrapper<CustomOption> queryWrapper = new LambdaQueryWrapper<>();
+                    queryWrapper.in(CustomOption::getId, ids);
+                    List<CustomOption> customOptions = customOptionService.list(queryWrapper);
+                    customOptions.forEach(item -> {
+                        FieldValueVO fieldValueVO = new FieldValueVO();
+                        fieldValueVO.setValueId(item.getId());
+                        fieldValueVO.setValue(item.getName());
+                        fieldValueVOS.add(fieldValueVO);
+                    });
+                }
+                break;
+            case 6:
+            case 7:
+            case 8:
+
+            case 9:
+                if (value != null && value.size() > 0) {
+                    List<Integer> ids = FormatUtil.StringTOIntegerList(value);
+                    LambdaQueryWrapper<TreeNode> queryWrapper = new LambdaQueryWrapper<>();
+                    queryWrapper.in(TreeNode::getId, ids);
+                    List<TreeNode> treeNodes = treeNodeService.list(queryWrapper);
+                    treeNodes.forEach(item -> {
+                        FieldValueVO fieldValueVO = new FieldValueVO();
+                        fieldValueVO.setValueId(item.getId());
+                        fieldValueVO.setValue(item.getName());
+                        fieldValueVO.setPath(item.getPath());
+                        fieldValueVOS.add(fieldValueVO);
+                    });
+                }
+                break;
+        }
+        return fieldValueVOS;
+
+    }
+
+    public List<PatentWithIdVO> getEsCustomFields(String filedId, Integer type, Integer projectId) {
+        List<PatentWithIdVO> patentWithIdVOS = new ArrayList<>();
+        Query q1 = QueryBuilders.term(t -> t.field("custom_field.project_id").value(projectId));
+        Query q2 = QueryBuilders.term((t -> t.field("custom_field.field").value(filedId)));
+        Query q3 = QueryBuilders.term(t -> t.field("custom_field.field_type").value(type));
+
+        Query fQ = QueryBuilders.bool(i -> i.must(q1, q2, q3));
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        builder.size(999);
+        builder.query(fQ);
+        builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+                .field(fieldSortBuilder -> fieldSortBuilder
+                        .field("custom_field.create_time").order(SortOrder.Desc)));
+        try {
+            SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+            long total = response.hits().total().value();
+            if (total > 0) {
+                List<Hit<Patent>> hits = response.hits().hits();
+                for (Hit<Patent> hit : hits) {
+                    PatentWithIdVO patentWithIdVO = new PatentWithIdVO();
+                    patentWithIdVO.setPatent(hit.source());
+                    patentWithIdVO.setId(hit.id());
+                    PatentWithIdVO patentWithIdVO1 = patentWithIdVOS.stream().filter(item -> item.getPatent().getPatentJoin().getParent().equals(hit.source().getPatentJoin().getParent())).findFirst().orElse(null);
+                    if (patentWithIdVO1 == null) {
+                        patentWithIdVOS.add(patentWithIdVO);
+                    }
+                }
+
+            }
+        } catch (Exception e) {
+        }
+
+        return patentWithIdVOS;
+    }
 }

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

@@ -29,6 +29,7 @@ import co.elastic.clients.elasticsearch._types.query_dsl.Query;
 import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
 import co.elastic.clients.elasticsearch.core.*;
 import co.elastic.clients.elasticsearch.core.search.Hit;
+import co.elastic.clients.elasticsearch.nodes.Stats;
 import co.elastic.clients.json.JsonData;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
@@ -283,7 +284,10 @@ public class EsScratchWordsService {
         } else {
             totalAggregation = AggregationBuilders.cardinality(i -> i.field(esGroupFiled));
         }*/
-        Aggregation totalAggregation = AggregationBuilders.cardinality(i -> i.field(esGroupFiled));
+//        Aggregation totalAggregation = AggregationBuilders.cardinality(i -> i.field(esGroupFiled));
+//        builder.aggregations("total", totalAggregation);
+        Aggregation totalAggregation = new Aggregation.Builder().statsBucket(new StatsBucketAggregation.Builder()
+                .bucketsPath(n -> n.single("agg._count")).build()).build();
         builder.aggregations("total", totalAggregation);
         try {
             SearchResponse<Marking> response = client.search(builder.build(), Marking.class);
@@ -316,7 +320,7 @@ public class EsScratchWordsService {
             records.setData(maps);
 
             Aggregate totalAgg = response.aggregations().get("total");
-            long total = totalAgg.cardinality().value();
+            long total = totalAgg.statsBucket().count();
             records.setTotal(total);
             records.setCurrent(current);
             records.setSize(size);

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

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