Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

lwhhszx 1 vuosi sitten
vanhempi
commit
d02c7ca368
29 muutettua tiedostoa jossa 1125 lisäystä ja 41 poistoa
  1. 2 2
      pom.xml
  2. 0 2
      src/main/java/cn/cslg/pas/Application.java
  3. 5 0
      src/main/java/cn/cslg/pas/common/dto/PatentColumnDTO.java
  4. 16 0
      src/main/java/cn/cslg/pas/common/dto/PatentExport/PatentExportParams.java
  5. 35 0
      src/main/java/cn/cslg/pas/common/dto/PatentExport/PatentExportVO.java
  6. 55 0
      src/main/java/cn/cslg/pas/common/dto/PatentExport/TaskParams.java
  7. 1 1
      src/main/java/cn/cslg/pas/common/dto/business/ReportAffairDTO.java
  8. 39 0
      src/main/java/cn/cslg/pas/common/dto/business/UpdateProjectTaskDTO.java
  9. 26 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddClaimHistoryDTO.java
  10. 26 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddSupplyEvidenceDTO.java
  11. 27 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateClaimHistoryDTO.java
  12. 27 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateSupplyEvidenceDTO.java
  13. 3 0
      src/main/java/cn/cslg/pas/common/vo/business/GetAllPersonVO.java
  14. 3 1
      src/main/java/cn/cslg/pas/common/vo/business/MergePersonVO.java
  15. 27 0
      src/main/java/cn/cslg/pas/common/vo/invalidVO/ClaimHistoryVO.java
  16. 10 0
      src/main/java/cn/cslg/pas/common/vo/invalidVO/ReportAffairVO.java
  17. 27 0
      src/main/java/cn/cslg/pas/common/vo/invalidVO/SupplyEvidenceVO.java
  18. 2 1
      src/main/java/cn/cslg/pas/controller/PatentController.java
  19. 7 0
      src/main/java/cn/cslg/pas/controller/ProjectTaskController.java
  20. 36 0
      src/main/java/cn/cslg/pas/controller/ReportAffairController.java
  21. 104 18
      src/main/java/cn/cslg/pas/service/business/MergePersonService.java
  22. 132 0
      src/main/java/cn/cslg/pas/service/business/PDFExportFirstPageService.java
  23. 168 0
      src/main/java/cn/cslg/pas/service/business/PatentExportService.java
  24. 19 0
      src/main/java/cn/cslg/pas/service/business/ProjectTaskService.java
  25. 188 10
      src/main/java/cn/cslg/pas/service/business/ReportAffairService.java
  26. 1 1
      src/main/java/cn/cslg/pas/service/business/es/EsCustomFieldService.java
  27. 21 0
      src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java
  28. 91 1
      src/main/java/cn/cslg/pas/service/business/es/EsService.java
  29. 27 4
      src/test/java/cn/cslg/pas/service/EventServiceTests.java

+ 2 - 2
pom.xml

@@ -283,8 +283,8 @@
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <configuration>
-                    <source>16</source>
-                    <target>16</target>
+                    <source>8</source>
+                    <target>8</target>
                 </configuration>
             </plugin>
             <plugin>

+ 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;

+ 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;
 }

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

@@ -0,0 +1,16 @@
+package cn.cslg.pas.common.dto.PatentExport;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 导出专利
+ * @Author xiexiang
+ * @Date 2024/1/3
+ */
+@Data
+public class PatentExportParams {
+    private List<PatentExportVO> selected;
+    private Integer projectId;
+}

+ 35 - 0
src/main/java/cn/cslg/pas/common/dto/PatentExport/PatentExportVO.java

@@ -0,0 +1,35 @@
+package cn.cslg.pas.common.dto.PatentExport;
+
+import lombok.Data;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/3
+ */
+@Data
+public class PatentExportVO {
+    /**
+     * 字段名
+     */
+    private String key;
+
+    /**
+     * 字段中文
+     */
+    private String name;
+
+    /**
+     *
+     */
+    private Integer order;
+
+    /**
+     * 是否选择
+     */
+    private Boolean selected;
+
+    /**
+     * 类型
+     */
+    private String type;
+}

+ 55 - 0
src/main/java/cn/cslg/pas/common/dto/PatentExport/TaskParams.java

