lwhhszx 1 rok pred
rodič
commit
01aeb349cd

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

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

+ 6 - 3
src/main/java/cn/cslg/pas/common/vo/ScratchWordsVO.java

@@ -1,7 +1,9 @@
 package cn.cslg.pas.common.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
 
@@ -15,7 +17,7 @@ public class ScratchWordsVO {
     private  String markColor;
 
 
-    private String markOteText;
+    private String markNoteText;
 
 
     private  Integer markType;
@@ -28,7 +30,8 @@ public class ScratchWordsVO {
 
     private Integer markSite;
 
-
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
     private Date markTime;
 
 
@@ -44,5 +47,5 @@ public class ScratchWordsVO {
     private String createName;
     private String patentId;
     private String patentNo;
-    private String title;
+    private String patentTitle;
 }

+ 16 - 5
src/main/java/cn/cslg/pas/controller/ScratchWordsController.java

@@ -5,9 +5,11 @@ import cn.cslg.pas.common.dto.QueryScratchWordsDTO;
 import cn.cslg.pas.common.dto.business.ScratchWordsDTO;
 import cn.cslg.pas.common.dto.business.UpdateScratchWordsDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.model.request.StringRequest;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.domain.business.ScratchWords;
 import cn.cslg.pas.service.business.ScratchWordsService;
+import cn.cslg.pas.service.business.es.EsScratchWordsService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -28,7 +30,7 @@ import java.util.List;
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class ScratchWordsController {
     private final ScratchWordsService scratchWordsService;
-
+    private final EsScratchWordsService esScratchWordsService;
     @Operation(summary = "新增划词高亮")
     @PostMapping("/add")
     public Response add(@RequestBody ScratchWords scratchWords) {
@@ -69,14 +71,23 @@ public class ScratchWordsController {
     }
     @Operation(summary = "查询划词")
     @PostMapping("/queryScratchWords")
-    public Response query(@RequestBody QueryScratchWordsDTO queryScratchWordsDTO) {
-        if (queryScratchWordsDTO != null) {
-            Records records= scratchWordsService.query(queryScratchWordsDTO);
+    public Response query(@RequestBody StringRequest stringRequest) {
+        if (stringRequest != null) {
+            Records records= scratchWordsService.query(stringRequest);
 
             return Response.success(records);
         } else {
             return Response.error("请求参数为null");
         }
     }
-
+    @Operation(summary = "划词分组")
+    @PostMapping("/queryScratchWordsGroup")
+    public Response queryScratchWordsGroup(@RequestBody StringRequest stringRequest) {
+        if (stringRequest != null) {
+            Records records= esScratchWordsService.groupScratchWord(stringRequest);
+            return Response.success(records);
+        } else {
+            return Response.error("请求参数为null");
+        }
+    }
 }

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

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

+ 3 - 1
src/main/java/cn/cslg/pas/domain/es/Marking.java

@@ -33,7 +33,7 @@ public class Marking {
      * 标注备注
      */
     @JsonProperty("mark_note_text")
-    private String markOteText;
+    private String markNoteText;
 
     /**
      * 标注类型
@@ -87,4 +87,6 @@ public class Marking {
     private Integer publicTenantId;
   @JsonProperty("patent_no")
   private String patentNo;
+  @JsonProperty("patent_title")
+  private String patentTitle;
 }

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

@@ -0,0 +1,81 @@
+package cn.cslg.pas.factorys.EsBuilderFactory;
+
+import cn.cslg.pas.service.permissions.PermissionService;
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import co.elastic.clients.json.JsonData;
+import com.alibaba.fastjson.JSON;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Component
+public class PersonNameQueryBuilder implements IQueryBuilder {
+    @Autowired
+    private PermissionService permissionService;
+
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        List<String> ids = new ArrayList<>();
+        try {
+            String json = permissionService.getPersonIdByNamePCS(value, false);
+            ids = JSON.parseArray(json, String.class);
+        } catch (Exception e) {
+        }
+        if (ids == null || ids.size() == 0) {
+            ids = new ArrayList<>();
+            ids.add("0");
+        }
+        String strs = JsonData.of(ids).toString();
+        Query query = QueryBuilders.term(t -> t.field(field).value(strs));
+        return query;
+    }
+
+    @Override
+    public String getField() {
+        return null;
+    }
+
+    @Override
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    @Override
+    public String getValue() {
+        return null;
+    }
+
+    @Override
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String getOperator() {
+        return null;
+    }
+
+    @Override
+    public void setOperator(String operator) {
+
+    }
+
+    @Override
+    public String getPath() {
+        return null;
+    }
+
+    @Override
+    public void setPath(String path) {
+
+    }
+}

+ 9 - 1
src/main/java/cn/cslg/pas/service/business/AssoProjectPersonService.java

@@ -5,6 +5,8 @@ import cn.cslg.pas.common.dto.QueryProjectPersonDTO;
 import cn.cslg.pas.common.model.cronModel.Personnel;
 import cn.cslg.pas.common.model.cronModel.PersonnelVO;
 import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
 import cn.cslg.pas.common.vo.ProjectPersonVO;
 import cn.cslg.pas.domain.business.AssoProductPerson;
 import cn.cslg.pas.domain.business.AssoProjectPerson;
@@ -34,7 +36,10 @@ import java.util.stream.Collectors;
 public class AssoProjectPersonService extends ServiceImpl<AssoProjectPersonMapper, AssoProjectPerson> {
     @Autowired
     private PermissionService permissionService;
-
+    @Autowired
+    private CacheUtils cacheUtils;
+    @Autowired
+    private LoginUtils loginUtils;
     /**
      * 添加分享人
      *
@@ -42,6 +47,8 @@ public class AssoProjectPersonService extends ServiceImpl<AssoProjectPersonMappe
      * @return
      */
     public List<Integer> addProjectShare(AddProjectPersonDTO addProjectPersonDTO) {
+        PersonnelVO personnelVO =cacheUtils.getLoginUser(loginUtils.getId());
+
         List<Integer> reIds = new ArrayList<>();
         List<String> personIds = addProjectPersonDTO.getPersonIds();
         Integer projectId = addProjectPersonDTO.getProjectId();
@@ -59,6 +66,7 @@ public class AssoProjectPersonService extends ServiceImpl<AssoProjectPersonMappe
                 AssoProjectPerson assoProjectPerson = new AssoProjectPerson();
                 assoProjectPerson.setProjectId(projectId);
                 assoProjectPerson.setPersonId(personId);
+                assoProjectPerson.setCreateId(personnelVO.getId());
                 assoProjectPerson.insert();
                 reIds.add(assoProjectPerson.getId());
             }

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

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

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

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

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

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

+ 6 - 23
src/main/java/cn/cslg/pas/service/business/ScratchWordsService.java

@@ -6,6 +6,7 @@ import cn.cslg.pas.common.dto.business.UpdateScratchWordsDTO;
 import cn.cslg.pas.common.model.cronModel.Personnel;
 import cn.cslg.pas.common.model.cronModel.PersonnelVO;
 import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.model.request.StringRequest;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.LoginUtils;
 import cn.cslg.pas.common.vo.ScratchWordsVO;
@@ -84,19 +85,19 @@ public class ScratchWordsService extends ServiceImpl<ScratchWordsMapper, Scratch
     /**
      * 查询划词高亮
      *
-     * @param queryScratchWordsDTO
+     * @param stringRequest
      * @return
      */
-    public Records query(QueryScratchWordsDTO queryScratchWordsDTO) {
+    public Records query(StringRequest stringRequest) {
 
-        Records records = esScratchWordsService.queryScratchWord(queryScratchWordsDTO);
+        Records records = esScratchWordsService.queryScratchWord(stringRequest);
         List<ScratchWordsVO> scratchWordsVOS = (List<ScratchWordsVO>) records.getData();
         if(scratchWordsVOS!=null) {
             this.loadData(scratchWordsVOS);
         }
         records.setData(scratchWordsVOS);
-        records.setSize(queryScratchWordsDTO.getSize());
-        records.setCurrent(queryScratchWordsDTO.getCurrent());
+        records.setSize(stringRequest.getSize());
+        records.setCurrent(stringRequest.getCurrent());
         return records;
 
     }
@@ -121,10 +122,8 @@ public class ScratchWordsService extends ServiceImpl<ScratchWordsMapper, Scratch
 
     private void loadData(List<ScratchWordsVO> scratchWordsVOS) {
         List<String> ids = scratchWordsVOS.stream().map(ScratchWordsVO::getMarkUserId).collect(Collectors.toList());
-        List<String> patentNos = scratchWordsVOS.stream().map(ScratchWordsVO::getPatentNo).collect(Collectors.toList());
         //查询创建人名称
         List<Personnel> personnels = new ArrayList<>();
-        List<Patent> patents = new ArrayList<>();
         if (ids.size() != 0) {
             try {
                 String res = permissionService.getPersonnelByIdsFromPCS(ids);
@@ -134,27 +133,11 @@ public class ScratchWordsService extends ServiceImpl<ScratchWordsMapper, Scratch
 
             }
         }
-        if (patentNos.size() != 0) {
-            try {
-                patents = esPatentService.getPatentsByNo(patentNos,false,null,null);
-            } catch (Exception e) {
-
-            }
-        }
-
         for (ScratchWordsVO scratchWordsVO : scratchWordsVOS) {
             Personnel personnel = personnels.stream().filter(item -> item.getId().equals(scratchWordsVO.getMarkUserId())).findFirst().orElse(null);
             if (personnel != null) {
                 scratchWordsVO.setCreateName(personnel.getPersonnelName());
             }
-
-           Patent patent = patents.stream().filter(item -> item.getPatentNo().equals(scratchWordsVO.getPatentNo())).findFirst().orElse(null);
-            if (patent != null) {
-                if (patent.getTitle() != null && patent.getTitle().size() > 0) {
-                    scratchWordsVO.setTitle(patent.getTitle().get(0).getTextContent());
-                }
-            }
-
         }
     }
 

+ 180 - 114
src/main/java/cn/cslg/pas/service/business/es/EsScratchWordsService.java

@@ -1,10 +1,17 @@
 package cn.cslg.pas.service.business.es;
 
+import cn.cslg.pas.common.dto.PatentColumnDTO;
 import cn.cslg.pas.common.dto.QueryScratchWordsDTO;
+import cn.cslg.pas.common.model.cronModel.Personnel;
 import cn.cslg.pas.common.model.cronModel.PersonnelVO;
 import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.model.request.StringRequest;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
+import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
+import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
+import cn.cslg.pas.common.vo.EsConfigVO;
 import cn.cslg.pas.common.vo.PatentWithIdVO;
 import cn.cslg.pas.common.vo.ScratchWordsVO;
 import cn.cslg.pas.domain.business.ScratchWords;
@@ -12,15 +19,19 @@ import cn.cslg.pas.domain.es.Marking;
 import cn.cslg.pas.domain.es.Patent;
 import cn.cslg.pas.domain.es.PatentJoin;
 import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.business.CommonService;
 import cn.cslg.pas.service.permissions.PermissionService;
+import cn.cslg.pas.service.query.FormatQueryService;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
-import co.elastic.clients.elasticsearch._types.aggregations.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 co.elastic.clients.elasticsearch.core.*;
 import co.elastic.clients.elasticsearch.core.search.Hit;
 import co.elastic.clients.json.JsonData;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.ibatis.javassist.bytecode.stackmap.MapMaker;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -41,6 +52,8 @@ public class EsScratchWordsService {
     private CacheUtils cacheUtils;
     @Autowired
     private LoginUtils loginUtils;
+    @Autowired
+    private FormatQueryService formatQueryService;
 
     //添加划词标注
     public String addScratchWords(ScratchWords scratchWords) {
@@ -51,7 +64,7 @@ public class EsScratchWordsService {
 
         Marking marking = new Marking();
         BeanUtils.copyProperties(scratchWords, marking);
-
+        marking.setMarkTime(new Date());
         String id = null;
         try {
             id = this.saveToEs(marking);
@@ -77,86 +90,20 @@ public class EsScratchWordsService {
         return id;
     }
 
-    public Records queryScratchWord(QueryScratchWordsDTO queryScratchWordsDTO) {
-        Long current = queryScratchWordsDTO.getCurrent();
-        Long size = queryScratchWordsDTO.getSize();
+    public Records queryScratchWord(StringRequest stringRequest) {
+        Long current = stringRequest.getCurrent();
+        Long size = stringRequest.getSize();
         Records records = new Records();
         List<ScratchWordsVO> scratchWordsVOS = new ArrayList<>();
-        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
-        String createId = personnelVO.getId();
-        Integer tenantId = personnelVO.getTenantId();
-        String createName = queryScratchWordsDTO.getCreateName();
-        String patentNo = queryScratchWordsDTO.getPatentNo();
-        String content = queryScratchWordsDTO.getMarkSelectText();
-        Date marketTime = queryScratchWordsDTO.getMarkTime();
-        Integer projectId = queryScratchWordsDTO.getProjectId();
-        //公开
-        Query q1 = QueryBuilders.term(t -> t.field("is_public").value(true));
-        //不公开
-        Query q2 = QueryBuilders.term(t -> t.field("is_public").value(false));
-        //创建人id
-        Query q3 = QueryBuilders.term(t -> t.field("mark_user_id").value(createId));
-        //租户id
-        Query q4 = QueryBuilders.term(t -> t.field("public_tenant_id").value(tenantId));
-        //公开范围为全部
-        Query q5 = QueryBuilders.term(t -> t.field("public_scope").value(0));
-        //公开范围为所在地
-        Query q6 = QueryBuilders.term(t -> t.field("public_scope").value(1));
-        //数据库id
-        Query q7 = QueryBuilders.term(t -> t.field("public_project_id").value(projectId));
-
-
-        //公开并且全部范围
-        Query bool1 = QueryBuilders.bool(i -> i.must(q1, q5, q4));
-        // 公开并且所在地
-         List<Query> bool2Querys=new ArrayList<>();
-        bool2Querys.add(q1);
-        bool2Querys.add(q6);
-        if(projectId!=null){
-            bool2Querys.add(q7);
-        }
-        bool2Querys.add(q4);
-        Query  bool2 = QueryBuilders.bool(i -> i.must(bool2Querys));
-
-        //不公开并且全部范围
-        Query bool3 = QueryBuilders.bool(i -> i.must(q2, q5, q3));
-        //不公开并且所在地
-        List<Query> bool3Querys=new ArrayList<>();
-        bool3Querys.add(q2);
-        bool3Querys.add(q6);
-        if(projectId!=null){
-            bool3Querys.add(q7);
-        }
-        bool3Querys.add(q3);
-        Query bool4 = QueryBuilders.bool(i -> i.must(bool3Querys));
-        Query riBool = QueryBuilders.bool(i -> i.should(bool1, bool2, bool3, bool4));
-        List<Query> queries = new ArrayList<>();
-        queries.add(riBool);
-        if (patentNo != null) {
-            Query query = this.getPatentNoQuery(patentNo);
-            queries.add(query);
-        }
-        if (createName != null && createName.trim() != "") {
-            Query query = this.getCreateQuery(createName);
-            queries.add(query);
-        }
-        if (content != null && content.trim() != "") {
-            Query query = this.getContentQuery(content);
-            queries.add(query);
-        }
-        if (marketTime != null) {
-            Query query = this.getMarkTimeQuery(marketTime);
-            queries.add(query);
-        }
-        Query searchBool = QueryBuilders.bool(i -> i.must(queries));
+        Query searchQuerys = this.getSearchQuerys(stringRequest);
         SearchRequest.Builder builder = new SearchRequest.Builder();
         builder.index("patent_marking");
-        if (current == null || size == null || current <0 || size <0) {
-          current =Long.parseLong(1+"");
-          size=Long.parseLong(1000+"");
+        if (current == null || size == null || current < 0 || size < 0) {
+            current = Long.parseLong(1 + "");
+            size = Long.parseLong(1000 + "");
         }
         builder.from((current.intValue() - 1) * size.intValue()).size(size.intValue());
-        builder.query(searchBool);
+        builder.query(searchQuerys);
 
         long total = 0;
         try {
@@ -178,6 +125,72 @@ public class EsScratchWordsService {
         return records;
     }
 
+    public Query getSearchQuerys(StringRequest stringRequest) {
+//      PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        PersonnelVO personnelVO = new PersonnelVO();
+        personnelVO.setId("328");
+        personnelVO.setTenantId(1);
+        String createId = personnelVO.getId();
+        Integer tenantId = personnelVO.getTenantId();
+        String searchCondition = stringRequest.getSearchQuery();
+        //1. 解析检索条件
+        Query reQuery = null;
+        try {
+
+            Query q = this.getSearchQQuery(searchCondition);
+            Integer projectId = stringRequest.getProjectId();
+            //公开
+            Query q1 = QueryBuilders.term(t -> t.field("is_public").value(true));
+            //不公开
+            Query q2 = QueryBuilders.term(t -> t.field("is_public").value(false));
+            //创建人id
+            Query q3 = QueryBuilders.term(t -> t.field("mark_user_id").value(createId));
+            //租户id
+            Query q4 = QueryBuilders.term(t -> t.field("public_tenant_id").value(tenantId));
+            //公开范围为全部
+            Query q5 = QueryBuilders.term(t -> t.field("public_scope").value(0));
+            //公开范围为所在地
+            Query q6 = QueryBuilders.term(t -> t.field("public_scope").value(1));
+            //数据库id
+            Query q7 = null;
+            if (projectId != null) {
+                q7 = QueryBuilders.term(t -> t.field("public_project_id").value(projectId));
+            }
+
+            //公开并且全部范围
+            Query bool1 = QueryBuilders.bool(i -> i.must(q1, q5, q4));
+            // 公开并且所在地
+            List<Query> bool2Querys = new ArrayList<>();
+            bool2Querys.add(q1);
+            bool2Querys.add(q6);
+            if (projectId != null) {
+                bool2Querys.add(q7);
+            }
+            bool2Querys.add(q4);
+            Query bool2 = QueryBuilders.bool(i -> i.must(bool2Querys));
+
+            //不公开并且全部范围
+            Query bool3 = QueryBuilders.bool(i -> i.must(q2, q5, q3));
+            //不公开并且所在地
+            List<Query> bool3Querys = new ArrayList<>();
+            bool3Querys.add(q2);
+            bool3Querys.add(q6);
+            if (projectId != null) {
+                bool3Querys.add(q7);
+            }
+            bool3Querys.add(q3);
+            Query bool4 = QueryBuilders.bool(i -> i.must(bool3Querys));
+            Query riBool = QueryBuilders.bool(i -> i.should(bool1, bool2, bool3, bool4));
+            if (q == null) {
+                reQuery = riBool;
+            } else {
+                reQuery = QueryBuilders.bool(i -> i.must(riBool, q));
+            }
+        } catch (Exception e) {
+
+        }
+        return reQuery;
+    }
 
     //查询栏位历史
     public Marking getById(String wordsId) throws Exception {
@@ -203,43 +216,6 @@ public class EsScratchWordsService {
     }
 
 
-    //获得专利号检索式
-    public Query getPatentNoQuery(String patentNo) {
-        Query query = QueryBuilders.term(t -> t.field("patent_no").value(patentNo));
-        return query;
-    }
-
-    //获得创建时间检索式
-    public Query getMarkTimeQuery(Date markTime) {
-        SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");
-        String time = format2.format(markTime);
-        Query query = QueryBuilders.term(t -> t.field("mark_time").value(time));
-        return query;
-    }
-
-    //获得创建人检索式
-    public Query getCreateQuery(String createName) {
-        List<String> ids = new ArrayList<>();
-        try {
-            String json = permissionService.getPersonIdByNamePCS(createName, false);
-            ids = JSON.parseArray(json, String.class);
-        } catch (Exception e) {
-        }
-        if (ids == null || ids.size() == 0) {
-            ids = new ArrayList<>();
-            ids.add("0");
-        }
-        String strs = JsonData.of(ids).toString();
-        Query query = QueryBuilders.term(t -> t.field("mark_user_id").value(strs));
-        return query;
-    }
-
-    //获得内容检索式
-    public Query getContentQuery(String content) {
-        Query query = QueryBuilders.match(t -> t.field("mark_select_text").query(content));
-        return query;
-    }
-
     //保存
     public String saveToEs(Marking marking) throws Exception {
         IndexResponse indexResponse = client.index(i -> i
@@ -265,9 +241,99 @@ public class EsScratchWordsService {
         }
     }
 
-    public void GroupScratchWord(){
+    public Records groupScratchWord(StringRequest stringRequest) {
+        Records records = new Records();
+        Query searchQuerys = this.getSearchQuerys(stringRequest);
+        Long current = stringRequest.getCurrent();
+        Long size = stringRequest.getSize();
+        String groupField = stringRequest.getGroupField();
+        String esGroupFiled = this.getGroupField(groupField);
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+
+        builder.index("patent_marking");
+        builder.query(searchQuerys);
+        Aggregation hits = AggregationBuilders.bucketSort(i -> i.size(size.intValue()).from((current.intValue() - 1) * size.intValue()));
+        Aggregation aggregation = new Aggregation.Builder().terms(new TermsAggregation.Builder()
+                .field(esGroupFiled).build()).aggregations(new HashMap() {{
+            put("pageAgg", hits);
+        }}).build();
+
+        builder.aggregations("agg", aggregation);
+        builder.size(0);
+
+        //查询总数聚合
+        Aggregation totalAggregation = AggregationBuilders.cardinality(i -> i.field(esGroupFiled));
+        builder.aggregations("total", totalAggregation);
+        try {
+            SearchResponse<Marking> response = client.search(builder.build(), Marking.class);
+            Aggregate agg = response.aggregations().get("agg");
+            List<StringTermsBucket> list = agg.sterms().buckets().array();
+            List<Map<String, Object>> maps = new ArrayList<>();
+            for (StringTermsBucket bucket : list) {
+                String key = bucket.key().stringValue();
+                Long count = bucket.docCount();
+                Map map = new HashMap();
+                map.put("key", key);
+                map.put("count", count);
+                maps.add(map);
+            }
+          maps =this.loadNameMap(maps,groupField);
+            records.setData(maps);
+
+            Aggregate totalAgg = response.aggregations().get("total");
+            long total = totalAgg.cardinality().value();
+            records.setTotal(total);
+            records.setCurrent(current);
+            records.setSize(size);
+        } catch (Exception e) {
+        }
+        return records;
+    }
+
+    public String getGroupField(String field) {
+        String json = CommonService.readJsonFile("marking" + ".json");
+        List<EsConfigVO> esConfigVOS = JSON.parseArray(json, EsConfigVO.class);
+        EsConfigVO esConfigVO = esConfigVOS.stream().filter(item -> item.getField().equals(field)).findFirst().orElse(null);
+
+        return esConfigVO.getEsField();
+    }
 
+    public Query getSearchQQuery(String searchCondition) throws Exception {
+        Query q = null;
+        if (searchCondition != null && searchCondition != "") {
+            treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
+            //格式化检索式
+            //3. 从es中检索数据
+            q = formatQueryService.EsQueryToQuery((operateNode) tree, "marking");
 
+        }
+        return q;
+    }
+
+    public List<Map<String, Object>> loadNameMap(List<Map<String, Object>> maps, String groupField) {
+        if (maps.size() == 0) {
+            return maps;
+        }
+        if (groupField.equals("createName")) {
+            try {
+                List<String> ids = new ArrayList<>();
+                maps.forEach(item -> ids.add(item.get("key").toString()));
+                String res = permissionService.getPersonnelByIdsFromPCS(ids);
+                JSONObject jsonObject = JSONObject.parseObject(res);
+                List<Personnel> personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
+                maps.forEach(item ->
+                        {
+                            Personnel personnel = personnels.stream().filter(i -> i.getId().equals(item.get("key"))).findFirst().orElse(null);
+                            if (personnel != null) {
+                                item.put("key", personnel.getPersonnelName());
+                            }
+                        }
+
+                );
+            } catch (Exception e) {
+            }
+        }
+        return maps;
 
     }
 }

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

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

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

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

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

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

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

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