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); }
internal static IQueryable <WorklistItem> AddDateCondition(IQueryable <WorklistItem> exams, string dateCondition) { if (!string.IsNullOrEmpty(dateCondition) && dateCondition != "*") { var range = new DicomDateTime(DicomTag.ScheduledProcedureStepStartDate, dateCondition).Get <DicomDateRange>(); exams = exams.Where(x => range.Contains(x.ExamDateAndTime)); } return(exams); }
public void OnElement(IByteSource source, DicomTag tag, DicomVR vr, IByteBuffer data) { DicomElement element; switch (vr.Code) { case "AE": element = new DicomApplicationEntity(tag, data); break; case "AS": element = new DicomAgeString(tag, data); break; case "AT": element = new DicomAttributeTag(tag, data); break; case "CS": element = new DicomCodeString(tag, data); break; case "DA": element = new DicomDate(tag, data); break; case "DS": element = new DicomDecimalString(tag, data); break; case "DT": element = new DicomDateTime(tag, data); break; case "FD": element = new DicomFloatingPointDouble(tag, data); break; case "FL": element = new DicomFloatingPointSingle(tag, data); break; case "IS": element = new DicomIntegerString(tag, data); break; case "LO": element = new DicomLongString(tag, _encodings.Peek(), data); break; case "LT": element = new DicomLongText(tag, _encodings.Peek(), data); break; case "OB": element = new DicomOtherByte(tag, data); break; case "OD": element = new DicomOtherDouble(tag, data); break; case "OF": element = new DicomOtherFloat(tag, data); break; case "OW": element = new DicomOtherWord(tag, data); break; case "PN": element = new DicomPersonName(tag, _encodings.Peek(), data); break; case "SH": element = new DicomShortString(tag, _encodings.Peek(), data); break; case "SL": element = new DicomSignedLong(tag, data); break; case "SS": element = new DicomSignedShort(tag, data); break; case "ST": element = new DicomShortText(tag, _encodings.Peek(), data); break; case "TM": element = new DicomTime(tag, data); break; case "UC": element = new DicomUnlimitedCharacters(tag, _encodings.Peek(), data); break; case "UI": element = new DicomUniqueIdentifier(tag, data); break; case "UL": element = new DicomUnsignedLong(tag, data); break; case "UN": element = new DicomUnknown(tag, data); break; case "UR": element = new DicomUniversalResource(tag, _encodings.Peek(), data); break; case "US": element = new DicomUnsignedShort(tag, data); break; case "UT": element = new DicomUnlimitedText(tag, _encodings.Peek(), data); break; default: throw new DicomDataException("Unhandled VR in DICOM parser observer: {0}", vr.Code); } if (element.Tag == DicomTag.SpecificCharacterSet) { Encoding encoding = _encodings.Peek(); if (element.Count > 0) encoding = DicomEncoding.GetEncoding(element.Get<string>(0)); _encodings.Pop(); _encodings.Push(encoding); } DicomDataset ds = _datasets.Peek(); ds.Add(element); }
public async Task GivenDicomTagWithDifferentVR_WhenValidated_ThenShouldSkip() { var featureConfiguration = Options.Create(new FeatureConfiguration() { EnableFullDicomItemValidation = false }); DicomTag tag = DicomTag.Date; DicomElement element = new DicomDateTime(tag, DateTime.Now); _dicomDataset.AddOrUpdate(element); _queryTags.Clear(); _queryTags.Add(new QueryTag(tag.BuildExtendedQueryTagStoreEntry())); IDicomElementMinimumValidator validator = Substitute.For <IDicomElementMinimumValidator>(); _dicomDatasetValidator = new DicomDatasetValidator(featureConfiguration, validator, _queryTagService); await _dicomDatasetValidator.ValidateAsync(_dicomDataset, requiredStudyInstanceUid : null); validator.DidNotReceive().Validate(Arg.Any <DicomElement>()); }
/// <summary> /// Example *required* by the Anonymisation Engine /// </summary> /// <returns></returns> public static List <AnonExample> RandomiseDateTimeExamples() { var dateTime = new DateTime(2018, 2, 15, 3, 20, 58); var dicomItem = new DicomDateTime(DicomTag.CreationDate, dateTime); var dataset = new DicomDataset() { { DicomTag.PatientID, "TEST" }, { dicomItem }, }; var output = new AnonExample(); output.Input.Add(dicomItem + ": " + dateTime); AnonExample.InferOutput(dicomItem, RandomiseDateTime(dataset, null, dicomItem), output); return(new List <AnonExample> { output }); }
public async Task GivenDicomTagWithDifferentVR_WhenValidated_ThenShouldThrowException() { var featureConfiguration = Options.Create(new FeatureConfiguration() { EnableFullDicomItemValidation = false }); DicomTag tag = DicomTag.Date; DicomElement element = new DicomDateTime(tag, DateTime.Now); _dicomDataset.AddOrUpdate(element); _queryTags.Clear(); _queryTags.Add(new QueryTag(tag.BuildExtendedQueryTagStoreEntry())); IDicomElementMinimumValidator validator = Substitute.For <IDicomElementMinimumValidator>(); _dicomDatasetValidator = new DicomDatasetValidator(featureConfiguration, validator, _queryTagService); await AssertThrowsAsyncWithMessage <DatasetValidationException>( () => _dicomDatasetValidator.ValidateAsync(_dicomDataset, requiredStudyInstanceUid: null), expectedMessage : $"The extended query tag '{tag}' is expected to have VR 'DA' but has 'DT' in file."); validator.DidNotReceive().Validate(Arg.Any <DicomElement>()); }
private static void FillElement <TR>(DicomDataset ds, DicomTag tagIn, DVR vrIn, ref int index, int depth, XCollection <TR> qrList, DataRow dr) where TR : QueryResultItem, IDicomMappingItem { TR qr = qrList[index] as TR; if (!qr.DPath.Enable) { return; } switch (qr.DPath.VR) { case DVR.Unknown: return; case DVR.SQ: { index++; int count = qrList.Count; DicomDataset eleList = null; for (; index < count; index++) { qr = qrList[index] as TR; switch (qr.DPath.Type) { case DPathType.BeginItem: { eleList = new DicomDataset(); continue; } case DPathType.EndItem: { DicomSequence dicomSequence = new DicomSequence(tagIn); if (eleList != null) { dicomSequence.Items.Add(eleList); } TR qrNext = ((index + 1) < qrList.Count) ? qrList[index + 1] : null; if (qrNext == null || qrNext.DPath.Type != DPathType.BeginItem) { return; } continue; } default: { if (eleList == null) { continue; } if (!qr.DPath.Enable) { continue; } //int tag = qr.DPath.GetTag(depth + 1); List <string> tagList = qr.DPath.GetTagGE(depth + 1); ushort uGroup = DHelper.HexString2ushort(tagList[0]); ushort uElement = DHelper.HexString2ushort(tagList[1]); DicomTag tag = new DicomTag(uGroup, uElement); //DElement ele = new DElement(tag, qr.DPath.VR); FillElement <TR>(eleList, tag, qr.DPath.VR, ref index, depth + 1, qrList, dr); //eleList.Add(ele); break; } } } break; } default: { string value = null; object obj = dr[qr.TargetField]; if (obj != null) { value = obj.ToString(); } if (value == null) { value = ""; } if (DHelper.IsDateTime(qr.DPath.VR)) { try { if (value.Length > 0) { DateTime dt = DateTime.Parse(value); //DDateTime ddt = DDateTime.FromDateTime(qr.DPath.VR, dt); DicomDateTime ddt = new DicomDateTime(tagIn, dt); //rootSQElement.Value = ddt.ToDicomString(); ds.Add(ddt); } else { //rootSQElement.Value = value; ds.Add <string>(tagIn, value); } } catch (Exception err) { //SetError(err); //rootSQElement.Value = value; ds.Add <string>(tagIn, value); } } else { //rootSQElement.Value = value; ds.Add <string>(tagIn, value); } break; } } }
private static DicomItem CreateDicomItem(DicomTag tag, string vr, object data) { DicomItem item; switch (vr) { case "AE": item = new DicomApplicationEntity(tag, (string[])data); break; case "AS": item = new DicomAgeString(tag, (string[])data); break; case "AT": item = new DicomAttributeTag(tag, ((string[])data).Select(ParseTag).ToArray()); break; case "CS": item = new DicomCodeString(tag, (string[])data); break; case "DA": item = new DicomDate(tag, (string[])data); break; case "DS": item = new DicomDecimalString(tag, (string[])data); break; case "DT": item = new DicomDateTime(tag, (string[])data); break; case "FD": item = new DicomFloatingPointDouble(tag, (double[])data); break; case "FL": item = new DicomFloatingPointSingle(tag, (float[])data); break; case "IS": item = new DicomIntegerString(tag, (int[])data); break; case "LO": item = new DicomLongString(tag, (string[])data); break; case "LT": item = new DicomLongText(tag, ((string[])data).Single()); break; case "OB": item = new DicomOtherByte(tag, (IByteBuffer)data); break; case "OD": item = new DicomOtherDouble(tag, (IByteBuffer)data); break; case "OF": item = new DicomOtherFloat(tag, (IByteBuffer)data); break; case "OL": item = new DicomOtherLong(tag, (IByteBuffer)data); break; case "OW": item = new DicomOtherWord(tag, (IByteBuffer)data); break; case "PN": item = new DicomPersonName(tag, (string[])data); break; case "SH": item = new DicomShortString(tag, (string[])data); break; case "SL": item = new DicomSignedLong(tag, (int[])data); break; case "SS": item = new DicomSignedShort(tag, (short[])data); break; case "ST": item = new DicomShortText(tag, ((string[])data)[0]); break; case "SQ": item = new DicomSequence(tag, ((DicomDataset[])data)); break; case "TM": item = new DicomTime(tag, (string[])data); break; case "UC": item = new DicomUnlimitedCharacters(tag, ((string[])data).SingleOrDefault()); break; case "UI": item = new DicomUniqueIdentifier(tag, (string[])data); break; case "UL": item = new DicomUnsignedLong(tag, (uint[])data); break; case "UN": item = new DicomUnknown(tag, (IByteBuffer)data); break; case "UR": item = new DicomUniversalResource(tag, ((string[])data).Single()); break; case "US": item = new DicomUnsignedShort(tag, (ushort[])data); break; case "UT": item = new DicomUnlimitedText(tag, ((string[])data).Single()); break; default: throw new NotSupportedException("Unsupported value representation"); } return(item); }
public void OnElement(IByteSource source, DicomTag tag, DicomVR vr, IByteBuffer data) { DicomElement element; switch (vr.Code) { case "AE": element = new DicomApplicationEntity(tag, data); break; case "AS": element = new DicomAgeString(tag, data); break; case "AT": element = new DicomAttributeTag(tag, data); break; case "CS": element = new DicomCodeString(tag, data); break; case "DA": element = new DicomDate(tag, data); break; case "DS": element = new DicomDecimalString(tag, data); break; case "DT": element = new DicomDateTime(tag, data); break; case "FD": element = new DicomFloatingPointDouble(tag, data); break; case "FL": element = new DicomFloatingPointSingle(tag, data); break; case "IS": element = new DicomIntegerString(tag, data); break; case "LO": element = new DicomLongString(tag, _encodings.Peek(), data); break; case "LT": element = new DicomLongText(tag, _encodings.Peek(), data); break; case "OB": element = new DicomOtherByte(tag, data); break; case "OD": element = new DicomOtherDouble(tag, data); break; case "OF": element = new DicomOtherFloat(tag, data); break; case "OL": element = new DicomOtherLong(tag, data); break; case "OW": element = new DicomOtherWord(tag, data); break; case "PN": element = new DicomPersonName(tag, _encodings.Peek(), data); break; case "SH": element = new DicomShortString(tag, _encodings.Peek(), data); break; case "SL": element = new DicomSignedLong(tag, data); break; case "SS": element = new DicomSignedShort(tag, data); break; case "ST": element = new DicomShortText(tag, _encodings.Peek(), data); break; case "TM": element = new DicomTime(tag, data); break; case "UC": element = new DicomUnlimitedCharacters(tag, _encodings.Peek(), data); break; case "UI": element = new DicomUniqueIdentifier(tag, data); break; case "UL": element = new DicomUnsignedLong(tag, data); break; case "UN": element = new DicomUnknown(tag, data); break; case "UR": element = new DicomUniversalResource(tag, _encodings.Peek(), data); break; case "US": element = new DicomUnsignedShort(tag, data); break; case "UT": element = new DicomUnlimitedText(tag, _encodings.Peek(), data); break; default: throw new DicomDataException("Unhandled VR in DICOM parser observer: {0}", vr.Code); } if (element.Tag == DicomTag.SpecificCharacterSet) { Encoding encoding = _encodings.Peek(); if (element.Count > 0) { encoding = DicomEncoding.GetEncoding(element.Get <string>(0)); } _encodings.Pop(); _encodings.Push(encoding); } DicomDataset ds = _datasets.Peek(); ds.AddOrUpdate(element); }
public IEnumerable <DicomDataset> FilterWorklistItems(DicomDataset request) { var exams = WorklistItems.AsQueryable(); if (request.TryGetSingleValue(DicomTag.PatientID, out string patientId) && !string.IsNullOrEmpty(patientId)) { exams = exams.Where(x => x.PatientID == patientId); } if (request.TryGetSingleValue(DicomTag.PatientName, out string patientName)) { exams = FilterWorklistItemsByName(exams, patientName); } DicomDataset procedureStep = null; if (request.TryGetSequence(DicomTag.ScheduledProcedureStepSequence, out DicomSequence procedureStepSequence) && procedureStepSequence.Items.Any()) { procedureStep = procedureStepSequence.First(); if (procedureStep.TryGetSingleValue(DicomTag.ScheduledStationAETitle, out string scheduledStationAet) && !string.IsNullOrEmpty(scheduledStationAet)) { exams = exams.Where(x => x.ScheduledAET == scheduledStationAet); } if (procedureStep.TryGetSingleValue(DicomTag.Modality, out string modality) && !string.IsNullOrEmpty(modality)) { exams = exams.Where(x => x.Modality == modality); } if (procedureStep.TryGetSingleValue(DicomTag.PerformingPhysicianName, out string performingPhysician) && !string.IsNullOrEmpty(performingPhysician)) { exams = exams.Where(x => x.PerformingPhysician == performingPhysician); } if (procedureStep.TryGetSingleValue(DicomTag.ScheduledProcedureStepLocation, out string procedureStepLocation) && !string.IsNullOrEmpty(procedureStepLocation)) { exams = exams.Where(x => x.ExamRoom == procedureStepLocation); } if (procedureStep.TryGetSingleValue(DicomTag.ScheduledProcedureStepDescription, out string procedureStepDescription) && !string.IsNullOrEmpty(procedureStepDescription)) { exams = exams.Where(x => x.ExamDescription == procedureStepDescription); } if (procedureStep.TryGetSingleValue(DicomTag.ScheduledProcedureStepStartDateTime, out string scheduledStartDateTime) && !string.IsNullOrEmpty(scheduledStartDateTime)) { if (scheduledStartDateTime != "*") { var dateRange = new DicomDateTime(DicomTag.ScheduledProcedureStepStartDate, scheduledStartDateTime).Get <DicomDateRange>(); exams = exams.Where(x => dateRange.Contains(x.ExamDateAndTime)); } } } var results = exams.AsEnumerable(); foreach (var item in results) { var resultDataset = new DicomDataset(); AddIfExistsInRequest(resultDataset, request, DicomTag.AccessionNumber, item.AccessionNumber); AddIfExistsInRequest(resultDataset, request, DicomTag.InstitutionName, item.HospitalName); AddIfExistsInRequest(resultDataset, request, DicomTag.ReferringPhysicianName, item.ReferringPhysician); AddIfExistsInRequest(resultDataset, request, DicomTag.PatientName, item.PatientName); AddIfExistsInRequest(resultDataset, request, DicomTag.PatientID, item.PatientID); AddIfExistsInRequest(resultDataset, request, DicomTag.PatientBirthDate, item.DateOfBirth); AddIfExistsInRequest(resultDataset, request, DicomTag.PatientAge, item.Age); AddIfExistsInRequest(resultDataset, request, DicomTag.PatientSex, item.Sex); AddIfExistsInRequest(resultDataset, request, DicomTag.StudyInstanceUID, item.StudyUID); AddIfExistsInRequest(resultDataset, request, DicomTag.RequestingPhysician, item.ReferringPhysician); AddIfExistsInRequest(resultDataset, request, DicomTag.RequestedProcedureDescription, item.ExamDescription); AddIfExistsInRequest(resultDataset, request, DicomTag.RequestedProcedureID, item.ProcedureID); if (procedureStep != null) { var resultingSps = new DicomDataset(); AddIfExistsInRequest(resultingSps, procedureStep, DicomTag.ScheduledStationAETitle, item.ScheduledAET); AddIfExistsInRequest(resultingSps, procedureStep, DicomTag.ScheduledProcedureStepStartDate, item.ExamDateAndTime); AddIfExistsInRequest(resultingSps, procedureStep, DicomTag.ScheduledProcedureStepStartTime, item.ExamDateAndTime); AddIfExistsInRequest(resultingSps, procedureStep, DicomTag.Modality, item.Modality); AddIfExistsInRequest(resultingSps, procedureStep, DicomTag.ScheduledPerformingPhysicianName, item.PerformingPhysician); AddIfExistsInRequest(resultingSps, procedureStep, DicomTag.ScheduledProcedureStepDescription, item.ExamDescription); AddIfExistsInRequest(resultingSps, procedureStep, DicomTag.ScheduledProcedureStepID, item.ProcedureStepID); AddIfExistsInRequest(resultingSps, procedureStep, DicomTag.ScheduledStationName, item.ExamRoom); AddIfExistsInRequest(resultingSps, procedureStep, DicomTag.ScheduledProcedureStepLocation, item.ExamRoom); resultDataset.Add(new DicomSequence(DicomTag.ScheduledProcedureStepSequence, resultingSps)); } // Put blanks in for unsupported fields which are type 2 (i.e. must have a value even if NULL) // In a real server, you may wish to support some or all of these, but they are not commonly supported AddIfExistsInRequest(resultDataset, request, DicomTag.ReferencedStudySequence, new DicomDataset()); AddIfExistsInRequest(resultDataset, request, DicomTag.Priority, string.Empty); AddIfExistsInRequest(resultDataset, request, DicomTag.PatientTransportArrangements, string.Empty); AddIfExistsInRequest(resultDataset, request, DicomTag.AdmissionID, string.Empty); AddIfExistsInRequest(resultDataset, request, DicomTag.CurrentPatientLocation, string.Empty); AddIfExistsInRequest(resultDataset, request, DicomTag.ReferencedPatientSequence, new DicomDataset()); AddIfExistsInRequest(resultDataset, request, DicomTag.PatientWeight, string.Empty); AddIfExistsInRequest(resultDataset, request, DicomTag.ConfidentialityConstraintOnPatientDataDescription, string.Empty); // Send Reponse Back yield return(resultDataset); } }
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); } }
public static DateTimeObject[] ParseDicomDateTime(DicomDateTime item) { EnsureArg.IsNotNull(item, nameof(item)); return(item.Get <string[]>().Select(ParseDicomDateTime).ToArray()); }
private static DicomItem CreateDicomItem(DicomTag tag, BsonValue data, DicomVR vr = null) { // Ok to throw an exception here - we should always be writing the VR into the Bson document if it's ambiguous if (vr == null) { vr = tag.DictionaryEntry.ValueRepresentations.Single(); } DicomItem item; switch (vr.Code) { case "AE": item = new DicomApplicationEntity(tag, GetString(data)); break; case "AS": item = new DicomAgeString(tag, GetString(data)); break; case "AT": item = ParseAttributeTag(tag, data); break; case "CS": item = new DicomCodeString(tag, GetString(data)); break; case "DA": item = new DicomDate(tag, GetString(data)); break; case "DS": item = new DicomDecimalString(tag, GetString(data)); break; case "DT": item = new DicomDateTime(tag, GetString(data)); break; case "FD": item = new DicomFloatingPointDouble(tag, (double[])GetTypedArray <double>(data)); break; case "FL": item = new DicomFloatingPointSingle(tag, (float[])GetTypedArray <float>(data)); break; case "IS": item = new DicomIntegerString(tag, GetString(data)); break; case "LO": item = new DicomLongString(tag, Encoding.UTF8, GetString(data)); break; case "LT": item = new DicomLongText(tag, Encoding.UTF8, GetString(data)); break; case "OB": item = data.IsBsonNull ? new DicomOtherByte(tag) : new DicomOtherByte(tag, data.AsByteArray); break; case "OD": item = new DicomOtherDouble(tag, (double[])GetTypedArray <double>(data)); break; case "OF": item = new DicomOtherFloat(tag, (float[])GetTypedArray <float>(data)); break; case "OL": item = new DicomOtherLong(tag, (uint[])GetTypedArray <uint>(data)); break; case "OW": item = data.IsBsonNull ? new DicomOtherWord(tag) : new DicomOtherWord(tag, (ushort[])GetTypedArray <ushort>(data)); break; case "PN": item = new DicomPersonName(tag, Encoding.UTF8, GetString(data)); break; case "SH": item = new DicomShortString(tag, Encoding.UTF8, GetString(data)); break; case "SL": item = new DicomSignedLong(tag, (int[])GetTypedArray <int>(data)); break; case "SS": item = new DicomSignedShort(tag, (short[])GetTypedArray <short>(data)); break; case "ST": item = new DicomShortText(tag, Encoding.UTF8, GetString(data)); break; case "SQ": item = GetDicomSequence(tag, data); break; case "TM": item = new DicomTime(tag, GetString(data)); break; case "UC": item = new DicomUnlimitedCharacters(tag, Encoding.UTF8, GetString(data)); break; case "UI": item = new DicomUniqueIdentifier(tag, GetString(data)); break; case "UL": item = new DicomUnsignedLong(tag, (uint[])GetTypedArray <uint>(data)); break; case "UN": item = data.IsBsonNull ? new DicomUnknown(tag) : new DicomUnknown(tag, (byte[])GetTypedArray <byte>(data)); break; case "UR": item = new DicomUniversalResource(tag, Encoding.UTF8, GetString(data)); break; case "US": item = new DicomUnsignedShort(tag, (ushort[])GetTypedArray <ushort>(data)); break; case "UT": item = new DicomUnlimitedText(tag, Encoding.UTF8, GetString(data)); break; default: throw new NotSupportedException($"Unsupported value representation {vr}"); } return(item); }
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 static IEnumerable <DicomDataset> NewFilterWLIteamsByDataset(DicomDataset request, List <DicomDataset> allDatasetItems, Logger Logger) { var exams = allDatasetItems.AsQueryable(); if (request.TryGetSingleValue(DicomTag.PatientID, out string patientId)) { if (patientId != "*" && !string.IsNullOrEmpty(patientId)) { Logger.Info($"Exam patientId: {patientId}"); Log.Loger($"Exam patientId: {patientId}"); exams = exams.Where(x => x.GetSingleValue <string>(DicomTag.PatientID).Equals(patientId)); } } 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 != "*") { var st = new DicomDateTime(DicomTag.ScheduledProcedureStepStartDate, scheduledProcedureStepStartDate).Get <System.DateTime>(); exams = exams.Where(x => st <= System.DateTime.ParseExact( x.GetSequence(DicomTag.ScheduledProcedureStepSequence).First().GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepStartDate, string.Empty) + x.GetSequence(DicomTag.ScheduledProcedureStepSequence).First().GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepStartTime, string.Empty) , "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture)); } if (!string.IsNullOrEmpty(scheduledProcedureStepEndDate) && scheduledProcedureStepEndDate != "*") { var et = new DicomDateTime(DicomTag.ScheduledProcedureStepStartDate, scheduledProcedureStepEndDate).Get <System.DateTime>(); exams = exams.Where(x => et >= System.DateTime.ParseExact( x.GetSequence(DicomTag.ScheduledProcedureStepSequence).First().GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepStartDate, string.Empty) + x.GetSequence(DicomTag.ScheduledProcedureStepSequence).First().GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepStartTime, string.Empty) , "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture)); } } //仅到检 var appConfig = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Reflection.Assembly.GetExecutingAssembly().Location); if (appConfig.AppSettings.Settings.AllKeys.Contains("isOnlyArrived")) { bool _isOnlyArrived = appConfig.AppSettings.Settings["isOnlyArrived"].Value.ToString() == "1"; if (_isOnlyArrived) { exams = exams.Where(o => o.GetSequence(DicomTag.ScheduledProcedureStepSequence).First().GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepStatus, string.Empty) == "ARRIVED"); } } //exams = exams.Where(o => o.GetSequence(DicomTag.ScheduledProcedureStepSequence).First().GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepStatus, string.Empty) == "ARRIVED"); 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); } }
private static DicomItem CreateDicomItem(DicomTag tag, string vr, object data) { DicomItem item; switch (vr) { case "AE": item = new DicomApplicationEntity(tag, (string[])data); break; case "AS": item = new DicomAgeString(tag, (string[])data); break; case "AT": item = new DicomAttributeTag(tag, ((string[])data).Select(ParseTag).ToArray()); break; case "CS": item = new DicomCodeString(tag, (string[])data); break; case "DA": item = new DicomDate(tag, (string[])data); break; case "DS": if (data is IByteBuffer dataBufferDS) { item = new DicomDecimalString(tag, dataBufferDS); } else if (data is decimal[] dataAsNumbers) { item = new DicomDecimalString(tag, dataAsNumbers); } else { item = new DicomDecimalString(tag, (string[])data); } break; case "DT": item = new DicomDateTime(tag, (string[])data); break; case "FD": if (data is IByteBuffer dataBufferFD) { item = new DicomFloatingPointDouble(tag, dataBufferFD); } else { item = new DicomFloatingPointDouble(tag, (double[])data); } break; case "FL": if (data is IByteBuffer dataBufferFL) { item = new DicomFloatingPointSingle(tag, dataBufferFL); } else { item = new DicomFloatingPointSingle(tag, (float[])data); } break; case "IS": if (data is IByteBuffer dataBufferIS) { item = new DicomIntegerString(tag, dataBufferIS); } else if (data is string[] dataAsStrings) { item = new DicomIntegerString(tag, dataAsStrings); } else { item = new DicomIntegerString(tag, (int[])data); } break; case "LO": item = new DicomLongString(tag, (string[])data); break; case "LT": if (data is IByteBuffer dataBufferLT) { item = new DicomLongText(tag, _jsonTextEncodings, dataBufferLT); } else { item = new DicomLongText(tag, data.AsStringArray().SingleOrEmpty()); } break; case "OB": item = new DicomOtherByte(tag, (IByteBuffer)data); break; case "OD": item = new DicomOtherDouble(tag, (IByteBuffer)data); break; case "OF": item = new DicomOtherFloat(tag, (IByteBuffer)data); break; case "OL": item = new DicomOtherLong(tag, (IByteBuffer)data); break; case "OW": item = new DicomOtherWord(tag, (IByteBuffer)data); break; case "OV": item = new DicomOtherVeryLong(tag, (IByteBuffer)data); break; case "PN": item = new DicomPersonName(tag, (string[])data); break; case "SH": item = new DicomShortString(tag, (string[])data); break; case "SL": if (data is IByteBuffer dataBufferSL) { item = new DicomSignedLong(tag, dataBufferSL); } else { item = new DicomSignedLong(tag, (int[])data); } break; case "SQ": item = new DicomSequence(tag, ((DicomDataset[])data)); break; case "SS": if (data is IByteBuffer dataBufferSS) { item = new DicomSignedShort(tag, dataBufferSS); } else { item = new DicomSignedShort(tag, (short[])data); } break; case "ST": if (data is IByteBuffer dataBufferST) { item = new DicomShortText(tag, _jsonTextEncodings, dataBufferST); } else { item = new DicomShortText(tag, data.AsStringArray().FirstOrEmpty()); } break; case "SV": if (data is IByteBuffer dataBufferSV) { item = new DicomSignedVeryLong(tag, dataBufferSV); } else if (data is string[] dataAsStrings) { var dataAsLongs = dataAsStrings.Select(s => long.Parse(s)).ToArray(); item = new DicomSignedVeryLong(tag, dataAsLongs); } else { item = new DicomSignedVeryLong(tag, (long[])data); } break; case "TM": item = new DicomTime(tag, (string[])data); break; case "UC": if (data is IByteBuffer dataBufferUC) { item = new DicomUnlimitedCharacters(tag, _jsonTextEncodings, dataBufferUC); } else { item = new DicomUnlimitedCharacters(tag, data.AsStringArray().SingleOrDefault()); } break; case "UI": item = new DicomUniqueIdentifier(tag, (string[])data); break; case "UL": if (data is IByteBuffer dataBufferUL) { item = new DicomUnsignedLong(tag, dataBufferUL); } else { item = new DicomUnsignedLong(tag, (uint[])data); } break; case "UN": item = new DicomUnknown(tag, (IByteBuffer)data); break; case "UR": item = new DicomUniversalResource(tag, data.AsStringArray().SingleOrEmpty()); break; case "US": if (data is IByteBuffer dataBufferUS) { item = new DicomUnsignedShort(tag, dataBufferUS); } else { item = new DicomUnsignedShort(tag, (ushort[])data); } break; case "UT": if (data is IByteBuffer dataBufferUT) { item = new DicomUnlimitedText(tag, _jsonTextEncodings, dataBufferUT); } else { item = new DicomUnlimitedText(tag, data.AsStringArray().SingleOrEmpty()); } break; case "UV": if (data is IByteBuffer dataBufferUV) { item = new DicomUnsignedVeryLong(tag, dataBufferUV); } else if (data is string[] dataAsStrings) { var dataAsULongs = dataAsStrings.Select(s => ulong.Parse(s)).ToArray(); item = new DicomUnsignedVeryLong(tag, dataAsULongs); } else { item = new DicomUnsignedVeryLong(tag, (ulong[])data); } break; default: throw new NotSupportedException("Unsupported value representation"); } return(item); }