diff --git a/IRC.Core.SCP/Service/CStoreSCPService.cs b/IRC.Core.SCP/Service/CStoreSCPService.cs index 950b45946..8504fac36 100644 --- a/IRC.Core.SCP/Service/CStoreSCPService.cs +++ b/IRC.Core.SCP/Service/CStoreSCPService.cs @@ -400,7 +400,7 @@ namespace IRaCIS.Core.SCP.Service { try { - var scpStudyId = await dicomArchiveService.ArchiveDicomFileAsync(request.Dataset, storeRelativePath, Association.CallingAE, Association.CalledAE, fileSize); + var scpStudyId = await dicomArchiveService.ArchiveDicomFileAsync(request.File , storeRelativePath, Association.CallingAE, Association.CalledAE, fileSize); var series = await _seriesRepository.FirstOrDefaultAsync(t => t.Id == seriesId); diff --git a/IRC.Core.SCP/Service/DicomArchiveService.cs b/IRC.Core.SCP/Service/DicomArchiveService.cs index 4624041d6..0bef300d3 100644 --- a/IRC.Core.SCP/Service/DicomArchiveService.cs +++ b/IRC.Core.SCP/Service/DicomArchiveService.cs @@ -52,8 +52,11 @@ namespace IRaCIS.Core.SCP.Service /// /// /// - public async Task ArchiveDicomFileAsync(DicomDataset dataset, string fileRelativePath, string callingAE, string calledAE, long fileSize) + public async Task ArchiveDicomFileAsync(DicomFile dicomFile, string fileRelativePath, string callingAE, string calledAE, long fileSize) { + var dataset = dicomFile.Dataset; + + string studyInstanceUid = dataset.GetString(DicomTag.StudyInstanceUID); string seriesInstanceUid = dataset.GetString(DicomTag.SeriesInstanceUID); string sopInstanceUid = dataset.GetString(DicomTag.SOPInstanceUID); @@ -272,10 +275,10 @@ namespace IRaCIS.Core.SCP.Service { findSerice.DicomSeriesDate = dataset.GetSingleValueOrDefault(DicomTag.SeriesDate, string.Empty); findSerice.DicomSeriesTime = dataset.GetSingleValueOrDefault(DicomTag.SeriesTime, string.Empty); - findSerice.UpdateTime=DateTime.Now; + findSerice.UpdateTime = DateTime.Now; } - var transferSyntaxUID = dataset.GetSingleValueOrDefault(DicomTag.TransferSyntaxUID, string.Empty); + var transferSyntaxUID = dicomFile.FileMetaInfo.GetSingleValueOrDefault(DicomTag.TransferSyntaxUID, string.Empty); var isEncapsulated = false; if (transferSyntaxUID.IsNotNullOrEmpty()) @@ -296,9 +299,9 @@ namespace IRaCIS.Core.SCP.Service SopInstanceUid = sopInstanceUid, SOPClassUID = dataset.GetSingleValueOrDefault(DicomTag.SOPClassUID, string.Empty), - MediaStorageSOPClassUID = dataset.GetSingleValueOrDefault(DicomTag.MediaStorageSOPClassUID, string.Empty), + MediaStorageSOPClassUID = dicomFile.FileMetaInfo.GetSingleValueOrDefault(DicomTag.MediaStorageSOPClassUID, string.Empty), TransferSyntaxUID = transferSyntaxUID, - MediaStorageSOPInstanceUID = dataset.GetSingleValueOrDefault(DicomTag.MediaStorageSOPInstanceUID, string.Empty), + MediaStorageSOPInstanceUID = dicomFile.FileMetaInfo.GetSingleValueOrDefault(DicomTag.MediaStorageSOPInstanceUID, string.Empty), IsEncapsulated = isEncapsulated, InstanceNumber = dataset.GetSingleValueOrDefault(DicomTag.InstanceNumber, 1), diff --git a/IRC.Core.SCP/Service/Interface/IDicomArchiveService.cs b/IRC.Core.SCP/Service/Interface/IDicomArchiveService.cs index 031dcbd89..ac772b7ea 100644 --- a/IRC.Core.SCP/Service/Interface/IDicomArchiveService.cs +++ b/IRC.Core.SCP/Service/Interface/IDicomArchiveService.cs @@ -5,7 +5,7 @@ namespace IRaCIS.Core.SCP.Service { public interface IDicomArchiveService { - Task ArchiveDicomFileAsync(DicomDataset dicomDataset,string fileRelativePath,string callingAE,string calledAE,long fileSize); + Task ArchiveDicomFileAsync(DicomFile dicomFile,string fileRelativePath,string callingAE,string calledAE,long fileSize); } } diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs index b962c0ff6..c22f411b4 100644 --- a/IRaCIS.Core.Application/Service/Management/UserService.cs +++ b/IRaCIS.Core.Application/Service/Management/UserService.cs @@ -521,6 +521,20 @@ namespace IRaCIS.Core.Application.Service } + public async Task GetUserByEmail(string email) + { + + + var user = await _identityUserRepository.Where(t => t.EMail == email).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); + + if (user != null) + { + user.AccountList = await _userRoleRepository.Where(t => t.IdentityUserId == user.Id).ProjectTo(_mapper.ConfigurationProvider).OrderBy(t => t.UserTypeShortName).ToListAsync(); + + } + return user; + } + /// diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs index 348619631..68d822f46 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs @@ -1261,7 +1261,7 @@ namespace IRaCIS.Core.Application #region 自动激活一个月 - if (trial.AuthorizationDate == null && trial.AuthorizationEncrypt.IsNotNullOrEmpty()) + if (trial.AuthorizationDate == null && trial.AuthorizationEncrypt.IsNullOrEmpty()) { var query = _hIRHospitalRepository.Where(t => t.IsDefault == true).ProjectTo(_mapper.ConfigurationProvider); diff --git a/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs b/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs index ab9d65b19..f906bcb6c 100644 --- a/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs +++ b/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs @@ -532,13 +532,22 @@ namespace IRaCIS.Application.Contracts public class PatientStudyInfoQuery : PageInput { - [NotDefault] - public Guid PatientId { get; set; } + public Guid? PatientId { get; set; } public DateTime? EarliestStudyTime { get; set; } public DateTime? LatestStudyTime { get; set; } public string? Modalities { get; set; } + + public List HospitalGroupIdList { get; set; } = new List(); + + public List PatientHospitalGroupTagIdList { get; set; } = new List(); + + public string? PatientIdStr { get; set; } + public string? PatientName { get; set; } + public List CalledAEList { get; set; } = new List(); + + public string? CallingAE { get; set; } } @@ -1094,6 +1103,17 @@ namespace IRaCIS.Application.Contracts public List ViewHospitalGroupList => HospitalGroupList.Where(t => CurrentUserHospitalGroupList.Any(c => c.Id == t.Id)).ToList(); + public string StudyInstanceUid { get; set; } = string.Empty; + #region 检查列表 展示患者信息 联合列表 + + public string PatientIdStr { get; set; } = string.Empty; + public string PatientName { get; set; } = string.Empty; + public string PatientAge { get; set; } = string.Empty; + public string PatientSex { get; set; } = string.Empty; + public string PatientBirthDate { get; set; } = string.Empty; + + #endregion + } public class SCPStudyHospitalGroupInfo diff --git a/IRaCIS.Core.Application/Service/Visit/PatientService.cs b/IRaCIS.Core.Application/Service/Visit/PatientService.cs index 8b105f052..7c45bab42 100644 --- a/IRaCIS.Core.Application/Service/Visit/PatientService.cs +++ b/IRaCIS.Core.Application/Service/Visit/PatientService.cs @@ -44,6 +44,7 @@ using System.Dynamic; using System.Threading.Channels; using IRaCIS.Core.Application.Helper.OtherTool; using IRaCIS.Core.Infrastructure.Extention; +using NPOI.POIFS.Properties; namespace IRaCIS.Application.Services @@ -647,6 +648,8 @@ namespace IRaCIS.Application.Services #region new ok var query = _patientRepository.Where(t => isAdminOrOA ? true : t.SCPStudyList.Any(c => c.HospitalGroupList.Any(c => currentUserHospitalGroupIdList.Contains(c.HospitalGroupId)))) + + .WhereIf(inQuery.CalledAEList.Any(), t => t.SCPStudyList.Any(c=> inQuery.CalledAEList.Contains(c.CalledAE))) .WhereIf(inQuery.HospitalGroupIdList.Any(), t => t.SCPStudyList.Any(c => c.HospitalGroupList.Any(c => inQuery.HospitalGroupIdList.Contains(c.HospitalGroupId)))) .WhereIf(inQuery.PatientHospitalGroupTagIdList.Any(), t => t.PatientHospitalGroupTagList.Any(k => inQuery.PatientHospitalGroupTagIdList.Contains(k.HospitalGroupTagId))) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.PatientIdStr), t => t.PatientIdStr.Contains(inQuery.PatientIdStr)) @@ -656,11 +659,10 @@ namespace IRaCIS.Application.Services .WhereIf(inQuery.BeginPushTime != null, t => t.LatestPushTime >= inQuery.BeginPushTime) .WhereIf(inQuery.EndPushTime != null, t => t.LatestPushTime <= inQuery.EndPushTime); - foreach (var calledAE in inQuery.CalledAEList) - { - query = query.Where(t => t.SCPStudyList.Select(c => c.CalledAE).Contains(calledAE)); - } - + //foreach (var calledAE in inQuery.CalledAEList) + //{ + // query = query.Where(t => t.SCPStudyList.Select(c => c.CalledAE).Contains(calledAE)); + //} var resultQuery = from patient in query @@ -827,11 +829,20 @@ namespace IRaCIS.Application.Services .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) + var query = from scpStudy in _studyRepository + .WhereIf(inQuery.PatientId != null, t => t.PatientId == inQuery.PatientId) .Where(t => isAdminOrOA ? true : t.HospitalGroupList.Any(c => currentUserHospitalGroupIdList.Contains(c.HospitalGroupId))) .WhereIf(inQuery.EarliestStudyTime != null, t => t.StudyTime >= inQuery.EarliestStudyTime) .WhereIf(inQuery.LatestStudyTime != null, t => t.StudyTime <= inQuery.LatestStudyTime) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.Modalities), t => t.Modalities.Contains(inQuery.Modalities)) + .Where(t => isAdminOrOA ? true : t.HospitalGroupList.Any(c => currentUserHospitalGroupIdList.Contains(c.HospitalGroupId))) + + .WhereIf(inQuery.CalledAEList.Any(), t => inQuery.CalledAEList.Contains(t.CalledAE)) + .WhereIf(inQuery.HospitalGroupIdList.Any(), t => t.HospitalGroupList.Any(c => inQuery.HospitalGroupIdList.Contains(c.HospitalGroupId))) + .WhereIf(inQuery.PatientHospitalGroupTagIdList.Any(), t => t.Patient.PatientHospitalGroupTagList.Any(k => inQuery.PatientHospitalGroupTagIdList.Contains(k.HospitalGroupTagId))) + .WhereIf(!string.IsNullOrWhiteSpace(inQuery.PatientIdStr), t => t.Patient.PatientIdStr.Contains(inQuery.PatientIdStr)) + .WhereIf(!string.IsNullOrWhiteSpace(inQuery.PatientName), t => t.Patient.PatientName.Contains(inQuery.PatientName)) + .WhereIf(!string.IsNullOrWhiteSpace(inQuery.CallingAE), t => t.CallingAE == inQuery.CallingAE) select new PatientStudySimpleView() { Description = scpStudy.Description, @@ -845,12 +856,20 @@ namespace IRaCIS.Application.Services SeriesCount = scpStudy.SeriesCount, StudyTime = scpStudy.StudyTime, StudyIdStr = scpStudy.StudyId, + StudyInstanceUid= scpStudy.StudyInstanceUid, HospitalGroupList = scpStudy.HospitalGroupList.Select(t => new SCPStudyHospitalGroupInfo() { Id = t.HospitalGroupId, Name = t.HospitalGroup.Name - }).ToList() + }).ToList(), + + + PatientAge = scpStudy.Patient.PatientAge, + PatientName = scpStudy.Patient.PatientName, + PatientIdStr = scpStudy.Patient.PatientIdStr, + PatientSex = scpStudy.Patient.PatientSex, + PatientBirthDate = scpStudy.Patient.PatientBirthDate, }; var pageList = await query.ToPagedListAsync(inQuery, nameof(PatientStudySimpleView.StudyTime));