Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api
commit
ed964278f8
|
@ -697,13 +697,6 @@
|
||||||
项目外部人员 录入流程相关
|
项目外部人员 录入流程相关
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.TrialExternalUserService.VerifyUserIsCanAddOrUpdate(IRaCIS.Core.Application.ViewModel.VerifyUserAdd)">
|
|
||||||
<summary>
|
|
||||||
验证 在系统中是否存在该类型的账户 返回true 表示 不存在 可以添加和更新|存在但是信息一致,false 需要提示不一致项(前端 可以直接用我返回的错误信息,或者根据返回的用户信息实体,自己设置格式显示)
|
|
||||||
</summary>
|
|
||||||
<param name="addOrEditTrialExternalUser"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:IRaCIS.Core.Application.Service.TrialExternalUserService.AddOrUpdateTrialExternalUser(IRaCIS.Core.Application.ViewModel.TrialExternalUserAddOrEdit)">
|
<member name="M:IRaCIS.Core.Application.Service.TrialExternalUserService.AddOrUpdateTrialExternalUser(IRaCIS.Core.Application.ViewModel.TrialExternalUserAddOrEdit)">
|
||||||
<summary>
|
<summary>
|
||||||
添加和更新接口 已验证邮箱和账户类型不允许添加重复项
|
添加和更新接口 已验证邮箱和账户类型不允许添加重复项
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
||||||
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
||||||
using IRaCIS.Core.Domain.Share;
|
using IRaCIS.Core.Domain.Share;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Contracts
|
namespace IRaCIS.Core.Application.Contracts
|
||||||
{
|
{
|
||||||
/// <summary> TrialSiteUserSurveyView 列表视图模型 </summary>
|
/// <summary> TrialSiteUserSurveyView 列表视图模型 </summary>
|
||||||
|
@ -16,7 +18,33 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public Guid UpdateUserId { get; set; }
|
public Guid UpdateUserId { get; set; }
|
||||||
|
|
||||||
public string UserType { get; set; } = string.Empty;
|
public string UserType { get; set; } = string.Empty;
|
||||||
public TrialSiteSurveyEnum State { get; set; }
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public TrialSiteUserStateEnum InviteState { get; set; }
|
||||||
|
|
||||||
|
public DateTime? ExpireTime { get; set; }
|
||||||
|
|
||||||
|
public bool? IsJoin { get; set; }
|
||||||
|
|
||||||
|
public DateTime? ConfirmTime { get; set; }
|
||||||
|
|
||||||
|
public string RejectReason { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
|
||||||
|
public TrialSiteUserStateEnum State
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (InviteState == TrialSiteUserStateEnum.HasSend && ExpireTime != null && ExpireTime < DateTime.Now)
|
||||||
|
{
|
||||||
|
return TrialSiteUserStateEnum.OverTime;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return InviteState;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public string TrialRoleName { get; set; }
|
public string TrialRoleName { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -509,10 +509,6 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
}
|
}
|
||||||
else if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM)
|
else if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM)
|
||||||
{
|
{
|
||||||
//if (_repository.Where<TrialSiteUserSurvey>(t => t.TrialSiteSurveyId == trialSiteSurveyId && t.IsCorrect == false).Any())
|
|
||||||
//{
|
|
||||||
// return ResponseOutput.NotOk("人员信息有不正确项,不允许提交");
|
|
||||||
//}
|
|
||||||
|
|
||||||
await _trialSiteSurveyRepository.UpdateFromQueryAsync(t => t.Id == trialSiteSurveyId && t.State == TrialSiteSurveyEnum.CRCSubmitted, u => new TrialSiteSurvey() { State = TrialSiteSurveyEnum.SPMApproved });
|
await _trialSiteSurveyRepository.UpdateFromQueryAsync(t => t.Id == trialSiteSurveyId && t.State == TrialSiteSurveyEnum.CRCSubmitted, u => new TrialSiteSurvey() { State = TrialSiteSurveyEnum.SPMApproved });
|
||||||
|
|
||||||
|
@ -524,10 +520,6 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
if (trialSiteSurvey == null) return Null404NotFound(trialSiteSurvey);
|
if (trialSiteSurvey == null) return Null404NotFound(trialSiteSurvey);
|
||||||
|
|
||||||
//if (_trialSiteUserSurveyRepository.Where(t => t.TrialSiteSurveyId == trialSiteSurveyId && t.IsCorrect == false).Any())
|
|
||||||
//{
|
|
||||||
// return ResponseOutput.NotOk("人员信息有不正确项,不允许提交");
|
|
||||||
//}
|
|
||||||
|
|
||||||
//已生成的不管 管的只需要是 生成失败的并且需要生成账号的
|
//已生成的不管 管的只需要是 生成失败的并且需要生成账号的
|
||||||
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();
|
||||||
|
@ -544,14 +536,14 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
//收件地址
|
//收件地址
|
||||||
messageToSend.To.Add(new MailboxAddress(String.Empty, item.Email));
|
messageToSend.To.Add(new MailboxAddress(String.Empty, item.Email));
|
||||||
//主题
|
//主题
|
||||||
messageToSend.Subject = "GRR Site survey (Trial Notice)";
|
messageToSend.Subject = "GRR Site survey (Trial Invite)";
|
||||||
|
|
||||||
var builder = new BodyBuilder();
|
var builder = new BodyBuilder();
|
||||||
|
|
||||||
//找下系统中是否存在该用户类型的 并且邮箱 或者手机的账户
|
//找下系统中是否存在该用户类型的 并且邮箱 或者手机的账户
|
||||||
var sysUserInfo = await _userRepository.Where(t => t.UserTypeId == item.UserTypeId && t.EMail == item.Email ).Include(t=>t.UserTypeRole).FirstOrDefaultAsync();
|
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);
|
//int verificationCode = new Random().Next(100000, 1000000);
|
||||||
|
|
||||||
//var baseApiUrl = baseUrl.Remove(baseUrl.IndexOf("#")) + "api";
|
//var baseApiUrl = baseUrl.Remove(baseUrl.IndexOf("#")) + "api";
|
||||||
|
|
||||||
|
@ -571,7 +563,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
saveItem.UserTypeEnum = _repository.Where<UserType>(t => t.Id == saveItem.UserTypeId).Select(t => t.UserTypeEnum).First();
|
saveItem.UserTypeEnum = _repository.Where<UserType>(t => t.Id == saveItem.UserTypeId).Select(t => t.UserTypeEnum).First();
|
||||||
|
|
||||||
saveItem.Password = MD5Helper.Md5(verificationCode.ToString());
|
//saveItem.Password = MD5Helper.Md5(verificationCode.ToString());
|
||||||
|
|
||||||
_ = _repository.AddAsync(saveItem).Result;
|
_ = _repository.AddAsync(saveItem).Result;
|
||||||
|
|
||||||
|
@ -583,11 +575,11 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sysUserInfo.IsFirstAdd)
|
//if (sysUserInfo.IsFirstAdd)
|
||||||
{
|
//{
|
||||||
await _userRepository.UpdateFromQueryAsync(t => t.Id == sysUserInfo.Id,
|
// await _userRepository.UpdateFromQueryAsync(t => t.Id == sysUserInfo.Id,
|
||||||
u => new User() { Password = MD5Helper.Md5(verificationCode.ToString()) });
|
// u => new User() { Password = MD5Helper.Md5(verificationCode.ToString()) });
|
||||||
}
|
//}
|
||||||
|
|
||||||
|
|
||||||
builder.HtmlBody = @$"<body style='font-family: 微软雅黑;padding: 0;margin: 0;'>
|
builder.HtmlBody = @$"<body style='font-family: 微软雅黑;padding: 0;margin: 0;'>
|
||||||
|
@ -597,38 +589,55 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
{sysUserInfo.LastName + "/" + sysUserInfo.FirstName}:
|
{sysUserInfo.LastName + "/" + sysUserInfo.FirstName}:
|
||||||
</div>
|
</div>
|
||||||
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
|
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
|
||||||
您参与的临床试验项目 {trialInfo.ExperimentName} ,独立影像评估相关工作将在网上进行。项目及账号信息为:
|
您好,展影医疗作为 实验方案号:{trialInfo.ResearchProgramNo} 项目的IRC供应商,诚邀您参加该项目IRC相关工作,欢迎您提供指导和建议,非常感谢!
|
||||||
</div>
|
</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>
|
<a href=' {siteSurvyeSubmit.RouteUrl + "?Id=" + siteSurvyeSubmit.TrialSiteSurveyId + "&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;'>
|
||||||
项目编号: {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>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>";
|
</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();
|
messageToSend.Body = builder.ToMessageBody();
|
||||||
|
|
||||||
|
@ -668,24 +677,5 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///// <summary>
|
|
||||||
///// 锁定
|
|
||||||
///// </summary>
|
|
||||||
///// <param name="trialSiteSurveyId"></param>
|
|
||||||
///// <param name="isLock"></param>
|
|
||||||
///// <returns></returns>
|
|
||||||
//[TypeFilter(typeof(TrialResourceFilter))]
|
|
||||||
//[HttpPost("{trialSiteSurveyId:guid}/{trialId:guid}/{isLock:bool}")]
|
|
||||||
//public async Task<IResponseOutput> TrialSurveyLock(Guid trialSiteSurveyId, bool isLock)
|
|
||||||
//{
|
|
||||||
// if (await _repository.Where<TrialSiteSurvey>(t => t.Id == trialSiteSurveyId).AnyAsync(t => t.TrialSiteUserSurveyList.Any(k => k.IsGenerateAccount && k.IsGenerateSuccess == false)))
|
|
||||||
// {
|
|
||||||
// ResponseOutput.NotOk("有用户账户没生成,不允许锁定");
|
|
||||||
// }
|
|
||||||
|
|
||||||
// await _repository.UpdateFromQueryAsync<TrialSiteSurvey>(t => t.Id == trialSiteSurveyId, k => new TrialSiteSurvey() { State==TrialSiteSurveyEnum.PMCreatedAndLock });
|
|
||||||
|
|
||||||
// return ResponseOutput.Ok();
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using IRaCIS.Core.Application.Contracts.DTO;
|
using IRaCIS.Core.Application.Contracts.DTO;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.ViewModel
|
namespace IRaCIS.Core.Application.ViewModel
|
||||||
{
|
{
|
||||||
|
@ -25,9 +26,33 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||||
|
|
||||||
public Guid SystemUserId { get; set; }
|
public Guid SystemUserId { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
public TrialExternalUserStateEnum InviteState { get; set; }
|
public TrialExternalUserStateEnum InviteState { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public TrialExternalUserStateEnum State
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (InviteState == TrialExternalUserStateEnum.HasSend && ExpireTime != null && ExpireTime < DateTime.Now)
|
||||||
|
{
|
||||||
|
return TrialExternalUserStateEnum.OverTime;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return InviteState;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public DateTime? ExpireTime { get; set; }
|
public DateTime? ExpireTime { get; set; }
|
||||||
|
|
||||||
public bool? IsJoin { get; set; }
|
public bool? IsJoin { get; set; }
|
||||||
|
@ -61,11 +86,10 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||||
public string OrganizationName { get; set; } = String.Empty;
|
public string OrganizationName { get; set; } = String.Empty;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
public class TrialExternalUserConfirm
|
public class TrialExternalUserConfirm
|
||||||
{
|
{
|
||||||
|
public string BaseUrl { get; set; } = string.Empty;
|
||||||
|
|
||||||
[NotDefault]
|
[NotDefault]
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
|
|
|
@ -54,28 +54,6 @@ namespace IRaCIS.Core.Application.Service
|
||||||
return await trialExternalUserQueryable.ToListAsync();
|
return await trialExternalUserQueryable.ToListAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 验证 在系统中是否存在该类型的账户 返回true 表示 不存在 可以添加和更新|存在但是信息一致,false 需要提示不一致项(前端 可以直接用我返回的错误信息,或者根据返回的用户信息实体,自己设置格式显示)
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="addOrEditTrialExternalUser"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[HttpPost]
|
|
||||||
public async Task<IResponseOutput> VerifyUserIsCanAddOrUpdate(VerifyUserAdd addOrEditTrialExternalUser)
|
|
||||||
{
|
|
||||||
|
|
||||||
var existUser = await _userRepository.FirstOrDefaultAsync(t => t.EMail == addOrEditTrialExternalUser.Email && t.UserTypeId == addOrEditTrialExternalUser.UserTypeId);
|
|
||||||
|
|
||||||
if (existUser != null)
|
|
||||||
{
|
|
||||||
if (existUser.LastName != addOrEditTrialExternalUser.LastName || existUser.FirstName != addOrEditTrialExternalUser.FirstName)
|
|
||||||
{
|
|
||||||
return ResponseOutput.NotOk($"该用户在系统中账户名为:{existUser.LastName + " / " + existUser.FirstName} 电话:{existUser.Phone},与填写信息存在不一致项, 现将界面信息修改为与系统一致,可进行保存", new { existUser.LastName, existUser.FirstName, existUser.Phone });
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return ResponseOutput.Ok();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -233,22 +211,13 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//收件地址
|
//收件地址
|
||||||
messageToSend.To.Add(new MailboxAddress(String.Empty, userInfo.Email));
|
messageToSend.To.Add(new MailboxAddress(String.Empty, userInfo.Email));
|
||||||
//主题
|
//主题
|
||||||
messageToSend.Subject = "GRR External User survey (Verification Code)";
|
messageToSend.Subject = "GRR External User survey (Invite)";
|
||||||
|
|
||||||
var baseApiUrl = sendEmail.BaseUrl.Remove(sendEmail.BaseUrl.IndexOf("#")) + "api";
|
var baseApiUrl = sendEmail.BaseUrl.Remove(sendEmail.BaseUrl.IndexOf("#")) + "api";
|
||||||
|
|
||||||
var sysUserInfo = await _userRepository.Where(t => t.Id == userInfo.SystemUserId).Include(t => t.UserTypeRole).FirstOrDefaultAsync();
|
|
||||||
|
|
||||||
|
|
||||||
var builder = new BodyBuilder();
|
var builder = new BodyBuilder();
|
||||||
|
|
||||||
int verificationCode = new Random().Next(100000, 1000000);
|
var sysUserInfo = await _userRepository.Where(t => t.Id == userInfo.SystemUserId).FirstOrDefaultAsync();
|
||||||
|
|
||||||
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;'>
|
builder.HtmlBody = @$"<body style='font-family: 微软雅黑;padding: 0;margin: 0;'>
|
||||||
|
@ -258,31 +227,9 @@ namespace IRaCIS.Core.Application.Service
|
||||||
{sysUserInfo.LastName + "/" + sysUserInfo.FirstName}:
|
{sysUserInfo.LastName + "/" + sysUserInfo.FirstName}:
|
||||||
</div>
|
</div>
|
||||||
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
|
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
|
||||||
您参与的临床试验项目 {trialInfo.ExperimentName} ,独立影像评估相关工作将在网上进行。项目及账号信息为:
|
您好,展影医疗作为 实验方案号:{trialInfo.ResearchProgramNo} 项目的IRC供应商,诚邀您参加该项目IRC相关工作,欢迎您提供指导和建议,非常感谢!
|
||||||
</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>
|
|
||||||
系统登录地址: {sendEmail.BaseUrl} (请确认加入后再登陆)
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a href=' {sendEmail.RouteUrl + "?Id=" + userInfo.Id + "&IsExternalUser=1"}' 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 href=' {sendEmail.RouteUrl + "?Id=" + userInfo.Id + "&IsExternalUser=1"}' 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>
|
</a>
|
||||||
|
@ -291,6 +238,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
</body>";
|
</body>";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
messageToSend.Body = builder.ToMessageBody();
|
messageToSend.Body = builder.ToMessageBody();
|
||||||
|
|
||||||
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
|
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
|
||||||
|
@ -334,7 +282,6 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
var needUpdate = await _trialExternalUseRepository.FirstOrDefaultAsync(t => t.Id == editTrialUserPreparation.Id);
|
var needUpdate = await _trialExternalUseRepository.FirstOrDefaultAsync(t => t.Id == editTrialUserPreparation.Id);
|
||||||
|
|
||||||
|
|
||||||
if (DateTime.Now > needUpdate.ExpireTime)
|
if (DateTime.Now > needUpdate.ExpireTime)
|
||||||
{
|
{
|
||||||
return ResponseOutput.NotOk("邀请加入时间已过期,重新被邀请后才可以进行确认操作");
|
return ResponseOutput.NotOk("邀请加入时间已过期,重新被邀请后才可以进行确认操作");
|
||||||
|
@ -342,7 +289,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
_mapper.Map(editTrialUserPreparation, needUpdate);
|
_mapper.Map(editTrialUserPreparation, needUpdate);
|
||||||
|
|
||||||
needUpdate.InviteState = TrialExternalUserStateEnum.UserConfirmed;
|
needUpdate.InviteState = editTrialUserPreparation.IsJoin == true ? TrialExternalUserStateEnum.UserConfirmed : TrialExternalUserStateEnum.UserReject;
|
||||||
|
|
||||||
|
|
||||||
var trialId = needUpdate.TrialId;
|
var trialId = needUpdate.TrialId;
|
||||||
|
@ -354,8 +301,81 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
await _trialUserRepository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId });
|
await _trialUserRepository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId });
|
||||||
|
|
||||||
await _trialExternalUseRepository.UpdateFromQueryAsync(t => t.TrialId == trialId && t.SystemUserId == userId,
|
var messageToSend = new MimeMessage();
|
||||||
u => new TrialExternalUser() { InviteState = TrialExternalUserStateEnum.UserConfirmed });
|
//发件地址
|
||||||
|
messageToSend.From.Add(new MailboxAddress("GRR", "iracis_grr@163.com"));
|
||||||
|
//收件地址
|
||||||
|
messageToSend.To.Add(new MailboxAddress(String.Empty, needUpdate.Email));
|
||||||
|
//主题
|
||||||
|
messageToSend.Subject = "GRR External User survey (Trial Join Success)";
|
||||||
|
|
||||||
|
var builder = new BodyBuilder();
|
||||||
|
|
||||||
|
var trialInfo = await _repository.FirstOrDefaultAsync<Trial>(t => t.Id == needUpdate.TrialId);
|
||||||
|
|
||||||
|
var sysUserInfo = await _userRepository.Where(t => t.Id == needUpdate.SystemUserId).Include(t => t.UserTypeRole).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
int verificationCode = new Random().Next(100000, 1000000);
|
||||||
|
|
||||||
|
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相关工作。该项目采用电子化工作流,系统及您的账号信息如下:
|
||||||
|
</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>
|
||||||
|
系统登录地址: {editTrialUserPreparation.BaseUrl}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>";
|
||||||
|
|
||||||
|
messageToSend.Body = builder.ToMessageBody();
|
||||||
|
|
||||||
|
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
|
||||||
|
{
|
||||||
|
|
||||||
|
smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;
|
||||||
|
|
||||||
|
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 _userRepository.UpdateFromQueryAsync(t => t.Id == userId, u => new User() { Status = UserStateEnum.Enable });
|
await _userRepository.UpdateFromQueryAsync(t => t.Id == userId, u => new User() { Status = UserStateEnum.Enable });
|
||||||
|
@ -385,7 +405,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
_mapper.Map(editInfo, needUpdate);
|
_mapper.Map(editInfo, needUpdate);
|
||||||
|
|
||||||
//needUpdate.InviteState = TrialExternalUserStateEnum.UserConfirmed;
|
needUpdate.InviteState = editInfo.IsJoin == true ? TrialSiteUserStateEnum.UserConfirmed : TrialSiteUserStateEnum.UserReject;
|
||||||
|
|
||||||
|
|
||||||
if (needUpdate.SystemUserId == null)
|
if (needUpdate.SystemUserId == null)
|
||||||
|
@ -398,11 +418,89 @@ namespace IRaCIS.Core.Application.Service
|
||||||
var userId = (Guid)needUpdate.SystemUserId;
|
var userId = (Guid)needUpdate.SystemUserId;
|
||||||
|
|
||||||
|
|
||||||
if (!_trialUserRepository.Where(t => t.TrialId == trialId && t.UserId == userId).Any())
|
if (! await _trialUserRepository.AnyAsync(t => t.TrialId == trialId && t.UserId == userId))
|
||||||
{
|
{
|
||||||
await _trialUserRepository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId });
|
await _trialUserRepository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId });
|
||||||
|
|
||||||
await _trialSiteUserRepository.AddAsync(new TrialSiteUser() { TrialId = trialId, SiteId = siteId, UserId = userId });
|
await _trialSiteUserRepository.AddAsync(new TrialSiteUser() { TrialId = trialId, SiteId = siteId, UserId = userId });
|
||||||
|
|
||||||
|
|
||||||
|
var messageToSend = new MimeMessage();
|
||||||
|
//发件地址
|
||||||
|
messageToSend.From.Add(new MailboxAddress("GRR", "iracis_grr@163.com"));
|
||||||
|
//收件地址
|
||||||
|
messageToSend.To.Add(new MailboxAddress(String.Empty, needUpdate.Email));
|
||||||
|
//主题
|
||||||
|
messageToSend.Subject = "GRR Site survey (Trial Join Success)";
|
||||||
|
|
||||||
|
var builder = new BodyBuilder();
|
||||||
|
|
||||||
|
var trialInfo = await _repository.FirstOrDefaultAsync<Trial>(t => t.Id == needUpdate.TrialSiteSurvey.TrialId);
|
||||||
|
|
||||||
|
var sysUserInfo = await _userRepository.Where(t => t.Id == needUpdate.SystemUserId).Include(t => t.UserTypeRole).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
int verificationCode = new Random().Next(100000, 1000000);
|
||||||
|
|
||||||
|
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相关工作。该项目采用电子化工作流,系统及您的账号信息如下:
|
||||||
|
</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>
|
||||||
|
系统登录地址: {editInfo.BaseUrl}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>";
|
||||||
|
|
||||||
|
messageToSend.Body = builder.ToMessageBody();
|
||||||
|
|
||||||
|
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
|
||||||
|
{
|
||||||
|
|
||||||
|
smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;
|
||||||
|
|
||||||
|
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 _userRepository.UpdateFromQueryAsync(t => t.Id == needUpdate.SystemUserId, u => new User() { Status = UserStateEnum.Enable });
|
await _userRepository.UpdateFromQueryAsync(t => t.Id == needUpdate.SystemUserId, u => new User() { Status = UserStateEnum.Enable });
|
||||||
|
|
|
@ -11,7 +11,31 @@ namespace IRaCIS.Core.Domain.Share
|
||||||
HasSend = 1,
|
HasSend = 1,
|
||||||
|
|
||||||
//用户已确认
|
//用户已确认
|
||||||
UserConfirmed = 2
|
UserConfirmed = 2,
|
||||||
|
|
||||||
|
UserReject = 3,
|
||||||
|
|
||||||
|
OverTime = 4
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public enum TrialSiteUserStateEnum
|
||||||
|
{
|
||||||
|
//待发送
|
||||||
|
WaitSent = 0,
|
||||||
|
|
||||||
|
//已发送
|
||||||
|
HasSend = 1,
|
||||||
|
|
||||||
|
//用户已确认
|
||||||
|
UserConfirmed = 2,
|
||||||
|
|
||||||
|
UserReject = 3,
|
||||||
|
|
||||||
|
OverTime = 4
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,11 +104,10 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
public bool IsGenerateSuccess { get; set; }
|
public bool IsGenerateSuccess { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public TrialSiteUserStateEnum InviteState { get; set; } = TrialSiteUserStateEnum.WaitSent;
|
||||||
|
|
||||||
public Guid? PreliminaryUserId { get; set; }
|
public Guid? PreliminaryUserId { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public Guid? ReviewerUserId { get; set; }
|
public Guid? ReviewerUserId { get; set; }
|
||||||
|
|
||||||
public User ReviewerUser { get; set; }
|
public User ReviewerUser { get; set; }
|
||||||
|
|
Loading…
Reference in New Issue