diff --git a/IRaCIS.Core.Application/MassTransit/Recurring/IRRecurringConsumer.cs b/IRaCIS.Core.Application/MassTransit/Recurring/IRRecurringConsumer.cs index 882c04b39..85b3ea740 100644 --- a/IRaCIS.Core.Application/MassTransit/Recurring/IRRecurringConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Recurring/IRRecurringConsumer.cs @@ -2,6 +2,7 @@ using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Helper; using IRaCIS.Core.Application.MassTransit.Consumer; +using IRaCIS.Core.Application.Service.Reading.Dto; using MassTransit; using Microsoft.Extensions.Options; using MimeKit; @@ -9,7 +10,9 @@ using System; using System.Collections.Generic; using System.Globalization; using System.Linq; +using System.Reactive.Joins; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; namespace IRaCIS.Core.Application.MassTransit.Recurring @@ -20,7 +23,8 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring /// public class UrgentIRUnReadTaskRecurringEventConsumer( IRepository _trialReadingCriterionRepository, - IRepository _visitTaskRepository, + IRepository _visitTaskRepository, + IRepository _dictionaryRepository, IRepository _trialUserRepository, IRepository _emailNoticeConfigrepository, IOptionsMonitor systemEmailConfig) : IConsumer @@ -33,6 +37,14 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring var trialId = context.Message.TrialId; + var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + { + DictionaryRepository = _dictionaryRepository, + IsEn_US = isEn_US, + DictionaryList = new List() + {new DictionaryDto (){DictionaryCode= "YesOrNo",EnumValue="1", }, //是否加急} + }); + //找到该项目所有的IR 并且有加急 和Pd 未读的任务 Expression> comonTaskFilter = t => t.TrialId == trialId && t.TaskState == TaskState.Effect && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskAllocationState == TaskAllocationState.Allocated; @@ -41,10 +53,11 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring { t.UserId, t.User.FullName, + t.User.EMail, t.User.UserName, t.Trial.TrialCode, - t.Trial.ResearchProgramNo, - TrialReadingCriterionList = t.Trial.TrialReadingCriterionList.Select(t => new { t.CriterionName, TrialReadingCriterionId = t.Id }).ToList() + t.Trial.ResearchProgramNo + //TrialReadingCriterionList = t.Trial.TrialReadingCriterionList.Select(t => new { t.CriterionName, TrialReadingCriterionId = t.Id }).ToList() }); @@ -58,6 +71,7 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring { TrialReadingCriterionId = c.Id, + CriterionName=c.CriterionName, UnReadList = c.VisitTaskList .Where(t => t.DoctorUserId == userId && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskState == TaskState.Effect) @@ -85,11 +99,35 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring var messageToSend = new MimeMessage(); + //发件地址 + 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; Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => { 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()); + } + + // 用循环内容替换原始模板中的循环部分 + string emailContent = Regex.Replace(template, pattern, criteriaDetails); + + var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), trialUser.FullName, @@ -97,15 +135,14 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring toTalUnreadCount, trialUser.ResearchProgramNo, - trialUser.TrialReadingCriterionList, - //siteSurveyInfo.Phone, + dictionValue[0], _systemEmailConfig.SiteUrl ); return (topicStr, htmlBodyStr); }; - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.Approval_SubmitSiteSurvey, messageToSend, emailConfigFunc); + await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.ExpeditedReading, messageToSend, emailConfigFunc); await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); diff --git a/IRaCIS.Core.Application/Service/Common/EventStoreRecordService.cs b/IRaCIS.Core.Application/Service/Common/EventStoreRecordService.cs index c5e7c2949..551a6f948 100644 --- a/IRaCIS.Core.Application/Service/Common/EventStoreRecordService.cs +++ b/IRaCIS.Core.Application/Service/Common/EventStoreRecordService.cs @@ -34,7 +34,7 @@ public class EventStoreRecordService(IRepository _eventStoreRe var eventStoreRecordQueryable = _eventStoreRecordRepository.WhereIf(inQuery.EventTypeName.IsNotNullOrEmpty(),t=>t.EventTypeName.Contains(inQuery.EventTypeName)) .ProjectTo(_mapper.ConfigurationProvider); - var pageList = await eventStoreRecordQueryable.ToPagedListAsync(inQuery); + var pageList = await eventStoreRecordQueryable.ToPagedListAsync(inQuery,nameof(EventStoreRecordView.CreateTime)); return pageList; }