DicomController.cs 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Vinno.FIS.Sonopost.Common;
  5. using Vinno.FIS.Sonopost.Features.Dicom;
  6. using Vinno.FIS.Sonopost.Helpers;
  7. using Vinno.FIS.Sonopost.Settings;
  8. using Vinno.FIS.Sonopost.WebApi.Models;
  9. namespace Vinno.FIS.Sonopost.WebApi.Controllers
  10. {
  11. [WebApiController]
  12. internal class DicomController : BaseController
  13. {
  14. /// <summary>
  15. /// 获取超声DICOM信息
  16. /// </summary>
  17. /// <returns></returns>
  18. [WebApiAction]
  19. public Result GetSonoInfo()
  20. {
  21. DicomSonoSettingModel model = new DicomSonoSettingModel
  22. {
  23. IsEnable = SonopostUserDefinedSettings.Instance.DicomSetting.UseDicomService,
  24. Title = SonopostUserDefinedSettings.Instance.DicomSetting.DicomTitile,
  25. Port = SonopostUserDefinedSettings.Instance.DicomSetting.DicomPort.ToString(),
  26. TempFileDays = SonopostUserDefinedSettings.Instance.DicomSetting.TempFileDays,
  27. };
  28. return Result.Success(model);
  29. }
  30. /// <summary>
  31. /// 保存超声DICOM信息
  32. /// </summary>
  33. /// <param name="model"></param>
  34. /// <returns></returns>
  35. [WebApiAction]
  36. public Result SaveSonoInfo(DicomSonoSettingModel model)
  37. {
  38. SonopostUserDefinedSettings.Instance.DicomSetting.UseDicomService = model.IsEnable;
  39. SonopostUserDefinedSettings.Instance.DicomSetting.DicomTitile = model.Title;
  40. if (int.TryParse(model.Port, out var port))
  41. {
  42. SonopostUserDefinedSettings.Instance.DicomSetting.DicomPort = port;
  43. }
  44. SonopostUserDefinedSettings.Instance.DicomSetting.TempFileDays = model.TempFileDays;
  45. ConfigManager.Save();
  46. DicomServerManager.ChangeValue();
  47. return Result.Success();
  48. }
  49. /// <summary>
  50. /// 获取工作站DICOM信息
  51. /// </summary>
  52. /// <returns></returns>
  53. [WebApiAction]
  54. public Result GetStationInfo()
  55. {
  56. DicomStationSettingModel model = new DicomStationSettingModel
  57. {
  58. IsEnable = SonopostUserDefinedSettings.Instance.DicomSetting.UseWorkStationProxy,
  59. Title = SonopostUserDefinedSettings.Instance.DicomSetting.WorkStationTitle,
  60. Port = SonopostUserDefinedSettings.Instance.DicomSetting.WorkStationPort.ToString(),
  61. Address = SonopostUserDefinedSettings.Instance.DicomSetting.WorkStationIpAddress,
  62. };
  63. return Result.Success(model);
  64. }
  65. /// <summary>
  66. /// 保存工作站DICOM信息
  67. /// </summary>
  68. /// <param name="model"></param>
  69. /// <returns></returns>
  70. [WebApiAction]
  71. public Result SaveStationInfo(DicomStationSettingModel model)
  72. {
  73. SonopostUserDefinedSettings.Instance.DicomSetting.UseWorkStationProxy = model.IsEnable;
  74. SonopostUserDefinedSettings.Instance.DicomSetting.WorkStationTitle = model.Title;
  75. if (int.TryParse(model.Port, out var workstationPort))
  76. {
  77. SonopostUserDefinedSettings.Instance.DicomSetting.WorkStationPort = workstationPort;
  78. }
  79. SonopostUserDefinedSettings.Instance.DicomSetting.WorkStationIpAddress = model.Address;
  80. ConfigManager.Save();
  81. return Result.Success();
  82. }
  83. /// <summary>
  84. /// dicom 测试
  85. /// </summary>
  86. /// <returns></returns>
  87. [WebApiAction]
  88. public Result TestDicom(DicomStationSettingModel model)
  89. {
  90. var localTitle = SonopostUserDefinedSettings.Instance.DicomSetting.DicomTitile;
  91. if (int.TryParse(model.Port, out var port))
  92. {
  93. var result = DicomHelper.TestDicomAsync(model.Address, port, localTitle, model.Title).GetAwaiter().GetResult();
  94. return result ? Result.Success() : Result.Fail();
  95. }
  96. return Result.Fail();
  97. }
  98. /// <summary>
  99. /// 重传DICOM失败记录
  100. /// </summary>
  101. /// <param name="model"></param>
  102. /// <returns></returns>
  103. [WebApiAction]
  104. public Result ReuploadFailedRecord(DicomFailActionRequest request)
  105. {
  106. RemedicalManager.Retry(request.Id);
  107. return Result.Success();
  108. }
  109. /// <summary>
  110. /// 删除DICOM失败记录
  111. /// </summary>
  112. /// <param name="model"></param>
  113. /// <returns></returns>
  114. [WebApiAction]
  115. public Result DeleteFailedRecord(DicomFailActionRequest request)
  116. {
  117. RemedicalManager.Delete(request.Id);
  118. return Result.Success();
  119. }
  120. /// <summary>
  121. /// 获取DICOM失败列表
  122. /// </summary>
  123. /// <param name="request"></param>
  124. /// <returns></returns>
  125. [WebApiAction]
  126. public Result GetFailedList(DicomFailListRequest request)
  127. {
  128. var allList = RemedicalManager.GetConvertFailContexts().Where(x => x.Status != DicomUploadStatus.Create).ToList();
  129. if (!string.IsNullOrWhiteSpace(request.FailType) && Enum.TryParse(request.FailType, out DicomUploadStatus status))
  130. {
  131. if (status == DicomUploadStatus.UploadFail)
  132. {
  133. allList = allList.Where(x => x.Status == status || x.Status == DicomUploadStatus.CreateScanDataFail || x.Status == DicomUploadStatus.UploadFailBecauseExamIsFinished)?.ToList() ?? new List<DicomUploadContext>();
  134. }
  135. else
  136. {
  137. allList = allList.Where(x => x.Status == status)?.ToList() ?? new List<DicomUploadContext>();
  138. }
  139. }
  140. PagedListResponse<dynamic> response = new PagedListResponse<dynamic>
  141. {
  142. TotalCount = allList.Count,
  143. DataList = allList.Skip(request.LimitStart).Take(request.PageSize).Select(x => new
  144. {
  145. x.Id,
  146. x.ScanId,
  147. x.Status,
  148. x.PatientId,
  149. x.PatientName,
  150. x.CreateTime,
  151. //x.DicomPath,
  152. })
  153. };
  154. return Result.Success(response);
  155. }
  156. /// <summary>
  157. /// 获取图像采集设定
  158. /// </summary>
  159. /// <returns></returns>
  160. [WebApiAction]
  161. public Result GetCaptureSetting()
  162. {
  163. CaptureSettingModel captureSettingMode = new CaptureSettingModel
  164. {
  165. CaptureEnabled = SonopostUserDefinedSettings.Instance.CaptureSetting.RealTimeCaptureEnabled,
  166. ImageCaptureForFootToggleKey = (int)SonopostUserDefinedSettings.Instance.CaptureSetting.ImageCaptureKeyForFootToogle,
  167. VideoCaptureForFootToggleKey = (int)SonopostUserDefinedSettings.Instance.CaptureSetting.VideoCaptureKeyForFootToggle,
  168. FootToggleLeftKeyForKeyBoard = (int)SonopostUserDefinedSettings.Instance.CaptureSetting.FootToggleLeftKeyForKeyBoard,
  169. FootToggleRightKeyForKeyBoard = (int)SonopostUserDefinedSettings.Instance.CaptureSetting.FootToggleRightKeyForKeyBoard,
  170. };
  171. return Result.Success(captureSettingMode);
  172. }
  173. /// <summary>
  174. /// 保存图像采集设定
  175. /// </summary>
  176. /// <returns></returns>
  177. [WebApiAction]
  178. public Result SaveCaptureSetting(CaptureSettingModel captureSettingModel)
  179. {
  180. if (captureSettingModel.ImageCaptureForFootToggleKey == captureSettingModel.VideoCaptureForFootToggleKey)
  181. {
  182. return Result.Fail("FootToggleConflict");
  183. }
  184. if (captureSettingModel.FootToggleLeftKeyForKeyBoard == captureSettingModel.FootToggleRightKeyForKeyBoard)
  185. {
  186. return Result.Fail("KeyBoardKeyConflict");
  187. }
  188. if (LoginManager.IsConnectWithOldServer && captureSettingModel.CaptureEnabled)
  189. {
  190. return Result.Fail("ServerNotSupport");
  191. }
  192. SonopostUserDefinedSettings.Instance.CaptureSetting.RealTimeCaptureEnabled = captureSettingModel.CaptureEnabled;
  193. SonopostUserDefinedSettings.Instance.CaptureSetting.ImageCaptureKeyForFootToogle = (EnumFootToggleKey)captureSettingModel.ImageCaptureForFootToggleKey;
  194. SonopostUserDefinedSettings.Instance.CaptureSetting.VideoCaptureKeyForFootToggle = (EnumFootToggleKey)captureSettingModel.VideoCaptureForFootToggleKey;
  195. SonopostUserDefinedSettings.Instance.CaptureSetting.FootToggleLeftKeyForKeyBoard = (EnumKeyboardKey)captureSettingModel.FootToggleLeftKeyForKeyBoard;
  196. SonopostUserDefinedSettings.Instance.CaptureSetting.FootToggleRightKeyForKeyBoard = (EnumKeyboardKey)captureSettingModel.FootToggleRightKeyForKeyBoard;
  197. ConfigManager.Save();
  198. if (SonopostUserDefinedSettings.Instance.CaptureSetting.RealTimeCaptureEnabled)
  199. {
  200. KeyBoardListenManager.StartKeyBoardListen();
  201. }
  202. else
  203. {
  204. KeyBoardListenManager.StopKeyBoardListen();
  205. }
  206. LiveVideoManager.ChangeRealTimeCaptureSetting();
  207. return Result.Success();
  208. }
  209. /// <summary>
  210. /// 清理缓存
  211. /// </summary>
  212. /// <returns></returns>
  213. [WebApiAction]
  214. public Result ClearRemedicalCache()
  215. {
  216. RemedicalManager.ClearRemedicalCache();
  217. return Result.Success();
  218. }
  219. }
  220. }