Преглед изворни кода

Merge remote-tracking branch 'origin/master'

lrj пре 4 месеци
родитељ
комит
cc7e95eb81
34 измењених фајлова са 535 додато и 54 уклоњено
  1. 13 0
      src/main/java/cn/cslg/pas/common/dto/UpdateSingleColumnDTO.java
  2. 2 0
      src/main/java/cn/cslg/pas/common/dto/business/ReportAffairDTO.java
  3. 7 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddOralTrailDTO.java
  4. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddOtherDocumentsDTO.java
  5. 6 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateOralTrailDTO.java
  6. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateOtherDocumentsDTO.java
  7. 1 0
      src/main/java/cn/cslg/pas/common/model/request/GroupRequest.java
  8. 14 0
      src/main/java/cn/cslg/pas/common/utils/GenerateObjectUtil.java
  9. 2 0
      src/main/java/cn/cslg/pas/common/vo/QueryCasePhaseVO.java
  10. 10 0
      src/main/java/cn/cslg/pas/common/vo/QueryReportAffairAndOralVO.java
  11. 17 0
      src/main/java/cn/cslg/pas/common/vo/QueryReportAffairCasePhaseVO.java
  12. 8 0
      src/main/java/cn/cslg/pas/common/vo/business/ReportProjectVO.java
  13. 9 0
      src/main/java/cn/cslg/pas/common/vo/invalidVO/OralTrailVO.java
  14. 5 0
      src/main/java/cn/cslg/pas/common/vo/invalidVO/ReportAffairVO.java
  15. 17 17
      src/main/java/cn/cslg/pas/controller/ReportAffairController.java
  16. 9 1
      src/main/java/cn/cslg/pas/controller/ReportProjectController.java
  17. 8 0
      src/main/java/cn/cslg/pas/domain/business/OralTrail.java
  18. 7 0
      src/main/java/cn/cslg/pas/domain/business/ReportAffair.java
  19. 31 0
      src/main/java/cn/cslg/pas/domain/business/ReportAffairCasePhase.java
  20. 8 0
      src/main/java/cn/cslg/pas/mapper/ReportAffairMapper.java
  21. 5 0
      src/main/java/cn/cslg/pas/mapper/ReportProjectMapper.java
  22. 4 1
      src/main/java/cn/cslg/pas/service/ReportAffairCasePhaseService.java
  23. 11 1
      src/main/java/cn/cslg/pas/service/business/AdminProceedService.java
  24. 11 7
      src/main/java/cn/cslg/pas/service/business/InvalidDecisionFileService.java
  25. 93 5
      src/main/java/cn/cslg/pas/service/business/InvalidRequestFileService.java
  26. 36 4
      src/main/java/cn/cslg/pas/service/business/OralTrailService.java
  27. 6 0
      src/main/java/cn/cslg/pas/service/business/OtherDocumentsService.java
  28. 27 3
      src/main/java/cn/cslg/pas/service/business/ReportAffairService.java
  29. 42 3
      src/main/java/cn/cslg/pas/service/business/ReportProjectService.java
  30. 1 1
      src/main/java/cn/cslg/pas/service/business/es/EsCountService.java
  31. 48 0
      src/main/resources/jsons/invalidReportProject.json
  32. 46 2
      src/main/resources/mapper/ReportAffairMapper.xml
  33. 8 0
      src/main/resources/mapper/ReportProjectMapper.xml
  34. 19 9
      src/test/java/cn/cslg/pas/service/EventServiceTests.java

+ 13 - 0
src/main/java/cn/cslg/pas/common/dto/UpdateSingleColumnDTO.java

@@ -0,0 +1,13 @@
+package cn.cslg.pas.common.dto;
+
+import lombok.Data;
+
+@Data
+public class UpdateSingleColumnDTO {
+
+    private Integer projectId;
+
+    private String field;
+
+    private Object value;
+}

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

@@ -37,4 +37,6 @@ public class ReportAffairDTO {
     private Integer assoCasePhaseId;
 
     private String caseChildPhase;
+
+    private String documentType;
 }

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

@@ -10,15 +10,22 @@ 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;
 
+    //口审日期
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+    private Date oralDate;
+
     private String position;
 
     private String participator;

+ 2 - 0
src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddOtherDocumentsDTO.java

