中心调研初步维护
continuous-integration/drone/push Build is passing Details

Uat_IRC_Net8
hang 2024-12-27 14:29:13 +08:00
parent 918362e854
commit 8b44900931
2 changed files with 129 additions and 181 deletions

View File

@ -818,20 +818,8 @@ namespace IRaCIS.Core.Application.Contracts
var allUserList = _trialSiteUserSurveyRepository.Where(t => t.TrialSiteSurveyId == trialSiteSurveyId).ProjectTo<TrialSiteUserSurveyView>(_mapper.ConfigurationProvider).ToList();
//已生成的不管 管的只需要是 生成失败的并且需要生成账号的
var needGenerateList = allUserList.Where(t => t.IsHistoryUser == false && t.IsGenerateAccount && t.IsJoin != true).ToList();
await GenerateAccountAndSendEmail(trialId, trialSiteSurveyId, trialSiteSurvey.TrialSiteId, siteSurvyeSubmit.BaseUrl, siteSurvyeSubmit.RouteUrl, allUserList);
await GenerateAccountAsync(needGenerateList, trialId);
//新加入的 或者历史人员退出改为加入的
var needSendEmailList = allUserList.Where(t => (t.IsHistoryUser == false && t.IsGenerateAccount && t.IsJoin != true) || (t.IsHistoryUser == true && t.IsHistoryUserOriginDeleted == true && t.IsHistoryUserDeleted == false)).ToList();
await SendSiteSurveyUserJoinEmail(new TrialSiteUserSurveyJoinCommand() { TrialId = trialId, TrialSiteSurveyId = trialSiteSurveyId, RouteUrl = siteSurvyeSubmit.RouteUrl, BaseUrl = siteSurvyeSubmit.BaseUrl, UserList = needSendEmailList });
var needQuitUserList = allUserList.Where(t => t.IsHistoryUser && t.IsHistoryUserOriginDeleted == false && t.IsHistoryUserDeleted == true).ToList();
await DealSiteUserQuitSiteAsync(trialId, trialSiteSurvey.TrialSiteId, needQuitUserList);
//将历史锁定的调研表废弃
await _trialSiteSurveyRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.TrialSiteId == trialSiteSurvey.TrialSiteId && t.State == TrialSiteSurveyEnum.PMCreatedAndLock && t.Id != trialSiteSurveyId, z => new TrialSiteSurvey() { IsDeleted = true });
@ -842,230 +830,180 @@ namespace IRaCIS.Core.Application.Contracts
}
private async Task GenerateAccountAsync(List<TrialSiteUserSurveyView> needGenerateList, Guid trialId)
private async Task GenerateAccountAndSendEmail(Guid trialId, Guid trialSiteSurveyId, Guid trialSiteId, string baseUrl, string routeUrl, List<TrialSiteUserSurveyView> allUserList)
{
//已生成的不管 管的只需要是 生成失败的并且需要生成账号的
var needGenerateList = allUserList.Where(t => t.IsHistoryUser == false && t.IsGenerateAccount && t.IsJoin != true).ToList();
//新加入的 或者历史人员退出改为加入的
var needSendEmailList = allUserList.Where(t => (t.IsHistoryUser == false && t.IsGenerateAccount && t.IsJoin != true) || (t.IsHistoryUser == true && t.IsHistoryUserOriginDeleted == true && t.IsHistoryUserDeleted == false)).ToList();
var trialType = _trialRepository.Where(t => t.Id == trialId).Select(t => t.TrialType).FirstOrDefault();
foreach (var item in needGenerateList.GroupBy(t => t.Email))
{
var addUserRoleList = item.ToList();
//找下系统中是否存在该用户类型的 并且邮箱 或者手机的账户
var sysUserInfo = await _identityUserRepository.Where(t => t.EMail == item.Key, true).Include(t => t.UserRoleList).FirstOrDefaultAsync();
var first = addUserRoleList.FirstOrDefault();
var userEmail = item.Key;
if (sysUserInfo == null)
var userTypeIdList = item.Select(t => t.UserTypeId).ToList();
var existSysUser = await _identityUserRepository.Where(t => t.EMail == userEmail, true).Include(t => t.UserRoleList).FirstOrDefaultAsync();
if (existSysUser != null)
{
var @lock = _distributedLockProvider.CreateLock($"UserCode");
//账号状态设置为启用
existSysUser.Status = UserStateEnum.Enable;
using (await @lock.AcquireAsync())
foreach (var userTypeId in userTypeIdList)
{
var saveItem = _mapper.Map<IdentityUser>(item);
var findRole = existSysUser.UserRoleList.FirstOrDefault(t => t.UserTypeId == userTypeId);
if (findRole != null)
{
//存在该角色,设置为启用
findRole.IsUserRoleDisabled = false;
}
else
{
//不存在该角色,那么就添加
var addRole = _mapper.Map<UserRole>(existSysUser);
addRole.UserTypeEnum = _userTypeRepository.Where(t => t.Id == userTypeId).Select(t => t.UserTypeEnum).First();
addRole.UserTypeId = userTypeId.Value;
addRole.IsUserRoleDisabled = false;
existSysUser.UserRoleList.Add(addRole);
}
}
}
else
{
//生成账户 并插入
var generateUser = _mapper.Map<IdentityUser>(first);
if (trialType == TrialType.NoneOfficial)
{
saveItem.IsTestUser = true;
generateUser.IsTestUser = true;
}
// 中心调研生成账号 都是外部的
saveItem.IsZhiZhun = false;
saveItem.Code = _identityUserRepository.Select(t => t.Code).DefaultIfEmpty().Max() + 1;
// 外部人员生成账号 都是外部的
generateUser.IsZhiZhun = false;
saveItem.UserCode = AppSettings.GetCodeStr(saveItem.Code, nameof(IdentityUser));
generateUser.Code = _identityUserRepository.Select(t => t.Code).DefaultIfEmpty().Max() + 1;
saveItem.UserName = saveItem.UserCode;
generateUser.UserCode = AppSettings.GetCodeStr(generateUser.Code, nameof(IdentityUser));
saveItem.Password = MD5Helper.Md5(IRCEmailPasswordHelper.GenerateRandomPassword(10));
//generateUser.UserName = generateUser.UserCode;
var userTypeIds = addUserRoleList.Select(t => t.UserTypeId).ToList();
generateUser.Password = MD5Helper.Md5(IRCEmailPasswordHelper.GenerateRandomPassword(10));
var userTypeList = _userTypeRepository.Where(t => userTypeIds.Contains(t.Id)).Select(t => new { t.UserTypeEnum, UserTypeId = t.Id }).ToList();
generateUser.Status = UserStateEnum.Disable;
saveItem.UserRoleList = new List<UserRole>();
generateUser.UserRoleList = new List<UserRole>() { };
foreach (var addUserRole in addUserRoleList)
foreach (var userTypeId in userTypeIdList)
{
var addRole = _mapper.Map<UserRole>(saveItem);
addRole.UserTypeEnum = userTypeList.First(t => t.UserTypeId == addRole.UserTypeId).UserTypeEnum;
addRole.UserTypeId = (Guid)addUserRole.UserTypeId;
saveItem.UserRoleList.Add(addRole);
}
var newUser = await _identityUserRepository.AddAsync(saveItem);
await _identityUserRepository.SaveChangesAsync();
sysUserInfo = newUser;
foreach (var addUserRole in addUserRoleList)
{
//发送邮件的时候需要用到该字段
addUserRole.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<UserRole>(sysUserInfo);
var addRole = _mapper.Map<UserRole>(generateUser);
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);
addRole.UserTypeEnum = _userTypeRepository.Where(t => t.Id == userTypeId).Select(t => t.UserTypeEnum).First();
addRole.UserTypeId = userTypeId.Value;
generateUser.UserRoleList.Add(addRole);
}
var newAddUser = await _identityUserRepository.AddAsync(generateUser);
existSysUser = newAddUser;
}
await _identityUserRepository.SaveChangesAsync();
}
var identityUserId = existSysUser.Id;
}
await _trialSiteUserSurveyRepository.SaveChangesAsync();
}
var findTrialUser = await _trialIdentityUserRepository.Where(t => t.TrialId == trialId && t.IdentityUserId == identityUserId, true).Include(t => t.TrialUserRoleList).ThenInclude(t => t.UserRole).FirstOrDefaultAsync();
private async Task<IResponseOutput> SendSiteSurveyUserJoinEmail(TrialSiteUserSurveyJoinCommand joinCommand)
{
var trialSiteSurvey = await _trialSiteSurveyRepository.FirstAsync(t => t.Id == joinCommand.TrialSiteSurveyId);
foreach (var item in joinCommand.UserList.GroupBy(t => t.SystemUserId))
{
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)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);
var isNeedSendEmail = false;
if (findTrialUser == null)
{
//没有项目参与人员
findTrialUser = await _trialIdentityUserRepository.AddAsync(new TrialIdentityUser()
{
IdentityUserId = identityUserId,
TrialId = trialId,
JoinTime = DateTime.Now,
await _trialIdentityUserRepository.AddAsync(new TrialIdentityUser()
TrialUserRoleList = userTypeIdList.Select(u => new TrialUserRole()
{
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);
UserId = existSysUser.UserRoleList.FirstOrDefault(t => t.UserTypeId == u).Id,
}
else if (findTrialUser.IsDeleted == true)
{
await _trialIdentityUserRepository.UpdatePartialFromQueryAsync(t => t.TrialId == trialId && t.IdentityUserId == userId, c => new TrialIdentityUser()
{
IsDeleted = false,
DeletedTime = null,
JoinTime = DateTime.Now,
}).ToList()
});
await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, joinCommand.BaseUrl, joinCommand.RouteUrl);
}
foreach (var userSuvey in userRoleList)
{
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 });
isNeedSendEmail = true;
}
else
{
findTrialSiteUser.IsDeleted = false;
findTrialSiteUser.DeletedTime = null;
}
//有该人员
//是否有该角色
findTrialSiteUser.IsDeleted = false;
await _trialSiteUserSurveyRepository.UpdatePartialFromQueryAsync(t => t.Id == userSuvey.Id, u => new TrialSiteUserSurvey() { IsJoin = true });
}
await _identityUserRepository.BatchUpdateNoTrackingAsync(t => t.Id == userId, u => new Domain.Models.IdentityUser() { Status = UserStateEnum.Enable });
await _trialSiteUserRoleRepository.SaveChangesAsync();
}
await _trialSiteSurveyRepository.UpdatePartialFromQueryAsync(t => t.Id == trialSiteSurvey.Id && t.State == TrialSiteSurveyEnum.SPMApproved, u => new TrialSiteSurvey() { State = TrialSiteSurveyEnum.PMCreatedAndLock, ReviewerUserId = _userInfo.UserRoleId, ReviewerTime = DateTime.Now });
await _userRoleRepository.SaveChangesAsync();
return ResponseOutput.Ok();
}
private async Task DealSiteUserQuitSiteAsync(Guid trialId, Guid siteId, List<TrialSiteUserSurveyView> list)
foreach (var userTypeId in userTypeIdList)
{
var findTrialUserRole = findTrialUser.TrialUserRoleList.Where(t => t.UserRole.UserTypeId == userTypeId).FirstOrDefault();
var userIdList = list.Select(t => t.SystemUserId).ToList();
if (findTrialUserRole == null)
{
isNeedSendEmail = true;
//添加该角色
findTrialUser.TrialUserRoleList.Add(new TrialUserRole() { TrialUserId = findTrialUser.Id, TrialId = trialId, UserId = existSysUser.UserRoleList.FirstOrDefault(t => t.UserTypeId == userTypeId).Id });
}
else
{
//如果禁用,那么启用
if (findTrialUserRole.IsDeleted == true)
{
findTrialUserRole.IsDeleted = false;
findTrialUserRole.DeletedTime = null;
}
}
}
}
await _trialSiteUserRoleRepository.UpdatePartialFromQueryAsync(t => t.TrialId == trialId && t.TrialSiteId == siteId && userIdList.Contains(t.UserRole.IdentityUserId), c => new TrialSiteUserRole()
if (isNeedSendEmail)
{
await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, identityUserId, baseUrl, routeUrl);
}
var userJoinIdList = item.Select(t => t.Id).ToList();
await _trialSiteUserSurveyRepository.UpdatePartialFromQueryAsync(t => userJoinIdList.Contains(t.Id), u => new TrialSiteUserSurvey() { IsJoin = true, SystemUserId = existSysUser.Id });
//中心调研设置用户角色退出
var needQuitUserList = item.Where(t => t.IsHistoryUser && t.IsHistoryUserOriginDeleted == false && t.IsHistoryUserDeleted == true).ToList();
var queitUserTypeIdList = needQuitUserList.Select(t => t.UserTypeId).ToList();
await _trialSiteUserRoleRepository.UpdatePartialFromQueryAsync(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId && queitUserTypeIdList.Contains(t.UserRole.UserTypeId), c => new TrialSiteUserRole()
{
IsDeleted = true,
DeletedTime = DateTime.Now,
@ -1073,8 +1011,16 @@ namespace IRaCIS.Core.Application.Contracts
await _trialSiteUserRoleRepository.SaveChangesAsync();
}
await _trialSiteSurveyRepository.UpdatePartialFromQueryAsync(t => t.Id == trialSiteSurveyId && t.State == TrialSiteSurveyEnum.SPMApproved, u => new TrialSiteSurvey() { State = TrialSiteSurveyEnum.PMCreatedAndLock, ReviewerUserId = _userInfo.UserRoleId, ReviewerTime = DateTime.Now });
}
public async Task ImportGenerateAccountAndJoinTrialAsync(Guid trialId, string baseUrl, string routeUrl, List<SiteSurveyUserImportDto> list)

View File

@ -62,6 +62,8 @@ namespace IRaCIS.Core.Application.Contracts
if (sysUserInfo != null)
{
if (trialType == TrialType.OfficialTrial || trialType == TrialType.Training)
{