Merge branch 'Test_HIR_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_HIR_Net8
continuous-integration/drone/push Build is failing Details

Test_HIR_Net8
he 2025-09-09 18:12:17 +08:00
commit 4c3a96a0f6
5 changed files with 109 additions and 21 deletions

View File

@ -18607,7 +18607,7 @@
<param name="inQuery"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Application.Services.PatientService.GetCFindStudyList(IRaCIS.Application.Contracts.SCUQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomAE},Microsoft.Extensions.Logging.ILogger{IRaCIS.Application.Services.PatientService})">
<member name="M:IRaCIS.Application.Services.PatientService.GetCFindStudyList(IRaCIS.Application.Contracts.SCUQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomAE},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.IdentityUser},Microsoft.Extensions.Logging.ILogger{IRaCIS.Application.Services.PatientService})">
<summary>
获取 检查列表
</summary>

View File

@ -461,7 +461,13 @@ namespace IRaCIS.Core.Application.Service
public async Task<PageOutput<UserListDTO>> GetUserList(UserListQueryDTO inQuery)
{
var isGAGroupAdmin = _userInfo.HospitalGroupAdminIdList.Any();
var currentUserHospitalGroupList = _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).SelectMany(t => t.IdentityUserHospitalGroupList)
.Where(t => t.IsDisabled == false && t.HospitalGroup.IsEnable).Select(t => new { t.HospitalGroupId, t.IsManager }).ToList();
var hospitalGroupAdminIdList = currentUserHospitalGroupList.Where(t => t.IsManager).Select(t => t.HospitalGroupId).ToList();
var hospitalGroupIdList = currentUserHospitalGroupList.Select(t => t.HospitalGroupId).ToList();
var isGAGroupAdmin = hospitalGroupAdminIdList.Any();
var userQueryable = _identityUserRepository.Where(x => x.UserRoleList.Any(x => x.UserTypeEnum != UserTypeEnum.SuperAdmin))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserName), t => t.UserName.Contains(inQuery.UserName))
@ -486,7 +492,7 @@ namespace IRaCIS.Core.Application.Service
//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 => isGAGroupAdmin ? _userInfo.HospitalGroupAdminIdList.Contains(t.HospitalGroupId) : false))
&& t.IdentityUserHospitalGroupList.Any(t => isGAGroupAdmin ? hospitalGroupAdminIdList.Contains(t.HospitalGroupId) : false))
.ProjectTo<UserListDTO>(_mapper.ConfigurationProvider);
return await userQueryable.ToPagedListAsync(inQuery);

View File

@ -17,6 +17,7 @@ namespace IRaCIS.Core.Application.Service
public class TrialService(IRepository<Trial> _trialRepository,
IRepository<TrialIdentityUser> _trialIdentityUserRepository,
IRepository<IdentityUser> _identityUserRepository,
IRepository<CRO> _croRepository,
IRepository<EnrollDetail> _enrollDetailRepository,
IRepository<Dictionary> _dictionaryRepository,
@ -102,6 +103,13 @@ namespace IRaCIS.Core.Application.Service
//过滤废除的项目
public async Task<List<TrialSelectDTO>> GetTrialSelect()
{
var currentUserHospitalGroupList = _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).SelectMany(t => t.IdentityUserHospitalGroupList)
.Where(t => t.IsDisabled == false && t.HospitalGroup.IsEnable).Select(t => new { t.HospitalGroupId, t.IsManager }).ToList();
var hospitalGroupAdminIdList = currentUserHospitalGroupList.Where(t => t.IsManager).Select(t => t.HospitalGroupId).ToList();
var hospitalGroupIdList = currentUserHospitalGroupList.Select(t => t.HospitalGroupId).ToList();
// SuperAdmin Admin OP OA
List<int> sap = new List<int>() { (int)UserTypeEnum.SuperAdmin, (int)UserTypeEnum.Admin, (int)UserTypeEnum.OP, (int)UserTypeEnum.OA };
@ -136,8 +144,8 @@ namespace IRaCIS.Core.Application.Service
&& t.TrialUserRoleList.Any(t => t.UserId == _userInfo.UserRoleId && t.IsDeleted == false))
&& t.IsDeleted == false)
// ga
.WhereIf(ga.Contains(_userInfo.UserTypeEnumInt), t => _userInfo.HospitalGroupIdList.Contains(t.HospitalGroupId)&& trialState.Contains(t.TrialStatusStr))
// ga
.WhereIf(ga.Contains(_userInfo.UserTypeEnumInt) && hospitalGroupAdminIdList.Any(), t => hospitalGroupAdminIdList.Contains(t.HospitalGroupId) && trialState.Contains(t.TrialStatusStr))
// QA EA
.WhereIf(qAEq.Contains(_userInfo.UserTypeEnumInt), t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.IsDeleted == false
@ -680,7 +688,7 @@ namespace IRaCIS.Core.Application.Service
/// <returns></returns>
[HttpPost("{trialId:guid}/{status:int}")]
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
[TrialGlobalLimit("AfterStopCannNotOpt")]
public async Task<IResponseOutput> UpdateEnrollStatus(Guid trialId, EnrollStatus status)
{
await _enrollDetailRepository.AddAsync(new EnrollDetail()

View File

@ -43,14 +43,26 @@ public class HospitalGroupService(IRepository<HospitalGroup> _hospitalGroupRepos
public async Task<List<HospitalGroupView>> GetHospitalGroupList(HospitalGroupQuery inQuery)
{
var currentUserHospitalGroupIdList = new List<Guid>();
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager)
{
currentUserHospitalGroupIdList = _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).SelectMany(t => t.IdentityUserHospitalGroupList)
.Where(t => t.IsDisabled == false && t.HospitalGroup.IsEnable).Select(t => t.HospitalGroupId).ToList();
}
else if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA)
{
currentUserHospitalGroupIdList = _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).SelectMany(t => t.IdentityUserHospitalGroupList)
.Where(t => t.IsDisabled == false && t.HospitalGroup.IsEnable && t.IsManager).Select(t => t.HospitalGroupId).ToList();
}
var hospitalGroupQueryable = _hospitalGroupRepository.Where(t => t.IsEnable == true)//都是查询启用的
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.Code), t => t.Code.Contains(inQuery.Code))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.Name), t => t.Name.Contains(inQuery.Name))
.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.ProjectManager, t => _userInfo.HospitalGroupIdList.Contains(t.Id))
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA, t => _userInfo.HospitalGroupAdminIdList.Contains(t.Id))
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA, t => currentUserHospitalGroupIdList.Contains(t.Id))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.CallingAE), t => t.CallingAE.Contains(inQuery.CallingAE))
//.WhereIf(inQuery.IsEnable != null, t => t.IsEnable == inQuery.IsEnable)
.ProjectTo<HospitalGroupView>(_mapper.ConfigurationProvider);

View File

