DicomForwardQueue.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using Dicom;
  2. using Dicom.Network;
  3. using System;
  4. using Vinno.FIS.Sonopost.Settings;
  5. using Vinno.IUS.Common.Log;
  6. using DicomClient = Dicom.Network.Client.DicomClient;
  7. namespace Vinno.FIS.Sonopost.Features.Dicom
  8. {
  9. internal class DicomForwardQueue : DicomOperateQueue
  10. {
  11. private static volatile DicomForwardQueue _instance;
  12. public static DicomForwardQueue Instance => _instance ?? (_instance = new DicomForwardQueue());
  13. private DicomForwardQueue() : base("ForwardDicomQueue")
  14. {
  15. }
  16. protected override bool DoWork(DicomFile dicomFile)
  17. {
  18. try
  19. {
  20. var useProxy = SonopostUserDefinedSettings.Instance.DicomSetting.UseWorkStationProxy;
  21. if (useProxy)
  22. {
  23. var patientId = dicomFile.GetPatientId();
  24. var newGuid = Guid.NewGuid().ToString("N").ToUpper();
  25. SendToWorkstation(dicomFile, patientId);
  26. }
  27. }
  28. catch (Exception e)
  29. {
  30. Logger.WriteLineError($"Forward dicom Error:{e}");
  31. }
  32. return true;
  33. }
  34. protected override bool DoWork(VidInfo vidInfo)
  35. {
  36. return false;
  37. }
  38. private async void SendToWorkstation(DicomFile file, string patientId)
  39. {
  40. try
  41. {
  42. //TODO:send to list of server
  43. Logger.WriteLineInfo($"Begin send dicom to third workstation,PatientId:{patientId}");
  44. var address = SonopostUserDefinedSettings.Instance.DicomSetting.WorkStationIpAddress;
  45. var port = SonopostUserDefinedSettings.Instance.DicomSetting.WorkStationPort;
  46. var targetAeTitle = SonopostUserDefinedSettings.Instance.DicomSetting.WorkStationTitle;
  47. var localAeTitle = SonopostUserDefinedSettings.Instance.DicomSetting.DicomTitile;
  48. var dicomClient = new DicomClient(address, port, false, localAeTitle, targetAeTitle);
  49. await dicomClient.AddRequestAsync(new DicomCStoreRequest(file));
  50. await dicomClient.SendAsync();
  51. Logger.WriteLineInfo($"End send dicom to third workstation,PatientId:{patientId}");
  52. }
  53. catch (Exception ex)
  54. {
  55. Logger.WriteLineError($"SendToWorkstation error:{ex.Message}");
  56. }
  57. }
  58. }
  59. }