diff --git a/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs b/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs index 31330da10..414c9fa15 100644 --- a/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs +++ b/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs @@ -370,6 +370,10 @@ namespace IRaCIS.Application.Contracts public class HospitalGroupInfo { public Guid Id { get; set; } + + //从人的属性角度出发才有这个属性 + public bool? IsManager { get; set; } + public string Name { get; set; } public string Code { get; set; } diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs index 5335e2fe2..565bf5052 100644 --- a/IRaCIS.Core.Application/Service/Management/UserService.cs +++ b/IRaCIS.Core.Application/Service/Management/UserService.cs @@ -480,8 +480,8 @@ namespace IRaCIS.Core.Application.Service .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.OA, t => !t.UserRoleList.Any(t => t.UserTypeEnum == UserTypeEnum.Admin || t.UserTypeEnum == UserTypeEnum.SuperAdmin)) //GA 只能看有该课题组的用户,并且不是admin oa - .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA, t => !t.UserRoleList.Any(t => t.UserTypeEnum == UserTypeEnum.Admin || t.UserTypeEnum == UserTypeEnum.SuperAdmin || t.UserTypeEnum == UserTypeEnum.OA) - && t.IdentityUserHospitalGroupList.Any(t => _userInfo.HospitalGroupIdList.Contains(t.HospitalGroupId))) + .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA && _userInfo.HospitalGroupAdminIdList.Any(), t => !t.UserRoleList.Any(t => t.UserTypeEnum == UserTypeEnum.Admin || t.UserTypeEnum == UserTypeEnum.SuperAdmin || t.UserTypeEnum == UserTypeEnum.OA) + && t.IdentityUserHospitalGroupList.Any(t => _userInfo.HospitalGroupAdminIdList.Contains(t.HospitalGroupId))) .ProjectTo(_mapper.ConfigurationProvider); return await userQueryable.ToPagedListAsync(inQuery); @@ -1315,6 +1315,7 @@ namespace IRaCIS.Core.Application.Service HospitalGroupList = t.IdentityUser.IdentityUserHospitalGroupList.Where(t => t.IsDisabled == false).Select(t => new HospitalGroupInfo() { Id = t.HospitalGroupId, + IsManager = t.IsManager, Name = t.HospitalGroup.Name, Code = t.HospitalGroup.Code diff --git a/IRaCIS.Core.Application/Service/Visit/HospitalGroupService.cs b/IRaCIS.Core.Application/Service/Visit/HospitalGroupService.cs index fd7274169..94aa77e37 100644 --- a/IRaCIS.Core.Application/Service/Visit/HospitalGroupService.cs +++ b/IRaCIS.Core.Application/Service/Visit/HospitalGroupService.cs @@ -48,7 +48,7 @@ public class HospitalGroupService(IRepository _hospitalGroupRepos .WhereIf(!string.IsNullOrWhiteSpace(inQuery.Affiliation), t => t.Affiliation.Contains(inQuery.Affiliation)) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.ContactPhone), t => t.ContactPhone.Contains(inQuery.ContactPhone)) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.ContactName), t => t.ContactName.Contains(inQuery.ContactName)) - .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA, t => _userInfo.HospitalGroupIdList.Contains(t.Id) && t.IdentityUserList.Where(t => t.IsManager).Any(t => t.HospitalGroupId == t.Id)) + .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA, t => _userInfo.HospitalGroupAdminIdList.Contains(t.Id)) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.CallingAE), t => t.CallingAE.Contains(inQuery.CallingAE)) .WhereIf(inQuery.IsEnable != null, t => t.IsEnable == inQuery.IsEnable) .ProjectTo(_mapper.ConfigurationProvider); diff --git a/IRaCIS.Core.Application/Service/Visit/PatientService.cs b/IRaCIS.Core.Application/Service/Visit/PatientService.cs index b0dfd6277..0989156d6 100644 --- a/IRaCIS.Core.Application/Service/Visit/PatientService.cs +++ b/IRaCIS.Core.Application/Service/Visit/PatientService.cs @@ -49,6 +49,7 @@ using System.Dynamic; using System.Threading.Channels; using IRaCIS.Core.Application.Helper.OtherTool; using IRaCIS.Core.Infrastructure.Extention; +using NPOI.SS.Formula.Functions; namespace IRaCIS.Application.Services @@ -216,8 +217,9 @@ namespace IRaCIS.Application.Services //过滤医院,切换会有问题 .Where(t => t.HospitalId == hospitalInfo.Id) //GA 要过滤课题组 - .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA, t => _userInfo.HospitalGroupIdList.Contains(t.HospitalGroupId)) - .WhereIf(_userInfo.UserTypeEnumInt != (int)UserTypeEnum.SuperAdmin && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.Admin && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.OA && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.GA + .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA && _userInfo.HospitalGroupAdminIdList.Any(), t => _userInfo.HospitalGroupAdminIdList.Contains(t.HospitalGroupId)) + .WhereIf(_userInfo.UserTypeEnumInt != (int)UserTypeEnum.SuperAdmin && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.Admin && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.OA + && !(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA && _userInfo.HospitalGroupAdminIdList.Any()) , t => t.TrialUserRoleList.Any(t => t.UserId == _userInfo.UserRoleId) && t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId) && _userInfo.HospitalGroupIdList.Contains(t.HospitalGroupId)) .ProjectTo(_mapper.ConfigurationProvider); @@ -823,7 +825,7 @@ namespace IRaCIS.Application.Services } else { - item.CurrentUserHospitalGroupList = _userInfo.HospitalGroupList.Select(t => new HospitalGroupInfo() { Id = t.Id, Code = t.Code, Name = t.Name }).ToList(); + item.CurrentUserHospitalGroupList = _userInfo.HospitalGroupList.Select(t => new HospitalGroupInfo() { Id = t.Id, Code = t.Code, Name = t.Name, IsManager = t.IsManager }).ToList(); } } @@ -3511,7 +3513,7 @@ namespace IRaCIS.Application.Services } else { - item.CurrentUserHospitalGroupList = _userInfo.HospitalGroupList.Select(t => new HospitalGroupInfo() { Code = t.Code, Id = t.Id, Name = t.Name }).ToList(); + item.CurrentUserHospitalGroupList = _userInfo.HospitalGroupList.Select(t => new HospitalGroupInfo() { Code = t.Code, Id = t.Id, Name = t.Name, IsManager = t.IsManager }).ToList(); } } diff --git a/IRaCIS.Core.Infra.EFCore/AuthUser/IUserInfo.cs b/IRaCIS.Core.Infra.EFCore/AuthUser/IUserInfo.cs index f6d8ed012..7f1a762e7 100644 --- a/IRaCIS.Core.Infra.EFCore/AuthUser/IUserInfo.cs +++ b/IRaCIS.Core.Infra.EFCore/AuthUser/IUserInfo.cs @@ -7,6 +7,7 @@ namespace IRaCIS.Core.Domain.Share /// public interface IUserInfo { + List HospitalGroupAdminIdList { get; } List HospitalGroupIdList { get; } List HospitalGroupList { get; } Guid UserRoleId { get; } diff --git a/IRaCIS.Core.Infra.EFCore/AuthUser/UserInfo.cs b/IRaCIS.Core.Infra.EFCore/AuthUser/UserInfo.cs index 16a769593..fc619df85 100644 --- a/IRaCIS.Core.Infra.EFCore/AuthUser/UserInfo.cs +++ b/IRaCIS.Core.Infra.EFCore/AuthUser/UserInfo.cs @@ -47,14 +47,14 @@ namespace IRaCIS.Core.Domain.Share } } - public List HospitalGroupList + public List HospitalGroupList { get { var hospitalGroupList = _accessor?.HttpContext?.User?.FindFirst(JwtIRaCISClaimType.HospitalGroupList); if (hospitalGroupList != null && !string.IsNullOrEmpty(hospitalGroupList.Value)) { - return (List) hospitalGroupList.Value.JsonStrToObject(typeof(List)); + return (List)hospitalGroupList.Value.JsonStrToObject(typeof(List)); } return new List(); } @@ -62,6 +62,10 @@ namespace IRaCIS.Core.Domain.Share public List HospitalGroupIdList => HospitalGroupList.Select(x => x.Id).ToList(); + public List HospitalGroupAdminIdList => HospitalGroupList.Where(t => t.IsManager).Select(x => x.Id).ToList(); + + + public Guid UserTypeId { get @@ -319,6 +323,9 @@ namespace IRaCIS.Core.Domain.Share public class HospitalGroupInfo { public Guid Id { get; set; } + + public bool IsManager { get; set; } + public string Name { get; set; } public string Code { get; set; }