diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index c1877cf3a..c3d841284 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -15425,7 +15425,7 @@ TrialSiteSurveyService - + TrialSiteSurveyService diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs index bbe2aec10..099c4e1e9 100644 --- a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs +++ b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs @@ -22,6 +22,10 @@ using static MassTransit.ValidationResultExtensions; using DocumentFormat.OpenXml.Vml.Spreadsheet; using IdentityModel.OidcClient; using IRaCIS.Core.Domain.Models; +using MassTransit; +using DocumentFormat.OpenXml.Spreadsheet; +using StackExchange.Redis; +using Panda.DynamicWebApi.Attributes; namespace IRaCIS.Core.Application.Contracts { @@ -32,6 +36,8 @@ namespace IRaCIS.Core.Application.Contracts public class TrialSiteSurveyService(IRepository _trialSiteSurveyRepository, IRepository _trialSiteUserSurveyRepository, IRepository _userRoleRepository, + IRepository _identityUserRepository, + IRepository _trialIdentityUserRepository, IRepository _trialRepository, IRepository _trialSiteRepository, IRepository _doctorRepository, @@ -236,7 +242,7 @@ namespace IRaCIS.Core.Application.Contracts result.ReviewStatus = info.ReviewStatus; } - result.Token = _tokenService.GetToken(new UserTokenInfo() { UserRoleId = Guid.NewGuid() }); + result.Token = _tokenService.GetToken(new UserTokenInfo() { UserRoleId = Guid.NewGuid() }); } } @@ -443,7 +449,7 @@ namespace IRaCIS.Core.Application.Contracts TrialSiteSurveyId = currentEntity!.Id, Token = _tokenService.GetToken(new UserTokenInfo() { - UserRoleId = Guid.NewGuid(), + UserRoleId = Guid.NewGuid(), UserName = "SiteSurvey", UserTypeEnum = UserTypeEnum.Undefined, }) @@ -689,7 +695,7 @@ namespace IRaCIS.Core.Application.Contracts 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; + var isSPMjoin = isTrialSPMJoin && hasSPMOrCPM; if (isSPMjoin) { @@ -1023,20 +1029,23 @@ namespace IRaCIS.Core.Application.Contracts var trialType = _trialRepository.Where(t => t.Id == trialId).Select(t => t.TrialType).FirstOrDefault(); - //判断是否有系统账号 - foreach (var item in list) + + foreach (var item in list.GroupBy(t => t.Email)) { + var addUserRoleList = item.ToList(); + + var first = addUserRoleList.FirstOrDefault(); + //找下系统中是否存在该用户类型的 并且邮箱 或者手机的账户 - 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) { - var @lock = _distributedLockProvider.CreateLock($"UserCode"); using (await @lock.AcquireAsync()) { - var saveItem = _mapper.Map(item); + var saveItem = _mapper.Map(first); if (trialType == TrialType.NoneOfficial) @@ -1048,39 +1057,91 @@ namespace IRaCIS.Core.Application.Contracts saveItem.IsZhiZhun = false; saveItem.Code = _userRoleRepository.Select(t => t.Code).DefaultIfEmpty().Max() + 1; - saveItem.UserCode = AppSettings.GetCodeStr(saveItem.Code, nameof(UserRole)); + saveItem.UserCode = AppSettings.GetCodeStr(saveItem.Code, nameof(IdentityUser)); saveItem.UserName = saveItem.UserCode; - //saveItem.UserTypeEnum = _userTypeRepository.Where(t => t.Id == saveItem.UserTypeId).Select(t => t.UserTypeEnum).First(); + saveItem.UserRoleList = new List(); - var newUser = _userRoleRepository.AddAsync(saveItem).Result; + foreach (var addUserRole in addUserRoleList) + { + addUserRole.IsGeneratedAccount = true; - _ = _userRoleRepository.SaveChangesAsync().Result; + //var trialSiteId = addUserRole.TrialSiteId; + + var addRole = _mapper.Map(saveItem); + + addRole.UserTypeEnum = addUserRole.UserTypeEnum; + addRole.UserTypeId = addUserRole.UserTypeId; + + saveItem.UserRoleList.Add(addRole); + + } + + + var newUser = await _identityUserRepository.AddAsync(saveItem); + + await _identityUserRepository.SaveChangesAsync(); sysUserInfo = newUser; } - item.IsGeneratedAccount = true; + + } + else + { + + foreach (var addUserRole in addUserRoleList) + { + var find = sysUserInfo.UserRoleList.FirstOrDefault(t => t.UserTypeEnum == addUserRole.UserTypeEnum && 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 = addUserRole.UserTypeEnum; + addRole.UserTypeId = addUserRole.UserTypeId; + + sysUserInfo.UserRoleList.Add(addRole); + } + } + + await _identityUserRepository.SaveChangesAsync(); } var userId = sysUserInfo.Id; - var trialSiteId = item.TrialSiteId; //判断是否加入到项目 - var findTrialUser = await _trialUserRoleRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId, true); + var findTrialUser = await _trialIdentityUserRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.IdentityUserId == 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 = + sysUserInfo.UserRoleList.Select(t => new TrialUserRole() { TrialId = trialId, UserId = t.Id }).ToList() + }); await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, baseUrl, 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, @@ -1091,27 +1152,31 @@ namespace IRaCIS.Core.Application.Contracts } - var findTrialSiteUser = await _trialSiteUserRoleRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId && t.TrialSiteId == trialSiteId, true); - - if (findTrialSiteUser == null) + foreach (var userRole in addUserRoleList) { - await _trialSiteUserRoleRepository.AddAsync(new TrialSiteUserRole() { TrialId = trialId, TrialSiteId = trialSiteId, UserId = userId }); + var userRoleId = sysUserInfo.UserRoleList.Where(t => t.UserTypeId == userRole.UserTypeId).First().Id; + + var findTrialSiteUser = await _trialSiteUserRoleRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userRoleId && t.TrialSiteId == userRole.TrialSiteId, true); + if (findTrialSiteUser == null) + { + await _trialSiteUserRoleRepository.AddAsync(new TrialSiteUserRole() { TrialId = trialId, TrialSiteId = userRole.TrialSiteId, UserId = userRoleId }); + + } + else + { + findTrialSiteUser.IsDeleted = false; + findTrialSiteUser.DeletedTime = null; + } - } - else - { findTrialSiteUser.IsDeleted = false; - findTrialSiteUser.DeletedTime = null; } - await _userRoleRepository.BatchUpdateNoTrackingAsync(t => t.Id == userId, u => new UserRole() { Status = UserStateEnum.Enable }); await _trialSiteUserRoleRepository.SaveChangesAsync(); + } - - }