From 1c6d03af0e01c823f9da88ccd34bb9796f062650 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 28 Oct 2022 16:51:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=82=AE=E4=BB=B6=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/IRaCIS.Core.API.csproj | 3 + .../EmailTemplate/EmailConfigTest.html | 27 +++++ .../DTO/TrialEmailNoticeConfigViewModel.cs | 4 + .../Document/TrialEmailNoticeConfigService.cs | 100 +++++++++++++++--- .../ReadingImageTaskService.cs | 2 +- .../Document/TrialEmailNoticeConfig.cs | 5 + 6 files changed, 127 insertions(+), 14 deletions(-) create mode 100644 IRaCIS.Core.API/wwwroot/EmailTemplate/EmailConfigTest.html diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.csproj b/IRaCIS.Core.API/IRaCIS.Core.API.csproj index 0144ce824..fcbc2c61b 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.csproj +++ b/IRaCIS.Core.API/IRaCIS.Core.API.csproj @@ -108,6 +108,9 @@ Always + + Always + Always diff --git a/IRaCIS.Core.API/wwwroot/EmailTemplate/EmailConfigTest.html b/IRaCIS.Core.API/wwwroot/EmailTemplate/EmailConfigTest.html new file mode 100644 index 000000000..0d184d0a3 --- /dev/null +++ b/IRaCIS.Core.API/wwwroot/EmailTemplate/EmailConfigTest.html @@ -0,0 +1,27 @@ + + + + + Title + + +
+
+
+ 您好: +
+
+ 感谢您使用展影云平台。 +
+
+ {0}。 +
+ +
+
祝您顺利!/Best Regards
+
上海展影医疗科技有限公司
+
+
+
+ + diff --git a/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs b/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs index 82ebf9fd8..5da355aa4 100644 --- a/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs +++ b/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs @@ -75,6 +75,10 @@ namespace IRaCIS.Core.Application.ViewModel public string AuthorizationCode { get; set; } = string.Empty; + public string SMTPServerAddress { get; set; } = string.Empty; + + public int SMTPServerPort { get; set; } + public CriterionType CriterionTypeEnum { get; set; } public string FromName { get; set; } = string.Empty; diff --git a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs index fc74ea478..86322fc4e 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs @@ -93,13 +93,17 @@ namespace IRaCIS.Core.Application.Service VisitEarliestScanDate = t.SourceSubjectVisit.EarliestScanDate, - VisitName = t.SourceSubjectVisit.VisitName, - t.SourceSubjectVisit.IsFinalVisit, - t.SourceSubjectVisit.PDState, - t.SourceSubjectVisit.IsEnrollmentConfirm, + VisitName =(string?) t.SourceSubjectVisit.VisitName, + IsFinalVisit=(bool?)t.SourceSubjectVisit.IsFinalVisit, + PDState =(PDStateEnum?) t.SourceSubjectVisit.PDState, + IsEnrollmentConfirm= (bool?) t.SourceSubjectVisit.IsEnrollmentConfirm, + IsBaseline =(bool?) t.SourceSubjectVisit.IsBaseLine, + ModuleEarliestScanDate = t.ReadModule.SubjectVisit.EarliestScanDate, - ModuleVisitName = t.ReadModule.SubjectVisit.VisitName, + ModuleVisitName = (string?) t.ReadModule.SubjectVisit.VisitName, + MoudulePDState = (PDStateEnum?)t.ReadModule.SubjectVisit.PDState, + t.SourceSubjectVisitId, t.SouceReadModuleId, t.SubjectId, @@ -114,9 +118,7 @@ namespace IRaCIS.Core.Application.Service //有序与否 t.TrialReadingCriterion.IsReadingTaskViewInOrder, - MoudulePDState = t.ReadModule.SubjectVisit.PDState, t.TrialId, - IsBaseline = t.SourceSubjectVisit.IsBaseLine, @@ -133,7 +135,7 @@ namespace IRaCIS.Core.Application.Service if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned) { //入组确认场景 - if (taskInfo.IsEnrollmentConfirm && taskInfo.IsEnrollementQualificationConfirm && taskInfo.IsBaseline) + if (taskInfo.IsEnrollmentConfirm==true && taskInfo.IsEnrollementQualificationConfirm==true && taskInfo.IsBaseline==true) { businessScenarioEnum = CommonDocumentBusinessScenario.EnrollConfirmed; @@ -163,9 +165,11 @@ namespace IRaCIS.Core.Application.Service .Include(t => t.TrialEmailNoticeUserList).FirstOrDefaultAsync(); - if (emailConfig == null) + if (emailConfig == null || emailConfig.IsAutoSend==false) { - throw new BusinessValidationFailedException("找不到该项目标准场景下邮件的配置"); + //throw new BusinessValidationFailedException("找不到该项目标准场景下邮件的配置"); + + return; } #endregion @@ -190,6 +194,12 @@ namespace IRaCIS.Core.Application.Service { sendEmailConfig.FromEmailAddress = new MimeKit.MailboxAddress(emailConfig.FromName, emailConfig.FromEmail); + sendEmailConfig.AuthorizationCode = emailConfig.AuthorizationCode; + sendEmailConfig.UserName = emailConfig.FromEmail; + + sendEmailConfig.Host = emailConfig.SMTPServerAddress; + sendEmailConfig.Port = emailConfig.SMTPServerPort; + //测试 sendEmailConfig.ToMailAddressList.Add(new MimeKit.MailboxAddress("ddd", "872297557@qq.com")); @@ -197,7 +207,7 @@ namespace IRaCIS.Core.Application.Service } else { - throw new BusinessValidationFailedException("发件邮箱有误,请核实"); + throw new BusinessValidationFailedException("项目发件邮箱配置有误,请核实"); } foreach (var item in toUserList) @@ -510,7 +520,7 @@ namespace IRaCIS.Core.Application.Service ["ResearchProgramNo"] = taskInfo.ResearchProgramNo, ["TrialSiteCode"] = taskInfo.TrialSiteCode, ["SubjectCode"] = taskInfo.SubjectCode, - ["VisitName"] = taskInfo.VisitName, + ["VisitName"] = taskInfo.SourceSubjectVisitId != null ? taskInfo.VisitName:taskInfo.ModuleVisitName, ["EarliestScanDate"] = taskInfo.SourceSubjectVisitId != null ? taskInfo.VisitEarliestScanDate : taskInfo.ModuleEarliestScanDate, ["SignTime"] = taskInfo.SignTime, ["Result"] = answer @@ -622,8 +632,8 @@ namespace IRaCIS.Core.Application.Service public async Task AddOrUpdateTrialEmailNoticeConfig(TrialEmailNoticeConfigAddOrEdit addOrEditTrialEmailNoticeConfig) { + await TestEmailConfigAsync(addOrEditTrialEmailNoticeConfig); - //var entity = await _trialEmailNoticeConfigRepository.InsertOrUpdateAsync(addOrEditTrialEmailNoticeConfig); if (addOrEditTrialEmailNoticeConfig.Id == null) { @@ -677,6 +687,7 @@ namespace IRaCIS.Core.Application.Service await _trialEmailNoticeConfigRepository.UpdateFromDTOAsync(addOrEditTrialEmailNoticeConfig); + await _trialEmailNoticeConfigRepository.SaveChangesAsync(); return ResponseOutput.Ok(); @@ -686,6 +697,69 @@ namespace IRaCIS.Core.Application.Service } + private async Task TestEmailConfigAsync(TrialEmailNoticeConfigAddOrEdit config) + { + var toUserList = await _repository.Where(t => t.TrialId == config.TrialId && config.ToUserTypeList.Contains(t.User.UserTypeEnum)).Select(t => new { t.User.EMail, t.User.FullName }).ToListAsync(); + + + if (!config.FromEmail.Contains("@") || string.IsNullOrEmpty(config.FromEmail)) + { + throw new BusinessValidationFailedException("项目发件邮箱配置有误,请核实"); + } + + + if (toUserList.Count() == 0|| toUserList.Where(t=>t.EMail.Contains("@")).Count()==0) + { + throw new BusinessValidationFailedException("项目没有有效的收件人,无法发送邮件"); + } + + var sendEmailConfig = new SMTPEmailConfig(); + + sendEmailConfig.FromEmailAddress = new MimeKit.MailboxAddress(config.FromName, config.FromEmail); + sendEmailConfig.AuthorizationCode = config.AuthorizationCode; + sendEmailConfig.UserName = config.FromEmail; + + sendEmailConfig.Host = config.SMTPServerAddress; + sendEmailConfig.Port = config.SMTPServerPort; + + + sendEmailConfig.ToMailAddressList.Add(new MimeKit.MailboxAddress(config.FromName, config.FromEmail)); + + + var pathToFile = _hostEnvironment.WebRootPath + + Path.DirectorySeparatorChar.ToString() + + "EmailTemplate" + + Path.DirectorySeparatorChar.ToString() + + "EmailConfigTest.html"; + + + sendEmailConfig.TopicDescription = "项目邮件测试"; + + using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile)) + { + var templateInfo = SourceReader.ReadToEnd(); + + + sendEmailConfig.HtmlBodyStr = string.Format(templateInfo, + $" 收到此邮件,代表邮件配置正确" + ); + } + + try + { + await SendEmailHelper.SendEmailAsync(sendEmailConfig); + + } + catch (Exception ex) + { + + throw new BusinessValidationFailedException("发件人配置错误,请核对服务器地址或者授权码是否填写有误"+ex.Message); + } + + + } + + [HttpDelete("{trialEmailNoticeConfigId:guid}")] public async Task DeleteTrialEmailNoticeConfig(Guid trialEmailNoticeConfigId) { diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 15769111d..a7317fba6 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -1183,7 +1183,7 @@ namespace IRaCIS.Application.Services await _visitTaskRepository.SaveChangesAsync(); - //await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(visitTaskId); + await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(visitTaskId); } diff --git a/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs b/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs index 443a55168..b527fc355 100644 --- a/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs +++ b/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs @@ -22,6 +22,11 @@ namespace IRaCIS.Core.Domain.Models [Required] public Guid TrialId { get; set; } + + public string SMTPServerAddress { get; set; } = string.Empty; + + public int SMTPServerPort { get; set; } + [Required] public string AuthorizationCode { get; set; } = string.Empty;