diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index 6bd744e43..c002f71fd 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -34,7 +34,6 @@ using System; using System.Collections.Generic; using System.Data; using System.IO; -using System.IO.Compression; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -652,6 +651,7 @@ namespace IRaCIS.Core.API.Controllers } } + #endregion #region 医生文件上传下载 diff --git a/IRaCIS.Core.Application/Service/Common/MailService.cs b/IRaCIS.Core.Application/Service/Common/MailService.cs index d8f6f406f..e29ee7f81 100644 --- a/IRaCIS.Core.Application/Service/Common/MailService.cs +++ b/IRaCIS.Core.Application/Service/Common/MailService.cs @@ -19,9 +19,15 @@ namespace IRaCIS.Application.Services Task AnolymousSendEmailForResetAccount(string emailAddress, int verificationCode); - Task AddUserSendEmailAsync(Guid userId, string routeUrl); + Task AddUserSendEmailAsync(Guid userId, string routeUrl); Task AdminResetPwdSendEmailAsync(Guid userId); + + Task SiteSurveyUserJoinEmail(Guid trialId, Guid userId, string baseUrl, string rootUrl); + + Task ExternalUserJoinEmail(Guid trialId, Guid userId, string baseUrl, string rootUrl); + + } public class MailVerificationService : IMailVerificationService @@ -37,10 +43,16 @@ namespace IRaCIS.Application.Services private readonly IMapper _mapper; + private readonly IRepository _trialRepository; + public MailVerificationService(IRepository verificationCodeRepository, IRepository systemBasicDatarepository, - IWebHostEnvironment hostEnvironment, IRepository userRepository, ITokenService tokenService, IMapper mapper) + IWebHostEnvironment hostEnvironment, + IRepository userRepository, + ITokenService tokenService, + IRepository trialRepository, + IMapper mapper) { _verificationCodeRepository = verificationCodeRepository; _systemBasicDatarepository = systemBasicDatarepository; @@ -51,6 +63,7 @@ namespace IRaCIS.Application.Services _tokenService = tokenService; _userRepository = userRepository; + _trialRepository = trialRepository; } @@ -241,7 +254,7 @@ namespace IRaCIS.Application.Services //添加用户发送邮件 - public async Task AddUserSendEmailAsync(Guid userId, string routeUrl) + public async Task AddUserSendEmailAsync(Guid userId, string routeUrl) { var sysUserInfo = (await _userRepository.Where(t => t.Id == userId).Include(t => t.UserTypeRole).FirstOrDefaultAsync()).IfNullThrowException(); @@ -284,7 +297,7 @@ namespace IRaCIS.Application.Services messageToSend.Body = builder.ToMessageBody(); - + await SendEmailHelper.SendEmailAsync(messageToSend); } @@ -335,6 +348,116 @@ namespace IRaCIS.Application.Services } + + public async Task SiteSurveyUserJoinEmail(Guid trialId, Guid userId, string baseUrl, string rootUrl) + { + var sysUserInfo = (await _userRepository.Where(t => t.Id == userId).FirstOrDefaultAsync()).IfNullThrowException(); + + var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId); + + var messageToSend = new MimeMessage(); + //发件地址 + messageToSend.From.Add(new MailboxAddress("GRR", "iracis_grr@163.com")); + //收件地址 + messageToSend.To.Add(new MailboxAddress(sysUserInfo.FullName, sysUserInfo.EMail)); + //主题 + messageToSend.Subject = $"[来自展影IRC] [{ trialInfo.ResearchProgramNo}]邀请信"; + + + + var builder = new BodyBuilder(); + + + var token = _tokenService.GetToken(IRaCISClaims.Create(_mapper.Map(sysUserInfo))); + + + var pathToFile = _hostEnvironment.WebRootPath + + Path.DirectorySeparatorChar.ToString() + + "EmailTemplate" + + Path.DirectorySeparatorChar.ToString() + + (sysUserInfo.IsFirstAdd ? "TrialUserFirstJoin.html" : "TrialUserExistJoin.html"); + + using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile)) + { + var templateInfo = SourceReader.ReadToEnd(); + + var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&access_token=" + token; + + builder.HtmlBody = string.Format(templateInfo, + sysUserInfo.FullName, + trialInfo.ExperimentName, + trialInfo.ResearchProgramNo, + trialInfo.TrialCode, + sysUserInfo.UserName, + sysUserInfo.UserTypeRole.UserTypeShortName, + sysUserInfo.IsFirstAdd ? routeUrl : baseUrl + ); + } + + messageToSend.Body = builder.ToMessageBody(); + + await SendEmailHelper.SendEmailAsync(messageToSend, null); + + + } + + public async Task ExternalUserJoinEmail(Guid trialId, Guid userId, string baseUrl, string rootUrl) + { + var trialInfo = (await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId)).IfNullThrowException(); + + var sysUserInfo = (await _userRepository.Where(t => t.Id == userId).Include(t => t.UserTypeRole).FirstOrDefaultAsync()).IfNullThrowException(); + + + var messageToSend = new MimeMessage(); + //发件地址 + messageToSend.From.Add(new MailboxAddress("GRR", "iracis_grr@163.com")); + //收件地址 + messageToSend.To.Add(new MailboxAddress(String.Empty, sysUserInfo.EMail)); + //主题 + messageToSend.Subject = $"[来自展影IRC] [{ trialInfo.ResearchProgramNo}]邀请信"; + + + var builder = new BodyBuilder(); + + + + var token = _tokenService.GetToken(IRaCISClaims.Create(_mapper.Map(sysUserInfo))); + + var pathToFile = _hostEnvironment.WebRootPath + + Path.DirectorySeparatorChar.ToString() + + "EmailTemplate" + + Path.DirectorySeparatorChar.ToString() + + (sysUserInfo.IsFirstAdd ? "TrialUserFirstJoin.html" : "TrialUserExistJoin.html"); + + using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile)) + { + var templateInfo = SourceReader.ReadToEnd(); + + var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&access_token=" + token; + + builder.HtmlBody = string.Format(templateInfo, + sysUserInfo.FullName, + trialInfo.ExperimentName, + trialInfo.ResearchProgramNo, + trialInfo.TrialCode, + sysUserInfo.UserName, + sysUserInfo.UserTypeRole.UserTypeShortName, + sysUserInfo.IsFirstAdd ? routeUrl : baseUrl + ); + } + + + + messageToSend.Body = builder.ToMessageBody(); + + + await SendEmailHelper.SendEmailAsync(messageToSend, null); + + } + + + + //废弃 添加用户发送邮件 public async Task SendMail(Guid userId, string userName, string emailAddress, int verificationCode) { diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs index 65edc32b8..4c2deea2f 100644 --- a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs +++ b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs @@ -745,65 +745,21 @@ namespace IRaCIS.Core.Application.Contracts } - public async Task SendSiteSurveyUserJoinEmail(TrialSiteUserSurveyJoinCommand joinCommand) + public async Task SendSiteSurveyUserJoinEmail(TrialSiteUserSurveyJoinCommand joinCommand, [FromServices] IMailVerificationService _mailVerificationService) { var trialSiteSurvey = (await _trialSiteSurveyRepository.Where(t => t.Id == joinCommand.TrialSiteSurveyId).FirstOrDefaultAsync()).IfNullThrowException(); - var trialInfo = await _repository.FirstOrDefaultAsync(t => t.Id == joinCommand.TrialId); foreach (var userInfo in joinCommand.UserList) { - var messageToSend = new MimeMessage(); - //发件地址 - messageToSend.From.Add(new MailboxAddress("GRR", "iracis_grr@163.com")); - //收件地址 - messageToSend.To.Add(new MailboxAddress(String.Empty, userInfo.Email)); - //主题 - messageToSend.Subject = $"[来自展影IRC] [{ trialInfo.ResearchProgramNo}]邀请信"; - - - - var builder = new BodyBuilder(); - - var sysUserInfo = (await _userRepository.Where(t => t.Id == userInfo.SystemUserId).FirstOrDefaultAsync()).IfNullThrowException(); - - var token = _tokenService.GetToken(IRaCISClaims.Create(_mapper.Map(sysUserInfo))); - - - var pathToFile = _hostEnvironment.WebRootPath - + Path.DirectorySeparatorChar.ToString() - + "EmailTemplate" - + Path.DirectorySeparatorChar.ToString() - + (sysUserInfo.IsFirstAdd ? "TrialUserFirstJoin.html" : "TrialUserExistJoin.html"); - - using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile)) - { - var templateInfo = SourceReader.ReadToEnd(); - - var routeUrl = joinCommand.RouteUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&access_token=" + token; - - builder.HtmlBody = string.Format(templateInfo, - sysUserInfo.FullName, - trialInfo.ExperimentName, - trialInfo.ResearchProgramNo, - trialInfo.TrialCode, - sysUserInfo.UserName, - sysUserInfo.UserTypeRole.UserTypeShortName, - sysUserInfo.IsFirstAdd ? routeUrl : joinCommand.BaseUrl - ); - } - - messageToSend.Body = builder.ToMessageBody(); - - await SendEmailHelper.SendEmailAsync(messageToSend, null); - - - var trialId = joinCommand.TrialId; - var userId = sysUserInfo.Id; + var userId = (Guid)userInfo.SystemUserId; var siteId = trialSiteSurvey.SiteId; + await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, joinCommand.BaseUrl, joinCommand.RouteUrl); + + //判断TrialUser中是否存在 不存在就插入 if (!await _trialUserRepository.AnyAsync(t => t.TrialId == trialId && t.UserId == userId, true)) { diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialExternalUserService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialExternalUserService.cs index 8dc3d490a..dc104c725 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialExternalUserService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialExternalUserService.cs @@ -13,9 +13,8 @@ using MimeKit; using MailKit.Security; using Microsoft.AspNetCore.Authorization; using Panda.DynamicWebApi.Attributes; -using IRaCIS.Core.Application.Helper; using IRaCIS.Core.Application.Auth; -using IRaCIS.Application.Contracts; +using IRaCIS.Application.Services; namespace IRaCIS.Core.Application.Service { @@ -30,17 +29,19 @@ namespace IRaCIS.Core.Application.Service private readonly IRepository _trialUserRepository; private readonly IRepository _trialSiteSurveyUserRepository; private readonly IRepository _trialSiteUserRepository; - private readonly ITokenService _tokenService; + private readonly IMailVerificationService _mailVerificationService; public TrialExternalUserService(IRepository trialExternalUseRepository, IRepository userRepository, IRepository trialUserRepository, - IRepository trialSiteSurveyUserRepository, IRepository trialSiteUserRepository, ITokenService tokenService) + IRepository trialSiteSurveyUserRepository, IRepository trialSiteUserRepository, + IMailVerificationService mailVerificationService) { _trialExternalUseRepository = trialExternalUseRepository; _userRepository = userRepository; _trialUserRepository = trialUserRepository; _trialSiteSurveyUserRepository = trialSiteSurveyUserRepository; _trialSiteUserRepository = trialSiteUserRepository; - _tokenService = tokenService; + + _mailVerificationService = mailVerificationService; } @@ -162,36 +163,8 @@ namespace IRaCIS.Core.Application.Service else { return ResponseOutput.NotOk("人员信息不支持编辑,请删除后重新添加。"); - - - //if (await _trialExternalUseRepository.AnyAsync(t => - // t.Email == addOrEditTrialExternalUser.Email && - // t.UserTypeId == addOrEditTrialExternalUser.UserTypeId && t.Id != addOrEditTrialExternalUser.Id && t.TrialId == addOrEditTrialExternalUser.TrialId)) - //{ - // return ResponseOutput.NotOk("该邮箱和用户类型,已存在该账户"); - //} - - ////if (addOrEditTrialExternalUser.IsSystemUser) - ////{ - //// return ResponseOutput.NotOk("系统账户不允许编辑"); - ////} - - - //var needUpdateEntity = - // await _trialExternalUseRepository.FirstOrDefaultAsync(t => t.Id == addOrEditTrialExternalUser.Id); - - ////更改之前 先验证是否在系统账户中存在 - - //_mapper.Map(addOrEditTrialExternalUser, needUpdateEntity); - - - //await _trialExternalUseRepository.SaveChangesAsync(); - - //return ResponseOutput.Ok(needUpdateEntity.Id.ToString()); - + } - - } @@ -217,62 +190,17 @@ namespace IRaCIS.Core.Application.Service [Authorize(Policy = IRaCISPolicy.PM_APM)] public async Task SendExternalUserJoinEmail(TrialExternalUserSendEmail sendEmail) { - var trialInfo = (await _repository.FirstOrDefaultAsync(t => t.Id == sendEmail.TrialId)).IfNullThrowException(); + var trialId = sendEmail.TrialId; foreach (var userInfo in sendEmail.SendUsers) { - var messageToSend = new MimeMessage(); - //发件地址 - messageToSend.From.Add(new MailboxAddress("GRR", "iracis_grr@163.com")); - //收件地址 - messageToSend.To.Add(new MailboxAddress(String.Empty, userInfo.Email)); - //主题 - messageToSend.Subject = $"[来自展影IRC] [{ trialInfo.ResearchProgramNo}]邀请信"; + var userId = userInfo.SystemUserId; - - var builder = new BodyBuilder(); - - var sysUserInfo = (await _userRepository.Where(t => t.Id == userInfo.SystemUserId).Include(t=>t.UserTypeRole).FirstOrDefaultAsync()).IfNullThrowException(); - - - var token = _tokenService.GetToken(IRaCISClaims.Create(_mapper.Map(sysUserInfo))); - - var pathToFile = _hostEnvironment.WebRootPath - + Path.DirectorySeparatorChar.ToString() - + "EmailTemplate" - + Path.DirectorySeparatorChar.ToString() - + (sysUserInfo.IsFirstAdd? "TrialUserFirstJoin.html": "TrialUserExistJoin.html"); - - using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile)) - { - var templateInfo= SourceReader.ReadToEnd(); - - var routeUrl = sendEmail.RouteUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&access_token=" + token; - - builder.HtmlBody = string.Format(templateInfo, - sysUserInfo.FullName, - trialInfo.ExperimentName, - trialInfo.ResearchProgramNo, - trialInfo.TrialCode, - sysUserInfo.UserName, - sysUserInfo.UserTypeRole.UserTypeShortName, - sysUserInfo.IsFirstAdd? routeUrl:sendEmail.BaseUrl - ); - } - - - - messageToSend.Body = builder.ToMessageBody(); - - - await SendEmailHelper.SendEmailAsync(messageToSend, null); - - - var trialId = sendEmail.TrialId; - var userId = sysUserInfo.Id; + await _mailVerificationService.ExternalUserJoinEmail(trialId, userId, sendEmail.BaseUrl, sendEmail.RouteUrl); + //判断TrialUser中是否存在 不存在就插入 注意退出了,也不能再加进来 - if (!await _trialUserRepository.AnyAsync(t => t.TrialId == trialId && t.UserId == userId,true)) + if (!await _trialUserRepository.AnyAsync(t => t.TrialId == trialId && t.UserId == userId, true)) { await _repository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId });