Browse Source

6/24 韶音修改

lwhhszx 1 year ago
parent
commit
35fc2fab36
28 changed files with 1187 additions and 46 deletions
  1. 15 0
      src/main/java/cn/cslg/pas/common/dto/business/ReportProjectDTO.java
  2. 11 0
      src/main/java/cn/cslg/pas/common/dto/business/UpdateReportProjectDTO.java
  3. 12 0
      src/main/java/cn/cslg/pas/common/model/finalInvalid/FinalProfGroupEditDTO.java
  4. 11 0
      src/main/java/cn/cslg/pas/common/model/finalInvalid/FinalProfGroupQueryDTO.java
  5. 14 0
      src/main/java/cn/cslg/pas/common/model/finalInvalid/FinalProfGroupVO.java
  6. 14 0
      src/main/java/cn/cslg/pas/common/model/finalInvalid/GetClaimMesVO.java
  7. 1 0
      src/main/java/cn/cslg/pas/common/model/request/QueryRequest.java
  8. 4 1
      src/main/java/cn/cslg/pas/common/vo/PersonSelfFieldVO.java
  9. 11 0
      src/main/java/cn/cslg/pas/common/vo/business/ReportProjectVO.java
  10. 3 0
      src/main/java/cn/cslg/pas/common/vo/invalidVO/QueryPatentClaimHistoryVO.java
  11. 2 1
      src/main/java/cn/cslg/pas/controller/CompareLiteratureController.java
  12. 53 11
      src/main/java/cn/cslg/pas/controller/InvalidStatutesController.java
  13. 33 0
      src/main/java/cn/cslg/pas/domain/FinalInvalidStatue.java
  14. 31 0
      src/main/java/cn/cslg/pas/domain/FinalProofGroup.java
  15. 15 5
      src/main/java/cn/cslg/pas/domain/business/ReportProject.java
  16. 5 0
      src/main/java/cn/cslg/pas/domain/business/SystemDict.java
  17. 84 0
      src/main/java/cn/cslg/pas/factorys/getSqlFactorys/GetProofNameSql.java
  18. 18 0
      src/main/java/cn/cslg/pas/mapper/FinalInvalidStatueMapper.java
  19. 19 0
      src/main/java/cn/cslg/pas/mapper/FinalProofGroupMapper.java
  20. 217 0
      src/main/java/cn/cslg/pas/service/FinalInvalidStatueService.java
  21. 49 0
      src/main/java/cn/cslg/pas/service/FinalProofGroupService.java
  22. 19 12
      src/main/java/cn/cslg/pas/service/business/CompareLiteratureService.java
  23. 1 0
      src/main/java/cn/cslg/pas/service/business/ProofGroupService.java
  24. 43 6
      src/main/java/cn/cslg/pas/service/business/ReportProjectService.java
  25. 43 0
      src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java
  26. 35 9
      src/main/java/cn/cslg/pas/service/importPatent/ImportSinglePatentService.java
  27. 423 0
      src/main/resources/jsons/invalidReportProject.json
  28. 1 1
      src/main/resources/mapper/ReportProjectMapper.xml

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

@@ -1,9 +1,12 @@
 package cn.cslg.pas.common.dto.business;
 
 import cn.hutool.core.date.DateTime;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -77,4 +80,16 @@ public class ReportProjectDTO {
     private Integer associateReportId;
     private List<Integer> copyIds;
     private Boolean track;
+
+    @Schema(description = "国知局受理年")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy")
+    private Date acceptYear;
+
+    @Schema(description = "申请人代理所")
+    private String applicantAgency;
+    @Schema(description = " 权利人代理所")
+    private String rightHolderAgency;
+    @Schema(description = "案件阶段")
+    private String caseStage;
+
 }

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

@@ -1,9 +1,11 @@
 package cn.cslg.pas.common.dto.business;
 
 import cn.hutool.core.date.DateTime;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -71,4 +73,13 @@ public class UpdateReportProjectDTO {
     private Integer assoReportId;
     @Schema(description = "梳理意见")
     private String cardingOpinion;
+    @Schema(description = "国知局受理年")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy")
+    private Date acceptYear;
+    @Schema(description = "申请人代理所")
+    private String applicantAgency;
+    @Schema(description = " 权利人代理所")
+    private String rightHolderAgency;
+    @Schema(description = "案件阶段")
+    private String caseStage;
 }

+ 12 - 0
src/main/java/cn/cslg/pas/common/model/finalInvalid/FinalProfGroupEditDTO.java

@@ -0,0 +1,12 @@
+package cn.cslg.pas.common.model.finalInvalid;
+
+import lombok.Data;
+
+@Data
+public class FinalProfGroupEditDTO {
+   private Integer invalidStatueId;
+    private   Integer proofGroupId;
+    private  String editField;
+    private   String fieldContent;
+
+}

+ 11 - 0
src/main/java/cn/cslg/pas/common/model/finalInvalid/FinalProfGroupQueryDTO.java

@@ -0,0 +1,11 @@
+package cn.cslg.pas.common.model.finalInvalid;
+
+import cn.cslg.pas.domain.FinalInvalidStatue;
+import lombok.Data;
+
+@Data
+public class FinalProfGroupQueryDTO {
+    private Integer id;
+    private Integer statueType;
+
+}

+ 14 - 0
src/main/java/cn/cslg/pas/common/model/finalInvalid/FinalProfGroupVO.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.common.model.finalInvalid;
+
+import cn.cslg.pas.domain.FinalInvalidStatue;
+import lombok.Data;
+
+@Data
+public class FinalProfGroupVO {
+    private Integer id;
+    private String invalidReason;
+    private String presentOpinions;
+   private String rbDecision;
+   private FinalInvalidStatue invalidStatue;
+
+}

+ 14 - 0
src/main/java/cn/cslg/pas/common/model/finalInvalid/GetClaimMesVO.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.common.model.finalInvalid;
+
+import cn.cslg.pas.domain.FinalInvalidStatue;
+import lombok.Data;
+
+@Data
+public class GetClaimMesVO {
+    private Integer id;
+    private String invalidReason;
+    private String presentOpinions;
+   private String rbDecision;
+   private FinalInvalidStatue invalidStatue;
+
+}

+ 1 - 0
src/main/java/cn/cslg/pas/common/model/request/QueryRequest.java

@@ -20,6 +20,7 @@ public class QueryRequest {
     private List<EsCustomFieldValueDTO> customFields;
     private Integer taskId;
     private List<String> patentNos;
+    private Boolean ifInvalidReport;
     //商品化专利
     private Integer productId;
     //商品化专利标识

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

@@ -1,6 +1,9 @@
 package cn.cslg.pas.common.vo;
 
+import lombok.Builder;
 import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.bind.DefaultValue;
 
 /**
  * 人员私有栏位vo
@@ -30,7 +33,7 @@ public class PersonSelfFieldVO {
     private Integer createType;
     private Boolean defaultHidden;
     private Boolean ifPersonal;
-    private Boolean ifSort;
+    private Boolean ifSort=true;
     private Boolean ifNotOrder;
 
 }

+ 11 - 0
src/main/java/cn/cslg/pas/common/vo/business/ReportProjectVO.java

@@ -2,6 +2,7 @@ package cn.cslg.pas.common.vo.business;
 
 import cn.cslg.pas.common.model.cronModel.SystemFile;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import org.joda.time.DateTime;
@@ -227,4 +228,14 @@ public class ReportProjectVO {
     @Schema(description = "关联id")
     private Integer assoReportId;
 
+    @Schema(description = "国知局受理年")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy")
+    private Date acceptYear;
+    @Schema(description = "申请人代理所")
+    private String applicantAgency;
+    @Schema(description = " 权利人代理所")
+    private String rightHolderAgency;
+    @Schema(description = "案件阶段")
+    private String caseStage;
+    private List<String> rightHolder;
 }

+ 3 - 0
src/main/java/cn/cslg/pas/common/vo/invalidVO/QueryPatentClaimHistoryVO.java

@@ -39,4 +39,7 @@ public class QueryPatentClaimHistoryVO {
      */
     private Boolean ifFirst;
 
+    private String courtDecision1;
+    private String courtDecision2;
+
 }

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

