xiexiang 9 mesi fa
parent
commit
ffb4c7533a
39 ha cambiato i file con 706 aggiunte e 19 eliminazioni
  1. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddAdminProceedDTO.java
  2. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddClaimHistoryDTO.java
  3. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddInvalidDecisionFileDTO.java
  4. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddInvalidRequestFileDTO.java
  5. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddJudgmentDTO.java
  6. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddOralTrailDTO.java
  7. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddOtherDocumentsDTO.java
  8. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddStateOpinionDTO.java
  9. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/AddSupplyEvidenceDTO.java
  10. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateAdminProceedDTO.java
  11. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateClaimHistoryDTO.java
  12. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateInvalidDecisionFileDTO.java
  13. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateInvalidRequestFileDTO.java
  14. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateJudgmentDTO.java
  15. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateOralTrailDTO.java
  16. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateOtherDocumentsDTO.java
  17. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateStateOpinionDTO.java
  18. 2 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateSupplyEvidenceDTO.java
  19. 33 0
      src/main/java/cn/cslg/pas/common/model/report/MailMessageDTO.java
  20. 1 0
      src/main/java/cn/cslg/pas/common/model/report/QueryIprPersonVO.java
  21. 8 0
      src/main/java/cn/cslg/pas/common/model/report/QueryMatchCasePersonDTO.java
  22. 27 0
      src/main/java/cn/cslg/pas/common/model/report/QueryMatchCasePersonVO.java
  23. 3 0
      src/main/java/cn/cslg/pas/common/model/report/UpdateIprPersonDTO.java
  24. 0 1
      src/main/java/cn/cslg/pas/controller/report/IprPersonController.java
  25. 9 9
      src/main/java/cn/cslg/pas/controller/report/MatchCasePersonController.java
  26. 17 0
      src/main/java/cn/cslg/pas/domain/report/AssoIprReportType.java
  27. 2 5
      src/main/java/cn/cslg/pas/domain/report/MatchCasePerson.java
  28. 13 0
      src/main/java/cn/cslg/pas/mapper/report/AssoIprReportTypeMapper.java
  29. 24 0
      src/main/java/cn/cslg/pas/service/MailSendService.java
  30. 33 0
      src/main/java/cn/cslg/pas/service/business/AdminProceedService.java
  31. 21 0
      src/main/java/cn/cslg/pas/service/business/InvalidDecisionFileService.java
  32. 21 0
      src/main/java/cn/cslg/pas/service/business/InvalidRequestFileService.java
  33. 21 0
      src/main/java/cn/cslg/pas/service/business/OralTrailService.java
  34. 21 0
      src/main/java/cn/cslg/pas/service/business/OtherDocumentsService.java
  35. 45 0
      src/main/java/cn/cslg/pas/service/business/ReportAffairService.java
  36. 47 0
      src/main/java/cn/cslg/pas/service/report/AssoIprReportTypeService.java
  37. 63 0
      src/main/java/cn/cslg/pas/service/report/IprPersonService.java
  38. 125 4
      src/main/java/cn/cslg/pas/service/report/MatchCasePersonService.java
  39. 136 0
      src/main/java/cn/cslg/pas/service/report/SendReportMailService.java

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

@@ -25,4 +25,6 @@ public class AddAdminProceedDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
 }

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

@@ -23,4 +23,6 @@ public class AddClaimHistoryDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
 }

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

@@ -44,4 +44,6 @@ public class AddInvalidDecisionFileDTO {
 
     private String description;
 
+    private Boolean ifSendEmail;
+
 }

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

@@ -26,4 +26,6 @@ public class AddInvalidRequestFileDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
 }

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

@@ -25,4 +25,6 @@ public class AddJudgmentDTO {
     private String description;
 
     private String conclusion;
+
+    private Boolean ifSendEmail;
 }

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

@@ -29,4 +29,6 @@ public class AddOralTrailDTO {
     private String recordDescription;
 
     private String description;
+
+    private Boolean ifSendEmail;
 }

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

