using FISLib.Connect; using System.Linq; using Vinno.FIS.Sonopost.Features.Config; using Vinno.FIS.Sonopost.WebApi.Models; 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)) { bool changed = TerminalClientManager.ChangeServer(request.Ipv4, request.Port); 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 = TerminalClientManager.UniqueId, QRCodeString = LoginManager.QRCodeString, }; return Result.Success(result); } /// /// 登出 /// /// [WebApiAction] public Result Logout() { if (LoginManager.LoginStatus != DeviceStatus.Logon) { return Result.Success(true); } SonopostUserDefinedSettings.Instance.ServerSetting.IsAutoLogin = false; ConfigManager.Save(); if (LoginManager.Logoff()) { return Result.Success(LoginManager.LoginStatus != 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.LoginStatus == DeviceStatus.Logon) { isLoginWithAccountAndPassword = TerminalClientManager.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 ServerLoginInfoResult { QRCodeString = LoginManager.QRCodeString, UniqueId = TerminalClientManager.UniqueId, Address = ConfigManager.VCloudServerAddress, Port = ConfigManager.VCloudServerPort, Account = username, Password = pwd, IsLoginWithAccountAndPassword = isLoginWithAccountAndPassword, IsExisted = isExisted, DongleId = FISManager.UltrasoundMachineInfo.DongleId, }; return Result.Success(result); } /// /// 当前是否已登录 /// /// [WebApiAction] public Result CheckIsLogon() { return Result.Success(LoginManager.LoginStatus == DeviceStatus.Logon); } /// /// 获取服务列表 /// /// [WebApiAction] public Result GetServerList() { if (LoginManager.LoginStatus != DeviceStatus.Logon) { var fasterServer = TerminalClientManager.GetFasterServerInfo(); if (fasterServer != null && SonopostUserDefinedSettings.Instance.ServerSetting.Servers.FirstOrDefault(x => x.IsDefault).ToString() != fasterServer.ToString()) { var defaultServer = SonopostUserDefinedSettings.Instance.ServerSetting.Servers.FirstOrDefault(x => x.IsDefault); var oldDefaultServer = new FISServerInfo(defaultServer.Host, defaultServer.Port, true); var newDefaultServer = new FISServerInfo(fasterServer.Host, fasterServer.Port, true); ConfigManager.RefreshDefaultServer(oldDefaultServer, newDefaultServer); defaultServer.Host = fasterServer.Host; 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 = TerminalClientManager.IsLoginWithAccountAndPassword; return Result.Success(new VCloudLoginRequest { IsLoginWithAccountAndPassword = currentMode }); } /// /// 切换已登录的云服务器 /// /// [WebApiAction] public Result SwtichLoginServer(ServerNodeRequest serverNodeRequest) { if (LoginManager.LoginStatus == 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(); } return Login(new ServerLoginRequest2 { Ipv4 = serverNodeRequest.Ipv4, Port = serverNodeRequest.Port, }); } #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 } }