修改 HIR 验证
continuous-integration/drone/push Build is passing Details

Test_HIR_Net8
hang 2024-12-17 16:37:38 +08:00
parent 81443e5e36
commit d568964c64
5 changed files with 18719 additions and 8 deletions

View File

@ -20,7 +20,7 @@ namespace IRaCIS.Application.Contracts
public string? StudyID { get; set; } public string? StudyID { get; set; }
public string? ModalitiesInStudy { get; set; } public List<string>? ModalitiesInStudyList { get; set; }
public string? AccessionNumber { get; set; } public string? AccessionNumber { get; set; }
@ -52,5 +52,8 @@ namespace IRaCIS.Application.Contracts
public class SCUStudyView : SCUBasicInfo public class SCUStudyView : SCUBasicInfo
{ {
public bool IsStudyExist { get; set; } public bool IsStudyExist { get; set; }
public string? ModalitiesInStudy { get; set; }
} }
} }

View File

@ -2827,7 +2827,7 @@ namespace IRaCIS.Application.Services
#region 基础方法 #region 基础方法
public static DicomCFindRequest CreateStudyRequest(SCUQuery inQuery) public static DicomCFindRequest CreateStudyRequest(SCUQuery inQuery, List<string> modalityList)
{ {
var request = new DicomCFindRequest(DicomQueryRetrieveLevel.Study); var request = new DicomCFindRequest(DicomQueryRetrieveLevel.Study);
@ -2862,6 +2862,8 @@ namespace IRaCIS.Application.Services
//request.Dataset.AddOrUpdate(DicomTag.PatientID, "Test*"); //request.Dataset.AddOrUpdate(DicomTag.PatientID, "Test*");
var modalityQuery = string.Join($"\\", (inQuery.ModalitiesInStudyList == null || inQuery.ModalitiesInStudyList?.Count == 0) ? modalityList : inQuery.ModalitiesInStudyList);
//病例号 //病例号
request.Dataset.AddOrUpdate(DicomTag.PatientID, inQuery.PatientID.IsNullOrEmpty() ? "" : inQuery.PatientID); request.Dataset.AddOrUpdate(DicomTag.PatientID, inQuery.PatientID.IsNullOrEmpty() ? "" : inQuery.PatientID);
@ -2872,16 +2874,21 @@ namespace IRaCIS.Application.Services
request.Dataset.AddOrUpdate(DicomTag.StudyID, inQuery.StudyID.IsNullOrEmpty() ? "" : inQuery.StudyID); request.Dataset.AddOrUpdate(DicomTag.StudyID, inQuery.StudyID.IsNullOrEmpty() ? "" : inQuery.StudyID);
request.Dataset.AddOrUpdate(DicomTag.AccessionNumber, inQuery.StudyID.IsNullOrEmpty() ? "" : inQuery.AccessionNumber); request.Dataset.AddOrUpdate(DicomTag.AccessionNumber, inQuery.StudyID.IsNullOrEmpty() ? "" : inQuery.AccessionNumber);
request.Dataset.AddOrUpdate(DicomTag.ModalitiesInStudy, inQuery.ModalitiesInStudy.IsNullOrEmpty() ? "" : inQuery.ModalitiesInStudy); //request.Dataset.AddOrUpdate(DicomTag.ModalitiesInStudy, modalityQuery);
request.Dataset.AddOrUpdate(DicomTag.StudyDate, inQuery.StudyDate.IsNullOrEmpty() ? "" : inQuery.StudyDate); request.Dataset.AddOrUpdate(DicomTag.StudyDate, inQuery.StudyDate.IsNullOrEmpty() ? "" : inQuery.StudyDate);
request.Dataset.AddOrUpdate(DicomTag.StudyTime, inQuery.StudyTime.IsNullOrEmpty() ? "" : inQuery.StudyTime); request.Dataset.AddOrUpdate(DicomTag.StudyTime, inQuery.StudyTime.IsNullOrEmpty() ? "" : inQuery.StudyTime);
request.Dataset.AddOrUpdate(DicomTag.BodyPartExamined, inQuery.BodyPartExamined.IsNullOrEmpty() ? "" : inQuery.BodyPartExamined);
request.Dataset.AddOrUpdate(DicomTag.StudyDescription, inQuery.StudyDescription.IsNullOrEmpty() ? "" : inQuery.StudyDescription); request.Dataset.AddOrUpdate(DicomTag.StudyDescription, inQuery.StudyDescription.IsNullOrEmpty() ? "" : inQuery.StudyDescription);
request.Dataset.AddOrUpdate(DicomTag.StudyInstanceUID, inQuery.StudyInstanceUID.IsNullOrEmpty() ? "" : inQuery.StudyInstanceUID); request.Dataset.AddOrUpdate(DicomTag.StudyInstanceUID, inQuery.StudyInstanceUID.IsNullOrEmpty() ? "" : inQuery.StudyInstanceUID);
//测试
//request.Dataset.AddOrUpdate(DicomTag.SeriesInstanceUID, "");
//request.Dataset.AddOrUpdate(DicomTag.SeriesDescription, "");
//request.Dataset.AddOrUpdate(DicomTag.BodyPartExamined, inQuery.BodyPartExamined.IsNullOrEmpty() ? "" : inQuery.BodyPartExamined);
return request; return request;
} }
@ -2896,6 +2903,8 @@ namespace IRaCIS.Application.Services
if (response.Status == DicomStatus.Success) if (response.Status == DicomStatus.Success)
{ {
Console.WriteLine(response.Status.ToString()); Console.WriteLine(response.Status.ToString());
} }
} }
@ -2925,17 +2934,20 @@ namespace IRaCIS.Application.Services
if (find != null) if (find != null)
{ {
//// 设置 CancellationTokenSource
//var cts = new CancellationTokenSource();
//CancellationToken token = cts.Token;
var maxStudyCount = find.MaxStudyCount > 0 ? find.MaxStudyCount : 50; var maxStudyCount = find.MaxStudyCount > 0 ? find.MaxStudyCount : 50;
var client = DicomClientFactory.Create(find.IP, find.Port, false, "HIRSCUAE", find.CalledAE); var client = DicomClientFactory.Create(find.IP, find.Port, false, "HIRSCUAE", find.CalledAE);
client.NegotiateAsyncOps(); client.NegotiateAsyncOps();
var request = CreateStudyRequest(inQuery); var request = CreateStudyRequest(inQuery, find.ModalityList);
request.OnResponseReceived += (req, response) => request.OnResponseReceived += (req, response) =>
{ {
//DebugStudyResponse(response, _logger);
if (response.HasDataset) if (response.HasDataset)
{ {
@ -2946,9 +2958,9 @@ namespace IRaCIS.Application.Services
DateOnly datePart = DateOnly.FromDateTime(studyTime); DateOnly datePart = DateOnly.FromDateTime(studyTime);
TimeOnly timePart = TimeOnly.FromDateTime(studyTime); TimeOnly timePart = TimeOnly.FromDateTime(studyTime);
DateTime birthDate = DateTime.ParseExact(response.Dataset?.GetSingleValueOrDefault<string>(DicomTag.PatientBirthDate, ""), "yyyyMMdd", null); DateTime? birthDate = DateTime.ParseExact(response.Dataset?.GetSingleValueOrDefault<string>(DicomTag.PatientBirthDate, ""), "yyyyMMdd", null);
// 格式化为你需要的日期格式例如yyyy-MM-dd // 格式化为你需要的日期格式例如yyyy-MM-dd
string formattedBirthDate = birthDate.ToString("yyyy-MM-dd"); string formattedBirthDate = birthDate?.ToString("yyyy-MM-dd") ?? string.Empty;
result.Add(new SCUStudyView() result.Add(new SCUStudyView()
@ -2970,12 +2982,20 @@ namespace IRaCIS.Application.Services
if (result.Count == maxStudyCount) if (result.Count == maxStudyCount)
{ {
response.Status = DicomStatus.Cancel;
} }
} }
}; };
await client.AddRequestAsync(request); await client.AddRequestAsync(request);
await client.SendAsync(); await client.SendAsync();
} }
var resultInstanceUidList = result.Select(t => t.StudyInstanceUID).ToList(); var resultInstanceUidList = result.Select(t => t.StudyInstanceUID).ToList();

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,29 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace IRaCIS.Core.Infra.EFCore.Migrations
{
/// <inheritdoc />
public partial class PACSStudyCount : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "MaxStudyCount",
table: "DicomAE",
type: "int",
nullable: false,
defaultValue: 0);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "MaxStudyCount",
table: "DicomAE");
}
}
}

View File

@ -807,6 +807,9 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Property<DateTime?>("LatestTestTime") b.Property<DateTime?>("LatestTestTime")
.HasColumnType("datetime2"); .HasColumnType("datetime2");
b.Property<int>("MaxStudyCount")
.HasColumnType("int");
b.Property<string>("ModalityList") b.Property<string>("ModalityList")
.IsRequired() .IsRequired()
.HasColumnType("nvarchar(max)"); .HasColumnType("nvarchar(max)");