修改查询
This commit is contained in:
@@ -1381,7 +1381,7 @@ namespace IRaCIS.Core.Application
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.ExperimentName), o => o.ExperimentName.Contains(inQuery.ExperimentName))
|
||||
.WhereIf(_userInfo.UserTypeEnumInt != (int)UserTypeEnum.SuperAdmin && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.Admin && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.OP, t => t.TrialUserList.Any(t => t.UserId == _userInfo.UserRoleId && t.IsDeleted == false) && t.IsDeleted == false)
|
||||
.WhereIf(inQuery.CriterionType != null, o => o.TrialReadingCriterionList.Any(t => t.CriterionType == inQuery.CriterionType && t.IsSigned && t.IsConfirm))
|
||||
.WhereIf(!string.IsNullOrEmpty(inQuery.PM_EMail), o => o.TrialUserList.Any(t => t.UserRole.EMail.Contains(inQuery.PM_EMail) && (t.UserRole.UserTypeEnum == UserTypeEnum.ProjectManager || t.UserRole.UserTypeEnum == UserTypeEnum.APM)))
|
||||
.WhereIf(!string.IsNullOrEmpty(inQuery.PM_EMail), o => o.TrialUserList.Any(t => t.UserRole.IdentityUser.EMail.Contains(inQuery.PM_EMail) && (t.UserRole.UserTypeEnum == UserTypeEnum.ProjectManager || t.UserRole.UserTypeEnum == UserTypeEnum.APM)))
|
||||
.Select(t => new TrialToBeDoneDto()
|
||||
{
|
||||
TrialId = t.Id,
|
||||
@@ -1442,7 +1442,7 @@ namespace IRaCIS.Core.Application
|
||||
|
||||
IR_ReadingCriterionList = isIR ? t.TrialReadingCriterionList.Where(t => t.IsConfirm && t.IsSigned).OrderBy(t => t.CriterionName).Select(t => t.CriterionName).ToList() : null,
|
||||
|
||||
IR_PMEmailList = isIR ? t.TrialUserList.Where(t => t.UserRole.UserTypeEnum == UserTypeEnum.ProjectManager || t.UserRole.UserTypeEnum == UserTypeEnum.APM).OrderBy(t => t.UserRole.EMail).Select(t => t.UserRole.EMail).ToList() : null,
|
||||
IR_PMEmailList = isIR ? t.TrialUserList.Where(t => t.UserRole.UserTypeEnum == UserTypeEnum.ProjectManager || t.UserRole.UserTypeEnum == UserTypeEnum.APM).OrderBy(t => t.UserRole.IdentityUser.EMail).Select(t => t.UserRole.IdentityUser.EMail).ToList() : null,
|
||||
|
||||
IR_TotalReadCount = isIR ? t.VisitTaskList.Where(t => t.DoctorUserId == _userInfo.UserRoleId && t.TaskState == TaskState.Effect && t.ReadingTaskState == ReadingTaskState.HaveSigned).Count() : 0,
|
||||
|
||||
@@ -1482,7 +1482,7 @@ namespace IRaCIS.Core.Application
|
||||
var query = _trialUserRoleRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||
.Select(t => new TrialUserToBeDoneDto()
|
||||
{
|
||||
UserName = t.UserRole.UserName,
|
||||
UserName = t.UserRole.IdentityUser.UserName,
|
||||
FullName = t.UserRole.FullName,
|
||||
UserType = t.UserRole.UserTypeEnum,
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ using Medallion.Threading;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using DocumentFormat.OpenXml.Spreadsheet;
|
||||
using IRaCIS.Core.Domain.Models;
|
||||
using IRaCIS.Application.Contracts;
|
||||
|
||||
namespace IRaCIS.Core.Application.Service
|
||||
{
|
||||
@@ -90,79 +91,24 @@ namespace IRaCIS.Core.Application.Service
|
||||
return ResponseOutput.NotOk(_localizer["TrialExternalUser_EmailTypeDuplicate"]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
var addEntity = _mapper.Map<TrialExternalUser>(addOrEditTrialExternalUser);
|
||||
|
||||
await _trialExternalUseRepository.AddAsync(addEntity);
|
||||
|
||||
|
||||
var trialType = await _trialRepository.Where(t => t.Id == addOrEditTrialExternalUser.TrialId).Select(t => t.TrialType).FirstOrDefaultAsync();
|
||||
|
||||
if (existSysUser != null)
|
||||
{
|
||||
addEntity.IsSystemUser = true;
|
||||
addEntity.SystemUserId = existSysUser.Id;
|
||||
|
||||
if (!existSysUser.UserRoleList.Any(t => t.UserTypeId == addOrEditTrialExternalUser.UserTypeId))
|
||||
{
|
||||
var addRole = _mapper.Map<UserRole>(existSysUser);
|
||||
addRole.UserTypeEnum = _userTypeRepository.Where(t => t.Id == addOrEditTrialExternalUser.UserTypeId).Select(t => t.UserTypeEnum).First();
|
||||
addRole.UserTypeId = addOrEditTrialExternalUser.UserTypeId;
|
||||
addRole.IsUserRoleDisabled = true;
|
||||
existSysUser.UserRoleList.Add(addRole);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
//生成账户 并插入
|
||||
|
||||
var generateUser = _mapper.Map<IdentityUser>(addOrEditTrialExternalUser);
|
||||
|
||||
if (trialType == TrialType.NoneOfficial)
|
||||
{
|
||||
generateUser.IsTestUser = true;
|
||||
}
|
||||
|
||||
// 外部人员生成账号 都是外部的
|
||||
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;
|
||||
|
||||
var addRole = _mapper.Map<UserRole>(generateUser);
|
||||
addRole.UserTypeEnum = _userTypeRepository.Where(t => t.Id == addOrEditTrialExternalUser.UserTypeId).Select(t => t.UserTypeEnum).First();
|
||||
addRole.UserTypeId = addOrEditTrialExternalUser.UserTypeId;
|
||||
|
||||
generateUser.UserRoleList = new List<UserRole>() { addRole };
|
||||
|
||||
var newAddUser = await _identityUserRepository.AddAsync(generateUser);
|
||||
|
||||
addEntity.IsSystemUser = false;
|
||||
addEntity.SystemUserId = newAddUser.Id;
|
||||
|
||||
|
||||
existSysUser = newAddUser;
|
||||
|
||||
}
|
||||
var trialType = await _trialRepository.Where(t => t.Id == addOrEditTrialExternalUser.TrialId).Select(t => t.TrialType).FirstOrDefaultAsync();
|
||||
|
||||
#region 验证用户 能否加入
|
||||
|
||||
if (trialType == TrialType.OfficialTrial || trialType == TrialType.Training)
|
||||
{
|
||||
|
||||
if (existSysUser.IsTestUser)
|
||||
if (existSysUser != null && existSysUser.IsTestUser)
|
||||
{
|
||||
//---正式类型 、培训类型的项目 不允许加入测试用户
|
||||
throw new BusinessValidationFailedException(_localizer["TrialExternalUser_TestUserNotAllowed"]);
|
||||
@@ -173,7 +119,7 @@ namespace IRaCIS.Core.Application.Service
|
||||
if (trialType == TrialType.NoneOfficial)
|
||||
{
|
||||
|
||||
if (existSysUser.IsTestUser == false)
|
||||
if (existSysUser != null && existSysUser.IsTestUser == false)
|
||||
{
|
||||
//---测试项目 不允许加入正式用户
|
||||
throw new BusinessValidationFailedException(_localizer["TrialExternalUser_FormalUserNotAllowed"]);
|
||||
@@ -238,10 +184,6 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
var success = await _trialExternalUseRepository.BatchDeleteNoTrackingAsync(t => t.Id == trialExternalUserId);
|
||||
|
||||
//if (isSystemUser == false)
|
||||
//{
|
||||
// await _userRoleRepository.BatchDeleteNoTrackingAsync(t => t.Id == systemUserId);
|
||||
//}
|
||||
|
||||
return ResponseOutput.Result(success);
|
||||
}
|
||||
@@ -256,53 +198,181 @@ namespace IRaCIS.Core.Application.Service
|
||||
{
|
||||
var trialId = sendEmail.TrialId;
|
||||
|
||||
foreach (var userInfo in sendEmail.SendUsers)
|
||||
var trialType = await _trialRepository.Where(t => t.Id == trialId).Select(t => t.TrialType).FirstOrDefaultAsync();
|
||||
|
||||
foreach (var item in sendEmail.SendUsers.GroupBy(t => t.Email))
|
||||
{
|
||||
var userId = userInfo.SystemUserId;
|
||||
var userTypeId = userInfo.UserTypeId;
|
||||
|
||||
var findTrialUser = await _trialIdentityUserRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.IdentityUserId == userId, true);
|
||||
var userEmail = item.Key;
|
||||
|
||||
var findUserRoleId = await _identityUserRepository.Where(t => t.Id == userId, true).SelectMany(t => t.UserRoleList).Where(t => t.UserTypeId == userTypeId).Select(t => t.Id).FirstOrDefaultAsync();
|
||||
var userTypeIdList = item.Select(t => t.UserTypeId).ToList();
|
||||
|
||||
if (findTrialUser == null || findUserRoleId == Guid.Empty)
|
||||
var itemFirst = item.FirstOrDefault();
|
||||
|
||||
var externalIdList = item.Select(t => t.Id).ToList();
|
||||
|
||||
|
||||
//var identityUserId = item.Key;
|
||||
|
||||
var existSysUser = await _identityUserRepository.Where(t => t.EMail == userEmail, true).Include(t => t.UserRoleList).FirstOrDefaultAsync();
|
||||
|
||||
if (existSysUser != null)
|
||||
{
|
||||
return ResponseOutput.NotOk("database dirty data ");
|
||||
|
||||
//账号状态设置为启用
|
||||
existSysUser.Status = UserStateEnum.Enable;
|
||||
|
||||
foreach (var userTypeId in userTypeIdList)
|
||||
{
|
||||
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;
|
||||
addRole.IsUserRoleDisabled = false;
|
||||
existSysUser.UserRoleList.Add(addRole);
|
||||
}
|
||||
}
|
||||
|
||||
//防止已经生成账号的信息与外部人员信息不一致 在此默认批量更一下
|
||||
|
||||
await _trialExternalUseRepository.BatchUpdateNoTrackingAsync(t => externalIdList.Contains(t.Id), u => new TrialExternalUser()
|
||||
{
|
||||
FirstName = existSysUser.FirstName,
|
||||
LastName = existSysUser.LastName,
|
||||
Phone = existSysUser.Phone,
|
||||
OrganizationName = existSysUser.OrganizationName
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
var findTrialUserRole = await _trialUserRoleRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserRole.IdentityUserId == userId && t.UserRole.UserTypeId == userTypeId, true);
|
||||
|
||||
if (findTrialUserRole == null)
|
||||
//生成账户 并插入
|
||||
var externalUser = _trialExternalUseRepository.FirstOrDefaultAsync(t => t.Id == itemFirst.Id);
|
||||
var generateUser = _mapper.Map<IdentityUser>(externalUser);
|
||||
|
||||
if (trialType == TrialType.NoneOfficial)
|
||||
{
|
||||
generateUser.IsTestUser = true;
|
||||
}
|
||||
|
||||
await _trialUserRoleRepository.AddAsync(new TrialUserRole() { TrialId = trialId, TrialUserId = findTrialUser.Id, UserId = findUserRoleId, JoinTime = DateTime.Now });
|
||||
// 外部人员生成账号 都是外部的
|
||||
generateUser.IsZhiZhun = false;
|
||||
|
||||
await _userRoleRepository.BatchUpdateNoTrackingAsync(t => t.IdentityUserId == userId, u => new UserRole() { IsUserRoleDisabled =false });
|
||||
|
||||
await _trialExternalUseRepository.BatchUpdateNoTrackingAsync(t => t.Id == userInfo.Id, u => new TrialExternalUser() { IsJoin = true });
|
||||
generateUser.Code = _identityUserRepository.Select(t => t.Code).DefaultIfEmpty().Max() + 1;
|
||||
|
||||
|
||||
await _userRoleRepository.SaveChangesAsync();
|
||||
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.UserTypeEnum = _userTypeRepository.Where(t => t.Id == userTypeId).Select(t => t.UserTypeEnum).First();
|
||||
|
||||
addRole.UserTypeId = userTypeId;
|
||||
|
||||
generateUser.UserRoleList.Add(addRole);
|
||||
}
|
||||
|
||||
var newAddUser = await _identityUserRepository.AddAsync(generateUser);
|
||||
|
||||
await _trialExternalUseRepository.BatchUpdateNoTrackingAsync(t => externalIdList.Contains(t.Id), u => new TrialExternalUser() { IsSystemUser = false, SystemUserId = newAddUser.Id });
|
||||
|
||||
existSysUser = newAddUser;
|
||||
|
||||
}
|
||||
|
||||
await _identityUserRepository.SaveChangesAsync();
|
||||
|
||||
|
||||
var identityUserId = existSysUser.Id;
|
||||
|
||||
|
||||
var userTypeList = await _identityUserRepository.Where(t => t.Id == identityUserId).SelectMany(t => t.UserRoleList).Select(t => new { t.UserTypeId, t.UserTypeRole.UserTypeShortName }).ToListAsync();
|
||||
|
||||
var userHaveUserTypeIdList = userTypeList.Select(t => t.UserTypeId).ToList();
|
||||
|
||||
if (userTypeIdList.Except(userHaveUserTypeIdList).Any())
|
||||
{
|
||||
return ResponseOutput.NotOk("database dirty data ");
|
||||
}
|
||||
|
||||
var findTrialUser = await _trialIdentityUserRepository.Where(t => t.TrialId == trialId && t.IdentityUserId == identityUserId, true).Include(t => t.TrialUserRoleList).FirstOrDefaultAsync();
|
||||
|
||||
if (findTrialUser == null)
|
||||
{
|
||||
//没有项目参与人员
|
||||
findTrialUser = await _trialIdentityUserRepository.AddAsync(new TrialIdentityUser()
|
||||
{
|
||||
IdentityUserId = identityUserId,
|
||||
TrialId = trialId,
|
||||
JoinTime = DateTime.Now,
|
||||
TrialUserRoleList = userTypeIdList.Select(u => new TrialUserRole()
|
||||
{
|
||||
TrialId = trialId,
|
||||
UserId = u,
|
||||
|
||||
}).ToList()
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
//有该人员
|
||||
|
||||
//是否有该角色
|
||||
|
||||
foreach (var userTypeId in userTypeIdList)
|
||||
{
|
||||
var findTrialUserRole = findTrialUser.TrialUserRoleList.Where(t => t.UserId == userTypeId).FirstOrDefault();
|
||||
|
||||
if (findTrialUserRole == null)
|
||||
{
|
||||
//添加该角色
|
||||
findTrialUser.TrialUserRoleList.Add(new TrialUserRole() { TrialUserId = findTrialUser.Id, TrialId = trialId, UserId = userTypeId });
|
||||
}
|
||||
else
|
||||
{
|
||||
//如果禁用,那么启用
|
||||
if (findTrialUserRole.IsDeleted == true)
|
||||
{
|
||||
findTrialUserRole.IsDeleted = false;
|
||||
findTrialUserRole.DeletedTime = null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
var usertyps = string.Join(',', userTypeList.Select(t => t.UserTypeShortName));
|
||||
|
||||
await _mailVerificationService.ExternalUserJoinEmail(trialId, identityUserId, usertyps, sendEmail.BaseUrl, sendEmail.RouteUrl);
|
||||
|
||||
await _trialExternalUseRepository.BatchUpdateNoTrackingAsync(t => externalIdList.Contains(t.Id), u => new TrialExternalUser() { IsJoin = true });
|
||||
|
||||
foreach (var item in sendEmail.SendUsers.GroupBy(t => t.SystemUserId))
|
||||
{
|
||||
await _mailVerificationService.ExternalUserJoinEmail(trialId, item.Key, sendEmail.BaseUrl, sendEmail.RouteUrl);
|
||||
|
||||
}
|
||||
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace IRaCIS.Core.Application.Service
|
||||
public async Task<List<TrialUserBasicInfo>> GetTrialUserList(Guid trialId)
|
||||
{
|
||||
return await _trialUseRoleRepository.Where(t => t.TrialId == trialId, ignoreQueryFilters: true)
|
||||
.Select(t => new TrialUserBasicInfo() { FullName = t.UserRole.FullName, UserId = t.UserId, UserTypeId = t.UserRole.UserTypeId, UserName = t.UserRole.UserName })
|
||||
.Select(t => new TrialUserBasicInfo() { FullName = t.UserRole.FullName, UserId = t.UserId, UserTypeId = t.UserRole.UserTypeId, UserName = t.UserRole.IdentityUser.UserName })
|
||||
.ToListAsync();
|
||||
}
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ namespace IRaCIS.Core.Application.Services
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.TrialSiteCode), t => t.TrialSiteCode.Contains(inQuery.TrialSiteCode))
|
||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator, t => t.CRCUserList.Any(k => k.UserId == _userInfo.UserRoleId))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserKeyInfo), t => t.CRCUserList.Any(k => (k.UserRole.FullName).Contains(inQuery.UserKeyInfo)
|
||||
|| k.UserRole.UserName.Contains(inQuery.UserKeyInfo) || k.UserRole.EMail.Contains(inQuery.UserKeyInfo)))
|
||||
|| k.UserRole.IdentityUser.UserName.Contains(inQuery.UserKeyInfo) || k.UserRole.IdentityUser.EMail.Contains(inQuery.UserKeyInfo)))
|
||||
|
||||
.ProjectTo<SiteStatDTO>(_mapper.ConfigurationProvider);
|
||||
|
||||
@@ -111,7 +111,7 @@ namespace IRaCIS.Core.Application.Services
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.TrialSiteCode), t => t.TrialSiteCode.Contains(inQuery.TrialSiteCode))
|
||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator, t => t.CRCUserList.Any(k => k.UserId == _userInfo.UserRoleId))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserKeyInfo), t => t.CRCUserList.Any(k => (k.UserRole.FullName).Contains(inQuery.UserKeyInfo)
|
||||
|| k.UserRole.UserName.Contains(inQuery.UserKeyInfo) || k.UserRole.EMail.Contains(inQuery.UserKeyInfo)))
|
||||
|| k.UserRole.IdentityUser.UserName.Contains(inQuery.UserKeyInfo) || k.UserRole.IdentityUser.EMail.Contains(inQuery.UserKeyInfo)))
|
||||
|
||||
.ProjectTo<SiteStatSimpleDTO>(_mapper.ConfigurationProvider, new { isEn_Us = _userInfo.IsEn_Us });
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
CreateMap<TrialStateChange, TrialStateChangeDTO>()
|
||||
.ForMember(t => t.UserRealName, u => u.MapFrom(c => c.CreateUserRole.FullName))
|
||||
.ForMember(t => t.UserName, u => u.MapFrom(c => c.CreateUserRole.UserName));
|
||||
.ForMember(t => t.UserName, u => u.MapFrom(c => c.CreateUserRole.IdentityUser.UserName));
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user