@@ -0,0 +1,55 @@
+package cn.cslg.pas.common.dto.PatentExport;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/3
+ */
+@Data
+public class TaskParams {
+    /**
+     * 任务类型(1.上传,2导出)
+     */
+    private Integer taskType;
+    /**
+     * 任务id
+     */
+    private Integer taskId;
+    /**
+     * 创建人id
+     */
+    private String createId;
+    /**
+     * 文件路径
+     */
+    private String path;
+    private String token;
+    private String ids;
+    /**
+     * 专题库id
+     */
+    private Integer projectId;
+    private String selected;
+    /**
+     * Excel中的全部专利的数据(key:表头(如"公开号")  value:表头对应的专利内容(如"CN204445352U"))
+     */
+    private List<Map<Object, Object>> rowList;
+    /**
+     * 文件原始名称
+     */
+    private String oldName;
+    /**
+     * 专利总数量
+     */
+    private Integer total;
+    private Integer index;
+    private Integer productId;
+
+    public TaskParams() {
+
+    }
+}

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

@@ -15,7 +15,7 @@ import java.util.Date;
 @Data
 public class ReportAffairDTO {
     /**
-     * 事务类型(0为口审记录,1为无效请求书,2为陈述意见书,3为无效决定书,4为行政诉讼书,5为行政诉讼判决书)
+     * 事务类型(0为口审记录,1为无效请求书,2为陈述意见书,3为无效决定书,4为行政诉讼书,5为行政诉讼判决书,6权要修改历史,7补充证据及理由
      */
     private Integer affairType;
 

+ 39 - 0
src/main/java/cn/cslg/pas/common/dto/business/UpdateProjectTaskDTO.java

@@ -0,0 +1,39 @@
+package cn.cslg.pas.common.dto.business;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 项目任务DTO
+ * @Author xiexiang
+ * @Date 2023/11/22
+ */
+@Data
+public class UpdateProjectTaskDTO {
+    private Integer id;
+
+    /**
+     * 内部人员:人员id
+     * 外部人员:人员的邮箱
+     */
+    private String handler;
+
+    /**
+     * 0内部人员1外部人员
+     */
+    private Integer handlerType;
+
+    /**
+     * 截止时间
+     */
+    private Date deadLineTime;
+
+
+    /**
+     * 备注
+     */
+    private String description;
+
+}

+ 26 - 0
src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddClaimHistoryDTO.java

@@ -0,0 +1,26 @@
+package cn.cslg.pas.common.dto.invalidDTO;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 行政诉讼判决书
+ * @Author xiexiang
+ * @Date 2023/12/29
+ */
+@Data
+public class AddClaimHistoryDTO {
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date claimHistoryTime;
+
+    private Integer projectId;
+
+    private List<String> fileGuids;
+
+    private String description;
+}

+ 26 - 0
src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddSupplyEvidenceDTO.java

@@ -0,0 +1,26 @@
+package cn.cslg.pas.common.dto.invalidDTO;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 行政诉讼判决书
+ * @Author xiexiang
+ * @Date 2023/12/29
+ */
+@Data
+public class AddSupplyEvidenceDTO {
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date supplyEvidenceTime;
+
+    private Integer projectId;
+
+    private List<String> fileGuids;
+
+    private String description;
+}

+ 27 - 0
src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateClaimHistoryDTO.java

@@ -0,0 +1,27 @@
+package cn.cslg.pas.common.dto.invalidDTO;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 行政诉讼判决书
+ * @Author xiexiang
+ * @Date 2023/12/29
+ */
+@Data
+public class UpdateClaimHistoryDTO {
+    private Integer claimHistoryId;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date claimHistoryTime;
+
+    private Integer projectId;
+
+    private List<String> fileGuids;
+
+    private String description;
+}

+ 27 - 0
src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateSupplyEvidenceDTO.java

@@ -0,0 +1,27 @@
+package cn.cslg.pas.common.dto.invalidDTO;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 行政诉讼判决书
+ * @Author xiexiang
+ * @Date 2023/12/29
+ */
+@Data
+public class UpdateSupplyEvidenceDTO {
+    private Integer supplyEvidenceId;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date supplyEvidenceTime;
+
+    private Integer projectId;
+
+    private List<String> fileGuids;
+
+    private String description;
+}

+ 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;
 }

+ 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;
     /**
      * 简称
      */

+ 27 - 0
src/main/java/cn/cslg/pas/common/vo/invalidVO/ClaimHistoryVO.java

@@ -0,0 +1,27 @@
+package cn.cslg.pas.common.vo.invalidVO;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 行政诉讼判决书
+ * @Author xiexiang
+ * @Date 2023/12/29
+ */
+@Data
+public class ClaimHistoryVO {
+    private Integer claimHistoryId;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date claimHistoryTime;
+
+    private Integer projectId;
+
+    private List<String> fileGuids;
+
+    private String description;
+}

+ 10 - 0
src/main/java/cn/cslg/pas/common/vo/invalidVO/ReportAffairVO.java

