diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index fffbbb828..c150d2e5d 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -14159,7 +14159,7 @@ 加急的医学反馈任务 通知MIM - + 加急的医学反馈任务 通知MIM @@ -14177,7 +14177,7 @@ MIM 回复医学返回通知IR - + MIM 回复医学返回通知IR @@ -14194,7 +14194,7 @@ 加急阅片 IR 申请重阅 或者PM 申请重阅 - + 加急阅片 IR 申请重阅 或者PM 申请重阅 @@ -14234,7 +14234,7 @@ CRC 提交了 通知QC进行质控 Code005,006 - + CRC 提交了 通知QC进行质控 Code005,006 @@ -14244,7 +14244,7 @@ CRC 回复质控质疑 通知QC Code012,013 - + CRC 回复质控质疑 通知QC Code012,013 @@ -14254,7 +14254,7 @@ QC回复 质控质疑,通知CRC (014,015) - + QC回复 质控质疑,通知CRC (014,015) @@ -14264,19 +14264,19 @@ CRC 回复一致性核查质疑 通知PM (019,020) - + CRC 回复一致性核查质疑 通知PM (019,020) - + 通知PM 进行一致性核查 (018,030) - + 通知PM 进行一致性核查 (018,030) @@ -14286,7 +14286,7 @@ QC 领取了质控任务 (007,008) - + QC 领取了质控任务 (007,008) @@ -14377,7 +14377,7 @@ 10分钟检测通知IR 已通知的进行标注,下次不会再通知 - + 10分钟检测通知IR 已通知的进行标注,下次不会再通知 diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/ReadingRelationEmailConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/ReadingRelationEmailConsumer.cs index 0f677dfa1..a8879acd5 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/ReadingRelationEmailConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/ReadingRelationEmailConsumer.cs @@ -29,7 +29,7 @@ public class UrgentMedicalReviewAddedEventConsumer( IRepository _readingQuestionCriterionTrialRepository, IRepository _visitTaskRepository, IRepository _dictionaryRepository, - IRepository _emailNoticeConfigrepository, + IRepository _trialEmailNoticeConfigrepository, IOptionsMonitor systemEmailConfig ) : IConsumer { @@ -48,52 +48,56 @@ public class UrgentMedicalReviewAddedEventConsumer( var medicalReviewId = context.Message.MedicalReviewId; - var medicalReview = await _taskMedicalReviewRepository.Where(x => x.Id == medicalReviewId).Include(x => x.VisitTask).Include(x=>x.MedicalManagerUser).FirstOrDefaultAsync(); + var scenario = context.Message.IsPD ? EmailBusinessScenario.PDVerification_MedicalQC : EmailBusinessScenario.EligibilityVerification_MedicalQC; - - - if (medicalReview.MedicalManagerUserId == null) - { - Console.WriteLine("MIMId为空 ID"+ medicalReviewId); - return; - } - var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == medicalReview.VisitTask.TrialReadingCriterionId); - var userinfo = await _userRoleRepository.Where(x => x.Id == medicalReview.MedicalManagerUserId).FirstOrDefaultAsync(); - - var taskInfo = await _visitTaskRepository.Where(x => x.Id == medicalReview.VisitTaskId).Include(x=>x.SourceSubjectVisit).Include(x => x.ReadModule).Include(x => x.Subject).FirstNotNullAsync(); - - - var visitid = taskInfo.SourceSubjectVisit == null ? taskInfo.ReadModule.SubjectVisitId : taskInfo.SourceSubjectVisitId; - - - var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync(); - - - - var messageToSend = new MimeMessage(); - //发件地址 - messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); - - var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == medicalReview.TrialId); - var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; - - - var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + if (_trialEmailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).Any()) { - DictionaryRepository = _dictionaryRepository, - IsEn_US = isEn_US, + var medicalReview = await _taskMedicalReviewRepository.Where(x => x.Id == medicalReviewId).Include(x => x.VisitTask).Include(x => x.MedicalManagerUser).FirstOrDefaultAsync(); - DictionaryList = new List() - { + if (medicalReview.MedicalManagerUserId == null) + { + Console.WriteLine("MIMId为空 ID" + medicalReviewId); + return; + } + var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == medicalReview.VisitTask.TrialReadingCriterionId); + var userinfo = await _userRoleRepository.Where(x => x.Id == medicalReview.MedicalManagerUserId).FirstOrDefaultAsync(); + + var taskInfo = await _visitTaskRepository.Where(x => x.Id == medicalReview.VisitTaskId).Include(x => x.SourceSubjectVisit).Include(x => x.ReadModule).Include(x => x.Subject).FirstNotNullAsync(); + + + var visitid = taskInfo.SourceSubjectVisit == null ? taskInfo.ReadModule.SubjectVisitId : taskInfo.SourceSubjectVisitId; + + + var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync(); + + + + var messageToSend = new MimeMessage(); + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); + messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); + + var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == medicalReview.TrialId); + var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; + + + var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + { + + DictionaryRepository = _dictionaryRepository, + IsEn_US = isEn_US, + + + DictionaryList = new List() + { new DictionaryDto (){DictionaryCode= "ReadingCategory",EnumValue=taskInfo.ReadingCategory.GetEnumInt(), }, new DictionaryDto (){DictionaryCode= "MedicalReviewDoctorUserIdea",EnumValue=medicalReview.DoctorUserIdeaEnum.GetEnumInt(), }, new DictionaryDto (){DictionaryCode= "MedicalReviewAuditState",EnumValue=medicalReview.AuditState.GetEnumInt(), }, new DictionaryDto (){DictionaryCode= "YesOrNo",EnumValue=taskInfo.IsUrgent.ToString().ToLower(), } } - }) ; + }); Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => { @@ -107,7 +111,7 @@ public class UrgentMedicalReviewAddedEventConsumer( subjectName, // 受试者 {3} taskInfo.TaskBlindName, // 访视 {4} dictionValue[0], // 任务类型 {5} - //dictionValue[1], // 阅片人是否同意 {6} + //dictionValue[1], // 阅片人是否同意 {6} dictionValue[2], // 审核状态 {6} dictionValue[3], // 是否加急 {7} _systemEmailConfig.SiteUrl // 链接 {8} @@ -116,13 +120,12 @@ public class UrgentMedicalReviewAddedEventConsumer( return (topicStr, htmlBodyStr); }; - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(_trialEmailNoticeConfigrepository, scenario, messageToSend, emailConfigFunc); - context.Message.IsPD ? EmailBusinessScenario.PDVerification_MedicalQC : EmailBusinessScenario.EligibilityVerification_MedicalQC, - - messageToSend, emailConfigFunc); + await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + + } - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); } } @@ -135,7 +138,7 @@ public class UrgentIRRepliedMedicalReviewConsumer( IRepository _readingQuestionCriterionTrialRepository, IRepository _visitTaskRepository, IRepository _dictionaryRepository, - IRepository _emailNoticeConfigrepository, + IRepository _trialEmailNoticeConfigrepository, IOptionsMonitor systemEmailConfig) : IConsumer { private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; @@ -147,83 +150,86 @@ public class UrgentIRRepliedMedicalReviewConsumer( Console.WriteLine("发送(028,029) 【IR 回复医学反馈通知MIM】邮件!!!"); var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; - var medicalReviewId = context.Message.MedicalReviewId; + var scenario = context.Message.IsPD ? EmailBusinessScenario.PDVerification_ExpeditedMedicalQCResponse : EmailBusinessScenario.EligibilityVerification_ExpeditedMedicalQCResponse; - var medicalReview = await _taskMedicalReviewRepository.Where(x => x.Id == medicalReviewId).Include(x => x.VisitTask).Include(x => x.MedicalManagerUser).FirstOrDefaultAsync(); - - - - if (medicalReview.MedicalManagerUserId == null) - { - Console.WriteLine("MIMId为空 ID" + medicalReviewId); - return; - } - var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == medicalReview.VisitTask.TrialReadingCriterionId); - var userinfo = await _userRoleRepository.Where(x => x.Id == medicalReview.MedicalManagerUserId).FirstOrDefaultAsync(); - - var taskInfo = await _visitTaskRepository.Where(x => x.Id == medicalReview.VisitTaskId).Include(x => x.SourceSubjectVisit).Include(x => x.ReadModule).Include(x => x.Subject).FirstNotNullAsync(); - - - var visitid = taskInfo.SourceSubjectVisit == null ? taskInfo.ReadModule.SubjectVisitId : taskInfo.SourceSubjectVisitId; - - - var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync(); - - - - var messageToSend = new MimeMessage(); - //发件地址 - messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); - - var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == medicalReview.TrialId); - var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; - - - var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + if (_trialEmailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).Any()) { - DictionaryRepository = _dictionaryRepository, - IsEn_US = isEn_US, + + var medicalReviewId = context.Message.MedicalReviewId; + + var medicalReview = await _taskMedicalReviewRepository.Where(x => x.Id == medicalReviewId).Include(x => x.VisitTask).Include(x => x.MedicalManagerUser).FirstOrDefaultAsync(); - DictionaryList = new List() + + if (medicalReview.MedicalManagerUserId == null) + { + Console.WriteLine("MIMId为空 ID" + medicalReviewId); + return; + } + var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == medicalReview.VisitTask.TrialReadingCriterionId); + var userinfo = await _userRoleRepository.Where(x => x.Id == medicalReview.MedicalManagerUserId).FirstOrDefaultAsync(); + + var taskInfo = await _visitTaskRepository.Where(x => x.Id == medicalReview.VisitTaskId).Include(x => x.SourceSubjectVisit).Include(x => x.ReadModule).Include(x => x.Subject).FirstNotNullAsync(); + + + var visitid = taskInfo.SourceSubjectVisit == null ? taskInfo.ReadModule.SubjectVisitId : taskInfo.SourceSubjectVisitId; + + + var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync(); + + + + var messageToSend = new MimeMessage(); + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); + messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); + + var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == medicalReview.TrialId); + var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; + + + var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + { + + DictionaryRepository = _dictionaryRepository, + IsEn_US = isEn_US, + + + DictionaryList = new List() { new DictionaryDto (){DictionaryCode= "ReadingCategory",EnumValue=taskInfo.ReadingCategory.GetEnumInt(), }, new DictionaryDto (){DictionaryCode= "MedicalReviewDoctorUserIdea",EnumValue=medicalReview.DoctorUserIdeaEnum.GetEnumInt(), }, new DictionaryDto (){DictionaryCode= "MedicalReviewAuditState",EnumValue=medicalReview.AuditState.GetEnumInt(), }, new DictionaryDto (){DictionaryCode= "YesOrNo",EnumValue=taskInfo.IsUrgent.ToString().ToLower(), } } - }); + }); - Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => - { - var subjectCode = taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode; - var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, taskInfo.TaskBlindName); - var htmlBodyStr = string.Format( - CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), - userinfo.FullName, // 用户名 {0} - trialInfo.ExperimentName, // 项目 {1} - criterion.CriterionName, // 阅片标准 {2} - subjectCode, // 受试者 {3} - taskInfo.TaskBlindName, // 访视 {4} - dictionValue[0], // 任务类型 {5} - dictionValue[1], // 阅片人是否同意 {6} - dictionValue[2], // 审核状态 {7} - dictionValue[3], // 是否加急 {8} - _systemEmailConfig.SiteUrl // 链接 {9} - ); + Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => + { + var subjectCode = taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode; + var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, taskInfo.TaskBlindName); + var htmlBodyStr = string.Format( + CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), + userinfo.FullName, // 用户名 {0} + trialInfo.ExperimentName, // 项目 {1} + criterion.CriterionName, // 阅片标准 {2} + subjectCode, // 受试者 {3} + taskInfo.TaskBlindName, // 访视 {4} + dictionValue[0], // 任务类型 {5} + dictionValue[1], // 阅片人是否同意 {6} + dictionValue[2], // 审核状态 {7} + dictionValue[3], // 是否加急 {8} + _systemEmailConfig.SiteUrl // 链接 {9} + ); - return (topicStr, htmlBodyStr); - }; + return (topicStr, htmlBodyStr); + }; + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(_trialEmailNoticeConfigrepository, scenario, messageToSend, emailConfigFunc); - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, + await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + } - context.Message.IsPD ? EmailBusinessScenario.PDVerification_ExpeditedMedicalQCResponse : EmailBusinessScenario.EligibilityVerification_ExpeditedMedicalQCResponse, - - messageToSend, emailConfigFunc); - - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); } } @@ -238,7 +244,7 @@ public class UrgentMIMRepliedMedicalReviewConsumer( IRepository _readingQuestionCriterionTrialRepository, IRepository _visitTaskRepository, IRepository _dictionaryRepository, - IRepository _emailNoticeConfigrepository, + IRepository _trialEmailNoticeConfigrepository, IOptionsMonitor systemEmailConfig) : IConsumer { @@ -254,91 +260,89 @@ public class UrgentMIMRepliedMedicalReviewConsumer( Console.WriteLine("发送(022) 【加急医学反馈】邮件!!!"); var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; - var medicalReviewId = context.Message.MedicalReviewId; + var scenario = EmailBusinessScenario.ExpeditedMedicalQCToIR; - var medicalReview = await _taskMedicalReviewRepository.Where(x => x.Id == medicalReviewId).Include(x => x.VisitTask).Include(x => x.MedicalManagerUser).FirstOrDefaultAsync(); - - - - if (medicalReview.MedicalManagerUserId == null) - { - Console.WriteLine("MIMId为空 ID" + medicalReviewId); - return; - } - var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == medicalReview.VisitTask.TrialReadingCriterionId); - var taskInfo = await _visitTaskRepository.Where(x => x.Id == medicalReview.VisitTaskId).Include(x => x.SourceSubjectVisit).Include(x => x.ReadModule).Include(x => x.Subject).FirstNotNullAsync(); - - var userinfo = await _userRoleRepository.Where(x => x.Id == taskInfo.DoctorUserId).FirstOrDefaultAsync(); - - - - - var visitid = taskInfo.SourceSubjectVisit == null ? taskInfo.ReadModule.SubjectVisitId : taskInfo.SourceSubjectVisitId; - - - var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync(); - - - - var messageToSend = new MimeMessage(); - //发件地址 - messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); - - var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == medicalReview.TrialId); - var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; - - - var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + if (_trialEmailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).Any()) { - DictionaryRepository = _dictionaryRepository, - IsEn_US = isEn_US, + + var medicalReviewId = context.Message.MedicalReviewId; + + var medicalReview = await _taskMedicalReviewRepository.Where(x => x.Id == medicalReviewId).Include(x => x.VisitTask).Include(x => x.MedicalManagerUser).FirstOrDefaultAsync(); - DictionaryList = new List() + + if (medicalReview.MedicalManagerUserId == null) + { + Console.WriteLine("MIMId为空 ID" + medicalReviewId); + return; + } + var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == medicalReview.VisitTask.TrialReadingCriterionId); + var taskInfo = await _visitTaskRepository.Where(x => x.Id == medicalReview.VisitTaskId).Include(x => x.SourceSubjectVisit).Include(x => x.ReadModule).Include(x => x.Subject).FirstNotNullAsync(); + + var userinfo = await _userRoleRepository.Where(x => x.Id == taskInfo.DoctorUserId).FirstOrDefaultAsync(); + + + + + var visitid = taskInfo.SourceSubjectVisit == null ? taskInfo.ReadModule.SubjectVisitId : taskInfo.SourceSubjectVisitId; + + + var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync(); + + + + var messageToSend = new MimeMessage(); + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); + messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); + + var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == medicalReview.TrialId); + var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; + + + var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + { + + DictionaryRepository = _dictionaryRepository, + IsEn_US = isEn_US, + + + DictionaryList = new List() { new DictionaryDto (){DictionaryCode= "ReadingCategory",EnumValue=taskInfo.ReadingCategory.GetEnumInt(), }, new DictionaryDto (){DictionaryCode= "IsPass",EnumValue=medicalReview.IsHaveQuestion.ToString().ToLower(), },// 审核结论 new DictionaryDto (){DictionaryCode= "AuditAdvice",EnumValue=medicalReview.AuditAdviceEnum.GetEnumInt(), },// 审核建议 - new DictionaryDto (){DictionaryCode= "YesOrNo",EnumValue=taskInfo.IsUrgent.ToString().ToLower(), }, //是否加急 - - - - - + new DictionaryDto (){DictionaryCode= "YesOrNo",EnumValue=taskInfo.IsUrgent.ToString().ToLower(), }, //是否加急 } - }); + }); - Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => - { - var subjectCode = taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode; - var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, taskInfo.TaskBlindName); - var htmlBodyStr = string.Format( - CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), - userinfo.FullName, // 用户名 {0} - trialInfo.ExperimentName, // 项目 {1} - subjectCode, // 受试者 {2} - taskInfo.TaskBlindName, // 访视 {3} - criterion.CriterionName, // 阅片标准 {4} - dictionValue[0], // 任务类型 {5} - dictionValue[1], // 审核结论 {6} - dictionValue[2], // 医学审核建议 {7} - dictionValue[3], // 是否加急 {8} + Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => + { + var subjectCode = taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode; + var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, taskInfo.TaskBlindName); + var htmlBodyStr = string.Format( + CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), + userinfo.FullName, // 用户名 {0} + trialInfo.ExperimentName, // 项目 {1} + subjectCode, // 受试者 {2} + taskInfo.TaskBlindName, // 访视 {3} + criterion.CriterionName, // 阅片标准 {4} + dictionValue[0], // 任务类型 {5} + dictionValue[1], // 审核结论 {6} + dictionValue[2], // 医学审核建议 {7} + dictionValue[3], // 是否加急 {8} - _systemEmailConfig.SiteUrl // 链接 {9} - ); + _systemEmailConfig.SiteUrl // 链接 {9} + ); - return (topicStr, htmlBodyStr); - }; + return (topicStr, htmlBodyStr); + }; - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(_trialEmailNoticeConfigrepository, scenario, messageToSend, emailConfigFunc); - EmailBusinessScenario.ExpeditedMedicalQCToIR, - - messageToSend, emailConfigFunc); - - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + } } } @@ -354,7 +358,7 @@ public class UrgentIRApplyedReReadingConsumer( IRepository _readingQuestionCriterionTrialRepository, IRepository _visitTaskRepository, IRepository _dictionaryRepository, - IRepository _emailNoticeConfigrepository, + IRepository _trialEmailNoticeConfigrepository, IOptionsMonitor systemEmailConfig) : IConsumer { @@ -364,85 +368,87 @@ public class UrgentIRApplyedReReadingConsumer( Console.WriteLine("发送(024,025) 【加急医学反馈】邮件!!!"); var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; - var visitTaskId = context.Message.VisitTaskId; + var scenario = context.Message.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed ? EmailBusinessScenario.ReReadFromPMApproval : EmailBusinessScenario.ReReadFromIRApproval; - var taskInfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Include(x => x.SourceSubjectVisit).Include(x => x.ReadModule).Include(x => x.Subject).FirstNotNullAsync(); - var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == taskInfo.TrialReadingCriterionId); - - - var doctorInfo = await _userRoleRepository.Where(x => x.Id == taskInfo.DoctorUserId).FirstOrDefaultAsync(); - - var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == taskInfo.TrialId).Include(x => x.UserRole).Select(x=>x.UserRole).ToListAsync(); - - var userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.ProjectManager||x.UserTypeEnum==UserTypeEnum.APM).ToList(); - if (context.Message.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed) + if (_trialEmailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).Any()) { - userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.CPM || x.UserTypeEnum == UserTypeEnum.SPM).ToList(); - } - var visitid = taskInfo.SourceSubjectVisit == null ? taskInfo.ReadModule.SubjectVisitId : taskInfo.SourceSubjectVisitId; + var visitTaskId = context.Message.VisitTaskId; + + var taskInfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Include(x => x.SourceSubjectVisit).Include(x => x.ReadModule).Include(x => x.Subject).FirstNotNullAsync(); + var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == taskInfo.TrialReadingCriterionId); - var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync(); + var doctorInfo = await _userRoleRepository.Where(x => x.Id == taskInfo.DoctorUserId).FirstOrDefaultAsync(); + var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == taskInfo.TrialId).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); - foreach (var userinfo in userinfoList) - { - var messageToSend = new MimeMessage(); - //发件地址 - messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); - - var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == taskInfo.TrialId); - var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; - - - var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + var userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.ProjectManager || x.UserTypeEnum == UserTypeEnum.APM).ToList(); + if (context.Message.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed) { + userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.CPM || x.UserTypeEnum == UserTypeEnum.SPM).ToList(); + } - DictionaryRepository = _dictionaryRepository, - IsEn_US = isEn_US, - DictionaryList = new List() + var visitid = taskInfo.SourceSubjectVisit == null ? taskInfo.ReadModule.SubjectVisitId : taskInfo.SourceSubjectVisitId; + + + var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync(); + + + foreach (var userinfo in userinfoList) + { + var messageToSend = new MimeMessage(); + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); + messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); + + var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == taskInfo.TrialId); + var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; + + + var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + { + + DictionaryRepository = _dictionaryRepository, + IsEn_US = isEn_US, + DictionaryList = new List() { new DictionaryDto (){DictionaryCode= "ReadingCategory",EnumValue=taskInfo.ReadingCategory.GetEnumInt(), }, //任务类型 new DictionaryDto (){DictionaryCode= "RequestReReadingResult",EnumValue="0", }, //审批结果 都是待审批 } - }); + }); - Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => - { - var subjectCode = taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode; - var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, taskInfo.TaskBlindName); - var htmlBodyStr = string.Format( - CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), - userinfo.FullName, // 用户名 {0} - trialInfo.ExperimentName, // 项目 {1} - subjectCode, // 受试者 {2} - taskInfo.TaskBlindName, // 访视 {3} - dictionValue[0], // 任务类型 {4} - doctorInfo.FullName, // 阅片人 {5} - criterion.CriterionName, // 阅片标准 {6} - dictionValue[1], // 审批结果 {7} - _systemEmailConfig.SiteUrl // 链接 {8} + Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => + { + var subjectCode = taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode; + var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, taskInfo.TaskBlindName); + var htmlBodyStr = string.Format( + CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), + userinfo.FullName, // 用户名 {0} + trialInfo.ExperimentName, // 项目 {1} + subjectCode, // 受试者 {2} + taskInfo.TaskBlindName, // 访视 {3} + dictionValue[0], // 任务类型 {4} + doctorInfo.FullName, // 阅片人 {5} + criterion.CriterionName, // 阅片标准 {6} + dictionValue[1], // 审批结果 {7} + _systemEmailConfig.SiteUrl // 链接 {8} - ); + ); - return (topicStr, htmlBodyStr); - }; + return (topicStr, htmlBodyStr); + }; - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(_trialEmailNoticeConfigrepository, scenario, messageToSend, emailConfigFunc); - context.Message.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed? EmailBusinessScenario.ReReadFromPMApproval: EmailBusinessScenario.ReReadFromIRApproval, - - messageToSend, emailConfigFunc); - - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + } } - + } } diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs index 4fedca631..208357d6c 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs @@ -199,7 +199,7 @@ public class SiteSurveySPMSubmitedEventConsumer( return (topicStr, htmlBodyStr); }; - await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(_trialEmailNoticeConfigrepository, EmailBusinessScenario.Approval_SubmitSiteSurvey, messageToSend, emailConfigFunc); + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(_trialEmailNoticeConfigrepository, scenario, messageToSend, emailConfigFunc); await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); } @@ -230,7 +230,7 @@ public class SiteSurverRejectedEventConsumer( var trialSiteSurveyId = context.Message.TrialSiteSurveyId; - var scenario = EmailBusinessScenario.Approval_SubmitSiteSurvey; + var scenario = EmailBusinessScenario.SiteSurveyReject; if (_trialEmailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).Any()) { @@ -308,7 +308,7 @@ public class SiteSurverRejectedEventConsumer( return (topicStr, htmlBodyStr); }; - await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(_trialEmailNoticeConfigrepository, EmailBusinessScenario.SiteSurveyReject, messageToSend, emailConfigFunc); + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(_trialEmailNoticeConfigrepository, scenario, messageToSend, emailConfigFunc); await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); } diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/SubjectVisitQCAndCheckConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/SubjectVisitQCAndCheckConsumer.cs index 650a53cff..ebad9287b 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/SubjectVisitQCAndCheckConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/SubjectVisitQCAndCheckConsumer.cs @@ -24,13 +24,13 @@ namespace IRaCIS.Core.Application.MassTransit.Consumer; /// public class CRCSubmitedAndQCToAuditEventConsumer( IRepository _userRoleRepository, - IRepository _trialUseRoleRepository, - IRepository _subjectVisitRepository, + IRepository _trialUseRoleRepository, + IRepository _subjectVisitRepository, IRepository _trialRepository, IRepository _readingQuestionCriterionTrialRepository, IRepository _visitTaskRepository, - IRepository _dictionaryRepository, - IRepository _emailNoticeConfigrepository, + IRepository _dictionaryRepository, + IRepository _trialEmailNoticeConfigrepository, IOptionsMonitor systemEmailConfig) : IConsumer { private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; @@ -39,48 +39,54 @@ public class CRCSubmitedAndQCToAuditEventConsumer( Console.WriteLine("发送(005,006) 【加急项目所有IQC待领取质控任务】邮件!!!"); var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; - var subjectVisitId = context.Message.SubjectVisitId; + var scenario = context.Message.IsPd ? EmailBusinessScenario.PDVerification_PendingImageQCClaim : EmailBusinessScenario.EligibilityVerification_PendingClaim; - var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).Include(x => x.Subject).FirstOrDefaultAsync(); - - var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); - - var userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.IQC).ToList(); - - - var pmandAPm = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList(); - - var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId); - - var auditStateCode = "AuditStatePE"; - - if (trialInfo.QCProcessEnum == TrialQCProcess.DoubleAudit) - { - auditStateCode = "AuditStateRC"; - } - - - - var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + if (_trialEmailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).Any()) { - DictionaryRepository = _dictionaryRepository, - IsEn_US = isEn_US, - DictionaryList = new List() + + var subjectVisitId = context.Message.SubjectVisitId; + + var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).Include(x => x.Subject).FirstOrDefaultAsync(); + + var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); + + var userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.IQC).ToList(); + + + var pmandAPm = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList(); + + var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId); + + var auditStateCode = "AuditStatePE"; + + if (trialInfo.QCProcessEnum == TrialQCProcess.DoubleAudit) + { + auditStateCode = "AuditStateRC"; + } + + + + var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + { + + DictionaryRepository = _dictionaryRepository, + IsEn_US = isEn_US, + DictionaryList = new List() { new DictionaryDto (){DictionaryCode= auditStateCode,EnumValue=subjectVisit.AuditState.GetEnumInt(), }, //审核状态 } - }); + }); var messageToSend = new MimeMessage(); //发件地址 messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - + foreach (var userinfo in userinfoList) { - messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); + messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); } var userNames = userinfoList.Select(x => x.FullName).ToList(); @@ -111,14 +117,11 @@ public class CRCSubmitedAndQCToAuditEventConsumer( return (topicStr, htmlBodyStr); }; - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, - - context.Message.IsPd ? EmailBusinessScenario.PDVerification_PendingImageQCClaim : EmailBusinessScenario.EligibilityVerification_PendingClaim, - - messageToSend, emailConfigFunc); + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(_trialEmailNoticeConfigrepository, scenario, messageToSend, emailConfigFunc); await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); - + } + } } @@ -134,7 +137,7 @@ public class CRCRepliedQCChallengeEventConsumer( IRepository _qCChallengeRepository, IRepository _qCChallengeDialogRepository, IRepository _dictionaryRepository, - IRepository _emailNoticeConfigrepository, + IRepository _trialEmailNoticeConfigrepository, IOptionsMonitor systemEmailConfig) : IConsumer { @@ -144,78 +147,80 @@ public class CRCRepliedQCChallengeEventConsumer( Console.WriteLine("发送(Code012,013) 【CRC 回复质控质疑 通知QC】邮件!!!"); var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; - var subjectVisitId = context.Message.SubjectVisitId; + var scenario = context.Message.IsPd ? EmailBusinessScenario.PDVerification_UnderQCQuery : EmailBusinessScenario.EligibilityVerification_Pending; - var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).Include(x => x.Subject).Include(x => x.CurrentActionUser).FirstNotNullAsync(); - - - var qCChallengeDialog = await _qCChallengeDialogRepository.Where(x => x.Id == context.Message.QCChallengeDialogId).Include(x => x.QCChallenge).FirstNotNullAsync(); - - - - var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); - - - - - var userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.IQC).ToList(); - var pmandAPm = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList(); - - - var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId); - - - var userinfo = subjectVisit.CurrentActionUser; - - var messageToSend = new MimeMessage(); - //发件地址 - messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); - - foreach (var pm in pmandAPm) - { - messageToSend.Cc.Add(new MailboxAddress(String.Empty, pm.EMail)); - } - var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; - - - var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + if (_trialEmailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).Any()) { - DictionaryRepository = _dictionaryRepository, - IsEn_US = isEn_US, - DictionaryList = new List() + + var subjectVisitId = context.Message.SubjectVisitId; + + var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).Include(x => x.Subject).Include(x => x.CurrentActionUser).FirstNotNullAsync(); + + + var qCChallengeDialog = await _qCChallengeDialogRepository.Where(x => x.Id == context.Message.QCChallengeDialogId).Include(x => x.QCChallenge).FirstNotNullAsync(); + + + + var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); + + + + + var userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.IQC).ToList(); + var pmandAPm = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList(); + + + var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId); + + + var userinfo = subjectVisit.CurrentActionUser; + + var messageToSend = new MimeMessage(); + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); + messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); + + foreach (var pm in pmandAPm) + { + messageToSend.Cc.Add(new MailboxAddress(String.Empty, pm.EMail)); + } + var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; + + + var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + { + + DictionaryRepository = _dictionaryRepository, + IsEn_US = isEn_US, + DictionaryList = new List() { new DictionaryDto (){DictionaryCode= "YesOrNo",EnumValue=qCChallengeDialog.QCChallenge.IsClosed.ToString().ToLower(), }, //是否关闭 } - }); + }); - Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => - { - var subjectCode = subjectVisit.Subject.Code; - var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName); - var htmlBodyStr = string.Format( - CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), - userinfo.FullName, // 用户名 {0} - trialInfo.ExperimentName, // 项目 {1} - subjectCode, // 受试者 {2} - subjectVisit.VisitName, // 访视 {3} - dictionValue[0], // 是否关闭 {4} - qCChallengeDialog.TalkContent, // 质疑内容{5} - _systemEmailConfig.SiteUrl // 链接 {6} - ); + Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => + { + var subjectCode = subjectVisit.Subject.Code; + var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName); + var htmlBodyStr = string.Format( + CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), + userinfo.FullName, // 用户名 {0} + trialInfo.ExperimentName, // 项目 {1} + subjectCode, // 受试者 {2} + subjectVisit.VisitName, // 访视 {3} + dictionValue[0], // 是否关闭 {4} + qCChallengeDialog.TalkContent, // 质疑内容{5} + _systemEmailConfig.SiteUrl // 链接 {6} + ); - return (topicStr, htmlBodyStr); - }; + return (topicStr, htmlBodyStr); + }; + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(_trialEmailNoticeConfigrepository, scenario, messageToSend, emailConfigFunc); - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, - - context.Message.IsPd ? EmailBusinessScenario.PDVerification_UnderQCQuery : EmailBusinessScenario.EligibilityVerification_Pending, - - messageToSend, emailConfigFunc); - - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + } } } @@ -231,7 +236,7 @@ public class QCRepliedQCChallengeEventConsumer( IRepository _qCChallengeRepository, IRepository _qCChallengeDialogRepository, IRepository _dictionaryRepository, - IRepository _emailNoticeConfigrepository, + IRepository _trialEmailNoticeConfigrepository, IOptionsMonitor systemEmailConfig) : IConsumer { private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; @@ -240,90 +245,94 @@ public class QCRepliedQCChallengeEventConsumer( Console.WriteLine("发送(014,015) 【 QC回复 质控质疑,通知CRC】邮件!!!"); var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; - string talkContent = string.Empty; - var isclose = false; - if (context.Message.QCChallengeDialogId != null) - { - var qCChallengeDialog = await _qCChallengeDialogRepository.Where(x => x.Id == context.Message.QCChallengeDialogId.Value).Include(x => x.QCChallenge).FirstNotNullAsync(); - talkContent = qCChallengeDialog.TalkContent; - isclose = qCChallengeDialog.QCChallenge.IsClosed; - } - else if(context.Message.QCChallengeId != null) - { - var qCChallenge = await _qCChallengeRepository.Where(x => x.Id == context.Message.QCChallengeId.Value).FirstNotNullAsync(); - talkContent = qCChallenge.Content; - isclose = qCChallenge.IsClosed; - } - - var subjectVisitId = context.Message.SubjectVisitId; + var scenario = context.Message.IsPd ? EmailBusinessScenario.PDVerification_ImageQuery : EmailBusinessScenario.EligibilityVerification_ImageQuery; - var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).Include(x => x.Subject).FirstNotNullAsync(); - - var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); - - var userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).ToList(); - - var craInfo = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.CRA).FirstOrDefault(); - - var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId); - - - - - var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + if (_trialEmailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).Any()) { - DictionaryRepository = _dictionaryRepository, - IsEn_US = isEn_US, - DictionaryList = new List() + + string talkContent = string.Empty; + var isclose = false; + if (context.Message.QCChallengeDialogId != null) + { + var qCChallengeDialog = await _qCChallengeDialogRepository.Where(x => x.Id == context.Message.QCChallengeDialogId.Value).Include(x => x.QCChallenge).FirstNotNullAsync(); + talkContent = qCChallengeDialog.TalkContent; + isclose = qCChallengeDialog.QCChallenge.IsClosed; + } + else if (context.Message.QCChallengeId != null) + { + var qCChallenge = await _qCChallengeRepository.Where(x => x.Id == context.Message.QCChallengeId.Value).FirstNotNullAsync(); + talkContent = qCChallenge.Content; + isclose = qCChallenge.IsClosed; + } + + var subjectVisitId = context.Message.SubjectVisitId; + + var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).Include(x => x.Subject).FirstNotNullAsync(); + + var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); + + var userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).ToList(); + + var craInfo = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.CRA).FirstOrDefault(); + + var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId); + + + + + var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + { + + DictionaryRepository = _dictionaryRepository, + IsEn_US = isEn_US, + DictionaryList = new List() { new DictionaryDto (){DictionaryCode= "YesOrNo",EnumValue=isclose.ToString().ToLower(), }, //是否关闭 } - }); + }); - foreach (var userinfo in userinfoList) - { - var messageToSend = new MimeMessage(); - //发件地址 - messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); - if (craInfo != null) + foreach (var userinfo in userinfoList) { - messageToSend.Cc.Add(new MailboxAddress(String.Empty, craInfo.EMail)); + var messageToSend = new MimeMessage(); + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); + messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); + if (craInfo != null) + { + messageToSend.Cc.Add(new MailboxAddress(String.Empty, craInfo.EMail)); + } + + var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; + + + + + Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => + { + var subjectCode = subjectVisit.Subject.Code; + var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName); + var htmlBodyStr = string.Format( + CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), + userinfo.FullName, // 用户名 {0} + trialInfo.ExperimentName, // 项目 {1} + subjectCode, // 受试者 {2} + subjectVisit.VisitName, // 访视 {3} + dictionValue[0], // 质疑是否关闭 {4} + talkContent, // 质疑内容 {5} + _systemEmailConfig.SiteUrl // 链接 {65} + ); + + return (topicStr, htmlBodyStr); + }; + + + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(_trialEmailNoticeConfigrepository, scenario, messageToSend, emailConfigFunc); + + await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); } - - var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; - - - - - Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => - { - var subjectCode = subjectVisit.Subject.Code; - var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName); - var htmlBodyStr = string.Format( - CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), - userinfo.FullName, // 用户名 {0} - trialInfo.ExperimentName, // 项目 {1} - subjectCode, // 受试者 {2} - subjectVisit.VisitName, // 访视 {3} - dictionValue[0], // 质疑是否关闭 {4} - talkContent, // 质疑内容 {5} - _systemEmailConfig.SiteUrl // 链接 {65} - ); - - return (topicStr, htmlBodyStr); - }; - - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, - - context.Message.IsPd ? EmailBusinessScenario.PDVerification_ImageQuery : EmailBusinessScenario.EligibilityVerification_ImageQuery, - - messageToSend, emailConfigFunc); - - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); } } } @@ -340,7 +349,7 @@ public class CRCRepliedCheckChallengeEventConsumer( IRepository _qCChallengeRepository, IRepository _qCChallengeDialogRepository, IRepository _dictionaryRepository, - IRepository _emailNoticeConfigrepository, + IRepository _trialEmailNoticeConfigrepository, IOptionsMonitor systemEmailConfig) : IConsumer { @@ -350,70 +359,74 @@ public class CRCRepliedCheckChallengeEventConsumer( Console.WriteLine("发送(019,020) 【 CRC 回复一致性核查质疑 通知PM】邮件!!!"); var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; - var subjectVisitId = context.Message.SubjectVisitId; + var scenario = context.Message.IsPd ? EmailBusinessScenario.PDVerification_UnderDRForPMOrAPM : EmailBusinessScenario.EligibilityVerification_UnderDRForPMOrAPM; - var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).Include(x => x.Subject).FirstNotNullAsync(); - - var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); - - var userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList(); - - - var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId); - - - - - var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + if (_trialEmailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).Any()) { - DictionaryRepository = _dictionaryRepository, - IsEn_US = isEn_US, - DictionaryList = new List() + + var subjectVisitId = context.Message.SubjectVisitId; + + var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).Include(x => x.Subject).FirstNotNullAsync(); + + var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); + + var userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList(); + + + var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId); + + + + + var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + { + + DictionaryRepository = _dictionaryRepository, + IsEn_US = isEn_US, + DictionaryList = new List() { new DictionaryDto (){DictionaryCode= "CheckState",EnumValue=subjectVisit.CheckState.GetEnumInt(), }, //审核状态 } - }); + }); - foreach (var userinfo in userinfoList) - { - var messageToSend = new MimeMessage(); - //发件地址 - messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); - - - var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; - - - - - Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => + foreach (var userinfo in userinfoList) { - var subjectCode = subjectVisit.Subject.Code; - var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName); - var htmlBodyStr = string.Format( - CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), - userinfo.FullName, // 用户名 {0} - trialInfo.ExperimentName, // 项目 {1} - subjectCode, // 受试者 {2} - subjectVisit.VisitName, // 访视 {3} - dictionValue[0], // 核查状态 {4} - _systemEmailConfig.SiteUrl // 链接 {5} - ); + var messageToSend = new MimeMessage(); + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); + messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); - return (topicStr, htmlBodyStr); - }; - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, + var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; - context.Message.IsPd ? EmailBusinessScenario.PDVerification_UnderDRForPMOrAPM : EmailBusinessScenario.EligibilityVerification_UnderDRForPMOrAPM, - messageToSend, emailConfigFunc); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + + Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => + { + var subjectCode = subjectVisit.Subject.Code; + var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName); + var htmlBodyStr = string.Format( + CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), + userinfo.FullName, // 用户名 {0} + trialInfo.ExperimentName, // 项目 {1} + subjectCode, // 受试者 {2} + subjectVisit.VisitName, // 访视 {3} + dictionValue[0], // 核查状态 {4} + _systemEmailConfig.SiteUrl // 链接 {5} + ); + + return (topicStr, htmlBodyStr); + }; + + + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(_trialEmailNoticeConfigrepository, scenario, messageToSend, emailConfigFunc); + + await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + } } } } @@ -432,7 +445,7 @@ public class PMRepliedCheckChallengeEventConsumer( IRepository _checkChallengeDialogRepository, IRepository _qCChallengeDialogRepository, IRepository _dictionaryRepository, - IRepository _emailNoticeConfigrepository, + IRepository _trialEmailNoticeConfigrepository, IOptionsMonitor systemEmailConfig) : IConsumer { @@ -441,80 +454,82 @@ public class PMRepliedCheckChallengeEventConsumer( { Console.WriteLine("发送(016,017) 【 PM 一致性核查 通知CRC】邮件!!!"); var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; - var checkChallengeDialog = await _checkChallengeDialogRepository.Where(x => x.Id == context.Message.CheckChallengeDialogId).FirstNotNullAsync(); - var subjectVisitId = context.Message.SubjectVisitId; - var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).Include(x => x.NoneDicomStudyList).Include(x => x.StudyList).Include(x => x.Subject).FirstNotNullAsync(); + var scenario = context.Message.IsPd ? EmailBusinessScenario.PDVerification_UnderDR : EmailBusinessScenario.EligibilityVerification_UnderDR; - var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); - - var userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).ToList(); - - var craInfo = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.CRA).FirstOrDefault(); - - var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId); - - - List modalities = new List(); - modalities =subjectVisit.NoneDicomStudyList.Select(t => t.Modality) - .Union(subjectVisit.StudyList.Select(k => k.ModalityForEdit)).ToList(); - - var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + if (_trialEmailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).Any()) { - DictionaryRepository = _dictionaryRepository, - IsEn_US = isEn_US, - DictionaryList = new List() + var checkChallengeDialog = await _checkChallengeDialogRepository.Where(x => x.Id == context.Message.CheckChallengeDialogId).FirstNotNullAsync(); + var subjectVisitId = context.Message.SubjectVisitId; + + var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).Include(x => x.NoneDicomStudyList).Include(x => x.StudyList).Include(x => x.Subject).FirstNotNullAsync(); + + var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); + + var userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).ToList(); + + var craInfo = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.CRA).FirstOrDefault(); + + var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId); + + + List modalities = new List(); + modalities = subjectVisit.NoneDicomStudyList.Select(t => t.Modality) + .Union(subjectVisit.StudyList.Select(k => k.ModalityForEdit)).ToList(); + + var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + { + + DictionaryRepository = _dictionaryRepository, + IsEn_US = isEn_US, + DictionaryList = new List() { new DictionaryDto (){DictionaryCode= "CheckState",EnumValue=subjectVisit.CheckState.GetEnumInt(), }, //核查状态 } - }); + }); - foreach (var userinfo in userinfoList) - { - var messageToSend = new MimeMessage(); - //发件地址 - messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); - if (craInfo != null) + foreach (var userinfo in userinfoList) { - messageToSend.Cc.Add(new MailboxAddress(String.Empty, craInfo.EMail)); + var messageToSend = new MimeMessage(); + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); + messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); + if (craInfo != null) + { + messageToSend.Cc.Add(new MailboxAddress(String.Empty, craInfo.EMail)); + } + + var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; + + + Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => + { + var subjectCode = subjectVisit.Subject.Code; + var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName); + var htmlBodyStr = string.Format( + CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), + userinfo.FullName, // 用户名 {0} + trialInfo.ExperimentName, // 项目 {1} + + subjectCode, // 受试者 {2} + subjectVisit.VisitName, // 访视 {3} + string.Join(',', modalities), // 检查类型 {4} + dictionValue[0], // 核查状态 {5} + checkChallengeDialog.TalkContent,// 质疑内容{6} + _systemEmailConfig.SiteUrl // 链接 {7} + ); + + return (topicStr, htmlBodyStr); + }; + + + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(_trialEmailNoticeConfigrepository, scenario, messageToSend, emailConfigFunc); + + await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); } - - var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; - - - - - Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => - { - var subjectCode = subjectVisit.Subject.Code; - var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName); - var htmlBodyStr = string.Format( - CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), - userinfo.FullName, // 用户名 {0} - trialInfo.ExperimentName, // 项目 {1} - - subjectCode, // 受试者 {2} - subjectVisit.VisitName, // 访视 {3} - string.Join(',', modalities), // 检查类型 {4} - dictionValue[0], // 核查状态 {5} - checkChallengeDialog.TalkContent,// 质疑内容{6} - _systemEmailConfig.SiteUrl // 链接 {7} - ); - - return (topicStr, htmlBodyStr); - }; - - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, - - context.Message.IsPd ? EmailBusinessScenario.PDVerification_UnderDR : EmailBusinessScenario.EligibilityVerification_UnderDR, - - messageToSend, emailConfigFunc); - - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); } } } @@ -531,7 +546,7 @@ public class CheckStateChangedToAuditEventConsumer( IRepository _qCChallengeRepository, IRepository _qCChallengeDialogRepository, IRepository _dictionaryRepository, - IRepository _emailNoticeConfigrepository, + IRepository _trialEmailNoticeConfigrepository, IOptionsMonitor systemEmailConfig) : IConsumer { private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; @@ -540,70 +555,74 @@ public class CheckStateChangedToAuditEventConsumer( Console.WriteLine("发送(018,030) 【通知PM 进行一致性核查】邮件!!!"); var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; - var subjectVisitId = context.Message.SubjectVisitId; + var scenario = context.Message.IsPd ? EmailBusinessScenario.PDVerification_DR : EmailBusinessScenario.EligibilityVerification_DR; - var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).Include(x => x.Subject).FirstNotNullAsync(); - - var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); - - var userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList(); - - - var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId); - - - - - var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + if (_trialEmailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).Any()) { - DictionaryRepository = _dictionaryRepository, - IsEn_US = isEn_US, - DictionaryList = new List() + + var subjectVisitId = context.Message.SubjectVisitId; + + var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).Include(x => x.Subject).FirstNotNullAsync(); + + var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); + + var userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList(); + + + var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId); + + + + + var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + { + + DictionaryRepository = _dictionaryRepository, + IsEn_US = isEn_US, + DictionaryList = new List() { new DictionaryDto (){DictionaryCode= "CheckState",EnumValue=subjectVisit.CheckState.GetEnumInt(), }, //审核状态 } - }); + }); - foreach (var userinfo in userinfoList) - { - var messageToSend = new MimeMessage(); - //发件地址 - messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); - - - var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; - - - - - Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => + foreach (var userinfo in userinfoList) { - var subjectCode = subjectVisit.Subject.Code; - var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName); - var htmlBodyStr = string.Format( - CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), - userinfo.FullName, // 姓名 {0} - trialInfo.ExperimentName, // 项目 {1} - subjectCode, // 受试者 {2} - subjectVisit.VisitName, // 访视 {3} - dictionValue[0], // 核查状态 {4} - _systemEmailConfig.SiteUrl // 链接 {5} - ); + var messageToSend = new MimeMessage(); + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); + messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); - return (topicStr, htmlBodyStr); - }; - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, + var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; - context.Message.IsPd ? EmailBusinessScenario.PDVerification_DR : EmailBusinessScenario.EligibilityVerification_DR, - messageToSend, emailConfigFunc); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + + Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => + { + var subjectCode = subjectVisit.Subject.Code; + var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName); + var htmlBodyStr = string.Format( + CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), + userinfo.FullName, // 姓名 {0} + trialInfo.ExperimentName, // 项目 {1} + subjectCode, // 受试者 {2} + subjectVisit.VisitName, // 访视 {3} + dictionValue[0], // 核查状态 {4} + _systemEmailConfig.SiteUrl // 链接 {5} + ); + + return (topicStr, htmlBodyStr); + }; + + + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(_trialEmailNoticeConfigrepository, scenario, messageToSend, emailConfigFunc); + + await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + } } } } @@ -619,7 +638,7 @@ public class QCClaimTaskEventConsumer( IRepository _qCChallengeRepository, IRepository _qCChallengeDialogRepository, IRepository _dictionaryRepository, - IRepository _emailNoticeConfigrepository, + IRepository _trialEmailNoticeConfigrepository, IOptionsMonitor systemEmailConfig) : IConsumer { private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; @@ -628,87 +647,91 @@ public class QCClaimTaskEventConsumer( Console.WriteLine("发送(Code007,008) 【QC 领取了质控任务】邮件!!!"); var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; - var subjectVisitId = context.Message.SubjectVisitId; + var scenario = context.Message.IsPd ? EmailBusinessScenario.PDVerification_PendingImageQC : EmailBusinessScenario.EligibilityVerification_PendingImageQC; - var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).Include(x => x.Subject).Include(x => x.CurrentActionUser).FirstNotNullAsync(); - - - var subjectVisitList = await _subjectVisitRepository.Where(x => x.CurrentActionUserId == context.Message.CurrentActionUserId && x.TrialId == subjectVisit.TrialId).Include(x => x.Subject).ToListAsync(); - - - - - - var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); - - - - - - var pmandAPm = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList(); - - - var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId); - - - var userinfo = subjectVisit.CurrentActionUser; - - var messageToSend = new MimeMessage(); - //发件地址 - messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); - - foreach (var pm in pmandAPm) + if (_trialEmailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).Any()) { - messageToSend.Cc.Add(new MailboxAddress(String.Empty, pm.EMail)); - } - var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; - var auditStateCode = "AuditStatePE"; - if (trialInfo.QCProcessEnum == TrialQCProcess.DoubleAudit) - { - auditStateCode = "AuditStateRC"; - } + var subjectVisitId = context.Message.SubjectVisitId; - var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() - { - DictionaryRepository = _dictionaryRepository, - IsEn_US = isEn_US, - DictionaryList = new List() + var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).Include(x => x.Subject).Include(x => x.CurrentActionUser).FirstNotNullAsync(); + + + var subjectVisitList = await _subjectVisitRepository.Where(x => x.CurrentActionUserId == context.Message.CurrentActionUserId && x.TrialId == subjectVisit.TrialId).Include(x => x.Subject).ToListAsync(); + + + + + + var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); + + + + + + var pmandAPm = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList(); + + + var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId); + + + var userinfo = subjectVisit.CurrentActionUser; + + var messageToSend = new MimeMessage(); + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); + messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail)); + + foreach (var pm in pmandAPm) + { + messageToSend.Cc.Add(new MailboxAddress(String.Empty, pm.EMail)); + } + var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; + + var auditStateCode = "AuditStatePE"; + + if (trialInfo.QCProcessEnum == TrialQCProcess.DoubleAudit) + { + auditStateCode = "AuditStateRC"; + } + + var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + { + DictionaryRepository = _dictionaryRepository, + IsEn_US = isEn_US, + DictionaryList = new List() { new DictionaryDto (){DictionaryCode= auditStateCode,EnumValue=subjectVisit.AuditState.GetEnumInt(), }, //审核状态 } - }); + }); - var subjectcodes = subjectVisitList.Select(x => x.Subject.Code).Distinct().ToList(); - var visitnames = subjectVisitList.Select(x => x.VisitName).Distinct().ToList(); + var subjectcodes = subjectVisitList.Select(x => x.Subject.Code).Distinct().ToList(); + var visitnames = subjectVisitList.Select(x => x.VisitName).Distinct().ToList(); - Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => - { - var subjectCode = subjectVisit.Subject.Code; - var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName); - var htmlBodyStr = string.Format( - CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), - userinfo.FullName, // 用户名 {0} - trialInfo.ExperimentName, // 项目 {1} - string.Join(',', subjectcodes), // 受试者 {2} - string.Join(',', visitnames), // 访视 {3} - dictionValue[0], // 审核状态 {4} - - _systemEmailConfig.SiteUrl // 链接 {5} - ); + Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => + { + var subjectCode = subjectVisit.Subject.Code; + var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName); + var htmlBodyStr = string.Format( + CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), + userinfo.FullName, // 用户名 {0} + trialInfo.ExperimentName, // 项目 {1} + string.Join(',', subjectcodes), // 受试者 {2} + string.Join(',', visitnames), // 访视 {3} + dictionValue[0], // 审核状态 {4} - return (topicStr, htmlBodyStr); - }; + _systemEmailConfig.SiteUrl // 链接 {5} + ); - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, + return (topicStr, htmlBodyStr); + }; - context.Message.IsPd ? EmailBusinessScenario.PDVerification_PendingImageQC : EmailBusinessScenario.EligibilityVerification_PendingImageQC, - messageToSend, emailConfigFunc); + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(_trialEmailNoticeConfigrepository, scenario, messageToSend, emailConfigFunc); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + } } } diff --git a/IRaCIS.Core.Application/MassTransit/Recurring/IRRecurringConsumer.cs b/IRaCIS.Core.Application/MassTransit/Recurring/IRRecurringConsumer.cs index ce9f3ce6b..29c031307 100644 --- a/IRaCIS.Core.Application/MassTransit/Recurring/IRRecurringConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Recurring/IRRecurringConsumer.cs @@ -1,4 +1,5 @@ using DocumentFormat.OpenXml; +using DocumentFormat.OpenXml.Spreadsheet; using IRaCIS.Application.Contracts; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Helper; @@ -27,7 +28,7 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring IRepository _visitTaskRepository, IRepository _dictionaryRepository, IRepository _trialUserRoleRepository, - IRepository _emailNoticeConfigrepository, + IRepository _trialEmailNoticeConfigrepository, IOptionsMonitor systemEmailConfig) : IConsumer { private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; @@ -35,144 +36,149 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring public async Task Consume(ConsumeContext context) { var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; - var trialId = context.Message.TrialId; - var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + var scenario = EmailBusinessScenario.ExpeditedReading; + if (_trialEmailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).Any()) { - DictionaryRepository = _dictionaryRepository, - IsEn_US = isEn_US, - DictionaryList = new List() + + + var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + { + DictionaryRepository = _dictionaryRepository, + IsEn_US = isEn_US, + DictionaryList = new List() { new DictionaryDto (){DictionaryCode= "YesOrNo",EnumValue="true" } } - }); + }); - //找到该项目所有的IR 并且有加急 和Pd 未读的任务 + //找到该项目所有的IR 并且有加急 和Pd 未读的任务 - Expression> comonTaskFilter = t => t.TrialId == trialId && t.TaskState == TaskState.Effect && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskAllocationState == TaskAllocationState.Allocated; + Expression> comonTaskFilter = t => t.TrialId == trialId && t.TaskState == TaskState.Effect && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskAllocationState == TaskAllocationState.Allocated; - var trialUserList = _trialUserRoleRepository.Where(t => t.TrialId == trialId && t.TrialUser.JoinTime != null).Select(t => new - { - t.UserId, - t.UserRole.FullName, - t.UserRole.IdentityUser.EMail, - t.UserRole.IdentityUser.UserName, - t.Trial.TrialCode, - t.Trial.ResearchProgramNo - //TrialReadingCriterionList = t.Trial.TrialReadingCriterionList.Select(t => new { t.CriterionName, TrialReadingCriterionId = t.Id }).ToList() - }); - - - foreach (var trialUser in trialUserList) - { - - var userId = trialUser.UserId; - - var doctorCriterionList = await _trialReadingCriterionRepository.Where(t => t.IsSigned && t.IsConfirm && t.TrialId == trialId && t.Trial.TrialUserRoleList.Any(t => t.UserId == userId)) - .Select(c => new - { - - TrialReadingCriterionId = c.Id, - CriterionName = c.CriterionName, - - UnReadList = c.VisitTaskList.Where(t => t.ExpetidEmailNoticeTime == null) //没有被通知 - .Where(t => t.DoctorUserId == userId && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskState == TaskState.Effect) - // 前序 不存在 未一致性核查未通过的 - .Where(t => !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum)) - //前序 不存在 未生成任务的访视 - .Where(t => c.IsAutoCreate == false ? !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(d => d.TrialReadingCriterionId == t.TrialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum) : true) - - .Where(y => y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true)) - - .Where(t => t.SourceSubjectVisit.PDState == PDStateEnum.PDProgress || t.SourceSubjectVisit.IsEnrollmentConfirm || - t.ReadModule.SubjectVisit.PDState == PDStateEnum.PDProgress || t.ReadModule.SubjectVisit.IsEnrollmentConfirm) - .Select(c => new - { - SubejctCode = c.IsAnalysisCreate ? c.BlindSubjectCode : c.Subject.Code, - c.TaskBlindName, - c.TaskName, - VisitTaskId = c.Id - }).ToList() - - }).ToListAsync(); - - - var toTalUnreadCount = doctorCriterionList.SelectMany(t => t.UnReadList).Count(); - - if (toTalUnreadCount > 0) + var trialUserList = _trialUserRoleRepository.Where(t => t.TrialId == trialId && t.TrialUser.JoinTime != null).Select(t => new { - var messageToSend = new MimeMessage(); + t.UserId, + t.UserRole.FullName, + t.UserRole.IdentityUser.EMail, + t.UserRole.IdentityUser.UserName, + t.Trial.TrialCode, + t.Trial.ResearchProgramNo + //TrialReadingCriterionList = t.Trial.TrialReadingCriterionList.Select(t => new { t.CriterionName, TrialReadingCriterionId = t.Id }).ToList() + }); - //发件地址 - messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - messageToSend.To.Add(new MailboxAddress(trialUser.FullName, trialUser.EMail)); - var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; + foreach (var trialUser in trialUserList) + { - Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => + var userId = trialUser.UserId; + + var doctorCriterionList = await _trialReadingCriterionRepository.Where(t => t.IsSigned && t.IsConfirm && t.TrialId == trialId && t.Trial.TrialUserRoleList.Any(t => t.UserId == userId)) + .Select(c => new + { + + TrialReadingCriterionId = c.Id, + CriterionName = c.CriterionName, + + UnReadList = c.VisitTaskList.Where(t => t.ExpetidEmailNoticeTime == null) //没有被通知 + .Where(t => t.DoctorUserId == userId && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskState == TaskState.Effect) + // 前序 不存在 未一致性核查未通过的 + .Where(t => !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum)) + //前序 不存在 未生成任务的访视 + .Where(t => c.IsAutoCreate == false ? !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(d => d.TrialReadingCriterionId == t.TrialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum) : true) + + .Where(y => y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true)) + + .Where(t => t.SourceSubjectVisit.PDState == PDStateEnum.PDProgress || t.SourceSubjectVisit.IsEnrollmentConfirm || + t.ReadModule.SubjectVisit.PDState == PDStateEnum.PDProgress || t.ReadModule.SubjectVisit.IsEnrollmentConfirm) + .Select(c => new + { + SubejctCode = c.IsAnalysisCreate ? c.BlindSubjectCode : c.Subject.Code, + c.TaskBlindName, + c.TaskName, + VisitTaskId = c.Id + }).ToList() + + }).ToListAsync(); + + + var toTalUnreadCount = doctorCriterionList.SelectMany(t => t.UnReadList).Count(); + + if (toTalUnreadCount > 0) { - var topicStr = string.Format(input.topicStr, trialUser.ResearchProgramNo); + var messageToSend = new MimeMessage(); - var template = input.htmlBodyStr; + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); + messageToSend.To.Add(new MailboxAddress(trialUser.FullName, trialUser.EMail)); - //正则提取循环的部分 {%for%}(.*?){%end for%} - string pattern = @"{%for%}(.*?){%end for%}"; - var match = Regex.Match(template, pattern, RegexOptions.Singleline); + var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; - string criteriaTemplate = match.Groups[1].Value; // 提取循环模板 - - // 构建循环内容 - string criteriaDetails = ""; - foreach (var criteria in doctorCriterionList) + Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => { - if (criteria.UnReadList.Count() > 0) + var topicStr = string.Format(input.topicStr, trialUser.ResearchProgramNo); + + var template = input.htmlBodyStr; + + //正则提取循环的部分 {%for%}(.*?){%end for%} + string pattern = @"{%for%}(.*?){%end for%}"; + var match = Regex.Match(template, pattern, RegexOptions.Singleline); + + string criteriaTemplate = match.Groups[1].Value; // 提取循环模板 + + // 构建循环内容 + string criteriaDetails = ""; + foreach (var criteria in doctorCriterionList) { - criteriaDetails += string.Format(criteriaTemplate, criteria.CriterionName, criteria.UnReadList.Select(t => t.SubejctCode).Distinct().Count(), criteria.UnReadList.Count()); + if (criteria.UnReadList.Count() > 0) + { + criteriaDetails += string.Format(criteriaTemplate, criteria.CriterionName, criteria.UnReadList.Select(t => t.SubejctCode).Distinct().Count(), criteria.UnReadList.Count()); + } } - } - // 用循环内容替换原始模板中的循环部分 - string emailContent = template.Replace(criteriaTemplate, criteriaDetails).Replace("{%for%}", "").Replace("{%end for%}", ""); + // 用循环内容替换原始模板中的循环部分 + string emailContent = template.Replace(criteriaTemplate, criteriaDetails).Replace("{%for%}", "").Replace("{%end for%}", ""); - var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, emailContent), - trialUser.FullName, + var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, emailContent), + trialUser.FullName, - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), - toTalUnreadCount, + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + toTalUnreadCount, - trialUser.ResearchProgramNo, - dictionValue[0], - _systemEmailConfig.SiteUrl - ); + trialUser.ResearchProgramNo, + dictionValue[0], + _systemEmailConfig.SiteUrl + ); - return (topicStr, htmlBodyStr); - }; + return (topicStr, htmlBodyStr); + }; - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.ExpeditedReading, messageToSend, emailConfigFunc); + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(_trialEmailNoticeConfigrepository, scenario, messageToSend, emailConfigFunc); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); - //处理标记已通知的任务 + //处理标记已通知的任务 + + var visitTaskIdList = doctorCriterionList.Where(t => t.UnReadList.Count() > 0).SelectMany(t => t.UnReadList.Select(u => u.VisitTaskId)).ToList(); + + await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => visitTaskIdList.Contains(t.Id), u => new VisitTask() { ExpetidEmailNoticeTime = DateTime.Now }); + } - var visitTaskIdList = doctorCriterionList.Where(t => t.UnReadList.Count() > 0).SelectMany(t => t.UnReadList.Select(u => u.VisitTaskId)).ToList(); - await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => visitTaskIdList.Contains(t.Id), u => new VisitTask() { ExpetidEmailNoticeTime = DateTime.Now }); } + } - - - } } }