diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/ImageConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/ImageConsumer.cs index 60cf684f5..c3f98ed1a 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/ImageConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/ImageConsumer.cs @@ -266,57 +266,43 @@ public class ImageConsumer( // 获取项目信息 var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == inDto.TrialId); - // 根据不同场景获取不同角色的用户 - var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == inDto.TrialId && !x.TrialUser.IsDeleted).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); + List filterUserTypeList = new List() + { + UserTypeEnum.ClinicalResearchCoordinator, + UserTypeEnum.CRA, + }; + + // 根据不同场景获取不同角色的用户 先排除CRC和CRA + var trialUserList = await _trialUseRoleRepository.Where(x => x.TrialId == inDto.TrialId && !x.TrialUser.IsDeleted && !filterUserTypeList.Contains(x.UserRole.UserTypeEnum) ).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); + + // CRC和CRA单独取 + var crcAndcraUserList = await _trialSiteRepository.Where(x => x.Id == inDto.SubjectVisit.TrialSiteId).SelectMany(x => x.CRCUserList.Select(y => y.UserRole)).ToListAsync(); + trialUserList.AddRange(crcAndcraUserList); // 根据场景确定收件人 List toUserList = new List(); List ccUserList = new List(); var emailNoticeUserList = await _emailNoticeUserTypeRepository.Where(x => x.EmailNoticeConfigId == inDto.EmailNoticeConfig.Id).ToListAsync(); - var userTypeEnum = emailNoticeUserList.Select(x => x.UserType).ToList(); + var userTypeEnumList = emailNoticeUserList.Select(x => x.UserType).ToList(); if (inDto.UserTypes != null) { - userTypeEnum = inDto.UserTypes; - } - var crcUserList = new List() { }; - if (userTypeEnum.Contains(UserTypeEnum.ClinicalResearchCoordinator)) - { - crcUserList = await _trialSiteRepository.Where(x => x.Id == inDto.SubjectVisit.TrialSiteId).SelectMany(x => x.CRCUserList.Select(y => y.UserRole)).ToListAsync(); + userTypeEnumList = inDto.UserTypes; } if (inDto.UserTypes == null) { - var toList = emailNoticeUserList.Where(x => x.EmailUserType == EmailUserType.To && x.UserType != UserTypeEnum.ClinicalResearchCoordinator).Select(x => x.UserType).ToList(); - - toUserList = trialUser.Where(x => toList.Contains(x.UserTypeEnum)).ToList(); - - if (emailNoticeUserList.Any(x => x.EmailUserType == EmailUserType.To && x.UserType == UserTypeEnum.ClinicalResearchCoordinator)) - { - toUserList.AddRange(crcUserList); - } + var toList = emailNoticeUserList.Where(x => x.EmailUserType == EmailUserType.To).Select(x => x.UserType).ToList(); + toUserList = trialUserList.Where(x => toList.Contains(x.UserTypeEnum)).ToList(); } else { - var toList = inDto.UserTypes.Where(x => x != UserTypeEnum.ClinicalResearchCoordinator).ToList(); - - toUserList = trialUser.Where(x => toList.Contains(x.UserTypeEnum)).ToList(); - - if (inDto.UserTypes.Any(x => x == UserTypeEnum.ClinicalResearchCoordinator)) - { - toUserList.AddRange(crcUserList); - } + var toList = inDto.UserTypes; + toUserList = trialUserList.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(); - - if (emailNoticeUserList.Any(x => x.EmailUserType == EmailUserType.Copy && x.UserType == UserTypeEnum.ClinicalResearchCoordinator)) - { - ccUserList.AddRange(crcUserList); - } + var ccList = emailNoticeUserList.Where(x => x.EmailUserType == EmailUserType.Copy).Select(x => x.UserType).ToList(); + ccUserList = trialUserList.Where(x => ccList.Contains(x.UserTypeEnum)).ToList(); // 如果没有收件人,则不发送邮件 if (toUserList.Count == 0)