@ -51,6 +51,7 @@ namespace IRaCIS.Application.Services
[ApiExplorerSettings(GroupName = "HIR")]
public class PatientService(IRepository<SCPStudySubjectVisit> _studySubjectVisitRepository,
IRepository<TrialIdentityUser> _trialIdentityUserRepository,
IRepository<IdentityUser> _identityUserRepository,
IRepository<SubjectPatient> _subjectPatientRepository, IRepository<SCPStudyHospitalGroup> _SCPStudyHospitalGroupRepository,
IRepository<Trial> _trialRepository,
IRepository<CmoveStudy> _cmoveStudyRepository,
@ -201,6 +202,14 @@ namespace IRaCIS.Application.Services
{
var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, _ => CacheHelper.GetHospitalCode(_hIRHospitalRepository), TimeSpan.FromDays(7));
var currentUserHospitalGroupList = _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).SelectMany(t => t.IdentityUserHospitalGroupList)
.Where(t => t.IsDisabled == false && t.HospitalGroup.IsEnable).Select(t => new { t.HospitalGroupId, t.IsManager }).ToList();
var hospitalGroupAdminIdList = currentUserHospitalGroupList.Where(t => t.IsManager).Select(t => t.HospitalGroupId).ToList();
var hospitalGroupIdList = currentUserHospitalGroupList.Select(t => t.HospitalGroupId).ToList();
var trialQuery = _trialRepository
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.ResearchProgramNo), t => t.ResearchProgramNo.Contains(inQuery.ResearchProgramNo))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.ExperimentName), t => t.ExperimentName.Contains(inQuery.ExperimentName))
@ -211,10 +220,10 @@ namespace IRaCIS.Application.Services
//过滤医院,切换会有问题
.Where(t => t.HospitalId == hospitalInfo.Id)
//GA 要过滤课题组
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA && _userInfo.HospitalGroupAdminIdList.Any(), t => _userInfo.HospitalGroupAdminIdList.Contains(t.HospitalGroupId))
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA && hospitalGroupAdminIdList.Any(), t => 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))
&& !(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA && hospitalGroupAdminIdList.Any())
, t => t.TrialUserRoleList.Any(t => t.UserId == _userInfo.UserRoleId) && t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId) && hospitalGroupIdList.Contains(t.HospitalGroupId))
.ProjectTo<NewTrialView>(_mapper.ConfigurationProvider);
@ -624,7 +633,14 @@ namespace IRaCIS.Application.Services
var isAdminOrOA = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.Admin || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.OA || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin;
var currentUserHospitalGroupIdList = _userInfo.HospitalGroupList.Select(t => t.Id).ToList();
var currentUserHospitalGroupIdList = new List<Guid>();
if (!isAdminOrOA)
{
currentUserHospitalGroupIdList = _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).SelectMany(t => t.IdentityUserHospitalGroupList)
.Where(t => t.IsDisabled == false && t.HospitalGroup.IsEnable).Select(t => t.HospitalGroupId).ToList();
}
#region new ok
var query = _patientRepository.Where(t => isAdminOrOA ? true : t.SCPStudyList.Any(c => c.HospitalGroupList.Any(c => currentUserHospitalGroupIdList.Contains(c.HospitalGroupId))))
@ -689,7 +705,14 @@ namespace IRaCIS.Application.Services
}
else
{
item.CurrentUserHospitalGroupList = _userInfo.HospitalGroupList.Select(t => t.Name).ToList();
var list = _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).SelectMany(t => t.IdentityUserHospitalGroupList).Where(t => t.IsDisabled == false && t.HospitalGroup.IsEnable == true)
.Select(t => t.HospitalGroup.Name).ToList();
item.CurrentUserHospitalGroupList = list;
//item.CurrentUserHospitalGroupList = _userInfo.HospitalGroupList.Select(t => t.Name).ToList();
}
}
@ -778,7 +801,13 @@ namespace IRaCIS.Application.Services
{
var isAdminOrOA = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.Admin || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.OA || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin;
var currentUserHospitalGroupIdList = _userInfo.HospitalGroupList.Select(t => t.Id).ToList();
var currentUserHospitalGroupIdList = new List<Guid>();
if (!isAdminOrOA)
{
currentUserHospitalGroupIdList = _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).SelectMany(t => t.IdentityUserHospitalGroupList)
.Where(t => t.IsDisabled == false && t.HospitalGroup.IsEnable).Select(t => t.HospitalGroupId).ToList();
}
var query = from scpStudy in _studyRepository.Where(t => t.PatientId == inQuery.PatientId)
.Where(t => isAdminOrOA ? true : t.HospitalGroupList.Any(c => currentUserHospitalGroupIdList.Contains(c.HospitalGroupId)))
@ -819,7 +848,13 @@ namespace IRaCIS.Application.Services
}
else
{
item.CurrentUserHospitalGroupList = _userInfo.HospitalGroupList.Select(t => new HospitalGroupInfo() { Id = t.Id, Code = t.Code, Name = t.Name, IsManager = t.IsManager }).ToList();
var list = _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).SelectMany(t => t.IdentityUserHospitalGroupList).Where(t => t.IsDisabled == false && t.HospitalGroup.IsEnable == true)
.Select(t => new HospitalGroupInfo() { Code = t.HospitalGroup.Code, Id = t.Id, Name = t.HospitalGroup.Name, IsManager = t.IsManager }).ToList();
item.CurrentUserHospitalGroupList = list;
//item.CurrentUserHospitalGroupList = _userInfo.HospitalGroupList.Select(t => new HospitalGroupInfo() { Id = t.Id, Code = t.Code, Name = t.Name, IsManager = t.IsManager }).ToList();
}
}
@ -941,6 +976,7 @@ namespace IRaCIS.Application.Services
[HttpDelete]
public async Task<IResponseOutput> DeletePatientStudy(Guid patiendId, Guid scpStudyId,
[FromServices] IRepository<SCPSeries> _SeriesRepository,
[FromServices] IRepository<IdentityUser> _identityUserRepository,
[FromServices] IRepository<SCPInstance> _instanceRepository,
[FromServices] IRepository<SCPStudyHospitalGroup> _scpStudyHospitalGroupRepository)
{
@ -950,18 +986,38 @@ namespace IRaCIS.Application.Services
var isAdminOrOAOrGA = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.Admin || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.OA
|| _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA;
var currentPMHospitalGroupIdList = _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).SelectMany(t => t.IdentityUserHospitalGroupList)
.Where(t => t.IsDisabled == false && t.HospitalGroup.IsEnable == true).Select(t => t.HospitalGroupId).ToList();
// abc 课题组人属于AB 课题组,删除仅仅删除这个标签 直接返回
if (!isAdminOrOAOrGA && existList.Count > _userInfo.HospitalGroupList.Count)
if (!isAdminOrOAOrGA && existList.Count >= currentPMHospitalGroupIdList.Count)
{
//同课题组其他项目绑定了,那么这个绑定关系也不能删除
//这个检查 已经在该人所属课题组的项目进行了绑定访视不管是不是当前PM的项目 那么就不允许删除课题组关系和影像
if (_studySubjectVisitRepository.Any(t => t.SCPStudyId == scpStudyId && currentPMHospitalGroupIdList.Contains(t.Subject.Trial.HospitalGroupId)))
{
return ResponseOutput.NotOk(_localizer["Patient_SCPStudyVisitBindedSubmit"]);
}
//这个检查 已经在该人所属课题组的项目,没有进行绑定访视 那么就允许删除课题组关系
if (!_studySubjectVisitRepository.Any(t => t.SCPStudyId == scpStudyId && currentPMHospitalGroupIdList.Contains(t.Subject.Trial.HospitalGroupId)))
{
await _scpStudyHospitalGroupRepository.BatchDeleteNoTrackingAsync(t => t.SCPStudyId == scpStudyId && currentPMHospitalGroupIdList.Contains(t.HospitalGroupId));
return ResponseOutput.Ok();
}
await _scpStudyHospitalGroupRepository.BatchDeleteNoTrackingAsync(t => t.SCPStudyId == scpStudyId && _userInfo.HospitalGroupIdList.Contains(t.HospitalGroupId));
return ResponseOutput.Ok();
}
//不属于任何项目,那么删除所有影像和绑定关系
if (_studySubjectVisitRepository.Any(t => t.SCPStudyId == scpStudyId && t.StudyId != null))
if (_studySubjectVisitRepository.Any(t => t.SCPStudyId == scpStudyId))
{
//"该检查已绑定某项目下受试者访视(不一定是你所创建的项目)并已提交生成任务,不允许删除该检查"
return ResponseOutput.NotOk(_localizer["Patient_SCPStudyVisitBindedSubmit"]);
@ -3316,6 +3372,7 @@ namespace IRaCIS.Application.Services
[HttpPost]
public async Task<IResponseOutput<List<SCUStudyView>>> GetCFindStudyList(SCUQuery inQuery,
[FromServices] IRepository<DicomAE> _dicomAEReposiotry,
[FromServices] IRepository<IdentityUser> _identityUserReposiotry,
[FromServices] ILogger<PatientService> _logger)
{
@ -3561,7 +3618,12 @@ namespace IRaCIS.Application.Services
}
else
{
item.CurrentUserHospitalGroupList = _userInfo.HospitalGroupList.Select(t => new HospitalGroupInfo() { Code = t.Code, Id = t.Id, Name = t.Name, IsManager = t.IsManager }).ToList();
var list = _identityUserReposiotry.Where(t => t.Id == _userInfo.IdentityUserId).SelectMany(t => t.IdentityUserHospitalGroupList).Where(t => t.IsDisabled == false && t.HospitalGroup.IsEnable == true)
.Select(t => new HospitalGroupInfo() { Code = t.HospitalGroup.Code, Id = t.Id, Name = t.HospitalGroup.Name, IsManager = t.IsManager }).ToList();
item.CurrentUserHospitalGroupList = list;
//item.CurrentUserHospitalGroupList = _userInfo.HospitalGroupList.Select(t => new HospitalGroupInfo() { Code = t.Code, Id = t.Id, Name = t.Name, IsManager = t.IsManager }).ToList();
}
}