diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 65d6fc397..7e0bc173d 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -9438,7 +9438,7 @@ 融合的CTSeriesId - + 标记id @@ -17129,6 +17129,19 @@ + + + 核对中心人员发送邮件 + + + + + + 更新中心人员发送邮件 + + + + 获取该中心最新调表信息 如果没有任何调研表,会返回null diff --git a/IRaCIS.Core.Application/Service/Common/MailService.cs b/IRaCIS.Core.Application/Service/Common/MailService.cs index c46e785ff..591fa45e0 100644 --- a/IRaCIS.Core.Application/Service/Common/MailService.cs +++ b/IRaCIS.Core.Application/Service/Common/MailService.cs @@ -73,6 +73,10 @@ namespace IRaCIS.Core.Application.Service Task UserFeedBackMail(Guid feedBackId); Task AfterUserModifyPasswordSendEmailAsync(Guid userId); + + Task SiteSuervyCheckUser(Guid trialId, string email, string name); + + Task SiteSuervyUpdateUser(Guid trialSiteId, string email, string name, string url); } public class MailVerificationService(IRepository _verificationCodeRepository, @@ -337,7 +341,7 @@ namespace IRaCIS.Core.Application.Service var domain = baseUrl.Substring(0, baseUrl.IndexOf("/login")); var redirectUrl = $"{domain}/api/User/UserRedirect?url={System.Web.HttpUtility.UrlEncode(routeUrl)}"; - + var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; @@ -917,5 +921,76 @@ namespace IRaCIS.Core.Application.Service await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); } + //中心调研核对人员提醒 + public async Task SiteSuervyCheckUser(Guid trialId, string email, string name) + { + var trialInfo = await _trialRepository.Where(t => t.Id == trialId).Select(t => new { t.TrialCode, t.ResearchProgramNo }).FirstOrDefaultAsync(); + + var messageToSend = new MimeMessage(); + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); + //收件地址 + messageToSend.To.Add(new MailboxAddress(name, email)); + //主题 + //---[来自展影IRC] 关于重置邮箱的提醒 + + var companyName = _userInfo.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 htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr), + name, + trialInfo.TrialCode, + trialInfo.ResearchProgramNo + ); + + return (topicStr, htmlBodyStr); + }; + + + await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.SiteSurvey_CheckUser, messageToSend, emailConfigFunc); + + await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + } + + public async Task SiteSuervyUpdateUser(Guid trialSiteId, string email, string name, string url) + { + var trialInfo = await _trialSiteRepository.Where(t => t.Id == trialSiteId).Select(t => new { t.Trial.TrialCode, t.Trial.ResearchProgramNo, t.TrialSiteCode, t.TrialSiteName, t.TrialSiteAliasName }).FirstOrDefaultAsync(); + + var messageToSend = new MimeMessage(); + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); + //收件地址 + messageToSend.To.Add(new MailboxAddress(name, email)); + //主题 + //---[来自展影IRC] 关于重置邮箱的提醒 + + var companyName = _userInfo.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 htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr), + name, + trialInfo.TrialCode, + trialInfo.TrialSiteCode, + trialInfo.TrialSiteName, + url + ); + + return (topicStr, htmlBodyStr); + }; + + + await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.SiteSurvey_CheckUser, messageToSend, emailConfigFunc); + + await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + } + } } diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/DTO/TrialSiteSurveyViewModel.cs b/IRaCIS.Core.Application/Service/SiteSurvey/DTO/TrialSiteSurveyViewModel.cs index 4ecea22d6..24239eb23 100644 --- a/IRaCIS.Core.Application/Service/SiteSurvey/DTO/TrialSiteSurveyViewModel.cs +++ b/IRaCIS.Core.Application/Service/SiteSurvey/DTO/TrialSiteSurveyViewModel.cs @@ -282,6 +282,31 @@ namespace IRaCIS.Core.Application.Contracts } + public class SendCheckSiteSurveyUserCommand + { + public string Email { get; set; } = string.Empty; + + public string FullName { get; set; } + + [NotDefault] + public Guid TrialId { get; set; } + } + + + public class SendUpdateSiteSurveyUserCommand + { + + public string Url { get; set; } + + public string Email { get; set; } = string.Empty; + + public string FullName { get; set; } + + [NotDefault] + public Guid TrialSiteId { get; set; } + + } + public class LoginDto { public Guid TrialId { get; set; } diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs index 805de20d5..3e318a5e3 100644 --- a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs +++ b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs @@ -297,8 +297,28 @@ namespace IRaCIS.Core.Application.Contracts } + /// + /// 核对中心人员发送邮件 + /// + /// + public async Task SendCheckSiteSurveyUserEmail(SendCheckSiteSurveyUserCommand inCommand) + { + await SafeMailHelper.Run(async () => await _mailVerificationService.SiteSuervyCheckUser(inCommand.TrialId, inCommand.Email, inCommand.FullName)); + return ResponseOutput.Ok(); + } + /// + /// 更新中心人员发送邮件 + /// + /// + /// + public async Task SendUpdateSiteSurveyUserEmail(SendUpdateSiteSurveyUserCommand inCommand) + { + await SafeMailHelper.Run(async () => await _mailVerificationService.SiteSuervyUpdateUser(inCommand.TrialSiteId, inCommand.Email, inCommand.FullName, inCommand.Url)); + + return ResponseOutput.Ok(); + } #region 中心调研修改 diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/UserTrialViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/UserTrialViewModel.cs index 0acfd32e1..de2e5be1c 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/UserTrialViewModel.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/UserTrialViewModel.cs @@ -498,6 +498,8 @@ namespace IRaCIS.Application.Contracts public Guid? UserTypeId { get; set; } + public List UserTypeList { get; set; } + public string UserName { get; set; } = string.Empty; public string OrganizationName { get; set; } = String.Empty; diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs index 25b4ed629..47d6a8612 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs @@ -81,6 +81,7 @@ namespace IRaCIS.Core.Application.Service { var query = _trialIdentityUserRepository.Where(t => t.TrialId == inQuery.TrialId).IgnoreQueryFilters() .WhereIf(inQuery.UserTypeId != null, t => t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == inQuery.UserTypeId)) + .WhereIf(inQuery.UserTypeList.Count > 0, t => t.TrialUserRoleList.Any(t => inQuery.UserTypeList.Contains(t.UserRole.UserTypeEnum))) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserName), t => t.IdentityUser.UserName.Contains(inQuery.UserName)) .WhereIf(inQuery.IsDeleted != null, t => t.IsDeleted == inQuery.IsDeleted) diff --git a/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs b/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs index 40acc6c5c..d3fbdffad 100644 --- a/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs +++ b/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs @@ -324,6 +324,10 @@ namespace IRaCIS.Core.Domain.Share IdentityUser_ModifyPassword=73, + + SiteSurvey_CheckUser = 74, + + SiteSurvey_UpdateUser = 75, }