ServerController.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. using FISLib.Connect;
  2. using System;
  3. using System.Linq;
  4. using Vinno.FIS.Sonopost.Common;
  5. using Vinno.FIS.Sonopost.Settings;
  6. using Vinno.FIS.Sonopost.Settings.Config;
  7. using Vinno.FIS.Sonopost.WebApi.Models;
  8. using Vinno.IUS.Common.Log;
  9. using Vinno.IUS.Common.Utilities;
  10. namespace Vinno.FIS.Sonopost.WebApi.Controllers
  11. {
  12. [WebApiController("Server")]
  13. internal class ServerController : BaseController
  14. {
  15. /// <summary>
  16. /// 登录
  17. /// </summary>
  18. /// <param name="request"></param>
  19. /// <returns></returns>
  20. [WebApiAction("Login")]
  21. public Result Login(ServerLoginRequest2 request)
  22. {
  23. if (!request.Ipv4.Equals(ConfigManager.VCloudServerAddress) || !request.Port.Equals(ConfigManager.VCloudServerPort) || !request.ServerName.Equals(ConfigManager.VCloudServerName))
  24. {
  25. bool changed = LoginManager.ChangeServer(request.Ipv4, request.Port, request.ServerName);
  26. if (!changed) Result.Fail();
  27. }
  28. var isLoginWithAccountAndPassword = SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword;
  29. var hospitalName = request.HospitalName?.Trim();
  30. if (string.IsNullOrWhiteSpace(hospitalName))
  31. {
  32. hospitalName = null;
  33. }
  34. if (!isLoginWithAccountAndPassword)
  35. {
  36. UpdateAccount(string.Empty, string.Empty);
  37. }
  38. else
  39. {
  40. if (string.IsNullOrWhiteSpace(request.Account))
  41. {
  42. return Result.Fail("InputAccountTips");
  43. }
  44. if (string.IsNullOrWhiteSpace(request.Password))
  45. {
  46. return Result.Fail("InputPasswordTips");
  47. }
  48. UpdateAccount(request.Account, request.Password);
  49. }
  50. var status = LoginManager.Login(hospitalName);
  51. if (status != DeviceStatus.Logon)
  52. {
  53. return Result.Fail(status.ToString());
  54. }
  55. ServerLoginResult result = new ServerLoginResult
  56. {
  57. UniqueId = LoginManager.UniqueId,
  58. QRCodeString = LoginManager.QRCodeString,
  59. };
  60. return Result.Success(result);
  61. }
  62. /// <summary>
  63. /// 登出
  64. /// </summary>
  65. /// <returns></returns>
  66. [WebApiAction]
  67. public Result Logout()
  68. {
  69. if (LoginManager.DeviceStatus != DeviceStatus.Logon)
  70. {
  71. return Result<bool>.Success(true);
  72. }
  73. SonopostUserDefinedSettings.Instance.ServerSetting.IsAutoLogin = false;
  74. ConfigManager.Save();
  75. if (LoginManager.Logoff())
  76. {
  77. return Result<bool>.Success(LoginManager.DeviceStatus != DeviceStatus.Logon);
  78. }
  79. else
  80. {
  81. return Result.Fail($"LogOffError");
  82. }
  83. }
  84. /// <summary>
  85. /// 获取登录信息
  86. /// </summary>
  87. /// <returns></returns>
  88. [WebApiAction]
  89. public Result GetLoginInfo()
  90. {
  91. var username = DesBuilder.Decrypt(SonopostUserDefinedSettings.Instance.ServerSetting.UserName);
  92. var pwd = DesBuilder.Decrypt(SonopostUserDefinedSettings.Instance.ServerSetting.UserPassword);
  93. bool isLoginWithAccountAndPassword = false;
  94. bool isExisted = false;
  95. if (LoginManager.DeviceStatus == DeviceStatus.Logon)
  96. {
  97. isLoginWithAccountAndPassword = LoginManager.IsLoginWithAccountAndPassword;
  98. }
  99. else
  100. {
  101. isLoginWithAccountAndPassword = SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword;
  102. }
  103. var servers = SonopostUserDefinedSettings.Instance.ServerSetting.Servers;
  104. if (servers.Any(x => x.Host.Equals(ConfigManager.VCloudServerAddress) && x.Port.Equals(ConfigManager.VCloudServerPort)))
  105. {
  106. isExisted = true;
  107. }
  108. var result = new ServerLoginResult2
  109. {
  110. QRCodeString = LoginManager.QRCodeString,
  111. UniqueId = LoginManager.UniqueId,
  112. Address = ConfigManager.VCloudServerAddress,
  113. Port = ConfigManager.VCloudServerPort,
  114. Account = username,
  115. Password = pwd,
  116. IsLoginWithAccountAndPassword = isLoginWithAccountAndPassword,
  117. IsExisted = isExisted,
  118. DongleId = FISManager.UltrasoundMachineInfo.DongleId,
  119. VCloudServerName = ConfigManager.VCloudServerName,
  120. };
  121. return Result.Success(result);
  122. }
  123. /// <summary>
  124. /// 当前是否已登录
  125. /// </summary>
  126. /// <returns></returns>
  127. [WebApiAction]
  128. public Result CheckIsLogon()
  129. {
  130. return Result.Success(LoginManager.DeviceStatus == DeviceStatus.Logon);
  131. }
  132. /// <summary>
  133. /// 获取服务列表
  134. /// </summary>
  135. /// <returns></returns>
  136. [WebApiAction]
  137. public Result GetServerList()
  138. {
  139. if (LoginManager.DeviceStatus != DeviceStatus.Logon && !LoginManager.HasGetFasterServer)
  140. {
  141. var fasterServer = LoginManager.GetFasterServerInfo();
  142. if (fasterServer != null && SonopostUserDefinedSettings.Instance.ServerSetting.Servers.FirstOrDefault(x => x.IsDefault && x.DisplayName == SonopostConstants.FlyinsonoServerName).ToString() != fasterServer.ToString())
  143. {
  144. var flyinsonoServer = SonopostUserDefinedSettings.Instance.ServerSetting.Servers.FirstOrDefault(x => x.IsDefault && x.DisplayName == SonopostConstants.FlyinsonoServerName);
  145. var newFlyinsonoServer = new ServerInfoSetting(fasterServer.Host, fasterServer.Port, true, SonopostConstants.FlyinsonoServerName);
  146. ConfigManager.RefreshFlyinsonoServer(newFlyinsonoServer);
  147. flyinsonoServer.Host = fasterServer.Host;
  148. flyinsonoServer.Port = fasterServer.Port;
  149. if (SonopostUserDefinedSettings.Instance.ServerSetting.DefaultServer.DisplayName == SonopostConstants.FlyinsonoServerName && SonopostUserDefinedSettings.Instance.ServerSetting.DefaultServer.ToString() != fasterServer.ToString())
  150. {
  151. SonopostUserDefinedSettings.Instance.ServerSetting.DefaultServer.Host = fasterServer.Host;
  152. SonopostUserDefinedSettings.Instance.ServerSetting.DefaultServer.Port = fasterServer.Port;
  153. }
  154. ConfigManager.Save();
  155. }
  156. }
  157. return Result.Success(SonopostUserDefinedSettings.Instance.ServerSetting.Servers);
  158. }
  159. /// <summary>
  160. /// 检查网络
  161. /// </summary>
  162. /// <returns></returns>
  163. [WebApiAction]
  164. public Result CheckNetwork()
  165. {
  166. if (TestManager.IsRunning)
  167. {
  168. TestManager.Stop();
  169. }
  170. TestManager.Run();
  171. return Result.Success();
  172. }
  173. /// <summary>
  174. /// 获取 检查网络 进度
  175. /// </summary>
  176. /// <returns></returns>
  177. [WebApiAction]
  178. public Result GetCheckNetworkProgress()
  179. {
  180. return Result.Success(TestManager.CurrentProgress);
  181. }
  182. /// <summary>
  183. /// 获取DongleId
  184. /// </summary>
  185. /// <returns></returns>
  186. [WebApiAction]
  187. public Result GetDongleId()
  188. {
  189. return Result.Success(FISManager.UltrasoundMachineInfo.DongleId);
  190. }
  191. /// <summary>
  192. /// 获取 当前的登录模式
  193. /// </summary>
  194. /// <returns></returns>
  195. [WebApiAction]
  196. public Result GetCurrentVCloudLoginMode()
  197. {
  198. var currentMode = LoginManager.IsLoginWithAccountAndPassword;
  199. return Result.Success(new VCloudLoginRequest { IsLoginWithAccountAndPassword = currentMode });
  200. }
  201. /// <summary>
  202. /// 切换已登录的云服务器
  203. /// </summary>
  204. /// <returns></returns>
  205. [WebApiAction]
  206. public Result SwtichLoginServer(ServerNodeRequest serverNodeRequest)
  207. {
  208. var request = Helpers.JsonHelper.ToJson(serverNodeRequest);
  209. Logger.WriteLineInfo($"Sonopost SwtichLoginServer Invoke,{request}");
  210. if (serverNodeRequest == null || string.IsNullOrEmpty(serverNodeRequest.Ipv4) || serverNodeRequest.Port < 0)
  211. {
  212. Logger.WriteLineInfo($"Sonopost SwtichLoginServer Fail,Invalid Arguments");
  213. return Result.Fail($"InvalidArguments");
  214. }
  215. if (LoginManager.DeviceStatus == DeviceStatus.Logon)
  216. {
  217. if (!LoginManager.Logoff())
  218. {
  219. return Result.Fail($"LogOffError");
  220. }
  221. }
  222. if (serverNodeRequest == null)
  223. {
  224. return Result.Fail($"Server Info is Null");
  225. }
  226. if (SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword)
  227. {
  228. SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword = false;
  229. ConfigManager.Save();
  230. }
  231. string serverName = string.Empty;
  232. var existItems = SonopostUserDefinedSettings.Instance.ServerSetting.Servers.Where(x => x.Host == serverNodeRequest.Ipv4 && x.Port == serverNodeRequest.Port);
  233. if (existItems.Count() == 0)
  234. {
  235. serverName = $"{serverNodeRequest.Ipv4}:{serverNodeRequest.Port}";
  236. }
  237. if (existItems.Count() == 1)
  238. {
  239. serverName = existItems.FirstOrDefault().DisplayName;
  240. }
  241. else
  242. {
  243. serverName = existItems.FirstOrDefault(x => x.DisplayName != SonopostConstants.FlyinsonoServerName)?.DisplayName;
  244. }
  245. if (string.IsNullOrEmpty(serverName))
  246. {
  247. serverName = $"{serverNodeRequest.Ipv4}:{serverNodeRequest.Port}";
  248. }
  249. return Login(new ServerLoginRequest2
  250. {
  251. Ipv4 = serverNodeRequest.Ipv4,
  252. Port = serverNodeRequest.Port,
  253. ServerName = serverName,
  254. });
  255. }
  256. /// <summary>
  257. /// 修改物理唯一码
  258. /// </summary>
  259. /// <returns></returns>
  260. [WebApiAction]
  261. public Result ChangePhysicalUniqueId(PhysicalUniqueIdRequest physicalUniqueIdRequest)
  262. {
  263. try
  264. {
  265. if (physicalUniqueIdRequest == null || string.IsNullOrEmpty(physicalUniqueIdRequest.Id))
  266. {
  267. return Result.Fail("IdIsEmpty");
  268. }
  269. FISIMPL.FISIMPL.ChangeMachineId(physicalUniqueIdRequest.Id);
  270. return Result.Success();
  271. }
  272. catch (Exception ex)
  273. {
  274. Logger.WriteLineError($"ChangePhysicalUniqueId Error:{ex}");
  275. return Result.Fail();
  276. }
  277. }
  278. /// <summary>
  279. /// 读取云服务登录设置
  280. /// </summary>
  281. /// <returns></returns>
  282. [WebApiAction]
  283. public Result LoadVCloudLoginSetting()
  284. {
  285. try
  286. {
  287. return Result.Success(new VCloudLoginRequest { IsLoginWithAccountAndPassword = SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword });
  288. }
  289. catch (Exception ex)
  290. {
  291. Logger.WriteLineError($"Load VCloud Login Setting Error:{ex}");
  292. return Result.Fail();
  293. }
  294. }
  295. /// <summary>
  296. /// 保存云服务登录设置
  297. /// </summary>
  298. /// <returns></returns>
  299. [WebApiAction]
  300. public Result SaveVCloudLoginSetting(VCloudLoginRequest vCloudLoginRequest)
  301. {
  302. try
  303. {
  304. SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword = vCloudLoginRequest.IsLoginWithAccountAndPassword;
  305. ConfigManager.Save();
  306. return Result.Success();
  307. }
  308. catch (Exception ex)
  309. {
  310. Logger.WriteLineError($"Save VCloud Login Setting Error:{ex}");
  311. return Result.Fail();
  312. }
  313. }
  314. #region Private Methods
  315. private void UpdateAccount(string name, string password)
  316. {
  317. SonopostUserDefinedSettings.Instance.ServerSetting.UserName = DesBuilder.Encrypt(name);
  318. SonopostUserDefinedSettings.Instance.ServerSetting.UserPassword = DesBuilder.Encrypt(password);
  319. SonopostUserDefinedSettings.Instance.ServerSetting.IsAutoLogin = true;
  320. ConfigManager.Save();
  321. }
  322. #endregion Private Methods
  323. }
  324. }