导入人员
continuous-integration/drone/push Build is passing Details

Uat_IRC_Net8
hang 2024-12-25 15:43:42 +08:00
parent 340f5c580e
commit 7535d49844
2 changed files with 94 additions and 29 deletions

View File

@ -15425,7 +15425,7 @@
TrialSiteSurveyService TrialSiteSurveyService
</summary> </summary>
</member> </member>
<member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteSurvey},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteUserSurvey},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserRole},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSite},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Doctor},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VerificationCode},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialUserRole},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteUserRole},Medallion.Threading.IDistributedLockProvider,IRaCIS.Core.Application.Auth.ITokenService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserType},IRaCIS.Core.Application.Service.IMailVerificationService,Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.SystemEmailSendConfig},AutoMapper.IMapper,IRaCIS.Core.Domain.Share.IUserInfo,Microsoft.Extensions.Localization.IStringLocalizer)"> <member name="M:IRaCIS.Core.Application.Contracts.TrialSiteSurveyService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteSurvey},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteUserSurvey},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserRole},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.IdentityUser},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialIdentityUser},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSite},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Doctor},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VerificationCode},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialUserRole},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSiteUserRole},Medallion.Threading.IDistributedLockProvider,IRaCIS.Core.Application.Auth.ITokenService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserType},IRaCIS.Core.Application.Service.IMailVerificationService,Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.SystemEmailSendConfig},AutoMapper.IMapper,IRaCIS.Core.Domain.Share.IUserInfo,Microsoft.Extensions.Localization.IStringLocalizer)">
<summary> <summary>
TrialSiteSurveyService TrialSiteSurveyService
</summary> </summary>

View File

@ -22,6 +22,10 @@ using static MassTransit.ValidationResultExtensions;
using DocumentFormat.OpenXml.Vml.Spreadsheet; using DocumentFormat.OpenXml.Vml.Spreadsheet;
using IdentityModel.OidcClient; using IdentityModel.OidcClient;
using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Models;
using MassTransit;
using DocumentFormat.OpenXml.Spreadsheet;
using StackExchange.Redis;
using Panda.DynamicWebApi.Attributes;
namespace IRaCIS.Core.Application.Contracts namespace IRaCIS.Core.Application.Contracts
{ {
@ -32,6 +36,8 @@ namespace IRaCIS.Core.Application.Contracts
public class TrialSiteSurveyService(IRepository<TrialSiteSurvey> _trialSiteSurveyRepository, public class TrialSiteSurveyService(IRepository<TrialSiteSurvey> _trialSiteSurveyRepository,
IRepository<TrialSiteUserSurvey> _trialSiteUserSurveyRepository, IRepository<TrialSiteUserSurvey> _trialSiteUserSurveyRepository,
IRepository<UserRole> _userRoleRepository, IRepository<UserRole> _userRoleRepository,
IRepository<IdentityUser> _identityUserRepository,
IRepository<TrialIdentityUser> _trialIdentityUserRepository,
IRepository<Trial> _trialRepository, IRepository<Trial> _trialRepository,
IRepository<TrialSite> _trialSiteRepository, IRepository<TrialSite> _trialSiteRepository,
IRepository<Doctor> _doctorRepository, IRepository<Doctor> _doctorRepository,
@ -236,7 +242,7 @@ namespace IRaCIS.Core.Application.Contracts
result.ReviewStatus = info.ReviewStatus; result.ReviewStatus = info.ReviewStatus;
} }
result.Token = _tokenService.GetToken(new UserTokenInfo() { UserRoleId = Guid.NewGuid() }); result.Token = _tokenService.GetToken(new UserTokenInfo() { UserRoleId = Guid.NewGuid() });
} }
} }
@ -689,7 +695,7 @@ namespace IRaCIS.Core.Application.Contracts
var isTrialSPMJoin = await _trialRepository.AnyAsync(t => t.Id == trialSiteSubmitBackCommand.TrialId && t.IsSPMJoinSiteSurvey); 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 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) if (isSPMjoin)
{ {
@ -1023,20 +1029,23 @@ namespace IRaCIS.Core.Application.Contracts
var trialType = _trialRepository.Where(t => t.Id == trialId).Select(t => t.TrialType).FirstOrDefault(); 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) if (sysUserInfo == null)
{ {
var @lock = _distributedLockProvider.CreateLock($"UserCode"); var @lock = _distributedLockProvider.CreateLock($"UserCode");
using (await @lock.AcquireAsync()) using (await @lock.AcquireAsync())
{ {
var saveItem = _mapper.Map<UserRole>(item); var saveItem = _mapper.Map<IdentityUser>(first);
if (trialType == TrialType.NoneOfficial) if (trialType == TrialType.NoneOfficial)
@ -1048,39 +1057,91 @@ namespace IRaCIS.Core.Application.Contracts
saveItem.IsZhiZhun = false; saveItem.IsZhiZhun = false;
saveItem.Code = _userRoleRepository.Select(t => t.Code).DefaultIfEmpty().Max() + 1; 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.UserName = saveItem.UserCode;
//saveItem.UserTypeEnum = _userTypeRepository.Where(t => t.Id == saveItem.UserTypeId).Select(t => t.UserTypeEnum).First(); saveItem.UserRoleList = new List<UserRole>();
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<UserRole>(saveItem);
addRole.UserTypeEnum = addUserRole.UserTypeEnum;
addRole.UserTypeId = addUserRole.UserTypeId;
saveItem.UserRoleList.Add(addRole);
}
var newUser = await _identityUserRepository.AddAsync(saveItem);
await _identityUserRepository.SaveChangesAsync();
sysUserInfo = newUser; 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<UserRole>(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 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) 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); await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, baseUrl, routeUrl);
} }
else if (findTrialUser.IsDeleted == true) 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, IsDeleted = false,
DeletedTime = null, 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); foreach (var userRole in addUserRoleList)
if (findTrialSiteUser == null)
{ {
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.IsDeleted = false;
findTrialSiteUser.DeletedTime = null;
} }
await _userRoleRepository.BatchUpdateNoTrackingAsync(t => t.Id == userId, u => new UserRole() { Status = UserStateEnum.Enable });
await _trialSiteUserRoleRepository.SaveChangesAsync(); await _trialSiteUserRoleRepository.SaveChangesAsync();
} }
} }