@@ -9,6 +9,7 @@ import cn.cslg.pas.common.dto.invalidDTO.UpdateLiteratureOrderDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.common.dto.CompareLiteratureDTO;
+import cn.cslg.pas.common.vo.PatentWithIdVO;
 import cn.cslg.pas.common.vo.StarPatentVO;
 import cn.cslg.pas.domain.es.Patent;
 import cn.cslg.pas.service.business.CompareLiteratureService;
@@ -66,7 +67,7 @@ public class CompareLiteratureController {
     @Operation(summary = "更新对比文献顺序")
     @GetMapping("/aa")
     public Response aa(String patentNo) throws Exception {
-        Patent patent = importSinglePatentService.addSinglePatent(patentNo);
+        PatentWithIdVO patent = importSinglePatentService.addSinglePatent(patentNo);
         System.out.println(patent);
         return Response.error("更新失败");
     }

+ 53 - 11
src/main/java/cn/cslg/pas/controller/InvalidStatutesController.java

@@ -5,8 +5,12 @@ import cn.cslg.pas.common.dto.business.InvalidStatutesDTO;
 import cn.cslg.pas.common.dto.invalidDTO.GetInvalidStatutesDTO;
 import cn.cslg.pas.common.dto.invalidDTO.UpdateMessageDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.model.finalInvalid.FinalProfGroupEditDTO;
+import cn.cslg.pas.common.model.finalInvalid.FinalProfGroupQueryDTO;
+import cn.cslg.pas.common.model.finalInvalid.FinalProfGroupVO;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.common.vo.invalidVO.InvalidStatutesVO;
+import cn.cslg.pas.service.FinalInvalidStatueService;
 import cn.cslg.pas.service.business.InvalidStatutesService;
 import io.swagger.v3.oas.annotations.Operation;
 import lombok.extern.slf4j.Slf4j;
@@ -14,10 +18,12 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
  * 无效法条的Controller层
+ *
  * @Author xiexiang
  * @Date 2023/12/22
  */
@@ -26,12 +32,14 @@ import java.util.List;
 @RestController
 public class InvalidStatutesController {
     @Autowired
-
     private InvalidStatutesService invalidStatutesService;
 
+    @Autowired
+    private FinalInvalidStatueService finalInvalidStatueService;
+
     @Operation(summary = "添加无效法条")
     @PostMapping("/addInvalidStatutes")
-    public Response addInvalidStatutes(@RequestBody InvalidStatutesDTO invalidStatutesDTO){
+    public Response addInvalidStatutes(@RequestBody InvalidStatutesDTO invalidStatutesDTO) {
         List<Integer> ids = invalidStatutesService.addInvalidStatutes(invalidStatutesDTO);
         Records records = new Records();
         records.setData(ids);
@@ -40,7 +48,7 @@ public class InvalidStatutesController {
 
     @Operation(summary = "查询无效法条")
     @PostMapping("/queryInvalidStatutes")
-    public Response queryInvalidStatutes(@RequestBody GetInvalidStatutesDTO getInvalidStatutesDTO){
+    public Response queryInvalidStatutes(@RequestBody GetInvalidStatutesDTO getInvalidStatutesDTO) {
         Integer projectId = getInvalidStatutesDTO.getProjectId();
         List<InvalidStatutesVO> ids = invalidStatutesService.queryInvalidStatutes(projectId);
         Records records = new Records();
@@ -54,9 +62,8 @@ public class InvalidStatutesController {
     public Response updateMessage(@RequestBody UpdateMessageDTO updateMessageDTO) {
         try {
             invalidStatutesService.updateMessage(updateMessageDTO);
-        }
-        catch (Exception e){
-            return  Response.error(e.getMessage());
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
         }
         return Response.success("更新成功");
     }
@@ -64,13 +71,48 @@ public class InvalidStatutesController {
     @Operation(summary = "删除无效法条")
     @GetMapping("/removeInvalidStatutes")
     public Response removeInvalidStatutes(Integer id) {
-        Records records =new Records();
+        Records records = new Records();
+        try {
+            Integer reId = invalidStatutesService.removeInvalidStatutes(id);
+            records.setData(reId);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
+        return Response.success(records);
+    }
+
+    @Operation(summary = "查询最终无效理由和证据")
+    @PostMapping("/queryFinalInvalidStatues")
+    public Response queryFinalInvalidStatues(@RequestBody FinalProfGroupQueryDTO finalProfGroupQueryDTO) {
+        List<FinalProfGroupVO> finalProfGroupVOS =new ArrayList<>();
         try {
-          Integer reId=  invalidStatutesService.removeInvalidStatutes(id);
-          records.setData(reId);
+           finalProfGroupVOS = finalInvalidStatueService.queryFinalProofGroup(finalProfGroupQueryDTO);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
         }
-        catch (Exception e){
-            return  Response.error(e.getMessage());
+        return Response.success(finalProfGroupVOS);
+    }
+
+    @Operation(summary = "导入最终无效理由和证据")
+    @GetMapping("/importFinalInvalidStatues")
+    public Response importFinalInvalidStatues(Integer id) {
+        try {
+           finalInvalidStatueService.importFinalInvalidStatutes(id);
+
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
+        return Response.success("请求成功");
+    }
+
+    @Operation(summary = "编辑最终无效理由和证据")
+    @PostMapping("/editFinalInvalidStatues")
+    public Response editFinalInvalidStatues(@RequestBody FinalProfGroupEditDTO finalProfGroupEditDTO) {
+        Records records = new Records();
+        try {
+            finalInvalidStatueService.editProofGroup(finalProfGroupEditDTO);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
         }
         return Response.success(records);
     }

+ 33 - 0
src/main/java/cn/cslg/pas/domain/FinalInvalidStatue.java

@@ -0,0 +1,33 @@
+package cn.cslg.pas.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * @TableName final_invalid_statue
+ */
+@TableName(value ="final_invalid_statue")
+@Data
+public class FinalInvalidStatue extends BaseEntity<FinalInvalidStatue> {
+    private Integer id;
+
+    private Integer statuteId;
+
+    private String claimText;
+
+    private Integer projectId;
+
+    private String courtOpinions1;
+
+    private String courtOpinions2;
+
+    private String createId;
+
+    private Date createTime;
+    private Integer claimOrder;
+}

+ 31 - 0
src/main/java/cn/cslg/pas/domain/FinalProofGroup.java

@@ -0,0 +1,31 @@
+package cn.cslg.pas.domain;
+
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * @TableName final_proof_group
+ */
+@TableName(value ="final_proof_group")
+@Data
+public class FinalProofGroup extends BaseEntity<FinalProofGroup> {
+
+
+    private Integer finalInvalidStatueId;
+
+    private String invalidReason;
+
+    private String presentOpinions;
+
+    private Integer projectId;
+
+    private String rbDecision;
+
+    private String createId;
+
+    private Date createTime;
+
+}

+ 15 - 5
src/main/java/cn/cslg/pas/domain/business/ReportProject.java

@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * <p>
  * 专利数据库
@@ -25,19 +27,19 @@ public class ReportProject extends BaseEntity<ReportProject> {
     private Integer projectId;
 
     /**
-     *标的专利号
+     * 标的专利号
      */
     @TableField(value = "sign_patent_no")
     private String signPatentNo;
 
     /**
-     *标的产品号
+     * 标的产品号
      */
     @TableField(value = "sign_product_id")
     private Integer signProjectId;
 
     /**
-     *类型
+     * 类型
      */
     @TableField(value = "report_type")
     private Integer reportType;
@@ -45,7 +47,7 @@ public class ReportProject extends BaseEntity<ReportProject> {
      * 状态
      */
     @TableField(value = "status")
-    private  Integer status;
+    private Integer status;
 
     /**
      * 案件编号
@@ -119,5 +121,13 @@ public class ReportProject extends BaseEntity<ReportProject> {
      */
     @TableField(value = "carding_opinion")
     private String cardingOpinion;
-
+    @TableField(value = "accept_year")
+    private Date acceptYear;
+    @TableField(value = "applicant_agency")
+    private String applicantAgency;
+    @TableField(value ="right_holder_agency")
+    private String rightHolderAgency;
+
+    @TableField(value ="case_stage")
+    private String caseStage;
 }

+ 5 - 0
src/main/java/cn/cslg/pas/domain/business/SystemDict.java

@@ -40,6 +40,11 @@ public class SystemDict extends BaseEntity<SystemDict> {
      * 组名
      */
 
+    /**
+     * 组合
+     */
+    @TableField("simple_label")
+    private String simpleLabel;
     public SystemDict() {
         this.label = "-";
         this.value = "-1";

+ 84 - 0
src/main/java/cn/cslg/pas/factorys/getSqlFactorys/GetProofNameSql.java

@@ -0,0 +1,84 @@
+package cn.cslg.pas.factorys.getSqlFactorys;
+
+import cn.cslg.pas.common.model.cronModel.SqlObject;
+import cn.cslg.pas.common.utils.StringUtils;
+import cn.cslg.pas.domain.business.CompareLiterature;
+import cn.cslg.pas.service.business.CompareLiteratureService;
+import cn.cslg.pas.service.business.es.EsPatentService;
+import cn.cslg.pas.service.permissions.PermissionService;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+@Slf4j
+@Component
+public class GetProofNameSql implements GetSqlObject {
+    private SqlObject sqlObject;
+    @Lazy
+    @Autowired
+    private CompareLiteratureService compareLiteratureService;
+    @Lazy
+    @Autowired
+    private EsPatentService esPatentService;
+
+    @Override
+    public String getSql(String value) {
+        Boolean ifEqual = false;
+        //根据名称查询人员id
+        List<Integer> ids = new ArrayList<>();
+        if (sqlObject.getOption() == "contain") {
+            sqlObject.setOption(" in ");
+
+        } else if (sqlObject.getOption() == "=") {
+            sqlObject.setOption(" in ");
+            ifEqual = true;
+        }
+        //根据名称查询
+        try {
+            //根据号码模糊查询专利
+
+            List<Integer> projectIds = esPatentService.getProjectIds(value);
+             if(projectIds.size()>0){
+                 ids.addAll(projectIds);
+             }
+            LambdaQueryWrapper<CompareLiterature> queryWrapper = new LambdaQueryWrapper();
+            queryWrapper.like(CompareLiterature::getName, value)
+                        .eq(CompareLiterature::getType,2);
+            List<CompareLiterature> compareLiteratures = compareLiteratureService.list(queryWrapper);
+
+            if (compareLiteratures.size() != 0) {
+              List<Integer>  newIds = compareLiteratures.stream().map(CompareLiterature::getProjectId).distinct().collect(Collectors.toList());
+           ids.addAll(newIds);
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        if (ids == null || ids.size() == 0) {
+            ids = new ArrayList<>();
+            ids.add(0);
+        }
+        String idStr = StringUtils.join(ids, ",");
+        String re = sqlObject.getSqlField() + sqlObject.getOption() + "(" + idStr + ")";
+        return re;
+    }
+
+    @Override
+    public void setSqlObject(SqlObject sqlObject) {
+        this.sqlObject = sqlObject;
+    }
+
+    ;
+
+    public SqlObject getSqlObject() {
+        return sqlObject;
+    }
+}

+ 18 - 0
src/main/java/cn/cslg/pas/mapper/FinalInvalidStatueMapper.java

@@ -0,0 +1,18 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.FinalInvalidStatue;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author admin
+* @description 针对表【final_invalid_statue(最终无效理由和证据)】的数据库操作Mapper
+* @createDate 2024-06-20 17:09:07
+* @Entity cn/cslg/pas.domain.FinalInvalidStatue
+*/
+public interface FinalInvalidStatueMapper extends BaseMapper<FinalInvalidStatue> {
+
+}
+
+
+
+

+ 19 - 0
src/main/java/cn/cslg/pas/mapper/FinalProofGroupMapper.java

@@ -0,0 +1,19 @@
+package cn.cslg.pas.mapper;
+
+
+import cn.cslg.pas.domain.FinalProofGroup;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author admin
+* @description 针对表【final_proof_group(最终证据组合)】的数据库操作Mapper
+* @createDate 2024-06-20 17:10:10
+* @Entity cn/cslg/pas.domain.FinalProofGroup
+*/
+public interface FinalProofGroupMapper extends BaseMapper<FinalProofGroup> {
+
+}
+
+
+
+

+ 217 - 0
src/main/java/cn/cslg/pas/service/FinalInvalidStatueService.java

@@ -0,0 +1,217 @@
+package cn.cslg.pas.service;
+
+import cn.cslg.pas.common.dto.invalidDTO.PatentClaimDTO;
+import cn.cslg.pas.common.model.finalInvalid.FinalProfGroupEditDTO;
+import cn.cslg.pas.common.model.finalInvalid.FinalProfGroupQueryDTO;
+import cn.cslg.pas.common.model.finalInvalid.FinalProfGroupVO;
+import cn.cslg.pas.common.vo.invalidVO.PatentClaimHistoryVO;
+import cn.cslg.pas.domain.FinalInvalidStatue;
+import cn.cslg.pas.domain.FinalProofGroup;
+import cn.cslg.pas.domain.business.InvalidStatutes;
+import cn.cslg.pas.domain.business.ProofGroup;
+import cn.cslg.pas.mapper.FinalInvalidStatueMapper;
+import cn.cslg.pas.service.business.InvalidStatutesService;
+import cn.cslg.pas.service.business.ProofGroupService;
+import cn.cslg.pas.service.business.invalidReport.PatentClaimHistoryService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import org.springframework.data.elasticsearch.core.query.UpdateQuery;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author admin
+ * @description 针对表【final_invalid_statue(最终无效理由和证据)】的数据库操作Service实现
+ * @createDate 2024-06-20 17:09:07
+ */
+@Service
+@RequiredArgsConstructor
+public class FinalInvalidStatueService extends ServiceImpl<FinalInvalidStatueMapper, FinalInvalidStatue> {
+    private final InvalidStatutesService invalidStatutesService;
+    private final PatentClaimHistoryService patentClaimHistoryService;
+    private static List<Integer> inStatueIds = Arrays.asList(2, 3, 4);
+    private final ProofGroupService proofGroupService;
+    private final FinalProofGroupService finalProofGroupService;
+
+    public void ImportByProjectId(Integer projectId, Integer statueType) {
+
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void importFinalInvalidStatutes(Integer projectId) {
+
+        //删除原来保存数据
+        this.removeFinalInvalidStatus(projectId);
+        //根据projectId 查询无效理由和证据
+        LambdaQueryWrapper<InvalidStatutes> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(InvalidStatutes::getProjectId, projectId);
+        List<InvalidStatutes> invalidStatutes = invalidStatutesService.list(queryWrapper);
+
+        for (InvalidStatutes invalidStatute : invalidStatutes) {
+            FinalInvalidStatue finalInvalidStatue = new FinalInvalidStatue();
+            Integer claimId = invalidStatute.getClaimId();
+            finalInvalidStatue.setStatuteId(invalidStatute.getStatutesId());
+            Map<String, String> claimMess = this.getClaimText(claimId);
+            finalInvalidStatue.setClaimText(claimMess.get("claimText"));
+            finalInvalidStatue.setCourtOpinions1(claimMess.get("court1"));
+            finalInvalidStatue.setCourtOpinions2(claimMess.get("court2"));
+            if (claimMess.get("index") != null) {
+                Integer index = Integer.parseInt(claimMess.get("index").toString());
+                finalInvalidStatue.setClaimOrder(index);
+            }
+            finalInvalidStatue.setProjectId(projectId);
+            finalInvalidStatue.insert();
+            finalProofGroupService.addFinalProofGroup(invalidStatute.getId(), finalInvalidStatue);
+        }
+
+    }
+
+    public Map<String, String> getClaimText(Integer claimId) {
+        String claimText = "";
+        PatentClaimDTO patentClaimDTO = new PatentClaimDTO();
+        patentClaimDTO.setClaimId(claimId);
+
+        PatentClaimHistoryVO patentClaimHistoryVO = patentClaimHistoryService.queryPatentClaimHistory(patentClaimDTO);
+        if (patentClaimHistoryVO.getSecondClaimVO() != null && patentClaimHistoryVO.getSecondClaimVO().getOperateType().equals(0)) {
+            claimText = patentClaimHistoryVO.getSecondClaimVO().getContent();
+        } else if (patentClaimHistoryVO.getFirstClaimVO() != null && patentClaimHistoryVO.getFirstClaimVO().getOperateType().equals(0)) {
+            claimText = patentClaimHistoryVO.getFirstClaimVO().getContent();
+        } else {
+            claimText = patentClaimHistoryVO.getOriginalClaimVO().getContent();
+        }
+        Map<String, String> map = new HashMap<>();
+        map.put("claimText", claimText);
+        map.put("court1", patentClaimHistoryVO.getOriginalClaimVO().getCourtDecision1());
+        map.put("court2", patentClaimHistoryVO.getOriginalClaimVO().getCourtDecision2());
+        if( patentClaimHistoryVO.getOriginalClaimVO().getSysOrder()!=null) {
+            map.put("index", patentClaimHistoryVO.getOriginalClaimVO().getSysOrder().toString());
+        }
+        return map;
+    }
+
+    public List<FinalProfGroupVO> queryFinalProofGroup(FinalProfGroupQueryDTO finalProfGroupQueryDTO) {
+        List<FinalProfGroupVO> finalProfGroupVOS = new ArrayList<>();
+
+        Integer projectId = finalProfGroupQueryDTO.getId();
+        Integer statusType = finalProfGroupQueryDTO.getStatueType();
+        //根据projectId查询最终无效理由和证据
+        LambdaQueryWrapper<FinalInvalidStatue> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(FinalInvalidStatue::getProjectId, projectId);
+
+        if (statusType != null) {
+            if (statusType.equals(1)) {
+                queryWrapper.in(FinalInvalidStatue::getStatuteId, inStatueIds);
+            } else {
+                queryWrapper.notIn(FinalInvalidStatue::getStatuteId, inStatueIds);
+
+            }
+        }
+        List<FinalInvalidStatue> finalInvalidStatues = this.list(queryWrapper);
+        if (finalInvalidStatues.size() == 0) {
+            return finalProfGroupVOS;
+        }
+        List<Integer> ids = finalInvalidStatues.stream().map(FinalInvalidStatue::getId).collect(Collectors.toList());
+
+        List<FinalProofGroup> finalProofGroups = new ArrayList<>();
+        LambdaQueryWrapper<FinalProofGroup> queryWrapper1 = new LambdaQueryWrapper<>();
+        queryWrapper1.in(FinalProofGroup::getFinalInvalidStatueId, ids).orderByDesc(FinalProofGroup::getFinalInvalidStatueId);
+        finalProofGroups = finalProofGroupService.list(queryWrapper1);
+        finalProofGroups.forEach(item -> {
+            FinalProfGroupVO finalProfGroupVO = new FinalProfGroupVO();
+            FinalInvalidStatue finalInvalidStatue = finalInvalidStatues.stream()
+                    .filter(tem -> tem.getId().equals(item.getFinalInvalidStatueId())).findFirst().orElse(null);
+            if (finalInvalidStatue != null) {
+                finalProfGroupVO.setInvalidStatue(finalInvalidStatue);
+            }
+            finalProfGroupVO.setId(item.getId());
+            finalProfGroupVO.setPresentOpinions(item.getPresentOpinions());
+            finalProfGroupVO.setInvalidReason(item.getInvalidReason());
+            finalProfGroupVO.setRbDecision(item.getRbDecision());
+            finalProfGroupVOS.add(finalProfGroupVO);
+
+        });
+        return finalProfGroupVOS;
+    }
+
+
+    public void editProofGroup(FinalProfGroupEditDTO finalProfGroupEditDTO) {
+        Integer invalidStatueId = finalProfGroupEditDTO.getInvalidStatueId();
+        Integer proofGroupId = finalProfGroupEditDTO.getProofGroupId();
+        String editField = finalProfGroupEditDTO.getEditField();
+        String fieldContent = finalProfGroupEditDTO.getFieldContent();
+        switch (editField) {
+            case "invalidReason":
+                FinalProofGroup finalProofGroup1 = finalProofGroupService.getById(proofGroupId);
+                finalProofGroup1.setInvalidReason(fieldContent);
+                finalProofGroup1.updateById();
+                break;
+            case "presentOpinions":
+                FinalProofGroup finalProofGroup2 = finalProofGroupService.getById(proofGroupId);
+                finalProofGroup2.setPresentOpinions(fieldContent);
+                finalProofGroup2.updateById();
+                break;
+            case "rbDecision":
+                FinalProofGroup finalProofGroup3 = finalProofGroupService.getById(proofGroupId);
+                finalProofGroup3.setRbDecision(fieldContent);
+                finalProofGroup3.updateById();
+                break;
+            case "courtOpinions1":
+                FinalInvalidStatue finalInvalidStatue1 = this.getById(invalidStatueId);
+                Integer claimOrder = finalInvalidStatue1.getClaimOrder();
+                UpdateWrapper<FinalInvalidStatue> updateWrapper = new UpdateWrapper<>();
+
+                // Lambda表达式
+                updateWrapper.lambda().set(FinalInvalidStatue::getCourtOpinions1, fieldContent)
+                        .eq(FinalInvalidStatue::getClaimOrder, claimOrder)
+                        .eq(FinalInvalidStatue::getProjectId, finalInvalidStatue1.getProjectId());
+                this.update(updateWrapper);
+                break;
+            case "courtOpinions2":
+                FinalInvalidStatue finalInvalidStatue2 = this.getById(invalidStatueId);
+                Integer claimOrder2 = finalInvalidStatue2.getClaimOrder();
+                UpdateWrapper<FinalInvalidStatue> updateWrapper2 = new UpdateWrapper<>();
+
+                // Lambda表达式
+                updateWrapper2.lambda().set(FinalInvalidStatue::getCourtOpinions2, fieldContent)
+                        .eq(FinalInvalidStatue::getClaimOrder, claimOrder2)
+                        .eq(FinalInvalidStatue::getProjectId, finalInvalidStatue2.getProjectId());
+                this.update(updateWrapper2);
+                break;
+            case "claimText":
+                FinalInvalidStatue finalInvalidStatue3 = this.getById(invalidStatueId);
+                Integer claimOrder3 = finalInvalidStatue3.getClaimOrder();
+                UpdateWrapper<FinalInvalidStatue> updateWrapper3 = new UpdateWrapper<>();
+
+                // Lambda表达式
+                updateWrapper3.lambda().set(FinalInvalidStatue::getClaimText, fieldContent)
+                        .eq(FinalInvalidStatue::getClaimOrder, claimOrder3)
+                        .eq(FinalInvalidStatue::getProjectId, finalInvalidStatue3.getProjectId());
+                this.update(updateWrapper3);
+                break;
+            case "statuteId":
+                FinalInvalidStatue finalInvalidStatue4 = this.getById(invalidStatueId);
+                finalInvalidStatue4.setStatuteId(Integer.parseInt(fieldContent));
+                finalInvalidStatue4.updateById();
+        }
+    }
+
+
+    public void removeFinalInvalidStatus(Integer projectId) {
+        LambdaQueryWrapper<FinalInvalidStatue> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(FinalInvalidStatue::getProjectId, projectId);
+        LambdaQueryWrapper<FinalProofGroup> queryWrapper1 = new LambdaQueryWrapper<>();
+        queryWrapper1.eq(FinalProofGroup::getProjectId, projectId);
+        this.remove(queryWrapper);
+        finalProofGroupService.remove(queryWrapper1);
+
+    }
+}
+
+
+
+

+ 49 - 0
src/main/java/cn/cslg/pas/service/FinalProofGroupService.java

@@ -0,0 +1,49 @@
+package cn.cslg.pas.service;
+
+import cn.cslg.pas.common.vo.invalidVO.ProofGroupVO;
+import cn.cslg.pas.domain.FinalInvalidStatue;
+import cn.cslg.pas.domain.FinalProofGroup;
+import cn.cslg.pas.mapper.FinalProofGroupMapper;
+import cn.cslg.pas.service.business.ProofGroupService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author admin
+ * @description 针对表【final_proof_group(最终证据组合)】的数据库操作Service实现
+ * @createDate 2024-06-20 17:10:10
+ */
+@Service
+@RequiredArgsConstructor
+public class FinalProofGroupService extends ServiceImpl<FinalProofGroupMapper, FinalProofGroup> {
+  private final ProofGroupService proofGroupService;
+    public void addFinalProofGroup(Integer invalidStatesId, FinalInvalidStatue finalInvalidStatue) {
+        List<ProofGroupVO> proofGroupVOS= proofGroupService.queryProofGroup(invalidStatesId);
+          for (ProofGroupVO proofGroupVO:proofGroupVOS){
+              FinalProofGroup finalProofGroup =new FinalProofGroup();
+              finalProofGroup.setProjectId(finalInvalidStatue.getProjectId());
+              finalProofGroup.setFinalInvalidStatueId(finalInvalidStatue.getId());
+              finalProofGroup.setRbDecision(proofGroupVO.getRbOpinions());
+           if(proofGroupVO.getInvalidReasonDetail2()!=null)  {
+               finalProofGroup.setInvalidReason(proofGroupVO.getInvalidReasonDetail2());
+               finalProofGroup.setPresentOpinions(proofGroupVO.getPresentOpinions2());
+           }
+           else{
+               finalProofGroup.setInvalidReason(proofGroupVO.getInvalidReasonDetail1());
+               finalProofGroup.setPresentOpinions(proofGroupVO.getPresentOpinions1());
+           }
+            finalProofGroup.insert();
+          }
+    }
+
+
+
+}
+
+
+
+

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

@@ -92,7 +92,7 @@ public class CompareLiteratureService extends ServiceImpl<CompareLiteratureMappe
                 //文档guid
                 compareLiterature.setLiteratureNo(patent.getPatentNo());
                 //文档名称
-                String name = patent.getPatentNo();
+                String name = "";
 
                 //作者
                 String authorName = "";
@@ -106,7 +106,7 @@ public class CompareLiteratureService extends ServiceImpl<CompareLiteratureMappe
                 }
                 if (patent != null) {
                     if (patent.getTitle() != null && patent.getTitle().size() != 0) {
-                        name += "(" + patent.getTitle().get(0).getTextContent() + ")";
+                        name = patent.getTitle().get(0).getTextContent();
                     }
                     compareLiterature.setAppDate(patent.getAppDate());
                     compareLiterature.setPublicDate(patent.getPublicDate());
@@ -445,36 +445,38 @@ public class CompareLiteratureService extends ServiceImpl<CompareLiteratureMappe
         }
 
         Patent patent = new Patent();
-        //判断该专利是否已经作为文献
-        Integer lastId = this.getHaveAddIdByNos(projectId, literatureNo);
-        if (lastId != null&&id==null) {
-            id = lastId;
-        }
+        PatentWithIdVO patentWithIdVO = new PatentWithIdVO();
         //判断库里是否存在该专利
         try {
-            PatentWithIdVO patentWithIdVO = esService.getIdByPatentNo(literatureNo);
+            patentWithIdVO = esService.getIdByPatentNo(literatureNo);
             if (patentWithIdVO == null) {
                 // 不存在该专利则从数据库获取著录信息并保存
-                patent = importSinglePatentService.addSinglePatent(literatureNo);
+                patentWithIdVO = importSinglePatentService.addSinglePatent(literatureNo);
+                patent = patentWithIdVO.getPatent();
             } else {
                 patent = patentWithIdVO.getPatent();
             }
         } catch (Exception e) {
 
         }
-
+        literatureNo = patent.getPatentNo();
+        //判断该专利是否已经作为文献
+        Integer lastId = this.getHaveAddIdByNos(projectId, literatureNo);
+        if (lastId != null && id == null) {
+            id = lastId;
+        }
 
         CompareLiterature compareLiterature = new CompareLiterature();
         compareLiterature.setCreateId(personnelVO.getId());
         //报告id
         compareLiterature.setProjectId(projectId);
         //文档guid
-        compareLiterature.setLiteratureNo(literatureNo);
+        compareLiterature.setLiteratureNo(patent.getPatentNo());
         //文档名称
         String name = literatureNo;
         if (patent != null) {
             if (patent.getTitle() != null && patent.getTitle().size() != 0) {
-                name += "(" + patent.getTitle().get(0).getTextContent() + ")";
+                name = patent.getTitle().get(0).getTextContent();
             }
             compareLiterature.setAppDate(patent.getAppDate());
             compareLiterature.setPublicDate(patent.getPublicDate());
@@ -500,6 +502,11 @@ public class CompareLiteratureService extends ServiceImpl<CompareLiteratureMappe
             compareLiterature.updateById();
 
         } else {
+            try {
+                importSinglePatentService.saveAssoPatentProjectToEs(projectId, patentWithIdVO.getId());
+            } catch (Exception e) {
+                throw new XiaoShiException("添加和es关联错误");
+            }
             compareLiterature.insert();
         }
 

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

@@ -142,6 +142,7 @@ public class ProofGroupService extends ServiceImpl<ProofGroupMapper, ProofGroup>
         if (!proofGroups.isEmpty()) {
             proofGroups.forEach(item -> {
                 ProofGroupVO proofGroupVO = new ProofGroupVO();
+                BeanUtils.copyProperties(item,proofGroupVO);
                 proofGroupVO.setId(item.getId());
                 proofGroupVO.setInvalidStatutesId(invalidStatutesId);
                 proofGroupVO.setStatutesId(invalidStatutes.getStatutesId());

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

@@ -16,6 +16,8 @@ import cn.cslg.pas.common.vo.DepartmentVO;
 import cn.cslg.pas.common.vo.PatentWithIdVO;
 import cn.cslg.pas.common.vo.business.*;
 import cn.cslg.pas.domain.business.*;
+import cn.cslg.pas.domain.es.Patent;
+import cn.cslg.pas.domain.es.PatentPerson;
 import cn.cslg.pas.exception.UnLoginException;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.factorys.businessFactory.Business;
@@ -25,6 +27,7 @@ import cn.cslg.pas.mapper.AssoProjectEventMapper;
 import cn.cslg.pas.mapper.EventMapper;
 import cn.cslg.pas.mapper.PatentProjectMapper;
 import cn.cslg.pas.mapper.ReportProjectMapper;
+import cn.cslg.pas.service.business.es.EsPatentService;
 import cn.cslg.pas.service.business.es.EsService;
 import cn.cslg.pas.service.common.FileManagerService;
 import cn.cslg.pas.service.permissions.PermissionService;
@@ -103,6 +106,8 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
     @Autowired
     private EsService esService;
     @Autowired
+    private EsPatentService esPatentService;
+    @Autowired
     private CustomFieldService customFieldService;
     @Autowired
     @Lazy
@@ -111,11 +116,16 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Object queryMessage(QueryRequest queryRequest) throws Exception {
-        List<String> sqls = formatQueryService.reSqls(queryRequest, "reportProject");
+        String tableName = "reportProject";
+        Boolean ifInvalidReport = true;
+        if (ifInvalidReport != null && ifInvalidReport) {
+            tableName = "invalidReportProject";
+        }
+        List<String> sqls = formatQueryService.reSqls(queryRequest, tableName);
         sqls = this.loadSearchSql(sqls);
         //根据sql查询事件信息
         List<ReportProjectVO> reportProject = reportProjectMapper.getReportProject(sqls.get(0), sqls.get(1), sqls.get(2));
-        this.loadReportProjectVO(reportProject);
+        this.loadReportProjectVO(reportProject, ifInvalidReport);
 
         //查询总数
         Long total = reportProjectMapper.getReportProjectCount(sqls.get(0));
@@ -598,7 +608,7 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
      *
      * @param reportProjectVOs
      */
-    private void loadReportProjectVO(List<ReportProjectVO> reportProjectVOs) throws IOException {
+    private void loadReportProjectVO(List<ReportProjectVO> reportProjectVOs, Boolean ifInvalidReport) throws IOException {
         List<String> createIds = new ArrayList<>();
         List<String> departmentIds = new ArrayList<>();
         List<DepartmentVO> departmentVOS = new ArrayList<>();
@@ -613,6 +623,8 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
         List<Scenario> scenarios = new ArrayList<>();
         List<Matter> matters = new ArrayList<>();
         List<AssoProject> assoProjects = new ArrayList<>();
+        List<String> patentNos = new ArrayList<>();
+        List<Patent> patentList = new ArrayList<>();
         reportProjectVOs.forEach(
                 item -> {
 
@@ -639,6 +651,9 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
                     if (item.getEntrustType() != null && item.getEntrustType().equals(1)) {
                         clientIds.add(Integer.parseInt(item.getEntrustId()));
                     }
+                    if (ifInvalidReport != null && ifInvalidReport && item.getSignPatentNo() != null) {
+                        patentNos.add(item.getSignPatentNo());
+                    }
                 }
         );
 
@@ -661,7 +676,14 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
             departmentVOS = JSON.parseArray(json, DepartmentVO.class);
 
         }
+        //查询标的专利信息
+        if (ifInvalidReport != null && ifInvalidReport && patentNos.size() > 0) {
+            try {
+                patentList = esPatentService.getPatentsByNo(patentNos, true, null, null);
 
+            } catch (Exception e) {
+            }
+        }
         if (ids.size() != 0) {
             //根据事件id获得专利数据库文件关联表
             LambdaQueryWrapper<AssoProjectFile> queryWrapper = new LambdaQueryWrapper<>();
@@ -684,7 +706,6 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
             reportTypeList = systemDictService.list(systemDictLambdaQueryWrapper);
 
 
-            //
             LambdaQueryWrapper<AssoProject> queryWrapper1 = new LambdaQueryWrapper<>();
             queryWrapper1.in(AssoProject::getAssoProjectId, ids);
             assoProjects = assoProjectService.list(queryWrapper1);
@@ -693,9 +714,12 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
 
         //查询文件
         if (guids.size() != 0) {
-            String res = fileManagerService.getSystemFileFromFMS(guids);
+            try {
+                String res = fileManagerService.getSystemFileFromFMS(guids);
 
-            systemFiles = JSONObject.parseArray(res, SystemFile.class);
+                systemFiles = JSONObject.parseArray(res, SystemFile.class);
+            } catch (Exception e) {
+            }
         }
 
         //查询客户名称
@@ -864,6 +888,19 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
             if (assoProject != null) {
                 reportProjectVO.setAssoReportId(assoProject.getProjectId());
             }
+
+            //装载专利权人
+            if (ifInvalidReport != null && ifInvalidReport && reportProjectVO.getSignPatentNo() != null && patentList.size() > 0) {
+                String patentNo = reportProjectVO.getSignPatentNo();
+                Patent patent = patentList.stream().filter(item -> patentNo.equals(item.getPublicNo()) || patentNo.equals(item.getGrantNo()) || patentNo.equals(item.getAppNo())).findFirst().orElse(null);
+                if (patent != null) {
+                    if (patent.getRightHolder() != null && patent.getRightHolder().size() > 0) {
+                        List<String> rightHolders = patent.getRightHolder().stream().map(PatentPerson::getName).collect(Collectors.toList());
+                        reportProjectVO.setRightHolder(rightHolders);
+                    }
+
+                }
+            }
         }
     }
 

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

@@ -571,6 +571,7 @@ public class EsPatentService {
         rePatentSource.add("grant_no");
         rePatentSource.add("grant_date");
         rePatentSource.add("title");
+        rePatentSource.add("project_id");
         return rePatentSource;
     }
 
@@ -808,4 +809,46 @@ public class EsPatentService {
             }
         return patentWithIdVOS;
     }
+
+    //根据专利号模糊查询
+ public List<Integer> getProjectIds(String patentNo) throws Exception{
+       List<Integer> projectIds=new ArrayList<>();
+     List<Patent> patentList = new ArrayList<>();
+     SearchRequest.Builder builder = new SearchRequest.Builder();
+     //设置查询索引
+     builder.index("patent");
+
+String searchPatentNo ="*"+patentNo+"*";
+
+         Query q1 = QueryBuilders.wildcard(i -> i.field("app_no.keyword").value(searchPatentNo));
+         //公开号
+         Query q2 = QueryBuilders.wildcard(t -> t.field("public_no.keyword").value(searchPatentNo));
+         //授权号
+         Query q3 = QueryBuilders.wildcard(t -> t.field("grant_no.keyword").value(searchPatentNo));
+         Query query = QueryBuilders.bool(i -> i.should(q1, q2, q3));
+
+
+       Query query1=      QueryBuilders.hasParent(i -> i.parentType("patent").query(query));
+
+Query query2 =QueryBuilders.exists(i->i.field("project_id"));
+     Query finalQuery = QueryBuilders.bool((i -> i.must(query1,query2)));
+     builder.query(finalQuery);
+         List<String> reSources = this.rePatentSource();
+         builder.source(sourceOptionsBuilder -> sourceOptionsBuilder
+                 .filter(fieldSourceBuilder -> fieldSourceBuilder
+                         .includes(reSources)));
+
+         builder.from(0).size(1000);
+     SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+     List<Hit<Patent>> hits = response.hits().hits();
+     if (hits != null && hits.size() > 0) {
+         hits.forEach(item -> {
+                     Patent patent = item.source();
+             projectIds.add(patent.getProjectId());
+                 }
+         );
+     }
+     return projectIds;
+
+ }
 }

+ 35 - 9
src/main/java/cn/cslg/pas/service/importPatent/ImportSinglePatentService.java

@@ -23,6 +23,7 @@ import cn.cslg.pas.domain.business.ReportProject;
 import cn.cslg.pas.domain.es.*;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.service.business.ReportProjectService;
+import cn.cslg.pas.service.business.es.EsMergePersonService;
 import cn.cslg.pas.service.business.es.EsService;
 import cn.cslg.pas.service.business.invalidReport.PatentClaimService;
 import cn.cslg.pas.service.common.FileManagerService;
@@ -107,7 +108,8 @@ public class ImportSinglePatentService {
     }
 
 
-    public Patent addSinglePatent(String patentNo) {
+    public PatentWithIdVO addSinglePatent(String patentNo) {
+        PatentWithIdVO patentWithIdVO =new PatentWithIdVO();
         StarPatentVO starPatentVO = new StarPatentVO();
         starPatentVO = this.getPatentFromWeb(patentNo);
         if (starPatentVO == null) {
@@ -119,15 +121,17 @@ public class ImportSinglePatentService {
         patentJoin.setName("patent");
         patent.setPatentJoin(patentJoin);
         try {
-            PatentWithIdVO patentWithIdVO = esService.getIdByPatentNo(patent.getPatentNo());
+             patentWithIdVO = esService.getIdByPatentNo(patent.getPatentNo());
             if (patentWithIdVO != null) {
-                return patentWithIdVO.getPatent();
+                return patentWithIdVO;
             }
             String patentId = esService.addPatent(patent);
+            patentWithIdVO.setPatent(patent);
+            patentWithIdVO.setId(patentId);
         } catch (Exception e) {
             return null;
         }
-        return patent;
+        return patentWithIdVO;
     }
 
     /**
@@ -440,7 +444,7 @@ public class ImportSinglePatentService {
         }
         //装载申请日
         if (patent.getAppDate() == null) {
-            if(worldPatentZhuLu.getAppDate()!=null&&!worldPatentZhuLu.getAppDate().equals("")) {
+            if (worldPatentZhuLu.getAppDate() != null && !worldPatentZhuLu.getAppDate().equals("")) {
                 Date date = DateUtils.strToDate(worldPatentZhuLu.getAppDate());
                 patent.setAppDate(date);
             }
@@ -448,7 +452,7 @@ public class ImportSinglePatentService {
         }
         //装载公开日
         if (patent.getPublicDate() == null) {
-            if(worldPatentZhuLu.getPubDate()!=null&&!worldPatentZhuLu.getPubDate().equals("")) {
+            if (worldPatentZhuLu.getPubDate() != null && !worldPatentZhuLu.getPubDate().equals("")) {
                 Date date = DateUtils.strToDate(worldPatentZhuLu.getPubDate());
                 patent.setPublicDate(date);
             }
@@ -884,6 +888,7 @@ public class ImportSinglePatentService {
 
     /**
      * 从OPS装载权利要求
+     *
      * @param uploadPatentWebDTO
      * @throws Exception
      */
@@ -904,9 +909,10 @@ public class ImportSinglePatentService {
 
     /**
      * 从OPS装载说明书
+     *
      * @throws Exception
      */
-    private void loadFullTextFromOPS(UploadPatentWebDTO uploadPatentWebDTO) throws Exception{
+    private void loadFullTextFromOPS(UploadPatentWebDTO uploadPatentWebDTO) throws Exception {
         Patent patent = uploadPatentWebDTO.getPatent();
         GetDescriptionInfoParamsDTO getDescriptionInfoParamsDTO = new GetDescriptionInfoParamsDTO();
         PatentNoDetailVO patentNoDetailVO = patentNoUtil.getPatentNoDetail(patent.getPatentNo());
@@ -923,7 +929,9 @@ public class ImportSinglePatentService {
     public byte[] getImages(String publicNo) throws IOException {
 
         String res = opsService.getImagesInfo(publicNo);
-        if(res==null){return null;}
+        if (res == null) {
+            return null;
+        }
         JSONObject jsonObject = JSONObject.parseObject(res);
         String imageInfo = jsonObject.getString("data");
         // 删除第一个 `[`
@@ -957,4 +965,22 @@ public class ImportSinglePatentService {
         }
     }
 
-}
+    public void saveAssoPatentProjectToEs(Integer projectId, String patentId) throws Exception {
+        //和专题库或报告进行关联
+        if (projectId != null) {
+            //根据projectId和专利id查询
+            if (patentId != null) {
+                Boolean ifInproject = esService.searchPatent(patentId, projectId);
+                if (!ifInproject) {
+                    Patent patentChild = new Patent();
+                    PatentJoin patentJoin = new PatentJoin();
+                    patentJoin.setParent(patentId);
+                    patentJoin.setName("project");
+                    patentChild.setPatentJoin(patentJoin);
+                    patentChild.setProjectId(projectId);
+                    esService.addChildPatent(patentChild, patentId);
+                }
+            }
+        }
+    }
+}

+ 423 - 0
src/main/resources/jsons/invalidReportProject.json

@@ -0,0 +1,423 @@
+[
+  {"name":"Id",
+    "type":"Integer",
+    "value":"id",
+    "field":"id",
+    "sqlField": "p.id",
+    "sqlClass": "getComSql",
+    "orderClass": "",
+    "groupClass":"",
+    "ifSearch":"false",
+    "ifGroup": "false",
+    "ifShow":"false",
+    "ifAsCondition": "true"
+  },
+  {"name":"创建月份",
+    "type":"DateTime",
+    "value":"createTimeMonth",
+    "field": "createTimeMonth",
+    "sqlField": "p.create_time",
+    "sqlClass": "getDateTimeMonthSql",
+    "orderClass": "getComOrder",
+    "groupClass":"getTimeGroup",
+    "ifSearch":"false",
+    "ifGroup": "true",
+    "ifShow":"false",
+    "ifAsCondition": "true"
+  },
+  {"name":"报告名称",
+  "type":"String",
+  "value":"name",
+  "field": "name",
+  "sqlField": "p.name",
+  "sqlClass": "getLikeSql",
+    "orderClass": "getComOrder",
+    "groupClass":"getComGroup",
+  "ifSearch":"true",
+  "ifGroup": "false",
+    "ifShow":"true",
+    "defaultHidden": "false",
+    "ifAsCondition": "true"
+
+},
+  {"name":"标的专利",
+    "type":"String",
+    "value":"signPatentNo",
+    "field": "signPatentNo",
+    "sqlField": "sign_patent_no",
+    "sqlClass": "getLikeSql",
+    "orderClass": "getComOrder",
+    "ifSearch":"true",
+    "ifGroup": "false",
+    "ifShow":"true",
+    "ifAsCondition": "true"
+  },
+  {"name":"专利名称",
+    "type":"String",
+    "value":"inventionName",
+    "field": "inventionName",
+    "sqlField": "rp.invention_name",
+    "sqlClass": "getLikeSql",
+    "orderClass": "getComOrder",
+    "ifSearch":"false",
+    "ifGroup": "false",
+    "ifShow":"true",
+    "ifAsCondition": "true"
+  },
+  {"name":"无效案号",
+    "type":"String",
+    "value":"caseNumber",
+    "field": "caseNumber",
+    "sqlField": "rp.case_number",
+    "sqlClass": "getComSql",
+    "orderClass": "getComOrder",
+    "groupClass":"getScenarioGroup",
+    "ifSearch":"false",
+    "ifGroup": "false",
+    "ifShow":"true",
+    "defaultHidden": "false"
+  },
+  {"name":"案件阶段",
+  "type":"String",
+  "value":"caseStage",
+  "field": "caseStage",
+  "sqlField": "rp.case_stage",
+  "sqlClass": "getComSql",
+  "orderClass": "getComOrder",
+  "groupClass":"getScenarioGroup",
+  "ifSearch":"false",
+  "ifGroup": "false",
+  "ifShow":"true",
+  "defaultHidden": "false"
+},
+  {"name":"报告结果",
+    "type":"Array",
+    "value":"cronNames",
+    "field": "cronNames",
+    "sqlField": "arc.cron_id",
+    "sqlClass": "getComSql",
+    "orderClass": "getCronsNameOrder",
+    "groupClass":"getTimeGroup",
+    "ifSearch":"true",
+    "ifGroup": "false",
+    "ifShow":"true",
+    "defaultHidden": "false",
+    "ifAsCondition": "true"
+  },
+  {"name":"请求人",
+    "type":"String",
+    "value":"invalidApplication",
+    "field": "invalidApplication",
+    "sqlField": "rp.invalid_application",
+    "sqlClass": "getLikeSql",
+    "orderClass": "getComOrder",
+    "ifSearch":"false",
+    "ifGroup": "false",
+    "ifShow":"true",
+    "ifAsCondition": "true"
+  },
+  {
+    "name": "专利权人",
+    "type": "Array",
+    "value": "rightHolder",
+    "field": "rightHolder",
+    "sqlField": "p.create_id",
+    "sqlClass": "getCreateNameSql",
+    "orderClass": "getCreateNameOrder",
+    "groupClass":"getComGroup",
+    "ifSearch":"false",
+    "ifGroup": "false",
+    "ifShow":"true",
+    "defaultHidden": "false"
+  },
+  {"name":"创建人",
+    "type":"String",
+    "value":"createName",
+    "field": "createName",
+    "sqlField": "p.create_id",
+    "sqlClass": "getCreateNameSql",
+    "orderClass": "getCreateNameOrder",
+    "groupClass":"getComGroup",
+    "ifSearch":"true",
+    "ifGroup": "false",
+    "ifShow":"true",
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
+  },
+  {"name":"负责人名称",
+    "type":"String",
+    "value":"headName",
+    "field": "headName",
+    "sqlField": "head_id",
+    "sqlClass": "getCreateNameSql",
+    "orderClass": "getCreateNameOrder",
+    "groupClass":"getComGroup",
+    "ifSearch":"true",
+    "ifGroup": "false",
+    "ifShow":"true",
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
+  },
+  {"name":"负责部门",
+    "type":"String",
+    "value":"departmentName",
+    "field": "departmentName",
+    "sqlField": "p.department_id",
+    "sqlClass": "getDepartmentNameSql",
+    "orderClass": "getDepartmentNameOrder",
+    "groupClass":"getScenarioGroup",
+    "ifSearch":"true",
+    "ifGroup": "false",
+    "ifShow":"true",
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
+  },
+  {"name":"委托方",
+    "type":"String",
+    "value":"entrustName",
+    "field": "entrustName",
+    "sqlField": "entrust_id",
+    "sqlClass": "getEntrustTrueNameSql",
+    "orderClass": "getEntrustOrder",
+    "groupClass":"getEntrustGroup",
+    "ifSearch":"true",
+    "ifGroup": "false",
+    "ifShow":"true",
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
+  },
+
+  {"name":"委托方",
+    "type":"String",
+    "value":"entrustNameTrue",
+    "field": "entrustNameTrue",
+    "sqlField": "entrust_id",
+    "sqlClass": "getEntrustTrueNameSql",
+    "orderClass": "getEntrustOrder",
+    "groupClass":"getEntrustGroup",
+    "ifSearch":"false",
+    "ifGroup": "true",
+    "ifShow":"false",
+    "defaultHidden": "false",
+    "ifAsCondition": "true"
+  },
+  {"name":"创建时间",
+    "type":"DateTime",
+    "value":"createTime",
+    "field": "createTime",
+    "sqlField": "p.create_time",
+    "sqlClass": "getDateTimeSql",
+    "orderClass": "getComOrder",
+    "groupClass":"getTimeGroup",
+    "ifSearch":"true",
+    "ifGroup": "false",
+    "ifShow":"true",
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
+  },
+  {"name":"报告类型",
+    "type":"String",
+    "value":"reportTypeName",
+    "field": "reportTypeName",
+    "sqlField": "rp.report_type",
+    "sqlClass": "getComSql",
+    "orderClass": "getComOrder",
+    "groupClass":"getReportTypeGroup",
+    "ifSearch":"false",
+    "ifGroup": "true",
+    "ifShow":"true",
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
+  },
+  {"name":"报告类型",
+    "type":"Array",
+    "value":"reportType",
+    "field": "reportType",
+    "sqlField": "rp.report_type",
+    "sqlClass": "getComSql",
+    "ifSearch":"true",
+    "ifGroup": "false",
+    "ifShow":"false",
+    "ifAsCondition": "true"
+  },
+  {"name":"报告状态",
+    "type":"String",
+    "value":"statusName",
+    "field": "statusName",
+    "sqlField": "rp.status",
+    "sqlClass": "getComSql",
+    "orderClass": "getComOrder",
+    "ifSearch":"false",
+    "ifGroup": "false",
+    "defaultHidden": "true",
+    "ifShow":"true"
+  },
+  {"name":"报告状态",
+    "type":"Array",
+    "value":"status",
+    "field": "status",
+    "sqlField": "rp.status",
+    "sqlClass": "getComSql",
+    "orderClass": "getComOrder",
+    "ifSearch":"true",
+    "ifGroup": "false",
+    "ifShow":"false",
+    "ifAsCondition": "true"
+  },
+  {
+    "name": "结论论述",
+    "type": "Integer",
+    "value": "cronDescription",
+    "field": "cronDescription",
+    "sqlField": "report_type",
+    "sqlClass": "getComSql",
+    "orderClass": "getComOrder",
+    "ifSearch": "false",
+    "ifGroup": "false",
+    "defaultHidden": "true",
+    "ifShow": "true"
+  },
+  {"name":"描述",
+    "type":"String",
+    "value":"description",
+    "field": "description",
+    "sqlField": "p.description",
+    "sqlClass": "getComSql",
+    "orderClass": "getComOrder",
+    "ifSearch":"false",
+    "ifGroup": "false",
+    "defaultHidden": "true",
+    "ifShow":"true"
+  },
+  {"name":"相关事件",
+    "type":"Array",
+    "value":"eventNames",
+    "field": "eventNames",
+    "sqlField": "aspe.event_id",
+    "sqlClass": "getComSql",
+    "orderClass": "getEventOrder",
+    "groupClass":"getScenarioGroup",
+    "ifSearch":"false",
+    "ifGroup": "false",
+    "defaultHidden": "true",
+    "ifShow":"true"
+  },
+  {"name":"相关事件",
+    "type":"String",
+    "value":"eventNames",
+    "field": "eventNames",
+    "sqlField": "aspe.event_id",
+    "sqlClass": "getEventNameSql",
+    "orderClass": "getEventOrder",
+    "groupClass":"getScenarioGroup",
+    "ifSearch":"true",
+    "ifGroup": "false",
+    "ifShow":"false",
+    "ifAsCondition": "true"
+  },
+  {"name":"内部卷号",
+    "type":"String",
+    "value":"volumeNumber",
+    "field": "volumeNumber",
+    "sqlField": "p.volume_number",
+    "sqlClass": "getComSql",
+    "orderClass": "getComOrder",
+    "groupClass":"getScenarioGroup",
+    "ifSearch":"false",
+    "ifGroup": "false",
+    "ifShow":"true",
+    "defaultHidden": "true"
+  },
+  {"name":"产品/技术",
+  "type":"String",
+  "value":"productOrTech",
+  "field": "productOrTech",
+  "sqlField": "rp.product_or_tech",
+  "sqlClass": "getLikeSql",
+  "orderClass": "getComOrder",
+  "ifSearch":"false",
+  "ifGroup": "false",
+  "ifShow":"true",
+    "defaultHidden": "true"
+},
+  {"name":"调查类型",
+    "type":"Array",
+    "value":"matterNames",
+    "field": "matterNames",
+    "sqlField": "aspm.matter_id",
+    "sqlClass": "getComSql",
+    "orderClass": "getMatterOrder",
+    "groupClass":"getMatterGroup",
+    "ifSearch":"true",
+    "ifGroup": "true",
+    "ifShow":"true",
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
+  },
+  {"name":"应用场景",
+    "type":"Array",
+    "value":"scenarioNames",
+    "field": "scenarioNames",
+    "sqlField": "asps.scenario_id",
+    "sqlClass": "getComSql",
+    "orderClass": "getProjectScenarioOrder",
+    "groupClass":"getScenarioGroup",
+    "ifSearch":"true",
+    "ifGroup": "true",
+    "ifShow":"true",
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
+  },
+  {"name":"国知局受理年份",
+    "type":"DateTime",
+    "value":"acceptYear",
+    "field": "acceptYear",
+    "sqlField": "rp.accept_year",
+    "sqlClass": "getDateTimeMonthSql",
+    "orderClass": "getComOrder",
+    "groupClass":"getTimeGroup",
+    "ifSearch":"false",
+    "ifGroup": "false",
+    "ifShow":"true",
+    "ifAsCondition": "true"
+  },
+  {"name":"请求人代理所",
+    "type":"String",
+    "value":"applicantAgency",
+    "field": "applicantAgency",
+    "sqlField": "rp.applicant_agency",
+    "sqlClass": "getComSql",
+    "orderClass": "getComOrder",
+    "groupClass":"getScenarioGroup",
+    "ifSearch":"false",
+    "ifGroup": "false",
+    "ifShow":"true",
+    "defaultHidden": "false"
+  },
+  {"name":"专利权人代理所",
+    "type":"String",
+    "value":"rightHolderAgency",
+    "field": "rightHolderAgency",
+    "sqlField": "rp.rightHolder_agency",
+    "sqlClass": "getComSql",
+    "orderClass": "getComOrder",
+    "groupClass":"getScenarioGroup",
+    "ifSearch":"false",
+    "ifGroup": "false",
+    "ifShow":"true",
+    "defaultHidden": "false"
+  },
+  {"name":"证据库",
+    "type":"String",
+    "value":"proofName",
+    "field": "proofName",
+    "sqlField": "p.id",
+    "sqlClass": "getProofNameSql",
+    "orderClass": "getProjectScenarioOrder",
+    "groupClass":"getScenarioGroup",
+    "ifSearch":"true",
+    "ifGroup": "false",
+    "ifShow":"false",
+    "ifAsCondition": "true"
+  }
+]

+ 1 - 1
src/main/resources/mapper/ReportProjectMapper.xml

@@ -13,7 +13,7 @@
         patentType,rp.case_number as
         caseNumber ,rp.issue_number as issueNumber ,rp.invalid_application as invalidApplication ,rp.cron_description as
         cronDescription,rp.act_type as actType ,rp.patent_type as patentType ,rp.current_application as
-        currentApplication, rp.invention_name as inventionName,p.contract_no as contractNo,rp.carding_opinion from report as rp left join project as p
+        currentApplication, rp.invention_name as inventionName,p.contract_no as contractNo,rp.carding_opinion ,rp.accept_year,rp.applicant_agency,rp.right_holder_agency,rp.case_stage from report as rp left join project as p
         on rp.project_id =p.id left join asso_report_cron arc on p.id =arc.project_id
         left join (select * from asso_project_event where scenario_id is not null ) as asps on p.id = asps.project_id
         left join (select * from asso_project_event where event_id is not null ) as aspe on p.id = aspe.project_id