diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/ImageConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/ImageConsumer.cs index ee8171175..f66cd2f73 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/ImageConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/ImageConsumer.cs @@ -37,9 +37,11 @@ public class ImageConsumer( IRepository _trialUseRoleRepository, IRepository _subjectVisitRepository, IRepository _trialRepository, - IRepository _enrollRepository, - IRepository _visitTaskRepository, - IRepository _readModuleRepository, + IRepository _enrollRepository, + IRepository _visitTaskRepository, + IRepository _readModuleRepository, + IRepository _emailNoticeUserTypeRepository, + IRepository _trialSiteRepository, IRepository _dictionaryRepository, IRepository _emailNoticeConfigrepository, IOptionsMonitor systemEmailConfig) : @@ -214,7 +216,7 @@ public class ImageConsumer( /// /// 发送影像重传相关邮件的通用方法 /// - private async Task SendImageReuploadEmail(EmailNoticeConfig trialEmailConfig, EmailBusinessScenario scenario, SubjectVisit subjectVisit, Guid trialId) + private async Task SendImageReuploadEmail(EmailNoticeConfig emailNoticeConfig, EmailBusinessScenario scenario, SubjectVisit subjectVisit, Guid trialId) { var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; @@ -228,52 +230,30 @@ public class ImageConsumer( List toUserList = new List(); List ccUserList = new List(); - switch (scenario) + var emailNoticeUserList = await _emailNoticeUserTypeRepository.Where(x => x.EmailNoticeConfigId == emailNoticeConfig.Id).ToListAsync(); + + var crcUserList =new List(){ }; + if (emailNoticeUserList.Select(x => x.UserType).Contains(UserTypeEnum.ClinicalResearchCoordinator)) { - case EmailBusinessScenario.ImageQC_IQCApplyRe_Uploading: // 64 - IQC申请重传 - Code: 42 - // PM收件 - toUserList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList(); - break; + crcUserList=await _trialSiteRepository.Where(x=>x.Id== subjectVisit.TrialSiteId).SelectMany(x=>x.CRCUserList.Select(y => y.UserRole)).ToListAsync(); + } - case EmailBusinessScenario.ImageUploadCRCApplyRe_Uploading: // 65 - CRC申请重传 - Code: 43 - // PM、APM收件 - toUserList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList(); - break; + var toList = emailNoticeUserList.Where(x => x.EmailUserType == EmailUserType.To&& x.UserType != UserTypeEnum.ClinicalResearchCoordinator).Select(x=>x.UserType).ToList(); - case EmailBusinessScenario.ImageReUpload_PMApprovalRe_Uploading: // 66 - PM审批重传 - Code: 44 - // CRC、IQC收件 - toUserList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator || x.UserTypeEnum == UserTypeEnum.IQC).ToList(); - break; + toUserList = trialUser.Where(x => toList.Contains(x.UserTypeEnum) ).ToList(); - case EmailBusinessScenario.DataReconciliation_PMApprovalRe_Uploading: // 63 - 一致性核查PM审批重传 - Code: 41 - // CRC收件 - toUserList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).ToList(); - break; + if (emailNoticeUserList.Any(x => x.EmailUserType == EmailUserType.To && x.UserType == UserTypeEnum.ClinicalResearchCoordinator)) + { + toUserList.AddRange(crcUserList); + } - case EmailBusinessScenario.ImageQuery_IQCApprovalRe_Uploading: // 61 - 影像质疑IQC审批重传 - Code: 39 - // CRC收件 - toUserList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).ToList(); - break; + var ccList = emailNoticeUserList.Where(x => x.EmailUserType == EmailUserType.Copy && x.UserType != UserTypeEnum.ClinicalResearchCoordinator).Select(x => x.UserType).ToList(); - case EmailBusinessScenario.DataReconciliation_CRCApplyRe_Uploading: // 62 - 一致性核查CRC申请重传 - Code: 40 - // PM、APM收件 - toUserList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList(); - break; + ccUserList = trialUser.Where(x => ccList.Contains(x.UserTypeEnum)).ToList(); - case EmailBusinessScenario.ImageQueryCRCApplyRe_Uploading: // 60 - 影像质疑CRC申请重传 - Code: 38 - // IQC收件 - toUserList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.IQC).ToList(); - break; - - case EmailBusinessScenario.ReadTracking_PMApplyRe_Reading: // 67 - PM申请重阅 - Code: 45 - // CPM、SPM收件 - toUserList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.SPM || x.UserTypeEnum == UserTypeEnum.CPM).ToList(); - break; - - case EmailBusinessScenario.Re_ReadApproval_SPMCPMApprovalRe_Reading: // 68 - SPM/CPM审批重阅 - Code: 46 - // CRC收件 - toUserList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).ToList(); - break; + if (emailNoticeUserList.Any(x => x.EmailUserType == EmailUserType.Copy && x.UserType == UserTypeEnum.ClinicalResearchCoordinator)) + { + ccUserList.AddRange(crcUserList); } // 如果没有收件人,则不发送邮件 @@ -410,7 +390,7 @@ public class ImageConsumer( /// /// 发送阅片人筛选相关邮件的通用方法 /// - private async Task SendReviewerSelectionEmail(EmailNoticeConfig trialEmailConfig, EmailBusinessScenario scenario, Guid trialId, List enrollIdList) + private async Task SendReviewerSelectionEmail(EmailNoticeConfig emailNoticeConfig, EmailBusinessScenario scenario, Guid trialId, List enrollIdList) { var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; @@ -424,18 +404,16 @@ public class ImageConsumer( List toUserList = new List(); List ccUserList = new List(); - switch (scenario) - { - case EmailBusinessScenario.ReviewerSelection_PMApplyApproving: // 69 - PM申请审批 - Code: 47 - // CPM、SPM收件 - toUserList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.SPM || x.UserTypeEnum == UserTypeEnum.CPM).ToList(); - break; + var emailNoticeUserList = await _emailNoticeUserTypeRepository.Where(x => x.EmailNoticeConfigId == emailNoticeConfig.Id).ToListAsync(); + + var toList = emailNoticeUserList.Where(x => x.EmailUserType == EmailUserType.To).Select(x => x.UserType).ToList(); + + toUserList = trialUser.Where(x => toList.Contains(x.UserTypeEnum)).ToList(); + + var ccList = emailNoticeUserList.Where(x => x.EmailUserType == EmailUserType.Copy && x.UserType != UserTypeEnum.ClinicalResearchCoordinator).Select(x => x.UserType).ToList(); + + ccUserList = trialUser.Where(x => ccList.Contains(x.UserTypeEnum)).ToList(); - case EmailBusinessScenario.ReviewerSelection_SPMCPMApproval: // 70 - SPM审批 - Code: 48 - // APM、PM收件 - toUserList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.ProjectManager || x.UserTypeEnum == UserTypeEnum.APM).ToList(); - break; - } // 如果没有收件人,则不发送邮件 if (toUserList.Count == 0)