Browse Source

Merge remote-tracking branch 'origin/dev-shaoyin'

lrj 9 months ago
parent
commit
f8e0b1103d
51 changed files with 1316 additions and 4 deletions
  1. 1 1
      src/main/java/cn/cslg/pas/common/config/ElasticSearchClientConfig.java
  2. 5 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddAdminProceedDTO.java
  3. 5 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddClaimHistoryDTO.java
  4. 5 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddInvalidDecisionFileDTO.java
  5. 5 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddInvalidRequestFileDTO.java
  6. 5 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddJudgmentDTO.java
  7. 5 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddOralTrailDTO.java
  8. 5 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddOtherDocumentsDTO.java
  9. 5 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddStateOpinionDTO.java
  10. 5 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddSupplyEvidenceDTO.java
  11. 5 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateAdminProceedDTO.java
  12. 5 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateClaimHistoryDTO.java
  13. 5 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateInvalidDecisionFileDTO.java
  14. 5 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateInvalidRequestFileDTO.java
  15. 5 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateJudgmentDTO.java
  16. 5 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateOralTrailDTO.java
  17. 5 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateOtherDocumentsDTO.java
  18. 5 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateStateOpinionDTO.java
  19. 5 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateSupplyEvidenceDTO.java
  20. 13 0
      src/main/java/cn/cslg/pas/common/model/report/ExtraEmailDTO.java
  21. 33 0
      src/main/java/cn/cslg/pas/common/model/report/MailMessageDTO.java
  22. 12 0
      src/main/java/cn/cslg/pas/common/model/report/QueryIprPersonDTO.java
  23. 17 0
      src/main/java/cn/cslg/pas/common/model/report/QueryIprPersonVO.java
  24. 8 0
      src/main/java/cn/cslg/pas/common/model/report/QueryMatchCasePersonDTO.java
  25. 27 0
      src/main/java/cn/cslg/pas/common/model/report/QueryMatchCasePersonVO.java
  26. 14 0
      src/main/java/cn/cslg/pas/common/model/report/UpdateIprPersonDTO.java
  27. 12 0
      src/main/java/cn/cslg/pas/common/model/report/UpdateMatchCasePersonDTO.java
  28. 63 0
      src/main/java/cn/cslg/pas/controller/report/IprPersonController.java
  29. 62 0
      src/main/java/cn/cslg/pas/controller/report/MatchCasePersonController.java
  30. 17 0
      src/main/java/cn/cslg/pas/domain/report/AssoIprReportType.java
  31. 32 0
      src/main/java/cn/cslg/pas/domain/report/DefaultEmailPerson.java
  32. 26 0
      src/main/java/cn/cslg/pas/domain/report/IprPerson.java
  33. 30 0
      src/main/java/cn/cslg/pas/domain/report/MatchCasePerson.java
  34. 13 0
      src/main/java/cn/cslg/pas/mapper/report/AssoIprReportTypeMapper.java
  35. 18 0
      src/main/java/cn/cslg/pas/mapper/report/IprPersonMapper.java
  36. 18 0
      src/main/java/cn/cslg/pas/mapper/report/MatchCasePersonMapper.java
  37. 29 0
      src/main/java/cn/cslg/pas/service/MailSendService.java
  38. 23 0
      src/main/java/cn/cslg/pas/service/business/AdminProceedService.java
  39. 17 0
      src/main/java/cn/cslg/pas/service/business/InvalidDecisionFileService.java
  40. 16 0
      src/main/java/cn/cslg/pas/service/business/InvalidRequestFileService.java
  41. 17 0
      src/main/java/cn/cslg/pas/service/business/OralTrailService.java
  42. 18 0
      src/main/java/cn/cslg/pas/service/business/OtherDocumentsService.java
  43. 28 0
      src/main/java/cn/cslg/pas/service/business/ReportAffairService.java
  44. 47 0
      src/main/java/cn/cslg/pas/service/report/AssoIprReportTypeService.java
  45. 227 0
      src/main/java/cn/cslg/pas/service/report/IprPersonService.java
  46. 155 0
      src/main/java/cn/cslg/pas/service/report/MatchCasePersonService.java
  47. 173 0
      src/main/java/cn/cslg/pas/service/report/SendReportMailService.java
  48. 20 0
      src/main/resources/mapper/report/IprPersonMapper.xml
  49. 22 0
      src/main/resources/mapper/report/MatchCasePersonMapper.xml
  50. 17 2
      src/test/java/cn/cslg/pas/getSimilarTest.java
  51. 1 1
      src/test/java/cn/cslg/pas/test/TempServiceTests.java

+ 1 - 1
src/main/java/cn/cslg/pas/common/config/ElasticSearchClientConfig.java

@@ -56,7 +56,7 @@ public class  ElasticSearchClientConfig {
         public ElasticsearchClient elasticsearchClient() throws Exception {
             RestClientBuilder builder = RestClient.builder(new HttpHost(config, 9200, "http"));
             CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
-            credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic", "Xiaoshi221101"));
+            credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic", "xiaoshi221101"));
             SSLContext sslContext = SSLContextBuilder.create()
                     .loadTrustMaterial(new TrustSelfSignedStrategy())
                     .build();

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.invalidDTO;
 
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
@@ -25,4 +26,8 @@ public class AddAdminProceedDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
+
+    private List<ExtraEmailDTO> extraEmailDTOS;
 }

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.invalidDTO;
 
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -23,4 +24,8 @@ public class AddClaimHistoryDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
+
+    private List<ExtraEmailDTO> extraEmailDTOS;
 }

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.invalidDTO;
 
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import cn.cslg.pas.domain.BaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -44,4 +45,8 @@ public class AddInvalidDecisionFileDTO {
 
     private String description;
 
+    private Boolean ifSendEmail;
+
+    private List<ExtraEmailDTO> extraEmailDTOS;
+
 }

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.invalidDTO;
 
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -26,4 +27,8 @@ public class AddInvalidRequestFileDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
+
+    private List<ExtraEmailDTO> extraEmailDTOS;
 }

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.invalidDTO;
 
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -25,4 +26,8 @@ public class AddJudgmentDTO {
     private String description;
 
     private String conclusion;
+
+    private Boolean ifSendEmail;
+
+    private List<ExtraEmailDTO> extraEmailDTOS;
 }

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.invalidDTO;
 
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -29,4 +30,8 @@ public class AddOralTrailDTO {
     private String recordDescription;
 
     private String description;
+
+    private Boolean ifSendEmail;
+
+    private List<ExtraEmailDTO> extraEmailDTOS;
 }

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.invalidDTO;
 
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -24,4 +25,8 @@ public class AddOtherDocumentsDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
+
+    private List<ExtraEmailDTO> extraEmailDTOS;
 }

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.invalidDTO;
 
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -22,4 +23,8 @@ public class AddStateOpinionDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
+
+    private List<ExtraEmailDTO> extraEmailDTOS;
 }

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.invalidDTO;
 
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -23,4 +24,8 @@ public class AddSupplyEvidenceDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
+
+    private List<ExtraEmailDTO> extraEmailDTOS;
 }

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.invalidDTO;
 
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -25,4 +26,8 @@ public class UpdateAdminProceedDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
+
+    private List<ExtraEmailDTO> extraEmailDTOS;
 }

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.invalidDTO;
 
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -24,4 +25,8 @@ public class UpdateClaimHistoryDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
+
+    private List<ExtraEmailDTO> extraEmailDTOS;
 }

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.invalidDTO;
 
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -42,4 +43,8 @@ public class UpdateInvalidDecisionFileDTO {
 
     private String description;
 
+    private Boolean ifSendEmail;
+
+    private List<ExtraEmailDTO> extraEmailDTOS;
+
 }

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.invalidDTO;
 
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -28,4 +29,8 @@ public class UpdateInvalidRequestFileDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
+
+    private List<ExtraEmailDTO> extraEmailDTOS;
 }

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.invalidDTO;
 
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -26,4 +27,8 @@ public class UpdateJudgmentDTO {
     private String description;
 
     private String conclusion;
+
+    private Boolean ifSendEmail;
+
+    private List<ExtraEmailDTO> extraEmailDTOS;
 }

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.invalidDTO;
 
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -30,4 +31,8 @@ public class UpdateOralTrailDTO {
     private String recordDescription;
 
     private String description;
+
+    private Boolean ifSendEmail;
+
+    private List<ExtraEmailDTO> extraEmailDTOS;
 }

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.invalidDTO;
 
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -25,4 +26,8 @@ public class UpdateOtherDocumentsDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
+
+    private List<ExtraEmailDTO> extraEmailDTOS;
 }

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.invalidDTO;
 
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -23,4 +24,8 @@ public class UpdateStateOpinionDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
+
+    private List<ExtraEmailDTO> extraEmailDTOS;
 }

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

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.invalidDTO;
 
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -24,4 +25,8 @@ public class UpdateSupplyEvidenceDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
+
+    private List<ExtraEmailDTO> extraEmailDTOS;
 }

+ 13 - 0
src/main/java/cn/cslg/pas/common/model/report/ExtraEmailDTO.java

@@ -0,0 +1,13 @@
+package cn.cslg.pas.common.model.report;
+
+import lombok.Data;
+
+/**
+ * @Author xiexiang
+ * @Date 2025/1/2
+ */
+@Data
+public class ExtraEmailDTO {
+    private String name;
+    private String email;
+}

+ 33 - 0
src/main/java/cn/cslg/pas/common/model/report/MailMessageDTO.java

@@ -0,0 +1,33 @@
+package cn.cslg.pas.common.model.report;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/12/29
+ */
+@Data
+public class MailMessageDTO {
+    // 0
+    private String name;
+    private List<String> names;
+    // emails
+    private List<String> emails;
+    // 1
+    private String tenantName;
+    // 2
+    private List<String> fileGuids;
+
+    private List<String> fileNames;
+
+    private String fileName;
+    // 3
+    private String url;
+    // 4
+    private String reportName;
+
+    private String createId;
+
+}

+ 12 - 0
src/main/java/cn/cslg/pas/common/model/report/QueryIprPersonDTO.java

@@ -0,0 +1,12 @@
+package cn.cslg.pas.common.model.report;
+
+import lombok.Data;
+
+@Data
+public class QueryIprPersonDTO {
+    private String name;
+    private String email;
+    private Boolean ifDefault;
+    private Long size;
+    private Long current;
+}

+ 17 - 0
src/main/java/cn/cslg/pas/common/model/report/QueryIprPersonVO.java

@@ -0,0 +1,17 @@
+package cn.cslg.pas.common.model.report;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class QueryIprPersonVO {
+    private Integer id;
+    private String name;
+    private String email;
+    private Boolean ifDefault;
+    private String createId;
+    private String createName;
+    private Date createTime;
+    private Integer reportType;
+}

+ 8 - 0
src/main/java/cn/cslg/pas/common/model/report/QueryMatchCasePersonDTO.java

@@ -0,0 +1,8 @@
+package cn.cslg.pas.common.model.report;
+
+import lombok.Data;
+
+@Data
+public class QueryMatchCasePersonDTO {
+    private Integer reportId;
+}

+ 27 - 0
src/main/java/cn/cslg/pas/common/model/report/QueryMatchCasePersonVO.java

@@ -0,0 +1,27 @@
+package cn.cslg.pas.common.model.report;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class QueryMatchCasePersonVO {
+    // 配案人员id    MatchCasePerson
+    private Integer id;
+    // 姓名   MatchCasePerson
+    private String name;
+    // 邮箱  iprPerson
+    private String email;
+    // 报告id     MatchCasePerson
+    private Integer reportId;
+    // 创建人id    MatchCasePerson
+    private String createId;
+    // 创建人名称
+    private String createName;
+
+    private Integer tenantId;
+    // 创建时间    MatchCasePerson
+    private Date createTime;
+    // ipr人员id   MatchCasePerson
+    private Integer iprPersonId;
+}

+ 14 - 0
src/main/java/cn/cslg/pas/common/model/report/UpdateIprPersonDTO.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.common.model.report;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UpdateIprPersonDTO {
+    private Integer id;
+    private String name;
+    private String email;
+    private Boolean ifDefault;
+    private List<Integer> reportTypes;
+}

+ 12 - 0
src/main/java/cn/cslg/pas/common/model/report/UpdateMatchCasePersonDTO.java

@@ -0,0 +1,12 @@
+package cn.cslg.pas.common.model.report;
+
+import lombok.Data;
+
+@Data
+public class UpdateMatchCasePersonDTO {
+    private Integer id;
+    private String name;
+    private String email;
+    private Integer iprPersonId;
+    private Integer reportId;
+}

+ 63 - 0
src/main/java/cn/cslg/pas/controller/report/IprPersonController.java

@@ -0,0 +1,63 @@
+package cn.cslg.pas.controller.report;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.ComparedPatentDTO;
+import cn.cslg.pas.common.dto.ComparedPatentVO;
+import cn.cslg.pas.common.dto.business.GetFeatureSplitDTO;
+import cn.cslg.pas.common.dto.business.TortCompareRecordDTO;
+import cn.cslg.pas.common.dto.business.TortTaskDTO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.model.report.QueryIprPersonDTO;
+import cn.cslg.pas.common.model.report.UpdateIprPersonDTO;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.vo.business.TortCompareRecordVO;
+import cn.cslg.pas.exception.ConditionException;
+import cn.cslg.pas.exception.UnLoginException;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.business.FTOCompareRecordService;
+import cn.cslg.pas.service.business.ProjectTaskService;
+import cn.cslg.pas.service.report.IprPersonService;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * FTOTort
+ *
+ * @Author xiexiang
+ * @Date 2023/12/8
+ */
+@Slf4j
+@RequestMapping(Constants.API_XiaoSHI + "/report/iprPerson")
+@RestController
+public class IprPersonController {
+    @Autowired
+    private IprPersonService iprPersonService;
+
+    @Operation(summary = "添加或更新ipr人员信息")
+    @PostMapping("/update")
+    public Response update(@RequestBody UpdateIprPersonDTO updateIprPersonDTO) {
+        Integer id = iprPersonService.updateIprPerson(updateIprPersonDTO);
+        return Response.success(id);
+    }
+
+    @Operation(summary = "批量删除ipr人员信息")
+    @PostMapping("/delete")
+    public Response delete(@RequestBody List<Integer> ids) {
+        ids = iprPersonService.delete(ids);
+        return Response.success(ids);
+
+    }
+
+    @Operation(summary = "查询ipr人员信息")
+    @PostMapping("/query")
+    public Response query(@RequestBody QueryIprPersonDTO queryIprPersonDTO) {
+        Records records = iprPersonService.query(queryIprPersonDTO);
+        return Response.success(records);
+
+    }
+}

+ 62 - 0
src/main/java/cn/cslg/pas/controller/report/MatchCasePersonController.java

