diff --git a/IRC.Core.SCP/Service/CStoreSCPService.cs b/IRC.Core.SCP/Service/CStoreSCPService.cs index 918b49764..ef885febd 100644 --- a/IRC.Core.SCP/Service/CStoreSCPService.cs +++ b/IRC.Core.SCP/Service/CStoreSCPService.cs @@ -36,9 +36,6 @@ namespace IRaCIS.Core.SCP.Service { public bool IsSupportThirdService { get; set; } - public List ThirdDestinationAEList { get; set; } - - public List CalledAEList { get; set; } public string ServerPort { get; set; } @@ -77,6 +74,8 @@ namespace IRaCIS.Core.SCP.Service private bool _isCurrentThirdForward = false; + private List ThirdDestinationAEList { get; set; } + private static readonly DicomTransferSyntax[] _acceptedTransferSyntaxes = new DicomTransferSyntax[] { @@ -132,8 +131,11 @@ namespace IRaCIS.Core.SCP.Service var _dicomAERepository = _serviceProvider.GetService>(); - var aeList = _dicomAERepository/*.Where(t => t.PacsTypeEnum == PacsType.PacsServer)*/.Select(t => t.CalledAE).ToList(); + ThirdDestinationAEList = _dicomAERepository.Where(t => t.PacsTypeEnum == PacsType.Destination).Select(t => new ThirdDestinationAE() { IP = t.IP, Port = t.Port, Name = t.CalledAE }).ToList(); + + + var aeList = _dicomAERepository/*.Where(t => t.PacsTypeEnum == PacsType.PacsServer)*/.Select(t => t.CalledAE).ToList(); var list = _hospitalGroupRepository.Where(t => t.IsEnable).ToList(); @@ -330,7 +332,7 @@ namespace IRaCIS.Core.SCP.Service var cmoveInfo = _cmoveStudyRepository.Where(t => t.StudyInstanceUIDList.Any(c => c == studyInstanceUid)).OrderByDescending(t => t.CreateTime).FirstOrDefault(); //确定是第三方请求 - if (cmoveInfo != null && DicomSCPServiceConfig.ThirdDestinationAEList.Any(t => t.Name == cmoveInfo.DestinationAE)) + if (cmoveInfo != null && ThirdDestinationAEList.Any(t => t.Name == cmoveInfo.DestinationAE)) { _isCurrentThirdForward = true; @@ -339,7 +341,7 @@ namespace IRaCIS.Core.SCP.Service try { - var findDestination = DicomSCPServiceConfig.ThirdDestinationAEList.FirstOrDefault(t => t.Name == cmoveInfo.DestinationAE); + var findDestination = ThirdDestinationAEList.FirstOrDefault(t => t.Name == cmoveInfo.DestinationAE); var forwardRequest = new DicomCStoreRequest(request.File.Clone()); diff --git a/IRC.Core.SCP/appsettings.Test_HIR_SCP.json b/IRC.Core.SCP/appsettings.Test_HIR_SCP.json index bdb7c3131..7fa247e33 100644 --- a/IRC.Core.SCP/appsettings.Test_HIR_SCP.json +++ b/IRC.Core.SCP/appsettings.Test_HIR_SCP.json @@ -25,19 +25,6 @@ }, "DicomSCPServiceConfig": { "IsSupportThirdService": true, - - "ThirdDestinationAEList": [ - { - "Name": "LYAE", - "IP": "192.168.3.194", - "Port": "6000" - }, - { - "Name": "HIRLAE", - "IP": "192.168.3.194", - "Port": "6000" - } - ], "CalledAEList": [ "HIRAE", "STORESCP" diff --git a/IRaCIS.Core.API/HostService/DicomSCPService.cs b/IRaCIS.Core.API/HostService/DicomSCPService.cs index 050957873..d0be20f78 100644 --- a/IRaCIS.Core.API/HostService/DicomSCPService.cs +++ b/IRaCIS.Core.API/HostService/DicomSCPService.cs @@ -3,6 +3,7 @@ using DocumentFormat.OpenXml.Bibliography; using FellowOakDicom; using FellowOakDicom.Network; using FellowOakDicom.Network.Client; +using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Infra.EFCore; using IRaCIS.Core.Infrastructure.Extention; @@ -20,18 +21,7 @@ using System.Threading.Tasks; namespace IRaCIS.Core.API.HostService { - public class DicomSCPServiceOption - { - public bool IsSupportThirdService { get; set; } - public string ThirdSearchPacsAE { get; set; } - - public string ThirdCallningAE { get; set; } - - public List CalledAEList { get; set; } - - public string ServerPort { get; set; } - } public class DicomSCPService : DicomService, IDicomServiceProvider, IDicomCFindProvider, IDicomCEchoProvider, IDicomCMoveProvider { diff --git a/IRaCIS.Core.API/Progranm.cs b/IRaCIS.Core.API/Progranm.cs index 0d306d9a9..a8e4d4804 100644 --- a/IRaCIS.Core.API/Progranm.cs +++ b/IRaCIS.Core.API/Progranm.cs @@ -28,6 +28,7 @@ using System.Reflection; using System.Runtime.InteropServices; using FellowOakDicom.Imaging.NativeCodec; using FellowOakDicom.Imaging; +using IRaCIS.Core.Application.Contracts; AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true); AppContext.SetSwitch("Npgsql.DisableDateTimeInfinityConversions", true); diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index cf8e74cd1..cff63f398 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -13857,7 +13857,7 @@ DicomAEService - + DicomAEService diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/SCPServiceViewModel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/SCPServiceViewModel.cs new file mode 100644 index 000000000..400c5e861 --- /dev/null +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/SCPServiceViewModel.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IRaCIS.Core.Application.Contracts +{ + public class DicomSCPServiceOption + { + public bool IsSupportThirdService { get; set; } + + public string ThirdSearchPacsAE { get; set; } + + public string ThirdCallningAE { get; set; } + + public List CalledAEList { get; set; } + + public string ServerPort { get; set; } + } +} diff --git a/IRaCIS.Core.Application/Service/Visit/DicomAEService.cs b/IRaCIS.Core.Application/Service/Visit/DicomAEService.cs index f7ede2370..da0519652 100644 --- a/IRaCIS.Core.Application/Service/Visit/DicomAEService.cs +++ b/IRaCIS.Core.Application/Service/Visit/DicomAEService.cs @@ -14,13 +14,15 @@ using IRaCIS.Application.Contracts; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; using FellowOakDicom; +using Microsoft.Extensions.Options; +using IRaCIS.Core.Application.Contracts; namespace IRaCIS.Core.Application.Service { /// /// DicomAEService /// [ApiExplorerSettings(GroupName = "Common")] - public class DicomAEService(IRepository _dicomAERepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IDicomAEService + public class DicomAEService(IRepository _dicomAERepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IOptionsMonitor _dicomSCPServiceOption) : BaseService, IDicomAEService { @@ -45,7 +47,7 @@ namespace IRaCIS.Core.Application.Service var pageList = await dicomAEQueryable.ToPagedListAsync(inQuery, nameof(DicomAEView.CalledAE)); - return ResponseOutput.Ok(pageList); + return ResponseOutput.Ok(pageList, _dicomSCPServiceOption.CurrentValue); } diff --git a/IRaCIS.Core.Domain/HIR/DicomAE.cs b/IRaCIS.Core.Domain/HIR/DicomAE.cs index c1449ffec..72b37680d 100644 --- a/IRaCIS.Core.Domain/HIR/DicomAE.cs +++ b/IRaCIS.Core.Domain/HIR/DicomAE.cs @@ -54,5 +54,7 @@ namespace IRaCIS.Core.Domain.Models HIRClient = 1, PacsServer = 2, + + Destination=3 } }