@@ -84,4 +84,14 @@ public class ReportAffairVO {
      * 行政诉讼判决书返回VO
      */
     private JudgementVO judgementVO;
+
+    /**
+     * 权利要求修改历史返回VO
+     */
+    private ClaimHistoryVO claimHistoryVO;
+
+    /**
+     * 补充证据及理由返回VO
+     */
+    private SupplyEvidenceVO supplyEvidenceVO;
 }

+ 27 - 0
src/main/java/cn/cslg/pas/common/vo/invalidVO/SupplyEvidenceVO.java

@@ -0,0 +1,27 @@
+package cn.cslg.pas.common.vo.invalidVO;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 行政诉讼判决书
+ * @Author xiexiang
+ * @Date 2023/12/29
+ */
+@Data
+public class SupplyEvidenceVO {
+    private Integer supplyEvidenceId;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date supplyEvidenceTime;
+
+    private Integer projectId;
+
+    private List<String> fileGuids;
+
+    private String description;
+}

+ 2 - 1
src/main/java/cn/cslg/pas/controller/PatentController.java

@@ -29,6 +29,7 @@ import io.swagger.v3.oas.annotations.Operation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.IOException;
 import java.util.List;
 
 @RequestMapping(Constants.API_XiaoSHI + "/patent")
@@ -121,7 +122,7 @@ 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);
     }

+ 7 - 0
src/main/java/cn/cslg/pas/controller/ProjectTaskController.java

@@ -126,4 +126,11 @@ public class ProjectTaskController {
         return Response.success(ids);
     }
 
+    @Operation(summary = "编辑任务")
+    @PostMapping("/updateTask")
+    public Response updateTask(@RequestBody UpdateProjectTaskDTO updateProjectTaskDTO) throws Exception {
+        Integer id = projectTaskService.updateTask(updateProjectTaskDTO);
+        return Response.success(id);
+    }
+
 }

+ 36 - 0
src/main/java/cn/cslg/pas/controller/ReportAffairController.java

@@ -164,4 +164,40 @@ public class ReportAffairController {
         records.setData(id);
         return Response.success(records);
     }
+
+    @Operation(summary = "上传权要修改记录")
+    @PostMapping("/addPatentClaimHistory")
+    public Response addPatentClaimHistory(@RequestBody AddClaimHistoryDTO addClaimHistoryDTO) throws Exception {
+        Integer id = reportAffairService.addClaimHistory(addClaimHistoryDTO);
+        Records records = new Records();
+        records.setData(id);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "修改权要修改记录")
+    @PostMapping("/updatePatentClaimHistory")
+    public Response updatePatentClaimHistory(@RequestBody UpdateClaimHistoryDTO updateClaimHistoryDTO) throws Exception {
+        Integer id = reportAffairService.updateClaimHistory(updateClaimHistoryDTO);
+        Records records = new Records();
+        records.setData(id);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "上传补充证据")
+    @PostMapping("/addSupplyEvidence")
+    public Response addSupplyEvidence(@RequestBody AddSupplyEvidenceDTO addSupplyEvidenceDTO) throws Exception {
+        Integer id = reportAffairService.addSupplyEvidence(addSupplyEvidenceDTO);
+        Records records = new Records();
+        records.setData(id);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "修改补充证据")
+    @PostMapping("/updateSupplyEvidence")
+    public Response updateSupplyEvidence(@RequestBody UpdateSupplyEvidenceDTO updateSupplyEvidenceDTO) throws Exception {
+        Integer id = reportAffairService.updateSupplyEvidence(updateSupplyEvidenceDTO);
+        Records records = new Records();
+        records.setData(id);
+        return Response.success(records);
+    }
 }

+ 104 - 18
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 {
@@ -91,7 +97,53 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         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();
+        List<String> ids = new ArrayList<>();
+        Map<String, Patent> map = new HashMap<>();
+        for (Hit<Patent> hit : hits) {
+            String id = hit.id();
+            map.put(id, hit.source());
+        }
+
+        if (!CollectionUtils.isEmpty(ids)) {
+            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> mergeApplicant = patent.getMergeApplicant();
 
+                patent.setMergeApplicant(mergePersonList);
+                patent.setMergeRightHolder(mergePersonList);
+                esService.updateMergePerson(patent, id);
+            }
+        }
         return person.getId();
     }
 
@@ -146,8 +198,6 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         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();
         if (taskId != null) {
@@ -172,19 +222,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,24 +246,57 @@ 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;
     }
 

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

@@ -0,0 +1,132 @@
+package cn.cslg.pas.service.business;
+
+import cn.cslg.pas.common.dto.PatentColumnDTO;
+import cn.cslg.pas.common.dto.PatentDTO;
+import cn.cslg.pas.common.model.request.QueryRequest;
+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;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.rendering.PDFRenderer;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.ByteArrayOutputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/4
+ */
+@Slf4j
+@Service
+public class PDFExportFirstPageService {
+    @Autowired
+    private FileManagerService fileManagerService;
+    @Autowired
+    private EsService esService;
+
+    /**
+     * 1
+     * @param projectId
+     * @return
+     * @throws IOException
+     */
+    public byte[] mergeAndExportPDFFirstPage(Integer projectId) throws IOException {
+        //根据projectId查询专利信息
+        QueryRequest queryRequest = new QueryRequest();
+        queryRequest.setProjectId(projectId);
+        PatentDTO patentDTO;
+        try {
+            patentDTO = esService.esSearch(queryRequest);
+        } catch (Exception e) {
+            throw new XiaoShiException("错误");
+        }
+        List<PatentColumnDTO> patents = patentDTO.getPatents();
+        byte[][] pdfDocuments = this.getPDFByteByAppNo(patents);
+        byte[] pdfData = this.mergeFirstPage(pdfDocuments);
+        return pdfData;
+    }
+
+    /**
+     * 3
+     * @param pdfDatas
+     * @return
+     * @throws IOException
+     */
+    public byte[] mergeFirstPage(byte[][] pdfDatas) throws IOException{
+        //创建一个输出流
+        try {
+            // 创建一个PDFMergerUtility实例
+            PDFMergerUtility merger = new PDFMergerUtility();
+            PDDocument resultDocument = new PDDocument();
+            //逐个处理每个pdf文件
+            for (byte[] pdfData : pdfDatas) {
+                // 加载每个输入的PDF文档
+                PDDocument document = PDDocument.load(pdfData);
+                // 获取第一页
+                PDPage firstPage = document.getPage(0);
+                // 创建一个新的文档用于保存第一页
+                PDDocument firstPageDocument = new PDDocument();
+                firstPageDocument.addPage(firstPage);
+                // 将第一页添加到合并器中
+                merger.appendDocument(resultDocument, firstPageDocument);
+                // 关闭当前处理的文档
+                document.close();
+                firstPageDocument.close();
+            }
+            ByteArrayOutputStream out = new ByteArrayOutputStream();
+            resultDocument.save(out);
+            resultDocument.close();
+            return out.toByteArray();
+        } catch (FileNotFoundException e) {
+            throw new FileNotFoundException();
+        }
+    }
+
+    /**
+     * 2
+     * 根据查询到的专利信息获取它公告或公开专利的pdf文档数据流
+     * @param patents
+     * @return
+     */
+    public byte[][] getPDFByteByAppNo(List<PatentColumnDTO> patents){
+        List<byte[]> pdfDatas = new ArrayList<>();
+        //遍历传入专利集合
+        for (PatentColumnDTO item : patents) {
+            //判断申请号是否为空
+            if (item.getAppNo() != null) {
+                String appNo = item.getAppNo();
+                Integer type = 1;
+                //获取公告专利pdf文档guid
+                String pdfGuid = FormatUtil.getPDFFormat(appNo, type);
+
+                byte[] pdfData = new byte[0];
+                try {
+                    pdfData = fileManagerService.downloadSystemFileFromFMS(pdfGuid);
+                    if (pdfData == null) {
+                        //获取公开专利pdf文档guid
+                        Integer type2 = 0;
+                        String pdfGuid2 = FormatUtil.getPDFFormat(appNo, type2);
+                        pdfData = fileManagerService.downloadSystemFileFromFMS(pdfGuid2);
+                    }
+                } catch (IOException e) {
+                    e.printStackTrace();
+                    continue;//继续处理下一件专利
+                }
+                pdfDatas.add(pdfData);
+            }
+        }
+        byte[][] pdfDataArray = new byte[pdfDatas.size()][];
+        return pdfDatas.toArray(pdfDataArray);
+    }
+}

+ 168 - 0
src/main/java/cn/cslg/pas/service/business/PatentExportService.java

