ServerController.cs 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. using FISLib.Connect;
  2. using System.Linq;
  3. using Vinno.FIS.Sonopost.Features.Config;
  4. using Vinno.FIS.Sonopost.WebApi.Models;
  5. using Vinno.IUS.Common.Utilities;
  6. namespace Vinno.FIS.Sonopost.WebApi.Controllers
  7. {
  8. [WebApiController("Server")]
  9. internal class ServerController : BaseController
  10. {
  11. /// <summary>
  12. /// 登录
  13. /// </summary>
  14. /// <param name="request"></param>
  15. /// <returns></returns>
  16. [WebApiAction("Login")]
  17. public Result Login(ServerLoginRequest2 request)
  18. {
  19. if (!request.Ipv4.Equals(ConfigManager.VCloudServerAddress) || !request.Port.Equals(ConfigManager.VCloudServerPort))
  20. {
  21. bool changed = TerminalClientManager.ChangeServer(request.Ipv4, request.Port);
  22. if (!changed) Result.Fail();
  23. }
  24. var isLoginWithAccountAndPassword = SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword;
  25. var hospitalName = request.HospitalName?.Trim();
  26. if (string.IsNullOrWhiteSpace(hospitalName))
  27. {
  28. hospitalName = null;
  29. }
  30. if (!isLoginWithAccountAndPassword)
  31. {
  32. UpdateAccount(string.Empty, string.Empty);
  33. }
  34. else
  35. {
  36. if (string.IsNullOrWhiteSpace(request.Account))
  37. {
  38. return Result.Fail("InputAccountTips");
  39. }
  40. if (string.IsNullOrWhiteSpace(request.Password))
  41. {
  42. return Result.Fail("InputPasswordTips");
  43. }
  44. UpdateAccount(request.Account, request.Password);
  45. }
  46. var status = LoginManager.Login(hospitalName);
  47. if (status != DeviceStatus.Logon)
  48. {
  49. return Result.Fail(status.ToString());
  50. }
  51. ServerLoginResult result = new ServerLoginResult
  52. {
  53. UniqueId = TerminalClientManager.UniqueId,
  54. QRCodeString = LoginManager.QRCodeString,
  55. };
  56. return Result.Success(result);
  57. }
  58. /// <summary>
  59. /// 登出
  60. /// </summary>
  61. /// <returns></returns>
  62. [WebApiAction]
  63. public Result Logout()
  64. {
  65. if (LoginManager.LoginStatus != DeviceStatus.Logon)
  66. {
  67. return Result<bool>.Success(true);
  68. }
  69. SonopostUserDefinedSettings.Instance.ServerSetting.IsAutoLogin = false;
  70. ConfigManager.Save();
  71. if (LoginManager.Logoff())
  72. {
  73. return Result<bool>.Success(LoginManager.LoginStatus != DeviceStatus.Logon);
  74. }
  75. else
  76. {
  77. return Result.Fail($"LogOffError");
  78. }
  79. }
  80. /// <summary>
  81. /// 获取登录信息
  82. /// </summary>
  83. /// <returns></returns>
  84. [WebApiAction]
  85. public Result GetLoginInfo()
  86. {
  87. var username = DesBuilder.Decrypt(SonopostUserDefinedSettings.Instance.ServerSetting.UserName);
  88. var pwd = DesBuilder.Decrypt(SonopostUserDefinedSettings.Instance.ServerSetting.UserPassword);
  89. bool isLoginWithAccountAndPassword = false;
  90. bool isExisted = false;
  91. if (LoginManager.LoginStatus == DeviceStatus.Logon)
  92. {
  93. isLoginWithAccountAndPassword = TerminalClientManager.IsLoginWithAccountAndPassword;
  94. }
  95. else
  96. {
  97. isLoginWithAccountAndPassword = SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword;
  98. }
  99. var servers = SonopostUserDefinedSettings.Instance.ServerSetting.Servers;
  100. if (servers.Any(x => x.Host.Equals(ConfigManager.VCloudServerAddress) && x.Port.Equals(ConfigManager.VCloudServerPort)))
  101. {
  102. isExisted = true;
  103. }
  104. var result = new ServerLoginInfoResult
  105. {
  106. QRCodeString = LoginManager.QRCodeString,
  107. UniqueId = TerminalClientManager.UniqueId,
  108. Address = ConfigManager.VCloudServerAddress,
  109. Port = ConfigManager.VCloudServerPort,
  110. Account = username,
  111. Password = pwd,
  112. IsLoginWithAccountAndPassword = isLoginWithAccountAndPassword,
  113. IsExisted = isExisted,
  114. DongleId = FISManager.UltrasoundMachineInfo.DongleId,
  115. };
  116. return Result.Success(result);
  117. }
  118. /// <summary>
  119. /// 当前是否已登录
  120. /// </summary>
  121. /// <returns></returns>
  122. [WebApiAction]
  123. public Result CheckIsLogon()
  124. {
  125. return Result.Success(LoginManager.LoginStatus == DeviceStatus.Logon);
  126. }
  127. /// <summary>
  128. /// 获取服务列表
  129. /// </summary>
  130. /// <returns></returns>
  131. [WebApiAction]
  132. public Result GetServerList()
  133. {
  134. if (LoginManager.LoginStatus != DeviceStatus.Logon)
  135. {
  136. var fasterServer = TerminalClientManager.GetFasterServerInfo();
  137. if (fasterServer != null && SonopostUserDefinedSettings.Instance.ServerSetting.Servers.FirstOrDefault(x => x.IsDefault).ToString() != fasterServer.ToString())
  138. {
  139. var defaultServer = SonopostUserDefinedSettings.Instance.ServerSetting.Servers.FirstOrDefault(x => x.IsDefault);
  140. var oldDefaultServer = new FISServerInfo(defaultServer.Host, defaultServer.Port, true);
  141. var newDefaultServer = new FISServerInfo(fasterServer.Host, fasterServer.Port, true);
  142. ConfigManager.RefreshDefaultServer(oldDefaultServer, newDefaultServer);
  143. defaultServer.Host = fasterServer.Host;
  144. defaultServer.Port = fasterServer.Port;
  145. ConfigManager.Save();
  146. }
  147. }
  148. return Result.Success(SonopostUserDefinedSettings.Instance.ServerSetting.Servers);
  149. }
  150. /// <summary>
  151. /// 检查网络
  152. /// </summary>
  153. /// <returns></returns>
  154. [WebApiAction]
  155. public Result CheckNetwork()
  156. {
  157. if (TestManager.IsRunning)
  158. {
  159. TestManager.Stop();
  160. }
  161. TestManager.Run();
  162. return Result.Success();
  163. }
  164. /// <summary>
  165. /// 获取 检查网络 进度
  166. /// </summary>
  167. /// <returns></returns>
  168. [WebApiAction]
  169. public Result GetCheckNetworkProgress()
  170. {
  171. return Result.Success(TestManager.CurrentProgress);
  172. }
  173. /// <summary>
  174. /// 获取DongleId
  175. /// </summary>
  176. /// <returns></returns>
  177. [WebApiAction]
  178. public Result GetDongleId()
  179. {
  180. return Result.Success(FISManager.UltrasoundMachineInfo.DongleId);
  181. }
  182. /// <summary>
  183. /// 获取 当前的登录模式
  184. /// </summary>
  185. /// <returns></returns>
  186. [WebApiAction]
  187. public Result GetCurrentVCloudLoginMode()
  188. {
  189. var currentMode = TerminalClientManager.IsLoginWithAccountAndPassword;
  190. return Result.Success(new VCloudLoginRequest { IsLoginWithAccountAndPassword = currentMode });
  191. }
  192. /// <summary>
  193. /// 切换已登录的云服务器
  194. /// </summary>
  195. /// <returns></returns>
  196. [WebApiAction]
  197. public Result SwtichLoginServer(ServerNodeRequest serverNodeRequest)
  198. {
  199. if (LoginManager.LoginStatus == DeviceStatus.Logon)
  200. {
  201. if (!LoginManager.Logoff())
  202. {
  203. return Result.Fail($"LogOffError");
  204. }
  205. }
  206. if (serverNodeRequest == null)
  207. {
  208. return Result.Fail($"Server Info is Null");
  209. }
  210. if (SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword)
  211. {
  212. SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword = false;
  213. ConfigManager.Save();
  214. }
  215. return Login(new ServerLoginRequest2
  216. {
  217. Ipv4 = serverNodeRequest.Ipv4,
  218. Port = serverNodeRequest.Port,
  219. });
  220. }
  221. #region Private Methods
  222. private void UpdateAccount(string name, string password)
  223. {
  224. SonopostUserDefinedSettings.Instance.ServerSetting.UserName = DesBuilder.Encrypt(name);
  225. SonopostUserDefinedSettings.Instance.ServerSetting.UserPassword = DesBuilder.Encrypt(password);
  226. SonopostUserDefinedSettings.Instance.ServerSetting.IsAutoLogin = true;
  227. ConfigManager.Save();
  228. }
  229. #endregion Private Methods
  230. }
  231. }