中心调研修改
							parent
							
								
									1d12d8e2ff
								
							
						
					
					
						commit
						27c63202cd
					
				| 
						 | 
				
			
			@ -8693,42 +8693,6 @@
 | 
			
		|||
            <param name="addOrEditTrialExternalUser"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IRaCIS.Core.Application.Service.TrialExternalUserService.SendInviteEmail(IRaCIS.Core.Application.ViewModel.TrialExternalUserSendEmail)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            勾选用户 批量发送邮件 
 | 
			
		||||
            </summary>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IRaCIS.Core.Application.Service.TrialExternalUserService.TrialExternalUserJoinTrial(IRaCIS.Core.Application.ViewModel.TrialExternalUserConfirm)">
 | 
			
		||||
            <summary>
 | 
			
		||||
             不带Token 访问  用户选择   参与  不参与    Id:  TrialExternalUserId   加入发送邮件
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="editTrialUserPreparation"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IRaCIS.Core.Application.Service.TrialExternalUserService.TrialSiteSurveyUserJoinTrial(IRaCIS.Core.Application.ViewModel.TrialExternalUserConfirm)">
 | 
			
		||||
            <summary>
 | 
			
		||||
             不带Token 访问  Site调研用户 加入项目   Id:  TrialSiteSurveyUserId
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="editInfo"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IRaCIS.Core.Application.Service.TrialExternalUserService.JoinBasicInfo(System.Guid,System.Boolean)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            不带Token 访问   页面获取项目基本信息  和参与情况 (已经确认了 就不允许再次确认)  Id:  TrialExternalUserId/TrialSiteSurveyUserId  
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="id"></param>
 | 
			
		||||
            <param name="isExternalUser"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IRaCIS.Core.Application.Service.TrialExternalUserService.UserConfirmJoinTrial(System.Guid,System.Guid)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            加入项目    
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="trialId"></param>
 | 
			
		||||
            <param name="trialExternalUserId"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="T:IRaCIS.Core.Application.ViewModel.TaskAllocationRuleView">
 | 
			
		||||
            <summary> TaskAllocationRuleView  列表视图模型 </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
| 
						 | 
				
			
			@ -10474,11 +10438,11 @@
 | 
			
		|||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.SendVerifyCode(IRaCIS.Core.Application.Contracts.SiteSurveySendVerifyCode)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            发送验证码
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="userInfo"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
             <summary>
 | 
			
		||||
            site 调研 发送验证码
 | 
			
		||||
             </summary>
 | 
			
		||||
             <param name="userInfo"></param>
 | 
			
		||||
             <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.VerifySendCode(IRaCIS.Core.Application.Contracts.LoginDto,IRaCIS.Core.Application.Auth.ITokenService)">
 | 
			
		||||
            <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -10534,14 +10498,6 @@
 | 
			
		|||
            </summary>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.SubmissionRejection(System.Guid,System.Guid)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            驳回
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="trialId"></param>
 | 
			
		||||
            <param name="trialSiteSurveyId"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.TrialSurveySubmit(IRaCIS.Core.Application.Contracts.TrialSiteSurvyeSubmitDTO)">
 | 
			
		||||
            <summary>
 | 
			
		||||
             提交   后台自动识别是谁提交
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -155,9 +155,8 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
                .Where(t => groupSelectIdQuery.Contains(t.TrialSiteSurveyId))
 | 
			
		||||
                .WhereIf(queryParam.UserTypeId != null, t => t.UserTypeId == queryParam.UserTypeId)
 | 
			
		||||
                .WhereIf(queryParam.IsGenerateAccount != null, t => t.IsGenerateAccount == queryParam.IsGenerateAccount)
 | 
			
		||||
                .WhereIf(queryParam.TrialRoleNameId != null, t => t.TrialRoleNameId == queryParam.TrialRoleNameId)
 | 
			
		||||
                .WhereIf(queryParam.State != null && queryParam.State != TrialSiteUserStateEnum.OverTime, t => t.InviteState == queryParam.State)
 | 
			
		||||
                .WhereIf(queryParam.State != null && queryParam.State == TrialSiteUserStateEnum.OverTime, t => t.InviteState == TrialSiteUserStateEnum.HasSend && t.ExpireTime < DateTime.Now)
 | 
			
		||||
                //.WhereIf(queryParam.State != null && queryParam.State == TrialSiteUserStateEnum.OverTime, t => t.InviteState == TrialSiteUserStateEnum.HasSend && t.ExpireTime < DateTime.Now)
 | 
			
		||||
                .WhereIf(!string.IsNullOrEmpty(queryParam.UserName), t => (t.LastName + " / " + t.FirstName).Contains(queryParam.UserName))
 | 
			
		||||
                .WhereIf(!string.IsNullOrEmpty(queryParam.OrganizationName), t => t.OrganizationName.Contains(queryParam.OrganizationName))
 | 
			
		||||
                .ProjectTo<TrialSiteUserSummaryDto>(_mapper.ConfigurationProvider);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -703,7 +703,7 @@ namespace IRaCIS.Core.Application.Contracts
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
            if (!currentUserList.Any(t => t.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator) ||
 | 
			
		||||
                !currentUserList.Any(t => t.UserTypeEnum == UserTypeEnum.SR))
 | 
			
		||||
                !currentUserList.Any(t => t.UserTypeEnum == UserTypeEnum.CRA))
 | 
			
		||||
            {
 | 
			
		||||
                throw new BusinessValidationFailedException(_localizer["TrialSiteSurvey_MissingAccount"]);
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,8 +36,6 @@ namespace IRaCIS.Core.Application.AutoMapper
 | 
			
		|||
           
 | 
			
		||||
            var isEn_Us = false;
 | 
			
		||||
            CreateMap<TrialSiteUserSurvey, TrialSiteUserSurveyView>()
 | 
			
		||||
              .ForMember(t => t.TrialRoleName, u => u.MapFrom(d => isEn_Us? d.TrialRoleName.Value:d.TrialRoleName.ValueCN))
 | 
			
		||||
             .ForMember(t => t.TrialRoleCode, u => u.MapFrom(d =>  d.TrialRoleName.Code))
 | 
			
		||||
              .ForMember(d => d.UserType, u => u.MapFrom(s => s.UserTypeRole.UserTypeShortName))
 | 
			
		||||
               .ForMember(d => d.UserTypeEnum, u => u.MapFrom(s => s.UserTypeRole.UserTypeEnum));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -70,7 +68,6 @@ namespace IRaCIS.Core.Application.AutoMapper
 | 
			
		|||
 | 
			
		||||
            CreateMap<TrialSiteUserSurvey, TrialSiteUserSurveyAllDTO>()
 | 
			
		||||
                .ForMember(t=>t.TrialSiteSurvey,u=>u.MapFrom(c=>c.TrialSiteSurvey))
 | 
			
		||||
                 .ForMember(t => t.TrialRoleName, u => u.MapFrom(d => d.TrialRoleName.Value))
 | 
			
		||||
             .ForMember(d => d.UserType, u => u.MapFrom(s => s.UserTypeRole.UserTypeShortName))
 | 
			
		||||
             .ForMember(d => d.UserTypeEnum, u => u.MapFrom(s => s.UserTypeRole.UserTypeEnum));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,7 +21,5 @@ namespace IRaCIS.Core.Application.Interfaces
 | 
			
		|||
          Task<IResponseOutput> DeleteTrialExternalUser(Guid trialExternalUserId, bool isSystemUser,
 | 
			
		||||
             Guid systemUserId);
 | 
			
		||||
 | 
			
		||||
		Task<IResponseOutput> UserConfirmJoinTrial(Guid trialId, Guid trialExternalUserId);
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
} 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -292,532 +292,5 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        #region 老版本流程  现在废弃
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 勾选用户 批量发送邮件 
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        [HttpPost]
 | 
			
		||||
        public async Task<IResponseOutput> SendInviteEmail(TrialExternalUserSendEmail sendEmail)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            var trialInfo = await _repository.FirstOrDefaultAsync<Trial>(t => t.Id == 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 = $"[{trialInfo.ResearchProgramNo}] 邀请";
 | 
			
		||||
 | 
			
		||||
                //var baseApiUrl = sendEmail.BaseUrl.Remove(sendEmail.BaseUrl.IndexOf("#")) + "api";
 | 
			
		||||
 | 
			
		||||
                var builder = new BodyBuilder();
 | 
			
		||||
 | 
			
		||||
                var sysUserInfo = (await _userRepository.Where(t => t.Id == userInfo.SystemUserId).FirstOrDefaultAsync()).IfNullThrowException();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                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相关工作,欢迎您提供指导和建议,非常感谢!
 | 
			
		||||
                                                          _localizer["TrialExternalUser_IRCInvitation", trialInfo.ResearchProgramNo]
 | 
			
		||||
                                                           }
 | 
			
		||||
                                           
 | 
			
		||||
                                          </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>   
 | 
			
		||||
                                        </div>櫭
 | 
			
		||||
                                      </div>
 | 
			
		||||
                                    </body>";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                //< form action = '#' method = 'post' >
 | 
			
		||||
 | 
			
		||||
                //                    < button type = 'submit' 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;border:none;margin-bottom: 100px;cursor: pointer' > 查看并确认 </ button >
 | 
			
		||||
 | 
			
		||||
                //                    </ form >
 | 
			
		||||
                messageToSend.Body = builder.ToMessageBody();
 | 
			
		||||
 | 
			
		||||
                using (var smtp = new MailKit.Net.Smtp.SmtpClient())
 | 
			
		||||
                {
 | 
			
		||||
                    smtp.MessageSent += (sender, args) =>
 | 
			
		||||
                    {
 | 
			
		||||
 | 
			
		||||
                        _ = _trialExternalUseRepository.BatchUpdateNoTrackingAsync(t => t.Id == userInfo.Id, u => new TrialExternalUser() { InviteState = TrialExternalUserStateEnum.HasSend, ConfirmTime = null, RejectReason = String.Empty, ExpireTime = DateTime.Now.AddDays(7) }).Result;
 | 
			
		||||
 | 
			
		||||
                    };
 | 
			
		||||
 | 
			
		||||
                    smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;
 | 
			
		||||
 | 
			
		||||
                    await smtp.ConnectAsync("smtp.163.com", 465, SecureSocketOptions.StartTls);
 | 
			
		||||
 | 
			
		||||
                    await smtp.AuthenticateAsync("iracis_grr@163.com", "XLWVQKZAEKLDWOAH");
 | 
			
		||||
 | 
			
		||||
                    await smtp.SendAsync(messageToSend);
 | 
			
		||||
 | 
			
		||||
                    await smtp.DisconnectAsync(true);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return ResponseOutput.Ok();
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///  不带Token 访问  用户选择   参与  不参与    Id:  TrialExternalUserId   加入发送邮件
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="editTrialUserPreparation"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        [AllowAnonymous]
 | 
			
		||||
        public async Task<IResponseOutput> TrialExternalUserJoinTrial(TrialExternalUserConfirm editTrialUserPreparation)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            var needUpdate = await _trialExternalUseRepository.FirstOrDefaultAsync(t => t.Id == editTrialUserPreparation.Id);
 | 
			
		||||
 | 
			
		||||
            if (DateTime.Now > needUpdate.ExpireTime)
 | 
			
		||||
            {
 | 
			
		||||
                //---邀请加入时间已过期,重新被邀请后才可以进行确认操作
 | 
			
		||||
                return ResponseOutput.NotOk(_localizer["TrialExternalUser_InvitationExpired"]);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            _mapper.Map(editTrialUserPreparation, needUpdate);
 | 
			
		||||
 | 
			
		||||
            needUpdate.InviteState = editTrialUserPreparation.IsJoin == true ? TrialExternalUserStateEnum.UserConfirmed : TrialExternalUserStateEnum.UserReject;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var trialId = needUpdate.TrialId;
 | 
			
		||||
            var userId = needUpdate.SystemUserId;
 | 
			
		||||
 | 
			
		||||
            //判断TrialUser中是否存在  不存在就插入
 | 
			
		||||
            if (!await _trialUserRepository.AnyAsync(t => t.TrialId == trialId && t.UserId == userId))
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                await _trialUserRepository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId, JoinTime = DateTime.Now });
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var success = await _trialExternalUseRepository.SaveChangesAsync();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            if (editTrialUserPreparation.IsJoin == true)
 | 
			
		||||
            {
 | 
			
		||||
                var trialInfo = await _repository.FirstOrDefaultAsync<Trial>(t => t.Id == needUpdate.TrialId);
 | 
			
		||||
 | 
			
		||||
                var messageToSend = new MimeMessage();
 | 
			
		||||
                //发件地址
 | 
			
		||||
                messageToSend.From.Add(new MailboxAddress("GRR", "iracis_grr@163.com"));
 | 
			
		||||
                //收件地址
 | 
			
		||||
                messageToSend.To.Add(new MailboxAddress(String.Empty, needUpdate.Email));
 | 
			
		||||
                //主题
 | 
			
		||||
                //$"[来自展影IRC] [{trialInfo.ResearchProgramNo}] 账户信息";
 | 
			
		||||
                messageToSend.Subject = _localizer["TrialExternalUser_AccountInfo", trialInfo.ResearchProgramNo];
 | 
			
		||||
 | 
			
		||||
                var builder = new BodyBuilder();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                var sysUserInfo = (await _userRepository.Where(t => t.Id == needUpdate.SystemUserId).Include(t => t.UserTypeRole).FirstOrDefaultAsync()).IfNullThrowException();
 | 
			
		||||
 | 
			
		||||
                int verificationCode = new Random().Next(100000, 1000000);
 | 
			
		||||
 | 
			
		||||
                if (sysUserInfo.IsFirstAdd)
 | 
			
		||||
                {
 | 
			
		||||
                    await _userRepository.BatchUpdateNoTrackingAsync(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;padding-bottom:40px'>
 | 
			
		||||
                                          <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相关工作。该项目采用电子化工作流,系统及您的账号信息如下:                                                                                                                          
 | 
			
		||||
                    _localizer["TrialExternalUser_Welcome", trialInfo.ResearchProgramNo]
 | 
			
		||||
                    }
 | 
			
		||||
                                                  
 | 
			
		||||
                                          </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}                                                                                                                
 | 
			
		||||
                    _localizer["TrialExternalUser_ProjectNumber", trialInfo.TrialCode]
 | 
			
		||||
                    }
 | 
			
		||||
                                            </div>
 | 
			
		||||
                                            <div>
 | 
			
		||||
                                            
 | 
			
		||||
{
 | 
			
		||||
                    //      试验方案号: {trialInfo.ResearchProgramNo}                                                                                                        
 | 
			
		||||
                    _localizer["TrialExternalUser_ExperimentPlanNumber", trialInfo.ResearchProgramNo]
 | 
			
		||||
                    }
 | 
			
		||||
                                            </div>
 | 
			
		||||
                                            <div>
 | 
			
		||||
                                            
 | 
			
		||||
{
 | 
			
		||||
                    //       试验名称: {trialInfo.ExperimentName}                                                                                                    
 | 
			
		||||
                    _localizer["TrialExternalUser_ExperimentName", trialInfo.ExperimentName]
 | 
			
		||||
                    }
 | 
			
		||||
                                            </div>
 | 
			
		||||
                                            <div>
 | 
			
		||||
                                          
 | 
			
		||||
{
 | 
			
		||||
                    //         用户名: {sysUserInfo.UserName}                                                                                             
 | 
			
		||||
                    _localizer["TrialExternalUser_Username", sysUserInfo.UserName]
 | 
			
		||||
                    }
 | 
			
		||||
                                            </div>
 | 
			
		||||
                                            <div>
 | 
			
		||||
 | 
			
		||||
                                             
 | 
			
		||||
{
 | 
			
		||||
                    //         密码: {(sysUserInfo.IsFirstAdd ? verificationCode.ToString() + "(请在登录后进行修改)" : "***(您已有账号, 若忘记密码, 请通过邮箱找回)")}                                                                                           
 | 
			
		||||
                    _localizer["TrialExternalUser_Password", verificationCode.ToString()]
 | 
			
		||||
                    }                                           
 | 
			
		||||
