using System; using System.Collections.Generic; using System.Linq; using Vinno.FIS.Sonopost.Common; using Vinno.FIS.Sonopost.Features.Dicom; using Vinno.FIS.Sonopost.Helpers; using Vinno.FIS.Sonopost.Settings; using Vinno.FIS.Sonopost.WebApi.Models; namespace Vinno.FIS.Sonopost.WebApi.Controllers { [WebApiController] internal class DicomController : BaseController { /// /// 获取超声DICOM信息 /// /// [WebApiAction] public Result GetSonoInfo() { DicomSonoSettingModel model = new DicomSonoSettingModel { IsEnable = SonopostUserDefinedSettings.Instance.DicomSetting.UseDicomService, Title = SonopostUserDefinedSettings.Instance.DicomSetting.DicomTitile, Port = SonopostUserDefinedSettings.Instance.DicomSetting.DicomPort.ToString(), TempFileDays = SonopostUserDefinedSettings.Instance.DicomSetting.TempFileDays, }; return Result.Success(model); } /// /// 保存超声DICOM信息 /// /// /// [WebApiAction] public Result SaveSonoInfo(DicomSonoSettingModel model) { SonopostUserDefinedSettings.Instance.DicomSetting.UseDicomService = model.IsEnable; SonopostUserDefinedSettings.Instance.DicomSetting.DicomTitile = model.Title; if (int.TryParse(model.Port, out var port)) { SonopostUserDefinedSettings.Instance.DicomSetting.DicomPort = port; } SonopostUserDefinedSettings.Instance.DicomSetting.TempFileDays = model.TempFileDays; ConfigManager.Save(); DicomServerManager.ChangeValue(); return Result.Success(); } /// /// 获取工作站DICOM信息 /// /// [WebApiAction] public Result GetStationInfo() { DicomStationSettingModel model = new DicomStationSettingModel { IsEnable = SonopostUserDefinedSettings.Instance.DicomSetting.UseWorkStationProxy, Title = SonopostUserDefinedSettings.Instance.DicomSetting.WorkStationTitle, Port = SonopostUserDefinedSettings.Instance.DicomSetting.WorkStationPort.ToString(), Address = SonopostUserDefinedSettings.Instance.DicomSetting.WorkStationIpAddress, }; return Result.Success(model); } /// /// 保存工作站DICOM信息 /// /// /// [WebApiAction] public Result SaveStationInfo(DicomStationSettingModel model) { SonopostUserDefinedSettings.Instance.DicomSetting.UseWorkStationProxy = model.IsEnable; SonopostUserDefinedSettings.Instance.DicomSetting.WorkStationTitle = model.Title; if (int.TryParse(model.Port, out var workstationPort)) { SonopostUserDefinedSettings.Instance.DicomSetting.WorkStationPort = workstationPort; } SonopostUserDefinedSettings.Instance.DicomSetting.WorkStationIpAddress = model.Address; ConfigManager.Save(); return Result.Success(); } /// /// dicom 测试 /// /// [WebApiAction] public Result TestDicom(DicomStationSettingModel model) { var localTitle = SonopostUserDefinedSettings.Instance.DicomSetting.DicomTitile; if (int.TryParse(model.Port, out var port)) { var result = DicomHelper.TestDicomAsync(model.Address, port, localTitle, model.Title).GetAwaiter().GetResult(); return result ? Result.Success() : Result.Fail(); } return Result.Fail(); } /// /// 重传DICOM失败记录 /// /// /// [WebApiAction] public Result ReuploadFailedRecord(DicomFailActionRequest request) { RemedicalManager.Retry(request.Id); return Result.Success(); } /// /// 删除DICOM失败记录 /// /// /// [WebApiAction] public Result DeleteFailedRecord(DicomFailActionRequest request) { RemedicalManager.Delete(request.Id); return Result.Success(); } /// /// 获取DICOM失败列表 /// /// /// [WebApiAction] public Result GetFailedList(DicomFailListRequest request) { var allList = RemedicalManager.GetConvertFailContexts().Where(x => x.Status != DicomUploadStatus.Create).ToList(); if (!string.IsNullOrWhiteSpace(request.FailType) && Enum.TryParse(request.FailType, out DicomUploadStatus status)) { if (status == DicomUploadStatus.UploadFail) { allList = allList.Where(x => x.Status == status || x.Status == DicomUploadStatus.CreateScanDataFail || x.Status == DicomUploadStatus.UploadFailBecauseExamIsFinished)?.ToList() ?? new List(); } else { allList = allList.Where(x => x.Status == status)?.ToList() ?? new List(); } } PagedListResponse response = new PagedListResponse { TotalCount = allList.Count, DataList = allList.Skip(request.LimitStart).Take(request.PageSize).Select(x => new { x.Id, x.ScanId, x.Status, x.PatientId, x.PatientName, x.CreateTime, //x.DicomPath, }) }; return Result.Success(response); } /// /// 获取图像采集设定 /// /// [WebApiAction] public Result GetCaptureSetting() { CaptureSettingModel captureSettingMode = new CaptureSettingModel { CaptureEnabled = SonopostUserDefinedSettings.Instance.CaptureSetting.RealTimeCaptureEnabled, ImageCaptureForFootToggleKey = (int)SonopostUserDefinedSettings.Instance.CaptureSetting.ImageCaptureKeyForFootToogle, VideoCaptureForFootToggleKey = (int)SonopostUserDefinedSettings.Instance.CaptureSetting.VideoCaptureKeyForFootToggle, FootToggleLeftKeyForKeyBoard = (int)SonopostUserDefinedSettings.Instance.CaptureSetting.FootToggleLeftKeyForKeyBoard, FootToggleRightKeyForKeyBoard = (int)SonopostUserDefinedSettings.Instance.CaptureSetting.FootToggleRightKeyForKeyBoard, }; return Result.Success(captureSettingMode); } /// /// 保存图像采集设定 /// /// [WebApiAction] public Result SaveCaptureSetting(CaptureSettingModel captureSettingModel) { if (captureSettingModel.ImageCaptureForFootToggleKey == captureSettingModel.VideoCaptureForFootToggleKey) { return Result.Fail("FootToggleConflict"); } if (captureSettingModel.FootToggleLeftKeyForKeyBoard == captureSettingModel.FootToggleRightKeyForKeyBoard) { return Result.Fail("KeyBoardKeyConflict"); } if (LoginManager.IsConnectWithOldServer && captureSettingModel.CaptureEnabled) { return Result.Fail("ServerNotSupport"); } SonopostUserDefinedSettings.Instance.CaptureSetting.RealTimeCaptureEnabled = captureSettingModel.CaptureEnabled; SonopostUserDefinedSettings.Instance.CaptureSetting.ImageCaptureKeyForFootToogle = (EnumFootToggleKey)captureSettingModel.ImageCaptureForFootToggleKey; SonopostUserDefinedSettings.Instance.CaptureSetting.VideoCaptureKeyForFootToggle = (EnumFootToggleKey)captureSettingModel.VideoCaptureForFootToggleKey; SonopostUserDefinedSettings.Instance.CaptureSetting.FootToggleLeftKeyForKeyBoard = (EnumKeyboardKey)captureSettingModel.FootToggleLeftKeyForKeyBoard; SonopostUserDefinedSettings.Instance.CaptureSetting.FootToggleRightKeyForKeyBoard = (EnumKeyboardKey)captureSettingModel.FootToggleRightKeyForKeyBoard; ConfigManager.Save(); if (SonopostUserDefinedSettings.Instance.CaptureSetting.RealTimeCaptureEnabled) { KeyBoardListenManager.StartKeyBoardListen(); } else { KeyBoardListenManager.StopKeyBoardListen(); } LiveVideoManager.ChangeRealTimeCaptureSetting(); return Result.Success(); } /// /// 清理缓存 /// /// [WebApiAction] public Result ClearRemedicalCache() { RemedicalManager.ClearRemedicalCache(); return Result.Success(); } } }