using IRaCIS.Core.Application.Helper; using IRaCIS.Core.Application.MassTransit.Command; using IRaCIS.Core.Domain; using IRaCIS.Core.Domain.BaseModel; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; using MassTransit; using Microsoft.Extensions.Options; using MimeKit; using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IRaCIS.Core.Application.MassTransit.Consumer; /// /// 加急的医学反馈任务 通知MIM /// public class UrgentMedicalReviewAddedEventConsumer( IRepository _userRepository, IRepository _taskMedicalReviewRepository, IRepository _trialRepository, IRepository _readingQuestionCriterionTrialRepository, IRepository _trialSiteSurveyRepository, IRepository _emailNoticeConfigrepository, IOptionsMonitor systemEmailConfig ) : IConsumer { private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; /// /// 加急的医学反馈任务 通知MIM /// /// /// /// public async Task Consume(ConsumeContext context) { var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; var medicalReviewId = context.Message.MedicalReviewId; 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 _userRepository.Where(x => x.Id == medicalReview.MedicalManagerUserId).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; 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, // 用户名 trialInfo.ExperimentName , // 项目 criterion.CriterionName, // 阅片标准 // 受试者 // 访视 // 任务类型 // 阅片人是否同意 // 审核状态 // 是否加急 ); return (topicStr, htmlBodyStr); }; await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.SiteSurveyReject, messageToSend, emailConfigFunc); await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); } } //IR 回复医学反馈通知MIM public class UrgentIRRepliedMedicalReviewConsumer : IConsumer { public Task Consume(ConsumeContext context) { throw new NotImplementedException(); } } /// /// MIM 回复医学返回通知IR /// public class UrgentMIMRepliedMedicalReviewConsumer : IConsumer { public Task Consume(ConsumeContext context) { throw new NotImplementedException(); } } /// /// 加急阅片 IR 申请重阅 或者PM 申请重阅 /// public class UrgentIRApplyedReReadingConsumer : IConsumer { public Task Consume(ConsumeContext context) { throw new NotImplementedException(); } }