@@ -24,4 +24,6 @@ public class AddOtherDocumentsDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
 }

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

@@ -22,4 +22,6 @@ public class AddStateOpinionDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
 }

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

@@ -23,4 +23,6 @@ public class AddSupplyEvidenceDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
 }

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

@@ -25,4 +25,6 @@ public class UpdateAdminProceedDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
 }

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

@@ -24,4 +24,6 @@ public class UpdateClaimHistoryDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
 }

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

@@ -42,4 +42,6 @@ public class UpdateInvalidDecisionFileDTO {
 
     private String description;
 
+    private Boolean ifSendEmail;
+
 }

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

@@ -28,4 +28,6 @@ public class UpdateInvalidRequestFileDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
 }

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

@@ -26,4 +26,6 @@ public class UpdateJudgmentDTO {
     private String description;
 
     private String conclusion;
+
+    private Boolean ifSendEmail;
 }

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

@@ -30,4 +30,6 @@ public class UpdateOralTrailDTO {
     private String recordDescription;
 
     private String description;
+
+    private Boolean ifSendEmail;
 }

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

@@ -25,4 +25,6 @@ public class UpdateOtherDocumentsDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
 }

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

@@ -23,4 +23,6 @@ public class UpdateStateOpinionDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
 }

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

@@ -24,4 +24,6 @@ public class UpdateSupplyEvidenceDTO {
     private List<String> fileGuids;
 
     private String description;
+
+    private Boolean ifSendEmail;
 }

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

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

@@ -13,4 +13,5 @@ public class QueryIprPersonVO {
     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;
+}

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

@@ -2,10 +2,13 @@ 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;
 }

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

@@ -43,7 +43,6 @@ public class IprPersonController {
     public Response update(@RequestBody UpdateIprPersonDTO updateIprPersonDTO) {
         Integer id = iprPersonService.updateIprPerson(updateIprPersonDTO);
         return Response.success(id);
-
     }
 
     @Operation(summary = "批量删除ipr人员信息")

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

@@ -7,9 +7,7 @@ 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.model.report.UpdateMatchCasePersonDTO;
+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;
@@ -40,23 +38,25 @@ public class MatchCasePersonController {
     @Autowired
     private MatchCasePersonService matchCasePersonService;
 
-    @Operation(summary = "添加或更新ipr人员信息")
+    @Operation(summary = "添加或更新配案人员信息")
     @PostMapping("/update")
     public Response update(@RequestBody UpdateMatchCasePersonDTO updateMatchCasePersonDTO) {
-        return Response.success("id");
+        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 = "查询ipr人员信息")
+    @Operation(summary = "查询配案人员信息")
     @PostMapping("/query")
-    public Response query(@RequestBody QueryIprPersonDTO queryIprPersonDTO) {
-
-        return Response.success("queryIprPersonDTO");
+    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;
+}

+ 2 - 5
src/main/java/cn/cslg/pas/domain/report/MatchCasePerson.java

@@ -17,16 +17,13 @@ import java.util.Date;
 @Data
 public class MatchCasePerson extends BaseEntity<MatchCasePerson> {
 
-
-    private String name;
-
     private Integer iprPersonId;
 
-    private Integer reportId;
+    private Integer projectId;
 
     private String createId;
 
-    private String tenantId;
+    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> {
+
+}
+
+
+
+

+ 24 - 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,25 @@ 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);
+            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);
+        }
+    }
 }

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

@@ -5,6 +5,7 @@ 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.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 +13,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;
@@ -40,6 +43,12 @@ public class AdminProceedService extends ServiceImpl<AdminProceedMapper, AdminPr
     @Autowired
     private CourtOrderService courtOrderService;
 
