修改dicomAE 测试
continuous-integration/drone/push Build is passing Details

IRC_NewDev
hang 2024-08-09 15:01:22 +08:00
parent ed94423f32
commit 63e2ca07b5
2 changed files with 41 additions and 44 deletions

View File

@ -61,6 +61,15 @@ namespace IRaCIS.Core.Application.ViewModel
public bool IsPACSConnect { get; set; }
public bool IsTestOK { get; set; }
}
public class TestAECommand
{
public string CalledAE { get; set; } = string.Empty;
public string IP { get; set; } = string.Empty;
public int Port { get; set; }
}

View File

@ -12,6 +12,7 @@ using FellowOakDicom.Network.Client;
using FellowOakDicom.Network;
using IRaCIS.Application.Contracts;
using IRaCIS.Core.Domain.Share;
using DocumentFormat.OpenXml.InkML;
namespace IRaCIS.Core.Application.Service
{
/// <summary>
@ -84,6 +85,14 @@ namespace IRaCIS.Core.Application.Service
VerifyMsg = _localizer["TrialDicomAE_RepeatCalledAE"]
};
var verifyExp3 = new EntityVerifyExp<TrialDicomAE>()
{
VerifyExp = u => u.TrialId == addOrEditDicomAE.TrialId,
//"AE名称不能与其他项目相同"
VerifyMsg = "该项目只允许添加一条dicom AE记录前端对接有bug时出现"
};
//var verifyExp2 = new EntityVerifyExp<TrialDicomAE>()
//{
// VerifyExp = u => u.TrialId == addOrEditDicomAE.TrialId,
@ -98,7 +107,7 @@ namespace IRaCIS.Core.Application.Service
if (addOrEditDicomAE.IsPACSConnect)
{
// 在此处拷贝automapper 映射
var entity = await _dicomAERepository.InsertOrUpdateAsync(addOrEditDicomAE, true, verifyExp1, verifyExp2);
var entity = await _dicomAERepository.InsertOrUpdateAsync(addOrEditDicomAE, true, verifyExp3, verifyExp1, verifyExp2);
return ResponseOutput.Ok(entity.Id.ToString());
}
@ -123,54 +132,33 @@ namespace IRaCIS.Core.Application.Service
/// 测试scp server 是否可以连接
/// </summary>
/// <returns></returns>
[HttpGet("{dicomAEId:guid}")]
public async Task<bool> TestSCPServerConnect(Guid dicomAEId)
[HttpPost]
public async Task<bool> TestSCPServerConnect(TestAECommand inCommand)
{
var find = await _dicomAERepository.FirstOrDefaultAsync(t => t.Id == dicomAEId);
if (find == null)
try
{
var client = DicomClientFactory.Create(inCommand.IP, inCommand.Port, false, "test-callingAE", inCommand.CalledAE);
return false;
client.NegotiateAsyncOps();
await client.AddRequestAsync(new DicomCEchoRequest());
// 创建一个超时任务设置超时时间为1秒
var timeoutTask = Task.Delay(TimeSpan.FromSeconds(3));
// 发送 DICOM 请求
var sendTask = client.SendAsync();
// 等待任务完成,若超时任务先完成则抛出超时异常
if (await Task.WhenAny(sendTask, timeoutTask) == timeoutTask)
{
throw new TimeoutException("DICOM 请求超时。");
}
return true;
}
else
catch (Exception ex)
{
find.LatestTestTime = DateTime.Now;
try
{
var client = DicomClientFactory.Create(find.IP, find.Port, false, "test-callingAE", find.CalledAE);
client.NegotiateAsyncOps();
await client.AddRequestAsync(new DicomCEchoRequest());
// 创建一个超时任务设置超时时间为1秒
var timeoutTask = Task.Delay(TimeSpan.FromSeconds(3));
// 发送 DICOM 请求
var sendTask = client.SendAsync();
// 等待任务完成,若超时任务先完成则抛出超时异常
if (await Task.WhenAny(sendTask, timeoutTask) == timeoutTask)
{
throw new TimeoutException("DICOM 请求超时。");
}
find.IsTestOK = true;
await _dicomAERepository.SaveChangesAsync();
return true;
}
catch (Exception ex)
{
find.IsTestOK = false;
await _dicomAERepository.SaveChangesAsync();
return false;
}
return false;
}