@@ -0,0 +1,168 @@
+package cn.cslg.pas.service.business;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.PatentColumnDTO;
+import cn.cslg.pas.common.dto.PatentDTO;
+import cn.cslg.pas.common.dto.PatentExport.PatentExportVO;
+import cn.cslg.pas.common.dto.PatentExport.TaskParams;
+import cn.cslg.pas.common.model.request.QueryRequest;
+import cn.cslg.pas.common.utils.*;
+import cn.cslg.pas.common.vo.TaskWebSocketDTO;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.business.es.EsService;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.input.XmlStreamReaderException;
+import org.apache.poi.hssf.usermodel.*;
+import org.apache.poi.hssf.util.HSSFColor;
+import org.apache.poi.ss.usermodel.FillPatternType;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.VerticalAlignment;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.io.ByteArrayOutputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/3
+ */
+@Slf4j
+@Service
+public class PatentExportService {
+
+    @Autowired
+    private FileUtils fileUtils;
+
+    @Autowired
+    private EsService esService;
+
+    /**
+     * 导出专利
+     * @param taskParams
+     * @return
+     * @throws IOException
+     */
+    public byte[] exportPatent(TaskParams taskParams) throws IOException {
+        try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            //selected字符串转PatentExportVO集合
+            List<PatentExportVO> selected = Optional.ofNullable(JsonUtils.jsonToList(taskParams.getSelected(), PatentExportVO.class))
+                    .orElse(new ArrayList<>());
+            //导出文件名
+            if (selected.isEmpty()) {
+                throw new IllegalArgumentException("没有选择要导出的数据");
+            }
+
+            //key的集合(标头:例如patentNo)
+            List<String> columns = selected.stream().filter(PatentExportVO::getSelected).map(PatentExportVO::getKey).distinct().collect(Collectors.toList());
+            //name的集合
+            List<String> headers = selected.stream().filter(PatentExportVO::getSelected).map(PatentExportVO::getName).distinct().collect(Collectors.toList());
+            if (columns.size() != headers.size()) {
+                throw new XiaoShiException("数量不匹配");
+            }
+            //新建工作簿
+            HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
+            //新疆sheet页
+            HSSFSheet sheet = hssfWorkbook.createSheet();
+            sheet.setDefaultColumnWidth(30);
+            //新建标头行
+            HSSFRow headerRow = sheet.createRow(0);
+            headerRow.setHeight((short) 500);
+            //新建标头行格式
+            HSSFCellStyle headerCellStyle = hssfWorkbook.createCellStyle();
+            //新建普通行格式
+            HSSFCellStyle commonCellStyle = hssfWorkbook.createCellStyle();
+            //遍历设置标头
+            for (int i = 0; i < headers.size(); i++) {
+                HSSFCell cell = headerRow.createCell(i);
+                ExcelUtils.setExcelCellStyle(headerCellStyle);
+                headerCellStyle.setAlignment(HorizontalAlignment.CENTER);
+                headerCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+                headerCellStyle.setFillForegroundColor(HSSFColor.HSSFColorPredefined.SKY_BLUE.getIndex());
+                headerCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+                headerCellStyle.setWrapText(true);
+                cell.setCellStyle(headerCellStyle);
+                cell.setCellValue(headers.get(i));
+            }
+            //根据projectId查询专利信息
+            QueryRequest queryRequest = new QueryRequest();
+            queryRequest.setProjectId(taskParams.getProjectId());
+            PatentDTO patentDTO;
+            try {
+                patentDTO = esService.esSearch(queryRequest);
+            } catch (Exception e) {
+                throw new XiaoShiException("错误");
+            }
+
+            List<PatentColumnDTO> patents = patentDTO.getPatents();
+            for (int i = 0; i < patents.size(); i++) {
+                Map<String, Object> map = new LinkedHashMap<>();
+                PatentColumnDTO patent = patents.get(i);
+                if (patent == null) {
+                    continue;
+                }
+//                String country = StrUtil.sub(patent.getPatentNo(), 0, 2);
+
+
+                //
+                for (int j = 0; j < columns.size(); j++) {
+                    String column = columns.get(j);
+
+                    PatentExportVO patentExportVO = selected.stream().filter(item -> item.getKey().equals(column)).findFirst().orElse(new PatentExportVO());
+                    Object value = null;
+                    switch (column) {
+                        case "patentno":
+                            value = patent.getPatentNo();
+                            break;
+                        case "abstract":
+                            value = patent.getAbstractStr();
+                            break;
+                        case "abstract_path":
+                            break;
+                        case "publicno":
+                            value = patent.getPublicNo();
+                            break;
+                        case "publicdate":
+                            value = patent.getPublicDate();
+                            break;
+                        case "pstatus":
+                            value = patent.getSimpleStatus();
+                            break;
+                        default:
+                            value = null;
+                    }
+                    map.put(patentExportVO.getName(), value);
+                }
+                //新建一普通行
+                HSSFRow row = sheet.createRow(i + 1);
+                row.setHeight((short) 800);
+                for (String key : map.keySet()) {
+                    int index = headers.indexOf(key);
+                    if (index != -1) {
+                        HSSFCell cell = row.createCell(index);
+                        ExcelUtils.setExcelCellStyle(commonCellStyle);
+                        commonCellStyle.setVerticalAlignment(VerticalAlignment.TOP);
+                        commonCellStyle.setWrapText(true);
+                        cell.setCellStyle(commonCellStyle);
+                        if (StringUtils.isNotNull(map.get(key))) {
+                            cell.setCellValue(String.valueOf(map.get(key)));
+                        }
+                    }
+                }
+            }
+            hssfWorkbook.write(out);
+            return out.toByteArray();
+        } catch (FileNotFoundException e) {
+            throw new FileNotFoundException();
+        }
+    }
+
+}