@@ -0,0 +1,62 @@
+package cn.cslg.pas.controller.report;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.ComparedPatentDTO;
+import cn.cslg.pas.common.dto.ComparedPatentVO;
+import cn.cslg.pas.common.dto.business.GetFeatureSplitDTO;
+import cn.cslg.pas.common.dto.business.TortCompareRecordDTO;
+import cn.cslg.pas.common.dto.business.TortTaskDTO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.model.report.*;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.vo.business.TortCompareRecordVO;
+import cn.cslg.pas.exception.ConditionException;
+import cn.cslg.pas.exception.UnLoginException;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.business.FTOCompareRecordService;
+import cn.cslg.pas.service.business.ProjectTaskService;
+import cn.cslg.pas.service.report.IprPersonService;
+import cn.cslg.pas.service.report.MatchCasePersonService;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * FTOTort
+ *
+ * @Author xiexiang
+ * @Date 2023/12/8
+ */
+@Slf4j
+@RequestMapping(Constants.API_XiaoSHI + "/report/matchCasePerson")
+@RestController
+public class MatchCasePersonController {
+    @Autowired
+    private MatchCasePersonService matchCasePersonService;
+
+    @Operation(summary = "添加或更新配案人员信息")
+    @PostMapping("/update")
+    public Response update(@RequestBody UpdateMatchCasePersonDTO updateMatchCasePersonDTO) {
+        Integer id = matchCasePersonService.updateMatchCasePerson(updateMatchCasePersonDTO);
+        return Response.success(id);
+    }
+
+    @Operation(summary = "批量删除ipr人员信息")
+    @PostMapping("/delete")
+    public Response delete(@RequestBody List<Integer> ids) {
+        matchCasePersonService.delete(ids);
+        return Response.success(ids);
+    }
+
+    @Operation(summary = "查询配案人员信息")
+    @PostMapping("/query")
+    public Response query(@RequestBody QueryMatchCasePersonDTO queryMatchCasePersonDTO) {
+        QueryMatchCasePersonVO queryMatchCasePersonVO = matchCasePersonService.getReportMatchCasePerson(queryMatchCasePersonDTO.getReportId());
+        return Response.success(queryMatchCasePersonVO);
+
+    }
+}

+ 17 - 0
src/main/java/cn/cslg/pas/domain/report/AssoIprReportType.java

@@ -0,0 +1,17 @@
+package cn.cslg.pas.domain.report;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/12/25
+ */
+@TableName(value = "asso_ipr_report_type")
+@Data
+public class AssoIprReportType extends BaseEntity<AssoIprReportType> {
+    private Integer iprPersonId;
+
+    private Integer reportType;
+}

+ 32 - 0
src/main/java/cn/cslg/pas/domain/report/DefaultEmailPerson.java

@@ -0,0 +1,32 @@
+package cn.cslg.pas.domain.report;
+
+import cn.cslg.pas.domain.BaseEntity;
+import cn.cslg.pas.domain.business.novelty.AssoRetrieveRecordProject;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @TableName default_email_person
+ */
+@TableName(value ="default_email_person")
+@Data
+public class DefaultEmailPerson extends BaseEntity<DefaultEmailPerson> {
+    private String name;
+
+    private String email;
+
+    private Integer reportType;
+
+    private Integer tenantId;
+
+    private String createId;
+
+    private Date createTime;
+
+}

+ 26 - 0
src/main/java/cn/cslg/pas/domain/report/IprPerson.java

@@ -0,0 +1,26 @@
+package cn.cslg.pas.domain.report;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @TableName ipr_person
+ */
+@TableName(value = "ipr_person")
+@Data
+public class IprPerson extends BaseEntity<IprPerson> {
+
+    private String name;
+
+    private String email;
+
+    private Integer tenantId;
+
+    private String createId;
+
+    private Date createTime;
+    private Boolean ifDefault;
+}

+ 30 - 0
src/main/java/cn/cslg/pas/domain/report/MatchCasePerson.java

@@ -0,0 +1,30 @@
+package cn.cslg.pas.domain.report;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @TableName match_case_person
+ */
+@TableName(value = "match_case_person")
+@Data
+public class MatchCasePerson extends BaseEntity<MatchCasePerson> {
+
+    private Integer iprPersonId;
+
+    private Integer projectId;
+
+    private String createId;
+
+    private Integer tenantId;
+
+    private Date createTime;
+
+}

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

@@ -0,0 +1,13 @@
+package cn.cslg.pas.mapper.report;
+
+import cn.cslg.pas.domain.report.AssoIprReportType;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+public interface AssoIprReportTypeMapper extends BaseMapper<AssoIprReportType> {
+
+}
+
+
+
+

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

@@ -0,0 +1,18 @@
+package cn.cslg.pas.mapper.report;
+
+import cn.cslg.pas.domain.report.IprPerson;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author admin
+* @description 针对表【ipr_person(IPR人员)】的数据库操作Mapper
+* @createDate 2024-12-24 13:52:34
+* @Entity cn.cslg.pas.domain.novelty.domain.IprPerson
+*/
+public interface IprPersonMapper extends BaseMapper<IprPerson> {
+
+}
+
+
+
+

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

@@ -0,0 +1,18 @@
+package cn.cslg.pas.mapper.report;
+
+import cn.cslg.pas.domain.report.MatchCasePerson;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author admin
+* @description 针对表【match_case_person(配案人员)】的数据库操作Mapper
+* @createDate 2024-12-24 13:56:43
+* @Entity cn.cslg.pas.domain.MatchCasePerson
+*/
+public interface MatchCasePersonMapper extends BaseMapper<MatchCasePerson> {
+
+}
+
+
+
+

+ 29 - 0
src/main/java/cn/cslg/pas/service/MailSendService.java

@@ -1,6 +1,8 @@
 package cn.cslg.pas.service;
 
 import cn.cslg.pas.common.model.cronModel.Personnel;
+import cn.cslg.pas.common.model.cronModel.SystemFile;
+import cn.cslg.pas.common.model.report.MailMessageDTO;
 import cn.cslg.pas.common.utils.DateUtils2;
 import cn.cslg.pas.common.utils.RabbitMQUtils;
 import cn.cslg.pas.domain.business.ImportTask;
@@ -15,6 +17,7 @@ import cn.cslg.pas.service.permissions.PermissionService;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -260,4 +263,30 @@ public class MailSendService {
         rabbitMQUtils.sendEmailMessage(map);
 
     }
+
+
+
+    public void sendReportEmail(MailMessageDTO mailMessageDTO) {
+        List<String> emails = mailMessageDTO.getEmails();
+        if (!emails.isEmpty()) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            String title = mailMessageDTO.getReportName() + "-" + mailMessageDTO.getTenantName() + "收到" + mailMessageDTO.getFileName() + ",请查收,谢谢!";
+            map.put("title", title);
+            map.put("template", "mail/invalidSendFile.html");
+            map.put("img", "/logo.png");
+            String[] emailArray = emails.toArray(new String[0]);
+            map.put("emails", emailArray);
+            List<String> fileGuids = mailMessageDTO.getFileGuids();
+            if (fileGuids != null && !fileGuids.isEmpty()) {
+                String[] filesArray = fileGuids.toArray(new String[0]);
+                map.put("files", filesArray);
+            }
+            map.put("value1", mailMessageDTO.getName());
+            map.put("value2", mailMessageDTO.getTenantName());
+            map.put("value3", mailMessageDTO.getFileName());
+            map.put("value4", mailMessageDTO.getUrl());
+            map.put("value5", mailMessageDTO.getReportName());
+            rabbitMQUtils.sendEmailMessage(map);
+        }
+    }
 }

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

@@ -5,6 +5,8 @@ import cn.cslg.pas.common.dto.invalidDTO.AddAdminProceedDTO;
 import cn.cslg.pas.common.dto.invalidDTO.AddJudgmentDTO;
 import cn.cslg.pas.common.dto.invalidDTO.UpdateAdminProceedDTO;
 import cn.cslg.pas.common.dto.invalidDTO.UpdateJudgmentDTO;
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
+import cn.cslg.pas.common.model.report.MailMessageDTO;
 import cn.cslg.pas.common.vo.invalidVO.AdminProceedVO;
 import cn.cslg.pas.common.vo.invalidVO.JudgementVO;
 import cn.cslg.pas.common.vo.invalidVO.OralTrailVO;
@@ -12,6 +14,8 @@ import cn.cslg.pas.domain.BaseEntity;
 import cn.cslg.pas.domain.business.*;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.AdminProceedMapper;
+import cn.cslg.pas.service.MailSendService;
+import cn.cslg.pas.service.report.SendReportMailService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -23,6 +27,7 @@ import org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @Author xiexiang
@@ -40,6 +45,12 @@ public class AdminProceedService extends ServiceImpl<AdminProceedMapper, AdminPr
     @Autowired
     private CourtOrderService courtOrderService;
 
