From 29da1ab464e0785c7a809b9ad2607100e378b76f Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 19 Aug 2025 09:57:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=94=A8=E6=88=B7=EF=BC=8C?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=B7=BB=E5=8A=A0=E6=8E=A5=E5=8F=A3=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IRaCIS.Core.Application.xml | 2 +- .../Service/Management/DTO/UserModel.cs | 2 ++ .../Service/Management/UserService.cs | 10 ++++++++-- .../TrialSiteUser/DTO/TrialViewModel.cs | 2 +- .../Service/Visit/PatientService.cs | 18 ++++++++++++++---- 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 678432512..063ab32fc 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -18220,7 +18220,7 @@ 修改检查课题组 1是添加 2是删除 - + diff --git a/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs b/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs index 2ed54fae2..72ddde9ca 100644 --- a/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs +++ b/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs @@ -240,6 +240,8 @@ namespace IRaCIS.Application.Contracts public class UserCommand : UserInfo { + public Guid? TrialId { get; set; } + public Guid? Id { get; set; } public List UserRoleList { get; set; } diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs index 8a3024b99..0dfd535de 100644 --- a/IRaCIS.Core.Application/Service/Management/UserService.cs +++ b/IRaCIS.Core.Application/Service/Management/UserService.cs @@ -287,7 +287,7 @@ namespace IRaCIS.Core.Application.Service public async Task ResetPassword(Guid identityUserId) { - var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, _ => CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7)); + var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, _ => CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7)); //var pwd = IRCEmailPasswordHelper.GenerateRandomPassword(10); @@ -511,13 +511,19 @@ namespace IRaCIS.Core.Application.Service [UnitOfWork] public async Task> AddUser(UserCommand userAddModel) { - var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, _ => CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7)); + var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, _ => CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7)); if (userAddModel.UserName.IsNotNullOrEmpty()) { await VerifyUserNameAsync(null, userAddModel.UserName); } + else + { + var hospitalGroupId = _trialRepository.Where(t => t.Id == userAddModel.TrialId).Select(t => t.HospitalGroupId).FirstOrDefault(); + + userAddModel.HospitalGroupIdList = new List { hospitalGroupId }; + } await VerifyUserEmailAsync(null, userAddModel.EMail); diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialViewModel.cs index f4930a553..d5152d14e 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialViewModel.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialViewModel.cs @@ -57,7 +57,7 @@ namespace IRaCIS.Application.Contracts public string AttendedReviewerTypes { get; set; } = string.Empty; - + public Guid HospitalGroupId { get; set; } } diff --git a/IRaCIS.Core.Application/Service/Visit/PatientService.cs b/IRaCIS.Core.Application/Service/Visit/PatientService.cs index 5fb15245c..423cd4e17 100644 --- a/IRaCIS.Core.Application/Service/Visit/PatientService.cs +++ b/IRaCIS.Core.Application/Service/Visit/PatientService.cs @@ -708,7 +708,10 @@ namespace IRaCIS.Application.Services //排除已参与的项目列表 var exceptQuery = _subjectPatientRepository.Where(t => t.PatientId == inQuery.PatientId).Select(t => t.Subject.TrialId); - var trialQuery = _trialRepository.Where(t => t.TrialStatusStr == StaticData.TrialState.TrialOngoing) + //患者检查所属的课题组 要和项目进行匹配,否则过滤掉 + var hospitalGroupIdList = await _studyRepository.Where(t => t.PatientId == inQuery.PatientId).SelectMany(t => t.HospitalGroupList).Select(t => t.HospitalGroupId).Distinct().ToListAsync(); + + var trialQuery = _trialRepository.Where(t => t.TrialStatusStr == StaticData.TrialState.TrialOngoing && hospitalGroupIdList.Contains(t.HospitalGroupId)) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.Filter), t => t.ResearchProgramNo.Contains(inQuery.Filter) || t.ExperimentName.Contains(inQuery.Filter)) .Where(t => t.TrialUserList.Any(c => c.UserId == _userInfo.UserRoleId)) .Where(t => !exceptQuery.Any(c => c == t.Id)).ProjectTo(_mapper.ConfigurationProvider); @@ -797,7 +800,7 @@ namespace IRaCIS.Application.Services /// /// 修改检查课题组 1是添加 2是删除 /// - /// + /// /// [HttpPost] public async Task ModifySCPStudyHospitalGroup(SCPStudyHospitalGroupCommand incommand) @@ -1032,7 +1035,10 @@ namespace IRaCIS.Application.Services [HttpPost] public async Task>> GetPatientInitList(PatientQuery inQuery) { - var query = _patientRepository + //该患者要匹配该项目的课题组 + var hospitalGroupId = _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => t.HospitalGroupId).FirstOrDefault(); + + var query = _patientRepository.Where(t => t.SCPStudyList.Any(c => c.HospitalGroupList.Any(k => k.HospitalGroupId == hospitalGroupId))) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.PatientIdStr), t => t.PatientIdStr.Contains(inQuery.PatientIdStr)) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.PatientName), t => t.PatientName.Contains(inQuery.PatientName)) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.CallingAE), t => t.SCPStudyList.Any(t => t.CallingAE == inQuery.CallingAE)) @@ -2017,7 +2023,11 @@ namespace IRaCIS.Application.Services [HttpPost] public async Task> GetVisitPatientStudyList(PatientStudyQuery inQuery) { - var patientQuery = from scpStudy in _studyRepository + var hospitalGroupId = _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => t.HospitalGroupId).FirstOrDefault(); + + //检查要匹配该项目的课题组 + + var patientQuery = from scpStudy in _studyRepository.Where(t => t.HospitalGroupList.Any(c => c.HospitalGroupId == hospitalGroupId)) .Where(t => inQuery.PatientIdList.Contains(t.PatientId)) .WhereIf(inQuery.EarliestStudyTime != null, t => t.StudyTime >= inQuery.EarliestStudyTime) .WhereIf(inQuery.LatestStudyTime != null, t => t.StudyTime <= inQuery.LatestStudyTime)