+ 19 - 0
src/main/java/cn/cslg/pas/service/business/ProjectTaskService.java

@@ -35,6 +35,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
@@ -1188,4 +1189,22 @@ public class ProjectTaskService extends ServiceImpl<ProjectTaskMapper, ProjectTa
 
 
     }
+
+    /**
+     * 更新任务
+     * @param updateProjectTaskDTO
+     * @return
+     */
+    public Integer updateTask(UpdateProjectTaskDTO updateProjectTaskDTO){
+        if (updateProjectTaskDTO == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        Integer id = updateProjectTaskDTO.getId();
+        ProjectTask projectTask = this.getById(id);
+        if (projectTask != null) {
+            BeanUtils.copyProperties(updateProjectTaskDTO, projectTask);
+            projectTask.updateById();
+        }
+        return projectTask.getId();
+    }
 }

+ 188 - 10
src/main/java/cn/cslg/pas/service/business/ReportAffairService.java

@@ -1,10 +1,7 @@
 package cn.cslg.pas.service.business;
 
 import cn.cslg.pas.common.dto.business.ReportAffairDTO;
-import cn.cslg.pas.common.dto.invalidDTO.AddAdminProceedDTO;
-import cn.cslg.pas.common.dto.invalidDTO.AddStateOpinionDTO;
-import cn.cslg.pas.common.dto.invalidDTO.QueryReportAffairDTO;
-import cn.cslg.pas.common.dto.invalidDTO.UpdateStateOpinionDTO;
+import cn.cslg.pas.common.dto.invalidDTO.*;
 import cn.cslg.pas.common.model.cronModel.Personnel;
 import cn.cslg.pas.common.model.cronModel.PersonnelVO;
 import cn.cslg.pas.common.model.cronModel.SystemFile;
@@ -145,18 +142,22 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
             BeanUtils.copyProperties(item, reportAffairVO);
             //根据事务类型选择不同的装载方式
             Integer type = reportAffairVO.getAffairType();
-            if (type == 0) {//0 口审记录
+            if (type.equals(0)) {//0 口审记录
                 this.loadOralTrail(reportAffairVO);
-            } else if (type == 1) {//1 无效请求书
+            } else if (type.equals(1)) {//1 无效请求书
                 this.loadInvalidRequestFile(reportAffairVO);
-            } else if (type == 2) {//2 陈述意见书
+            } else if (type.equals(2)) {//2 陈述意见书
                 this.loadStateOpinion(reportAffairVO);
-            } else if (type == 3) {//3 无效决定书
+            } else if (type.equals(3)) {//3 无效决定书
                 this.loadInvalidDecisionFile(reportAffairVO);
-            } else if (type == 4) {//4 行政诉讼书
+            } else if (type.equals(4)) {//4 行政诉讼书
                 this.loadAdminProceed(reportAffairVO);
-            } else if (type == 5) {//5 行政诉讼判决书
+            } else if (type.equals(5)) {//5 行政诉讼判决书
                 this.loadJudgment(reportAffairVO);
+            } else if (type.equals(6)) {//6 权要修改记录
+                this.loadClaimHistory(reportAffairVO);
+            } else if (type.equals(7)) {//7 补充证据及理由
+                this.loadSupplyEvidence(reportAffairVO);
             }
             reportAffairVOS.add(reportAffairVO);
         });
@@ -371,4 +372,181 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
         JudgementVO judgementVO = adminProceedService.getJudgment(reportAffairId);
         reportAffairVO.setJudgementVO(judgementVO);
     }