+    @Autowired
+    private SendReportMailService sendReportMailService;
+
+    @Autowired
+    private MailSendService mailSendService;
+
     /**
      * 上传行政诉讼书
      * @param addDto
@@ -84,6 +95,9 @@ public class AdminProceedService extends ServiceImpl<AdminProceedMapper, AdminPr
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (addDto.getIfSendEmail()) {
+            sendReportMailService.finalSendEmail(projectId, fileGuids, addDto.getExtraEmailDTOS());
+        }
         return reportAffairId;
     }
 
@@ -142,6 +156,9 @@ public class AdminProceedService extends ServiceImpl<AdminProceedMapper, AdminPr
         //3. 更新报告事务与文件关联
         List<String> fileGuids = updateDTO.getFileGuids();
         assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);
+        if (updateDTO.getIfSendEmail()) {
+            sendReportMailService.finalSendEmail(projectId, fileGuids, updateDTO.getExtraEmailDTOS());
+        }
         return reportAffairId;
     }
 
@@ -191,6 +208,9 @@ public class AdminProceedService extends ServiceImpl<AdminProceedMapper, AdminPr
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (addJudgmentDTO.getIfSendEmail()) {
+            sendReportMailService.finalSendEmail(projectId, fileGuids, addJudgmentDTO.getExtraEmailDTOS());
+        }
         return reportAffairId;
     }
 
@@ -233,6 +253,9 @@ public class AdminProceedService extends ServiceImpl<AdminProceedMapper, AdminPr
         //3. 更新报告事务与文件关联
         List<String> fileGuids = updateJudgmentDTO.getFileGuids();
         assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);
+        if (updateJudgmentDTO.getIfSendEmail()) {
+            sendReportMailService.finalSendEmail(projectId, fileGuids, updateJudgmentDTO.getExtraEmailDTOS());
+        }
         return reportAffairId;
     }
 

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

@@ -3,6 +3,8 @@ 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.model.report.ExtraEmailDTO;
+import cn.cslg.pas.common.model.report.MailMessageDTO;
 import cn.cslg.pas.common.vo.invalidVO.InvalidDecisionFileVO;
 import cn.cslg.pas.common.vo.invalidVO.OralTrailVO;
 import cn.cslg.pas.domain.business.AssoReportAffairFile;
@@ -11,6 +13,8 @@ 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 cn.cslg.pas.service.MailSendService;
+import cn.cslg.pas.service.report.SendReportMailService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
@@ -20,6 +24,7 @@ import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @Author xiexiang
@@ -34,6 +39,12 @@ public class InvalidDecisionFileService extends ServiceImpl<InvalidDecisionFileM
     @Autowired
     private AssoReportAffairFileService assoReportAffairFileService;
 
+    @Autowired
+    private SendReportMailService sendReportMailService;
+
+    @Autowired
+    private MailSendService mailSendService;
+
     public Integer add(AddInvalidDecisionFileDTO addInvalidDecisionFileDTO){
         if (addInvalidDecisionFileDTO == null) {
             throw new XiaoShiException("入参为空");
@@ -76,6 +87,9 @@ public class InvalidDecisionFileService extends ServiceImpl<InvalidDecisionFileM
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (addInvalidDecisionFileDTO.getIfSendEmail()) {
+            sendReportMailService.finalSendEmail(projectId, fileGuids, addInvalidDecisionFileDTO.getExtraEmailDTOS());
+        }
         return reportAffairId;
     }
 
@@ -127,6 +141,9 @@ public class InvalidDecisionFileService extends ServiceImpl<InvalidDecisionFileM
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (updateInvalidDecisionFileDTO.getIfSendEmail()) {
+            sendReportMailService.finalSendEmail(projectId, fileGuids, updateInvalidDecisionFileDTO.getExtraEmailDTOS());
+        }
         return reportAffairId;
     }
 

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

@@ -3,12 +3,16 @@ package cn.cslg.pas.service.business;
 import cn.cslg.pas.common.dto.business.ReportAffairDTO;
 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.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.exception.XiaoShiException;
 import cn.cslg.pas.mapper.InvalidRequestFileMapper;
+import cn.cslg.pas.service.MailSendService;
+import cn.cslg.pas.service.report.SendReportMailService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
@@ -36,6 +40,12 @@ public class InvalidRequestFileService extends ServiceImpl<InvalidRequestFileMap
     @Autowired
     private AssoReportAffairFileService assoReportAffairFileService;
 
+    @Autowired
+    private SendReportMailService sendReportMailService;
+
+    @Autowired
+    private MailSendService mailSendService;
+
     /**
      * 上传无效请求书
      * @param addInvalidRequestFileDTO
@@ -79,6 +89,9 @@ public class InvalidRequestFileService extends ServiceImpl<InvalidRequestFileMap
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (addInvalidRequestFileDTO.getIfSendEmail()) {
+            sendReportMailService.finalSendEmail(projectId, fileGuids, addInvalidRequestFileDTO.getExtraEmailDTOS());
+        }
         return reportAffairId;
     }
 
@@ -130,6 +143,9 @@ public class InvalidRequestFileService extends ServiceImpl<InvalidRequestFileMap
         //3. 更新报告事务与文件关联
         List<String> fileGuids = updateInvalidRequestFileDTO.getFileGuids();
         assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);
+        if (updateInvalidRequestFileDTO.getIfSendEmail()) {
+            sendReportMailService.finalSendEmail(projectId, fileGuids, updateInvalidRequestFileDTO.getExtraEmailDTOS());
+        }
         return reportAffairId;
     }
 }

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

@@ -3,6 +3,8 @@ 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.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;
@@ -11,6 +13,8 @@ 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 cn.cslg.pas.service.MailSendService;
+import cn.cslg.pas.service.report.SendReportMailService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
@@ -22,6 +26,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 口审记录Service
@@ -37,6 +42,12 @@ public class OralTrailService extends ServiceImpl<OralTrailMapper, OralTrail> {
     @Autowired
     private AssoReportAffairFileService assoReportAffairFileService;
 
+    @Autowired
+    private SendReportMailService sendReportMailService;
+
+    @Autowired
+    private MailSendService mailSendService;
+
     public Integer add(AddOralTrailDTO addOralTrailDTO){
         if (addOralTrailDTO == null) {
             throw new XiaoShiException("入参为空");
@@ -78,6 +89,9 @@ public class OralTrailService extends ServiceImpl<OralTrailMapper, OralTrail> {
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (addOralTrailDTO.getIfSendEmail()) {
+            sendReportMailService.finalSendEmail(projectId, fileGuids, addOralTrailDTO.getExtraEmailDTOS());
+        }
         return reportAffairId;
     }
 
@@ -133,6 +147,9 @@ public class OralTrailService extends ServiceImpl<OralTrailMapper, OralTrail> {
         //3. 更新报告事务与文件关联
         List<String> fileGuids = updateOralTrailDTO.getFileGuids();
         assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);
+        if (updateOralTrailDTO.getIfSendEmail()) {
+            sendReportMailService.finalSendEmail(projectId, fileGuids, updateOralTrailDTO.getExtraEmailDTOS());
+        }
         return reportAffairId;
     }
 }

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

@@ -2,12 +2,16 @@ package cn.cslg.pas.service.business;
 
 import cn.cslg.pas.common.dto.business.ReportAffairDTO;
 import cn.cslg.pas.common.dto.invalidDTO.*;
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
+import cn.cslg.pas.common.model.report.MailMessageDTO;
 import cn.cslg.pas.common.vo.invalidVO.InvalidDecisionFileVO;
 import cn.cslg.pas.common.vo.invalidVO.OralTrailVO;
 import cn.cslg.pas.common.vo.invalidVO.OtherDocumentsVO;
 import cn.cslg.pas.domain.business.*;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.OtherDocumentsMapper;
+import cn.cslg.pas.service.MailSendService;
+import cn.cslg.pas.service.report.SendReportMailService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
@@ -17,6 +21,7 @@ import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 其他文档
@@ -32,6 +37,12 @@ public class OtherDocumentsService extends ServiceImpl<OtherDocumentsMapper, Oth
     @Autowired
     private AssoReportAffairFileService assoReportAffairFileService;
 
+    @Autowired
+    private SendReportMailService sendReportMailService;
+
+    @Autowired
+    private MailSendService mailSendService;
+
     /**
      * 新增
      * @param addOtherDocumentsDTO
@@ -75,6 +86,10 @@ public class OtherDocumentsService extends ServiceImpl<OtherDocumentsMapper, Oth
                 assoReportAffairFiles.add(assoReportAffairFile);
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
+
+            if (addOtherDocumentsDTO.getIfSendEmail()) {
+                sendReportMailService.finalSendEmail(projectId, fileGuids, addOtherDocumentsDTO.getExtraEmailDTOS());
+            }
         }
         return reportAffairId;
     }
@@ -127,6 +142,9 @@ public class OtherDocumentsService extends ServiceImpl<OtherDocumentsMapper, Oth
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (updateOtherDocumentsDTO.getIfSendEmail()) {
+            sendReportMailService.finalSendEmail(projectId, fileGuids, updateOtherDocumentsDTO.getExtraEmailDTOS());
+        }
         return reportAffairId;
     }
 

+ 28 - 0
src/main/java/cn/cslg/pas/service/business/ReportAffairService.java

@@ -5,6 +5,8 @@ import cn.cslg.pas.common.dto.invalidDTO.*;
 import cn.cslg.pas.common.model.cronModel.Personnel;
 import cn.cslg.pas.common.model.cronModel.PersonnelVO;
 import cn.cslg.pas.common.model.cronModel.SystemFile;
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
+import cn.cslg.pas.common.model.report.MailMessageDTO;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.LoginUtils;
 import cn.cslg.pas.common.vo.invalidVO.*;
@@ -12,8 +14,10 @@ import cn.cslg.pas.domain.BaseEntity;
 import cn.cslg.pas.domain.business.*;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.ReportAffairMapper;
+import cn.cslg.pas.service.MailSendService;
 import cn.cslg.pas.service.common.FileManagerService;
 import cn.cslg.pas.service.permissions.PermissionService;
+import cn.cslg.pas.service.report.SendReportMailService;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -67,6 +71,12 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
     @Autowired
     private CourtOrderService courtOrderService;
 
+    @Autowired
+    private SendReportMailService sendReportMailService;
+
+    @Autowired
+    private MailSendService mailSendService;
+
     /**
      * 创建报告事务
      *
@@ -330,6 +340,9 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (addStateOpinionDTO.getIfSendEmail()) {
+            sendReportMailService.finalSendEmail(projectId, fileGuids, addStateOpinionDTO.getExtraEmailDTOS());
+        }
         return reportAffairId;
     }
 
@@ -361,6 +374,9 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
         //3. 更新报告事务与文件关联
         List<String> fileGuids = updateStateOpinionDTO.getFileGuids();
         assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);
+        if (updateStateOpinionDTO.getIfSendEmail()) {
+            sendReportMailService.finalSendEmail(projectId, fileGuids, updateStateOpinionDTO.getExtraEmailDTOS());
+        }
         return reportAffairId;
     }
 
@@ -438,6 +454,9 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (addClaimHistoryDTO.getIfSendEmail()) {
+            sendReportMailService.finalSendEmail(projectId, fileGuids, addClaimHistoryDTO.getExtraEmailDTOS());
+        }
         return reportAffairId;
     }
 
@@ -469,6 +488,9 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
         //3. 更新报告事务与文件关联
         List<String> fileGuids = updateClaimHistoryDTO.getFileGuids();
         assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);
+        if (updateClaimHistoryDTO.getIfSendEmail()) {
+            sendReportMailService.finalSendEmail(projectId, fileGuids, updateClaimHistoryDTO.getExtraEmailDTOS());
+        }
         return reportAffairId;
     }
 
@@ -511,6 +533,9 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (addSupplyEvidenceDTO.getIfSendEmail()) {
+            sendReportMailService.finalSendEmail(projectId, fileGuids, addSupplyEvidenceDTO.getExtraEmailDTOS());
+        }
         return reportAffairId;
     }
 
@@ -542,6 +567,9 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
         //3. 更新报告事务与文件关联
         List<String> fileGuids = updateSupplyEvidenceDTO.getFileGuids();
         assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);
+        if (updateSupplyEvidenceDTO.getIfSendEmail()) {
+            sendReportMailService.finalSendEmail(projectId, fileGuids, updateSupplyEvidenceDTO.getExtraEmailDTOS());
+        }
         return reportAffairId;
     }
 

+ 47 - 0
src/main/java/cn/cslg/pas/service/report/AssoIprReportTypeService.java

@@ -0,0 +1,47 @@
+package cn.cslg.pas.service.report;
+
+import cn.cslg.pas.domain.report.AssoIprReportType;
+import cn.cslg.pas.mapper.report.AssoIprReportTypeMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/12/25
+ */
+@Service
+@RequiredArgsConstructor
+public class AssoIprReportTypeService extends ServiceImpl<AssoIprReportTypeMapper, AssoIprReportType> {
+
+    public void addAsso(Integer iprPersonId, List<Integer> reportTypes) {
+        if (iprPersonId != null) {
+            List<AssoIprReportType> assoIprReportTypes = new ArrayList<>();
+            for (Integer reportType : reportTypes) {
+                LambdaQueryWrapper<AssoIprReportType> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.eq(AssoIprReportType::getReportType, reportType)
+                        .eq(AssoIprReportType::getIprPersonId, iprPersonId);
+                AssoIprReportType assoIprReportType = this.getOne(queryWrapper, false);
+                if (assoIprReportType == null) {
+                    AssoIprReportType newAdd = new AssoIprReportType();
+                    newAdd.setIprPersonId(iprPersonId);
+                    newAdd.setReportType(reportType);
+                    assoIprReportTypes.add(newAdd);
+                }
+            }
+            this.saveBatch(assoIprReportTypes);
+        }
+    }
+
+    public void deleteAssos(List<Integer> ids) {
+        if (!ids.isEmpty()) {
+            LambdaQueryWrapper<AssoIprReportType> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.in(AssoIprReportType::getIprPersonId, ids);
+            this.remove(queryWrapper);
+        }
+    }
+}

