site调研发送邮件
parent
ed4f823b95
commit
f9de0e08b9
|
@ -204,11 +204,23 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[NotDefault]
|
[NotDefault]
|
||||||
public Guid TrialSiteSurveyId { get; set; }
|
public Guid TrialSiteSurveyId { get; set; }
|
||||||
|
|
||||||
public string LatestBackReason { get; set; }
|
public string LatestBackReason { get; set; } = string.Empty;
|
||||||
|
|
||||||
public string RouteUrl { get; set; }
|
public string RouteUrl { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class InviteEmailCommand
|
||||||
|
{
|
||||||
|
[NotDefault]
|
||||||
|
public Guid TrialId { get; set; }
|
||||||
|
|
||||||
|
public string RouteUrl { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public List<TrialSiteUserSurvey> UserList { get; set; } = new List<TrialSiteUserSurvey>();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class TrialSiteSurvyeSubmitDTO
|
public class TrialSiteSurvyeSubmitDTO
|
||||||
{
|
{
|
||||||
[NotDefault]
|
[NotDefault]
|
||||||
|
@ -216,9 +228,8 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[NotDefault]
|
[NotDefault]
|
||||||
public Guid TrialSiteSurveyId { get; set; }
|
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
|
public class TrialSiteSurveyQueryDTO
|
||||||
|
|
|
@ -594,6 +594,115 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<IResponseOutput> SendInviteEmail(InviteEmailCommand inviteEmailCommand)
|
||||||
|
{
|
||||||
|
|
||||||
|
var trialInfo = await _repository.FirstOrDefaultAsync<Trial>(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<User>(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<UserType>(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 = @$"<body style='font-family: 微软雅黑;padding: 0;margin: 0;'>
|
||||||
|
<div style='padding-left: 40px;background: #f6f6f6'>
|
||||||
|
<div style='padding-top: 20px;'>
|
||||||
|
<div style='line-height: 40px;font-size: 18px'>
|
||||||
|
{sysUserInfo.LastName + "/" + sysUserInfo.FirstName}:
|
||||||
|
</div>
|
||||||
|
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
|
||||||
|
您好,展影医疗作为 实验方案号:{trialInfo.ResearchProgramNo} 项目的IRC供应商,诚邀您参加该项目IRC相关工作,欢迎您提供指导和建议,非常感谢!
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<a href=' {inviteEmailCommand.RouteUrl + "?Id=" + item.Id + "&IsExternalUser=0"}' style='margin-left:60px;font-size:14px;text-decoration: none;display: inline-block;height: 40px;width: 140px;background: #00D1B2;color:#fff;border-radius: 5px;line-height: 40px;text-align: center;margin-bottom: 100px;'>
|
||||||
|
查看并确认
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 提交 后台自动识别是谁提交
|
/// 提交 后台自动识别是谁提交
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -647,148 +756,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
var needGenerateList = _trialSiteUserSurveyRepository.Where(t => t.TrialSiteSurveyId == trialSiteSurveyId && t.IsGenerateAccount && t.IsGenerateSuccess == false).ToList();
|
var needGenerateList = _trialSiteUserSurveyRepository.Where(t => t.TrialSiteSurveyId == trialSiteSurveyId && t.IsGenerateAccount && t.IsGenerateSuccess == false).ToList();
|
||||||
|
|
||||||
|
|
||||||
var trialInfo = await _repository.FirstOrDefaultAsync<Trial>(t => t.Id == trialId);
|
await SendInviteEmail(new InviteEmailCommand() { TrialId = trialId, RouteUrl = siteSurvyeSubmit.RouteUrl, UserList = needGenerateList });
|
||||||
|
|
||||||
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<User>(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<UserType>(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 = @$"<body style='font-family: 微软雅黑;padding: 0;margin: 0;'>
|
|
||||||
<div style='padding-left: 40px;background: #f6f6f6'>
|
|
||||||
<div style='padding-top: 20px;'>
|
|
||||||
<div style='line-height: 40px;font-size: 18px'>
|
|
||||||
{sysUserInfo.LastName + "/" + sysUserInfo.FirstName}:
|
|
||||||
</div>
|
|
||||||
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
|
|
||||||
您好,展影医疗作为 实验方案号:{trialInfo.ResearchProgramNo} 项目的IRC供应商,诚邀您参加该项目IRC相关工作,欢迎您提供指导和建议,非常感谢!
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<a href=' {siteSurvyeSubmit.RouteUrl + "?Id=" + item.Id + "&IsExternalUser=0"}' style='margin-left:60px;font-size:14px;text-decoration: none;display: inline-block;height: 40px;width: 140px;background: #00D1B2;color:#fff;border-radius: 5px;line-height: 40px;text-align: center;margin-bottom: 100px;'>
|
|
||||||
查看并确认
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>";
|
|
||||||
|
|
||||||
//builder.HtmlBody = @$"<body style='font-family: 微软雅黑;padding: 0;margin: 0;'>
|
|
||||||
// <div style='padding-left: 40px;background: #f6f6f6'>
|
|
||||||
// <div style='padding-top: 20px;'>
|
|
||||||
// <div style='line-height: 40px;font-size: 18px'>
|
|
||||||
// {sysUserInfo.LastName + "/" + sysUserInfo.FirstName}:
|
|
||||||
// </div>
|
|
||||||
// <div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
|
|
||||||
// 您参与的临床试验项目 {trialInfo.ExperimentName} ,独立影像评估相关工作将在网上进行。项目及账号信息为:
|
|
||||||
// </div>
|
|
||||||
// <div style='border: 1px solid #eee;box-sizing:border-box;width: 80%;background: #fff;padding: 20px;line-height: 40px;font-size: 14px;border-radius: 5px;margin-left: 60px;margin-bottom: 30px;'>
|
|
||||||
// <div>
|
|
||||||
// 项目编号: {trialInfo.TrialCode}
|
|
||||||
// </div>
|
|
||||||
// <div>
|
|
||||||
// 试验方案号: {trialInfo.ResearchProgramNo}
|
|
||||||
// </div>
|
|
||||||
// <div>
|
|
||||||
// 试验名称: {trialInfo.ExperimentName}
|
|
||||||
// </div>
|
|
||||||
// <div>
|
|
||||||
// 用户名: {sysUserInfo.UserName}
|
|
||||||
// </div>
|
|
||||||
// <div>
|
|
||||||
// 密码: {(sysUserInfo.IsFirstAdd ? verificationCode.ToString() + "(请在登录后进行修改)" : "***(您已有账号, 若忘记密码, 请通过邮箱找回)")}
|
|
||||||
// </div>
|
|
||||||
// <div>
|
|
||||||
// 角色: {sysUserInfo.UserTypeRole.UserTypeShortName}
|
|
||||||
// </div>
|
|
||||||
// <div>
|
|
||||||
// 系统登录地址: {siteSurvyeSubmit.LoginUrl} (请确认加入后再登陆)
|
|
||||||
// </div>
|
|
||||||
// </div>
|
|
||||||
// <a href='{siteSurvyeSubmit.RouteUrl + "?Id="+item.Id+ "&IsExternalUser=0"}' style='margin-left:60px;font-size:14px;text-decoration: none;display: inline-block;height: 40px;width: 140px;background: #00D1B2;color:#fff;border-radius: 5px;line-height: 40px;text-align: center;margin-bottom: 100px;'>
|
|
||||||
// 查看并确认
|
|
||||||
// </a>
|
|
||||||
// </div>
|
|
||||||
// </div>
|
|
||||||
// </body>";
|
|
||||||
|
|
||||||
|
|
||||||
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 _trialSiteSurveyRepository.UpdateFromQueryAsync(t => t.Id == trialSiteSurveyId && t.State == TrialSiteSurveyEnum.SPMApproved, u => new TrialSiteSurvey() { State = TrialSiteSurveyEnum.PMCreatedAndLock, ReviewerUserId = _userInfo.Id, ReviewerTime=DateTime.Now});
|
await _trialSiteSurveyRepository.UpdateFromQueryAsync(t => t.Id == trialSiteSurveyId && t.State == TrialSiteSurveyEnum.SPMApproved, u => new TrialSiteSurvey() { State = TrialSiteSurveyEnum.PMCreatedAndLock, ReviewerUserId = _userInfo.Id, ReviewerTime=DateTime.Now});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue