Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/main/java/cn/cslg/pas/controller/PatentController.java
xiexiang 1 năm trước cách đây
mục cha
commit
057b4297ef
27 tập tin đã thay đổi với 526 bổ sung72 xóa
  1. 0 2
      src/main/java/cn/cslg/pas/Application.java
  2. 16 0
      src/main/java/cn/cslg/pas/common/dto/FeatureDTO.java
  3. 5 0
      src/main/java/cn/cslg/pas/common/dto/PatentColumnDTO.java
  4. 11 0
      src/main/java/cn/cslg/pas/common/dto/business/SaveFeatureBatchDTO.java
  5. 3 0
      src/main/java/cn/cslg/pas/common/vo/business/GetAllPersonVO.java
  6. 2 0
      src/main/java/cn/cslg/pas/common/vo/business/MergePersonIdVO.java
  7. 4 0
      src/main/java/cn/cslg/pas/common/vo/business/MergePersonQueryVO.java
  8. 3 1
      src/main/java/cn/cslg/pas/common/vo/business/MergePersonVO.java
  9. 7 5
      src/main/java/cn/cslg/pas/controller/PatentController.java
  10. 9 0
      src/main/java/cn/cslg/pas/controller/outApi/PatentStarController.java
  11. 0 1
      src/main/java/cn/cslg/pas/service/business/EventService.java
  12. 196 27
      src/main/java/cn/cslg/pas/service/business/MergePersonService.java
  13. 0 1
      src/main/java/cn/cslg/pas/service/business/PDFExportFirstPageService.java
  14. 1 1
      src/main/java/cn/cslg/pas/service/business/PatentProjectService.java
  15. 1 1
      src/main/java/cn/cslg/pas/service/business/ReportProjectService.java
  16. 1 1
      src/main/java/cn/cslg/pas/service/business/es/EsCountService.java
  17. 1 1
      src/main/java/cn/cslg/pas/service/business/es/EsCustomFieldService.java
  18. 21 0
      src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java
  19. 121 0
      src/main/java/cn/cslg/pas/service/business/es/EsService.java
  20. 30 4
      src/main/java/cn/cslg/pas/service/common/PatentStarApiService.java
  21. 1 1
      src/main/java/cn/cslg/pas/service/permissions/PermissionService.java
  22. 16 4
      src/main/resources/jsons/esCountAnalysis.json
  23. 1 0
      src/main/resources/jsons/event.json
  24. 18 4
      src/main/resources/jsons/patent.json
  25. 1 2
      src/main/resources/jsons/patentProject.json
  26. 23 12
      src/main/resources/jsons/reportProject.json
  27. 34 4
      src/test/java/cn/cslg/pas/service/EventServiceTests.java

+ 0 - 2
src/main/java/cn/cslg/pas/Application.java

@@ -1,9 +1,7 @@
 package cn.cslg.pas;
 
-import cn.hutool.cron.CronUtil;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.system.ApplicationHome;
 import org.springframework.cache.annotation.EnableCaching;
 
 import java.text.SimpleDateFormat;

+ 16 - 0
src/main/java/cn/cslg/pas/common/dto/FeatureDTO.java

@@ -0,0 +1,16 @@
+package cn.cslg.pas.common.dto;
+
+import lombok.Data;
+
+@Data
+public class FeatureDTO {
+    /**
+     * 对应特征
+     */
+    private Integer id;
+    private String content;
+    private String explainText;
+    private Integer rightSort;
+    private Integer rightType;
+    private Boolean ifChange;
+}

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

@@ -367,4 +367,9 @@ public class PatentColumnDTO {
     PatentJoin patentJoin;
 
    private String pictureGuid;
+
+    /**
+     * 法律事件
+     */
+    private List<LegalEvent> legalEvents;
 }

+ 11 - 0
src/main/java/cn/cslg/pas/common/dto/business/SaveFeatureBatchDTO.java

@@ -0,0 +1,11 @@
+package cn.cslg.pas.common.dto.business;
+
+import cn.cslg.pas.common.dto.FeatureDTO;
+
+import java.util.List;
+
+public class SaveFeatureBatchDTO {
+    private Integer projectId;
+    private String patentNo;
+    private List<FeatureDTO> featureDTOList;
+}

+ 3 - 0
src/main/java/cn/cslg/pas/common/vo/business/GetAllPersonVO.java

@@ -16,4 +16,7 @@ public class GetAllPersonVO {
     private Integer pageNum;
 
     private Integer pageSize;
+
+    //类型  0 申请人  1 权利人  2 发明人
+    private Integer type;
 }

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

@@ -7,4 +7,6 @@ public class MergePersonIdVO {
 
     private Integer id;
 
+    private Integer type;
+
 }

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