+ 227 - 0
src/main/java/cn/cslg/pas/service/report/IprPersonService.java

@@ -0,0 +1,227 @@
+package cn.cslg.pas.service.report;
+
+import cn.cslg.pas.common.model.cronModel.Personnel;
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.model.report.QueryIprPersonDTO;
+import cn.cslg.pas.common.model.report.QueryIprPersonVO;
+import cn.cslg.pas.common.model.report.UpdateIprPersonDTO;
+import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.domain.report.AssoIprReportType;
+import cn.cslg.pas.exception.ExceptionEnum;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.permissions.PermissionService;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.cslg.pas.domain.report.IprPerson;
+import cn.cslg.pas.mapper.report.IprPersonMapper;
+import lombok.RequiredArgsConstructor;
+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 javax.transaction.xa.XAException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author admin
+ * @description 针对表【ipr_person(IPR人员)】的数据库操作Service实现
+ * @createDate 2024-12-24 13:52:34
+ */
+@Service
+@RequiredArgsConstructor
+public class IprPersonService extends ServiceImpl<IprPersonMapper, IprPerson> {
+    private final LoginUtils loginUtils;
+    private final CacheUtils cacheUtils;
+    private final PermissionService permissionService;
+    private final AssoIprReportTypeService assoIprReportTypeService;
+    @Autowired
+    @Lazy
+    private MatchCasePersonService matchCasePersonService;
+
+    public Integer updateIprPerson(UpdateIprPersonDTO updateIprPersonDTO) {
+        // 校验邮箱是否存在
+        this.checkEmailIsExist(updateIprPersonDTO);
+        Integer id = updateIprPersonDTO.getId();
+        List<Integer> reportTypes = updateIprPersonDTO.getReportTypes();
+        Boolean isDefault = updateIprPersonDTO.getIfDefault();
+
+        IprPerson iprPerson = new IprPerson();
+        if (id == null) {
+            iprPerson = this.addIprPersonDB(updateIprPersonDTO);
+            // 如果是默认
+            if (isDefault) {
+                // 关联报告类型不能为空
+                if (reportTypes != null && !reportTypes.isEmpty()) {
+                    assoIprReportTypeService.addAsso(iprPerson.getId(), reportTypes);
+                } else {
+                    throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "关联报告类型不能为空");
+                }
+            }
+        } else {
+            iprPerson = this.updateIprPersonDB(updateIprPersonDTO);
+            // 从默认改为非默认 取消关联
+            if (!isDefault) {
+                LambdaQueryWrapper<AssoIprReportType> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.eq(AssoIprReportType::getIprPersonId, iprPerson.getId());
+                assoIprReportTypeService.remove(queryWrapper);
+            } else {
+                // 从非默认改为默认
+                // 关联报告类型不能为空
+                if (reportTypes != null && !reportTypes.isEmpty()) {
+                    assoIprReportTypeService.addAsso(iprPerson.getId(), reportTypes);
+                } else {
+                    throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "关联报告类型不能为空");
+                }
+            }
+        }
+        return iprPerson.getId();
+    }
+
+    public IprPerson addIprPersonDB(UpdateIprPersonDTO updateIprPersonDTO) {
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        String personId = personnelVO.getId();
+        Integer tenantId = personnelVO.getTenantId();
+        IprPerson iprPerson = new IprPerson();
+        BeanUtils.copyProperties(updateIprPersonDTO, iprPerson);
+        iprPerson.setCreateId(personId);
+        iprPerson.setTenantId(tenantId);
+        iprPerson.setId(null);
+        iprPerson.insert();
+        return iprPerson;
+    }
+
+    public IprPerson updateIprPersonDB(UpdateIprPersonDTO updateIprPersonDTO) {
+        Integer id = updateIprPersonDTO.getId();
+        IprPerson iprPerson = this.getById(id);
+        if (iprPerson == null) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "ipr人员不存在");
+        }
+        iprPerson.setName(updateIprPersonDTO.getName());
+        iprPerson.setEmail(updateIprPersonDTO.getEmail());
+        iprPerson.setIfDefault(updateIprPersonDTO.getIfDefault());
+        iprPerson.updateById();
+        return iprPerson;
+    }
+
+
+    public List<Integer> delete(List<Integer> ids) {
+        if (ids == null || ids.size() == 0) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "请选择至少一条数据进行删除");
+        }
+        this.removeBatchByIds(ids);
+        assoIprReportTypeService.deleteAssos(ids);
+        matchCasePersonService.deleteByIprIds(ids);
+        return ids;
+    }
+
+
+    public Records query(QueryIprPersonDTO queryIprPersonDTO) {
+        Records records = new Records();
+        List<IprPerson> iprPersonList = new ArrayList<>();
+        String name = queryIprPersonDTO.getName();
+        String email = queryIprPersonDTO.getEmail();
+        Boolean ifDefault = queryIprPersonDTO.getIfDefault();
+        Long current = queryIprPersonDTO.getCurrent();
+        Long size = queryIprPersonDTO.getSize();
+        records.setCurrent(current);
+        records.setSize(size);
+
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        Integer tenantId = personnelVO.getTenantId();
+        LambdaQueryWrapper<IprPerson> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(IprPerson::getTenantId, tenantId);
+        if (name != null && !name.trim().equals("")) {
+            queryWrapper.like(IprPerson::getName, name);
+        }
+        if (email != null && !email.trim().equals("")) {
+            queryWrapper.like(IprPerson::getEmail, email);
+        }
+        if (ifDefault != null) {
+            queryWrapper.eq(IprPerson::getIfDefault, ifDefault);
+        }
+        queryWrapper.orderByDesc(IprPerson::getCreateTime);
+
+        if (current != null && size != null) {
+            IPage<IprPerson> iprPersonIPage = this.page(new Page<>(current, size), queryWrapper);
+            Long total = iprPersonIPage.getTotal();
+            iprPersonList = iprPersonIPage.getRecords();
+            records.setData(iprPersonList);
+            records.setTotal(total);
+        } else {
+            iprPersonList = this.list(queryWrapper);
+        }
+        List<QueryIprPersonVO> queryIprPersonVOS = this.loadQueryIprPersonVO(iprPersonList);
+        records.setData(queryIprPersonVOS);
+        return records;
+    }
+
+    private List<QueryIprPersonVO> loadQueryIprPersonVO(List<IprPerson> iprPersonList) {
+        List<QueryIprPersonVO> queryIprPersonVOS = new ArrayList<>();
+        if (iprPersonList == null || iprPersonList.size() == 0) {
+            return queryIprPersonVOS;
+        }
+        List<Personnel> personnels = new ArrayList<>();
+        List<String> createIds = iprPersonList.stream().map(IprPerson::getCreateId).collect(Collectors.toList());
+        if (!CollectionUtils.isEmpty(createIds)) {
+            try {
+                String res = permissionService.getPersonnelByIdsFromPCS(createIds);
+                JSONObject jsonObject = JSON.parseObject(res);
+                personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
+            } catch (Exception e) {
+            }
+        }
+
+
+        for (IprPerson iprPerson : iprPersonList) {
+            QueryIprPersonVO queryIprPersonVO = new QueryIprPersonVO();
+            BeanUtils.copyProperties(iprPerson, queryIprPersonVO);
+
+            if (iprPerson.getIfDefault()) {
+                LambdaQueryWrapper<AssoIprReportType> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.eq(AssoIprReportType::getIprPersonId, iprPerson.getId());
+                AssoIprReportType assoIprReportType = assoIprReportTypeService.getOne(queryWrapper, false);
+                if (assoIprReportType != null) {
+                    queryIprPersonVO.setReportType(assoIprReportType.getReportType());
+                }
+            }
+
+            Personnel personnel = personnels.stream().filter(item -> item.getId().equals(iprPerson.getCreateId())).findFirst().orElse(null);
+            if (personnel != null) {
+                queryIprPersonVO.setCreateName(personnel.getPersonnelName());
+            }
+            queryIprPersonVOS.add(queryIprPersonVO);
+        }
+        return queryIprPersonVOS;
+    }
+
+    public void checkEmailIsExist(UpdateIprPersonDTO updateIprPersonDTO) {
+        // 检验邮箱是否存在
+        String email = updateIprPersonDTO.getEmail();
+        Integer id = updateIprPersonDTO.getId();
+
+        LambdaQueryWrapper<IprPerson> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(IprPerson::getEmail, email);
+        // 编辑的情况排除自身
+        if (id != null) {
+            queryWrapper.ne(IprPerson::getId, id);
+        }
+        if (this.count(queryWrapper) > 0) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "邮箱重复");
+        }
+    }
+}
+
+
+
+

+ 155 - 0
src/main/java/cn/cslg/pas/service/report/MatchCasePersonService.java

@@ -0,0 +1,155 @@
+package cn.cslg.pas.service.report;
+
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
+import cn.cslg.pas.common.model.report.QueryMatchCasePersonVO;
+import cn.cslg.pas.common.model.report.UpdateIprPersonDTO;
+import cn.cslg.pas.common.model.report.UpdateMatchCasePersonDTO;
+import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.domain.report.AssoIprReportType;
+import cn.cslg.pas.domain.report.IprPerson;
+import cn.cslg.pas.exception.ExceptionEnum;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.permissions.PermissionService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.cslg.pas.domain.report.MatchCasePerson;
+import cn.cslg.pas.mapper.report.MatchCasePersonMapper;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * @author admin
+ * @description 针对表【match_case_person(配案人员)】的数据库操作Service实现
+ * @createDate 2024-12-24 13:56:43
+ */
+@Service
+@RequiredArgsConstructor
+public class MatchCasePersonService extends ServiceImpl<MatchCasePersonMapper, MatchCasePerson> {
+    private final LoginUtils loginUtils;
+    private final CacheUtils cacheUtils;
+    @Autowired
+    @Lazy
+    private IprPersonService iprPersonService;
+
+    public Integer updateMatchCasePerson(UpdateMatchCasePersonDTO updateMatchCasePersonDTO) {
+        Integer id = updateMatchCasePersonDTO.getId();
+        String name = updateMatchCasePersonDTO.getName();
+        String email = updateMatchCasePersonDTO.getEmail();
+        Integer iprPersonId = null;
+
+        // 邮箱传入 即先添加ipr人员 再与报告关联
+        // 判断邮箱是否存在
+        // 邮箱不为空 则去新增ipr人员 并判断邮箱是否存在
+        if (email != null) {
+            Boolean isValid = this.isValidEmail(email);
+            if (!isValid) {
+                throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "邮箱格式不正确");
+            }
+            LambdaQueryWrapper<IprPerson> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(IprPerson::getEmail, email);
+            IprPerson iprPerson = iprPersonService.getOne(queryWrapper, false);
+            if (iprPerson != null) {
+                iprPersonId = iprPerson.getId();
+            } else {
+                PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+                String personId = personnelVO.getId();
+                Integer tenantId = personnelVO.getTenantId();
+
+                IprPerson iprPerson1 = new IprPerson();
+                iprPerson1.setName(updateMatchCasePersonDTO.getName());
+                iprPerson1.setEmail(email);
+                iprPerson1.setIfDefault(false);
+                iprPerson1.setCreateId(personId);
+                iprPerson1.setTenantId(tenantId);
+                iprPerson1.insert();
+                iprPersonId = iprPerson1.getId();
+            }
+        } else {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "邮箱不能为空");
+        }
+        updateMatchCasePersonDTO.setName(name);
+        updateMatchCasePersonDTO.setIprPersonId(iprPersonId);
+        MatchCasePerson matchCasePerson = this.addMatchCasePersonDB(updateMatchCasePersonDTO);
+        return matchCasePerson.getId();
+    }
+
+    public MatchCasePerson addMatchCasePersonDB(UpdateMatchCasePersonDTO updateMatchCasePersonDTO) {
+        MatchCasePerson matchCasePerson = new MatchCasePerson();
+
+        LambdaQueryWrapper<MatchCasePerson> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(MatchCasePerson::getProjectId, updateMatchCasePersonDTO.getReportId());
+        if (this.count(queryWrapper) > 1) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "该报告已有多个配案人员,错误!");
+        } else if (this.count(queryWrapper) == 1) {
+            matchCasePerson = this.getOne(queryWrapper, false);
+            if (matchCasePerson != null) {
+                matchCasePerson.setIprPersonId(updateMatchCasePersonDTO.getIprPersonId());
+                matchCasePerson.updateById();
+            }
+        } else if (this.count(queryWrapper) == 0) {
+            PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+            String personId = personnelVO.getId();
+            Integer tenantId = personnelVO.getTenantId();
+            matchCasePerson.setProjectId(updateMatchCasePersonDTO.getReportId());
+            matchCasePerson.setIprPersonId(updateMatchCasePersonDTO.getIprPersonId());
+            matchCasePerson.setCreateId(personId);
+            matchCasePerson.setTenantId(tenantId);
+            matchCasePerson.setId(null);
+            matchCasePerson.insert();
+        }
+        return matchCasePerson;
+    }
+
+    public QueryMatchCasePersonVO getReportMatchCasePerson(Integer reportId) {
+        QueryMatchCasePersonVO queryMatchCasePersonVO = new QueryMatchCasePersonVO();
+        LambdaQueryWrapper<MatchCasePerson> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(MatchCasePerson::getProjectId, reportId);
+        MatchCasePerson matchCasePerson = this.getOne(queryWrapper, false);
+        if (matchCasePerson != null) {
+            BeanUtils.copyProperties(matchCasePerson, queryMatchCasePersonVO);
+            this.loadQueryMatchCasePersonVO(queryMatchCasePersonVO);
+        }
+        return queryMatchCasePersonVO;
+    }
+
+    public void loadQueryMatchCasePersonVO(QueryMatchCasePersonVO queryMatchCasePersonVO) {
+        // 邮箱装载
+        IprPerson iprPerson = iprPersonService.getById(queryMatchCasePersonVO.getIprPersonId());
+        if (iprPerson != null) {
+            queryMatchCasePersonVO.setName(iprPerson.getName());
+            queryMatchCasePersonVO.setEmail(iprPerson.getEmail());
+        }
+        // 人员信息装载
+
+    }
+
+
+    public Boolean isValidEmail(String email) {
+        if ((email != null) && (!email.isEmpty())) {
+            return Pattern.matches("^(\\w+([-.][A-Za-z0-9]+)*){3,18}@\\w+([-.][A-Za-z0-9]+)*\\.\\w+([-.][A-Za-z0-9]+)*$", email);
+        }
+        return false;
+    }
+
+    public void delete(List<Integer> ids) {
+        this.removeBatchByIds(ids);
+    }
+
+    public void deleteByIprIds(List<Integer> iprPersonIds) {
+        LambdaQueryWrapper<MatchCasePerson> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(MatchCasePerson::getIprPersonId, iprPersonIds);
+        this.remove(queryWrapper);
+    }
+
+}
+
+
+
+