+
+    /**
+     * 上传权要修改记录
+     * @param addClaimHistoryDTO
+     * @return
+     */
+    public Integer addClaimHistory(AddClaimHistoryDTO addClaimHistoryDTO){
+        if (addClaimHistoryDTO == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        Integer projectId = addClaimHistoryDTO.getProjectId();
+        if (projectId == null) {
+            throw new XiaoShiException("报告id为空");
+        }
+        //1. 首先上传报告事务,拿到报告事务id
+        ReportAffairDTO reportAffairDTO = new ReportAffairDTO();
+        reportAffairDTO.setProjectId(projectId);
+        //权要修改历史 6
+        reportAffairDTO.setAffairType(6);
+        //发生时间是无效请求日
+        reportAffairDTO.setOccurredTime(addClaimHistoryDTO.getClaimHistoryTime());
+        //备注
+        reportAffairDTO.setDescription(addClaimHistoryDTO.getDescription());
+        Integer reportAffairId = this.addReportAffair(reportAffairDTO);
+
+        if (reportAffairId == null) {
+            throw new XiaoShiException("上传报告事务失败");
+        }
+        //3. 添加报告事务与文件关联
+        List<String> fileGuids = addClaimHistoryDTO.getFileGuids();
+        if (fileGuids != null && !fileGuids.isEmpty()) {
+            List<AssoReportAffairFile> assoReportAffairFiles = new ArrayList<>();
+            fileGuids.forEach(item -> {
+                AssoReportAffairFile assoReportAffairFile = new AssoReportAffairFile();
+                assoReportAffairFile.setReportAffairId(reportAffairId);
+                assoReportAffairFile.setFileGuid(item);
+                assoReportAffairFiles.add(assoReportAffairFile);
+            });
+            assoReportAffairFileService.saveBatch(assoReportAffairFiles);
+        }
+        return reportAffairId;
+    }
+
+    /**
+     * 更新权要修改历史
+     * @param updateClaimHistoryDTO
+     * @return
+     */
+    public Integer updateClaimHistory(UpdateClaimHistoryDTO updateClaimHistoryDTO){
+        if (updateClaimHistoryDTO == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        Integer projectId = updateClaimHistoryDTO.getProjectId();
+        Integer reportAffairId = updateClaimHistoryDTO.getClaimHistoryId();
+        if (reportAffairId == null) {
+            throw new XiaoShiException("reportAffairId为空");
+        }
+        if (projectId == null) {
+            throw new XiaoShiException("报告id为空");
+        }
+        //2. 拿到报告事务id,获取报告事务
+        ReportAffair reportAffair = this.getById(reportAffairId);
+        reportAffair.setProjectId(projectId);
+        //发生时间是无效请求日
+        reportAffair.setOccurredTime(updateClaimHistoryDTO.getClaimHistoryTime());
+        //备注
+        reportAffair.setDescription(updateClaimHistoryDTO.getDescription());
+        reportAffair.updateById();
+        //3. 更新报告事务与文件关联
+        List<String> fileGuids = updateClaimHistoryDTO.getFileGuids();
+        assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);
+        return reportAffairId;
+    }
+
+    /**
+     * 上传补充证据及理由
+     * @param addSupplyEvidenceDTO
+     * @return
+     */
+    public Integer addSupplyEvidence(AddSupplyEvidenceDTO addSupplyEvidenceDTO){
+        if (addSupplyEvidenceDTO == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        Integer projectId = addSupplyEvidenceDTO.getProjectId();
+        if (projectId == null) {
+            throw new XiaoShiException("报告id为空");
+        }
+        //1. 首先上传报告事务,拿到报告事务id
+        ReportAffairDTO reportAffairDTO = new ReportAffairDTO();
+        reportAffairDTO.setProjectId(projectId);
+        //补充证据及理由 7
+        reportAffairDTO.setAffairType(7);
+        //发生时间是无效请求日
+        reportAffairDTO.setOccurredTime(addSupplyEvidenceDTO.getSupplyEvidenceTime());
+        //备注
+        reportAffairDTO.setDescription(addSupplyEvidenceDTO.getDescription());
+        Integer reportAffairId = this.addReportAffair(reportAffairDTO);
+
+        if (reportAffairId == null) {
+            throw new XiaoShiException("上传报告事务失败");
+        }
+        //3. 添加报告事务与文件关联
+        List<String> fileGuids = addSupplyEvidenceDTO.getFileGuids();
+        if (fileGuids != null && !fileGuids.isEmpty()) {
+            List<AssoReportAffairFile> assoReportAffairFiles = new ArrayList<>();
+            fileGuids.forEach(item -> {
+                AssoReportAffairFile assoReportAffairFile = new AssoReportAffairFile();
+                assoReportAffairFile.setReportAffairId(reportAffairId);
+                assoReportAffairFile.setFileGuid(item);
+                assoReportAffairFiles.add(assoReportAffairFile);
+            });
+            assoReportAffairFileService.saveBatch(assoReportAffairFiles);
+        }
+        return reportAffairId;
+    }
+
+    /**
+     * 更新补充证据及理由
+     * @param updateSupplyEvidenceDTO
+     * @return
+     */
+    public Integer updateSupplyEvidence(UpdateSupplyEvidenceDTO updateSupplyEvidenceDTO){
+        if (updateSupplyEvidenceDTO == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        Integer projectId = updateSupplyEvidenceDTO.getProjectId();
+        Integer reportAffairId = updateSupplyEvidenceDTO.getSupplyEvidenceId();
+        if (reportAffairId == null) {
+            throw new XiaoShiException("reportAffairId为空");
+        }
+        if (projectId == null) {
+            throw new XiaoShiException("报告id为空");
+        }
+        //2. 拿到报告事务id,获取报告事务
+        ReportAffair reportAffair = this.getById(reportAffairId);
+        reportAffair.setProjectId(projectId);
+        //发生时间是无效请求日
+        reportAffair.setOccurredTime(updateSupplyEvidenceDTO.getSupplyEvidenceTime());
+        //备注
+        reportAffair.setDescription(updateSupplyEvidenceDTO.getDescription());
+        reportAffair.updateById();
+        //3. 更新报告事务与文件关联
+        List<String> fileGuids = updateSupplyEvidenceDTO.getFileGuids();
+        assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);
+        return reportAffairId;
+    }
+
+    /**
+     * 装载权利要求修改记录
+     * @param reportAffairVO
+     */
+    public void loadClaimHistory(ReportAffairVO reportAffairVO) {
+        Integer reportAffairId = reportAffairVO.getId();
+        ClaimHistoryVO claimHistoryVO = new ClaimHistoryVO();
+        ReportAffair reportAffair = this.getById(reportAffairId);
+        claimHistoryVO.setClaimHistoryId(reportAffairId);
+        claimHistoryVO.setDescription(reportAffair.getDescription());
+        claimHistoryVO.setClaimHistoryTime(reportAffair.getOccurredTime());
+        claimHistoryVO.setProjectId(reportAffair.getProjectId());
+        reportAffairVO.setClaimHistoryVO(claimHistoryVO);
+    }
+
+    /**
+     * 装载补充证据及理由
+     * @param reportAffairVO
+     */
+    public void loadSupplyEvidence(ReportAffairVO reportAffairVO) {
+        Integer reportAffairId = reportAffairVO.getId();
+        SupplyEvidenceVO supplyEvidenceVO = new SupplyEvidenceVO();
+        ReportAffair reportAffair = this.getById(reportAffairId);
+        supplyEvidenceVO.setSupplyEvidenceId(reportAffairId);
+        supplyEvidenceVO.setDescription(reportAffair.getDescription());
+        supplyEvidenceVO.setSupplyEvidenceTime(reportAffair.getOccurredTime());
+        supplyEvidenceVO.setProjectId(reportAffair.getProjectId());
+        reportAffairVO.setSupplyEvidenceVO(supplyEvidenceVO);
+    }
+
 }

+ 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();

+ 91 - 1
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.*;
@@ -242,7 +244,7 @@ public class EsService {
         }
 
         //分页
-        if (current > 0 && size > 0) {
+        if (current!=null&&size!=null&&current > 0 && size > 0) {
             builder.from((current.intValue() - 1) * size.intValue()).size(size.intValue());
         }
 
@@ -407,6 +409,7 @@ public class EsService {
         return list;
     }
 
+    //更新patent
     public Integer updatePatent(Patent patent, String id) {
         UpdateRequest<Patent, Patent> req;
         req = UpdateRequest.of(
@@ -421,6 +424,71 @@ 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) {
+        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 + "]";
+
+        String projectId = "ctx._source.custom_field.project_id = " + customField.getProjectId() + ";" + "\n";
+        String field = "ctx._source.custom_field.field=" + customField.getField() + ";" + "\n";
+        String fieldType = "ctx._source.custom_field.field_type = " + customField.getFieldType() + ";" + "\n";
+        String personId = "ctx._source.custom_field.person_id = " + customField.getPersonId() + ";" + "\n";
+        String createTime = "ctx._source.custom_field.create_time = " + customField.getCreateTime().getTime() + ";" + "\n";
+        String fieldValue = "ctx._source.custom_field.field_value = " + valueField + ";" + "\n";
+        String statsValue = "ctx._source.custom_field.stats_value = " + valueStats;
+
+        String source = "\"\"\"" + projectId + field + fieldType + personId + createTime + fieldValue + statsValue  + "\n" + "\"\"\"";
+        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 +1048,28 @@ 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;
+        }
+    }
 }
 
 

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

@@ -376,10 +376,33 @@ 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("");
+        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);
     }
 }