@@ -5,6 +5,10 @@ import lombok.Data;
 @Data
 public class MergePersonQueryVO {
 
+    private Integer type;
+
+    private Integer projectId;
+
     private String name;
 
     private String country;

+ 3 - 1
src/main/java/cn/cslg/pas/common/vo/business/MergePersonVO.java

@@ -2,6 +2,8 @@ package cn.cslg.pas.common.vo.business;
 
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class MergePersonVO {
     /**
@@ -26,7 +28,7 @@ public class MergePersonVO {
     /**
      * 被合并的名称
      */
-    private String mergedName;
+    private List<String> mergedName;
     /**
      * 简称
      */

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

@@ -61,13 +61,14 @@ public class PatentController {
 
     @Autowired
     private EsPatentService patentService;
-    @Autowired
-    private EsService esService;
 
     @Autowired
     private MergePersonService mergePersonService;
 
     @Autowired
+    private EsService esService;
+
+    @Autowired
     private PatentStarApiService patentStarApiService;
 
     @Autowired
@@ -134,6 +135,7 @@ public class PatentController {
             return Response.success(null);
         }
         return Response.success(starPatentVO);
+
     }
 
     @Operation(summary = "根据专利号查询内部权利要求")
@@ -146,14 +148,14 @@ public class PatentController {
     //------------------------合并-----------------------------
     @Operation(summary = "专利列表上新增发明人/权利人/申请人合并")
     @PostMapping("/mergePerson")
-    public Response mergePerson(@RequestBody MergePersonVO personVO) {
+    public Response mergePerson(@RequestBody MergePersonVO personVO) throws Exception {
         Integer personId = mergePersonService.mergePerson(personVO);
         return Response.success(personId);
     }
 
     @Operation(summary = "专利列表上编辑发明人/权利人/申请人合并")
     @PostMapping("/updateMergePerson")
-    public Response updateMergePerson(@RequestBody MergePersonVO personVO) {
+    public Response updateMergePerson(@RequestBody MergePersonVO personVO) throws Exception{
         Integer personId = mergePersonService.updateMergePerson(personVO);
         return Response.success(personId);
     }
@@ -174,7 +176,7 @@ public class PatentController {
 
     @Operation(summary = "发明人/权利人/申请人合并记录删除")
     @PostMapping("/delMergePerson")
-    public Response delMergePerson(@RequestBody MergePersonIdVO vo) {
+    public Response delMergePerson(@RequestBody MergePersonIdVO vo) throws Exception {
         Integer id = mergePersonService.delMergePerson(vo);
         return Response.success(id);
     }

+ 9 - 0
src/main/java/cn/cslg/pas/controller/outApi/PatentStarController.java

@@ -1,10 +1,12 @@
 package cn.cslg.pas.controller.outApi;
 
 import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.PatentColumnDTO;
 import cn.cslg.pas.common.dto.PatentStarListDTO;
 import cn.cslg.pas.common.dto.business.SelectClaimDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.vo.business.PatentNoVO;
 import cn.cslg.pas.service.common.PatentStarApiService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -98,4 +100,11 @@ public class PatentStarController {
         SelectClaimDTO dto = patentStarApiService.selectClaim(patentNo);
         return Response.success(dto);
     }
+
+    @Operation(summary = "查询外部专利详情")
+    @PostMapping("/queryExternalDetail")
+    public Response queryExternalDetail(@RequestBody PatentNoVO vo) throws Exception {
+        PatentColumnDTO dto = patentStarApiService.queryExternalDetail(vo);
+        return Response.success(dto);
+    }
 }

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

@@ -332,7 +332,6 @@ public class EventService extends ServiceImpl<EventMapper, Event> implements Bus
             assoEventFiles = assoEventFileService.list(queryWrapper);
             guids = assoEventFiles.stream().map(AssoEventFile::getFileGuid).collect(Collectors.toList());
 
-
             //根据事件id分组查询事件关联专题库或报告数量
             eventCountVOS = assoProjectEventMapper.getEventProjectCount(ids);
         }

+ 196 - 27
src/main/java/cn/cslg/pas/service/business/MergePersonService.java

@@ -19,10 +19,12 @@ import cn.cslg.pas.domain.BaseEntity;
 import cn.cslg.pas.domain.business.FollowUp;
 import cn.cslg.pas.domain.business.MergePerson;
 import cn.cslg.pas.domain.es.Patent;
+import cn.cslg.pas.domain.es.PatentMergePerson;
 import cn.cslg.pas.domain.es.PersonAddress;
 import cn.cslg.pas.exception.UnLoginException;
 import cn.cslg.pas.mapper.MergePersonMapper;
 import cn.cslg.pas.service.business.es.EsPatentService;
+import cn.cslg.pas.service.business.es.EsService;
 import cn.cslg.pas.service.query.FormatQueryService;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.PageUtil;
@@ -36,11 +38,13 @@ 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;
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.PageHelper;
+import com.google.gson.JsonArray;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -50,10 +54,8 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
+import java.io.IOException;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -75,9 +77,13 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
     private FormatQueryService formatQueryService;
     @Autowired
     private EsPatentService esPatentService;
+    @Autowired
+    private EsService esService;
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
-    public Integer mergePerson(MergePersonVO vo) {
+    public Integer mergePerson(MergePersonVO vo) throws IOException {
+        Integer type = vo.getType();
+        List<String> mergedNames = vo.getMergedName();
         //获取登陆人信息 用于设置创建人
         PersonnelVO personnelVO = new PersonnelVO();
         try {
@@ -87,30 +93,126 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         }
         MergePerson person = new MergePerson();
         BeanUtils.copyProperties(vo, person);
+        person.setMergedName(JSONArray.toJSONString(mergedNames));
         person.setCreateId(personnelVO.getId());
         person.setCreateTime(new Date());
         person.insert();
-        //todo  关联相关专利
 
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+
+        List<Query> queries = new ArrayList<>();
+        if (type == 0) {
+            for (String mergedName : mergedNames) {
+                Query q = QueryBuilders.term(i -> i.field("applicant.name").value(mergedName));
+                Query query = QueryBuilders.nested(i -> i.path("applicant").query(q));
+                queries.add(query);
+            }
+        } else {
+            for (String mergedName : mergedNames) {
+                Query q = QueryBuilders.term(i -> i.field("inventor.name").value(mergedName));
+                Query query = QueryBuilders.nested(i -> i.path("inventor").query(q));
+                queries.add(query);
+            }
+        }
+        Query query = QueryBuilders.bool(i -> i.should(queries));
+        builder.query(query);
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        List<Hit<Patent>> hits = response.hits().hits();
+        Map<String, Patent> map = new HashMap<>();
+        for (Hit<Patent> hit : hits) {
+            String id = hit.id();
+            map.put(id, hit.source());
+        }
+
+        if (!CollectionUtils.isEmpty(map)) {
+            List<PatentMergePerson> mergePersonList = new ArrayList<>();
+            PatentMergePerson mergePerson = new PatentMergePerson();
+            mergePerson.setName(vo.getName());
+            mergePerson.setProjectId(vo.getProjectId().toString());
+            mergePerson.setType("1");
+            mergePerson.setOrder(1);
+            mergePersonList.add(mergePerson);
+
+            for (String id : map.keySet()) {
+                Patent patent = map.get(id);
+                List<PatentMergePerson> mergeApplicants = patent.getMergeApplicant();
+                List<String> Names = mergeApplicants.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
+                mergePersonList.addAll(mergeApplicants);
+                patent.setMergeApplicant(mergePersonList);
+                patent.setMergeRightHolder(mergePersonList);
+                esService.updateMergePerson(patent, id);
+            }
+        }
         return person.getId();
     }
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
-    public Integer updateMergePerson(MergePersonVO vo) {
+    public Integer updateMergePerson(MergePersonVO vo) throws IOException {
         //获取登陆人信息 用于设置创建人
         PersonnelVO personnelVO = new PersonnelVO();
+        Integer type = vo.getType();
         try {
             personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
         } catch (Exception e) {
             throw new UnLoginException("未登录");
         }
         MergePerson person = this.getById(vo.getId());
+        String mergedName = person.getMergedName();
+        String name = person.getName();
         if (ObjectUtil.isNotEmpty(person)) {
             BeanUtils.copyProperties(vo, person);
+            person.setMergedName(JSONArray.toJSONString(vo.getMergedName()));
             person.setCreateId(personnelVO.getId());
             person.setCreateTime(new Date());
             person.updateById();
-            //todo  关联相关专利
+
+            List<String> mergedNames = JSONArray.parseArray(mergedName, String.class);
+            SearchRequest.Builder builder = new SearchRequest.Builder();
+            //设置查询索引
+            builder.index("patent");
+
+            List<Query> queries = new ArrayList<>();
+            if (type == 0) {
+                for (String merged : mergedNames) {
+                    Query q = QueryBuilders.term(i -> i.field("applicant.name").value(merged));
+                    Query query = QueryBuilders.nested(i -> i.path("applicant").query(q));
+                    queries.add(query);
+                }
+            } else {
+                for (String merged : mergedNames) {
+                    Query q = QueryBuilders.term(i -> i.field("inventor.name").value(merged));
+                    Query query = QueryBuilders.nested(i -> i.path("inventor").query(q));
+                    queries.add(query);
+                }
+            }
+            Query query = QueryBuilders.bool(i -> i.should(queries));
+            builder.query(query);
+            SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+            List<Hit<Patent>> hits = response.hits().hits();
+            Map<String, Patent> map = new HashMap<>();
+            for (Hit<Patent> hit : hits) {
+                String id = hit.id();
+                map.put(id, hit.source());
+            }
+
+            if (!CollectionUtils.isEmpty(map)) {
+                for (String id : map.keySet()) {
+                    Patent patent = map.get(id);
+                    List<PatentMergePerson> mergeApplicants = patent.getMergeApplicant();
+                    if (!name.equals(vo.getName())) {
+                        for (PatentMergePerson mergeApplicant : mergeApplicants) {
+                            if (mergeApplicant.getName().equals(name)) {
+                                mergeApplicant.setName(vo.getName());
+                            }
+                        }
+                    }
+                    patent.setMergeApplicant(mergeApplicants);
+                    patent.setMergeRightHolder(mergeApplicants);
+                    esService.updateMergePerson(patent, id);
+                }
+            }
         } else {
             person = new MergePerson();
         }
@@ -121,6 +223,8 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         List<MergePersonQueryDTO> list = new ArrayList<>();
         IPage<MergePerson> page = new Page<>(vo.getPageNum(), vo.getPageSize());
         LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
+                .eq(MergePerson::getProjectId, vo.getProjectId())
+                .eq(MergePerson::getType, vo.getType())
                 .eq(StringUtils.isNotEmpty(vo.getCountry()), MergePerson::getCountry, vo.getCountry())
                 .like(StringUtils.isNotEmpty(vo.getName()), MergePerson::getName, vo.getName());
         IPage<MergePerson> record = mergePersonMapper.selectPage(page, wrapper);
@@ -143,13 +247,17 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
     }
 
     public Records getMergePerson(GetAllPersonVO vo) throws Exception {
-        String searchCondition = "";
         Integer projectId = vo.getProjectId();
         Integer taskId = vo.getTaskId();
-        String name = vo.getName();
-        String field = vo.getField();
         Integer pageNum = vo.getPageNum();
         Integer pageSize = vo.getPageSize();
+        Integer type = vo.getType();
+        String searchCondition = "";
+        if (type == 0) {
+            searchCondition = searchCondition + "MAT = " + vo.getName();
+        } else {
+            searchCondition = searchCondition + "MAT = " + vo.getName();
+        }
         if (taskId != null) {
             searchCondition = "taskId = " + taskId;
         } else {
@@ -172,19 +280,22 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         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<GetEsAllPersonDTO> personDTOS = new ArrayList<>();
         for (Hit<Patent> hit : hits) {
             Patent esMess = hit.source();
-            PersonAddress applicantAddr = esMess.getApplicantAddr();
+            PersonAddress applicantAddr = null;
             GetEsAllPersonDTO personDTO = new GetEsAllPersonDTO();
-            personDTO.setAddress(applicantAddr.getAddress());
-            personDTO.setCountry(applicantAddr.getCountry());
+            if (ObjectUtil.isNotEmpty(esMess.getApplicantAddr())) {
+                applicantAddr = esMess.getApplicantAddr();
+                personDTO.setAddress(applicantAddr.getAddress());
+                personDTO.setCountry(applicantAddr.getCountry());
+            }
             personDTO.setApplicant(esPatentService.loadName(esMess.getApplicant()));
             personDTO.setRightHolder(esPatentService.loadName(esMess.getRightHolder()));
             personDTO.setInventor(esPatentService.loadName(esMess.getInventor()));
             personDTOS.add(personDTO);
         }
-        List<GetAllPersonDTO> allPersonDTOS = new ArrayList<>();
         List<String> applicants = new ArrayList<>();
         List<String> inventors = new ArrayList<>();
         for (GetEsAllPersonDTO personDTO : personDTOS) {
@@ -193,33 +304,91 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         }
         List<String> applicantList = applicants.stream().distinct().collect(Collectors.toList());
         List<String> inventorList = inventors.stream().distinct().collect(Collectors.toList());
+
+        IPage<MergePerson> page = new Page<>(vo.getPageNum(), vo.getPageSize());
+        LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
+                .eq(StringUtils.isNotEmpty(vo.getProjectId().toString()), MergePerson::getProjectId, vo.getProjectId());
+        IPage<MergePerson> record = mergePersonMapper.selectPage(page, wrapper);
+        List<String> applicantMergeList = new ArrayList<>();
+        List<String> inventorMergeList = new ArrayList<>();
+        for (MergePerson person : record.getRecords()) {
+            if (person.getType() == 0) {
+                applicantMergeList = JSONArray.parseArray(person.getMergedName(), String.class);
+            } else if (person.getType() == 2) {
+                inventorMergeList = JSONArray.parseArray(person.getMergedName(), String.class);
+            }
+        }
+        applicantList.removeAll(applicantMergeList);
+        inventorList.removeAll(inventorMergeList);
+        List<GetAllPersonDTO> applicantDTOS = new ArrayList<>();
+        List<GetAllPersonDTO> inventorDTOS = new ArrayList<>();
         for (String applicant : applicantList) {
             GetAllPersonDTO dto = new GetAllPersonDTO();
             dto.setName(applicant);
             dto.setType(0);
-            allPersonDTOS.add(dto);
+            applicantDTOS.add(dto);
         }
         for (String inventor : inventorList) {
             GetAllPersonDTO dto = new GetAllPersonDTO();
             dto.setName(inventor);
             dto.setType(2);
-            allPersonDTOS.add(dto);
+            inventorDTOS.add(dto);
         }
-//        List<GetAllPersonDTO> list = allPersonDTOS.stream().distinct().collect(Collectors.toList());
+
         Records records = new Records();
-//        records.setCurrent(queryRequest.getCurrent());
-//        records.setSize(queryRequest.getSize());
-//        records.setData(patentDTO.getPatents());
-//        records.setTotal(patentDTO.getTotal());
+        records.setCurrent(vo.getPageNum().longValue());
+        records.setSize(vo.getPageSize().longValue());
+        if (vo.getType() == 0) {
+            int size = applicantDTOS.size();
+            records.setData(applicantDTOS.stream().limit(vo.getPageSize()).collect(Collectors.toList()));
+            if (total >= size) {
+                records.setTotal((long) size);
+            } else {
+                records.setTotal(total);
+            }
+        } else if (vo.getType() == 2) {
+            int size = inventorDTOS.size();
+            records.setData(inventorDTOS.stream().limit(vo.getPageSize()).collect(Collectors.toList()));
+            if (total >= size) {
+                records.setTotal((long) size);
+            } else {
+                records.setTotal(total);
+            }
+        }
         return records;
     }
 
-    public Integer delMergePerson(MergePersonIdVO vo) {
-        LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
-                .eq(BaseEntity::getId, vo.getId());
-        this.remove(wrapper);
+    public Integer delMergePerson(MergePersonIdVO vo) throws IOException {
+        Integer type = vo.getType();
+        MergePerson mergePerson = mergePersonMapper.selectById(vo.getId());
+        if (ObjectUtil.isNotEmpty(mergePerson)) {
+            LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
+                    .eq(BaseEntity::getId, vo.getId());
+            this.remove(wrapper);
 
-        //todo 删掉相关合并的名称
+            //todo 删掉相关合并的名称
+            SearchRequest.Builder builder = new SearchRequest.Builder();
+            //设置查询索引
+            builder.index("patent");
+
+            Query q = QueryBuilders.term(i -> i.field("merge_applicant.name").value(mergePerson.getName()));
+            Query query = QueryBuilders.nested(i -> i.path("merge_applicant").query(q));
+            builder.query(query);
+            SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+            List<Hit<Patent>> hits = response.hits().hits();
+            Map<String, Patent> map = new HashMap<>();
+            for (Hit<Patent> hit : hits) {
+                String id = hit.id();
+                map.put(id, hit.source());
+            }
+
+            if (!CollectionUtils.isEmpty(map)) {
+                for (String id : map.keySet()) {
+                    Patent patent = map.get(id);
+                    esService.delMergePerson(patent, id, type,mergePerson.getName());
+                }
+            }
+        }
         return vo.getId();
     }
 }

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

@@ -7,7 +7,6 @@ import cn.cslg.pas.common.utils.FormatUtil;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.service.business.es.EsService;
 import cn.cslg.pas.service.common.FileManagerService;
-import com.spire.pdf.PdfPageSize;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.pdfbox.multipdf.PDFMergerUtility;
 import org.apache.pdfbox.io.MemoryUsageSetting;

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

@@ -737,7 +737,7 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
             if (patentProjectVO.getHeadId() != null) {
                 Personnel headPersonnel = personnels.stream().filter(item -> item.getId().equals(patentProjectVO.getHeadId())).findFirst().orElse(null);
                 if (headPersonnel != null) {
-                    patentProjectVO.setHeadName(personnel.getPersonnelName());
+                    patentProjectVO.setHeadName(headPersonnel.getPersonnelName());
                 }
             }
 

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

@@ -725,7 +725,7 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
             if (reportProjectVO.getHeadId() != null) {
                 Personnel headPersonnel = personnels.stream().filter(item -> item.getId().equals(reportProjectVO.getHeadId())).findFirst().orElse(null);
                 if (headPersonnel != null) {
-                    reportProjectVO.setHeadName(personnel.getPersonnelName());
+                    reportProjectVO.setHeadName(headPersonnel.getPersonnelName());
                 }
             }
 

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

@@ -36,7 +36,7 @@ import java.util.stream.Collectors;
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class EsCountService {
     private final List<String> childList = Arrays.asList("field");
-    private final List<String> nestedList = Arrays.asList("PA", "IN", "PE", "SAT", "MAT", "SRH", "MRH");
+    private final List<String> nestedList = Arrays.asList("PA", "IN", "PE", "SAT", "MAT", "SRH", "MRH","MIN");
     private final List<String> dateList = Arrays.asList("PD", "AD", "GD");
     private final List<String> numberList = Arrays.asList("QPN", "QDPN", "SFN", "IFN", "PFN");
 

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

@@ -248,7 +248,7 @@ public class EsCustomFieldService {
         if (!id.trim().equals("")) {
             Patent patent = patentWithIdVO.getPatent();
             patent.setESCustomField(esCustomField);
-            esService.updatePatent(patent, patentWithIdVO.getId());
+            esService.updateByQuery(patent, patentWithIdVO.getId());
             ESCustomFieldHistory esCustomFieldHistory = new ESCustomFieldHistory();
             esCustomFieldHistory.setField(fieldId);
             esCustomFieldHistory.setFieldType(fieldType);

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

@@ -91,9 +91,30 @@ public class EsPatentService {
             }
         }
         dto.setPictureGuid(FormatUtil.getPictureFormat(dto.getAppNo()));
+        List<LegalEvent> legalEvents = this.getLegalEvents(dto.getPublicNo(), dto.getAppNo(), dto.getGrantNo());
+        dto.setLegalEvents(legalEvents);
         return dto;
     }
 
+    public List<LegalEvent> getLegalEvents(String publicNo, String appNo, String grantNo) throws IOException {
+        List<LegalEvent> events = new ArrayList<>();
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("legal_event");
+        Query q1 = QueryBuilders.term(i -> i.field("app_no").value(appNo));
+        Query q2 = QueryBuilders.term(i -> i.field("public_no").value(publicNo));
+//        Query q3 = QueryBuilders.term(i -> i.field("grant_no").value(grantNo));
+        Query query = QueryBuilders.bool(i -> i.must(q1, q2));
+        builder.query(query);
+        SearchResponse<LegalEvent> response = client.search(builder.build(), LegalEvent.class);
+        List<Hit<LegalEvent>> hits = response.hits().hits();
+        for (Hit<LegalEvent> hit : hits) {
+            LegalEvent event = hit.source();
+            events.add(event);
+        }
+        return events;
+    }
+
     //通用返回摘要、标题、权利要求具体内容
     public ContentVO loadContent(List<Text> list) {
         ContentVO contentVO = new ContentVO();

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

@@ -23,6 +23,8 @@ import cn.cslg.pas.service.business.CommonService;
 import cn.cslg.pas.service.common.PatentStarApiService;
 import cn.cslg.pas.service.query.FormatQueryService;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
+import co.elastic.clients.elasticsearch._types.InlineScript;
+import co.elastic.clients.elasticsearch._types.Script;
 import co.elastic.clients.elasticsearch._types.SortOptions;
 import co.elastic.clients.elasticsearch._types.SortOrder;
 import co.elastic.clients.elasticsearch._types.aggregations.*;
@@ -35,6 +37,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
+import org.elasticsearch.client.RequestOptions;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
@@ -42,6 +45,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import java.io.IOException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 
@@ -407,6 +411,7 @@ public class EsService {
         return list;
     }
 
+    //更新patent
     public Integer updatePatent(Patent patent, String id) {
         UpdateRequest<Patent, Patent> req;
         req = UpdateRequest.of(
@@ -421,6 +426,73 @@ public class EsService {
         }
     }
 
+    /*POST /patent/_update_by_query
+    {
+        "script": {
+        "source": "ctx._source.project_id = 1",
+                "lang": "painless"
+    },
+        "query": {
+        "term": {
+            "_id": "yYVNzowBmzIo81_44OnV"
+        }
+    }
+    }*/
+    //更新子文档
+    public Integer updateByQuery(Patent patent, String id) throws IOException {
+        ESCustomField customField = patent.getESCustomField();
+        String valueField = "[";
+        List<String> fieldValueList = customField.getFieldValue();
+        if (!CollectionUtils.isEmpty(fieldValueList)) {
+            int lastSum = fieldValueList.size() - 1;
+            for (int i = 0; i < fieldValueList.size(); i++) {
+                String s = fieldValueList.get(i);
+                if (i == lastSum) {
+                    valueField = valueField + "\"" +s + "\""  ;
+                } else {
+                    valueField = valueField + "\"" +s + "\"" + "," ;
+                }
+            }
+        }
+        valueField = valueField + "]";
+
+        String valueStats = "[";
+        List<String> statsValueList = customField.getStatsValue();
+        if (!CollectionUtils.isEmpty(statsValueList)) {
+            int lastSum = statsValueList.size() - 1;
+            for (int i = 0; i < statsValueList.size(); i++) {
+                String s = statsValueList.get(i);
+                if (i == lastSum) {
+                    valueStats = valueStats + "\"" +s + "\""  ;
+                } else {
+                    valueStats = valueStats + "\"" +s + "\"" + "," ;
+                }
+            }
+        }
+        valueStats = valueStats + "]";
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        String s = format.format(customField.getCreateTime());
+        String dateStr = "\'" + s + "\'";
+        String projectId = "ctx._source.custom_field.project_id = " + customField.getProjectId() + ";";
+        String field = "ctx._source.custom_field.field=" + customField.getField() + ";";
+        String fieldType = "ctx._source.custom_field.field_type = " + customField.getFieldType() + ";";
+        String personId = "ctx._source.custom_field.person_id = " + customField.getPersonId() + ";";
+        String createTime = "ctx._source.custom_field.create_time = " + dateStr + ";";
+        String fieldValue = "ctx._source.custom_field.field_value = " + valueField + ";";
+        String statsValue = "ctx._source.custom_field.stats_value = " + valueStats;
+
+        String source = projectId + field + fieldType + personId + createTime + fieldValue + statsValue;
+        InlineScript inlineScript = InlineScript.of(i -> i.lang("painless").source(source));
+        Script script = Script.of(i -> i.inline(inlineScript));
+        Query query = QueryBuilders.term(i -> i.field("_id").value(id));
+        UpdateByQueryRequest request = UpdateByQueryRequest.of(i -> i.index("patent").script(script).query(query));
+        try {
+            client.updateByQuery(request);
+            return 1;
+        } catch (IOException e) {
+            return -1;
+        }
+    }
 
     /**
      * @param key
@@ -980,6 +1052,55 @@ public class EsService {
         }
         return dto;
     }
+
+    /**
+     * 更新合并申请人/权利人/发明人
+     * @param patent
+     * @param id
+     * @return
+     */
+    public Integer updateMergePerson(Patent patent, String id) {
+        UpdateRequest<Patent, Patent> req;
+        req = UpdateRequest.of(
+                b -> b.index("patent")
+                        .id(id)
+                        .doc(patent)
+                        .docAsUpsert(true)
+        );
+        try {
+            client.update(req, Patent.class);
+            return 1;
+        } catch (IOException e) {
+            return -1;
+        }
+    }
+
+    /**
+     * 删除申请人/权利人/发明人合并名称
+     *
+     * @param patent
+     * @param id
+     * @return
+     */
+    public Integer delMergePerson(Patent patent, String id,Integer type, String name) {
+        String source = "";
+        if (type == 0) {
+            source = "if (ctx._source.merge_applicant != null) { ctx._source.merge_applicant.removeIf(item -> item.name == params.name); } if (ctx._source.merge_right_holder  != null) { ctx._source.merge_right_holder .removeIf(item -> item.name == params.name); }";
+        } else {
+            source = "if (ctx._source.merge_inventor != null) { ctx._source.merge_inventor.removeIf(item -> item.name == params.name); }";
+        }
+        String finalSource = source;
+        InlineScript inlineScript = InlineScript.of(i -> i.lang("painless").params("name",JsonData.of(name)).source(finalSource));
+        Script script = Script.of(i -> i.inline(inlineScript));
+        Query query = QueryBuilders.term(i -> i.field("_id").value(id));
+        UpdateByQueryRequest request = UpdateByQueryRequest.of(i -> i.index("patent").script(script).query(query));
+        try {
+            client.updateByQuery(request);
+            return 1;
+        } catch (IOException e) {
+            return -1;
+        }
+    }
 }
 
 

+ 30 - 4
src/main/java/cn/cslg/pas/service/common/PatentStarApiService.java

@@ -12,6 +12,7 @@ import cn.cslg.pas.common.model.importTaskModel.PatentApplicant;
 import cn.cslg.pas.common.utils.*;
 import cn.cslg.pas.common.vo.ContentVO;
 import cn.cslg.pas.common.vo.StarPatentVO;
+import cn.cslg.pas.common.vo.business.PatentNoVO;
 import cn.cslg.pas.domain.WebLoginConfig;
 import cn.cslg.pas.domain.business.RetrieveRecord;
 import cn.cslg.pas.domain.es.PatentClassify;
@@ -848,26 +849,23 @@ public class PatentStarApiService {
                 patentColumnDTO.setInventor(names);
             }
 
-
-
             //装载权利人
             if (item.getCurrentApplicantStr() != null && !item.getCurrentApplicantStr().trim().equals("")) {
                 List<String> names = Arrays.asList(item.getCurrentApplicantStr().split(";"));
                 patentColumnDTO.setRightHolder(names);
             }
 
-
             //装载代理人
             if (item.getAgentStr() != null && !item.getAgentStr().trim().equals("")) {
                 List<String> names = Arrays.asList(item.getAgentStr().split(";"));
                 patentColumnDTO.setAgent(names);
             }
+
             //装载代理机构
             if (item.getAgencyStr() != null && !item.getAgencyStr() .trim().equals("")) {
                 patentColumnDTO.setAgency(item.getAgencyStr() );
             }
 
-
             patentColumnDTOS.add(patentColumnDTO);
         });
 
@@ -903,4 +901,32 @@ public class PatentStarApiService {
         return dto;
     }
 
+    /**
+     * 根据专利号查询外部权利要求
+     * @param vo
+     * @return
+     * @throws IOException
+     */
+    public PatentColumnDTO queryExternalDetail(PatentNoVO vo) throws IOException {
+        PatentStarListDTO patentStarListDTO = new PatentStarListDTO();
+        String condition = "AN=" + vo.getPatentNo();
+        patentStarListDTO.setCurrentQuery(condition);
+        patentStarListDTO.setDBType("CN");
+        patentStarListDTO.setOrderBy("AD");
+        patentStarListDTO.setOrderByType("DESC");
+        patentStarListDTO.setPageNum(1);
+        patentStarListDTO.setRowCount(10);
+        Records records = this.patentStarSearchLocal(patentStarListDTO);
+        Object data = records.getData();
+        String s = JSONArray.toJSONString(data);
+        List<PatentColumnDTO> list = JSONArray.parseArray(s, PatentColumnDTO.class);
+        PatentColumnDTO dto = new PatentColumnDTO();
+        if (!CollectionUtils.isEmpty(list)) {
+            for (PatentColumnDTO columnDTO : list) {
+                BeanUtils.copyProperties(columnDTO, dto);
+            }
+        }
+        return dto;
+    }
+
 }

+ 1 - 1
src/main/java/cn/cslg/pas/service/permissions/PermissionService.java

@@ -105,7 +105,7 @@ public class PermissionService {
     public String getClientIdByNamePCS(String clientName,Boolean ifEqual) throws IOException {
         OkHttpClient okHttpClient = new OkHttpClient();
         Request request = new Request.Builder()
-                .url(PCSUrl + "/permission/api/system/getClientIdByNam?clientName=" + clientName+"&ifEqual="+ifEqual)
+                .url(PCSUrl + "/permission/api/system/getClientIdByName?clientName=" + clientName+"&ifEqual="+ifEqual)
                 .get()
                 .build();
         return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();

+ 16 - 4
src/main/resources/jsons/esCountAnalysis.json

@@ -208,7 +208,7 @@
     "type": "String",
     "value": "standerApplicant",
     "field": "SAT",
-    "esField": "stander_applicant.name.key",
+    "esField": "stander_applicant.name.raw",
     "esClass": "nestedCountAnalysisBuilder",
     "ifSearch": "false",
     "ifGroup": "false",
@@ -220,7 +220,7 @@
     "type": "String",
     "value": "mergeApplicant",
     "field": "MAT",
-    "esField": "merge_applicant.name.key",
+    "esField": "merge_applicant.name.raw",
     "esClass": "nestedCountAnalysisBuilder",
     "ifSearch": "false",
     "ifGroup": "false",
@@ -244,7 +244,7 @@
     "type": "String",
     "value": "standerRightHolder",
     "field": "SRH",
-    "esField": "stander_right_holder.name.key",
+    "esField": "stander_right_holder.name.raw",
     "esClass": "nestedCountAnalysisBuilder",
     "ifSearch": "false",
     "ifGroup": "false",
@@ -256,7 +256,7 @@
     "type": "String",
     "value": "mergeRightHolder",
     "field": "MRH",
-    "esField": "merge_right_holder.name.key",
+    "esField": "merge_right_holder.name.raw",
     "esClass": "nestedCountAnalysisBuilder",
     "ifSearch": "false",
     "ifGroup": "false",
@@ -276,6 +276,18 @@
     "ifAsCondition": "true"
   },
   {
+    "name": "合并发明人",
+    "type": "Array",
+    "value": "mergeRightHolder",
+    "field": "MIN",
+    "esField": "merge_inventor.name.raw",
+    "esClass": "nestedCountAnalysisBuilder",
+    "ifSearch": "false",
+    "ifGroup": "false",
+    "ifShow": "true",
+    "ifAsCondition": "true"
+  },
+  {
     "name": "代理机构",
     "type": "String",
     "value": "agency",

+ 1 - 0
src/main/resources/jsons/event.json

@@ -55,6 +55,7 @@
     "value": "clientName",
     "field": "clientName",
     "sqlField": "client_id",
+    "sqlClass": "getClientNameSql",
     "orderClass": "getClientNameOrder",
     "ifSearch": "true",
     "ifGroup": "false",

+ 18 - 4
src/main/resources/jsons/patent.json

@@ -171,7 +171,7 @@
     "type": "String",
     "value": "standerApplicant",
     "field": "SAT",
-    "esField": "stander_applicant.name.key",
+    "esField": "stander_applicant.name",
     "esClass": "nestedQueryBuilder",
     "ifSearch": "true",
     "ifGroup": "false",
@@ -185,7 +185,7 @@
     "type": "String",
     "value": "mergeApplicant",
     "field": "MAT",
-    "esField": "merge_applicant.name.key",
+    "esField": "merge_applicant.name",
     "esClass": "nestedQueryBuilder",
     "ifSearch": "true",
     "ifGroup": "false",
@@ -209,6 +209,20 @@
     "groupBy": "company"
   },
   {
+    "name": "合并发明人",
+    "type": "Array",
+    "value": "mergeRightHolder",
+    "field": "MIN",
+    "esField": "merge_inventor.name",
+    "esClass": "nestedQueryBuilder",
+    "ifSearch": "true",
+    "ifGroup": "false",
+    "ifShow": "true",
+    "ifStats": "true",
+    "ifAsCondition": "true",
+    "groupBy": "company"
+  },
+  {
     "name": "权利人",
     "type": "Array",
     "value": "rightHolder",
@@ -227,7 +241,7 @@
     "type": "String",
     "value": "standerRightHolder",
     "field": "SRH",
-    "esField": "stander_right_holder.name.key",
+    "esField": "stander_right_holder.name",
     "esClass": "nestedQueryBuilder",
     "ifSearch": "true",
     "ifGroup": "false",
@@ -241,7 +255,7 @@
     "type": "String",
     "value": "mergeRightHolder",
     "field": "MRH",
-    "esField": "merge_right_holder.name.key",
+    "esField": "merge_right_holder.name",
     "esClass": "nestedQueryBuilder",
     "ifSearch": "true",
     "ifGroup": "false",

+ 1 - 2
src/main/resources/jsons/patentProject.json

@@ -52,8 +52,7 @@
     "groupClass": "getScenarioGroup",
     "ifSearch": "false",
     "ifGroup": "false",
-    "ifShow": "true",
-    "ifAsCondition": "true"
+    "ifShow": "true"
   },
   {
     "name": "相关事件",

+ 23 - 12
src/main/resources/jsons/reportProject.json

@@ -35,7 +35,9 @@
   "ifSearch":"true",
   "ifGroup": "false",
     "ifShow":"true",
-    "defaultHidden": "false"
+    "defaultHidden": "false",
+    "ifAsCondition": "true"
+
 },
   {"name":"创建人",
     "type":"String",
@@ -48,7 +50,8 @@
     "ifSearch":"true",
     "ifGroup": "false",
     "ifShow":"true",
-    "defaultHidden": "true"
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
   },
   {"name":"负责人名称",
     "type":"String",
@@ -61,7 +64,8 @@
     "ifSearch":"true",
     "ifGroup": "false",
     "ifShow":"true",
-    "defaultHidden": "true"
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
   },
   {"name":"负责部门",
     "type":"String",
@@ -74,7 +78,8 @@
     "ifSearch":"true",
     "ifGroup": "false",
     "ifShow":"true",
-    "defaultHidden": "true"
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
   },
   {"name":"委托方",
     "type":"String",
@@ -87,7 +92,8 @@
     "ifSearch":"true",
     "ifGroup": "false",
     "ifShow":"true",
-    "defaultHidden": "true"
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
   },
 
   {"name":"委托方",
@@ -113,7 +119,8 @@
     "groupClass":"getTimeGroup",
     "ifSearch":"true",
     "ifGroup": "false",
-    "ifShow":"true"
+    "ifShow":"true",
+    "ifAsCondition": "true"
   },
   {"name":"标的专利或产品",
     "type":"String",
@@ -124,7 +131,8 @@
     "orderClass": "getComOrder",
     "ifSearch":"true",
     "ifGroup": "false",
-    "ifShow":"true"
+    "ifShow":"true",
+    "ifAsCondition": "true"
   },
   {"name":"报告类型",
     "type":"String",
@@ -146,7 +154,8 @@
     "sqlClass": "getComSql",
     "ifSearch":"true",
     "ifGroup": "false",
-    "ifShow":"false"
+    "ifShow":"false",
+    "ifAsCondition": "true"
   },
   {"name":"报告状态",
     "type":"String",
@@ -168,7 +177,8 @@
     "orderClass": "getComOrder",
     "ifSearch":"true",
     "ifGroup": "false",
-    "ifShow":"false"
+    "ifShow":"false",
+    "ifAsCondition": "true"
   },
   {
     "name": "结论论述",
@@ -254,7 +264,8 @@
     "ifSearch":"true",
     "ifGroup": "false",
     "ifShow":"true",
-    "defaultHidden": "true"
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
   },
   {"name":"调查类型",
     "type":"Array",
@@ -266,7 +277,7 @@
     "groupClass":"getMatterGroup",
     "ifSearch":"true",
     "ifGroup": "true",
-    "ifShow":"false",
+    "ifShow":"true",
     "defaultHidden": "true",
     "ifAsCondition": "true"
   },
@@ -281,6 +292,6 @@
     "ifSearch":"true",
     "ifGroup": "true",
     "ifShow":"true",
-    "ifAsCondition": "true"
+    "ifAsCondition": "true",
   }
 ]

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

@@ -22,6 +22,7 @@ import cn.cslg.pas.common.vo.business.TempleByReportTypeVO;
 import cn.cslg.pas.controller.EventController;
 import cn.cslg.pas.controller.PatentController;
 import cn.cslg.pas.domain.es.FamilyPatent;
+import cn.cslg.pas.domain.es.Patent;
 import cn.cslg.pas.domain.es.PatentFamilyMessage;
 import cn.cslg.pas.service.business.ProductMarketDataService;
 import cn.cslg.pas.service.business.TempleService;
@@ -376,10 +377,39 @@ public class EventServiceTests {
 
     @Test
     public void aaaaa() throws Exception {
-        String s = "C07K14/135;C12N15/45;A61K39/155;A61P31/14;C12R1/93";
-        String[] split = s.split(";");
-        for (String s1 : split) {
-            System.out.println(s1);
+        List<String> list = Arrays.asList("gh,ji");
+        String str = "[";
+        if (list.size() >= 1) {
+            for (int i = 0; i < list.size(); i++) {
+                String s = list.get(i);
+                if (i == list.size() - 1) {
+                    str = str + "\"" +s + "\""  ;
+                } else {
+                    str = str + "\"" +s + "\"" + "," ;
+                }
+            }
+        } else {
+
         }
+        str = str + "]";
+        System.out.println(str + "------------");
+        String projectId = "ctx._source.custom_field.project_id = " + 1 + ";" + "\n";
+        String field = "ctx._source.custom_field.field=" + 1 + ";" + "\n";
+        String fieldType = "ctx._source.custom_field.field_type = " + 1 + ";" + "\n";
+        String personId = "ctx._source.custom_field.person_id = " + 1 + ";" + "\n";
+        String createTime = "ctx._source.custom_field.create_time = " + new Date().getTime() + ";" + "\n";
+        String fieldValue = "ctx._source.custom_field.field_value = " + str + ";" + "\n";
+        String statsValue = "ctx._source.custom_field.stats_value = " + list;
+
+        String source = "\"" + projectId + field + fieldType + personId + createTime + fieldValue + statsValue + "\"";
+//        String source = "\"\"ctx._source.custom_field.project_id = " + 1 + ";" + "\n" +
+//                "ctx._source.custom_field.field=" + 2 + ";" + "\n" + "\"\"";
+        System.out.println(source);
+
+        Patent patent = new Patent();
+        String id = "hy7ayIwB68vilgBjUWBz";
+        String name = "士大夫";
+        Integer type = 0;
+        esService.delMergePerson(patent, id, type, name);
     }
 }