diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 1234e3753..a2ef8eae1 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -937,6 +937,13 @@ + + + 邮件事件消息列表 + + + + 重新发布失败的事件消息 @@ -12734,6 +12741,22 @@ + + + meditor send 的时候,请求流会先到消费者,返回后才会执行后续代码 + publish 请求流不会先到消费者,发布后,直接执行后续代码 + + + + + + + meditor send 的时候,请求流会先到消费者,返回后才会执行后续代码 + publish 请求流不会先到消费者,发布后,直接执行后续代码 + + + + 加急的医学反馈任务 通知MIM diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs index 8829d3620..0719184d8 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs @@ -13,6 +13,7 @@ using MassTransit; using Microsoft.AspNetCore.Components.Routing; using Microsoft.Extensions.Options; using MimeKit; +using NPOI.SS.Formula.Functions; using System; using System.Collections.Generic; using System.Globalization; @@ -45,56 +46,62 @@ public class UserSiteSurveySubmitedEventConsumer( var trialId = siteSurveyInfo.TrialId; - var hasSPMOrCPM = await _trialSiteSurveyRepository.AnyAsync(t => t.TrialId == siteSurveyInfo.TrialId && t.Trial.TrialUserList.Any(u => u.User.UserTypeEnum == UserTypeEnum.SPM || u.User.UserTypeEnum == UserTypeEnum.CPM)); + var trialUserList = await _trialSiteSurveyRepository.Where(t => t.TrialId == siteSurveyInfo.TrialId ).SelectMany(t=>t.Trial.TrialUserList) + .Where(t=> t.User.UserTypeEnum == UserTypeEnum.SPM || t.User.UserTypeEnum == UserTypeEnum.CPM || t.User.UserTypeEnum == UserTypeEnum.ProjectManager) + .Select(t=>new {t.User.FullName,t.User.EMail,t.User.UserTypeEnum}).ToListAsync(); + var sPMOrCPMList = trialUserList.Where(t => t.UserTypeEnum == UserTypeEnum.SPM || t.UserTypeEnum == UserTypeEnum.CPM).ToList(); + var pmList = trialUserList.Where(t => t.UserTypeEnum == UserTypeEnum.ProjectManager || t.UserTypeEnum == UserTypeEnum.APM).ToList(); var messageToSend = new MimeMessage(); + var toUserName = string.Empty; - var userName = siteSurveyInfo.UserName; - var email = siteSurveyInfo.Email; - var phone = siteSurveyInfo.Phone; - - if (hasSPMOrCPM) + //有SPM + if (sPMOrCPMList.Count>0) { - var user = await _userRepository.FirstOrDefaultAsync(t => t.Id == siteSurveyInfo.PreliminaryUserId); + foreach (var user in sPMOrCPMList) + { + messageToSend.To.Add(new MailboxAddress(user.FullName, user.EMail)); + } - userName = user.FullName; - email = user.EMail; - phone = user.Phone; + toUserName = string.Join('、', sPMOrCPMList.Select(t => t.FullName)); - messageToSend.To.Add(new MailboxAddress(String.Empty, user.EMail)); } else { - messageToSend.To.Add(new MailboxAddress(String.Empty, siteSurveyInfo.Email)); + foreach (var user in pmList) + { + messageToSend.To.Add(new MailboxAddress(user.FullName, user.EMail)); + } + + toUserName = string.Join('、', pmList.Select(t => t.FullName)); } var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId); var siteInfo = await _trialSiteRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.Id == siteSurveyInfo.TrialSiteId, true); - 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 topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo); var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), - + toUserName, siteInfo.TrialSiteCode, siteInfo.TrialSiteAliasName, - userName, - email, - phone, + + siteSurveyInfo.UserName, + siteSurveyInfo.Email, + siteSurveyInfo.Phone, _systemEmailConfig.SiteUrl ); return (topicStr, htmlBodyStr); }; - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.SiteSurveyReject, messageToSend, emailConfigFunc); + await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.Approval_SubmitSiteSurvey, messageToSend, emailConfigFunc); await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); diff --git a/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs b/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs index fca247f42..64594296b 100644 --- a/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs +++ b/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs @@ -96,6 +96,146 @@ namespace IRaCIS.Core.Domain.Share TrialSubjectVisitFeedBack = 28, + /// + /// 入组确认-质控任务待领取 + /// + EligibilityVerification_PendingClaim = 29, + + /// + /// 入组确认-质控任务待审核 + /// + EligibilityVerification_PendingImageQC = 30, + + /// + /// PD确认-质控任务待领取 + /// + PDVerification_PendingImageQCClaim = 31, + + /// + /// PD确认-质控任务待审核 + /// + PDVerification_PendingImageQC = 32, + + /// + /// 入组确认-QC质疑待处理 + /// + EligibilityVerification_Pending = 33, + + /// + /// 审批(提交调研表) + /// + Approval_SubmitSiteSurvey = 34, + + /// + /// 审批(更新调研表) + /// + Approval_UpdateSiteSurvey = 35, + + /// + /// 中心调研审批 + /// + SiteSurveyApproval = 36, + + /// + /// 入组确认-QC质疑待处理 + /// + EligibilityVerification_UnderQCQuery = 37, + + /// + /// PD确认-QC质疑待处理 + /// + PDVerification_UnderQCQuery = 38, + + /// + /// 入组确认-影像质疑待处理 + /// + EligibilityVerification_ImageQuery = 39, + + /// + /// PD确认-影像质疑待处理 + /// + PDVerification_ImageQuery = 40, + + /// + /// 入组确认-核查质疑待处理 + /// + EligibilityVerification_UnderDR = 41, + + /// + /// PD确认-核查质疑待处理 + /// + PDVerification_UnderDR = 42, + + /// + /// 加急阅片 + /// + ExpeditedReading = 43, + + /// + /// 加急医学反馈 + /// + ExpeditedMedicalQCToIR = 44, + + /// + /// 入组确认-医学审核 + /// + EligibilityVerification_MedicalQC = 45, + + /// + /// PD确认-医学审核 + /// + PDVerification_MedicalQC = 46, + + /// + /// 入组确认-医学反馈 + /// + EligibilityVerification_MedicalQCFeedback = 47, + + /// + /// PD确认-医学反馈 + /// + PDVerification_MedicalQCFeedback = 48, + + /// + /// 入组确认-一致性核查 + /// + EligibilityVerification_DR = 49, + + /// + /// PD确认-一致性核查 + /// + PDVerification_DR = 50, + + /// + /// 入组确认-核查质疑 + /// + EligibilityVerification_UnderDRForPMOrAPM = 51, + + /// + /// PD确认-核查质疑 + /// + PDVerification_UnderDRForPMOrAPM = 52, + + /// + /// 阅片人重阅审批 + /// + ReReadFromIRApproval = 53, + + /// + /// 项目组申请重阅审批 + /// + ReReadFromPMApproval = 54, + + /// + /// 入组确认-加急医学反馈回复 + /// + EligibilityVerification_ExpeditedMedicalQCResponse = 55, + + /// + /// PD确认-加急医学反馈回复 + /// + PDVerification_ExpeditedMedicalQCResponse = 56 + } diff --git a/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainExt.cs b/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainExt.cs index 3a3ce07b2..080570706 100644 --- a/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainExt.cs +++ b/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainExt.cs @@ -48,6 +48,7 @@ public static class DBContext_Ext { trialSiteSurvey.AddDomainEvent(new SiteSurverRejectedEvent() { TrialSiteSurveyId = trialSiteSurvey.Id, IsHaveSPMOrCPM = trialSiteSurvey.State == TrialSiteSurveyEnum.CRCSubmitted }); } + //SPM 驳回 else if (trialSiteSurvey.State == TrialSiteSurveyEnum.ToSubmit && originState == TrialSiteSurveyEnum.CRCSubmitted) { trialSiteSurvey.AddDomainEvent(new SiteSurverRejectedEvent() { TrialSiteSurveyId = trialSiteSurvey.Id, IsHaveSPMOrCPM = true });