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 } }