diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index c3d841284..c6e7bd631 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -15465,6 +15465,45 @@ + + + 初始登陆界面 项目基本信息+下拉框数据 + + + + + + + 实际这里只会是更新 添加在login的时候做了 + + + + + + + 项目Site调研用户列表 所有site的调研用户 最新的调研表的记录的用户 new + + + + + + 获取 项目 site的调研记录 New + + + + + + 驳回 New + + + + + + 调研表废除 + + + + 验证后 如果数据库该项目不存在该邮箱 那么就插入记录 存在 @@ -15480,45 +15519,6 @@ - - - 实际这里只会是更新 添加在login的时候做了 - - - - - - - 删除调研表 - - - - - - - 获取 项目 site的调研记录 New - - - - - - 项目Site调研用户列表 所有site的调研用户 最新的调研表的记录的用户 new - - - - - - 初始登陆界面 项目基本信息+下拉框数据 - - - - - - - 驳回 New - - - 提交 后台自动识别是谁提交 diff --git a/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs b/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs index 4bd6c214b..c402e1f3d 100644 --- a/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs +++ b/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs @@ -206,6 +206,11 @@ namespace IRaCIS.Application.Contracts } + public class UserBasicInfoCommand : UserInfo + { + public Guid Id { get; set; } + } + public class UserCommand : UserInfo { public Guid? Id { get; set; } @@ -218,7 +223,7 @@ namespace IRaCIS.Application.Contracts } - public class IdentityUserTypeDTO: UserAddUserType + public class IdentityUserTypeDTO : UserAddUserType { public Guid Id { get; set; } public string UserTypeShortName { get; set; } @@ -237,7 +242,7 @@ namespace IRaCIS.Application.Contracts public bool IsUserRoleDisabled { get; set; } - + } public class EditPasswordCommand diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs index ecbc4d59a..edda8af69 100644 --- a/IRaCIS.Core.Application/Service/Management/UserService.cs +++ b/IRaCIS.Core.Application/Service/Management/UserService.cs @@ -479,47 +479,6 @@ namespace IRaCIS.Core.Application.Service .WhereIf(inQuery.IsZhiZhun != null, t => t.IsZhiZhun == inQuery.IsZhiZhun) .ProjectTo(_mapper.ConfigurationProvider); - - //var userQueryable = _identityUserRepository.Where(x => x.UserTypeEnum != UserTypeEnum.SuperAdmin) - // .WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserName), t => t.UserName.Contains(inQuery.UserName)) - // .WhereIf(!string.IsNullOrWhiteSpace(inQuery.RealName), t => t.FullName.Contains(inQuery.RealName)) - // .WhereIf(!string.IsNullOrWhiteSpace(inQuery.Phone), t => t.Phone.Contains(inQuery.Phone)) - // .WhereIf(!string.IsNullOrWhiteSpace(inQuery.OrganizationName), t => t.OrganizationName.Contains(inQuery.OrganizationName)) - // .WhereIf(!string.IsNullOrWhiteSpace(inQuery.EMail), t => t.EMail.Contains(inQuery.EMail)) - // .WhereIf(inQuery.BeginCreateTime != null, t => t.CreateTime >= inQuery.BeginCreateTime) - // .WhereIf(inQuery.EndCreateTime != null, t => t.CreateTime <= inQuery.EndCreateTime) - // .WhereIf(inQuery.BeginLastLoginTime != null, t => t.LastLoginTime >= inQuery.BeginLastLoginTime) - // .WhereIf(inQuery.EndLastLoginTime != null, t => t.LastLoginTime <= inQuery.EndLastLoginTime) - // .WhereIf(inQuery.UserType != null, t => t.UserTypeId == inQuery.UserType) - // .WhereIf(inQuery.UserState != null, t => t.Status == inQuery.UserState) - // .WhereIf(inQuery.IsTestUser != null, t => t.IsTestUser == inQuery.IsTestUser) - // .WhereIf(inQuery.IsZhiZhun != null, t => t.IsZhiZhun == inQuery.IsZhiZhun) - // .GroupBy(t => t.IdentityUserId).Select(g => new UserListDTO() - // { - // IdentityUserId = g.Key, - // UserRoleList = g.Select(c => new UserAddUserType() - // { - // UserTypeEnum = c.UserTypeEnum, - // UserTypeId = c.UserTypeId, - // }).ToList(), - - // UserCode = g.FirstOrDefault().UserCode, - // DepartmentName = g.FirstOrDefault().DepartmentName, - // CreateTime = g.FirstOrDefault().CreateTime, - // EMail = g.FirstOrDefault().EMail, - // FirstName = g.FirstOrDefault().FirstName, - // IsTestUser = g.FirstOrDefault().IsTestUser, - // IsZhiZhun = g.FirstOrDefault().IsZhiZhun, - // LastName = g.FirstOrDefault().LastName, - // OrganizationName = g.FirstOrDefault().OrganizationName, - // FullName = g.FirstOrDefault().FullName, - // Phone = g.FirstOrDefault().Phone, - // PositionName = g.FirstOrDefault().PositionName, - // Sex = g.FirstOrDefault().Sex, - // Status = g.FirstOrDefault().Status, - // UserName = g.FirstOrDefault().UserName, - // }); - return await userQueryable.ToPagedListAsync(inQuery); } @@ -671,7 +630,7 @@ namespace IRaCIS.Core.Application.Service { var find = user.UserRoleList.FirstOrDefault(t => t.UserTypeEnum == role.UserTypeEnum && t.UserTypeId == role.UserTypeId); - if (find != null ) + if (find != null) { find.IsUserRoleDisabled = role.IsUserRoleDisabled; } @@ -696,6 +655,21 @@ namespace IRaCIS.Core.Application.Service } + [HttpPut] + public async Task UpdateUserBasicInfo(UserBasicInfoCommand command) + { + + var user = await _identityUserRepository.Where(t => t.Id == command.Id, true).FirstOrDefaultAsync(); + + if (user == null) return Null404NotFound(user); + + _mapper.Map(command, user); + + await _identityUserRepository.SaveChangesAsync(); + + return ResponseOutput.Ok(); + + } ///// ///// 禁用或者启用账户 @@ -1134,7 +1108,7 @@ namespace IRaCIS.Core.Application.Service { var jwt = _tokenService.GetToken(userTokenInfo); - + return jwt; } diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/Interface/ITrialSiteSurveyService.cs b/IRaCIS.Core.Application/Service/SiteSurvey/Interface/ITrialSiteSurveyService.cs index 211a5d897..28c0ac131 100644 --- a/IRaCIS.Core.Application/Service/SiteSurvey/Interface/ITrialSiteSurveyService.cs +++ b/IRaCIS.Core.Application/Service/SiteSurvey/Interface/ITrialSiteSurveyService.cs @@ -11,7 +11,7 @@ namespace IRaCIS.Core.Application.Contracts public interface ITrialSiteSurveyService { Task AddOrUpdateTrialSiteSurvey(TrialSiteSurveyAddOrEdit addOrEditTrialSiteSurvey); - Task DeleteTrialSiteSurvey(Guid trialSiteSurveyId); + //Task DeleteTrialSiteSurvey(Guid trialSiteSurveyId); Task GetSiteSurveyInfo(Guid trialSiteSurveyId, Guid trialId); Task> GetTrialSiteSurveyList(TrialSiteSurveyQueryDTO surveyQueryDTO); Task GetTrialSurveyInitInfo(Guid trialId); diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs index 099c4e1e9..fd06ada9f 100644 --- a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs +++ b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs @@ -26,6 +26,8 @@ using MassTransit; using DocumentFormat.OpenXml.Spreadsheet; using StackExchange.Redis; using Panda.DynamicWebApi.Attributes; +using IdentityModel; +using Microsoft.AspNetCore.Components.Routing; namespace IRaCIS.Core.Application.Contracts { @@ -78,6 +80,9 @@ namespace IRaCIS.Core.Application.Contracts return ResponseOutput.Ok(); } + + #region 多账户需要修改 + /// /// 通过UserId获取Doctorid /// @@ -172,6 +177,10 @@ namespace IRaCIS.Core.Application.Contracts } } + #endregion + + + /// /// 验证邮箱验证码 获取医生信息Id /// @@ -279,6 +288,211 @@ namespace IRaCIS.Core.Application.Contracts } + + + + #region 中心调研修改 + + /// + /// 初始登陆界面 项目基本信息+下拉框数据 + /// + /// + /// + [AllowAnonymous] + [HttpGet("{trialId:guid}")] + public async Task GetTrialSurveyInitInfo(Guid trialId) + { + var info = await _trialRepository.Where(t => t.Id == trialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException(); + + return info; + } + + /// + /// 实际这里只会是更新 添加在login的时候做了 + /// + /// + /// + [TrialGlobalLimit("AfterStopCannNotOpt")] + public async Task AddOrUpdateTrialSiteSurvey(TrialSiteSurveyAddOrEdit addOrEditTrialSiteSurvey) + { + + if (addOrEditTrialSiteSurvey.Id != null) + { + if (await _trialSiteSurveyRepository.AnyAsync(t => t.Id == addOrEditTrialSiteSurvey.Id && t.State == TrialSiteSurveyEnum.PMCreatedAndLock)) + { + //---中心调研已锁定,不允许操作。 + return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_Locked"]); + } + } + + + if (addOrEditTrialSiteSurvey.Id == null) + { + var entity = _mapper.Map(addOrEditTrialSiteSurvey); + await _trialSiteSurveyRepository.AddAsync(entity, true); + return ResponseOutput.Ok(entity.Id.ToString()); + } + else + { + + var entity = await _trialSiteSurveyRepository.Where(t => t.Id == addOrEditTrialSiteSurvey.Id, true).Include(x => x.ReviewerUser).Include(x => x.PreliminaryUser).FirstOrDefaultAsync(); + _mapper.Map(addOrEditTrialSiteSurvey, entity); + await _trialSiteSurveyRepository.SaveChangesAsync(); + + } + return ResponseOutput.Ok(true); + } + + + /// + /// 项目Site调研用户列表 所有site的调研用户 最新的调研表的记录的用户 new + /// + /// + public async Task> TrialSiteSurveyUserList(TrialSiteUserSurveyAllQuery inQuery) + { + + //找到该中心最新的调研记录 + var groupSelectIdQuery = + _trialSiteSurveyRepository.Where(t => t.TrialId == inQuery.TrialId) + .WhereIf(inQuery.TrialSiteId != null, t => t.TrialSiteId == inQuery.TrialSiteId) + + .WhereIf(!string.IsNullOrEmpty(inQuery.FormWriterKeyInfo), t => (t.UserName).Contains(inQuery.FormWriterKeyInfo) || t.Email.Contains(inQuery.FormWriterKeyInfo) || t.Phone.Contains(inQuery.FormWriterKeyInfo)) + .GroupBy(t => t.TrialSiteId) + .Select(g => g.OrderByDescending(u => u.CreateTime).Select(t => t.Id).First()); + + + var query = _trialSiteUserSurveyRepository + .Where(t => groupSelectIdQuery.Contains(t.TrialSiteSurveyId)) + .WhereIf(inQuery.TrialRoleCode != null, t => t.TrialRoleCode == inQuery.TrialRoleCode) + .WhereIf(inQuery.UserTypeId != null, t => t.UserTypeId == inQuery.UserTypeId) + .WhereIf(inQuery.IsGenerateAccount != null, t => t.IsGenerateAccount == inQuery.IsGenerateAccount) + .WhereIf(inQuery.State != null && inQuery.State != TrialSiteUserStateEnum.OverTime, t => t.InviteState == inQuery.State) + .WhereIf(!string.IsNullOrEmpty(inQuery.UserName), t => (t.LastName + " / " + t.FirstName).Contains(inQuery.UserName)) + .WhereIf(!string.IsNullOrEmpty(inQuery.OrganizationName), t => t.OrganizationName.Contains(inQuery.OrganizationName)) + + .ProjectTo(_mapper.ConfigurationProvider); + + return await query.ToPagedListAsync(inQuery); + + } + + /// + /// 获取 项目 site的调研记录 New + /// + /// + [HttpPost] + public async Task> GetTrialSiteSurveyList(TrialSiteSurveyQueryDTO inQuery) + { + var trialSiteSurveyQueryable = _trialSiteSurveyRepository.Where(t => t.TrialId == inQuery.TrialId).IgnoreQueryFilters() + .WhereIf(inQuery.TrialSiteId != null, t => t.TrialSiteId == inQuery.TrialSiteId) + .WhereIf(inQuery.IsDeleted != null, t => t.IsDeleted == inQuery.IsDeleted) + .WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserKeyInfo), t => t.UserName.Contains(inQuery.UserKeyInfo) || t.Phone.Contains(inQuery.UserKeyInfo) || t.Email.Contains(inQuery.UserKeyInfo)) + .WhereIf(inQuery.State != null, t => t.State == inQuery.State) + .WhereIf(inQuery.UpdateTimeBegin != null, t => t.UpdateTime >= inQuery.UpdateTimeBegin) + .WhereIf(inQuery.UpdateTimeEnd != null, t => t.UpdateTime <= inQuery.UpdateTimeEnd) + + .ProjectTo(_mapper.ConfigurationProvider, new { isEn_Us = _userInfo.IsEn_Us }) + .WhereIf(!string.IsNullOrWhiteSpace(inQuery.PreliminaryUserName), t => t.PreliminaryUser.RealName.Contains(inQuery.PreliminaryUserName)) + .WhereIf(!string.IsNullOrWhiteSpace(inQuery.ReviewerUserName), t => t.ReviewerUser.RealName.Contains(inQuery.ReviewerUserName)) + ; + + return await trialSiteSurveyQueryable.ToPagedListAsync(inQuery); + } + + [HttpPost] + public async Task> GetTrialSiteSurveySelectList(TrialSiteSurveySelectquery inQuery) + { + var trialSiteSurveyQueryable = _trialSiteSurveyRepository + .Where(t => t.Id != inQuery.TrialSiteSurveyId) + .Where(t => t.TrialId == inQuery.TrialId && t.TrialSiteId == inQuery.TrialSiteId).IgnoreQueryFilters() + .ProjectTo(_mapper.ConfigurationProvider); + + return await trialSiteSurveyQueryable.ToListAsync(); + } + /// + /// 驳回 New + /// + /// + [TrialGlobalLimit("AfterStopCannNotOpt")] + + public async Task SubmissionRejection(TrialSiteSubmitBackCommand trialSiteSubmitBackCommand, [FromServices] IMailVerificationService _IMailVerificationService) + { + var trialSiteSurveyId = trialSiteSubmitBackCommand.TrialSiteSurveyId; + + var survey = await _trialSiteSurveyRepository.FirstOrDefaultAsync(t => t.Id == trialSiteSurveyId); + + survey.LatestBackReason = trialSiteSubmitBackCommand.LatestBackReason; + + + if (await _trialSiteSurveyRepository.AnyAsync(t => t.State == TrialSiteSurveyEnum.PMCreatedAndLock && t.Id == trialSiteSurveyId)) + { + //---中心调研已锁定,不允许操作。 + return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_Locked"]); + } + if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM) + { + survey.State = TrialSiteSurveyEnum.ToSubmit; + } + else if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM) + { + var isTrialSPMJoin = await _trialRepository.AnyAsync(t => t.Id == trialSiteSubmitBackCommand.TrialId && t.IsSPMJoinSiteSurvey); + var hasSPMOrCPM = await _trialSiteSurveyRepository.AnyAsync(t => t.TrialId == trialSiteSubmitBackCommand.TrialId && t.Trial.TrialUserList.Any(u => u.UserRole.UserTypeEnum == UserTypeEnum.SPM || u.UserRole.UserTypeEnum == UserTypeEnum.CPM)); + + var isSPMjoin = isTrialSPMJoin && hasSPMOrCPM; + + if (isSPMjoin) + { + survey.State = TrialSiteSurveyEnum.CRCSubmitted; + + survey.ReviewerUserId = null; + survey.ReviewerTime = null; + } + else + { + survey.State = TrialSiteSurveyEnum.ToSubmit; + + survey.PreliminaryUserId = null; + survey.ReviewerUserId = null; + survey.PreliminaryTime = null; + survey.ReviewerTime = null; + + + } + } + + await _trialSiteSurveyRepository.SaveChangesAsync(); + + return ResponseOutput.Ok(); + } + + /// + /// 调研表废除 + /// + /// + /// + [HttpPut("{trialId:guid}/{trialSiteSurveyId:guid}")] + [TrialGlobalLimit("AfterStopCannNotOpt")] + + public async Task AbandonSiteSurvey(Guid trialSiteSurveyId) + { + var survey = (await _trialSiteSurveyRepository.FirstOrDefaultAsync(t => t.Id == trialSiteSurveyId, true)).IfNullThrowException(); + + if (survey.State != TrialSiteSurveyEnum.ToSubmit) + { + //---只允许废除未提交的记录。 + return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_CancelUnsubmittedRecord"]); + } + + survey.IsDeleted = true; + + await _trialSiteSurveyRepository.SaveChangesAsync(); + + return ResponseOutput.Ok(); + + } + + #endregion + /// /// 验证后 如果数据库该项目不存在该邮箱 那么就插入记录 存在 /// @@ -465,6 +679,7 @@ namespace IRaCIS.Core.Application.Contracts foreach (var item in userList) { var find = existList.FirstOrDefault(t => t.SystemUserId == item.SystemUserId); + //不存在就加入 if (find == null) { @@ -512,252 +727,7 @@ namespace IRaCIS.Core.Application.Contracts } - /// - /// 实际这里只会是更新 添加在login的时候做了 - /// - /// - /// - [TrialGlobalLimit("AfterStopCannNotOpt")] - public async Task AddOrUpdateTrialSiteSurvey(TrialSiteSurveyAddOrEdit addOrEditTrialSiteSurvey) - { - if (addOrEditTrialSiteSurvey.Id != null) - { - if (await _trialSiteSurveyRepository.AnyAsync(t => t.Id == addOrEditTrialSiteSurvey.Id && t.State == TrialSiteSurveyEnum.PMCreatedAndLock)) - { - //---中心调研已锁定,不允许操作。 - return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_Locked"]); - } - } - - - if (addOrEditTrialSiteSurvey.Id == null) - { - var entity = _mapper.Map(addOrEditTrialSiteSurvey); - await _trialSiteSurveyRepository.AddAsync(entity, true); - return ResponseOutput.Ok(entity.Id.ToString()); - } - else - { - - var entity = await _trialSiteSurveyRepository.Where(t => t.Id == addOrEditTrialSiteSurvey.Id, true).Include(x => x.ReviewerUser).Include(x => x.PreliminaryUser).FirstOrDefaultAsync(); - _mapper.Map(addOrEditTrialSiteSurvey, entity); - await _trialSiteSurveyRepository.SaveChangesAsync(); - - } - return ResponseOutput.Ok(true); - } - - - /// - /// 删除调研表 - /// - /// - /// - [HttpDelete("{trialSiteSurveyId:guid}/{trialId:guid}")] - public async Task DeleteTrialSiteSurvey(Guid trialSiteSurveyId) - { - - if (await _trialSiteSurveyRepository.AnyAsync(t => t.Id == trialSiteSurveyId && t.State == TrialSiteSurveyEnum.PMCreatedAndLock)) - { - //---中心调研已锁定,不允许操作。 - return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_Locked"]); - } - - var success = await _trialSiteSurveyRepository.BatchDeleteNoTrackingAsync(t => t.Id == trialSiteSurveyId); - - return ResponseOutput.Result(success); - } - - - /// - /// 获取 项目 site的调研记录 New - /// - /// - [HttpPost] - public async Task> GetTrialSiteSurveyList(TrialSiteSurveyQueryDTO inQuery) - { - var trialSiteSurveyQueryable = _trialSiteSurveyRepository.Where(t => t.TrialId == inQuery.TrialId).IgnoreQueryFilters() - .WhereIf(inQuery.TrialSiteId != null, t => t.TrialSiteId == inQuery.TrialSiteId) - .WhereIf(inQuery.IsDeleted != null, t => t.IsDeleted == inQuery.IsDeleted) - .WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserKeyInfo), t => t.UserName.Contains(inQuery.UserKeyInfo) || t.Phone.Contains(inQuery.UserKeyInfo) || t.Email.Contains(inQuery.UserKeyInfo)) - .WhereIf(inQuery.State != null, t => t.State == inQuery.State) - .WhereIf(inQuery.UpdateTimeBegin != null, t => t.UpdateTime >= inQuery.UpdateTimeBegin) - .WhereIf(inQuery.UpdateTimeEnd != null, t => t.UpdateTime <= inQuery.UpdateTimeEnd) - - .ProjectTo(_mapper.ConfigurationProvider, new { isEn_Us = _userInfo.IsEn_Us }) - .WhereIf(!string.IsNullOrWhiteSpace(inQuery.PreliminaryUserName), t => t.PreliminaryUser.RealName.Contains(inQuery.PreliminaryUserName)) - .WhereIf(!string.IsNullOrWhiteSpace(inQuery.ReviewerUserName), t => t.ReviewerUser.RealName.Contains(inQuery.ReviewerUserName)) - ; - - return await trialSiteSurveyQueryable.ToPagedListAsync(inQuery); - } - - [HttpPost] - public async Task> GetTrialSiteSurveySelectList(TrialSiteSurveySelectquery inQuery) - { - var trialSiteSurveyQueryable = _trialSiteSurveyRepository - .Where(t => t.Id != inQuery.TrialSiteSurveyId) - .Where(t => t.TrialId == inQuery.TrialId && t.TrialSiteId == inQuery.TrialSiteId).IgnoreQueryFilters() - .ProjectTo(_mapper.ConfigurationProvider); - - return await trialSiteSurveyQueryable.ToListAsync(); - } - - /// - /// 项目Site调研用户列表 所有site的调研用户 最新的调研表的记录的用户 new - /// - /// - public async Task> TrialSiteSurveyUserList(TrialSiteUserSurveyAllQuery inQuery) - { - - - var groupSelectIdQuery = - _trialSiteSurveyRepository.Where(t => t.TrialId == inQuery.TrialId) - .WhereIf(inQuery.TrialSiteId != null, t => t.TrialSiteId == inQuery.TrialSiteId) - - .WhereIf(!string.IsNullOrEmpty(inQuery.FormWriterKeyInfo), t => (t.UserName).Contains(inQuery.FormWriterKeyInfo) || t.Email.Contains(inQuery.FormWriterKeyInfo) || t.Phone.Contains(inQuery.FormWriterKeyInfo)) - .GroupBy(t => t.TrialSiteId) - .Select(g => g.OrderByDescending(u => u.CreateTime).Select(t => t.Id).First()); - - - var query = _trialSiteUserSurveyRepository - .Where(t => groupSelectIdQuery.Contains(t.TrialSiteSurveyId)) - .WhereIf(inQuery.TrialRoleCode != null, t => t.TrialRoleCode == inQuery.TrialRoleCode) - .WhereIf(inQuery.UserTypeId != null, t => t.UserTypeId == inQuery.UserTypeId) - .WhereIf(inQuery.IsGenerateAccount != null, t => t.IsGenerateAccount == inQuery.IsGenerateAccount) - .WhereIf(inQuery.State != null && inQuery.State != TrialSiteUserStateEnum.OverTime, t => t.InviteState == inQuery.State) - .WhereIf(!string.IsNullOrEmpty(inQuery.UserName), t => (t.LastName + " / " + t.FirstName).Contains(inQuery.UserName)) - .WhereIf(!string.IsNullOrEmpty(inQuery.OrganizationName), t => t.OrganizationName.Contains(inQuery.OrganizationName)) - - .ProjectTo(_mapper.ConfigurationProvider); - - - return await query.ToPagedListAsync(inQuery); - - - - - //return await query.ToPagedListAsync(queryParam.PageIndex, queryParam.PageSize, queryParam.SortField, queryParam.Asc); - } - - - - /// - /// 初始登陆界面 项目基本信息+下拉框数据 - /// - /// - /// - [AllowAnonymous] - [HttpGet("{trialId:guid}")] - public async Task GetTrialSurveyInitInfo(Guid trialId) - { - var info = await _trialRepository.Where(t => t.Id == trialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException(); - - return info; - } - - - /// - /// 驳回 New - /// - /// - [TrialGlobalLimit("AfterStopCannNotOpt")] - - public async Task SubmissionRejection(TrialSiteSubmitBackCommand trialSiteSubmitBackCommand, [FromServices] IMailVerificationService _IMailVerificationService) - { - var trialSiteSurveyId = trialSiteSubmitBackCommand.TrialSiteSurveyId; - - var survey = await _trialSiteSurveyRepository.FirstOrDefaultAsync(t => t.Id == trialSiteSurveyId); - - survey.LatestBackReason = trialSiteSubmitBackCommand.LatestBackReason; - - //User? user = null; - - //var messageToSend = new MimeMessage(); - - - if (await _trialSiteSurveyRepository.AnyAsync(t => t.State == TrialSiteSurveyEnum.PMCreatedAndLock && t.Id == trialSiteSurveyId)) - { - //---中心调研已锁定,不允许操作。 - return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_Locked"]); - } - if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM) - { - - ////SPM 给填表人发 - //messageToSend.To.Add(new MailboxAddress(String.Empty, survey.Email)); - - survey.State = TrialSiteSurveyEnum.ToSubmit; - } - else if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM) - { - var isTrialSPMJoin = await _trialRepository.AnyAsync(t => t.Id == trialSiteSubmitBackCommand.TrialId && t.IsSPMJoinSiteSurvey); - var hasSPMOrCPM = await _trialSiteSurveyRepository.AnyAsync(t => t.TrialId == trialSiteSubmitBackCommand.TrialId && t.Trial.TrialUserList.Any(u => u.UserRole.UserTypeEnum == UserTypeEnum.SPM || u.UserRole.UserTypeEnum == UserTypeEnum.CPM)); - - var isSPMjoin = isTrialSPMJoin && hasSPMOrCPM; - - if (isSPMjoin) - { - - ////PM 给SPM发 (初审人) - //user = await _userRoleRepository.FirstOrDefaultAsync(t => t.Id == survey.PreliminaryUserId); - - //messageToSend.To.Add(new MailboxAddress(String.Empty, survey.PreliminaryUserId == null ? survey.Email : user.EMail)); - - survey.State = TrialSiteSurveyEnum.CRCSubmitted; - - survey.ReviewerUserId = null; - survey.ReviewerTime = null; - } - else - { - - ////没有SPM 给填表人发 - //messageToSend.To.Add(new MailboxAddress(String.Empty, survey.Email)); - - survey.State = TrialSiteSurveyEnum.ToSubmit; - - survey.PreliminaryUserId = null; - survey.ReviewerUserId = null; - survey.PreliminaryTime = null; - survey.ReviewerTime = null; - - - } - } - - //await _IMailVerificationService.SiteSurveyRejectEmail(messageToSend, survey, trialSiteSubmitBackCommand.RouteUrl, user); - - await _trialSiteSurveyRepository.SaveChangesAsync(); - - return ResponseOutput.Ok(); - } - - - - - - [HttpPut("{trialId:guid}/{trialSiteSurveyId:guid}")] - [TrialGlobalLimit("AfterStopCannNotOpt")] - - public async Task AbandonSiteSurvey(Guid trialSiteSurveyId) - { - var survey = (await _trialSiteSurveyRepository.FirstOrDefaultAsync(t => t.Id == trialSiteSurveyId, true)).IfNullThrowException(); - - if (survey.State != TrialSiteSurveyEnum.ToSubmit) - { - //---只允许废除未提交的记录。 - return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_CancelUnsubmittedRecord"]); - } - - survey.IsDeleted = true; - - await _trialSiteSurveyRepository.SaveChangesAsync(); - - return ResponseOutput.Ok(); - - } @@ -875,11 +845,13 @@ namespace IRaCIS.Core.Application.Contracts { var trialType = _trialRepository.Where(t => t.Id == trialId).Select(t => t.TrialType).FirstOrDefault(); - foreach (var item in needGenerateList) + foreach (var item in needGenerateList.GroupBy(t => t.Email)) { + var addUserRoleList = item.ToList(); + //找下系统中是否存在该用户类型的 并且邮箱 或者手机的账户 - var sysUserInfo = await _userRoleRepository.Where(t => t.UserTypeId == item.UserTypeId && t.EMail == item.Email).Include(t => t.UserTypeRole).FirstOrDefaultAsync(); + var sysUserInfo = await _identityUserRepository.Where(t => t.EMail == item.Key, true).Include(t => t.UserRoleList).FirstOrDefaultAsync(); if (sysUserInfo == null) @@ -889,7 +861,7 @@ namespace IRaCIS.Core.Application.Contracts using (await @lock.AcquireAsync()) { - var saveItem = _mapper.Map(item); + var saveItem = _mapper.Map(item); if (trialType == TrialType.NoneOfficial) @@ -907,26 +879,81 @@ namespace IRaCIS.Core.Application.Contracts saveItem.Password = MD5Helper.Md5(IRCEmailPasswordHelper.GenerateRandomPassword(10)); - saveItem.UserTypeEnum = _userTypeRepository.Where(t => t.Id == saveItem.UserTypeId).Select(t => t.UserTypeEnum).First(); + + var userTypeIds = addUserRoleList.Select(t => t.UserTypeId).ToList(); + + var userTypeList = _userTypeRepository.Where(t => userTypeIds.Contains(t.Id)).Select(t => new { t.UserTypeEnum, UserTypeId = t.Id }).ToList(); + + saveItem.UserRoleList = new List(); + + foreach (var addUserRole in addUserRoleList) + { - var newUser = _userRoleRepository.AddAsync(saveItem).Result; + var addRole = _mapper.Map(saveItem); + + addRole.UserTypeEnum = userTypeList.First(t => t.UserTypeId == addRole.UserTypeId).UserTypeEnum; + addRole.UserTypeId = (Guid)addUserRole.UserTypeId; + + saveItem.UserRoleList.Add(addRole); + + } - _ = _userRoleRepository.SaveChangesAsync().Result; + var newUser = await _identityUserRepository.AddAsync(saveItem); + await _identityUserRepository.SaveChangesAsync(); sysUserInfo = newUser; + foreach (var addUserRole in addUserRoleList) + { + //发送邮件的时候需要用到该字段 + addUserRole.SystemUserId = sysUserInfo.Id; + } + } - await _trialSiteUserSurveyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Id, u => new TrialSiteUserSurvey() { IsGenerateSuccess = true, SystemUserId = sysUserInfo.Id }); + var trialSiteUserIdList = addUserRoleList.Select(t => t.Id).ToList(); + + await _trialSiteUserSurveyRepository.BatchUpdateNoTrackingAsync(t => trialSiteUserIdList.Contains(t.Id), u => new TrialSiteUserSurvey() { IsGenerateSuccess = true, SystemUserId = sysUserInfo.Id }); + + } + else + { + + var userTypeIds = addUserRoleList.Select(t => t.UserTypeId).ToList(); + + var userTypeList = _userTypeRepository.Where(t => userTypeIds.Contains(t.Id)).Select(t => new { t.UserTypeEnum, UserTypeId = t.Id }).ToList(); + + foreach (var addUserRole in addUserRoleList) + { + var find = sysUserInfo.UserRoleList.FirstOrDefault(t => t.UserTypeId == addUserRole.UserTypeId); + + if (find != null && find.IsUserRoleDisabled == true) + { + find.IsUserRoleDisabled = false; + + } + else + { + var addRole = _mapper.Map(sysUserInfo); + + addRole.Id = NewId.NextSequentialGuid(); + addRole.IdentityUserId = sysUserInfo.Id; + addRole.UserTypeEnum = userTypeList.First(t => t.UserTypeId == addRole.UserTypeId).UserTypeEnum; + addRole.UserTypeId = (Guid)addUserRole.UserTypeId; + + sysUserInfo.UserRoleList.Add(addRole); + } + } + + await _identityUserRepository.SaveChangesAsync(); } - //发送邮件的时候需要用到该字段 - item.SystemUserId = sysUserInfo.Id; + } @@ -939,34 +966,46 @@ namespace IRaCIS.Core.Application.Contracts var trialSiteSurvey = await _trialSiteSurveyRepository.FirstAsync(t => t.Id == joinCommand.TrialSiteSurveyId); - foreach (var userInfo in joinCommand.UserList) + foreach (var item in joinCommand.UserList.GroupBy(t => t.SystemUserId)) { - if (userInfo.SystemUserId == null) + var userRoleList = item.ToList(); + + var first = userRoleList.First(); + + if (userRoleList.Any(t => t.SystemUserId == null)) { //---生成账户Id 未取到值,请排查 throw new BusinessValidationFailedException(_localizer["TrialSiteSurvey_FailedToGenerateAccountId"]); } var trialId = joinCommand.TrialId; - var userId = (Guid)userInfo.SystemUserId; + var userId = (Guid)item.Key; var trialSiteId = trialSiteSurvey.TrialSiteId; + var sysUserInfo = await _identityUserRepository.Where(t => t.Id == userId, true).Include(t => t.UserRoleList).FirstOrDefaultAsync(); + + //判断是否加入到项目 + var findTrialUser = await _trialIdentityUserRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.IdentityUserId == userId, true); - //判断TrialUser中是否存在 不存在就插入 - - var findTrialUser = await _trialUserRoleRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId, true); if (findTrialUser == null) { - await _trialUserRoleRepository.AddAsync(new TrialUserRole() { TrialId = trialId, UserId = userId, JoinTime = DateTime.Now }); + await _trialIdentityUserRepository.AddAsync(new TrialIdentityUser() + { + TrialId = trialId, + IdentityUserId = userId, + JoinTime = DateTime.Now, + TrialUserRoleList = + userRoleList.Select(t => new TrialUserRole() { TrialId = trialId, UserId = sysUserInfo.UserRoleList.Where(u => u.UserTypeId == t.UserTypeId).Select(t => t.Id).First() }).ToList() + }); await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, joinCommand.BaseUrl, joinCommand.RouteUrl); } else if (findTrialUser.IsDeleted == true) { - await _trialUserRoleRepository.UpdatePartialFromQueryAsync(t => t.TrialId == trialId && t.UserId == userId, c => new TrialUserRole() + await _trialIdentityUserRepository.UpdatePartialFromQueryAsync(t => t.TrialId == trialId && t.IdentityUserId == userId, c => new TrialIdentityUser() { IsDeleted = false, DeletedTime = null, @@ -976,23 +1015,36 @@ namespace IRaCIS.Core.Application.Contracts await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, joinCommand.BaseUrl, joinCommand.RouteUrl); } - var findTrialSiteUser = await _trialSiteUserRoleRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId && t.TrialSiteId == trialSiteId, true); - if (findTrialSiteUser == null) + foreach (var userSuvey in userRoleList) { - await _trialSiteUserRoleRepository.AddAsync(new TrialSiteUserRole() { TrialId = trialId, TrialSiteId = trialSiteId, UserId = userId }); + var userRoleId = sysUserInfo.UserRoleList.Where(t => t.UserTypeId == userSuvey.UserTypeId).First().Id; + + var findTrialSiteUser = await _trialSiteUserRoleRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userRoleId && t.TrialSiteId == trialSiteId, true); + if (findTrialSiteUser == null) + { + await _trialSiteUserRoleRepository.AddAsync(new TrialSiteUserRole() { TrialId = trialId, TrialSiteId = trialSiteId, UserId = userRoleId }); + + } + else + { + findTrialSiteUser.IsDeleted = false; + findTrialSiteUser.DeletedTime = null; + } - } - else - { findTrialSiteUser.IsDeleted = false; - findTrialSiteUser.DeletedTime = null; + + await _trialSiteUserSurveyRepository.UpdatePartialFromQueryAsync(t => t.Id == userSuvey.Id, u => new TrialSiteUserSurvey() { IsJoin = true }); } - await _userRoleRepository.BatchUpdateNoTrackingAsync(t => t.Id == userId, u => new UserRole() { Status = UserStateEnum.Enable }); + await _identityUserRepository.BatchUpdateNoTrackingAsync(t => t.Id == userId, u => new Domain.Models.IdentityUser() { Status = UserStateEnum.Enable }); + + await _trialSiteUserRoleRepository.SaveChangesAsync(); + + + - await _trialSiteUserSurveyRepository.UpdatePartialFromQueryAsync(t => t.Id == userInfo.Id, u => new TrialSiteUserSurvey() { IsJoin = true }); } await _trialSiteSurveyRepository.UpdatePartialFromQueryAsync(t => t.Id == trialSiteSurvey.Id && t.State == TrialSiteSurveyEnum.SPMApproved, u => new TrialSiteSurvey() { State = TrialSiteSurveyEnum.PMCreatedAndLock, ReviewerUserId = _userInfo.UserRoleId, ReviewerTime = DateTime.Now }); @@ -1011,7 +1063,7 @@ namespace IRaCIS.Core.Application.Contracts var userIdList = list.Select(t => t.SystemUserId).ToList(); - await _trialSiteUserRoleRepository.UpdatePartialFromQueryAsync(t => t.TrialId == trialId && t.TrialSiteId == siteId && userIdList.Contains(t.UserId), c => new TrialSiteUserRole() + await _trialSiteUserRoleRepository.UpdatePartialFromQueryAsync(t => t.TrialId == trialId && t.TrialSiteId == siteId && userIdList.Contains(t.UserRole.IdentityUserId), c => new TrialSiteUserRole() { IsDeleted = true, DeletedTime = DateTime.Now,