中心调研初步维护
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
918362e854
commit
8b44900931
|
@ -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,238 +830,196 @@ 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 (trialType == TrialType.NoneOfficial)
|
||||
if (findRole != null)
|
||||
{
|
||||
saveItem.IsTestUser = true;
|
||||
//存在该角色,设置为启用
|
||||
findRole.IsUserRoleDisabled = false;
|
||||
}
|
||||
|
||||
// 中心调研生成账号 都是外部的
|
||||
saveItem.IsZhiZhun = false;
|
||||
saveItem.Code = _identityUserRepository.Select(t => t.Code).DefaultIfEmpty().Max() + 1;
|
||||
|
||||
saveItem.UserCode = AppSettings.GetCodeStr(saveItem.Code, nameof(IdentityUser));
|
||||
|
||||
saveItem.UserName = saveItem.UserCode;
|
||||
|
||||
saveItem.Password = MD5Helper.Md5(IRCEmailPasswordHelper.GenerateRandomPassword(10));
|
||||
|
||||
|
||||
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<UserRole>();
|
||||
|
||||
foreach (var addUserRole in addUserRoleList)
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
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 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);
|
||||
}
|
||||
|
||||
|
||||
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 generateUser = _mapper.Map<IdentityUser>(first);
|
||||
|
||||
var userTypeList = _userTypeRepository.Where(t => userTypeIds.Contains(t.Id)).Select(t => new { t.UserTypeEnum, UserTypeId = t.Id }).ToList();
|
||||
|
||||
foreach (var addUserRole in addUserRoleList)
|
||||
if (trialType == TrialType.NoneOfficial)
|
||||
{
|
||||
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);
|
||||
|
||||
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);
|
||||
}
|
||||
generateUser.IsTestUser = true;
|
||||
}
|
||||
|
||||
await _identityUserRepository.SaveChangesAsync();
|
||||
// 外部人员生成账号 都是外部的
|
||||
generateUser.IsZhiZhun = false;
|
||||
|
||||
generateUser.Code = _identityUserRepository.Select(t => t.Code).DefaultIfEmpty().Max() + 1;
|
||||
|
||||
generateUser.UserCode = AppSettings.GetCodeStr(generateUser.Code, nameof(IdentityUser));
|
||||
|
||||
//generateUser.UserName = generateUser.UserCode;
|
||||
|
||||
|
||||
generateUser.Password = MD5Helper.Md5(IRCEmailPasswordHelper.GenerateRandomPassword(10));
|
||||
|
||||
generateUser.Status = UserStateEnum.Disable;
|
||||
|
||||
generateUser.UserRoleList = new List<UserRole>() { };
|
||||
|
||||
foreach (var userTypeId in userTypeIdList)
|
||||
{
|
||||
var addRole = _mapper.Map<UserRole>(generateUser);
|
||||
|
||||
addRole.Id = NewId.NextSequentialGuid();
|
||||
|
||||
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();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
await _trialSiteUserSurveyRepository.SaveChangesAsync();
|
||||
}
|
||||
var identityUserId = existSysUser.Id;
|
||||
|
||||
|
||||
private async Task<IResponseOutput> SendSiteSurveyUserJoinEmail(TrialSiteUserSurveyJoinCommand joinCommand)
|
||||
{
|
||||
var trialSiteSurvey = await _trialSiteSurveyRepository.FirstAsync(t => t.Id == joinCommand.TrialSiteSurveyId);
|
||||
var findTrialUser = await _trialIdentityUserRepository.Where(t => t.TrialId == trialId && t.IdentityUserId == identityUserId, true).Include(t => t.TrialUserRoleList).ThenInclude(t => t.UserRole).FirstOrDefaultAsync();
|
||||
|
||||
|
||||
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)
|
||||
{
|
||||
|
||||
await _trialIdentityUserRepository.AddAsync(new TrialIdentityUser()
|
||||
//没有项目参与人员
|
||||
findTrialUser = await _trialIdentityUserRepository.AddAsync(new TrialIdentityUser()
|
||||
{
|
||||
IdentityUserId = identityUserId,
|
||||
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 _trialIdentityUserRepository.UpdatePartialFromQueryAsync(t => t.TrialId == trialId && t.IdentityUserId == userId, c => new TrialIdentityUser()
|
||||
{
|
||||
IsDeleted = false,
|
||||
DeletedTime = null,
|
||||
JoinTime = DateTime.Now,
|
||||
TrialUserRoleList = userTypeIdList.Select(u => new TrialUserRole()
|
||||
{
|
||||
TrialId = trialId,
|
||||
UserId = existSysUser.UserRoleList.FirstOrDefault(t => t.UserTypeId == u).Id,
|
||||
|
||||
}).ToList()
|
||||
});
|
||||
|
||||
await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, joinCommand.BaseUrl, joinCommand.RouteUrl);
|
||||
isNeedSendEmail = true;
|
||||
}
|
||||
|
||||
|
||||
foreach (var userSuvey in userRoleList)
|
||||
else
|
||||
{
|
||||
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)
|
||||
foreach (var userTypeId in userTypeIdList)
|
||||
{
|
||||
await _trialSiteUserRoleRepository.AddAsync(new TrialSiteUserRole() { TrialId = trialId, TrialSiteId = trialSiteId, UserId = userRoleId });
|
||||
var findTrialUserRole = findTrialUser.TrialUserRoleList.Where(t => t.UserRole.UserTypeId == userTypeId).FirstOrDefault();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
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 });
|
||||
|
||||
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,
|
||||
});
|
||||
|
||||
|
||||
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();
|
||||
|
||||
await _trialSiteSurveyRepository.UpdatePartialFromQueryAsync(t => t.Id == trialSiteSurveyId && t.State == TrialSiteSurveyEnum.SPMApproved, u => new TrialSiteSurvey() { State = TrialSiteSurveyEnum.PMCreatedAndLock, ReviewerUserId = _userInfo.UserRoleId, ReviewerTime = DateTime.Now });
|
||||
|
||||
}
|
||||
|
||||
|
||||
private async Task DealSiteUserQuitSiteAsync(Guid trialId, Guid siteId, List<TrialSiteUserSurveyView> list)
|
||||
{
|
||||
|
||||
var userIdList = list.Select(t => t.SystemUserId).ToList();
|
||||
|
||||
|
||||
await _trialSiteUserRoleRepository.UpdatePartialFromQueryAsync(t => t.TrialId == trialId && t.TrialSiteId == siteId && userIdList.Contains(t.UserRole.IdentityUserId), c => new TrialSiteUserRole()
|
||||
{
|
||||
IsDeleted = true,
|
||||
DeletedTime = DateTime.Now,
|
||||
});
|
||||
|
||||
|
||||
await _trialSiteUserRoleRepository.SaveChangesAsync();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -62,6 +62,8 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
if (sysUserInfo != null)
|
||||
{
|
||||
|
||||
|
||||
|
||||
if (trialType == TrialType.OfficialTrial || trialType == TrialType.Training)
|
||||
{
|
||||
|
||||
|
|
Loading…
Reference in New Issue