From 468224cae9035218ddfb334d09e08deff738ffaa Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 19 Dec 2024 15:00:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9c-find=20=E6=B5=8B=E8=AF=95pa?= =?UTF-8?q?cs=E5=9C=A8=E7=BA=BF=E4=B8=8E=E5=90=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IRaCIS.Core.Application.xml | 2 +- .../Service/Visit/DicomAEService.cs | 2 +- .../Service/Visit/PatientService.cs | 53 +++++++++++++++---- 3 files changed, 44 insertions(+), 13 deletions(-) diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 905d0b10b..2ce7c0965 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -13147,7 +13147,7 @@ DicomAEService - + DicomAEService diff --git a/IRaCIS.Core.Application/Service/Visit/DicomAEService.cs b/IRaCIS.Core.Application/Service/Visit/DicomAEService.cs index 11f748843..c04dff33f 100644 --- a/IRaCIS.Core.Application/Service/Visit/DicomAEService.cs +++ b/IRaCIS.Core.Application/Service/Visit/DicomAEService.cs @@ -97,7 +97,7 @@ namespace IRaCIS.Core.Application.Service client.NegotiateAsyncOps(); - client.ServiceOptions.RequestTimeout = TimeSpan.FromSeconds(5); + client.ServiceOptions.RequestTimeout = TimeSpan.FromSeconds(3); var request = new DicomCEchoRequest { diff --git a/IRaCIS.Core.Application/Service/Visit/PatientService.cs b/IRaCIS.Core.Application/Service/Visit/PatientService.cs index 10e5446c5..86cb61818 100644 --- a/IRaCIS.Core.Application/Service/Visit/PatientService.cs +++ b/IRaCIS.Core.Application/Service/Visit/PatientService.cs @@ -2914,8 +2914,34 @@ namespace IRaCIS.Application.Services #endregion + private bool CEchoTest(DicomAE find) + { + var client = DicomClientFactory.Create(find.IP, find.Port, false, "test-callingAE", find.CalledAE); + client.NegotiateAsyncOps(); + + client.ServiceOptions.RequestTimeout = TimeSpan.FromSeconds(3); + + var request = new DicomCEchoRequest + { + OnResponseReceived = (req, response) => + { + + if (response.Status == DicomStatus.Success) + { + find.IsTestOK = true; + } + else + { + find.IsTestOK = false; + } + } + }; + + return find.IsTestOK; + } + /// /// 获取 检查列表 /// @@ -2942,9 +2968,11 @@ namespace IRaCIS.Application.Services if (find != null) { - //// 设置 CancellationTokenSource - //var cts = new CancellationTokenSource(); - //CancellationToken token = cts.Token; + //测试失败 + if (!CEchoTest(find)) + { + throw new BusinessValidationFailedException(_localizer["Patient_PacsAENotOnline"]); + } var @lock = _distributedLockProvider.CreateLock($"CFind"); @@ -3034,17 +3062,20 @@ namespace IRaCIS.Application.Services await client.AddRequestsAsync(requestList); await client.SendAsync(); + + + var resultInstanceUidList = result.Select(t => t.StudyInstanceUID).ToList(); + + var existStudyIdList = _studyRepository.Where(t => resultInstanceUidList.Contains(t.StudyInstanceUid)) + .Select(t => t.StudyInstanceUid).ToList(); + + foreach (var item in result) + { + item.IsStudyExist = existStudyIdList.Any(t => t == item.StudyInstanceUID); + } } - var resultInstanceUidList = result.Select(t => t.StudyInstanceUID).ToList(); - var existStudyIdList = _studyRepository.Where(t => resultInstanceUidList.Contains(t.StudyInstanceUid)) - .Select(t => t.StudyInstanceUid).ToList(); - - foreach (var item in result) - { - item.IsStudyExist = existStudyIdList.Any(t => t == item.StudyInstanceUID); - } return ResponseOutput.Ok(result, find);