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;