Browse Source

Merge remote-tracking branch 'origin/master'

lwhhszx 1 year ago
parent
commit
059bfed17e
37 changed files with 1559 additions and 190 deletions
  1. 2 0
      src/main/java/cn/cslg/pas/common/dto/business/EsCountDetailDTO.java
  2. 28 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddAdminProceedDTO.java
  3. 47 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddInvalidDecisionFileDTO.java
  4. 32 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddOralTrailDTO.java
  5. 27 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddStateOpinionDTO.java
  6. 28 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateAdminProceedDTO.java
  7. 45 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateInvalidDecisionFileDTO.java
  8. 33 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateOralTrailDTO.java
  9. 28 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateStateOpinionDTO.java
  10. 1 1
      src/main/java/cn/cslg/pas/common/utils/parseQueryToTree/expressManager.java
  11. 29 0
      src/main/java/cn/cslg/pas/common/vo/invalidVO/AdminProceedVO.java
  12. 40 0
      src/main/java/cn/cslg/pas/common/vo/invalidVO/InvalidDecisionFileVO.java
  13. 1 0
      src/main/java/cn/cslg/pas/common/vo/invalidVO/InvalidRequestFileVO.java
  14. 32 0
      src/main/java/cn/cslg/pas/common/vo/invalidVO/OralTrailVO.java
  15. 20 0
      src/main/java/cn/cslg/pas/common/vo/invalidVO/ReportAffairVO.java
  16. 27 0
      src/main/java/cn/cslg/pas/common/vo/invalidVO/StateOpinionVO.java
  17. 1 0
      src/main/java/cn/cslg/pas/common/vo/patentCount/GetAllPatentCountVO.java
  18. 80 6
      src/main/java/cn/cslg/pas/controller/ReportAffairController.java
  19. 27 0
      src/main/java/cn/cslg/pas/domain/business/AdminProceed.java
  20. 45 0
      src/main/java/cn/cslg/pas/domain/business/InvalidDecisionFile.java
  21. 39 0
      src/main/java/cn/cslg/pas/domain/business/OralTrail.java
  22. 13 0
      src/main/java/cn/cslg/pas/mapper/AdminProceedMapper.java
  23. 13 0
      src/main/java/cn/cslg/pas/mapper/InvalidDecisionFileMapper.java
  24. 13 0
      src/main/java/cn/cslg/pas/mapper/OralTrailMapper.java
  25. 145 0
      src/main/java/cn/cslg/pas/service/business/AdminProceedService.java
  26. 142 0
      src/main/java/cn/cslg/pas/service/business/InvalidDecisionFileService.java
  27. 1 0
      src/main/java/cn/cslg/pas/service/business/InvalidRequestFileService.java
  28. 149 0
      src/main/java/cn/cslg/pas/service/business/OralTrailService.java
  29. 162 11
      src/main/java/cn/cslg/pas/service/business/ReportAffairService.java
  30. 37 18
      src/main/java/cn/cslg/pas/service/business/es/EsCountService.java
  31. 24 17
      src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java
  32. 29 32
      src/main/java/cn/cslg/pas/service/business/es/EsService.java
  33. 95 45
      src/main/java/cn/cslg/pas/service/business/invalidReport/PatentClaimHistoryService.java
  34. 16 4
      src/main/java/cn/cslg/pas/service/query/FormatQueryService.java
  35. 44 44
      src/main/resources/jsons/esCountAnalysis.json
  36. 1 1
      src/main/resources/jsons/patent.json
  37. 63 11
      src/test/java/cn/cslg/pas/service/EventServiceTests.java

+ 2 - 0
src/main/java/cn/cslg/pas/common/dto/business/EsCountDetailDTO.java

@@ -16,5 +16,7 @@ public class EsCountDetailDTO {
     private String name;
     //数量
     private Long number;
+    //限制数量
+    private Integer topN;
 
 }

+ 28 - 0
src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddAdminProceedDTO.java

@@ -0,0 +1,28 @@
+package cn.cslg.pas.common.dto.invalidDTO;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+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/28
+ */
+@Data
+public class AddAdminProceedDTO {
+    private Integer projectId;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date proceedingTime;
+
+    private String conclusion;
+
+    private List<String> fileGuids;
+
+    private String description;
+}

+ 47 - 0
src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddInvalidDecisionFileDTO.java

@@ -0,0 +1,47 @@
+package cn.cslg.pas.common.dto.invalidDTO;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 上传无效决定书
+ * @Author xiexiang
+ * @Date 2023/12/28
+ */
+@Data
+public class AddInvalidDecisionFileDTO {
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date invalidDecisionTime;
+
+    private Integer projectId;
+
+    /**
+     * 决定书号码
+     */
+    private String fileNo;
+
+    /**
+     * 法律依据
+     */
+    private String legalBase;
+
+    /**
+     * 决定要点
+     */
+    private String decisionKey;
+
+    private String conclusion;
+
+    private List<String> fileGuids;
+
+    private String description;
+
+}

+ 32 - 0
src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddOralTrailDTO.java

@@ -0,0 +1,32 @@
+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/23
+ */
+@Data
+public class AddOralTrailDTO {
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date oralTrailTime;
+
+    private String position;
+
+    private String participator;
+
+    private Integer projectId;
+
+    private List<String> fileGuids;
+
+    private String description;
+
+    private String remark;
+}

+ 27 - 0
src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddStateOpinionDTO.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/28
+ */
+@Data
+public class AddStateOpinionDTO {
+    private Integer projectId;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date stateReplyTime;
+
+    private String conclusion;
+
+    private List<String> fileGuids;
+
+    private String description;
+}

+ 28 - 0
src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateAdminProceedDTO.java

@@ -0,0 +1,28 @@
+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/28
+ */
+@Data
+public class UpdateAdminProceedDTO {
+    private Integer proceedingId;
+    private Integer projectId;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date proceedingTime;
+
+    private String conclusion;
+
+    private List<String> fileGuids;
+
+    private String description;
+}

+ 45 - 0
src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateInvalidDecisionFileDTO.java

@@ -0,0 +1,45 @@
+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/28
+ */
+@Data
+public class UpdateInvalidDecisionFileDTO {
+    private Integer invalidDecisionFileId;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date invalidDecisionTime;
+
+    private Integer projectId;
+    /**
+     * 决定书号码
+     */
+    private String fileNo;
+
+    /**
+     * 法律依据
+     */
+    private String legalBase;
+
+    /**
+     * 决定要点
+     */
+    private String decisionKey;
+
+    private String conclusion;
+
+    private List<String> fileGuids;
+
+    private String description;
+
+}

+ 33 - 0
src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateOralTrailDTO.java

@@ -0,0 +1,33 @@
+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/23
+ */
+@Data
+public class UpdateOralTrailDTO {
+    private Integer oralTrailId;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date oralTrailTime;
+
+    private String position;
+
+    private String participator;
+
+    private Integer projectId;
+
+    private List<String> fileGuids;
+
+    private String description;
+
+    private String remark;
+}

+ 28 - 0
src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateStateOpinionDTO.java

@@ -0,0 +1,28 @@
+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/28
+ */
+@Data
+public class UpdateStateOpinionDTO {
+    private Integer stateOpinionId;
+    private Integer projectId;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date stateReplyTime;
+
+    private String conclusion;
+
+    private List<String> fileGuids;
+
+    private String description;
+}

+ 1 - 1
src/main/java/cn/cslg/pas/common/utils/parseQueryToTree/expressManager.java

@@ -45,7 +45,7 @@ public class expressManager {
 
         oOR = new operate();
         oOR.Code = "~";
-        oOR.ShowName = ">";
+        oOR.ShowName = "TO";
         oOR.type = enuType.Logic;
         oOR.priorityVale = 13;
         oOR.operateValue = 2;

+ 29 - 0
src/main/java/cn/cslg/pas/common/vo/invalidVO/AdminProceedVO.java

@@ -0,0 +1,29 @@
+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;
+
+/**
+ * 行政诉讼书返回VO
+ * @Author xiexiang
+ * @Date 2023/12/28
+ */
+@Data
+public class AdminProceedVO {
+    private Integer proceedingId;
+    private Integer projectId;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date proceedingTime;
+
+    private String conclusion;
+
+    private List<String> fileGuids;
+
+    private String description;
+}

+ 40 - 0
src/main/java/cn/cslg/pas/common/vo/invalidVO/InvalidDecisionFileVO.java

@@ -0,0 +1,40 @@
+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;
+
+/**
+ * 无效决定书VO
+ * @Author xiexiang
+ * @Date 2023/12/28
+ */
+@Data
+public class InvalidDecisionFileVO {
+    private Integer invalidDecisionFileId;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date invalidDecisionTime;
+
+    private Integer projectId;
+    /**
+     * 决定书号码
+     */
+    private String fileNo;
+
+    /**
+     * 法律依据
+     */
+    private String legalBase;
+
+    /**
+     * 决定要点
+     */
+    private String decisionKey;
+
+    private String conclusion;
+}

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

@@ -12,6 +12,7 @@ import java.util.Date;
  */
 @Data
 public class InvalidRequestFileVO {
+    private Integer invalidRequestFileId;
     /**
      * 无效请求日
      */

+ 32 - 0
src/main/java/cn/cslg/pas/common/vo/invalidVO/OralTrailVO.java

@@ -0,0 +1,32 @@
+package cn.cslg.pas.common.vo.invalidVO;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 口审记录VO
+ * @Author xiexiang
+ * @Date 2023/12/28
+ */
+@Data
+public class OralTrailVO {
+    private Integer oralTrailId;
+    /**
+     * 口审地点
+     */
+    private String position;
+
+    private Date oralTrailTime;
+
+    /**
+     * 参与人
+     */
+    private String participator;
+
+    /**
+     * 笔录描述
+     */
+    private String description;
+}

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

@@ -59,4 +59,24 @@ public class ReportAffairVO {
      * 无效请求书返回VO
      */
     private InvalidRequestFileVO invalidRequestFileVO;
+
+    /**
+     * 口审记录返回VO
+     */
+    private OralTrailVO oralTrailVO;
+
+    /**
+     * 无效决定书返回VO
+     */
+    private InvalidDecisionFileVO invalidDecisionFileVO;
+
+    /**
+     * 行政诉讼书返回VO
+     */
+    private AdminProceedVO adminProceedVO;
+
+    /**
+     * 陈述意见书返回VO
+     */
+    private StateOpinionVO stateOpinionVO;
 }

+ 27 - 0
src/main/java/cn/cslg/pas/common/vo/invalidVO/StateOpinionVO.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/28
+ */
+@Data
+public class StateOpinionVO {
+    private Integer stateOpinionId;
+
+    private Integer projectId;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date stateReplyTime;
+
+    private List<String> fileGuids;
+
+    private String description;
+}

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

@@ -28,4 +28,5 @@ public class GetAllPatentCountVO {
     //-1专利著录 0自定义字段 7产品 8产品类别 9技术分类
     private Integer filedKind;
     private Boolean defaultShowStats;
+    private String field;
 }

+ 80 - 6
src/main/java/cn/cslg/pas/controller/ReportAffairController.java

@@ -1,16 +1,12 @@
 package cn.cslg.pas.controller;
 
 import cn.cslg.pas.common.core.base.Constants;
-import cn.cslg.pas.common.dto.invalidDTO.AddInvalidRequestFileDTO;
-import cn.cslg.pas.common.dto.invalidDTO.QueryReportAffairDTO;
-import cn.cslg.pas.common.dto.invalidDTO.UpdateInvalidRequestFileDTO;
+import cn.cslg.pas.common.dto.invalidDTO.*;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.common.vo.invalidVO.ReportAffairVO;
 import cn.cslg.pas.exception.XiaoShiException;
-import cn.cslg.pas.factorys.businessFactory.Business;
-import cn.cslg.pas.service.business.InvalidRequestFileService;
-import cn.cslg.pas.service.business.ReportAffairService;
+import cn.cslg.pas.service.business.*;
 import io.swagger.v3.oas.annotations.Operation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,6 +28,12 @@ public class ReportAffairController {
     private InvalidRequestFileService invalidRequestFileService;
     @Autowired
     private ReportAffairService reportAffairService;
+    @Autowired
+    private OralTrailService oralTrailService;
+    @Autowired
+    private InvalidDecisionFileService invalidDecisionFileService;
+    @Autowired
+    private AdminProceedService adminProceedService;
 
     @Operation(summary = "上传无效请求书")
     @PostMapping("/addInvalidRequestFile")
@@ -72,4 +74,76 @@ public class ReportAffairController {
             throw new XiaoShiException("需要删除的ids不能为空!");
         }
     }
+
+    @Operation(summary = "上传口审记录")
+    @PostMapping("/addOralTrail")
+    public Response addOralTrail(@RequestBody AddOralTrailDTO addOralTrailDTO) throws Exception {
+        Integer id = oralTrailService.add(addOralTrailDTO);
+        Records records = new Records();
+        records.setData(id);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "修改口审记录")
+    @PostMapping("/updateOralTrail")
+    public Response updateOralTrail(@RequestBody UpdateOralTrailDTO updateOralTrailDTO) throws Exception {
+        Integer id = oralTrailService.update(updateOralTrailDTO);
+        Records records = new Records();
+        records.setData(id);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "上传无效决定书")
+    @PostMapping("/addInvalidDecisionFile")
+    public Response addInvalidDecisionFile(@RequestBody AddInvalidDecisionFileDTO addInvalidDecisionFileDTO) throws Exception {
+        Integer id = invalidDecisionFileService.add(addInvalidDecisionFileDTO);
+        Records records = new Records();
+        records.setData(id);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "修改无效决定书")
+    @PostMapping("/updateInvalidDecisionFile")
+    public Response updateInvalidDecisionFile(@RequestBody UpdateInvalidDecisionFileDTO updateInvalidDecisionFileDTO) throws Exception {
+        Integer id = invalidDecisionFileService.update(updateInvalidDecisionFileDTO);
+        Records records = new Records();
+        records.setData(id);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "上传行政诉讼书")
+    @PostMapping("/addAdminProceed")
+    public Response addAdminProceed(@RequestBody AddAdminProceedDTO addAdminProceedDTO) throws Exception {
+        Integer id = adminProceedService.add(addAdminProceedDTO);
+        Records records = new Records();
+        records.setData(id);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "修改行政诉讼书")
+    @PostMapping("/updateAdminProceed")
+    public Response updateAdminProceed(@RequestBody UpdateAdminProceedDTO updateAdminProceedDTO) throws Exception {
+        Integer id = adminProceedService.update(updateAdminProceedDTO);
+        Records records = new Records();
+        records.setData(id);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "上传陈述意见书")
+    @PostMapping("/addStateOpinion")
+    public Response addStateOpinion(@RequestBody AddStateOpinionDTO addStateOpinionDTO) throws Exception {
+        Integer id = reportAffairService.addStateOpinion(addStateOpinionDTO);
+        Records records = new Records();
+        records.setData(id);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "修改陈述意见书")
+    @PostMapping("/updateStateOpinion")
+    public Response updateStateOpinion(@RequestBody UpdateStateOpinionDTO updateStateOpinionDTO) throws Exception {
+        Integer id = reportAffairService.updateStateOpinion(updateStateOpinionDTO);
+        Records records = new Records();
+        records.setData(id);
+        return Response.success(records);
+    }
 }

+ 27 - 0
src/main/java/cn/cslg/pas/domain/business/AdminProceed.java

@@ -0,0 +1,27 @@
+package cn.cslg.pas.domain.business;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * 行政诉讼书
+ * @Author xiexiang
+ * @Date 2023/12/28
+ */
+@Data
+@TableName("admin_proceed")
+public class AdminProceed extends BaseEntity<AdminProceed> {
+    /**
+     * 结论
+     */
+    @TableField(value = "conclusion")
+    private String conclusion;
+
+    /**
+     * 报告事务id
+     */
+    @TableField(value = "report_affair_id")
+    private Integer reportAffairId;
+}

+ 45 - 0
src/main/java/cn/cslg/pas/domain/business/InvalidDecisionFile.java

@@ -0,0 +1,45 @@
+package cn.cslg.pas.domain.business;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * 无效决定书
+ * @Author xiexiang
+ * @Date 2023/12/28
+ */
+@Data
+@TableName("invalid_decision_file")
+public class InvalidDecisionFile extends BaseEntity<InvalidDecisionFile> {
+    /**
+     * 报告事务id
+     */
+    @TableField(value = "report_affair_id")
+    private Integer reportAffairId;
+
+    /**
+     * 决定书号码
+     */
+    @TableField(value = "file_no")
+    private String fileNo;
+
+    /**
+     * 法律依据
+     */
+    @TableField(value = "legal_base")
+    private String legalBase;
+
+    /**
+     * 决定要点
+     */
+    @TableField(value = "decision_key")
+    private String decisionKey;
+
+    /**
+     * 结论
+     */
+    @TableField(value = "conclusion")
+    private String conclusion;
+}

+ 39 - 0
src/main/java/cn/cslg/pas/domain/business/OralTrail.java

@@ -0,0 +1,39 @@
+package cn.cslg.pas.domain.business;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * 口审记录
+ * @Author xiexiang
+ * @Date 2023/12/28
+ */
+@Data
+@TableName("oral_trail")
+public class OralTrail extends BaseEntity<OralTrail> {
+    /**
+     * 口审地点
+     */
+    @TableField(value = "position")
+    private String position;
+
+    /**
+     * 参与人
+     */
+    @TableField(value = "participator")
+    private String participator;
+
+    /**
+     * 笔录描述
+     */
+    @TableField(value = "description")
+    private String description;
+
+    /**
+     * 报告事务id
+     */
+    @TableField(value = "report_affair_id")
+    private Integer reportAffairId;
+}

+ 13 - 0
src/main/java/cn/cslg/pas/mapper/AdminProceedMapper.java

@@ -0,0 +1,13 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.business.AdminProceed;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/12/28
+ */
+@Repository
+public interface AdminProceedMapper extends BaseMapper<AdminProceed> {
+}

+ 13 - 0
src/main/java/cn/cslg/pas/mapper/InvalidDecisionFileMapper.java

@@ -0,0 +1,13 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.business.InvalidDecisionFile;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/12/28
+ */
+@Repository
+public interface InvalidDecisionFileMapper extends BaseMapper<InvalidDecisionFile> {
+}

+ 13 - 0
src/main/java/cn/cslg/pas/mapper/OralTrailMapper.java

@@ -0,0 +1,13 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.business.OralTrail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/12/28
+ */
+@Repository
+public interface OralTrailMapper extends BaseMapper<OralTrail> {
+}

+ 145 - 0
src/main/java/cn/cslg/pas/service/business/AdminProceedService.java

@@ -0,0 +1,145 @@
+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.UpdateAdminProceedDTO;
+import cn.cslg.pas.common.vo.invalidVO.AdminProceedVO;
+import cn.cslg.pas.common.vo.invalidVO.OralTrailVO;
+import cn.cslg.pas.domain.business.AdminProceed;
+import cn.cslg.pas.domain.business.AssoReportAffairFile;
+import cn.cslg.pas.domain.business.OralTrail;
+import cn.cslg.pas.domain.business.ReportAffair;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.mapper.AdminProceedMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/12/28
+ */
+@Slf4j
+@Service
+public class AdminProceedService extends ServiceImpl<AdminProceedMapper, AdminProceed> {
+    @Autowired
+    private ReportAffairService reportAffairService;
+
+    @Autowired
+    private AssoReportAffairFileService assoReportAffairFileService;
+
+    public Integer add(AddAdminProceedDTO addDto){
+        if (addDto == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        Integer projectId = addDto.getProjectId();
+        if (projectId == null) {
+            throw new XiaoShiException("报告id为空");
+        }
+        //1. 首先上传报告事务,拿到报告事务id
+        ReportAffairDTO reportAffairDTO = new ReportAffairDTO();
+        reportAffairDTO.setProjectId(projectId);
+        //行政诉讼书 4
+        reportAffairDTO.setAffairType(4);
+        //发生时间是口审时间
+        reportAffairDTO.setOccurredTime(addDto.getProceedingTime());
+        //备注
+        reportAffairDTO.setDescription(addDto.getDescription());
+        Integer reportAffairId = reportAffairService.addReportAffair(reportAffairDTO);
+
+        if (reportAffairId == null) {
+            throw new XiaoShiException("上传报告事务失败");
+        }
+        //2. 上传行政诉讼
+        AdminProceed adminLitigation = new AdminProceed();
+        adminLitigation.setConclusion(addDto.getConclusion());
+        adminLitigation.setReportAffairId(reportAffairId);
+        adminLitigation.insert();
+        //3. 添加报告事务与文件关联
+        List<String> fileGuids = addDto.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;
+    }
+
+    public AdminProceedVO getAdminProceed(Integer reportAffairId) {
+        LambdaQueryWrapper<AdminProceed> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AdminProceed::getReportAffairId, reportAffairId);
+        AdminProceed adminProceed = this.getOne(queryWrapper, false);
+        AdminProceedVO adminProceedVO = new AdminProceedVO();
+        if (adminProceed != null) {
+            BeanUtils.copyProperties(adminProceed, adminProceedVO);
+            adminProceedVO.setProceedingId(adminProceed.getId());
+        }
+        ReportAffair reportAffair = reportAffairService.getById(reportAffairId);
+        adminProceedVO.setProceedingTime(reportAffair.getOccurredTime());
+        return adminProceedVO;
+    }
+
+    /**
+     * 更新行政记录
+     * @param updateDTO
+     * @return
+     */
+    public Integer update(UpdateAdminProceedDTO updateDTO){
+        if (updateDTO == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        Integer projectId = updateDTO.getProjectId();
+        Integer id = updateDTO.getProceedingId();
+        if (id == null) {
+            throw new XiaoShiException("id为空");
+        }
+        if (projectId == null) {
+            throw new XiaoShiException("报告id为空");
+        }
+        //1. 根据id查出行政记录
+        AdminProceed al = this.getById(id);
+        if (al == null) {
+            throw new XiaoShiException("oralTrail查询错误");
+        }
+        BeanUtils.copyProperties(updateDTO, al);
+        al.updateById();
+        Integer reportAffairId = al.getReportAffairId();
+        //2. 拿到报告事务id,获取报告事务
+        ReportAffair reportAffair = reportAffairService.getById(reportAffairId);
+        reportAffair.setProjectId(projectId);
+        //发生时间是无效请求日
+        reportAffair.setOccurredTime(updateDTO.getProceedingTime());
+        //备注
+        reportAffair.setDescription(updateDTO.getDescription());
+        reportAffair.updateById();
+        //3. 更新报告事务与文件关联
+        List<String> fileGuids = updateDTO.getFileGuids();
+        if (fileGuids != null && !fileGuids.isEmpty()) {
+            LambdaQueryWrapper<AssoReportAffairFile> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(AssoReportAffairFile::getReportAffairId, reportAffairId);
+            assoReportAffairFileService.remove(queryWrapper);
+
+            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;
+    }
+
+}

+ 142 - 0
src/main/java/cn/cslg/pas/service/business/InvalidDecisionFileService.java

@@ -0,0 +1,142 @@
+package cn.cslg.pas.service.business;
+
+import cn.cslg.pas.common.dto.business.ReportAffairDTO;
+import cn.cslg.pas.common.dto.invalidDTO.AddInvalidDecisionFileDTO;
+import cn.cslg.pas.common.dto.invalidDTO.UpdateInvalidDecisionFileDTO;
+import cn.cslg.pas.common.vo.invalidVO.InvalidDecisionFileVO;
+import cn.cslg.pas.common.vo.invalidVO.OralTrailVO;
+import cn.cslg.pas.domain.business.AssoReportAffairFile;
+import cn.cslg.pas.domain.business.InvalidDecisionFile;
+import cn.cslg.pas.domain.business.OralTrail;
+import cn.cslg.pas.domain.business.ReportAffair;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.mapper.InvalidDecisionFileMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/12/28
+ */
+@Slf4j
+@Service
+public class InvalidDecisionFileService extends ServiceImpl<InvalidDecisionFileMapper, InvalidDecisionFile> {
+    @Autowired
+    private ReportAffairService reportAffairService;
+
+    @Autowired
+    private AssoReportAffairFileService assoReportAffairFileService;
+
+    public Integer add(AddInvalidDecisionFileDTO addInvalidDecisionFileDTO){
+        if (addInvalidDecisionFileDTO == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        Integer projectId = addInvalidDecisionFileDTO.getProjectId();
+        if (projectId == null) {
+            throw new XiaoShiException("报告id为空");
+        }
+        //1. 首先上传报告事务,拿到报告事务id
+        ReportAffairDTO reportAffairDTO = new ReportAffairDTO();
+        reportAffairDTO.setProjectId(projectId);
+        //无效决定书 3
+        reportAffairDTO.setAffairType(3);
+        //发生时间是口审时间
+        reportAffairDTO.setOccurredTime(addInvalidDecisionFileDTO.getInvalidDecisionTime());
+        //备注
+        reportAffairDTO.setDescription(addInvalidDecisionFileDTO.getDescription());
+        Integer reportAffairId = reportAffairService.addReportAffair(reportAffairDTO);
+
+        if (reportAffairId == null) {
+            throw new XiaoShiException("上传报告事务失败");
+        }
+        //2. 上传无效决定书
+        InvalidDecisionFile invalidDecisionFile = new InvalidDecisionFile();
+        invalidDecisionFile.setFileNo(addInvalidDecisionFileDTO.getFileNo());
+        invalidDecisionFile.setDecisionKey(addInvalidDecisionFileDTO.getDecisionKey());
+        invalidDecisionFile.setConclusion(addInvalidDecisionFileDTO.getConclusion());
+        invalidDecisionFile.setLegalBase(addInvalidDecisionFileDTO.getLegalBase());
+        invalidDecisionFile.setReportAffairId(reportAffairId);
+        invalidDecisionFile.insert();
+        //3. 添加报告事务与文件关联
+        List<String> fileGuids = addInvalidDecisionFileDTO.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;
+    }
+
+    public Integer update(UpdateInvalidDecisionFileDTO updateInvalidDecisionFileDTO){
+        if (updateInvalidDecisionFileDTO == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        Integer projectId = updateInvalidDecisionFileDTO.getProjectId();
+        Integer id = updateInvalidDecisionFileDTO.getInvalidDecisionFileId();
+        if (id == null) {
+            throw new XiaoShiException("id为空");
+        }
+        if (projectId == null) {
+            throw new XiaoShiException("报告id为空");
+        }
+        //1. 根据id查出无效决定书
+        InvalidDecisionFile invalidDecisionFile = this.getById(id);
+        if (invalidDecisionFile == null) {
+            throw new XiaoShiException("invalidDecisionFile查询错误");
+        }
+        BeanUtils.copyProperties(updateInvalidDecisionFileDTO, invalidDecisionFile);
+        invalidDecisionFile.updateById();
+        Integer reportAffairId = invalidDecisionFile.getReportAffairId();
+        //2. 拿到报告事务id,获取报告事务
+        ReportAffair reportAffair = reportAffairService.getById(reportAffairId);
+        reportAffair.setProjectId(projectId);
+        //发生时间是无效请求日
+        reportAffair.setOccurredTime(updateInvalidDecisionFileDTO.getInvalidDecisionTime());
+        //备注
+        reportAffair.setDescription(updateInvalidDecisionFileDTO.getDescription());
+        reportAffair.updateById();
+        //3. 更新报告事务与文件关联
+        List<String> fileGuids = updateInvalidDecisionFileDTO.getFileGuids();
+        if (fileGuids != null && !fileGuids.isEmpty()) {
+            LambdaQueryWrapper<AssoReportAffairFile> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(AssoReportAffairFile::getReportAffairId, reportAffairId);
+            assoReportAffairFileService.remove(queryWrapper);
+
+            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;
+    }
+
+    public InvalidDecisionFileVO getInvalidDecisionFile(Integer reportAffairId) {
+        LambdaQueryWrapper<InvalidDecisionFile> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(InvalidDecisionFile::getReportAffairId, reportAffairId);
+        InvalidDecisionFile invalidDecisionFile = this.getOne(queryWrapper, false);
+        InvalidDecisionFileVO invalidDecisionFileVO = new InvalidDecisionFileVO();
+        if (invalidDecisionFile != null) {
+            BeanUtils.copyProperties(invalidDecisionFile, invalidDecisionFileVO);
+            invalidDecisionFileVO.setInvalidDecisionFileId(invalidDecisionFile.getId());
+        }
+        ReportAffair reportAffair = reportAffairService.getById(reportAffairId);
+        invalidDecisionFileVO.setInvalidDecisionTime(reportAffair.getOccurredTime());
+        return invalidDecisionFileVO;
+    }
+}

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

@@ -89,6 +89,7 @@ public class InvalidRequestFileService extends ServiceImpl<InvalidRequestFileMap
         InvalidRequestFileVO invalidRequestFileVO = new InvalidRequestFileVO();
         if (invalidRequestFile != null) {
             BeanUtils.copyProperties(invalidRequestFile, invalidRequestFileVO);
+            invalidRequestFileVO.setInvalidRequestFileId(invalidRequestFile.getId());
         }
         return invalidRequestFileVO;
     }

+ 149 - 0
src/main/java/cn/cslg/pas/service/business/OralTrailService.java

@@ -0,0 +1,149 @@
+package cn.cslg.pas.service.business;
+
+import cn.cslg.pas.common.dto.business.ReportAffairDTO;
+import cn.cslg.pas.common.dto.invalidDTO.AddOralTrailDTO;
+import cn.cslg.pas.common.dto.invalidDTO.UpdateOralTrailDTO;
+import cn.cslg.pas.common.vo.invalidVO.InvalidRequestFileVO;
+import cn.cslg.pas.common.vo.invalidVO.OralTrailVO;
+import cn.cslg.pas.domain.business.AssoReportAffairFile;
+import cn.cslg.pas.domain.business.InvalidRequestFile;
+import cn.cslg.pas.domain.business.OralTrail;
+import cn.cslg.pas.domain.business.ReportAffair;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.mapper.OralTrailMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 口审记录Service
+ * @Author xiexiang
+ * @Date 2023/12/28
+ */
+@Slf4j
+@Service
+public class OralTrailService extends ServiceImpl<OralTrailMapper, OralTrail> {
+    @Autowired
+    private ReportAffairService reportAffairService;
+
+    @Autowired
+    private AssoReportAffairFileService assoReportAffairFileService;
+
+    public Integer add(AddOralTrailDTO addOralTrailDTO){
+        if (addOralTrailDTO == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        Integer projectId = addOralTrailDTO.getProjectId();
+        if (projectId == null) {
+            throw new XiaoShiException("报告id为空");
+        }
+        //1. 首先上传报告事务,拿到报告事务id
+        ReportAffairDTO reportAffairDTO = new ReportAffairDTO();
+        reportAffairDTO.setProjectId(projectId);
+        //口审记录 0
+        reportAffairDTO.setAffairType(0);
+        //发生时间是口审时间
+        reportAffairDTO.setOccurredTime(addOralTrailDTO.getOralTrailTime());
+        //备注
+        reportAffairDTO.setDescription(addOralTrailDTO.getRemark());
+        Integer reportAffairId = reportAffairService.addReportAffair(reportAffairDTO);
+
+        if (reportAffairId == null) {
+            throw new XiaoShiException("上传报告事务失败");
+        }
+        //2. 上传口审记录
+        OralTrail oralTrail = new OralTrail();
+        oralTrail.setParticipator(addOralTrailDTO.getParticipator());
+        oralTrail.setPosition(addOralTrailDTO.getPosition());
+        oralTrail.setDescription(addOralTrailDTO.getDescription());
+        oralTrail.setReportAffairId(reportAffairId);
+        oralTrail.insert();
+        //3. 添加报告事务与文件关联
+        List<String> fileGuids = addOralTrailDTO.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;
+    }
+
+    public OralTrailVO getOralTrailVO(Integer reportAffairId) {
+        LambdaQueryWrapper<OralTrail> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(OralTrail::getReportAffairId, reportAffairId);
+        OralTrail oralTrail = this.getOne(queryWrapper, false);
+        OralTrailVO oralTrailVO = new OralTrailVO();
+        if (oralTrail != null) {
+            BeanUtils.copyProperties(oralTrail, oralTrailVO);
+            oralTrailVO.setOralTrailId(oralTrail.getId());
+        }
+        ReportAffair reportAffair = reportAffairService.getById(reportAffairId);
+        oralTrailVO.setOralTrailTime(reportAffair.getOccurredTime());
+        return oralTrailVO;
+    }
+
+    /**
+     * 更新口审记录
+     * @param updateOralTrailDTO
+     * @return
+     */
+    public Integer update(UpdateOralTrailDTO updateOralTrailDTO){
+        if (updateOralTrailDTO == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        Integer projectId = updateOralTrailDTO.getProjectId();
+        Integer id = updateOralTrailDTO.getOralTrailId();
+        if (id == null) {
+            throw new XiaoShiException("id为空");
+        }
+        if (projectId == null) {
+            throw new XiaoShiException("报告id为空");
+        }
+        //1. 根据id查出口审记录
+        OralTrail oralTrail = this.getById(id);
+        if (oralTrail == null) {
+            throw new XiaoShiException("oralTrail查询错误");
+        }
+        BeanUtils.copyProperties(updateOralTrailDTO, oralTrail);
+        oralTrail.updateById();
+        Integer reportAffairId = oralTrail.getReportAffairId();
+        //2. 拿到报告事务id,获取报告事务
+        ReportAffair reportAffair = reportAffairService.getById(reportAffairId);
+        reportAffair.setProjectId(projectId);
+        //发生时间是无效请求日
+        reportAffair.setOccurredTime(updateOralTrailDTO.getOralTrailTime());
+        //备注
+        reportAffair.setDescription(updateOralTrailDTO.getRemark());
+        reportAffair.updateById();
+        //3. 更新报告事务与文件关联
+        List<String> fileGuids = updateOralTrailDTO.getFileGuids();
+        if (fileGuids != null && !fileGuids.isEmpty()) {
+            LambdaQueryWrapper<AssoReportAffairFile> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(AssoReportAffairFile::getReportAffairId, reportAffairId);
+            assoReportAffairFileService.remove(queryWrapper);
+
+            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;
+    }
+}

+ 162 - 11
src/main/java/cn/cslg/pas/service/business/ReportAffairService.java

@@ -1,14 +1,16 @@
 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.model.cronModel.Personnel;
 import cn.cslg.pas.common.model.cronModel.PersonnelVO;
 import cn.cslg.pas.common.model.cronModel.SystemFile;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.LoginUtils;
-import cn.cslg.pas.common.vo.invalidVO.InvalidRequestFileVO;
-import cn.cslg.pas.common.vo.invalidVO.ReportAffairVO;
+import cn.cslg.pas.common.vo.invalidVO.*;
 import cn.cslg.pas.domain.business.AssoReportAffairFile;
 import cn.cslg.pas.domain.business.InvalidRequestFile;
 import cn.cslg.pas.domain.business.ReportAffair;
@@ -22,7 +24,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestBody;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -47,9 +51,19 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
     @Autowired
     private FileManagerService fileManagerService;
     @Autowired
+    @Lazy
     private InvalidRequestFileService invalidRequestFileService;
     @Autowired
     private PermissionService permissionService;
+    @Autowired
+    @Lazy
+    private OralTrailService oralTrailService;
+    @Autowired
+    @Lazy
+    private InvalidDecisionFileService invalidDecisionFileService;
+    @Autowired
+    @Lazy
+    private AdminProceedService adminProceedService;
 
     /**
      * 创建报告事务
@@ -119,16 +133,16 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
             BeanUtils.copyProperties(item, reportAffairVO);
             //根据事务类型选择不同的装载方式
             Integer type = reportAffairVO.getAffairType();
-            if (type == 0) {
-
-            } else if (type == 1) {//无效请求书
+            if (type == 0) {//0 口审记录
+                this.loadOralTrail(reportAffairVO);
+            } else if (type == 1) {//1 无效请求书
                 this.loadInvalidRequestFile(reportAffairVO);
-            } else if (type == 2) {
-
-            } else if (type == 3) {
-
-            } else if (type == 4) {
-
+            } else if (type == 2) {//2 陈述意见书
+                this.loadStateOpinion(reportAffairVO);
+            } else if (type == 3) {//3 无效决定书
+                this.loadInvalidDecisionFile(reportAffairVO);
+            } else if (type == 4) {//4 行政诉讼书
+                this.loadAdminProceed(reportAffairVO);
             }
             reportAffairVOS.add(reportAffairVO);
         });
@@ -208,4 +222,141 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
             }
         }
     }
+
+
+    /**
+     * 装载口审记录
+     *
+     * @param reportAffairVO
+     */
+    public void loadOralTrail(ReportAffairVO reportAffairVO) {
+        Integer reportAffairId = reportAffairVO.getId();
+        OralTrailVO oralTrailVO = oralTrailService.getOralTrailVO(reportAffairId);
+        reportAffairVO.setOralTrailVO(oralTrailVO);
+    }
+
+
+    /**
+     * 装载无效决定书
+     *
+     * @param reportAffairVO
+     */
+    public void loadInvalidDecisionFile(ReportAffairVO reportAffairVO) {
+        Integer reportAffairId = reportAffairVO.getId();
+        InvalidDecisionFileVO invalidDecisionFileVO = invalidDecisionFileService.getInvalidDecisionFile(reportAffairId);
+        reportAffairVO.setInvalidDecisionFileVO(invalidDecisionFileVO);
+    }
+
+    /**
+     * 装载行政诉讼书
+     *
+     * @param reportAffairVO
+     */
+    public void loadAdminProceed(ReportAffairVO reportAffairVO) {
+        Integer reportAffairId = reportAffairVO.getId();
+        AdminProceedVO adminProceedVO = adminProceedService.getAdminProceed(reportAffairId);
+        reportAffairVO.setAdminProceedVO(adminProceedVO);
+    }
+
+    /**
+     * 上传陈述意见书
+     * @param addStateOpinionDTO
+     * @return
+     */
+    public Integer addStateOpinion(AddStateOpinionDTO addStateOpinionDTO){
+        if (addStateOpinionDTO == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        Integer projectId = addStateOpinionDTO.getProjectId();
+        if (projectId == null) {
+            throw new XiaoShiException("报告id为空");
+        }
+        //1. 首先上传报告事务,拿到报告事务id
+        ReportAffairDTO reportAffairDTO = new ReportAffairDTO();
+        reportAffairDTO.setProjectId(projectId);
+        //陈述意见书 2
+        reportAffairDTO.setAffairType(2);
+        //发生时间是无效请求日
+        reportAffairDTO.setOccurredTime(addStateOpinionDTO.getStateReplyTime());
+        //备注
+        reportAffairDTO.setDescription(addStateOpinionDTO.getDescription());
+        Integer reportAffairId = this.addReportAffair(reportAffairDTO);
+
+        if (reportAffairId == null) {
+            throw new XiaoShiException("上传报告事务失败");
+        }
+        //3. 添加报告事务与文件关联
+        List<String> fileGuids = addStateOpinionDTO.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 updateStateOpinionDTO
+     * @return
+     */
+    public Integer updateStateOpinion(UpdateStateOpinionDTO updateStateOpinionDTO){
+        if (updateStateOpinionDTO == null) {
+            throw new XiaoShiException("入参为空");
+        }
+        Integer projectId = updateStateOpinionDTO.getProjectId();
+        Integer reportAffairId = updateStateOpinionDTO.getStateOpinionId();
+        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(updateStateOpinionDTO.getStateReplyTime());
+        //备注
+        reportAffair.setDescription(updateStateOpinionDTO.getDescription());
+        reportAffair.updateById();
+        //3. 更新报告事务与文件关联
+        List<String> fileGuids = updateStateOpinionDTO.getFileGuids();
+        if (fileGuids != null && !fileGuids.isEmpty()) {
+            LambdaQueryWrapper<AssoReportAffairFile> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(AssoReportAffairFile::getReportAffairId, reportAffairId);
+            assoReportAffairFileService.remove(queryWrapper);
+
+            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 reportAffairVO
+     */
+    public void loadStateOpinion(ReportAffairVO reportAffairVO) {
+        Integer reportAffairId = reportAffairVO.getId();
+        StateOpinionVO stateOpinionVO = new StateOpinionVO();
+        ReportAffair reportAffair = this.getById(reportAffairId);
+        stateOpinionVO.setStateOpinionId(reportAffairId);
+        stateOpinionVO.setDescription(reportAffair.getDescription());
+        stateOpinionVO.setStateReplyTime(reportAffair.getOccurredTime());
+        stateOpinionVO.setProjectId(reportAffair.getProjectId());
+        reportAffairVO.setStateOpinionVO(stateOpinionVO);
+    }
 }

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

@@ -65,7 +65,7 @@ public class EsCountService {
         }
         Integer taskId = vo.getTaskId();
         Integer projectId = vo.getProjectId();
-        searchCondition = this.getCondition(taskId, projectId);
+        searchCondition = this.getCondition(searchCondition, taskId, projectId);
 
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
@@ -134,7 +134,7 @@ public class EsCountService {
                         filtersBuckets.forEach(filtersBucket -> {
 //                            this.getFiltersCountDTO(filtersBucket, finalSearchCondition, detailDTOS);
                             Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
-                            this.getNestedCountDTOS(filtersAgg, field, detailDTOS);
+                            this.getNestedCountDTOS(filtersAgg, field,topN, detailDTOS);
                             if (!CollectionUtils.isEmpty(values)) {
                                 esCountDTO.setAllNumber(filtersAgg.nested().docCount());
                             }
@@ -145,14 +145,14 @@ public class EsCountService {
                             filtersBuckets.forEach(filtersBucket -> {
 //                                this.getFiltersCountDTO(filtersBucket, finalSearchCondition, detailDTOS);
                                 Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
-                                this.getChildCountDTOS(filtersAgg, field, finalFieldType, detailDTOS,esCountDTO);
+                                this.getChildCountDTOS(filtersAgg, field, finalFieldType, topN,detailDTOS,esCountDTO);
                             });
                         } else {
                             Integer finalFieldType1 = fieldType;
                             filtersBuckets.forEach(filtersBucket -> {
 //                                this.getFiltersCountDTO(filtersBucket, finalSearchCondition, detailDTOS);
                                 Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
-                                this.getChildAnalysisDTOS(filtersAgg, field, finalFieldType1, detailDTOS, esCountDTO);
+                                this.getChildAnalysisDTOS(filtersAgg, field, finalFieldType1, topN,detailDTOS, esCountDTO);
                             });
                         }
                     } else if (numberList.contains(field)) {
@@ -162,14 +162,14 @@ public class EsCountService {
                             filtersBuckets.forEach(filtersBucket -> {
 //                                this.getFiltersCountDTO(filtersBucket, finalSearchCondition, detailDTOS);
                                 Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
-                                this.getNumberAnalysisDTOS(filtersAgg, field, detailDTOS);
+                                this.getNumberAnalysisDTOS(filtersAgg, field,topN, detailDTOS);
                             });
                         }
                     } else {
                         filtersBuckets.forEach(filtersBucket -> {
 //                            this.getFiltersCountDTO(filtersBucket, finalSearchCondition, detailDTOS);
                             Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
-                            this.getTermCountDTOS(filtersAgg, field, detailDTOS);
+                            this.getTermCountDTOS(filtersAgg, field, topN,detailDTOS);
                         });
                     }
                 } else {
@@ -183,20 +183,20 @@ public class EsCountService {
                         this.getDateAnalysisDTOS(agg, field, topN, detailDTOS,esCountDTO);
                     }
                 } else if (nestedList.contains(field)) {
-                    this.getNestedCountDTOS(agg, field, detailDTOS);
+                    this.getNestedCountDTOS(agg, field,topN, detailDTOS);
                     if (!CollectionUtils.isEmpty(values)) {
                         esCountDTO.setAllNumber(agg.nested().docCount());
                     }
                 } else if (childList.contains(field)) {
                     if (CollectionUtils.isEmpty(values)) {
-                        this.getChildCountDTOS(agg, field, fieldType, detailDTOS, esCountDTO);
+                        this.getChildCountDTOS(agg, field, fieldType,topN, detailDTOS, esCountDTO);
                     } else {
-                        this.getChildAnalysisDTOS(agg, field, fieldType, detailDTOS, esCountDTO);
+                        this.getChildAnalysisDTOS(agg, field, fieldType,topN, detailDTOS, esCountDTO);
                     }
                 } else if (numberList.contains(field)) {
-                    this.getNumberAnalysisDTOS(agg, field, detailDTOS);
+                    this.getNumberAnalysisDTOS(agg, field,topN, detailDTOS);
                 } else {
-                    this.getTermCountDTOS(agg, field, detailDTOS);
+                    this.getTermCountDTOS(agg, field,topN, detailDTOS);
                 }
             }
         }
@@ -256,12 +256,12 @@ public class EsCountService {
 
     /**
      * 获取筛选条件
+     *
      * @param taskId
      * @param projectId
      * @return
      */
-    public String getCondition(Integer taskId, Integer projectId) {
-        String searchCondition = "";
+    public String getCondition(String searchCondition, Integer taskId, Integer projectId) {
         if (taskId != null) {
             if (searchCondition != null && !"".equals(searchCondition.trim())) {
                 searchCondition = "taskId = " + taskId + " AND " + searchCondition;
@@ -304,7 +304,13 @@ public class EsCountService {
      * @param field
      * @param detailDTOS
      */
-    public void getTermCountDTOS(Aggregate agg, String field, List<EsCountDetailDTO> detailDTOS) {
+    public void getTermCountDTOS(Aggregate agg, String field, Integer topN, List<EsCountDetailDTO> detailDTOS) {
+        EsCountDetailDTO countDTO = new EsCountDetailDTO();
+        countDTO.setField(field);
+        countDTO.setName("其他");
+        countDTO.setNumber(agg.sterms().sumOtherDocCount());
+        countDTO.setTopN(topN);
+        detailDTOS.add(countDTO);
         List<StringTermsBucket> list = agg.sterms().buckets().array();
         list.forEach(bucket -> {
             EsCountDetailDTO dto = new EsCountDetailDTO();
@@ -312,6 +318,7 @@ public class EsCountService {
             Aggregate aggregate = bucket.aggregations().get("filter_agg");
             dto.setName(bucket.key().stringValue());
             dto.setNumber(bucket.docCount());
+            dto.setTopN(topN);
             if (aggregate != null) {
                 dto.setNumber(aggregate.filter().docCount());
             }
@@ -328,7 +335,8 @@ public class EsCountService {
      * @param field
      * @param detailDTOS
      */
-    public void getChildCountDTOS(Aggregate agg, String field,Integer fieldType, List<EsCountDetailDTO> detailDTOS, EsCountDTO esCountDTO) {
+    public void getChildCountDTOS(Aggregate agg, String field,Integer fieldType, Integer topN,
+                                  List<EsCountDetailDTO> detailDTOS, EsCountDTO esCountDTO) {
         esCountDTO.setAllNumber(agg.children().docCount());
         Aggregate childAgg = agg.children().aggregations().get("childAgg");
         List<StringTermsBucket> list = childAgg.sterms().buckets().array();
@@ -344,6 +352,7 @@ public class EsCountService {
                     dto.setName(termsBucket.key().stringValue());
                     dto.setNumber(termsBucket.docCount());
                     dto.setNumber(count);
+                    dto.setTopN(topN);
                     if (dto.getNumber() > 0) {
                         detailDTOS.add(dto);
                         if (fieldType == null || fieldType != 6) {
@@ -352,6 +361,7 @@ public class EsCountService {
                             detail.setField(field);
                             detail.setName("未选择");
                             detail.setNumber(docCount);
+                            detail.setTopN(topN);
                             if (!detailDTOS.contains(detail)) {
                                 detailDTOS.add(detail);
                             }
@@ -369,7 +379,8 @@ public class EsCountService {
      * @param field
      * @param detailDTOS
      */
-    public void getChildAnalysisDTOS(Aggregate agg, String field,Integer fieldType, List<EsCountDetailDTO> detailDTOS, EsCountDTO esCountDTO) {
+    public void getChildAnalysisDTOS(Aggregate agg, String field,Integer fieldType,Integer topN,
+                                     List<EsCountDetailDTO> detailDTOS, EsCountDTO esCountDTO) {
         Aggregate childAgg = agg.children().aggregations().get("childAgg");
         List<StringTermsBucket> list = childAgg.sterms().buckets().array();
         list.forEach(bucket -> {
@@ -381,6 +392,7 @@ public class EsCountService {
                 dto.setField(field);
                 dto.setName(termsBucket.key().stringValue());
                 dto.setNumber(termsBucket.docCount());
+                dto.setTopN(topN);
                 if (dto.getNumber() > 0) {
                     detailDTOS.add(dto);
                     if (fieldType == null || fieldType != 6) {
@@ -389,6 +401,7 @@ public class EsCountService {
                         detail.setField(field);
                         detail.setName("未选择");
                         detail.setNumber(docCount);
+                        detail.setTopN(topN);
                         if (!detailDTOS.contains(detail)) {
                             detailDTOS.add(detail);
                         }
@@ -405,13 +418,14 @@ public class EsCountService {
      * @param field
      * @param detailDTOS
      */
-    public void getNumberAnalysisDTOS(Aggregate agg, String field, List<EsCountDetailDTO> detailDTOS) {
+    public void getNumberAnalysisDTOS(Aggregate agg, String field,Integer topN, List<EsCountDetailDTO> detailDTOS) {
         List<RangeBucket> list = agg.range().buckets().array();
         for (RangeBucket bucket : list) {
             EsCountDetailDTO dto = new EsCountDetailDTO();
             dto.setField(field);
             dto.setName(bucket.key());
             dto.setNumber(bucket.docCount());
+            dto.setTopN(topN);
             if (dto.getNumber() > 0) {
                 detailDTOS.add(dto);
             }
@@ -451,10 +465,12 @@ public class EsCountService {
                     dto.setField(field);
                     dto.setName(year + "-H1");
                     dto.setNumber(h1Count);
+                    dto.setTopN(topN);
                     EsCountDetailDTO dto2 = new EsCountDetailDTO();
                     dto2.setField(field);
                     dto2.setName(year + "-H2");
                     dto2.setNumber(h2Count);
+                    dto2.setTopN(topN);
                     if (month.before(halfYearDate)) {
                         h1Count += histogramBucket.docCount();
                         dto.setNumber(h1Count);
@@ -482,6 +498,7 @@ public class EsCountService {
                 Aggregate aggregate = bucket.aggregations().get("filter_agg");
                 dto.setName(bucket.keyAsString());
                 dto.setNumber(bucket.docCount());
+                dto.setTopN(topN);
                 if (aggregate != null) {
                     dto.setNumber(aggregate.filter().docCount());
                 }
@@ -515,6 +532,7 @@ public class EsCountService {
             dto.setField(field);
             dto.setName(bucket.key());
             dto.setNumber(bucket.docCount());
+            dto.setTopN(topN);
             if (dto.getNumber() > 0) {
                 esCountDetailDTOS.add(dto);
             }
@@ -533,7 +551,7 @@ public class EsCountService {
      * @param field
      * @param detailDTOS
      */
-    public void getNestedCountDTOS(Aggregate agg, String field, List<EsCountDetailDTO> detailDTOS) {
+    public void getNestedCountDTOS(Aggregate agg, String field,Integer topN, List<EsCountDetailDTO> detailDTOS) {
         Aggregate termsAgg = agg.nested().aggregations().get("terms_agg");
         List<StringTermsBucket> list = termsAgg.sterms().buckets().array();
         list.forEach(bucket -> {
@@ -542,6 +560,7 @@ public class EsCountService {
             Aggregate aggregate = bucket.aggregations().get("filter_agg");
             dto.setName(bucket.key().stringValue());
             dto.setNumber(bucket.docCount());
+            dto.setTopN(topN);
             if (aggregate != null) {
                 dto.setNumber(aggregate.filter().docCount());
             }

+ 24 - 17
src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java

@@ -15,12 +15,14 @@ import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
 import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
 import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
 import cn.cslg.pas.common.vo.ContentVO;
+import cn.cslg.pas.common.vo.EsConfigVO;
 import cn.cslg.pas.common.vo.PatentPageMessageVO;
 import cn.cslg.pas.common.vo.PatentWithIdVO;
 import cn.cslg.pas.common.vo.business.PatentKinDetailVO;
 import cn.cslg.pas.common.vo.business.PatentKinVO;
 import cn.cslg.pas.common.vo.business.PatentNoVO;
 import cn.cslg.pas.domain.es.*;
+import cn.cslg.pas.service.business.CommonService;
 import cn.cslg.pas.service.query.FormatQueryService;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
 import co.elastic.clients.elasticsearch._types.SortOrder;
@@ -281,23 +283,28 @@ public class EsPatentService {
         builder.query(q);
         //排序
         List<OrderDTO> dtoList = queryRequest.getOrderDTOList();
-//        if (!CollectionUtils.isEmpty(dtoList)) {
-//            for (OrderDTO orderDTO : dtoList) {
-//                if (orderDTO.getOrderType().equals(IfConstant.NO)) {
-//                    builder.sort(sortOptionsBuilder -> sortOptionsBuilder
-//                            .field(fieldSortBuilder -> fieldSortBuilder
-//                                    .field(orderDTO.getOrderBy()).order(SortOrder.Asc)));
-//                } else {
-//                    builder.sort(sortOptionsBuilder -> sortOptionsBuilder
-//                            .field(fieldSortBuilder -> fieldSortBuilder
-//                                    .field(orderDTO.getOrderBy()).order(SortOrder.Desc)));
-//                }
-//            }
-//        } else {
-//            builder.sort(sortOptionsBuilder -> sortOptionsBuilder
-//                    .field(fieldSortBuilder -> fieldSortBuilder
-//                            .field("patent_no.keyword").order(SortOrder.Desc)));
-//        }
+        if (!CollectionUtils.isEmpty(dtoList)) {
+            String json = CommonService.readJsonFile("patent.json");
+            List<EsConfigVO> esConfigVOS = JSON.parseArray(json, EsConfigVO.class);
+            for (OrderDTO orderDTO : dtoList) {
+                EsConfigVO configVO = esConfigVOS.stream().filter(item -> item.getField().equals(orderDTO.getOrderBy())).findFirst().orElse(null);
+                if (configVO != null) {
+                    if (orderDTO.getOrderType().equals(IfConstant.NO)) {
+                        builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+                                .field(fieldSortBuilder -> fieldSortBuilder
+                                        .field(configVO.getEsField()).order(SortOrder.Asc)));
+                    } else {
+                        builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+                                .field(fieldSortBuilder -> fieldSortBuilder
+                                        .field(configVO.getEsField()).order(SortOrder.Desc)));
+                    }
+                }
+            }
+        } else {
+            builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+                    .field(fieldSortBuilder -> fieldSortBuilder
+                            .field("patent_no.keyword").order(SortOrder.Desc)));
+        }
         //分页
         if (current > 0 && size > 0) {
             builder.from(current.intValue()).size(size.intValue());

+ 29 - 32
src/main/java/cn/cslg/pas/service/business/es/EsService.java

@@ -38,16 +38,13 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 
 @Service
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class EsService {
-
+    public final List<String> dateList = Arrays.asList("AD", "PD", "GD", "EXD", "PAD", "PED", "PPD", "EPD");
     private final ElasticsearchClient client;
 
     @Autowired
@@ -126,7 +123,7 @@ public class EsService {
      */
     public PatentDTO esSearch(QueryRequest queryRequest) throws Exception {
         PatentDTO dto = new PatentDTO();
-        Integer taskId =queryRequest.getTaskId();
+        Integer taskId = queryRequest.getTaskId();
         String searchCondition = "";
         Integer projectId = queryRequest.getProjectId();
         Long current = queryRequest.getCurrent();
@@ -151,14 +148,13 @@ public class EsService {
         if (!CollectionUtils.isEmpty(customFields)) {
             searchCondition = this.parseCustomField(customFields);
         }
-        if( taskId != null){
+        if (taskId != null) {
             if (searchCondition != null && !"".equals(searchCondition.trim())) {
                 searchCondition = "taskId = " + taskId + " AND " + searchCondition;
             } else {
                 searchCondition = "taskId = " + taskId;
             }
-        }
-        else {
+        } else {
             if (projectId != null) {
                 if (searchCondition != null && !"".equals(searchCondition.trim())) {
                     searchCondition = "projectId = " + projectId + " AND " + searchCondition;
@@ -244,10 +240,10 @@ public class EsService {
                 EsCustomFieldValueDTO customField = customFields.get(i);
                 if (i != n) {
                     builder.append(" ").append("and").append(" ").append("(");
-                    this.appendStr(customField, builder, m,customField.getIfHaveChild());
+                    this.appendStr(customField, builder, m, customField.getIfHaveChild());
                 } else {
                     builder.append("(");
-                    this.appendStr(customField, builder, m,customField.getIfHaveChild());
+                    this.appendStr(customField, builder, m, customField.getIfHaveChild());
                 }
             }
         } else {
@@ -255,10 +251,10 @@ public class EsService {
                 EsCustomFieldValueDTO customField = customFields.get(i);
                 if (i != n) {
                     builder.append(" ").append("and").append(" ");
-                    this.appendStr(customField, builder, m,customField.getIfHaveChild());
+                    this.appendStr(customField, builder, m, customField.getIfHaveChild());
                 } else {
                     builder.append("(");
-                    this.appendStr(customField, builder, m,customField.getIfHaveChild());
+                    this.appendStr(customField, builder, m, customField.getIfHaveChild());
                 }
             }
         }
@@ -268,7 +264,7 @@ public class EsService {
         return builder.toString();
     }
 
-    public void appendStr(EsCustomFieldValueDTO customField, StringBuilder builder, int m,boolean ifHaveChild) {
+    public void appendStr(EsCustomFieldValueDTO customField, StringBuilder builder, int m, boolean ifHaveChild) {
         builder.append("field").append("=").append(customField.getFieldId());
         List<String> values = customField.getFieldValue();
         if (!CollectionUtils.isEmpty(values)) {
@@ -789,9 +785,9 @@ public class EsService {
             builder.index("legal_event");
             //申请号
             Query q1 = QueryBuilders.term(t -> t.field("app_no").value(starPatentVO.getApplicationNo()));
-            Query q2 =QueryBuilders.term((t->t.field("grant_no").value(starPatentVO.getPublicAccreditNo())));
-            Query q3 =QueryBuilders.term((t->t.field("public_no").value(starPatentVO.getPublicNo())));
-            Query bool = QueryBuilders.bool(i -> i.should(q1,q2,q3));
+            Query q2 = QueryBuilders.term((t -> t.field("grant_no").value(starPatentVO.getPublicAccreditNo())));
+            Query q3 = QueryBuilders.term((t -> t.field("public_no").value(starPatentVO.getPublicNo())));
+            Query bool = QueryBuilders.bool(i -> i.should(q1, q2, q3));
             builder.query(bool);
             SearchResponse<LegalEvent> response = null;
             try {
@@ -808,21 +804,21 @@ public class EsService {
 
             List<ChinaLeagalStatus> chinaLeagalStatuses = JSON.parseArray(cnLegalApiStr, ChinaLeagalStatus.class);
             chinaLeagalStatuses.forEach(item -> {
-                    LegalEvent tem = legalEvents.stream().filter(em -> em.getEventDate() != null && em.getEventDate().compareTo(item.getLegalDate()) == 0).findFirst().orElse(null);
-                    if (tem == null) {
-                        LegalEvent legalEvent1 = new LegalEvent();
-                        legalEvent1.setEventDate(item.getLegalDate());
-                        legalEvent1.setCode(item.getLegalCode());
-                        legalEvent1.setAppNo(starPatentVO.getApplicationNo());
-                        legalEvent1.setGrantNo(starPatentVO.getPublicAccreditNo());
-                        legalEvent1.setPublicNo(starPatentVO.getPublicNo());
-                        legalEvent1.setDescription(item.getLegalStatusInfo());
-                        legalEvent1.setName(item.getLegalStatus());
-                        try {
-                            this.addLegalEvent(legalEvent1);
-                        } catch (Exception e) {
-                        }
+                LegalEvent tem = legalEvents.stream().filter(em -> em.getEventDate() != null && em.getEventDate().compareTo(item.getLegalDate()) == 0).findFirst().orElse(null);
+                if (tem == null) {
+                    LegalEvent legalEvent1 = new LegalEvent();
+                    legalEvent1.setEventDate(item.getLegalDate());
+                    legalEvent1.setCode(item.getLegalCode());
+                    legalEvent1.setAppNo(starPatentVO.getApplicationNo());
+                    legalEvent1.setGrantNo(starPatentVO.getPublicAccreditNo());
+                    legalEvent1.setPublicNo(starPatentVO.getPublicNo());
+                    legalEvent1.setDescription(item.getLegalStatusInfo());
+                    legalEvent1.setName(item.getLegalStatus());
+                    try {
+                        this.addLegalEvent(legalEvent1);
+                    } catch (Exception e) {
                     }
+                }
 
             });
 
@@ -862,7 +858,7 @@ public class EsService {
                 String claim = StringUtils.strip(JSON.toJSONString(esMess.getClaim()), "[]");
                 ContentDetailDTO contentDetailDTO = JSONObject.parseObject(claim, ContentDetailDTO.class);
                 if (contentDetailDTO.getIfOrigin()) {
-                    dto.setClaim(contentDetailDTO.getTextContent().replaceAll("\t",""));
+                    dto.setClaim(contentDetailDTO.getTextContent().replaceAll("\t", ""));
                 }
             }
         }
@@ -880,6 +876,7 @@ public class EsService {
 
     /**
      * 根据专利号查询出其他专利号
+     *
      * @param patentNos
      * @return
      * @throws IOException

+ 95 - 45
src/main/java/cn/cslg/pas/service/business/invalidReport/PatentClaimHistoryService.java

@@ -18,10 +18,7 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Service;
 import org.springframework.web.bind.annotation.RequestBody;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -210,7 +207,6 @@ public class PatentClaimHistoryService extends ServiceImpl<PatentClaimHistoryMap
             this.saveBatch(patentClaimHistories);
         } else {
             // 这条权要并没有修改过排序,有可能之后的权要被删除过,也有可能没有任何操作
-
             //首先,新增一条记录
             PatentClaimHistory deleteClaimHistory = new PatentClaimHistory();
             deleteClaimHistory.setClaimId(claimId);
@@ -226,7 +222,6 @@ public class PatentClaimHistoryService extends ServiceImpl<PatentClaimHistoryMap
                     .filter(item -> item.getSysOrder() > patentClaim.getSysOrder())
                     .collect(Collectors.toList());
             List<Integer> sortLaterIds = secondFilter.stream().map(PatentClaim::getId).collect(Collectors.toList());
-
             if (ifFirst) {
                 //在比待删除这条权要排序大的那些权利要求中 找出在权要历史表中存在修改序号类型的
                 LambdaQueryWrapper<PatentClaimHistory> orderWrapper = new LambdaQueryWrapper<>();
@@ -265,47 +260,102 @@ public class PatentClaimHistoryService extends ServiceImpl<PatentClaimHistoryMap
                 });
                 this.saveBatch(patentClaimHistories);
             } else {
-
-//                // 第二次
-//                //在比待删除这条权要排序大的那些权利要求中 找出在权要历史表中存在修改序号类型的
-//                LambdaQueryWrapper<PatentClaimHistory> orderWrapper = new LambdaQueryWrapper<>();
-//                orderWrapper.eq(PatentClaimHistory::getOperateType, 2)
-//                        .in(PatentClaimHistory::getClaimId, sortLaterIds)
-//                        .eq(PatentClaimHistory::getIfFirst, ifFirst);
-//                List<PatentClaimHistory> hasAOrderList = this.list(orderWrapper);
-//                //有过修改序号的权要
-//                if (!orderList.isEmpty()) {
-//                    // 有过修改序号的权要ids
-//                    List<Integer> orderIds = orderList.stream().map(PatentClaimHistory::getClaimId).collect(Collectors.toList());
-//                    // 比待删除这条权要排序大的那些权利要求集合中删除掉那些有过修改序号的权利要求 则只剩下需要新增的权利要求
-//                    secondFilter.removeIf(item -> orderIds.contains(item.getId()));
-//                    // 这些是有过修改序号的权要ids 只需要进行更新操作,将排序 -1
-//                    LambdaQueryWrapper<PatentClaimHistory> updateWrapper = new LambdaQueryWrapper<>();
-//                    updateWrapper.in(PatentClaimHistory::getClaimId, orderIds)
-//                            .eq(PatentClaimHistory::getIfFirst, ifFirst)
-//                            .eq(PatentClaimHistory::getOperateType, 2);
-//                    List<PatentClaimHistory> updateHistories = this.list(updateWrapper);
-//                    updateHistories.forEach(item -> item.setSysOrder(item.getSysOrder() - 1));
-//                    this.updateBatchById(updateHistories);
-//                }
-//
-//                // 如果有需要删除的这个权要,除掉
-//                secondFilter.removeIf(item -> item.getId().equals(claimId));
-//
-//                // 待新增的权利要求
-//                secondFilter.forEach(item -> {
-//                    PatentClaimHistory insertClaimHistory = new PatentClaimHistory();
-//                    insertClaimHistory.setClaimId(item.getId());
-//                    insertClaimHistory.setSysOrder(item.getSysOrder() - 1);
-//                    insertClaimHistory.setIfFirst(ifFirst);
-//                    insertClaimHistory.setOperateType(2);
-//                    insertClaimHistory.setCreateId(item.getCreateId());
-//                    patentClaimHistories.add(insertClaimHistory);
-//                });
-//                this.saveBatch(patentClaimHistories);
+                LambdaQueryWrapper<PatentClaimHistory> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.eq(PatentClaimHistory::getIfFirst, !ifFirst)
+                        .eq(PatentClaimHistory::getClaimId, claimId)
+                        .eq(PatentClaimHistory::getOperateType, 2);
+                PatentClaimHistory ifExistFirst = this.getOne(queryWrapper, false);
+                if (ifExistFirst != null) {
+                    Integer order = ifExistFirst.getSysOrder();
+                    LambdaQueryWrapper<PatentClaimHistory> queryWrapper1 = new LambdaQueryWrapper<>();
+                    queryWrapper1.eq(PatentClaimHistory::getIfFirst, !ifFirst)
+                            .in(PatentClaimHistory::getClaimId, sortLaterIds)
+                            .eq(PatentClaimHistory::getOperateType, 2)
+                            .ge(PatentClaimHistory::getSysOrder, order);
+                    List<PatentClaimHistory> firstHistories = this.list(queryWrapper1);
+                    List<PatentClaimHistory> needInsert = new ArrayList<>();
+                    LambdaQueryWrapper<PatentClaimHistory> queryWrapper2 = new LambdaQueryWrapper<>();
+                    queryWrapper2.eq(PatentClaimHistory::getIfFirst, false)
+                            .in(PatentClaimHistory::getClaimId, sortLaterIds)
+                            .eq(PatentClaimHistory::getOperateType, 2);
+                    List<PatentClaimHistory> secondHistories = this.list(queryWrapper2);
+                    if (!secondHistories.isEmpty()) {
+                        List<Integer> secondIds = secondHistories.stream().map(PatentClaimHistory::getClaimId).collect(Collectors.toList());
+                        secondHistories.forEach(item -> item.setSysOrder(item.getSysOrder() - 1));
+                        this.updateBatchById(secondHistories);
+                        needInsert = firstHistories.stream().filter(item -> !secondIds.contains(item.getClaimId())).collect(Collectors.toList());
+                    } else {
+                        needInsert = firstHistories;
+                    }
+                    needInsert.forEach(item -> {
+                        PatentClaimHistory needIns = new PatentClaimHistory();
+                        needIns.setClaimId(item.getClaimId());
+                        needIns.setOperateType(2);
+                        needIns.setSysOrder(item.getSysOrder() - 1);
+                        needIns.setCreateId(item.getCreateId());
+                        patentClaimHistories.add(needIns);
+                    });
+                    this.saveBatch(patentClaimHistories);
+                } else {
+                    LambdaQueryWrapper<PatentClaimHistory> queryWrapper1 = new LambdaQueryWrapper<>();
+                    queryWrapper1.in(PatentClaimHistory::getClaimId, sortLaterIds)
+                            .eq(PatentClaimHistory::getOperateType, 2);
+                    List<PatentClaimHistory> ifExist = this.list(queryWrapper1);
+                    if (!ifExist.isEmpty()) {
+                        List<PatentClaimHistory> secondHistories = new ArrayList<>();
+                         sortLaterIds.forEach(item -> {
+                            LambdaQueryWrapper<PatentClaimHistory> queryWrapper2 = new LambdaQueryWrapper<>();
+                            queryWrapper2.eq(PatentClaimHistory::getIfFirst, ifFirst)
+                                    .eq(PatentClaimHistory::getClaimId, item)
+                                    .eq(PatentClaimHistory::getOperateType, 2);
+                            PatentClaimHistory secondHistory = this.getOne(queryWrapper2, false);
+                            if (secondHistory != null) {
+                                secondHistory.setSysOrder(secondHistory.getSysOrder() - 1);
+                                secondHistories.add(secondHistory);
+                            } else {
+                                LambdaQueryWrapper<PatentClaimHistory> queryWrapper3 = new LambdaQueryWrapper<>();
+                                queryWrapper3.eq(PatentClaimHistory::getIfFirst, !ifFirst)
+                                        .eq(PatentClaimHistory::getClaimId, item)
+                                        .eq(PatentClaimHistory::getOperateType, 2);
+                                PatentClaimHistory thirdHistory = this.getOne(queryWrapper3, false);
+                                if (thirdHistory != null) {
+                                    PatentClaimHistory third = new PatentClaimHistory();
+                                    third.setClaimId(thirdHistory.getClaimId());
+                                    third.setOperateType(2);
+                                    third.setSysOrder(thirdHistory.getSysOrder() - 1);
+                                    third.setCreateId(thirdHistory.getCreateId());
+                                    third.setIfFirst(ifFirst);
+                                    patentClaimHistories.add(third);
+                                } else {
+                                    PatentClaim patentClaim1 = patentClaimService.getById(item);
+                                    PatentClaimHistory patentClaimHistory1 = new PatentClaimHistory();
+                                    patentClaimHistory1.setClaimId(item);
+                                    patentClaimHistory1.setCreateId(patentClaim1.getCreateId());
+                                    patentClaimHistory1.setIfFirst(false);
+                                    patentClaimHistory1.setOperateType(2);
+                                    patentClaimHistory1.setSysOrder(patentClaim1.getSysOrder() - 1);
+                                    patentClaimHistories.add(patentClaimHistory1);
+                                }
+                            }
+                         });
+                         this.saveBatch(patentClaimHistories);
+                         this.updateBatchById(secondHistories);
+                    } else {
+                        // 待新增的权利要求
+                        secondFilter.forEach(item -> {
+                            PatentClaimHistory insertClaimHistory = new PatentClaimHistory();
+                            insertClaimHistory.setClaimId(item.getId());
+                            insertClaimHistory.setSysOrder(item.getSysOrder() - 1);
+                            insertClaimHistory.setIfFirst(ifFirst);
+                            insertClaimHistory.setOperateType(2);
+                            insertClaimHistory.setCreateId(item.getCreateId());
+                            patentClaimHistories.add(insertClaimHistory);
+                        });
+                        this.saveBatch(patentClaimHistories);
+                    }
+                }
             }
         }
-
     }
 
 

+ 16 - 4
src/main/java/cn/cslg/pas/service/query/FormatQueryService.java

@@ -418,13 +418,15 @@ public class FormatQueryService {
                         case "NOT":
                             Query temQ = (q1 == null) ? q2 : q1;
                             return QueryBuilders.bool(i -> i.mustNot(temQ));
+                        case "TO":
+                            return QueryBuilders.bool(i -> i.must(q1, q2));
                         default:
                             return null;
                     }
 
                 } else {
                     if (operate1.gettype().equals(enuType.Assignment)) {
-                        return HandleValueNode(((valueNode) Left).getvalue(), operate1.getCode(), Right, configName);
+                        return HandleValueNode(((valueNode) Left).getvalue(), operate1.getCode(), Right, configName, "", "");
                     } else {
                         return null;
                     }
@@ -435,15 +437,19 @@ public class FormatQueryService {
         }
     }
 
-    public Query HandleValueNode(String field, String operate, treeNode valeNode, String configName) throws ParseException {
+    public Query HandleValueNode(String field, String operate, treeNode valeNode, String configName,String op,String dp) throws ParseException {
         if (valeNode == null) {
             return null;
         } else {
             if (valeNode instanceof operateNode) {
                 operate operate1 = ((operateNode) valeNode).getoperate();
+                if (operate1.getShowName().equals("TO")) {
+                    op = ">=";
+                    dp = "<=";
+                }
                 if (operate1.gettype().equals(enuType.Logic)) {
-                    Query q1 = this.HandleValueNode(field, operate, ((treeNode) valeNode).getLeft(), configName);
-                    Query q2 = this.HandleValueNode(field, operate, (treeNode) valeNode.getRight(), configName);
+                    Query q1 = this.HandleValueNode(field, operate, ((treeNode) valeNode).getLeft(), configName,op,"");
+                    Query q2 = this.HandleValueNode(field, operate, (treeNode) valeNode.getRight(), configName,"",dp);
                     switch (operate1.getShowName()) {
                         case "AND":
                             return QueryBuilders.bool(i -> i.must(q1, q2));
@@ -452,6 +458,8 @@ public class FormatQueryService {
                         case "NOT":
                             Query temQ = (q1 == null) ? q2 : q1;
                             return QueryBuilders.bool(i -> i.mustNot(temQ));
+                        case "TO":
+                            return QueryBuilders.bool(i -> i.must(q1, q2));
                         default:
                             return null;
                     }
@@ -459,6 +467,10 @@ public class FormatQueryService {
                     return null;
                 }
             } else {
+                if (StringUtils.isNotEmpty(op)) {
+                    operate = op;
+                } else if (StringUtils.isNotEmpty(dp))
+                    operate = dp;
                 //比较运算符
                 IQueryBuilder iQueryBuilder = null;
                 String json = CommonService.readJsonFile(configName + ".json");

+ 44 - 44
src/main/resources/jsons/esCountAnalysis.json

@@ -3,7 +3,7 @@
     "name": "IPC分类号一级",
     "type": "String",
     "value": "ipcLevel1",
-    "field": "ipcLevel1",
+    "field": "IC",
     "esField": "mipc.level1",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -15,7 +15,7 @@
     "name": "IPC分类号二级",
     "type": "String",
     "value": "ipcLevel2",
-    "field": "ipcLevel2",
+    "field": "IC2",
     "esField": "mipc.level2",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -27,7 +27,7 @@
     "name": "IPC分类号三级",
     "type": "String",
     "value": "ipcLevel3",
-    "field": "ipcLevel3",
+    "field": "IC3",
     "esField": "mipc.level3",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -39,7 +39,7 @@
     "name": "IPC分类号四级",
     "type": "String",
     "value": "ipcLevel4",
-    "field": "ipcLevel4",
+    "field": "IC4",
     "esField": "mipc.level4",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -51,7 +51,7 @@
     "name": "IPC分类号五级",
     "type": "String",
     "value": "ipcLevel5",
-    "field": "ipcLevel5",
+    "field": "IC5",
     "esField": "mipc.level5",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -63,7 +63,7 @@
     "name": "CPC分类号一级",
     "type": "String",
     "value": "cpcLevel1",
-    "field": "cpcLevel1",
+    "field": "CPC",
     "esField": "mcpc.level1",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -75,7 +75,7 @@
     "name": "CPC分类号二级",
     "type": "String",
     "value": "cpcLevel2",
-    "field": "cpcLevel2",
+    "field": "CPC2",
     "esField": "mcpc.level2",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -87,7 +87,7 @@
     "name": "CPC分类号三级",
     "type": "String",
     "value": "cpcLevel3",
-    "field": "cpcLevel3",
+    "field": "CPC3",
     "esField": "mcpc.level3",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -99,7 +99,7 @@
     "name": "CPC分类号四级",
     "type": "String",
     "value": "cpcLevel4",
-    "field": "cpcLevel4",
+    "field": "CPC4",
     "esField": "mcpc.level4",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -111,7 +111,7 @@
     "name": "CPC分类号五级",
     "type": "String",
     "value": "cpcLevel5",
-    "field": "cpcLevel5",
+    "field": "CPC5",
     "esField": "mcpc.level5",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -123,7 +123,7 @@
     "name": "UPC分类号一级",
     "type": "String",
     "value": "upcLevel1",
-    "field": "upcLevel1",
+    "field": "UPC",
     "esField": "mupc.level1",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -135,7 +135,7 @@
     "name": "UPC分类号二级",
     "type": "String",
     "value": "upcLevel2",
-    "field": "upcLevel2",
+    "field": "UPC2",
     "esField": "mupc.level2",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -147,7 +147,7 @@
     "name": "UPC分类号三级",
     "type": "String",
     "value": "upcLevel3",
-    "field": "upcLevel3",
+    "field": "UPC3",
     "esField": "mupc.level3",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -159,7 +159,7 @@
     "name": "LOC分类号一级",
     "type": "String",
     "value": "locLevel1",
-    "field": "locLevel1",
+    "field": "LOC",
     "esField": "mloc.level1",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -171,7 +171,7 @@
     "name": "LOC分类号二级",
     "type": "String",
     "value": "locLevel2",
-    "field": "locLevel2",
+    "field": "LOC2",
     "esField": "mloc.level2",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -183,7 +183,7 @@
     "name": "LOC分类号三级",
     "type": "String",
     "value": "locLevel3",
-    "field": "locLevel3",
+    "field": "LOC3",
     "esField": "mloc.level3",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -195,7 +195,7 @@
     "name": "申请人",
     "type": "String",
     "value": "applicant",
-    "field": "applicant",
+    "field": "PA",
     "esField": "applicant.name.key",
     "esClass": "nestedCountAnalysisBuilder",
     "ifSearch": "false",
@@ -207,7 +207,7 @@
     "name": "标准申请人",
     "type": "String",
     "value": "standerApplicant",
-    "field": "standerApplicant",
+    "field": "SAT",
     "esField": "stander_applicant.name.key",
     "esClass": "nestedCountAnalysisBuilder",
     "ifSearch": "false",
@@ -219,7 +219,7 @@
     "name": "合并申请人",
     "type": "String",
     "value": "mergeApplicant",
-    "field": "mergeApplicant",
+    "field": "MAT",
     "esField": "merge_applicant.name.key",
     "esClass": "nestedCountAnalysisBuilder",
     "ifSearch": "false",
@@ -231,7 +231,7 @@
     "name": "权利人",
     "type": "String",
     "value": "rightHolder",
-    "field": "rightHolder",
+    "field": "PE",
     "esField": "right_holder.name.key",
     "esClass": "nestedCountAnalysisBuilder",
     "ifSearch": "false",
@@ -243,7 +243,7 @@
     "name": "标准权利人",
     "type": "String",
     "value": "standerRightHolder",
-    "field": "standerRightHolder",
+    "field": "SRH",
     "esField": "stander_right_holder.name.key",
     "esClass": "nestedCountAnalysisBuilder",
     "ifSearch": "false",
@@ -255,7 +255,7 @@
     "name": "合并权利人",
     "type": "String",
     "value": "mergeRightHolder",
-    "field": "mergeRightHolder",
+    "field": "MRH",
     "esField": "merge_right_holder.name.key",
     "esClass": "nestedCountAnalysisBuilder",
     "ifSearch": "false",
@@ -267,7 +267,7 @@
     "name": "发明人",
     "type": "String",
     "value": "inventor",
-    "field": "inventor",
+    "field": "IN",
     "esField": "inventor.name.key",
     "esClass": "nestedCountAnalysisBuilder",
     "ifSearch": "false",
@@ -280,7 +280,7 @@
     "type": "String",
     "value": "agency",
     "field": "agency",
-    "esField": "agency",
+    "esField": "AGN",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
     "ifGroup": "false",
@@ -291,7 +291,7 @@
     "name": "代理人名称",
     "type": "String",
     "value": "agent",
-    "field": "agent",
+    "field": "AG",
     "esField": "agent.key",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -303,7 +303,7 @@
     "name": "公开日",
     "type": "DateTime",
     "value": "publicDate",
-    "field": "publicDate",
+    "field": "PD",
     "esField": "public_date",
     "esClass": "dateCountAnalyssBuilder",
     "ifSearch": "false",
@@ -315,7 +315,7 @@
     "name": "申请日",
     "type": "DateTime",
     "value": "appDate",
-    "field": "appDate",
+    "field": "AD",
     "esField": "app_date",
     "esClass": "dateCountAnalyssBuilder",
     "ifSearch": "false",
@@ -327,7 +327,7 @@
     "name": "授权日",
     "type": "DateTime",
     "value": "grantDate",
-    "field": "grantDate",
+    "field": "GD",
     "esField": "grant_date",
     "esClass": "dateCountAnalyssBuilder",
     "ifSearch": "false",
@@ -339,7 +339,7 @@
     "name": "申请国家(受理局)",
     "type": "String",
     "value": "appCountry",
-    "field": "appCountry",
+    "field": "CO",
     "esField": "app_country",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -351,7 +351,7 @@
     "name": "申请人国家",
     "type": "String",
     "value": "applicantCountry",
-    "field": "applicantCountry",
+    "field": "AAC",
     "esField": "applicant_addr.country",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -363,7 +363,7 @@
     "name": "申请人省份",
     "type": "String",
     "value": "appProvince",
-    "field": "appProvince",
+    "field": "ADP",
     "esField": "applicant_addr.province",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -375,7 +375,7 @@
     "name": "申请人市区",
     "type": "String",
     "value": "appCity",
-    "field": "appCity",
+    "field": "ADC",
     "esField": "applicant_addr.city",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -387,7 +387,7 @@
     "name": "权利人国家",
     "type": "String",
     "value": "rightCountry",
-    "field": "rightCountry",
+    "field": "DZ",
     "esField": "right_holder_addr.country",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -399,7 +399,7 @@
     "name": "权利人省份",
     "type": "String",
     "value": "rightProvince",
-    "field": "rightProvince",
+    "field": "RDP",
     "esField": "right_holder_addr.province",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -411,7 +411,7 @@
     "name": "权利人市区",
     "type": "String",
     "value": "rightCity",
-    "field": "rightCity",
+    "field": "RDC",
     "esField": "right_holder_addr.city",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -435,7 +435,7 @@
     "name": "引用专利数量",
     "type": "Integer",
     "value": "quotePatentNoNum",
-    "field": "quotePatentNoNum",
+    "field": "QPN",
     "esField": "quote_patent_no_num",
     "esClass": "rangeCountAnalysisBuilder",
     "ifSearch": "false",
@@ -447,7 +447,7 @@
     "name": "被引用专利数量",
     "type": "Integer",
     "value": "quotedPatentNoNum",
-    "field": "quotedPatentNoNum",
+    "field": "QDPN",
     "esField": "quoted_patent_no_num",
     "esClass": "rangeCountAnalysisBuilder",
     "ifSearch": "false",
@@ -459,7 +459,7 @@
     "name": "简单同族数量",
     "type": "Integer",
     "value": "simpleFamilyNum",
-    "field": "simpleFamilyNum",
+    "field": "SFN",
     "esField": "simple_family_num",
     "esClass": "rangeCountAnalysisBuilder",
     "ifSearch": "false",
@@ -471,7 +471,7 @@
     "name": "inpadoc同族数量",
     "type": "Integer",
     "value": "inpadocFamilyNum",
-    "field": "inpadocFamilyNum",
+    "field": "IFN",
     "esField": "inpadoc_family_num",
     "esClass": "rangeCountAnalysisBuilder",
     "ifSearch": "false",
@@ -483,7 +483,7 @@
     "name": "扩展同族数量",
     "type": "Integer",
     "value": "patsnapFamilyNum",
-    "field": "patsnapFamilyNum",
+    "field": "PFN",
     "esField": "patsnap_family_num",
     "esClass": "rangeCountAnalysisBuilder",
     "ifSearch": "false",
@@ -495,7 +495,7 @@
     "name": "专利状态",
     "type": "String",
     "value": "simpleStatus",
-    "field": "simpleStatus",
+    "field": "SS",
     "esField": "simple_status",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -507,7 +507,7 @@
     "name": "专利类型",
     "type": "String",
     "value": "patentType",
-    "field": "patentType",
+    "field": "PT",
     "esField": "patent_type",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -519,7 +519,7 @@
     "name": "法律状态",
     "type": "String",
     "value": "legalStatus",
-    "field": "legalStatus",
+    "field": "LG",
     "esField": "legal_status.raw",
     "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
@@ -576,7 +576,7 @@
     "ifAsCondition": "true"
   },
   {
-    "name": "子文档号",
+    "name": "项目id",
     "type": "String",
     "value": "projectId",
     "field": "projectId",

+ 1 - 1
src/main/resources/jsons/patent.json

@@ -1020,7 +1020,7 @@
     "esClass": "customChildQueryBuilder",
     "ifSearch": "false",
     "ifGroup": "false",
-    "ifShow": "true",
+    "ifShow": "false",
     "ifAsCondition": "true"
   },
   {

+ 63 - 11
src/test/java/cn/cslg/pas/service/EventServiceTests.java

@@ -12,6 +12,8 @@ import cn.cslg.pas.common.dto.es.EsCustomFieldValueDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.request.*;
 import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
+import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
 import cn.cslg.pas.common.vo.business.EsCountVO;
 import cn.cslg.pas.common.vo.business.PatentKinVO;
 import cn.cslg.pas.common.vo.business.PatentNoVO;
@@ -66,6 +68,7 @@ public class EventServiceTests {
 
     @Autowired
     private ProductMarketDataService productMarketDataService;
+
     @Test
     void test() throws Exception {
         StringRequest queryRequest = new StringRequest();
@@ -82,17 +85,18 @@ public class EventServiceTests {
         queryRequest.setOrderDTOList(dtos);
         queryRequest.setCurrent(Long.parseLong("1"));
         queryRequest.setSize(Long.parseLong("10"));
-       Response response = eventController.queryEvent(queryRequest);
-       System.out.println(response); }
+        Response response = eventController.queryEvent(queryRequest);
+        System.out.println(response);
+    }
 
     @Test
-        void add() throws Exception {
+    void add() throws Exception {
         JSONObject jsonObj = new JSONObject();
         jsonObj.put("name", "事件4");
         jsonObj.put("description", "描述1");
         jsonObj.put("clientId", 1);
         jsonObj.put("scenarioId", 2);
-        jsonObj.put("eventDate","");
+        jsonObj.put("eventDate", "");
         String json_to_string = JSONObject.toJSONString(jsonObj);
         List<MultipartFile> list = new ArrayList<>();
         File file = new File("C:\\Users\\admin\\Desktop\\test.txt");
@@ -131,7 +135,7 @@ public class EventServiceTests {
         StringGroupRequest groupRequest = new StringGroupRequest();
 
         groupRequest.setGroupBy("groupMonthTime");
-        Records records=(Records) productMarketDataService.getGroup(groupRequest,"productMarketData");
+        Records records = (Records) productMarketDataService.getGroup(groupRequest, "productMarketData");
         System.out.println(records);
     }
 
@@ -175,7 +179,7 @@ public class EventServiceTests {
     }
 
     @Test
-    void getpagetexst() throws  IOException{
+    void getpagetexst() throws IOException {
         //1.添加一批数据(10)
         //2.调用查询取第一页(5笔一页)
         //3.判断5笔数据是正确的;
@@ -189,17 +193,17 @@ public class EventServiceTests {
     @Test
     void add1() throws Exception {
         List<FamilyPatent> list = new ArrayList<>();
-        FamilyPatent patent =new FamilyPatent();
+        FamilyPatent patent = new FamilyPatent();
         patent.setAppNo("CN147258369");
         patent.setGrantNo("CN258369147");
         patent.setPublicNo("CN369258147");
-        FamilyPatent patent1 =new FamilyPatent();
+        FamilyPatent patent1 = new FamilyPatent();
         patent1.setAppNo("US147258369");
         patent1.setGrantNo("US258369147");
         patent1.setPublicNo("US369258147");
         list.add(patent);
         list.add(patent1);
-        PatentFamilyMessage patentFamilyMessage =new PatentFamilyMessage();
+        PatentFamilyMessage patentFamilyMessage = new PatentFamilyMessage();
         patentFamilyMessage.setPatent(list);
         patentFamilyMessage.setFamilyType("test");
         String id = esService.addPatentFamily(patentFamilyMessage);
@@ -290,7 +294,7 @@ public class EventServiceTests {
         dto.setProjectId(83);
         dto.setFieldType(5);
         dto.setFieldId("303");
-        dto.setFieldValue(Arrays.asList("多选1","多选2"));
+        dto.setFieldValue(Arrays.asList("多选1", "多选2"));
         dto.setOptionType(1);
         dto.setPatentNo("CN201910069334.7");
         esCustomFieldService.addCustomField(dto);
@@ -326,6 +330,54 @@ public class EventServiceTests {
 
     @Test
     void test18() {
-//        esService
+        List<String> list = Arrays.asList("AD");
+        if (list.contains("AD")) {
+            String str = "AD=2008~201009";
+            String s = this.get(str);
+            if (s.contains("~")) {
+                int i = s.indexOf("~");
+//                s.substring()
+                String s1 = this.get(s);
+                System.out.println("-------------");
+                System.out.println("s1是:" + s1);
+
+            }
+        } else {
+            System.out.println("DDDDDDDDDDDDDDDDDD");
+        }
+
+    }
+
+    public String get(String str) {
+        int i = str.indexOf("AD");
+        String s = str.substring(str.indexOf("AD")).toUpperCase(Locale.ROOT);
+        int length = s.length();//------
+        String key = s.substring(0, s.indexOf("="));
+        int i2 = s.indexOf("=");
+        String s1 = s.substring(s.indexOf("=") + 1, s.indexOf("~"));
+        String s2 = "";
+        if (s.contains("AND")) {
+            s2 = s.substring(s.indexOf("~") + 1, s.indexOf("AND"));
+        } else {
+            s2 = s.substring(s.indexOf("~") + 1).trim();
+        }
+        int index = str.indexOf(key);
+        int index1 = str.indexOf(s2) + s2.length();
+        int i1 = index + key.length() + 1 + s1.length() + 1 + s2.length();
+        String substring = str.substring(index, i1);
+        String concat = key.concat(">=").concat(s1).concat(" and ").concat(key).concat("<=").concat(s2);
+        System.out.println(concat);
+
+        String replace = str.replace(substring, concat);
+        System.out.println(replace);
+        return replace;
+    }
+
+@Test
+    public void aaaaa() throws Exception {
+        String searchCondition = "AD=[2008~201009]";
+
+        treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
+System.out.println(tree);
     }
 }