using FISLib.Connect;
using System;
using System.Linq;
using Vinno.FIS.Sonopost.Common;
using Vinno.FIS.Sonopost.Settings;
using Vinno.FIS.Sonopost.Settings.Config;
using Vinno.FIS.Sonopost.WebApi.Models;
using Vinno.IUS.Common.Log;
using Vinno.IUS.Common.Utilities;
namespace Vinno.FIS.Sonopost.WebApi.Controllers
{
[WebApiController("Server")]
internal class ServerController : BaseController
{
///
/// 登录
///
///
///
[WebApiAction("Login")]
public Result Login(ServerLoginRequest2 request)
{
if (!request.Ipv4.Equals(ConfigManager.VCloudServerAddress) || !request.Port.Equals(ConfigManager.VCloudServerPort) || !request.ServerName.Equals(ConfigManager.VCloudServerName))
{
bool changed = LoginManager.ChangeServer(request.Ipv4, request.Port, request.ServerName);
if (!changed) Result.Fail();
}
var isLoginWithAccountAndPassword = SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword;
var hospitalName = request.HospitalName?.Trim();
if (string.IsNullOrWhiteSpace(hospitalName))
{
hospitalName = null;
}
if (!isLoginWithAccountAndPassword)
{
UpdateAccount(string.Empty, string.Empty);
}
else
{
if (string.IsNullOrWhiteSpace(request.Account))
{
return Result.Fail("InputAccountTips");
}
if (string.IsNullOrWhiteSpace(request.Password))
{
return Result.Fail("InputPasswordTips");
}
UpdateAccount(request.Account, request.Password);
}
var status = LoginManager.Login(hospitalName);
if (status != DeviceStatus.Logon)
{
return Result.Fail(status.ToString());
}
ServerLoginResult result = new ServerLoginResult
{
UniqueId = LoginManager.UniqueId,
QRCodeString = LoginManager.QRCodeString,
};
return Result.Success(result);
}
///
/// 登出
///
///
[WebApiAction]
public Result Logout()
{
if (LoginManager.DeviceStatus != DeviceStatus.Logon)
{
return Result.Success(true);
}
SonopostUserDefinedSettings.Instance.ServerSetting.IsAutoLogin = false;
ConfigManager.Save();
if (LoginManager.Logoff())
{
return Result.Success(LoginManager.DeviceStatus != DeviceStatus.Logon);
}
else
{
return Result.Fail($"LogOffError");
}
}
///
/// 获取登录信息
///
///
[WebApiAction]
public Result GetLoginInfo()
{
var username = DesBuilder.Decrypt(SonopostUserDefinedSettings.Instance.ServerSetting.UserName);
var pwd = DesBuilder.Decrypt(SonopostUserDefinedSettings.Instance.ServerSetting.UserPassword);
bool isLoginWithAccountAndPassword = false;
bool isExisted = false;
if (LoginManager.DeviceStatus == DeviceStatus.Logon)
{
isLoginWithAccountAndPassword = LoginManager.IsLoginWithAccountAndPassword;
}
else
{
isLoginWithAccountAndPassword = SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword;
}
var servers = SonopostUserDefinedSettings.Instance.ServerSetting.Servers;
if (servers.Any(x => x.Host.Equals(ConfigManager.VCloudServerAddress) && x.Port.Equals(ConfigManager.VCloudServerPort)))
{
isExisted = true;
}
var result = new ServerLoginResult2
{
QRCodeString = LoginManager.QRCodeString,
UniqueId = LoginManager.UniqueId,
Address = ConfigManager.VCloudServerAddress,
Port = ConfigManager.VCloudServerPort,
Account = username,
Password = pwd,
IsLoginWithAccountAndPassword = isLoginWithAccountAndPassword,
IsExisted = isExisted,
DongleId = FISManager.UltrasoundMachineInfo.DongleId,
VCloudServerName = ConfigManager.VCloudServerName,
};
return Result.Success(result);
}
///
/// 当前是否已登录
///
///
[WebApiAction]
public Result CheckIsLogon()
{
return Result.Success(LoginManager.DeviceStatus == DeviceStatus.Logon);
}
///
/// 获取服务列表
///
///
[WebApiAction]
public Result GetServerList()
{
if (LoginManager.DeviceStatus != DeviceStatus.Logon && !LoginManager.HasGetFasterServer)
{
var fasterServer = LoginManager.GetFasterServerInfo();
if (fasterServer != null && SonopostUserDefinedSettings.Instance.ServerSetting.Servers.FirstOrDefault(x => x.IsDefault && x.DisplayName == SonopostConstants.FlyinsonoServerName).ToString() != fasterServer.ToString())
{
var flyinsonoServer = SonopostUserDefinedSettings.Instance.ServerSetting.Servers.FirstOrDefault(x => x.IsDefault && x.DisplayName == SonopostConstants.FlyinsonoServerName);
var newFlyinsonoServer = new ServerInfoSetting(fasterServer.Host, fasterServer.Port, true, SonopostConstants.FlyinsonoServerName);
ConfigManager.RefreshFlyinsonoServer(newFlyinsonoServer);
flyinsonoServer.Host = fasterServer.Host;
flyinsonoServer.Port = fasterServer.Port;
if (SonopostUserDefinedSettings.Instance.ServerSetting.DefaultServer.DisplayName == SonopostConstants.FlyinsonoServerName && SonopostUserDefinedSettings.Instance.ServerSetting.DefaultServer.ToString() != fasterServer.ToString())
{
SonopostUserDefinedSettings.Instance.ServerSetting.DefaultServer.Host = fasterServer.Host;
SonopostUserDefinedSettings.Instance.ServerSetting.DefaultServer.Port = fasterServer.Port;
}
ConfigManager.Save();
}
}
return Result.Success(SonopostUserDefinedSettings.Instance.ServerSetting.Servers);
}
///
/// 检查网络
///
///
[WebApiAction]
public Result CheckNetwork()
{
if (TestManager.IsRunning)
{
TestManager.Stop();
}
TestManager.Run();
return Result.Success();
}
///
/// 获取 检查网络 进度
///
///
[WebApiAction]
public Result GetCheckNetworkProgress()
{
return Result.Success(TestManager.CurrentProgress);
}
///
/// 获取DongleId
///
///
[WebApiAction]
public Result GetDongleId()
{
return Result.Success(FISManager.UltrasoundMachineInfo.DongleId);
}
///
/// 获取 当前的登录模式
///
///
[WebApiAction]
public Result GetCurrentVCloudLoginMode()
{
var currentMode = LoginManager.IsLoginWithAccountAndPassword;
return Result.Success(new VCloudLoginRequest { IsLoginWithAccountAndPassword = currentMode });
}
///
/// 切换已登录的云服务器
///
///
[WebApiAction]
public Result SwtichLoginServer(ServerNodeRequest serverNodeRequest)
{
var request = Helpers.JsonHelper.ToJson(serverNodeRequest);
Logger.WriteLineInfo($"Sonopost SwtichLoginServer Invoke,{request}");
if (serverNodeRequest == null || string.IsNullOrEmpty(serverNodeRequest.Ipv4) || serverNodeRequest.Port < 0)
{
Logger.WriteLineInfo($"Sonopost SwtichLoginServer Fail,Invalid Arguments");
return Result.Fail($"InvalidArguments");
}
if (LoginManager.DeviceStatus == DeviceStatus.Logon)
{
if (!LoginManager.Logoff())
{
return Result.Fail($"LogOffError");
}
}
if (serverNodeRequest == null)
{
return Result.Fail($"Server Info is Null");
}
if (SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword)
{
SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword = false;
ConfigManager.Save();
}
string serverName = string.Empty;
var existItems = SonopostUserDefinedSettings.Instance.ServerSetting.Servers.Where(x => x.Host == serverNodeRequest.Ipv4 && x.Port == serverNodeRequest.Port);
if (existItems.Count() == 0)
{
serverName = $"{serverNodeRequest.Ipv4}:{serverNodeRequest.Port}";
}
if (existItems.Count() == 1)
{
serverName = existItems.FirstOrDefault().DisplayName;
}
else
{
serverName = existItems.FirstOrDefault(x => x.DisplayName != SonopostConstants.FlyinsonoServerName)?.DisplayName;
}
if (string.IsNullOrEmpty(serverName))
{
serverName = $"{serverNodeRequest.Ipv4}:{serverNodeRequest.Port}";
}
return Login(new ServerLoginRequest2
{
Ipv4 = serverNodeRequest.Ipv4,
Port = serverNodeRequest.Port,
ServerName = serverName,
});
}
///
/// 修改物理唯一码
///
///
[WebApiAction]
public Result ChangePhysicalUniqueId(PhysicalUniqueIdRequest physicalUniqueIdRequest)
{
try
{
if (physicalUniqueIdRequest == null || string.IsNullOrEmpty(physicalUniqueIdRequest.Id))
{
return Result.Fail("IdIsEmpty");
}
FISIMPL.FISIMPL.ChangeMachineId(physicalUniqueIdRequest.Id);
return Result.Success();
}
catch (Exception ex)
{
Logger.WriteLineError($"ChangePhysicalUniqueId Error:{ex}");
return Result.Fail();
}
}
///
/// 读取云服务登录设置
///
///
[WebApiAction]
public Result LoadVCloudLoginSetting()
{
try
{
return Result.Success(new VCloudLoginRequest { IsLoginWithAccountAndPassword = SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword });
}
catch (Exception ex)
{
Logger.WriteLineError($"Load VCloud Login Setting Error:{ex}");
return Result.Fail();
}
}
///
/// 保存云服务登录设置
///
///
[WebApiAction]
public Result SaveVCloudLoginSetting(VCloudLoginRequest vCloudLoginRequest)
{
try
{
SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword = vCloudLoginRequest.IsLoginWithAccountAndPassword;
ConfigManager.Save();
return Result.Success();
}
catch (Exception ex)
{
Logger.WriteLineError($"Save VCloud Login Setting Error:{ex}");
return Result.Fail();
}
}
#region Private Methods
private void UpdateAccount(string name, string password)
{
SonopostUserDefinedSettings.Instance.ServerSetting.UserName = DesBuilder.Encrypt(name);
SonopostUserDefinedSettings.Instance.ServerSetting.UserPassword = DesBuilder.Encrypt(password);
SonopostUserDefinedSettings.Instance.ServerSetting.IsAutoLogin = true;
ConfigManager.Save();
}
#endregion Private Methods
}
}