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();
}
}
}