@@ -30,6 +30,8 @@ public class AddOtherDocumentsDTO {
 
     private String caseChildPhase;
 
+    private String documentType;
+
     private Boolean ifSendEmail;
 
     private List<ExtraEmailDTO> extraEmailDTOS;

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

@@ -16,10 +16,16 @@ import java.util.List;
 @Data
 public class UpdateOralTrailDTO {
     private Integer oralTrailId;
+    //口审时间
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
     private Date oralTrailTime;
 
+    //口审日期
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+    private Date oralDate;
+
     private String position;
 
     private String participator;

+ 2 - 0
src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateOtherDocumentsDTO.java

@@ -31,6 +31,8 @@ public class UpdateOtherDocumentsDTO {
 
     private String caseChildPhase;
 
+    private String documentType;
+
     private Boolean ifSendEmail;
 
     private List<ExtraEmailDTO> extraEmailDTOS;

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

@@ -14,4 +14,5 @@ public class GroupRequest {
     private Long size;
     private List<OrderDTO> orderDTOList;
     private String groupBy;
+    private Boolean ifInvalidReport;
 }

+ 14 - 0
src/main/java/cn/cslg/pas/common/utils/GenerateObjectUtil.java

@@ -3,6 +3,7 @@ package cn.cslg.pas.common.utils;
 import cn.cslg.pas.common.dto.DomainFieldDTO;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableField;
 import org.springframework.cglib.beans.BeanGenerator;
 import org.springframework.stereotype.Component;
 
@@ -41,4 +42,17 @@ public class GenerateObjectUtil {
             return null;
         }
     }
+
+    public static String getTableColumnName(Object obj, String propertyName) throws Exception {
+        String columnName = "";
+        Field field = obj.getClass().getDeclaredField(propertyName);
+        field.setAccessible(true);
+        // 检查字段是否有@TableField注解
+        if (field.isAnnotationPresent(TableField.class)) {
+            // 获取@TableField注解的值
+            TableField tableField = field.getAnnotation(TableField.class);
+            columnName = tableField.value(); // 获取具体的列名
+        }
+        return columnName;
+    }
 }

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

@@ -10,4 +10,6 @@ public class QueryCasePhaseVO {
     private String caseChildPhase;
 
     private Integer projectId;
+
+    private Integer flowType;
 }

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

@@ -0,0 +1,10 @@
+package cn.cslg.pas.common.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class QueryReportAffairAndOralVO {
+    private Date oralDate;
+}

+ 17 - 0
src/main/java/cn/cslg/pas/common/vo/QueryReportAffairCasePhaseVO.java

@@ -0,0 +1,17 @@
+package cn.cslg.pas.common.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class QueryReportAffairCasePhaseVO {
+    private Integer id;
+    private Integer flowType;
+    private Integer projectId;
+    private Date occurredTime;
+    private String casePhase;
+    private String caseChildPhase;
+    private Integer priority;
+    private String calOfficialDeadline;
+}

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

@@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import org.joda.time.DateTime;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
 import java.util.List;
@@ -248,4 +249,11 @@ public class ReportProjectVO {
     private String actualPerson;
     private String litigationParty;
     private String rightHolderStr;
+    @Schema(description = "证据风险及措施")
+    private String evidenceRiskResponse;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date officialDeadline;
+    private String oralPanelMembers;
 }

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

@@ -1,7 +1,9 @@
 package cn.cslg.pas.common.vo.invalidVO;
 
 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;
 
@@ -29,4 +31,11 @@ public class OralTrailVO {
      * 笔录描述
      */
     private String recordDescription;
+
+    /**
+     * 口审日期
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+    private Date oralDate;
 }

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

@@ -122,4 +122,9 @@ public class ReportAffairVO {
      * 流程类型
      */
     private Integer flowType;
+
+    /**
+     * 文档类型
+     */
+    private String documentType;
 }

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

@@ -41,7 +41,7 @@ public class ReportAffairController {
     @Autowired
     private ReportAffairCasePhaseService reportAffairCasePhaseService;
 
-    @Operation(summary = "上传无效请求书")
+    @Operation(summary = "添加请求人无效请求书")
     @PostMapping("/addInvalidRequestFile")
     public Response addInvalidRequestFile(@RequestBody AddInvalidRequestFileDTO addInvalidRequestFileDTO) throws Exception {
         Integer id = invalidRequestFileService.add(addInvalidRequestFileDTO);
@@ -50,7 +50,7 @@ public class ReportAffairController {
         return Response.success(records);
     }
 
-    @Operation(summary = "修改无效请求书")
+    @Operation(summary = "修改请求人无效请求书")
     @PostMapping("/updateInvalidRequestFile")
     public Response updateInvalidRequestFile(@RequestBody UpdateInvalidRequestFileDTO updateInvalidRequestFileDTO) throws Exception {
         Integer id = invalidRequestFileService.update(updateInvalidRequestFileDTO);
@@ -81,7 +81,7 @@ public class ReportAffairController {
         }
     }
 
-    @Operation(summary = "上传口审记录")
+    @Operation(summary = "添加合议组口审通知书||添加口审记录")
     @PostMapping("/addOralTrail")
     public Response addOralTrail(@RequestBody AddOralTrailDTO addOralTrailDTO) throws Exception {
         Integer id = oralTrailService.add(addOralTrailDTO);
@@ -90,7 +90,7 @@ public class ReportAffairController {
         return Response.success(records);
     }
 
-    @Operation(summary = "修改口审记录")
+    @Operation(summary = "修改合议组口审通知书||修改口审记录")
     @PostMapping("/updateOralTrail")
     public Response updateOralTrail(@RequestBody UpdateOralTrailDTO updateOralTrailDTO) throws Exception {
         Integer id = oralTrailService.update(updateOralTrailDTO);
@@ -99,7 +99,7 @@ public class ReportAffairController {
         return Response.success(records);
     }
 
-    @Operation(summary = "上传无效决定书")
+    @Operation(summary = "添加合议组无效决定")
     @PostMapping("/addInvalidDecisionFile")
     public Response addInvalidDecisionFile(@RequestBody AddInvalidDecisionFileDTO addInvalidDecisionFileDTO) throws Exception {
         Integer id = invalidDecisionFileService.add(addInvalidDecisionFileDTO);
@@ -108,7 +108,7 @@ public class ReportAffairController {
         return Response.success(records);
     }
 
-    @Operation(summary = "修改无效决定")
+    @Operation(summary = "修改合议组无效决定")
     @PostMapping("/updateInvalidDecisionFile")
     public Response updateInvalidDecisionFile(@RequestBody UpdateInvalidDecisionFileDTO updateInvalidDecisionFileDTO) throws Exception {
         Integer id = invalidDecisionFileService.update(updateInvalidDecisionFileDTO);
@@ -117,7 +117,7 @@ public class ReportAffairController {
         return Response.success(records);
     }
 
-    @Operation(summary = "上传行政诉讼书")
+    @Operation(summary = "添加原告起诉状")
     @PostMapping("/addAdminProceed")
     public Response addAdminProceed(@RequestBody AddAdminProceedDTO addAdminProceedDTO) throws Exception {
         Integer id = adminProceedService.add(addAdminProceedDTO);
@@ -126,7 +126,7 @@ public class ReportAffairController {
         return Response.success(records);
     }
 
-    @Operation(summary = "修改行政诉讼书")
+    @Operation(summary = "修改原告起诉状")
     @PostMapping("/updateAdminProceed")
     public Response updateAdminProceed(@RequestBody UpdateAdminProceedDTO updateAdminProceedDTO) throws Exception {
         Integer id = adminProceedService.update(updateAdminProceedDTO);
@@ -135,7 +135,7 @@ public class ReportAffairController {
         return Response.success(records);
     }
 
-    @Operation(summary = "上传陈述意见书")
+    @Operation(summary = "添加专利权人意见陈述书")
     @PostMapping("/addStateOpinion")
     public Response addStateOpinion(@RequestBody AddStateOpinionDTO addStateOpinionDTO) throws Exception {
         Integer id = reportAffairService.addStateOpinion(addStateOpinionDTO);
@@ -144,7 +144,7 @@ public class ReportAffairController {
         return Response.success(records);
     }
 
-    @Operation(summary = "修改陈述意见书")
+    @Operation(summary = "修改专利权人意见陈述书")
     @PostMapping("/updateStateOpinion")
     public Response updateStateOpinion(@RequestBody UpdateStateOpinionDTO updateStateOpinionDTO) throws Exception {
         Integer id = reportAffairService.updateStateOpinion(updateStateOpinionDTO);
@@ -153,7 +153,7 @@ public class ReportAffairController {
         return Response.success(records);
     }
 
-    @Operation(summary = "上传行政诉讼判决书")
+    @Operation(summary = "添加法院行政诉讼判决书")
     @PostMapping("/addAdminProceedJudgment")
     public Response addAdminProceedJudgment(@RequestBody AddJudgmentDTO addJudgmentDTO) throws Exception {
         Integer id = adminProceedService.addJudgment(addJudgmentDTO);
@@ -162,7 +162,7 @@ public class ReportAffairController {
         return Response.success(records);
     }
 
-    @Operation(summary = "修改行政诉讼判决书")
+    @Operation(summary = "修改法院行政诉讼判决书")
     @PostMapping("/updateAdminProceedJudgment")
     public Response updateAdminProceedJudgment(@RequestBody UpdateJudgmentDTO updateJudgmentDTO) throws Exception {
         Integer id = adminProceedService.updateJudgment(updateJudgmentDTO);
@@ -171,7 +171,7 @@ public class ReportAffairController {
         return Response.success(records);
     }
 
-    @Operation(summary = "上传权要修改记录")
+    @Operation(summary = "添加专利权人权要修改")
     @PostMapping("/addPatentClaimHistory")
     public Response addPatentClaimHistory(@RequestBody AddClaimHistoryDTO addClaimHistoryDTO) throws Exception {
         Integer id = reportAffairService.addClaimHistory(addClaimHistoryDTO);
@@ -180,7 +180,7 @@ public class ReportAffairController {
         return Response.success(records);
     }
 
-    @Operation(summary = "修改权要修改记录")
+    @Operation(summary = "修改专利权人权要修改")
     @PostMapping("/updatePatentClaimHistory")
     public Response updatePatentClaimHistory(@RequestBody UpdateClaimHistoryDTO updateClaimHistoryDTO) throws Exception {
         Integer id = reportAffairService.updateClaimHistory(updateClaimHistoryDTO);
@@ -189,7 +189,7 @@ public class ReportAffairController {
         return Response.success(records);
     }
 
-    @Operation(summary = "上传补充证据")
+    @Operation(summary = "添加请求人补充证据及理由")
     @PostMapping("/addSupplyEvidence")
     public Response addSupplyEvidence(@RequestBody AddSupplyEvidenceDTO addSupplyEvidenceDTO) throws Exception {
         Integer id = reportAffairService.addSupplyEvidence(addSupplyEvidenceDTO);
@@ -198,7 +198,7 @@ public class ReportAffairController {
         return Response.success(records);
     }
 
-    @Operation(summary = "修改补充证据")
+    @Operation(summary = "修改请求人补充证据及理由")
     @PostMapping("/updateSupplyEvidence")
     public Response updateSupplyEvidence(@RequestBody UpdateSupplyEvidenceDTO updateSupplyEvidenceDTO) throws Exception {
         Integer id = reportAffairService.updateSupplyEvidence(updateSupplyEvidenceDTO);
@@ -207,7 +207,7 @@ public class ReportAffairController {
         return Response.success(records);
     }
 
-    @Operation(summary = "上传其他文档")
+    @Operation(summary = "添加其他文档")
     @PostMapping("/addOtherDocuments")
     public Response addOtherDocuments(@RequestBody AddOtherDocumentsDTO addOtherDocumentsDTO) throws Exception {
         Integer id = otherDocumentsService.add(addOtherDocumentsDTO);

+ 9 - 1
src/main/java/cn/cslg/pas/controller/ReportProjectController.java

@@ -2,6 +2,7 @@ package cn.cslg.pas.controller;
 
 import cn.cslg.pas.common.auth.checkAuth;
 import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.UpdateSingleColumnDTO;
 import cn.cslg.pas.common.dto.business.EventDTO;
 import cn.cslg.pas.common.dto.business.ReportProjectDTO;
 import cn.cslg.pas.common.dto.business.UpdateEventDTO;
@@ -102,7 +103,7 @@ public class ReportProjectController {
 //    @checkAuth(FunId = "xiaoshi/report")
     public Response groupPatentProject(@RequestBody StringGroupRequest stringGroupRequest) throws Exception {
         Business business = businessFactory.getClass("reportProjectService");
-        Records records = (Records) business.getGroup(stringGroupRequest, "reportProject");
+        Records records = (Records) business.getGroup(stringGroupRequest, null);
         return Response.success(records);
     }
 
@@ -118,4 +119,11 @@ public class ReportProjectController {
         }
         return Response.success("更新成功");
     }
+
+    @Operation(summary = "更新报告中某一字段")
+    @PostMapping("/updateReportSingleColumn")
+    public Response updateReportSingleColumn(@RequestBody UpdateSingleColumnDTO columnDTO) throws Exception {
+        Integer id = reportProjectService.updateReportSingleColumn(columnDTO);
+        return Response.success(id);
+    }
 }

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

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * 口审记录
  * @Author xiexiang
@@ -36,4 +38,10 @@ public class OralTrail extends BaseEntity<OralTrail> {
      */
     @TableField(value = "report_affair_id")
     private Integer reportAffairId;
+
+    /**
+     * 口审日期
+     */
+    @TableField(value = "oral_date")
+    private Date oralDate;
 }

+ 7 - 0
src/main/java/cn/cslg/pas/domain/business/ReportAffair.java

@@ -57,4 +57,11 @@ public class ReportAffair extends BaseEntity<ReportAffair> {
      */
     @TableField(value = "case_child_phase")
     private String caseChildPhase;
+
+    /**
+     * 文档类型
+     */
+    @TableField(value = "document_type")
+    private String documentType;
+
 }

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

@@ -35,4 +35,35 @@ public class ReportAffairCasePhase extends BaseEntity<ReportAffairCasePhase> {
     @TableField(value = "flow_type")
     private Integer flowType;
 
+    /**
+     * 优先级
+     */
+    @TableField(value = "priority")
+    private Integer priority;
+
+    /**
+     * 是否显示
+     */
+    @TableField(value = "if_show")
+    private Boolean ifShow;
+
+    /**
+     * 文档类型
+     */
+    @TableField(value = "document_type")
+    private String documentType;
+
+    /**
+     * 官限日期计算
+     */
+    @TableField(value = "cal_official_deadline")
+    private String calOfficialDeadline;
+
+    /**
+     * 主被动类型
+     * 1主动
+     * 0被动
+     */
+    @TableField(value = "act_type")
+    private String actType;
 }

+ 8 - 0
src/main/java/cn/cslg/pas/mapper/ReportAffairMapper.java

@@ -1,7 +1,9 @@
 package cn.cslg.pas.mapper;
 
 import cn.cslg.pas.common.vo.QueryCasePhaseVO;
+import cn.cslg.pas.common.vo.QueryReportAffairCasePhaseVO;
 import cn.cslg.pas.common.vo.QueryReportAffairConclusionVO;
+import cn.cslg.pas.common.vo.invalidVO.OralTrailVO;
 import cn.cslg.pas.domain.business.ReportAffair;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
@@ -20,9 +22,15 @@ public interface ReportAffairMapper extends BaseMapper<ReportAffair> {
 
     public List<QueryCasePhaseVO> queryCasePhase(@Param("projectIds") List<Integer> projectIds);
 
+    public List<QueryCasePhaseVO> queryCasePhaseOral(@Param("projectIds") List<Integer> projectIds);
+
     public List<QueryReportAffairConclusionVO> queryReportAffairConclusion(@Param("projectIds") List<Integer> projectIds);
     public List<Integer> queryProjectByCasePhase(String name);
     public List<Integer> queryProjectByCaseChildPhase(String name);
     public List<Integer> queryProjectByConclusion(String name);
 
+    public List<QueryReportAffairCasePhaseVO> queryReportAffairCasePhase(@Param("projectId") Integer projectId);
+
+    public List<OralTrailVO> queryOralTrailList(@Param("projectId") Integer projectId, @Param("casePhaseId") Integer casePhaseId);
+
 }

+ 5 - 0
src/main/java/cn/cslg/pas/mapper/ReportProjectMapper.java

@@ -4,8 +4,10 @@ import cn.cslg.pas.common.vo.business.ReportProjectVO;
 import cn.cslg.pas.domain.business.PatentProject;
 import cn.cslg.pas.domain.business.ReportProject;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -19,4 +21,7 @@ public interface ReportProjectMapper extends BaseMapper<ReportProject> {
 
     public List<ReportProjectVO> getReportProject(String select,String sql1,String sql2,String sql3);
     public Long getReportProjectCount(String select,String sql1);
+
+    public int updateReportField(@Param("projectId") Integer projectId,@Param("field") String field,
+                                 @Param("value") Object value);
 }

+ 4 - 1
src/main/java/cn/cslg/pas/service/ReportAffairCasePhaseService.java

@@ -1,5 +1,6 @@
 package cn.cslg.pas.service;
 
+import cn.cslg.pas.domain.BaseEntity;
 import cn.cslg.pas.domain.business.ReportAffairCasePhase;
 import cn.cslg.pas.mapper.ReportAffairCasePhaseMapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -22,6 +23,8 @@ public class ReportAffairCasePhaseService extends ServiceImpl<ReportAffairCasePh
      * @return
      */
     public List<ReportAffairCasePhase> queryAssoCasePhaseList() {
-        return reportAffairCasePhaseMapper.selectList(new LambdaQueryWrapper<ReportAffairCasePhase>());
+        return reportAffairCasePhaseMapper.selectList(new LambdaQueryWrapper<ReportAffairCasePhase>()
+                .eq(ReportAffairCasePhase::getIfShow, true)
+                .orderByAsc(ReportAffairCasePhase::getPriority).orderByAsc(BaseEntity::getId));
     }
 }

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

@@ -53,6 +53,9 @@ public class AdminProceedService extends ServiceImpl<AdminProceedMapper, AdminPr
     @Autowired
     private MailSendService mailSendService;
 
+    @Autowired
+    private InvalidRequestFileService invalidRequestFileService;
+
     /**
      * 上传行政诉讼书
      * @param addDto
@@ -205,7 +208,10 @@ public class AdminProceedService extends ServiceImpl<AdminProceedMapper, AdminPr
         courtOrder.setConclusion(addJudgmentDTO.getConclusion());
         courtOrder.setReportAffairId(reportAffairId);
         courtOrder.insert();
-
+        //同步报告官限
+        if (addJudgmentDTO.getAssoCasePhaseId().equals(16)) {
+            invalidRequestFileService.getCommonMethod(projectId);
+        }
         //3. 添加报告事务与文件关联
         List<String> fileGuids = addJudgmentDTO.getFileGuids();
         if (fileGuids != null && !fileGuids.isEmpty()) {
@@ -264,6 +270,10 @@ public class AdminProceedService extends ServiceImpl<AdminProceedMapper, AdminPr
         reportAffair.setDescription(updateJudgmentDTO.getDescription());
         reportAffair.setAssoCasePhaseId(updateJudgmentDTO.getAssoCasePhaseId());
         reportAffair.updateById();
+        //同步报告官限
+        if (updateJudgmentDTO.getAssoCasePhaseId().equals(16)) {
+            invalidRequestFileService.getCommonMethod(projectId);
+        }
         //3. 更新报告事务与文件关联
         List<String> fileGuids = updateJudgmentDTO.getFileGuids();
         assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);

+ 11 - 7
src/main/java/cn/cslg/pas/service/business/InvalidDecisionFileService.java

@@ -54,6 +54,9 @@ public class InvalidDecisionFileService extends ServiceImpl<InvalidDecisionFileM
     @Autowired
     private AssoReportCronService assoReportCronService;
 
+    @Autowired
+    private InvalidRequestFileService invalidRequestFileService;
+
 
     public Integer add(AddInvalidDecisionFileDTO addInvalidDecisionFileDTO){
         if (addInvalidDecisionFileDTO == null) {
@@ -87,7 +90,10 @@ public class InvalidDecisionFileService extends ServiceImpl<InvalidDecisionFileM
         invalidDecisionFile.setLegalBase(addInvalidDecisionFileDTO.getLegalBase());
         invalidDecisionFile.setReportAffairId(reportAffairId);
         invalidDecisionFile.insert();
+        //同步无效决定号
         this.updateReportIssueNum(projectId, addInvalidDecisionFileDTO.getFileNo());
+        //同步报告官限
+        invalidRequestFileService.getCommonMethod(projectId);
         //3. 添加报告事务与文件关联
         List<String> fileGuids = addInvalidDecisionFileDTO.getFileGuids();
         if (fileGuids != null && !fileGuids.isEmpty()) {
@@ -126,13 +132,7 @@ public class InvalidDecisionFileService extends ServiceImpl<InvalidDecisionFileM
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
     public void updateReportIssueNum(Integer projectId, String num) {
         if (StringUtils.isNotEmpty(num)) {
-            ReportProject reportProject = reportProjectMapper.selectOne(new LambdaQueryWrapper<ReportProject>()
-                    .eq(ReportProject::getProjectId, projectId));
-            if (ObjectUtils.isNotEmpty(reportProject)) {
-                reportProject.setId(reportProject.getId());
-                reportProject.setIssueNumber(num);
-                reportProject.updateById();
-            }
+            reportProjectMapper.updateReportField(projectId, "issue_number", num);
         }
     }
 
@@ -178,6 +178,7 @@ public class InvalidDecisionFileService extends ServiceImpl<InvalidDecisionFileM
         }
         BeanUtils.copyProperties(updateInvalidDecisionFileDTO, invalidDecisionFile);
         invalidDecisionFile.updateById();
+        //同步无效决定号
         this.updateReportIssueNum(projectId, updateInvalidDecisionFileDTO.getFileNo());
 
         Integer reportAffairId = invalidDecisionFile.getReportAffairId();
@@ -190,6 +191,9 @@ public class InvalidDecisionFileService extends ServiceImpl<InvalidDecisionFileM
         reportAffair.setDescription(updateInvalidDecisionFileDTO.getDescription());
         reportAffair.setAssoCasePhaseId(updateInvalidDecisionFileDTO.getAssoCasePhaseId());
         reportAffair.updateById();
+
+        //同步报告官限
+        invalidRequestFileService.getCommonMethod(projectId);
         //3. 更新报告事务与文件关联
         LambdaQueryWrapper<AssoReportAffairFile> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(AssoReportAffairFile::getReportAffairId, reportAffairId);

+ 93 - 5
src/main/java/cn/cslg/pas/service/business/InvalidRequestFileService.java

@@ -5,12 +5,16 @@ import cn.cslg.pas.common.dto.invalidDTO.AddInvalidRequestFileDTO;
 import cn.cslg.pas.common.dto.invalidDTO.UpdateInvalidRequestFileDTO;
 import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import cn.cslg.pas.common.model.report.MailMessageDTO;
+import cn.cslg.pas.common.utils.DateUtils;
+import cn.cslg.pas.common.utils.GenerateObjectUtil;
+import cn.cslg.pas.common.vo.QueryReportAffairCasePhaseVO;
 import cn.cslg.pas.common.vo.invalidVO.InvalidRequestFileVO;
-import cn.cslg.pas.domain.business.AssoReportAffairFile;
-import cn.cslg.pas.domain.business.InvalidRequestFile;
-import cn.cslg.pas.domain.business.ReportAffair;
+import cn.cslg.pas.domain.business.*;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.InvalidRequestFileMapper;
+import cn.cslg.pas.mapper.ReportAffairCasePhaseMapper;
+import cn.cslg.pas.mapper.ReportAffairMapper;
+import cn.cslg.pas.mapper.ReportProjectMapper;
 import cn.cslg.pas.service.MailSendService;
 import cn.cslg.pas.service.report.SendReportMailService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -22,9 +26,12 @@ 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.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -48,6 +55,18 @@ public class InvalidRequestFileService extends ServiceImpl<InvalidRequestFileMap
     @Autowired
     private MailSendService mailSendService;
 
+    @Autowired
+    private ReportProjectMapper reportProjectMapper;
+
+    @Autowired
+    private ReportAffairMapper reportAffairMapper;
+
+    @Autowired
+    private OralTrailService oralTrailService;
+
+    @Autowired
+    private ReportAffairCasePhaseMapper reportAffairCasePhaseMapper;
+
     /**
      * 上传无效请求书
      * @param addInvalidRequestFileDTO
@@ -81,6 +100,8 @@ public class InvalidRequestFileService extends ServiceImpl<InvalidRequestFileMap
         BeanUtils.copyProperties(addInvalidRequestFileDTO, invalidRequestFile);
         invalidRequestFile.setReportAffairId(reportAffairId);
         invalidRequestFile.insert();
+        //同步报告官限
+        this.getCommonMethod(projectId);
         //3. 添加报告事务与文件关联
         List<String> fileGuids = addInvalidRequestFileDTO.getFileGuids();
         if (fileGuids != null && !fileGuids.isEmpty()) {
@@ -148,6 +169,8 @@ public class InvalidRequestFileService extends ServiceImpl<InvalidRequestFileMap
         reportAffair.setDescription(updateInvalidRequestFileDTO.getDescription());
         reportAffair.setAssoCasePhaseId(updateInvalidRequestFileDTO.getAssoCasePhaseId());
         reportAffair.updateById();
+        //同步报告官限
+        this.getCommonMethod(projectId);
         //3. 更新报告事务与文件关联
         List<String> fileGuids = updateInvalidRequestFileDTO.getFileGuids();
         assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);
@@ -156,4 +179,69 @@ public class InvalidRequestFileService extends ServiceImpl<InvalidRequestFileMap
         }
         return reportAffairId;
     }
+
+    //计算官限
+    public void getCommonMethod(Integer projectId) {
+        List<QueryReportAffairCasePhaseVO> casePhaseVOS = reportAffairMapper.queryReportAffairCasePhase(projectId);
+        if (!CollectionUtils.isEmpty(casePhaseVOS)) {
+            QueryReportAffairCasePhaseVO casePhaseVO = casePhaseVOS.get(0);
+            if (ObjectUtils.isNotEmpty(casePhaseVO)) {
+                Date occurredTime = casePhaseVO.getOccurredTime();
+                String deadline = casePhaseVO.getCalOfficialDeadline();
+                int num = Integer.parseInt(deadline.substring(0, deadline.length() - 1));
+                String numStr = deadline.substring(deadline.length() - 1);
+                Calendar calendar = Calendar.getInstance();
+                calendar.setTime(occurredTime);
+                if (numStr.equals("月")) {
+                    calendar.add(Calendar.MONTH, num);
+                } else {
+                    calendar.add(Calendar.DAY_OF_MONTH, num);
+                }
+                Date time = calendar.getTime();
+                String casePhase = casePhaseVO.getCasePhase();
+                if (!casePhase.equals("无效")) {
+                    this.updateReportOfficialDeadline(projectId, time);
+                } else {
+                    Integer priority = casePhaseVO.getPriority();
+                    if (priority < 8) {
+                        //查询出最新口审通知书记录
+                        List<ReportAffair> list = reportAffairService.list(new LambdaQueryWrapper<ReportAffair>()
+                                .eq(ReportAffair::getProjectId, projectId)
+                                .eq(ReportAffair::getAssoCasePhaseId, 31)
+                                .orderByDesc(ReportAffair::getOccurredTime));
+                        if (!CollectionUtils.isEmpty(list)) {
+                            ReportAffair affair = list.get(0);
+                            Integer affairId = affair.getId();
+                            LambdaQueryWrapper<OralTrail> queryWrapper = new LambdaQueryWrapper<>();
+                            queryWrapper.eq(OralTrail::getReportAffairId, affairId);
+                            OralTrail oralTrail = oralTrailService.getOne(queryWrapper, false);
+                            if (ObjectUtils.isNotEmpty(oralTrail)) {
+                                Date oralDate = oralTrail.getOralDate();
+                                //官限时间在口审日期之后,以口审日期为准
+                                if (oralDate != null && time.after(oralDate)) {
+                                    this.updateReportOfficialDeadline(projectId, oralDate);
+                                } else {
+                                    this.updateReportOfficialDeadline(projectId, time);
+                                }
+                            }
+                        } else {
+                            this.updateReportOfficialDeadline(projectId, time);
+                        }
+                    } else {
+                        this.updateReportOfficialDeadline(projectId, time);
+                    }
+                }
+            }
+        } else {
+            this.updateReportOfficialDeadline(projectId, null);
+        }
+    }
+
+    //同步修改报告中官限
+    public void updateReportOfficialDeadline(Integer projectId, Date date) {
+//        reportProjectMapper.updateOfficialDeadline(projectId, date);
+        reportProjectMapper.updateReportField(projectId, "official_deadline", date);
+    }
+
+
 }

+ 36 - 4
src/main/java/cn/cslg/pas/service/business/OralTrailService.java

@@ -7,12 +7,11 @@ import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import cn.cslg.pas.common.model.report.MailMessageDTO;
 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.domain.business.*;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.OralTrailMapper;
+import cn.cslg.pas.mapper.ReportAffairMapper;
+import cn.cslg.pas.mapper.ReportProjectMapper;
 import cn.cslg.pas.service.MailSendService;
 import cn.cslg.pas.service.report.SendReportMailService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -24,6 +23,7 @@ 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.util.CollectionUtils;
 import org.springframework.web.bind.annotation.RequestBody;
 
 import java.util.ArrayList;
@@ -50,6 +50,16 @@ public class OralTrailService extends ServiceImpl<OralTrailMapper, OralTrail> {
     @Autowired
     private MailSendService mailSendService;
 
+    @Autowired
+    private ReportAffairMapper reportAffairMapper;
+
+    @Autowired
+    private ReportProjectMapper reportProjectMapper;
+
+    @Autowired
+    @Lazy
+    private InvalidRequestFileService invalidRequestFileService;
+
     public Integer add(AddOralTrailDTO addOralTrailDTO){
         if (addOralTrailDTO == null) {
             throw new XiaoShiException("入参为空");
@@ -79,8 +89,14 @@ public class OralTrailService extends ServiceImpl<OralTrailMapper, OralTrail> {
         oralTrail.setParticipator(addOralTrailDTO.getParticipator());
         oralTrail.setPosition(addOralTrailDTO.getPosition());
         oralTrail.setDescription(addOralTrailDTO.getRecordDescription());
+        oralTrail.setOralDate(addOralTrailDTO.getOralDate());
         oralTrail.setReportAffairId(reportAffairId);
         oralTrail.insert();
+        //同步报告官限
+        if (addOralTrailDTO.getAssoCasePhaseId().equals(31)) {
+            invalidRequestFileService.getCommonMethod(projectId);
+            this.updateParticipator(projectId,addOralTrailDTO.getAssoCasePhaseId());
+        }
         //3. 添加报告事务与文件关联
         List<String> fileGuids = addOralTrailDTO.getFileGuids();
         if (fileGuids != null && !fileGuids.isEmpty()) {
@@ -99,6 +115,18 @@ public class OralTrailService extends ServiceImpl<OralTrailMapper, OralTrail> {
         return reportAffairId;
     }
 
+    //同步口审记录中的参与人到报告中合议组成员
+    public void updateParticipator(Integer projectId, Integer casePhaseId) {
+        List<OralTrailVO> trailVOS = reportAffairMapper.queryOralTrailList(projectId, casePhaseId);
+        if (!CollectionUtils.isEmpty(trailVOS)) {
+            OralTrailVO trailVO = trailVOS.get(0);
+            String participator = trailVO.getParticipator();
+            reportProjectMapper.updateReportField(projectId, "oral_panel_members", participator);
+        } else {
+            reportProjectMapper.updateReportField(projectId, "oral_panel_members", null);
+        }
+    }
+
     public OralTrailVO getOralTrailVO(Integer reportAffairId) {
         LambdaQueryWrapper<OralTrail> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(OralTrail::getReportAffairId, reportAffairId);
@@ -152,6 +180,10 @@ public class OralTrailService extends ServiceImpl<OralTrailMapper, OralTrail> {
         reportAffair.setDescription(updateOralTrailDTO.getDescription());
         reportAffair.setAssoCasePhaseId(updateOralTrailDTO.getAssoCasePhaseId());
         reportAffair.updateById();
+        if (updateOralTrailDTO.getAssoCasePhaseId().equals(31)) {
+            invalidRequestFileService.getCommonMethod(projectId);
+            this.updateParticipator(projectId, updateOralTrailDTO.getAssoCasePhaseId());
+        }
         //3. 更新报告事务与文件关联
         List<String> fileGuids = updateOralTrailDTO.getFileGuids();
         assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);

+ 6 - 0
src/main/java/cn/cslg/pas/service/business/OtherDocumentsService.java

@@ -72,6 +72,9 @@ public class OtherDocumentsService extends ServiceImpl<OtherDocumentsMapper, Oth
         if (StringUtils.isNotEmpty(addOtherDocumentsDTO.getCaseChildPhase())) {
             reportAffairDTO.setCaseChildPhase(addOtherDocumentsDTO.getCaseChildPhase());
         }
+        if (StringUtils.isNotEmpty(addOtherDocumentsDTO.getDocumentType())) {
+            reportAffairDTO.setDocumentType(addOtherDocumentsDTO.getDocumentType());
+        }
         Integer reportAffairId = reportAffairService.addReportAffair(reportAffairDTO);
 
         if (reportAffairId == null) {
@@ -140,6 +143,9 @@ public class OtherDocumentsService extends ServiceImpl<OtherDocumentsMapper, Oth
         if (StringUtils.isNotEmpty(updateOtherDocumentsDTO.getCaseChildPhase())) {
             reportAffair.setCaseChildPhase(updateOtherDocumentsDTO.getCaseChildPhase());
         }
+        if (StringUtils.isNotEmpty(updateOtherDocumentsDTO.getDocumentType())) {
+            reportAffair.setDocumentType(updateOtherDocumentsDTO.getDocumentType());
+        }
         reportAffair.updateById();
         //3. 更新报告事务与文件关联
         LambdaQueryWrapper<AssoReportAffairFile> queryWrapper = new LambdaQueryWrapper<>();

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

@@ -137,10 +137,14 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
                     LambdaQueryWrapper<InvalidRequestFile> queryWrapper1 = new LambdaQueryWrapper<>();
                     queryWrapper1.eq(InvalidRequestFile::getReportAffairId, id);
                     invalidRequestFileService.remove(queryWrapper1);
-                } else if (flowType.equals(6)) {//口审记录
+                } else if (flowType.equals(6) || flowType.equals(31)) {//口审记录 口审通知书
                     LambdaQueryWrapper<OralTrail> queryWrapper1 = new LambdaQueryWrapper<>();
                     queryWrapper1.eq(OralTrail::getReportAffairId, id);
                     oralTrailService.remove(queryWrapper1);
+                    Integer projectId = reportAffair.getProjectId();
+                    if (assoCasePhaseId.equals(31)) {
+                        oralTrailService.updateParticipator(projectId, assoCasePhaseId);
+                    }
                 } else if (flowType.equals(7)) {//无效决定书
                     Integer projectId = reportAffair.getProjectId();
                     //删除报告中的发文序号
@@ -173,6 +177,11 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
                     otherDocumentsService.remove(queryWrapper1);
                 }
                 this.removeById(id);
+                //判断是否需要同步更新报告官限
+                String deadline = casePhase.getCalOfficialDeadline();
+                if (StringUtils.isNotEmpty(deadline) || assoCasePhaseId.equals(31)) {
+                    invalidRequestFileService.getCommonMethod(reportAffair.getProjectId());
+                }
             }
         }
     }
@@ -221,7 +230,8 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
                 reportAffairVO.setFlowType(type);
                 reportAffairVO.setCasePhase(casePhase.getCasePhase());
                 reportAffairVO.setCaseChildPhase(casePhase.getCaseChildPhase());
-                if (type.equals(6)) {//6 口审记录
+                reportAffairVO.setDocumentType(casePhase.getDocumentType());
+                if (type.equals(6) || type.equals(31)) {//6 口审记录
                     this.loadOralTrail(reportAffairVO);
                 } else if (type.equals(1)) {//1 无效请求书
                     this.loadInvalidRequestFile(reportAffairVO);
@@ -229,7 +239,7 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
                     this.loadStateOpinion(reportAffairVO);
                 } else if (type.equals(7)) {//7 无效决定书
                     this.loadInvalidDecisionFile(reportAffairVO);
-                } else if (type.equals(15) || type.equals(25)) {//15 25 行政诉讼书
+                } else if (type.equals(8) || type.equals(18)) {//8 18 原告起诉状  上诉人上诉状
                     this.loadAdminProceed(reportAffairVO);
                 } else if (type.equals(16) || type.equals(26)) {//16 26 行政诉讼判决书
                     this.loadJudgment(reportAffairVO);
@@ -240,6 +250,7 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
                 } else if (type.equals(17) || type.equals(27) || type.equals(28)) {//17 27 28其他文档
                     this.loadOtherDocuments(reportAffairVO);
                     reportAffairVO.setCaseChildPhase(item.getCaseChildPhase());
+                    reportAffairVO.setDocumentType(item.getDocumentType());
                 }
             }
             reportAffairVOS.add(reportAffairVO);
@@ -733,6 +744,10 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
 
     /**
      * 添加案件文档
+     * 详情有以下流程案件添加接口:
+     * 添加请求人意见陈述书  添加合议组无效宣告受理通知书  添加原告意见陈述书  添加原告证据  添加第三人意见陈述
+     * 添加法院行政诉讼传票  添加法院转送文件  添加上诉人意见陈述  添加上诉人证据  添加第三人意见  添加被上诉人意见
+     * 添加法院转送文件  添加法院行政诉讼传票
      * @param vo
      * @return
      */
@@ -760,6 +775,10 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
         if (reportAffairId == null) {
             throw new XiaoShiException("上传报告事务失败");
         }
+        //2.同步报告官限
+        if (vo.getAssoCasePhaseId().equals(29) || vo.getAssoCasePhaseId().equals(30)) {
+            invalidRequestFileService.getCommonMethod(projectId);
+        }
         //3. 添加报告事务与文件关联
         List<String> fileGuids = vo.getFileGuids();
         if (!CollectionUtils.isEmpty(fileGuids)) {
@@ -807,6 +826,11 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
         reportAffair.setDescription(vo.getDescription());
         reportAffair.setAssoCasePhaseId(vo.getAssoCasePhaseId());
         reportAffair.updateById();
+
+        //同步报告官限
+        if (vo.getAssoCasePhaseId().equals(29) || vo.getAssoCasePhaseId().equals(30)) {
+            invalidRequestFileService.getCommonMethod(projectId);
+        }
         //3. 更新报告事务与文件关联
         List<String> fileGuids = vo.getFileGuids();
         assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);

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

@@ -1,6 +1,7 @@
 package cn.cslg.pas.service.business;
 
 import cn.cslg.pas.common.dto.ClientDTO;
+import cn.cslg.pas.common.dto.UpdateSingleColumnDTO;
 import cn.cslg.pas.common.dto.business.PatentProjectDTO;
 import cn.cslg.pas.common.dto.business.ProjectEventDTO;
 import cn.cslg.pas.common.dto.business.ReportProjectDTO;
@@ -11,6 +12,7 @@ import cn.cslg.pas.common.model.request.GroupRequest;
 import cn.cslg.pas.common.model.request.QueryRequest;
 import cn.cslg.pas.common.model.request.StringRequest;
 import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.GenerateObjectUtil;
 import cn.cslg.pas.common.utils.LoginUtils;
 import cn.cslg.pas.common.vo.DepartmentVO;
 import cn.cslg.pas.common.vo.PatentWithIdVO;
@@ -37,11 +39,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import jakarta.validation.constraints.AssertFalse;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 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.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
@@ -217,9 +222,14 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
      * @throws Exception
      */
     @Transactional(rollbackFor = Exception.class)
-    public Object getGroup(GroupRequest groupRequest, String tableName) throws Exception {
+    public Object getGroup(GroupRequest groupRequest, String groupTableName) throws Exception {
         StringRequest stringRequest = new StringRequest();
         BeanUtils.copyProperties(groupRequest, stringRequest);
+        String tableName = "reportProject";
+        Boolean ifInvalidReport = stringRequest.getIfInvalidReport();
+        if (ifInvalidReport != null && ifInvalidReport) {
+            tableName = "invalidReportProject";
+        }
         List<String> sqls = formatQueryService.reSqls(stringRequest, tableName);
         sqls = this.loadSearchSql(sqls);
         //格式化 分组
@@ -706,6 +716,7 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
         List<SystemFile> systemFiles = new ArrayList<>();
         List<AssoProjectFile> assoEventFiles = new ArrayList<>();
         List<QueryCasePhaseVO> casePhaseVOS = new ArrayList<>();
+        List<QueryCasePhaseVO> casePhaseVOS1 = new ArrayList<>();
         List<QueryReportAffairConclusionVO> conclusionVOS = new ArrayList<>();
 
 
@@ -758,6 +769,7 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
             createIds.addAll(personIds);
 
             casePhaseVOS = reportAffairMapper.queryCasePhase(ids);
+            casePhaseVOS1 = reportAffairMapper.queryCasePhaseOral(ids);
             conclusionVOS = reportAffairMapper.queryReportAffairConclusion(ids);
         }
 
@@ -940,11 +952,19 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
             reportProjectVO.setCronNames(reCronNames);
 
             //装载案件阶段与案件子阶段
-            if (!CollectionUtils.isEmpty(casePhaseVOS)) {
+            if (!CollectionUtils.isEmpty(casePhaseVOS) && !CollectionUtils.isEmpty(casePhaseVOS1)) {
+                QueryCasePhaseVO casePhaseVO1 = casePhaseVOS1.stream().filter(i -> i.getProjectId().equals(reportProjectVO.getId())).findFirst().orElse(null);
                 QueryCasePhaseVO casePhaseVO = casePhaseVOS.stream().filter(i -> i.getProjectId().equals(reportProjectVO.getId())).findFirst().orElse(null);
                 if (casePhaseVO != null) {
                     reportProjectVO.setCasePhase(casePhaseVO.getCasePhase());
                     reportProjectVO.setCaseChildPhase(casePhaseVO.getCaseChildPhase());
+                } else {
+                    if (casePhaseVO1 != null) {
+                        Integer flowType = casePhaseVO1.getFlowType();
+                        if (flowType == 6) {
+                            reportProjectVO.setCasePhase(casePhaseVO1.getCasePhase());
+                        }
+                    }
                 }
             }
             //装载行诉结果
@@ -1038,7 +1058,7 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
                 "        p.entrust_type as entrustType,p.entrust_id as entrustId,rp.product_or_tech as productOrTech,rp.cron_description\n" +
                 "        as cronDescription ,rp.status as status,rp.if_second_invalid as ifSecondInvalid,rp.case_number as caseNumber ,rp.issue_number as issueNumber ,rp.invalid_application as\n" +
                 "        invalidApplication ,rp.act_type as actType ,rp.patent_type as patentType ,rp.current_application as\n" +
-                "        currentApplication, rp.invention_name as inventionName,p.contract_no as contractNo,rp.carding_opinion,\n" +
+                "        currentApplication, rp.invention_name as inventionName,p.contract_no as contractNo,rp.carding_opinion,rp.official_deadline as officialDeadline,rp.oral_panel_members as oralPanelMembers,rp.evidence_risk_response as evidenceRiskResponse,\n" +
                 "        rp.accept_year as acceptYear,rp.applicant_agency as applicantAgency,rp.right_holder_agency as rightHolderAgency,rp.case_stage as caseStage,\n" +
                 "        aspe.event_id as eventId,arc.cron_id as cronId,aspm.matter_id as matterId,asps.scenario_id as scenarioId,rp.actual_person as actualPerson,rp.litigation_party as litigationParty,rp.right_holder as rightHolderStr from report as rp left join project as p on rp.project_id =p.id ";
         tableName += "left join asso_report_cron arc on p.id =arc.project_id " +
@@ -1047,4 +1067,23 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper, Repor
                 "left join (select * from asso_project_event where matter_id is not null ) as aspm on p.id = aspm.project_id ";
         return tableName;
     }
+
+    public Integer updateReportSingleColumn(UpdateSingleColumnDTO columnDTO) throws Exception {
+        if (ObjectUtils.isEmpty(columnDTO)) {
+            throw new XiaoShiException("请输入值");
+        }
+        Integer projectId = columnDTO.getProjectId();
+        ReportProject reportProject = this.getOne(new LambdaQueryWrapper<ReportProject>()
+                .eq(ReportProject::getProjectId, projectId));
+        if (ObjectUtils.isEmpty(reportProject)) {
+            throw new XiaoShiException("未查询到该报告");
+        }
+        String columnName = GenerateObjectUtil.getTableColumnName(reportProject, columnDTO.getField());
+        if (StringUtils.isNotEmpty(columnName)) {
+            reportProjectMapper.updateReportField(projectId, columnName, columnDTO.getValue());
+        } else {
+            throw new XiaoShiException("获取栏位错误");
+        }
+        return reportProject.getId();
+    }
 }

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

@@ -778,7 +778,7 @@ public class EsCountService {
                 }
             });
         });
-        if (fieldType == null || fieldType != 6) {
+        if (fieldType == null || fieldType == 6) {
             Long customNum = this.getUnselectedCustomNum1(projectId, fieldId, query);
             EsCountDetailDTO detail = new EsCountDetailDTO();
             detail.setField(field);

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

@@ -556,5 +556,53 @@
     "ifShow": "true",
     "ifSort": "false",
     "ifAsCondition": "true"
+  },
+  {
+    "name": "官限日期",
+    "type": "DateTime",
+    "value": "officialDeadline",
+    "field": "officialDeadline",
+    "sqlField": "t.officialDeadline",
+    "sqlClass": "getDateTimeSql",
+    "orderClass": "getComOrder",
+    "groupClass": "getTimeGroup",
+    "ifSearch": "true",
+    "ifGroup": "false",
+    "ifShow": "true",
+    "ifSort": "true",
+    "defaultHidden": "true",
+    "ifAsCondition": "true"
+  },
+  {
+    "name": "口审合议庭成员",
+    "type": "String",
+    "value": "oralPanelMembers",
+    "field": "oralPanelMembers",
+    "sqlField": "t.oralPanelMembers",
+    "sqlClass": "getLikeSql",
+    "orderClass": "getComOrder",
+    "groupClass": "getComGroup",
+    "ifSearch": "true",
+    "ifGroup": "false",
+    "ifShow": "true",
+    "ifSort": "true",
+    "defaultHidden": "false",
+    "ifAsCondition": "true"
+  },
+  {
+    "name": "证据风险及措施",
+    "type": "String",
+    "value": "evidenceRiskResponse",
+    "field": "evidenceRiskResponse",
+    "sqlField": "t.evidenceRiskResponse",
+    "sqlClass": "getLikeSql",
+    "orderClass": "getComOrder",
+    "groupClass": "getComGroup",
+    "ifSearch": "true",
+    "ifGroup": "false",
+    "ifShow": "true",
+    "ifSort": "true",
+    "defaultHidden": "false",
+    "ifAsCondition": "true"
   }
 ]

+ 46 - 2
src/main/resources/mapper/ReportAffairMapper.xml

@@ -6,6 +6,32 @@
         FROM (
         SELECT a.case_phase,
         b.project_id,
+        a.flow_type,
+        CASE
+        WHEN a.case_child_phase != '' THEN a.case_child_phase
+        ELSE b.case_child_phase
+        END AS caseChildPhase,
+        ROW_NUMBER() OVER (
+        PARTITION BY b.project_id
+        ORDER BY b.occurred_time DESC, b.id DESC
+        ) AS rn
+        FROM report_affair_case_phase a
+        LEFT JOIN report_affair b ON b.asso_case_phase_id = a.id
+        WHERE a.flow_type != 6
+        and b.project_id IN
+        <foreach collection="projectIds" index="index" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+        ) t
+        WHERE rn = 1
+    </select>
+
+    <select id="queryCasePhaseOral" resultType="cn.cslg.pas.common.vo.QueryCasePhaseVO">
+        SELECT *
+        FROM (
+        SELECT a.case_phase,
+        b.project_id,
+        a.flow_type,
         CASE
         WHEN a.case_child_phase != '' THEN a.case_child_phase
         ELSE b.case_child_phase
@@ -69,8 +95,8 @@
         from report_affair a
         left join report_affair_case_phase b on a.asso_case_phase_id = b.id
         ) as t
-        <where>p1 like concat('%', #{name}, '%')
-            or p2 like concat('%', #{name}, '%')
+        <where>(p1 like concat('%', #{name}, '%')
+            or p2 like concat('%', #{name}, '%'))
             and rn=1
             group by project_id
         </where>
@@ -91,4 +117,22 @@
         </where>
 
     </select>
+
+    <select id="queryReportAffairCasePhase" resultType="cn.cslg.pas.common.vo.QueryReportAffairCasePhaseVO">
+        SELECT a.project_id,a.occurred_time,b.id,b.flow_type,b.case_phase,b.case_child_phase,b.priority,b.cal_official_deadline
+        FROM report_affair a
+        left join report_affair_case_phase b on a.asso_case_phase_id = b.id
+        where a.project_id = #{projectId}
+          and b.if_show = 1
+          and b.cal_official_deadline is not NULL
+        ORDER BY a.occurred_time DESC,a.id DESC
+    </select>
+
+    <select id="queryOralTrailList" resultType="cn.cslg.pas.common.vo.invalidVO.OralTrailVO">
+        select a.id as oralTrailId,a.position,a.participator,a.description as recordDescription,a.oral_date
+        from oral_trail a
+        left join report_affair b on b.id = a.report_affair_id
+        where b.project_id = #{projectId} and b.asso_case_phase_id = #{casePhaseId}
+        ORDER BY b.occurred_time DESC,b.id DESC
+    </select>
 </mapper>

+ 8 - 0
src/main/resources/mapper/ReportProjectMapper.xml

@@ -20,4 +20,12 @@
         </if>
     </select>
 
+    <update id="updateReportField">
+        UPDATE report
+        <set>
+            ${field} = #{value}
+        </set>
+        WHERE project_id = #{projectId}
+    </update>
+
 </mapper>

+ 19 - 9
src/test/java/cn/cslg/pas/service/EventServiceTests.java

@@ -8,10 +8,7 @@ import cn.cslg.pas.common.dto.es.EsCustomFieldDTO;
 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.DateUtils;
-import cn.cslg.pas.common.utils.PatentNoUtil;
-import cn.cslg.pas.common.utils.Response;
-import cn.cslg.pas.common.utils.StringUtils;
+import cn.cslg.pas.common.utils.*;
 import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
 import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
 import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
@@ -20,6 +17,7 @@ import cn.cslg.pas.common.vo.StarPatentVO;
 import cn.cslg.pas.common.vo.business.*;
 import cn.cslg.pas.controller.EventController;
 import cn.cslg.pas.controller.PatentController;
+import cn.cslg.pas.domain.business.ReportProject;
 import cn.cslg.pas.domain.es.FamilyPatent;
 import cn.cslg.pas.domain.es.Patent;
 import cn.cslg.pas.domain.es.PatentFamilyMessage;
@@ -27,9 +25,7 @@ import cn.cslg.pas.domain.es.PatentPerson;
 import cn.cslg.pas.exception.ExceptionEnum;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.AssoProjectEventMapper;
-import cn.cslg.pas.service.business.MergePersonService;
-import cn.cslg.pas.service.business.ProductMarketDataService;
-import cn.cslg.pas.service.business.ReportTempleService;
+import cn.cslg.pas.service.business.*;
 import cn.cslg.pas.service.business.es.*;
 import cn.cslg.pas.service.common.FileManagerService;
 import cn.cslg.pas.service.common.PatentStarApiService;
@@ -46,6 +42,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import org.apache.http.entity.ContentType;
+import org.apache.poi.hssf.record.DVALRecord;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -914,10 +911,23 @@ public class EventServiceTests {
 //        esExportService.formatPatentNO(list);
     }
 
+    @Autowired
+    private InvalidRequestFileService invalidRequestFileService;
+    @Autowired
+    private ReportProjectService reportProjectService;
     @Test
     public void test120() throws Exception {
-        final long count = esService.getMergePersonCount(320, "fbLUhY8BdwlBaY8vCspo");
-        System.out.println(count);
+//        final long count = esService.getMergePersonCount(320, "fbLUhY8BdwlBaY8vCspo");
+//        System.out.println(count);
+//        String s = "1月";
+//        final String s1 = s.substring(s.length()-1);
+//        System.out.println(s1);
+//        final String s2 = s.substring(0, s.length()-1);
+//        System.out.println(s2);
+
+//        invalidRequestFileService.getCommonMethod(689);
+        ReportProject project = reportProjectService.getById(211);
+        GenerateObjectUtil.getTableColumnName(project,"evidenceRiskResponse");
     }
 
 }