</div>
 | 
			
		||||
                                            <div>
 | 
			
		||||
                                            
 | 
			
		||||
{
 | 
			
		||||
                    //         角色: {sysUserInfo.UserTypeRole.UserTypeShortName}                                                                                          
 | 
			
		||||
                    _localizer["TrialExternalUser_Role", sysUserInfo.UserTypeRole.UserTypeShortName]
 | 
			
		||||
                    }  
 | 
			
		||||
                                            </div>
 | 
			
		||||
                                            <div>
 | 
			
		||||
                                              系统登录地址: {editTrialUserPreparation.BaseUrl} 
 | 
			
		||||
{
 | 
			
		||||
                    //         系统登录地址: {editTrialUserPreparation.BaseUrl}                                                                                     
 | 
			
		||||
                    _localizer["TrialExternalUser_LoginUrl", 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", 465, SecureSocketOptions.StartTls);
 | 
			
		||||
 | 
			
		||||
                    await smtp.AuthenticateAsync("iracis_grr@163.com", "XLWVQKZAEKLDWOAH");
 | 
			
		||||
 | 
			
		||||
                    await smtp.SendAsync(messageToSend);
 | 
			
		||||
 | 
			
		||||
                    await smtp.DisconnectAsync(true);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                await _userRepository.BatchUpdateNoTrackingAsync(t => t.Id == userId, u => new User() { Status = UserStateEnum.Enable });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            return ResponseOutput.Ok();
 | 
			
		||||
 | 
			
		||||
            //else
 | 
			
		||||
            //{
 | 
			
		||||
            //    builder.HtmlBody = @$"<body style='font-family: 微软雅黑;padding: 0;margin: 0;'>
 | 
			
		||||
            //                              <div style='padding-left: 40px;background: #f6f6f6'>
 | 
			
		||||
            //                                <div style='padding-top: 20px;padding-bottom:40px'>
 | 
			
		||||
            //                                  <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.UserTypeRole.UserTypeShortName}
 | 
			
		||||
            //                                    </div>                                              
 | 
			
		||||
            //                                  </div>
 | 
			
		||||
            //                                </div>
 | 
			
		||||
            //                              </div>
 | 
			
		||||
            //                            </body>";
 | 
			
		||||
            //}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///  不带Token 访问  Site调研用户 加入项目   Id:  TrialSiteSurveyUserId
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="editInfo"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        [AllowAnonymous]
 | 
			
		||||
        public async Task<IResponseOutput> TrialSiteSurveyUserJoinTrial(TrialExternalUserConfirm editInfo)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            var needUpdate = (await _trialSiteSurveyUserRepository.Where(t => t.Id == editInfo.Id, true).Include(t => t.TrialSiteSurvey).FirstOrDefaultAsync()).IfNullThrowException();
 | 
			
		||||
 | 
			
		||||
            var revieweUser = await _userRepository.FirstOrDefaultAsync(t => t.Id == needUpdate.TrialSiteSurvey.ReviewerUserId);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            if (DateTime.Now > needUpdate.ExpireTime)
 | 
			
		||||
            {
 | 
			
		||||
                //---邀请加入时间已过期,重新被邀请后才可以进行确认操作
 | 
			
		||||
                return ResponseOutput.NotOk(_localizer["TrialExternalUser_InvitationExpired"]);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            _mapper.Map(editInfo, needUpdate);
 | 
			
		||||
 | 
			
		||||
            needUpdate.InviteState = editInfo.IsJoin == true ? TrialSiteUserStateEnum.UserConfirmed : TrialSiteUserStateEnum.UserReject;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            if (needUpdate.SystemUserId == null)
 | 
			
		||||
            {
 | 
			
		||||
                //---调研表系统用户Id 存储有问题
 | 
			
		||||
                return ResponseOutput.NotOk(_localizer["TrialExternalUser_UserIdStorageProblem"]);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var trialId = needUpdate.TrialSiteSurvey.TrialId;
 | 
			
		||||
            var siteId = needUpdate.TrialSiteSurvey.SiteId;
 | 
			
		||||
            var userId = (Guid)needUpdate.SystemUserId;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            if (!await _trialUserRepository.AnyAsync(t => t.TrialId == trialId && t.UserId == userId))
 | 
			
		||||
            {
 | 
			
		||||
                await _trialUserRepository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId, JoinTime = DateTime.Now });
 | 
			
		||||
 | 
			
		||||
                await _trialSiteUserRepository.AddAsync(new TrialSiteUser() { TrialId = trialId, SiteId = siteId, UserId = userId });
 | 
			
		||||
 | 
			
		||||
                await _userRepository.BatchUpdateNoTrackingAsync(t => t.Id == needUpdate.SystemUserId, u => new User() { Status = UserStateEnum.Enable });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var success = await _trialExternalUseRepository.SaveChangesAsync();
 | 
			
		||||
 | 
			
		||||
            var trialInfo = await _repository.FirstOrDefaultAsync<Trial>(t => t.Id == needUpdate.TrialSiteSurvey.TrialId);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var messageToSend = new MimeMessage();
 | 
			
		||||
            //发件地址
 | 
			
		||||
            messageToSend.From.Add(new MailboxAddress("GRR", "iracis_grr@163.com"));
 | 
			
		||||
            //收件地址
 | 
			
		||||
            messageToSend.To.Add(new MailboxAddress(String.Empty, editInfo.IsJoin == true ? needUpdate.Email : revieweUser.EMail));
 | 
			
		||||
            //主题
 | 
			
		||||
            // $"[来自展影IRC] [{trialInfo.ResearchProgramNo}] 账户信息";
 | 
			
		||||
            messageToSend.Subject = _localizer["TrialExternalUser_IRCAccountInfo", trialInfo.ResearchProgramNo];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var builder = new BodyBuilder();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            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.BatchUpdateNoTrackingAsync(t => t.Id == sysUserInfo.Id,
 | 
			
		||||
                    u => new User() { Password = MD5Helper.Md5(verificationCode.ToString()) });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (editInfo.IsJoin == true)
 | 
			
		||||
            {
 | 
			
		||||
                builder.HtmlBody = @$"<body style='font-family: 微软雅黑;padding: 0;margin: 0;'>
 | 
			
		||||
                                      <div style='padding-left: 40px;background: #f6f6f6'>
 | 
			
		||||
                                        <div style='padding-top: 20px;padding-bottom:40px'>
 | 
			
		||||
                                          <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", 465, SecureSocketOptions.StartTls);
 | 
			
		||||
 | 
			
		||||
                    await smtp.AuthenticateAsync("iracis_grr@163.com", "XLWVQKZAEKLDWOAH");
 | 
			
		||||
 | 
			
		||||
                    await smtp.SendAsync(messageToSend);
 | 
			
		||||
 | 
			
		||||
                    await smtp.DisconnectAsync(true);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            //else
 | 
			
		||||
            //{
 | 
			
		||||
 | 
			
		||||
            //    builder.HtmlBody = @$"<body style='font-family: 微软雅黑;padding: 0;margin: 0;'>
 | 
			
		||||
            //                              <div style='padding-left: 40px;background: #f6f6f6'>
 | 
			
		||||
            //                                <div style='padding-top: 20px;padding-bottom:40px'>
 | 
			
		||||
            //                                  <div style='line-height: 40px;font-size: 18px'>
 | 
			
		||||
            //                                    {revieweUser.LastName + "/" + revieweUser.FirstName}:                                              
 | 
			
		||||
            //                                  </div>
 | 
			
		||||
            //                                  <div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
 | 
			
		||||
            //                                   您好,{sysUserInfo.LastName + "/" + sysUserInfo.FirstName} 拒绝了参加 {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.UserTypeRole.UserTypeShortName}
 | 
			
		||||
            //                                    </div> 
 | 
			
		||||
            //                                    <div>
 | 
			
		||||
            //                                      拒绝原因: {editInfo.RejectReason}
 | 
			
		||||
            //                                    </div>   
 | 
			
		||||
            //                                  </div>
 | 
			
		||||
            //                                </div>
 | 
			
		||||
            //                              </div>
 | 
			
		||||
            //                            </body>";
 | 
			
		||||
 | 
			
		||||
            //}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            return ResponseOutput.Ok();
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 不带Token 访问   页面获取项目基本信息  和参与情况 (已经确认了 就不允许再次确认)  Id:  TrialExternalUserId/TrialSiteSurveyUserId  
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="id"></param>
 | 
			
		||||
        /// <param name="isExternalUser"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        [AllowAnonymous]
 | 
			
		||||
        public async Task<TrialInfoWithPreparationInfo> JoinBasicInfo(Guid id, bool isExternalUser)
 | 
			
		||||
        {
 | 
			
		||||
            if (isExternalUser)
 | 
			
		||||
            {
 | 
			
		||||
                return (await _trialExternalUseRepository.Where(t => t.Id == id)
 | 
			
		||||
                    .ProjectTo<TrialInfoWithPreparationInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                return (await _trialSiteSurveyUserRepository.Where(t => t.Id == id)
 | 
			
		||||
                    .ProjectTo<TrialInfoWithPreparationInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 加入项目    
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="trialId"></param>
 | 
			
		||||
        /// <param name="trialExternalUserId"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        [HttpGet("{trialId:guid}/{trialExternalUserId:guid}")]
 | 
			
		||||
        [NonDynamicMethod]
 | 
			
		||||
        public async Task<IResponseOutput> UserConfirmJoinTrial(Guid trialId, Guid trialExternalUserId)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            var externalUser = await _trialExternalUseRepository.FirstOrDefaultAsync(t => t.Id == trialExternalUserId);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            //判断TrialUser中是否存在  不存在就插入
 | 
			
		||||
            if (!await _repository.AnyAsync<TrialUser>(t => t.TrialId == trialId && t.UserId == externalUser.SystemUserId))
 | 
			
		||||
            {
 | 
			
		||||
                await _repository.AddAsync(new TrialUser() { TrialId = trialId, UserId = (Guid)externalUser.SystemUserId, JoinTime = DateTime.Now });
 | 
			
		||||
 | 
			
		||||
                await _trialExternalUseRepository.BatchUpdateNoTrackingAsync(t => t.Id == trialExternalUserId,
 | 
			
		||||
                    u => new TrialExternalUser() { InviteState = TrialExternalUserStateEnum.UserConfirmed });
 | 
			
		||||
 | 
			
		||||
                await _userRepository.BatchUpdateNoTrackingAsync(t => t.Id == externalUser.SystemUserId, u => new User() { Status = UserStateEnum.Enable });
 | 
			
		||||
 | 
			
		||||
                await _userRepository.SaveChangesAsync();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            return ResponseOutput.Ok();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -288,7 +288,6 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
                .ForMember(t => t.TrialSiteUserList, u => u.Ignore());
 | 
			
		||||
 | 
			
		||||
            CreateMap<TrialSiteUserSurvey, TrialSiteUserSummaryDto>()
 | 
			
		||||
                .ForMember(t => t.TrialRoleName, u => u.MapFrom(d => d.TrialRoleName.Value))
 | 
			
		||||
                .ForMember(d => d.UserType, u => u.MapFrom(s => s.UserTypeRole.UserTypeShortName))
 | 
			
		||||
                .ForMember(d => d.UserTypeEnum, u => u.MapFrom(s => s.UserTypeRole.UserTypeEnum))
 | 
			
		||||
                .ForMember(t => t.TrialSiteCode, u => u.MapFrom(d => d.TrialSiteSurvey.TrialSite.TrialSiteCode))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue