修改查询

This commit is contained in:
2024-12-27 11:32:17 +08:00
parent c06681f379
commit 7853614d2d
34 changed files with 237 additions and 165 deletions
@@ -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));