public static DicomCFindRequest CreateStudyQuery( string patientId = null, string patientName = null, DicomDateRange studyDateTime = null, string accession = null, string studyId = null, string modalitiesInStudy = null, string studyInstanceUid = null) { var dimse = new DicomCFindRequest(DicomQueryRetrieveLevel.Study); dimse.SOPClassUID = DicomUID.StudyRootQueryRetrieveInformationModelFIND; dimse.Dataset.Add(DicomTag.PatientID, patientId); dimse.Dataset.Add(DicomTag.PatientName, patientName); dimse.Dataset.Add(DicomTag.OtherPatientIDs, String.Empty); dimse.Dataset.Add(DicomTag.IssuerOfPatientID, String.Empty); dimse.Dataset.Add(DicomTag.PatientSex, String.Empty); dimse.Dataset.Add(DicomTag.PatientBirthDate, String.Empty); dimse.Dataset.Add(DicomTag.StudyInstanceUID, studyInstanceUid); dimse.Dataset.Add(DicomTag.ModalitiesInStudy, modalitiesInStudy); dimse.Dataset.Add(DicomTag.StudyID, studyId); dimse.Dataset.Add(DicomTag.AccessionNumber, accession); dimse.Dataset.Add(DicomTag.StudyDate, studyDateTime); dimse.Dataset.Add(DicomTag.StudyTime, studyDateTime); dimse.Dataset.Add(DicomTag.StudyDescription, String.Empty); dimse.Dataset.Add(DicomTag.NumberOfStudyRelatedSeries, String.Empty); dimse.Dataset.Add(DicomTag.NumberOfStudyRelatedInstances, String.Empty); return dimse; }
public static DicomCFindRequest CreateStudyQuery( string patientId = null, string patientName = null, DicomDateRange studyDateTime = null, string accession = null, string studyId = null, string modalitiesInStudy = null, string studyInstanceUid = null) { var dimse = new DicomCFindRequest(DicomQueryRetrieveLevel.Study); dimse.SOPClassUID = DicomUID.StudyRootQueryRetrieveInformationModelFIND; dimse.Dataset.Add(DicomTag.PatientID, patientId); dimse.Dataset.Add(DicomTag.PatientName, patientName); dimse.Dataset.Add(DicomTag.OtherPatientIDs, String.Empty); dimse.Dataset.Add(DicomTag.IssuerOfPatientID, String.Empty); dimse.Dataset.Add(DicomTag.PatientSex, String.Empty); dimse.Dataset.Add(DicomTag.PatientBirthDate, String.Empty); dimse.Dataset.Add(DicomTag.StudyInstanceUID, studyInstanceUid); dimse.Dataset.Add(DicomTag.ModalitiesInStudy, modalitiesInStudy); dimse.Dataset.Add(DicomTag.StudyID, studyId); dimse.Dataset.Add(DicomTag.AccessionNumber, accession); dimse.Dataset.Add(DicomTag.StudyDate, studyDateTime); dimse.Dataset.Add(DicomTag.StudyTime, studyDateTime); dimse.Dataset.Add(DicomTag.StudyDescription, String.Empty); dimse.Dataset.Add(DicomTag.NumberOfStudyRelatedSeries, String.Empty); dimse.Dataset.Add(DicomTag.NumberOfStudyRelatedInstances, String.Empty); return(dimse); }
public static bool IsOutOfRange(DicomDataset request) { if (request.Contains(DicomTag.ScheduledProcedureStepSequence)) { DicomDataset procedureStep = request.GetSequence(DicomTag.ScheduledProcedureStepSequence).First(); var scheduledProcedureStepStartDate = procedureStep.GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepStartDate, string.Empty); Logger.Info($"scheduledProcedureStepStartDate: {scheduledProcedureStepStartDate}"); Log.Loger($"scheduledProcedureStepStartDate: {scheduledProcedureStepStartDate}"); if (!string.IsNullOrEmpty(scheduledProcedureStepStartDate) && scheduledProcedureStepStartDate != "*") { var index = scheduledProcedureStepStartDate.IndexOf("-"); if (index >= 0) { scheduledProcedureStepStartDate = scheduledProcedureStepStartDate.Substring(0, index); Logger.Info($"New scheduledProcedureStepStartDate: {scheduledProcedureStepStartDate}"); Log.Loger($"New scheduledProcedureStepStartDate: {scheduledProcedureStepStartDate}"); } if (string.IsNullOrEmpty(scheduledProcedureStepStartDate)) { return(true); } DateTime endDate = System.DateTime.Today.AddDays(1).AddSeconds(-1); DateTime startDate = endDate.AddDays(_cacheDays * -1); //DicomDateRange range = new DicomDateTime(DicomTag.ScheduledProcedureStepStartDate, startDate).Get<DicomDateRange>(); DicomDateRange range = new DicomDateRange(startDate, endDate); DateTime queryStartDate = new DicomDateTime(DicomTag.ScheduledProcedureStepStartDate, scheduledProcedureStepStartDate).Get <DateTime>(); return(!range.Contains(queryStartDate)); } } return(false); }
public static List <DicomDataset> GetCachedWorklist() { //记录查询时间 System.Diagnostics.Stopwatch stopWatch1 = new System.Diagnostics.Stopwatch(); stopWatch1.Start(); DateTime dtRequestBeg = DateTime.Now; Logger.Info($">>GetCachedWorklist CreateWorklistQuery BeginTime: {dtRequestBeg.ToString("yyyy-MM-dd HH:mm:ss")}"); Log.Loger($">>GetCachedWorklist CreateWorklistQuery BeginTime: {dtRequestBeg.ToString("yyyy-MM-dd HH:mm:ss")}"); DateTime endDate = System.DateTime.Today.AddDays(1).AddSeconds(-1); DateTime startDate = endDate.AddDays(_cacheDays * -1); DicomDateRange dr = new DicomDateRange(startDate, endDate); var cfind = DicomCFindRequest.CreateWorklistQuery(null, null, null, null, null, dr); //记录查询时间 DateTime dtRequestEnd = DateTime.Now; Logger.Info($">>CreateWorklistQuery EndTime: {dtRequestEnd.ToString("yyyy-MM-dd HH:mm:ss")}"); Log.Loger($">>CreateWorklistQuery EndTime: {dtRequestEnd.ToString("yyyy-MM-dd HH:mm:ss")}"); stopWatch1.Stop(); Logger.Info($">>CreateWorklistQuery SpentTime: {stopWatch1.Elapsed.TotalSeconds}"); Log.Loger($">>CreateWorklistQuery SpentTime: {stopWatch1.Elapsed.TotalSeconds}"); Log.Loger($"\r\n"); return(GetWorkList(cfind)); }
public List <Study> GetStudiesStudyLevel(RetriveEntity RetriveFrom, string PatientId, string PatientName, DateTime?Fromdate, DateTime?Todate, string accession, string studyId, string modalitiesInStudy, string studyInstanceUid) { DicomDateRange dcmdateRange = null; if (Fromdate.HasValue && Todate.HasValue) { dcmdateRange = new DicomDateRange(Fromdate.Value, Todate.Value); } var request = DicomCFindRequest.CreateStudyQuery(PatientId, PatientName, dcmdateRange, accession, studyId, modalitiesInStudy, studyInstanceUid); return(GetStudies(RetriveFrom, request)); }
/// <summary> /// Convenience method for creating a C-FIND study query. /// </summary> /// <param name="patientId">Patient ID.</param> /// <param name="patientName">Patient name.</param> /// <param name="studyDateTime">Time range of studies.</param> /// <param name="accession">Accession number.</param> /// <param name="studyId">Study ID.</param> /// <param name="modalitiesInStudy">Modalities in study.</param> /// <param name="studyInstanceUid">Study instance UID.</param> /// <returns>C-FIND study query object.</returns> public static DicomCFindRequest CreateStudyQuery( string patientId = null, string patientName = null, DicomDateRange studyDateTime = null, string accession = null, string studyId = null, string modalitiesInStudy = null, string studyInstanceUid = null) { DicomCFindRequest dimse = DicomCFindRequest.CreateStudyQuery(patientId, patientName, studyDateTime, accession, studyId, modalitiesInStudy, studyInstanceUid); return(dimse); }
public void Add_TimeRange_GetDateRangeReturnsValidRange() { var dataset = new DicomDataset( new DicomUniqueIdentifier(DicomTag.SOPClassUID, DicomUID.SecondaryCaptureImageStorage), new DicomUniqueIdentifier(DicomTag.SOPInstanceUID, "1.2.3")); var expected = new DicomDateRange(new DateTime(1, 1, 1, 5, 10, 5), new DateTime(1, 1, 1, 19, 0, 20)); dataset.Add(DicomTag.AcquisitionTime, expected); var actual = dataset.Get<DicomDateRange>(DicomTag.AcquisitionTime); Assert.Equal(expected.Minimum, actual.Minimum); Assert.Equal(expected.Maximum, actual.Maximum); }
/// <summary> /// Convenience method for creating a C-FIND modality worklist query. /// from https://github.com/fo-dicom/fo-dicom/blob/development/DICOM/Network/DicomCFindRequest.cs /// </summary> /// <param name="patientId">Patient ID.</param> /// <param name="patientName">Patient name.</param> /// <param name="stationAE">Scheduled station Application Entity Title.</param> /// <param name="stationName">Scheduled station name.</param> /// <param name="modality">Modality.</param> /// <param name="scheduledDateTime">Scheduled procedure step start time.</param> /// <returns>C-FIND modality worklist query object.</returns> public static DicomCFindRequest CreateWorklistQuery( string patientId = null, string patientName = null, string stationAE = null, string stationName = null, string modality = null, DicomDateRange scheduledDateTime = null) { DicomCFindRequest dimse = DicomCFindRequest.CreateWorklistQuery(patientId, patientName, stationAE, stationName, modality, scheduledDateTime); dimse.Dataset.Add(DicomTag.PatientAge, string.Empty); return(dimse); }
public void Add_TimeRange_GetDateRangeReturnsValidRange() { var dataset = new DicomDataset( new DicomUniqueIdentifier(DicomTag.SOPClassUID, DicomUID.SecondaryCaptureImageStorage), new DicomUniqueIdentifier(DicomTag.SOPInstanceUID, "1.2.3")); var expected = new DicomDateRange(new DateTime(1, 1, 1, 5, 10, 5), new DateTime(1, 1, 1, 19, 0, 20)); dataset.Add(DicomTag.AcquisitionTime, expected); var actual = dataset.GetSingleValue <DicomDateRange>(DicomTag.AcquisitionTime); Assert.Equal(expected.Minimum, actual.Minimum); Assert.Equal(expected.Maximum, actual.Maximum); }
public static DicomCFindRequest CreateStudyRequestByDateRangeForModality(DateTime dateFrom, DateTime dateTo, string modality, DicomPriority priority = DicomPriority.Low) { var request = new DicomCFindRequest(DicomQueryRetrieveLevel.Study, priority); // always add the encoding - with agnostic encoding request.Dataset.AddOrUpdate(new DicomTag(0x8, 0x5), "ISO_IR 100"); // add the dicom tags with empty values that should be included in the result of the QR Server request.Dataset.AddOrUpdate(DicomTag.PatientID, ""); request.Dataset.AddOrUpdate(DicomTag.StudyInstanceUID, ""); request.Dataset.AddOrUpdate(DicomTag.StudyDescription, ""); string modalityToQuery = modality.Equals("all", StringComparison.OrdinalIgnoreCase) ? "" : modality; // add the dicom tags that contain the filter criteria request.Dataset.AddOrUpdate(DicomTag.ModalitiesInStudy, modalityToQuery); var studyDateRange = new DicomDateRange(dateFrom, dateTo); request.Dataset.AddOrUpdate(DicomTag.StudyDate, studyDateRange); request.Dataset.AddOrUpdate(DicomTag.StudyTime, studyDateRange); return(request); }
public StudyQueryIn(QueryPage queryPage) { var dateMin = queryPage.StudyDateStartPicker.SelectedDate; var dateMax = queryPage.StudyDateEndPicker.SelectedDate; // read search fields DateTime start = DateTime.Today.AddYears(-100), end = DateTime.Today; if (dateMin != null) { start = queryPage.StudyDateStartPicker.SelectedDate.Value; end = start.AddDays(1); } if (dateMax != null) { end = queryPage.StudyDateEndPicker.SelectedDate.Value; start = end.AddDays(-1); } end = end.AddSeconds(86399); StudyDate = new DicomDateRange(start, end); PatientName = patientFullName(queryPage.PatientNameBox, queryPage.PatientSurnameBox); ModalitiesInStudy = queryPage.ModalityBox.Text.ToString(); PatientID = queryPage.PatientIDBox.Text.ToString(); }
public static DicomCFindRequest CreateWorklistQuery(string patientId = null, string patientName = null, string stationAE = null, string stationName = null, string modality = null, DicomDateRange scheduledDateTime = null) { var dimse = new DicomCFindRequest(DicomQueryRetrieveLevel.Worklist); dimse.AffectedSOPClassUID = DicomUID.ModalityWorklistInformationModelFIND; dimse.Dataset.Add(DicomTag.PatientID, patientId); dimse.Dataset.Add(DicomTag.PatientName, patientName); dimse.Dataset.Add(DicomTag.OtherPatientIDs, String.Empty); dimse.Dataset.Add(DicomTag.IssuerOfPatientID, String.Empty); dimse.Dataset.Add(DicomTag.PatientSex, String.Empty); dimse.Dataset.Add(DicomTag.PatientWeight, String.Empty); dimse.Dataset.Add(DicomTag.PatientBirthDate, String.Empty); dimse.Dataset.Add(DicomTag.MedicalAlerts, String.Empty); dimse.Dataset.Add(DicomTag.PregnancyStatus, String.Empty); dimse.Dataset.Add(DicomTag.Allergies, String.Empty); dimse.Dataset.Add(DicomTag.PatientComments, String.Empty); dimse.Dataset.Add(DicomTag.SpecialNeeds, String.Empty); dimse.Dataset.Add(DicomTag.PregnancyStatus, String.Empty); dimse.Dataset.Add(DicomTag.PatientState, String.Empty); dimse.Dataset.Add(DicomTag.CurrentPatientLocation, String.Empty); dimse.Dataset.Add(DicomTag.InstitutionName, String.Empty); dimse.Dataset.Add(DicomTag.AdmissionID, String.Empty); dimse.Dataset.Add(DicomTag.AccessionNumber, String.Empty); dimse.Dataset.Add(DicomTag.ReferringPhysicianName, String.Empty); dimse.Dataset.Add(DicomTag.AdmittingDiagnosesDescription, String.Empty); dimse.Dataset.Add(DicomTag.RequestingPhysician, String.Empty); dimse.Dataset.Add(DicomTag.StudyInstanceUID, String.Empty); dimse.Dataset.Add(DicomTag.StudyDescription, String.Empty); dimse.Dataset.Add(DicomTag.StudyID, String.Empty); dimse.Dataset.Add(DicomTag.ReasonForTheRequestedProcedure, String.Empty); dimse.Dataset.Add(DicomTag.StudyDate, String.Empty); dimse.Dataset.Add(DicomTag.StudyTime, String.Empty); dimse.Dataset.Add(DicomTag.RequestedProcedureID, String.Empty); dimse.Dataset.Add(DicomTag.RequestedProcedureDescription, String.Empty); dimse.Dataset.Add(DicomTag.RequestedProcedurePriority, String.Empty); dimse.Dataset.Add(new DicomSequence(DicomTag.RequestedProcedureCodeSequence)); dimse.Dataset.Add(new DicomSequence(DicomTag.ReferencedStudySequence)); dimse.Dataset.Add(new DicomSequence(DicomTag.ProcedureCodeSequence)); var sps = new DicomDataset(); sps.Add(DicomTag.ScheduledStationAETitle, stationAE); sps.Add(DicomTag.ScheduledStationName, stationName); sps.Add(DicomTag.ScheduledProcedureStepStartDate, scheduledDateTime); sps.Add(DicomTag.ScheduledProcedureStepStartTime, scheduledDateTime); sps.Add(DicomTag.Modality, modality); sps.Add(DicomTag.ScheduledPerformingPhysicianName, String.Empty); sps.Add(DicomTag.ScheduledProcedureStepDescription, String.Empty); sps.Add(new DicomSequence(DicomTag.ScheduledProtocolCodeSequence)); sps.Add(DicomTag.ScheduledProcedureStepLocation, String.Empty); sps.Add(DicomTag.ScheduledProcedureStepID, String.Empty); sps.Add(DicomTag.RequestedContrastAgent, String.Empty); sps.Add(DicomTag.PreMedication, String.Empty); sps.Add(DicomTag.AnatomicalOrientationType, String.Empty); dimse.Dataset.Add(new DicomSequence(DicomTag.ScheduledProcedureStepSequence, sps)); return(dimse); }
public static DicomCFindRequest CreateWorklistQuery( string patientId = null, string patientName = null, string stationAE = null, string stationName = null, string modality = null, DicomDateRange scheduledDateTime = null) { var dimse = new DicomCFindRequest(DicomQueryRetrieveLevel.Worklist); dimse.SOPClassUID = DicomUID.ModalityWorklistInformationModelFIND; dimse.Dataset.Add(DicomTag.PatientID, patientId); dimse.Dataset.Add(DicomTag.PatientName, patientName); dimse.Dataset.Add(DicomTag.OtherPatientIDs, String.Empty); dimse.Dataset.Add(DicomTag.IssuerOfPatientID, String.Empty); dimse.Dataset.Add(DicomTag.PatientSex, String.Empty); dimse.Dataset.Add(DicomTag.PatientWeight, String.Empty); dimse.Dataset.Add(DicomTag.PatientBirthDate, String.Empty); dimse.Dataset.Add(DicomTag.MedicalAlerts, String.Empty); dimse.Dataset.Add(DicomTag.PregnancyStatus, new ushort[0]); dimse.Dataset.Add(DicomTag.Allergies, String.Empty); dimse.Dataset.Add(DicomTag.PatientComments, String.Empty); dimse.Dataset.Add(DicomTag.SpecialNeeds, String.Empty); dimse.Dataset.Add(DicomTag.PatientState, String.Empty); dimse.Dataset.Add(DicomTag.CurrentPatientLocation, String.Empty); dimse.Dataset.Add(DicomTag.InstitutionName, String.Empty); dimse.Dataset.Add(DicomTag.AdmissionID, String.Empty); dimse.Dataset.Add(DicomTag.AccessionNumber, String.Empty); dimse.Dataset.Add(DicomTag.ReferringPhysicianName, String.Empty); dimse.Dataset.Add(DicomTag.AdmittingDiagnosesDescription, String.Empty); dimse.Dataset.Add(DicomTag.RequestingPhysician, String.Empty); dimse.Dataset.Add(DicomTag.StudyInstanceUID, String.Empty); dimse.Dataset.Add(DicomTag.StudyDescription, String.Empty); dimse.Dataset.Add(DicomTag.StudyID, String.Empty); dimse.Dataset.Add(DicomTag.ReasonForTheRequestedProcedure, String.Empty); dimse.Dataset.Add(DicomTag.StudyDate, String.Empty); dimse.Dataset.Add(DicomTag.StudyTime, String.Empty); dimse.Dataset.Add(DicomTag.RequestedProcedureID, String.Empty); dimse.Dataset.Add(DicomTag.RequestedProcedureDescription, String.Empty); dimse.Dataset.Add(DicomTag.RequestedProcedurePriority, String.Empty); dimse.Dataset.Add(new DicomSequence(DicomTag.RequestedProcedureCodeSequence)); dimse.Dataset.Add(new DicomSequence(DicomTag.ReferencedStudySequence)); dimse.Dataset.Add(new DicomSequence(DicomTag.ProcedureCodeSequence)); var sps = new DicomDataset(); sps.Add(DicomTag.ScheduledStationAETitle, stationAE); sps.Add(DicomTag.ScheduledStationName, stationName); sps.Add(DicomTag.ScheduledProcedureStepStartDate, scheduledDateTime); sps.Add(DicomTag.ScheduledProcedureStepStartTime, scheduledDateTime); sps.Add(DicomTag.Modality, modality); sps.Add(DicomTag.ScheduledPerformingPhysicianName, String.Empty); sps.Add(DicomTag.ScheduledProcedureStepDescription, String.Empty); sps.Add(new DicomSequence(DicomTag.ScheduledProtocolCodeSequence)); sps.Add(DicomTag.ScheduledProcedureStepLocation, String.Empty); sps.Add(DicomTag.ScheduledProcedureStepID, String.Empty); sps.Add(DicomTag.RequestedContrastAgent, String.Empty); sps.Add(DicomTag.PreMedication, String.Empty); sps.Add(DicomTag.AnatomicalOrientationType, String.Empty); dimse.Dataset.Add(new DicomSequence(DicomTag.ScheduledProcedureStepSequence, sps)); return dimse; }
public void find(QueryObject query, string level) { if (level != "Study" && level != "Series" && level != "Image") { MessageBox.Show("incorrect level"); return; } DicomQueryRetrieveLevel queryLevel = (DicomQueryRetrieveLevel)Enum.Parse(typeof(DicomQueryRetrieveLevel), level); DicomCFindRequest cfind = new DicomCFindRequest(queryLevel); Type tipo = query.GetType(); PropertyInfo[] properties1 = tipo.GetProperties(); foreach (PropertyInfo property in properties1) { var tag = typeof(DicomTag).GetField(property.Name).GetValue(null); DicomTag theTag = (DicomTag.Parse(tag.ToString())); var variabile = property.GetValue(query); if (variabile.GetType().ToString() == "System.String") { String a = (String)variabile; cfind.Dataset.Add(theTag, a); } if (variabile.GetType().ToString() == "Dicom.DicomDateRange") { DicomDateRange a = (DicomDateRange)variabile; cfind.Dataset.Add(theTag, a); } } cfind.OnResponseReceived = (DicomCFindRequest rq, DicomCFindResponse rp) => { if (rp.HasDataset) { var type = Type.GetType("QueryRetrieveService." + level + "ResponseQuery"); var response = (QueryObject)Activator.CreateInstance(type); queryResponses.Add(response); PropertyInfo[] properties = response.GetType().GetProperties(); foreach (PropertyInfo property in properties) { var tag = typeof(DicomTag).GetField(property.Name).GetValue(null); DicomTag myTag = DicomTag.Parse(tag.ToString()); try { property.SetValue(response, rp.Dataset.GetValues <string>(myTag)[0]); } catch (Exception e) { // MessageBox.Show("tag " + myTag.ToString() + " not found in this dataset"); } } RaiseEvent(response); } }; var client = new DicomClient(); client.AddRequest(cfind); client.AssociationReleased += (sender, e) => { // non può inviare la lista 'queryResponses' prima // che 'cfind.OnResponseReceived' abbia finito di riempirla!! Thread.Sleep(5); RaiseConnectionClosed(queryResponses); }; try { client.Send(GUILogic.readFromFile("server"), Int32.Parse(GUILogic.readFromFile("serverPort")), false, GUILogic.readFromFile("thisMachineAE"), GUILogic.readFromFile("serverAE"), 1000); } catch (Exception e) { MessageBox.Show("impossible connect to server"); } }
public static IEnumerable <DicomDataset> FilterWorklistItemsByDataset(DicomDataset request, List <DicomDataset> allDatasetItems, Logger Logger) { var exams = allDatasetItems.AsQueryable(); if (request.TryGetSingleValue(DicomTag.PatientID, out string patientId)) { if (patientId != "*") { Logger.Info($"Exam patientId: {patientId}"); Log.Loger($"Exam patientId: {patientId}"); exams = exams.Where(x => x.GetSingleValue <string>(DicomTag.PatientID).Equals(patientId)); } } /* var patientName = request.GetSingleValueOrDefault(DicomTag.PatientName, string.Empty); * if (!string.IsNullOrEmpty(patientName)) * { * Logger.Info($"Exam patientName: {patientName}"); * exams = exams.Where(x => x.GetSingleValueOrDefault<string>(DicomTag.PatientName, string.Empty).Contains(patientName)); * } */ if (request.Contains(DicomTag.ScheduledProcedureStepSequence)) { DicomDataset procedureStep = request.GetSequence(DicomTag.ScheduledProcedureStepSequence).First(); var scheduledProcedureStepStartDate = procedureStep.GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepStartDate, string.Empty); var scheduledProcedureStepEndDate = procedureStep.GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepEndDate, string.Empty); Logger.Info($"Exam scheduledProcedureStepStartDate: {scheduledProcedureStepStartDate}"); Log.Loger($"Exam scheduledProcedureStepStartDate: {scheduledProcedureStepStartDate}"); Logger.Info($"Exam scheduledProcedureStepEndDate: {scheduledProcedureStepEndDate}"); Log.Loger($"Exam scheduledProcedureStepEndDate: {scheduledProcedureStepEndDate}"); var index = scheduledProcedureStepStartDate.IndexOf("-"); if (index >= 0) { scheduledProcedureStepEndDate = scheduledProcedureStepStartDate.Substring(index + 1); Logger.Info($"Exam New scheduledProcedureStepEndDate: {scheduledProcedureStepEndDate}"); Log.Loger($"Exam New scheduledProcedureStepEndDate: {scheduledProcedureStepEndDate}"); scheduledProcedureStepStartDate = scheduledProcedureStepStartDate.Substring(0, index); Logger.Info($"Exam New scheduledProcedureStepStartDate: {scheduledProcedureStepStartDate}"); Log.Loger($"Exam New scheduledProcedureStepStartDate: {scheduledProcedureStepStartDate}"); } if (!string.IsNullOrEmpty(scheduledProcedureStepStartDate) && scheduledProcedureStepStartDate != "*" && !string.IsNullOrEmpty(scheduledProcedureStepEndDate) && scheduledProcedureStepEndDate != "*") { var st = new DicomDateTime(DicomTag.ScheduledProcedureStepStartDate, scheduledProcedureStepStartDate).Get <System.DateTime>(); var et = new DicomDateTime(DicomTag.ScheduledProcedureStepEndDate, scheduledProcedureStepEndDate).Get <System.DateTime>(); var range = new DicomDateRange(st, et); exams = exams.Where(x => range.Contains(System.DateTime.ParseExact(x.GetSequence(DicomTag.ScheduledProcedureStepSequence).First().GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepStartDate, string.Empty), "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture))); } else if (string.IsNullOrEmpty(scheduledProcedureStepStartDate)) { // if no start date is specified, we just query today's data System.DateTime endDate = System.DateTime.Today.AddDays(1).AddSeconds(-1); System.DateTime startDate = System.DateTime.Today; DicomDateRange range = new DicomDateRange(startDate, endDate); exams = exams.Where(x => range.Contains(System.DateTime.ParseExact(x.GetSequence(DicomTag.ScheduledProcedureStepSequence).First().GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepStartDate, string.Empty), "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture))); } } /* * var scheduledProcedureStepStartDateTime = request.GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepStartDateTime, string.Empty); * if (!string.IsNullOrEmpty(scheduledProcedureStepStartDateTime) && scheduledProcedureStepStartDateTime != "*") * { * DicomDateRange range = new DicomDateTime(DicomTag.ScheduledProcedureStepStartDate, scheduledProcedureStepStartDateTime).Get<DicomDateRange>(); * exams = exams.Where(x => range.Contains(System.DateTime.Parse(x.GetSingleValueOrDefault<string>(DicomTag.ScheduledProcedureStepStartDateTime, string.Empty)))); * } */ var results = exams.ToList(); Logger.Info($"Exam Resutls number: {results.Count}"); Log.Loger($"Exam Resutls number: {results.Count}"); // Parsing result foreach (var result in results) { string log = WorklistItemsProvider.LogToConsole(result); Logger.Info(log); Log.Loger(log); // Send Reponse Back yield return(result); } }
public async Task <List <DicomDataset> > QueryStudiesByPatientAsync(string serverIp, int serverPort, string serverAET, string localAET, string patientId = null, string patientName = null, DicomDateRange studyDateTime = null) { List <DicomDataset> studyUids = new List <DicomDataset>(); DicomCFindRequest request = RequestFactory.CreateStudyQuery(patientId, patientName, studyDateTime); request.OnResponseReceived += (req, res) => { if (res.Status == DicomStatus.Success || res.Status == DicomStatus.Pending) { if (res.HasDataset) { studyUids.Add(res.Dataset); } else { logger.Error("Query studies response has no dataset."); } } else { logger.Error("Query Studies failure. Status - [{0}]", res.Status); } }; DicomClient client = new DicomClient(serverIp, serverPort, false, localAET, serverAET); await client.AddRequestAsync(request); await client.SendAsync(); return(studyUids); }
public static List <DicomDataset> QueryWorklistItems(DicomDataset request) { if (_isRealTime) { //记录查询时间 System.Diagnostics.Stopwatch stopWatch1 = new System.Diagnostics.Stopwatch(); stopWatch1.Start(); DateTime dtRequestBeg = DateTime.Now; Logger.Info($">>QueryWorklistItems CreateWorklistQuery BeginTime: {dtRequestBeg.ToString("yyyy-MM-dd HH:mm:ss")}"); Log.Loger($">>QueryWorklistItems CreateWorklistQuery BeginTime: {dtRequestBeg.ToString("yyyy-MM-dd HH:mm:ss")}"); DateTime endDate = System.DateTime.Today.AddDays(1).AddSeconds(-1); DateTime startDate = endDate.AddDays(_cacheDays * -1); string patientId = string.Empty; if (!request.TryGetSingleValue(DicomTag.PatientID, out patientId)) { patientId = null; } if (request.Contains(DicomTag.ScheduledProcedureStepSequence)) { DicomDataset procedureStep = request.GetSequence(DicomTag.ScheduledProcedureStepSequence).First(); var scheduledProcedureStepStartDate = procedureStep.GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepStartDate, string.Empty); var scheduledProcedureStepEndDate = procedureStep.GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepEndDate, string.Empty); Logger.Info($"Exam scheduledProcedureStepStartDate: {scheduledProcedureStepStartDate}"); Log.Loger($"Exam scheduledProcedureStepStartDate: {scheduledProcedureStepStartDate}"); Logger.Info($"Exam scheduledProcedureStepEndDate: {scheduledProcedureStepEndDate}"); Log.Loger($"Exam scheduledProcedureStepEndDate: {scheduledProcedureStepEndDate}"); var index = scheduledProcedureStepStartDate.IndexOf("-"); if (index >= 0) { scheduledProcedureStepEndDate = scheduledProcedureStepStartDate.Substring(index + 1); Logger.Info($"Exam New scheduledProcedureStepEndDate: {scheduledProcedureStepEndDate}"); Log.Loger($"Exam New scheduledProcedureStepEndDate: {scheduledProcedureStepEndDate}"); scheduledProcedureStepStartDate = scheduledProcedureStepStartDate.Substring(0, index); Logger.Info($"Exam New scheduledProcedureStepStartDate: {scheduledProcedureStepStartDate}"); Log.Loger($"Exam New scheduledProcedureStepStartDate: {scheduledProcedureStepStartDate}"); } scheduledProcedureStepStartDate = scheduledProcedureStepStartDate.Replace(":", "").Replace(" ", ""); scheduledProcedureStepEndDate = scheduledProcedureStepEndDate.Replace(":", "").Replace(" ", ""); if (!string.IsNullOrEmpty(scheduledProcedureStepStartDate) && scheduledProcedureStepStartDate != "*") { startDate = new DicomDateTime(DicomTag.ScheduledProcedureStepStartDate, scheduledProcedureStepStartDate).Get <System.DateTime>(); } if (!string.IsNullOrEmpty(scheduledProcedureStepEndDate) && scheduledProcedureStepEndDate != "*") { endDate = new DicomDateTime(DicomTag.ScheduledProcedureStepStartDate, scheduledProcedureStepEndDate).Get <System.DateTime>(); } } DicomDateRange dr = new DicomDateRange(startDate, endDate); var cfind = DicomCFindRequest.CreateWorklistQuery(patientId, null, null, null, null, dr); //记录查询时间 DateTime dtRequestEnd = DateTime.Now; Logger.Info($">>CreateWorklistQuery EndTime: {dtRequestEnd.ToString("yyyy-MM-dd HH:mm:ss")}"); Log.Loger($">>CreateWorklistQuery EndTime: {dtRequestEnd.ToString("yyyy-MM-dd HH:mm:ss")}"); stopWatch1.Stop(); Logger.Info($">>CreateWorklistQuery SpentTime: {stopWatch1.Elapsed.TotalSeconds}"); Log.Loger($">>CreateWorklistQuery SpentTime: {stopWatch1.Elapsed.TotalSeconds}"); Log.Loger($"\r\n"); var newWorklistItems = GetWorkList(cfind); Logger.Info($"Get new work list, length: {newWorklistItems.Count}"); Log.Loger($"Get new work list, length: {newWorklistItems.Count}"); return(newWorklistItems); } else { if (CurrentWorklistItems != null && CurrentWorklistItems.Count == 0) { var newWorklistItems = GetCachedWorklist(); Logger.Info($"Get new work list, length: {newWorklistItems.Count}"); Log.Loger($"Get new work list, length: {newWorklistItems.Count}"); CurrentWorklistItems = newWorklistItems; } return(CurrentWorklistItems); } }