From f9de0e08b91f0a3f24cec66e9fb6fa536d7118ce Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 30 Mar 2022 14:29:40 +0800 Subject: [PATCH] =?UTF-8?q?site=E8=B0=83=E7=A0=94=E5=8F=91=E9=80=81?= =?UTF-8?q?=E9=82=AE=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DTO/TrialSiteSurveyViewModel.cs | 17 +- .../SiteSurvey/TrialSiteSurveyService.cs | 252 ++++++++---------- 2 files changed, 124 insertions(+), 145 deletions(-) diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/DTO/TrialSiteSurveyViewModel.cs b/IRaCIS.Core.Application/Service/SiteSurvey/DTO/TrialSiteSurveyViewModel.cs index 278f99a95..da38982fd 100644 --- a/IRaCIS.Core.Application/Service/SiteSurvey/DTO/TrialSiteSurveyViewModel.cs +++ b/IRaCIS.Core.Application/Service/SiteSurvey/DTO/TrialSiteSurveyViewModel.cs @@ -204,11 +204,23 @@ namespace IRaCIS.Core.Application.Contracts [NotDefault] public Guid TrialSiteSurveyId { get; set; } - public string LatestBackReason { get; set; } + public string LatestBackReason { get; set; } = string.Empty; public string RouteUrl { get; set; } } + public class InviteEmailCommand + { + [NotDefault] + public Guid TrialId { get; set; } + + public string RouteUrl { get; set; } = string.Empty; + + public List UserList { get; set; } = new List(); + } + + + public class TrialSiteSurvyeSubmitDTO { [NotDefault] @@ -216,9 +228,8 @@ namespace IRaCIS.Core.Application.Contracts [NotDefault] public Guid TrialSiteSurveyId { get; set; } - public string? LoginUrl { get; set; } - public string? RouteUrl { get; set; } + public string RouteUrl { get; set; } = string.Empty; } public class TrialSiteSurveyQueryDTO diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs index bb9e46fc7..86b60ad59 100644 --- a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs +++ b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs @@ -594,6 +594,115 @@ namespace IRaCIS.Core.Application.Contracts } + + + public async Task SendInviteEmail(InviteEmailCommand inviteEmailCommand) + { + + var trialInfo = await _repository.FirstOrDefaultAsync(t => t.Id == inviteEmailCommand.TrialId); + + foreach (var item in inviteEmailCommand.UserList) + { + + var messageToSend = new MimeMessage(); + //发件地址 + messageToSend.From.Add(new MailboxAddress("GRR", "iracis_grr@163.com")); + //收件地址 + messageToSend.To.Add(new MailboxAddress(String.Empty, item.Email)); + //主题 + messageToSend.Subject = "GRR Site survey (Trial Invite)"; + + var builder = new BodyBuilder(); + + //找下系统中是否存在该用户类型的 并且邮箱 或者手机的账户 + var sysUserInfo = await _userRepository.Where(t => t.UserTypeId == item.UserTypeId && t.EMail == item.Email).Include(t => t.UserTypeRole).FirstOrDefaultAsync(); + + //int verificationCode = new Random().Next(100000, 1000000); + + //var baseApiUrl = baseUrl.Remove(baseUrl.IndexOf("#")) + "api"; + + + if (sysUserInfo == null) + { + + lock (lockObj) + { + var saveItem = _mapper.Map(item); + + saveItem.Code = _userRepository.Select(t => t.Code).DefaultIfEmpty().Max() + 1; + + saveItem.UserCode = AppSettings.UserCodePrefix + saveItem.Code.ToString("D4"); + + saveItem.UserName = saveItem.UserCode; + + saveItem.UserTypeEnum = _repository.Where(t => t.Id == saveItem.UserTypeId).Select(t => t.UserTypeEnum).First(); + + //saveItem.Password = MD5Helper.Md5(verificationCode.ToString()); + + _ = _repository.AddAsync(saveItem).Result; + + _ = _repository.SaveChangesAsync().Result; + + + sysUserInfo = saveItem; + } + + } + + + + builder.HtmlBody = @$" +
+
+
+ {sysUserInfo.LastName + "/" + sysUserInfo.FirstName}: +
+
+ 您好,展影医疗作为 实验方案号:{trialInfo.ResearchProgramNo} 项目的IRC供应商,诚邀您参加该项目IRC相关工作,欢迎您提供指导和建议,非常感谢! +
+ + + 查看并确认 + +
+
+ "; + + + + messageToSend.Body = builder.ToMessageBody(); + + using (var smtp = new MailKit.Net.Smtp.SmtpClient()) + { + + smtp.ServerCertificateValidationCallback = (s, c, h, e) => true; + + smtp.MessageSent += (sender, args) => + { + + _ = _trialSiteUserSurveyRepository.UpdateFromQueryAsync(t => t.Id == item.Id, u => new TrialSiteUserSurvey() { IsGenerateSuccess = true, InviteState = TrialSiteUserStateEnum.HasSend, SystemUserId = sysUserInfo.Id, ExpireTime = DateTime.Now.AddDays(7) }).Result; + + }; + + + await smtp.ConnectAsync("smtp.163.com", 25, SecureSocketOptions.StartTls); + + + await smtp.AuthenticateAsync("iracis_grr@163.com", "XLWVQKZAEKLDWOAH"); + + + await smtp.SendAsync(messageToSend); + + + await smtp.DisconnectAsync(true); + } + + } + + + return ResponseOutput.Ok(); + } + /// /// 提交 后台自动识别是谁提交 /// @@ -647,148 +756,7 @@ namespace IRaCIS.Core.Application.Contracts var needGenerateList = _trialSiteUserSurveyRepository.Where(t => t.TrialSiteSurveyId == trialSiteSurveyId && t.IsGenerateAccount && t.IsGenerateSuccess == false).ToList(); - var trialInfo = await _repository.FirstOrDefaultAsync(t => t.Id == trialId); - - foreach (var item in needGenerateList) - { - - var messageToSend = new MimeMessage(); - //发件地址 - messageToSend.From.Add(new MailboxAddress("GRR", "iracis_grr@163.com")); - //收件地址 - messageToSend.To.Add(new MailboxAddress(String.Empty, item.Email)); - //主题 - messageToSend.Subject = "GRR Site survey (Trial Invite)"; - - var builder = new BodyBuilder(); - - //找下系统中是否存在该用户类型的 并且邮箱 或者手机的账户 - var sysUserInfo = await _userRepository.Where(t => t.UserTypeId == item.UserTypeId && t.EMail == item.Email).Include(t => t.UserTypeRole).FirstOrDefaultAsync(); - - //int verificationCode = new Random().Next(100000, 1000000); - - //var baseApiUrl = baseUrl.Remove(baseUrl.IndexOf("#")) + "api"; - - - if (sysUserInfo == null) - { - - lock (lockObj) - { - var saveItem = _mapper.Map(item); - - saveItem.Code = _userRepository.Select(t => t.Code).DefaultIfEmpty().Max() + 1; - - saveItem.UserCode = AppSettings.UserCodePrefix + saveItem.Code.ToString("D4"); - - saveItem.UserName = saveItem.UserCode; - - saveItem.UserTypeEnum = _repository.Where(t => t.Id == saveItem.UserTypeId).Select(t => t.UserTypeEnum).First(); - - //saveItem.Password = MD5Helper.Md5(verificationCode.ToString()); - - _ = _repository.AddAsync(saveItem).Result; - - _ = _repository.SaveChangesAsync().Result; - - - sysUserInfo = saveItem; - } - - } - - //if (sysUserInfo.IsFirstAdd) - //{ - // await _userRepository.UpdateFromQueryAsync(t => t.Id == sysUserInfo.Id, - // u => new User() { Password = MD5Helper.Md5(verificationCode.ToString()) }); - //} - - - builder.HtmlBody = @$" -
-
-
- {sysUserInfo.LastName + "/" + sysUserInfo.FirstName}: -
-
- 您好,展影医疗作为 实验方案号:{trialInfo.ResearchProgramNo} 项目的IRC供应商,诚邀您参加该项目IRC相关工作,欢迎您提供指导和建议,非常感谢! -
- - - 查看并确认 - -
-
- "; - - //builder.HtmlBody = @$" - //
- //
- //
- // {sysUserInfo.LastName + "/" + sysUserInfo.FirstName}: - //
- //
- // 您参与的临床试验项目 {trialInfo.ExperimentName} ,独立影像评估相关工作将在网上进行。项目及账号信息为: - //
- //
- //
- // 项目编号: {trialInfo.TrialCode} - //
- //
- // 试验方案号: {trialInfo.ResearchProgramNo} - //
- //
- // 试验名称: {trialInfo.ExperimentName} - //
- //
- // 用户名: {sysUserInfo.UserName} - //
- //
- // 密码: {(sysUserInfo.IsFirstAdd ? verificationCode.ToString() + "(请在登录后进行修改)" : "***(您已有账号, 若忘记密码, 请通过邮箱找回)")} - //
- //
- // 角色: {sysUserInfo.UserTypeRole.UserTypeShortName} - //
- //
- // 系统登录地址: {siteSurvyeSubmit.LoginUrl} (请确认加入后再登陆) - //
- //
- // - // 查看并确认 - // - //
- //
- // "; - - - messageToSend.Body = builder.ToMessageBody(); - - using (var smtp = new MailKit.Net.Smtp.SmtpClient()) - { - - smtp.ServerCertificateValidationCallback = (s, c, h, e) => true; - - smtp.MessageSent += (sender, args) => - { - - _ = _trialSiteUserSurveyRepository.UpdateFromQueryAsync(t => t.Id == item.Id, u => new TrialSiteUserSurvey() { IsGenerateSuccess = true, SystemUserId = sysUserInfo.Id, ExpireTime = DateTime.Now.AddDays(7) }).Result; - - }; - - - await smtp.ConnectAsync("smtp.163.com", 25, SecureSocketOptions.StartTls); - - - await smtp.AuthenticateAsync("iracis_grr@163.com", "XLWVQKZAEKLDWOAH"); - - - await smtp.SendAsync(messageToSend); - - - await smtp.DisconnectAsync(true); - } - - } + await SendInviteEmail(new InviteEmailCommand() { TrialId = trialId, RouteUrl = siteSurvyeSubmit.RouteUrl, UserList = needGenerateList }); await _trialSiteSurveyRepository.UpdateFromQueryAsync(t => t.Id == trialSiteSurveyId && t.State == TrialSiteSurveyEnum.SPMApproved, u => new TrialSiteSurvey() { State = TrialSiteSurveyEnum.PMCreatedAndLock, ReviewerUserId = _userInfo.Id, ReviewerTime=DateTime.Now});