+    @Autowired
+    private SendReportMailService sendReportMailService;
+
+    @Autowired
+    private MailSendService mailSendService;
+
     /**
      * 上传行政诉讼书
      * @param addDto
@@ -84,6 +93,12 @@ public class AdminProceedService extends ServiceImpl<AdminProceedMapper, AdminPr
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (addDto.getIfSendEmail()) {
+            MailMessageDTO mailMessageDTO = sendReportMailService.loadingData(7, projectId, fileGuids);
+            if (mailMessageDTO != null) {
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
         return reportAffairId;
     }
 
@@ -142,6 +157,12 @@ public class AdminProceedService extends ServiceImpl<AdminProceedMapper, AdminPr
         //3. 更新报告事务与文件关联
         List<String> fileGuids = updateDTO.getFileGuids();
         assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);
+        if (updateDTO.getIfSendEmail()) {
+            MailMessageDTO mailMessageDTO = sendReportMailService.loadingData(7, projectId, fileGuids);
+            if (mailMessageDTO != null) {
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
         return reportAffairId;
     }
 
@@ -191,6 +212,12 @@ public class AdminProceedService extends ServiceImpl<AdminProceedMapper, AdminPr
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (addJudgmentDTO.getIfSendEmail()) {
+            MailMessageDTO mailMessageDTO = sendReportMailService.loadingData(7, projectId, fileGuids);
+            if (mailMessageDTO != null) {
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
         return reportAffairId;
     }
 
@@ -233,6 +260,12 @@ public class AdminProceedService extends ServiceImpl<AdminProceedMapper, AdminPr
         //3. 更新报告事务与文件关联
         List<String> fileGuids = updateJudgmentDTO.getFileGuids();
         assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);
+        if (updateJudgmentDTO.getIfSendEmail()) {
+            MailMessageDTO mailMessageDTO = sendReportMailService.loadingData(7, projectId, fileGuids);
+            if (mailMessageDTO != null) {
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
         return reportAffairId;
     }
 

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

@@ -3,6 +3,7 @@ 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.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 +12,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;
@@ -34,6 +37,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 +85,12 @@ public class InvalidDecisionFileService extends ServiceImpl<InvalidDecisionFileM
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (addInvalidDecisionFileDTO.getIfSendEmail()) {
+            MailMessageDTO mailMessageDTO = sendReportMailService.loadingData(7, projectId, fileGuids);
+            if (mailMessageDTO != null) {
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
         return reportAffairId;
     }
 
@@ -127,6 +142,12 @@ public class InvalidDecisionFileService extends ServiceImpl<InvalidDecisionFileM
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (updateInvalidDecisionFileDTO.getIfSendEmail()) {
+            MailMessageDTO mailMessageDTO = sendReportMailService.loadingData(7, projectId, fileGuids);
+            if (mailMessageDTO != null) {
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
         return reportAffairId;
     }
 

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

@@ -3,12 +3,15 @@ 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.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 +39,12 @@ public class InvalidRequestFileService extends ServiceImpl<InvalidRequestFileMap
     @Autowired
     private AssoReportAffairFileService assoReportAffairFileService;
 
+    @Autowired
+    private SendReportMailService sendReportMailService;
+
+    @Autowired
+    private MailSendService mailSendService;
+
     /**
      * 上传无效请求书
      * @param addInvalidRequestFileDTO
@@ -79,6 +88,12 @@ public class InvalidRequestFileService extends ServiceImpl<InvalidRequestFileMap
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (addInvalidRequestFileDTO.getIfSendEmail()) {
+            MailMessageDTO mailMessageDTO = sendReportMailService.loadingData(7, projectId, fileGuids);
+            if (mailMessageDTO != null) {
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
         return reportAffairId;
     }
 
@@ -130,6 +145,12 @@ public class InvalidRequestFileService extends ServiceImpl<InvalidRequestFileMap
         //3. 更新报告事务与文件关联
         List<String> fileGuids = updateInvalidRequestFileDTO.getFileGuids();
         assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);
+        if (updateInvalidRequestFileDTO.getIfSendEmail()) {
+            MailMessageDTO mailMessageDTO = sendReportMailService.loadingData(7, projectId, fileGuids);
+            if (mailMessageDTO != null) {
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
         return reportAffairId;
     }
 }

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

@@ -3,6 +3,7 @@ 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.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 +12,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;
@@ -37,6 +40,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 +87,12 @@ public class OralTrailService extends ServiceImpl<OralTrailMapper, OralTrail> {
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (addOralTrailDTO.getIfSendEmail()) {
+            MailMessageDTO mailMessageDTO = sendReportMailService.loadingData(7, projectId, fileGuids);
+            if (mailMessageDTO != null) {
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
         return reportAffairId;
     }
 
@@ -133,6 +148,12 @@ public class OralTrailService extends ServiceImpl<OralTrailMapper, OralTrail> {
         //3. 更新报告事务与文件关联
         List<String> fileGuids = updateOralTrailDTO.getFileGuids();
         assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);
+        if (updateOralTrailDTO.getIfSendEmail()) {
+            MailMessageDTO mailMessageDTO = sendReportMailService.loadingData(7, projectId, fileGuids);
+            if (mailMessageDTO != null) {
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
         return reportAffairId;
     }
 }

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

@@ -2,12 +2,15 @@ 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.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;
@@ -32,6 +35,12 @@ public class OtherDocumentsService extends ServiceImpl<OtherDocumentsMapper, Oth
     @Autowired
     private AssoReportAffairFileService assoReportAffairFileService;
 
+    @Autowired
+    private SendReportMailService sendReportMailService;
+
+    @Autowired
+    private MailSendService mailSendService;
+
     /**
      * 新增
      * @param addOtherDocumentsDTO
@@ -76,6 +85,12 @@ public class OtherDocumentsService extends ServiceImpl<OtherDocumentsMapper, Oth
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (addOtherDocumentsDTO.getIfSendEmail()) {
+            MailMessageDTO mailMessageDTO = sendReportMailService.loadingData(7, projectId, fileGuids);
+            if (mailMessageDTO != null) {
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
         return reportAffairId;
     }
 
@@ -127,6 +142,12 @@ public class OtherDocumentsService extends ServiceImpl<OtherDocumentsMapper, Oth
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (updateOtherDocumentsDTO.getIfSendEmail()) {
+            MailMessageDTO mailMessageDTO = sendReportMailService.loadingData(7, projectId, fileGuids);
+            if (mailMessageDTO != null) {
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
         return reportAffairId;
     }
 

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

@@ -5,6 +5,7 @@ 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.MailMessageDTO;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.LoginUtils;
 import cn.cslg.pas.common.vo.invalidVO.*;
@@ -12,8 +13,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 +70,12 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
     @Autowired
     private CourtOrderService courtOrderService;
 
+    @Autowired
+    private SendReportMailService sendReportMailService;
+
+    @Autowired
+    private MailSendService mailSendService;
+
     /**
      * 创建报告事务
      *
@@ -330,6 +339,12 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (addStateOpinionDTO.getIfSendEmail()) {
+            MailMessageDTO mailMessageDTO = sendReportMailService.loadingData(7, projectId, fileGuids);
+            if (mailMessageDTO != null) {
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
         return reportAffairId;
     }
 
@@ -361,6 +376,12 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
         //3. 更新报告事务与文件关联
         List<String> fileGuids = updateStateOpinionDTO.getFileGuids();
         assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);
+        if (updateStateOpinionDTO.getIfSendEmail()) {
+            MailMessageDTO mailMessageDTO = sendReportMailService.loadingData(7, projectId, fileGuids);
+            if (mailMessageDTO != null) {
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
         return reportAffairId;
     }
 
@@ -438,6 +459,12 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (addClaimHistoryDTO.getIfSendEmail()) {
+            MailMessageDTO mailMessageDTO = sendReportMailService.loadingData(7, projectId, fileGuids);
+            if (mailMessageDTO != null) {
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
         return reportAffairId;
     }
 
@@ -469,6 +496,12 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
         //3. 更新报告事务与文件关联
         List<String> fileGuids = updateClaimHistoryDTO.getFileGuids();
         assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);
+        if (updateClaimHistoryDTO.getIfSendEmail()) {
+            MailMessageDTO mailMessageDTO = sendReportMailService.loadingData(7, projectId, fileGuids);
+            if (mailMessageDTO != null) {
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
         return reportAffairId;
     }
 
@@ -511,6 +544,12 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
             });
             assoReportAffairFileService.saveBatch(assoReportAffairFiles);
         }
+        if (addSupplyEvidenceDTO.getIfSendEmail()) {
+            MailMessageDTO mailMessageDTO = sendReportMailService.loadingData(7, projectId, fileGuids);
+            if (mailMessageDTO != null) {
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
         return reportAffairId;
     }
 
@@ -542,6 +581,12 @@ public class ReportAffairService extends ServiceImpl<ReportAffairMapper, ReportA
         //3. 更新报告事务与文件关联
         List<String> fileGuids = updateSupplyEvidenceDTO.getFileGuids();
         assoReportAffairFileService.updateAffairFile(reportAffairId, fileGuids);
+        if (updateSupplyEvidenceDTO.getIfSendEmail()) {
+            MailMessageDTO mailMessageDTO = sendReportMailService.loadingData(7, projectId, fileGuids);
+            if (mailMessageDTO != null) {
+                mailSendService.sendReportEmail(mailMessageDTO);
+            }
+        }
         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);
+        }
+    }
+}

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

@@ -8,6 +8,7 @@ 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;
@@ -21,6 +22,8 @@ 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;
@@ -41,14 +44,46 @@ 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();
     }
@@ -85,6 +120,8 @@ public class IprPersonService extends ServiceImpl<IprPersonMapper, IprPerson> {
             throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "请选择至少一条数据进行删除");
         }
         this.removeBatchByIds(ids);
+        assoIprReportTypeService.deleteAssos(ids);
+        matchCasePersonService.deleteByIprIds(ids);
         return ids;
     }
 
@@ -149,6 +186,16 @@ public class IprPersonService extends ServiceImpl<IprPersonMapper, IprPerson> {
         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());
@@ -157,6 +204,22 @@ public class IprPersonService extends ServiceImpl<IprPersonMapper, IprPerson> {
         }
         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, "邮箱重复");
+        }
+    }
 }
 
 

+ 125 - 4
src/main/java/cn/cslg/pas/service/report/MatchCasePersonService.java

@@ -1,32 +1,153 @@
 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 void updateMatchCasePerson(UpdateMatchCasePersonDTO updateMatchCasePersonDTO) {
+    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 getReportMatchCasePerson(Integer reportId) {
+    public MatchCasePerson addMatchCasePersonDB(UpdateMatchCasePersonDTO updateMatchCasePersonDTO) {
+        MatchCasePerson matchCasePerson = new MatchCasePerson();
+
         LambdaQueryWrapper<MatchCasePerson> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(MatchCasePerson::getReportId, reportId);
-        MatchCasePerson matchCasePerson = this.getOne(queryWrapper, false);
+        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);
+    }
+
 }
 
 

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

@@ -0,0 +1,136 @@
+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.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.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.business.ProjectService;
+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;
+
+    //装载所需要的数据
+    public MailMessageDTO loadingData(Integer reportType, 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(iprPerson.getEmail());
+        }
+
+
+        // 根据报告类型查询默认邮箱发送人员
+        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, 1);
+            List<IprPerson> iprPersonList = iprPersonService.list(queryWrapper3);
+            if (iprPersonList != null && !iprPersonList.isEmpty()) {
+                names.addAll(iprPersonList.stream().map(IprPerson::getName).collect(Collectors.toList()));
+                emails.addAll(iprPersonList.stream().map(IprPerson::getEmail).collect(Collectors.toList()));
+            }
+        }
+        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);
+                }
+            } catch (Exception e) {
+                throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "文件查询错误");
+            }
+        }
+        // url配置
+        mailMessageDTO.setUrl("https://www.xsip.cn/AllReport?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();
+    }
+}