+ 173 - 0
src/main/java/cn/cslg/pas/service/report/SendReportMailService.java

@@ -0,0 +1,173 @@
+package cn.cslg.pas.service.report;
+
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
+import cn.cslg.pas.common.model.cronModel.SystemFile;
+import cn.cslg.pas.common.model.report.ExtraEmailDTO;
+import cn.cslg.pas.common.model.report.MailMessageDTO;
+import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.domain.business.Project;
+import cn.cslg.pas.domain.business.ReportProject;
+import cn.cslg.pas.domain.report.AssoIprReportType;
+import cn.cslg.pas.domain.report.IprPerson;
+import cn.cslg.pas.domain.report.MatchCasePerson;
+import cn.cslg.pas.exception.ExceptionEnum;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.MailSendService;
+import cn.cslg.pas.service.business.ProjectService;
+import cn.cslg.pas.service.business.ReportProjectService;
+import cn.cslg.pas.service.common.FileManagerService;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/12/29
+ */
+@Service
+@RequiredArgsConstructor
+public class SendReportMailService {
+    private final MatchCasePersonService matchCasePersonService;
+    private final IprPersonService iprPersonService;
+    private final AssoIprReportTypeService assoIprReportTypeService;
+    private final ProjectService projectService;
+    private final FileManagerService fileManagerService;
+    private final LoginUtils loginUtils;
+    private final CacheUtils cacheUtils;
+    private final ReportProjectService reportProjectService;
+    private final MailSendService mailSendService;
+
+    //装载所需要的数据
+    public MailMessageDTO loadingData(Integer projectId, List<String> fileGuids) {
+        MailMessageDTO mailMessageDTO = new MailMessageDTO();
+        List<String> names = new ArrayList<>();
+        List<String> emails = new ArrayList<>();
+
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        if (personnelVO == null) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "租户查询错误");
+        }
+        mailMessageDTO.setCreateId(personnelVO.getId());
+        mailMessageDTO.setTenantName(personnelVO.getTenantName());
+
+        //查询配案人员信息
+        List<Integer> iprPersonIds = new ArrayList<>();
+        LambdaQueryWrapper<MatchCasePerson> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(MatchCasePerson::getProjectId, projectId);
+        MatchCasePerson matchCasePerson = matchCasePersonService.getOne(queryWrapper, false);
+        if (matchCasePerson != null) {
+            Integer iprPersonId = matchCasePerson.getIprPersonId();
+            if (iprPersonId == null) {
+                throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "该报告的配案人员查询错误");
+            }
+            IprPerson iprPerson = iprPersonService.getById(matchCasePerson.getIprPersonId());
+            names.add(iprPerson.getName());
+            emails.add(this.loadEmail(iprPerson.getName(), iprPerson.getEmail()));
+        }
+
+
+        // 根据报告类型查询默认邮箱发送人员
+        LambdaQueryWrapper<ReportProject> reportWrapper = new LambdaQueryWrapper<>();
+        reportWrapper.eq(ReportProject::getProjectId, projectId);
+        ReportProject reportProject = reportProjectService.getOne(reportWrapper, false);
+        if (reportProject == null) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "报告查询错误");
+        }
+        Integer reportType = reportProject.getReportType();
+        LambdaQueryWrapper<AssoIprReportType> queryWrapper2 = new LambdaQueryWrapper<>();
+        queryWrapper2.eq(AssoIprReportType::getReportType, reportType);
+        List<AssoIprReportType> assoIprReportTypes = assoIprReportTypeService.list(queryWrapper2);
+        if (assoIprReportTypes != null && !assoIprReportTypes.isEmpty()) {
+            List<Integer> defaultIprPersonIds = assoIprReportTypes.stream()
+                    .map(AssoIprReportType::getIprPersonId)
+                    .collect(Collectors.toList());
+            iprPersonIds.addAll(defaultIprPersonIds);
+            LambdaQueryWrapper<IprPerson> queryWrapper3 = new LambdaQueryWrapper<>();
+            queryWrapper3.in(IprPerson::getId, iprPersonIds)
+                    .eq(IprPerson::getIfDefault, true);
+            List<IprPerson> iprPersonList = iprPersonService.list(queryWrapper3);
+            if (iprPersonList != null && !iprPersonList.isEmpty()) {
+                for (IprPerson iprPerson : iprPersonList) {
+                    names.add(iprPerson.getName());
+                    emails.add(this.loadEmail(iprPerson.getName(), iprPerson.getEmail()));
+                }
+            }
+        }
+        names = names.stream().distinct().collect(Collectors.toList());
+        emails = emails.stream().distinct().collect(Collectors.toList());
+        String name = String.join(",", names);
+        mailMessageDTO.setNames(names);
+        mailMessageDTO.setName(name);
+        mailMessageDTO.setEmails(emails);
+        // 根据文件guids查询文件名称
+        if (fileGuids != null && !fileGuids.isEmpty()) {
+            List<SystemFile> systemFiles = new ArrayList<>();
+            try {
+                String res = fileManagerService.getSystemFileFromFMS(fileGuids);
+                systemFiles = JSONObject.parseArray(res, SystemFile.class);
+                if (!systemFiles.isEmpty()) {
+                    List<String> fileNames = systemFiles.stream().map(SystemFile::getOriginalName).collect(Collectors.toList());
+                    String fileName = this.appendStr(fileNames);
+                    mailMessageDTO.setFileName(fileName);
+                    mailMessageDTO.setFileGuids(fileGuids);
+                }
+            } catch (Exception e) {
+                throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "文件查询错误");
+            }
+        }
+        // url配置
+        mailMessageDTO.setUrl("https://www.xsip.cn/reportDetails?projectId=" + projectId);
+        //报告名称配置
+        Project project = projectService.getById(projectId);
+        mailMessageDTO.setReportName(project.getName());
+        return mailMessageDTO;
+    }
+
+    /**
+     * 拼接字符串
+     * @param strings
+     * @return
+     */
+    public String appendStr(List<String> strings) {
+        StringBuilder result = new StringBuilder();
+        for (String str : strings) {
+            int lastDotIndex = str.lastIndexOf(".");
+            if (lastDotIndex != -1) {
+                String subResult = str.substring(0, lastDotIndex);
+                result.append(subResult).append(",");
+            }
+        }
+        if (result.length() > 0) {
+            result.deleteCharAt(result.length() - 1);
+        }
+        return result.toString();
+    }
+
+
+    public String loadEmail(String name, String email) {
+        return name + " <" + email + ">";
+    }
+
+
+    public void finalSendEmail(Integer projectId, List<String> fileGuids, List<ExtraEmailDTO> extraEmailDTOS) {
+        MailMessageDTO mailMessageDTO = this.loadingData(projectId, fileGuids);
+        if (mailMessageDTO != null) {
+            mailSendService.sendReportEmail(mailMessageDTO);
+            if (extraEmailDTOS != null && !extraEmailDTOS.isEmpty()) {
+                List<String> emails = new ArrayList<>();
+                for (ExtraEmailDTO extraEmailDTO : extraEmailDTOS) {
+                    emails.add(this.loadEmail(extraEmailDTO.getName(), extraEmailDTO.getEmail()));
+                }
+                mailMessageDTO.setEmails(emails);
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
+    }
+}

+ 20 - 0
src/main/resources/mapper/report/IprPersonMapper.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.cslg.pas.mapper.report.IprPersonMapper">
+
+    <resultMap id="BaseResultMap" type="cn.cslg.pas.domain.report.IprPerson">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="name" column="name" jdbcType="VARCHAR"/>
+            <result property="email" column="email" jdbcType="VARCHAR"/>
+            <result property="tenantId" column="tenant_id" jdbcType="INTEGER"/>
+            <result property="createId" column="create_id" jdbcType="INTEGER"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,name,email,
+        tenant_id,create_id,create_time
+    </sql>
+</mapper>

+ 22 - 0
src/main/resources/mapper/report/MatchCasePersonMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.cslg.pas.mapper.report.MatchCasePersonMapper">
+
+    <resultMap id="BaseResultMap" type="cn.cslg.pas.domain.report.MatchCasePerson">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="name" column="name" jdbcType="VARCHAR"/>
+            <result property="iprPersonId" column="ipr_person_id" jdbcType="INTEGER"/>
+            <result property="reportId" column="report_id" jdbcType="INTEGER"/>
+            <result property="createId" column="create_id" jdbcType="VARCHAR"/>
+            <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,name,ipr_person_id,
+        report_id,create_id,tenant_id,
+        create_time
+    </sql>
+</mapper>

+ 17 - 2
src/test/java/cn/cslg/pas/getSimilarTest.java

@@ -12,6 +12,9 @@ import cn.cslg.pas.common.utils.ReadExcelUtils;
 import cn.cslg.pas.common.utils.StringUtils;
 import cn.cslg.pas.service.business.es.EsService;
 import cn.cslg.pas.service.common.PythonApiService;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.junit.jupiter.api.Test;
@@ -22,6 +25,7 @@ import java.io.*;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Objects;
 
 @SpringBootTest
 public class getSimilarTest {
@@ -132,7 +136,18 @@ public class getSimilarTest {
         }
     }
     @Test
-    public void test2(){
-
+    public void test2() throws Exception{
+        OkHttpClient okHttpClient = new OkHttpClient();
+        Request request = new Request.Builder()
+                .url("http://47.116.194.135:8079/api/permission/qiaoBi/vipType/queryPersonVipType")
+                .get()
+                .header("Cookie","token=Jv_zyfSUYwxf2Z1L1_JQaddNZ5Cvi9LSf4__")
+                .build();
+        Response response= okHttpClient.newCall(request).execute();
+        String cookie=response.request().header("Cookie");
+        System.out.println(cookie);
+        System.out.println(response);
+        String a= Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    System.out.println(a);
     }
 }

+ 1 - 1
src/test/java/cn/cslg/pas/test/TempServiceTests.java

@@ -41,7 +41,7 @@ public class TempServiceTests {
         EncryptionLoginDTO encryptionLoginDTO = new EncryptionLoginDTO();
         encryptionLoginDTO.setAppKey(appKey);
         //登录账号
-        encryptionLoginDTO.setUsername("lirenjie@china-wispro.com");
+        encryptionLoginDTO.setUsername("admin");
 //        encryptionLoginDTO.setUsername("zhuhao");
         //登录密码
         encryptionLoginDTO.setPassword("xiaoshi221101");