123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- using Dicom;
- using Dicom.Imaging;
- using FISLib.Vid;
- using System;
- using System.IO;
- using Vinno.FIS.Sonopost.Common;
- using Vinno.FIS.Sonopost.Helpers;
- using Vinno.FIS.Sonopost.Managers;
- using Vinno.FIS.Sonopost.Managers.Interfaces;
- using Vinno.IUS.Common.Log;
- namespace Vinno.FIS.Sonopost.Features.Dicom
- {
- internal class ConvertVinnoFileResult
- {
- /// <summary>
- /// Get vid file path.
- /// </summary>
- public string VidFilePath { get; }
- /// <summary>
- /// True if convert success.
- /// </summary>
- public bool IsSuccess { get; }
- public ConvertVinnoFileResult(bool isSuccess, string vidFilePath)
- {
- IsSuccess = isSuccess;
- VidFilePath = vidFilePath;
- }
- }
- internal class VinnoStorage
- {
- /// <summary>
- /// Store vinno file.
- /// </summary>
- /// <param name="id">file id.</param>
- /// <param name="currentDate">Current date</param>
- /// <param name="dicomFile">Dicom file</param>
- /// <returns>Saved path.</returns>
- public static ConvertVinnoFileResult Store(string id, string currentDate, string dicomFilePath)
- {
- var patientId = string.Empty;
- var storageFolder = Path.Combine(SonopostConstants.DataFolder, SonopostConstants.VinnoDicomFolder);
- DirectoryHelper.CreateDirectory(storageFolder);
- try
- {
- var dicomFile = DicomFile.Open(dicomFilePath);
- patientId = dicomFile.GetPatientId();
- var dataset = dicomFile.Dataset;
- var dicomImage = new DicomImage(dataset);
- var dataType = dicomImage.NumberOfFrames > 1 ? FISVidType.ThirdVidMovie : FISVidType.ThirdVidSingle;
- var targetPath = Path.Combine(storageFolder, $"{id}_{dataType}_{currentDate}.{SonopostConstants.VidFileName}");
- using (var vidFile = new VidFile(targetPath))
- {
- vidFile.AddExtendedData(dataset);
- vidFile.AddProbe(dataset);
- vidFile.AddImages(dicomImage, id, patientId);
- }
- return new ConvertVinnoFileResult(true, targetPath);
- }
- catch (Exception e)
- {
- var dicomFileName = Path.Combine(SonopostConstants.DataFolder, SonopostConstants.OriginalDicomFolder, $"{id}.{SonopostConstants.DicomFileName}");
- Logger.WriteLineError($"File:{dicomFileName},Convert to vinno file failed, PatientId:{patientId},{e},");
- return new ConvertVinnoFileResult(false, string.Empty);
- }
- }
- /// <summary>
- /// Store vinno file.
- /// </summary>
- /// <param name="id">file id.</param>
- /// <param name="currentDate">Current date</param>
- /// <param name="dicomFile">Dicom file</param>
- /// <returns>Saved path.</returns>
- public static ConvertVinnoFileResult Store(string id, string currentDate, VidInfo vidInfo)
- {
- var patientId = string.Empty;
- var storageFolder = Path.Combine(SonopostConstants.DataFolder, SonopostConstants.VinnoDicomFolder);
- DirectoryHelper.CreateDirectory(storageFolder);
- try
- {
- patientId = vidInfo.PatientInfo?.PatientId;
- FISVidType dataType;
- using (var fisVinnoImageData = AppManager.Instance.GetManager<IFISManager>().FISVidService.OpenFISVinnoImageData(vidInfo.VidFilePath))
- {
- dataType = fisVinnoImageData.ImageCount > 1 ? FISVidType.ThirdVidMovie : FISVidType.ThirdVidSingle;
- }
- var targetPath = Path.Combine(storageFolder, $"{id}_{dataType}_{currentDate}_{vidInfo.ExamRecordId}.{SonopostConstants.VidFileName}");
- File.Copy(vidInfo.VidFilePath, targetPath, true);
- return new ConvertVinnoFileResult(true, targetPath);
- }
- catch (Exception e)
- {
- var dicomFileName = Path.Combine(SonopostConstants.DataFolder, SonopostConstants.OriginalVidFolder, $"{id}.{SonopostConstants.VidFileName}");
- Logger.WriteLineError($"File:{dicomFileName},Copy to vinno file failed, PatientId:{patientId},{e},");
- return new ConvertVinnoFileResult(false, string.Empty);
- }
- }
- }
- }
|