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;
 }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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));
        }
Beispiel #5
0
        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));
        }
Beispiel #6
0
        /// <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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        /// <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);
        }
Beispiel #10
0
        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();
            }
Beispiel #12
0
        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;
        }
Beispiel #14
0
        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"); }
        }
Beispiel #15
0
        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);
            }
        }
Beispiel #16
0
        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);
        }
Beispiel #17
0
        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);
            }
        }