diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/CommonEmailHelper.cs b/IRaCIS.Core.Application/MassTransit/Consumer/CommonEmailHelper.cs index 1c96a3b31..449fea5a4 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/CommonEmailHelper.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/CommonEmailHelper.cs @@ -1,4 +1,5 @@ -using DocumentFormat.OpenXml; +using Amazon.Runtime.Internal.Util; +using DocumentFormat.OpenXml; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; using MimeKit; @@ -65,11 +66,36 @@ public static class CommonEmailHelper /// /// /// - public static string TranslationDictionary(TranslationDictionaryDto inDto) + public static async Task> TranslationDictionary(TranslationDictionaryDto inDto) { - var dic = inDto.DictionaryRepository.Where(x => x.Parent.Code == inDto.DictionaryCode && x.Code == inDto.EnumValue).FirstOrDefault(); - return dic == null ? string.Empty : (inDto.IsEn_US ? dic.Value : dic.ValueCN); + var dictionaryCodelist = inDto.DictionaryList.Select(x => x.DictionaryCode).ToList(); + + var enumValueList = inDto.DictionaryList.Select(x => x.EnumValue).ToList(); + + + var dicList =await inDto.DictionaryRepository.Where(x => dictionaryCodelist.Contains(x.Parent.Code) && enumValueList.Contains(x.Code)).Select(x=>new DictionaryData() { + + DictionaryCode=x.Parent.Code, + EnumValue=x.Code, + Value=x.Value, + ValueCN=x.ValueCN + }).ToListAsync(); + + + List result = new List(); + + inDto.DictionaryList.ForEach(x => + { + + var dic = dicList.Where(y => y.EnumValue == x.EnumValue && y.DictionaryCode == x.DictionaryCode).FirstOrDefault(); + result.Add(dic == null ? string.Empty : (inDto.IsEn_US ? dic.Value : dic.ValueCN)); + }); + + return result; + + + } } @@ -84,6 +110,39 @@ public class TranslationDictionaryDto /// public IRepository DictionaryRepository { get; set; } + /// + /// 是否是英文 + /// + public bool IsEn_US { get; set; } + + /// + /// 字典 + /// + public List DictionaryList { get; set; } = new List(); + + + +} + +/// +/// 字典对象 +/// +public class DictionaryDto +{ + /// + /// 字典Code + /// + public string DictionaryCode { get; set; } + + /// + /// 枚举值 + /// + public string EnumValue { get; set; } +} + + +public class DictionaryData +{ /// /// 字典Code /// @@ -95,8 +154,13 @@ public class TranslationDictionaryDto public string EnumValue { get; set; } /// - /// 是否是英文 + /// 值 /// - public bool IsEn_US { get; set; } + public string Value { get; set; } + + /// + /// 返回 + /// + public string ValueCN { get; set; } } diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/ReadingRelationEmailConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/ReadingRelationEmailConsumer.cs index 4dab467c4..57eb6a0ba 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/ReadingRelationEmailConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/ReadingRelationEmailConsumer.cs @@ -4,6 +4,7 @@ using IRaCIS.Core.Domain; using IRaCIS.Core.Domain.BaseModel; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; +using IRaCIS.Core.Infra.EFCore.Common; using MassTransit; using Microsoft.Extensions.Options; using MimeKit; @@ -24,7 +25,8 @@ public class UrgentMedicalReviewAddedEventConsumer( IRepository _taskMedicalReviewRepository, IRepository _trialRepository, IRepository _readingQuestionCriterionTrialRepository, - IRepository _trialSiteSurveyRepository, + IRepository _visitTaskRepository, + IRepository _dictionaryRepository, IRepository _emailNoticeConfigrepository, IOptionsMonitor systemEmailConfig ) : IConsumer @@ -39,6 +41,7 @@ public class UrgentMedicalReviewAddedEventConsumer( /// public async Task Consume(ConsumeContext context) { + Console.WriteLine("发送【加急的医学反馈任务 通知MIM】邮件!!!"); var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; var medicalReviewId = context.Message.MedicalReviewId; @@ -55,6 +58,7 @@ public class UrgentMedicalReviewAddedEventConsumer( var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == medicalReview.VisitTask.TrialReadingCriterionId); var userinfo = await _userRepository.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 messageToSend = new MimeMessage(); @@ -62,29 +66,44 @@ public class UrgentMedicalReviewAddedEventConsumer( 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 dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() { - var topicStr = string.Format(input.topicStr, companyName, trialInfo.ResearchProgramNo); - var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), - userinfo.FullName, // 用户名 - trialInfo.ExperimentName , // 项目 - criterion.CriterionName // 阅片标准 - // 受试者 - // 访视 - // 任务类型 - // 阅片人是否同意 - // 审核状态 - // 是否加急 - ); + DictionaryRepository = _dictionaryRepository, + IsEn_US = isEn_US, - return (topicStr, htmlBodyStr); - }; + + 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(), } + } + }) ; + + 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, // 阅片标准 + taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode, // 受试者 + taskInfo.TaskBlindName, // 访视 + dictionValue[0], // 任务类型 + dictionValue[1], // 阅片人是否同意 + dictionValue[2], // 审核状态 + dictionValue[3] // 是否加急 + ); + + return (topicStr, htmlBodyStr); + }; await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.SiteSurveyReject, messageToSend, emailConfigFunc);