diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/ReadingRelationEmailConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/ReadingRelationEmailConsumer.cs index f6ff6c5f8..43fbe4760 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/ReadingRelationEmailConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/ReadingRelationEmailConsumer.cs @@ -341,11 +341,103 @@ public class UrgentMIMRepliedMedicalReviewConsumer( /// /// 加急阅片 IR 申请重阅 或者PM 申请重阅 /// -public class UrgentIRApplyedReReadingConsumer : IConsumer +public class UrgentIRApplyedReReadingConsumer( + IRepository _userRepository, + IRepository _trialUseRepository, + IRepository _taskMedicalReviewRepository, + IRepository _trialRepository, + IRepository _subjectVisitRepository, + IRepository _readingQuestionCriterionTrialRepository, + IRepository _visitTaskRepository, + IRepository _dictionaryRepository, + IRepository _emailNoticeConfigrepository, + IOptionsMonitor systemEmailConfig) : IConsumer { - public Task Consume(ConsumeContext context) + + private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; + public async Task Consume(ConsumeContext context) { - throw new NotImplementedException(); + Console.WriteLine("发送(024,25) 【加急医学反馈】邮件!!!"); + var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; + + 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 doctorInfo = await _userRepository.Where(x => x.Id == taskInfo.DoctorUserId).FirstOrDefaultAsync(); + + var trialUser = await _trialUseRepository.Where(x => x.TrialId == taskInfo.TrialId).Include(x => x.User).Select(x=>x.User).ToListAsync(); + + 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(); + } + + 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 topicStr = string.Format(input.topicStr, companyName, trialInfo.ResearchProgramNo); + var htmlBodyStr = string.Format( + CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), + userinfo.FullName, // 用户名 {0} + trialInfo.ExperimentName, // 项目 {1} + taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode, // 受试者 {2} + taskInfo.TaskBlindName, // 访视 {3} + dictionValue[0], // 任务类型 {4} + doctorInfo.FullName, // 阅片人 {5} + criterion.CriterionName, // 阅片标准 {6} + dictionValue[1], // 审批结果 {7} + _systemEmailConfig.SiteUrl // 链接 {8} + + + + + ); + + return (topicStr, htmlBodyStr); + }; + + await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, + + context.Message.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed? EmailBusinessScenario.ReReadFromPMApproval: EmailBusinessScenario.ReReadFromIRApproval, + + messageToSend, emailConfigFunc); + + await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + } + + } }