using MoviconHub.App.Models; using Newtonsoft.Json; using NLog; using RestSharp; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MoviconHub.App.Services { /// /// Api 服务类 /// public class ApiService { private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private readonly string _baseUrl; private readonly RestClient _client; /// /// 实例化函数 /// /// public ApiService(string baseUrl) { _baseUrl = baseUrl; _client = new RestClient(baseUrl); } private string GetFullRequestUrl(RestRequest request) { var resource = request.Resource; var queryParams = string.Join("&", request.Parameters .Where(p => p.Type == ParameterType.QueryString) .Select(p => $"{p.Name}={Uri.EscapeDataString(p.Value?.ToString() ?? "")}")); return $"{_baseUrl.TrimEnd('/')}/{resource.TrimStart('/')}{(string.IsNullOrEmpty(queryParams) ? "" : "?" + queryParams)}"; } /// /// 获取部件信息 /// /// 二维码零件ID /// 设备编码 /// 部件信息 public async Task GetPartInfoAsync(string partQrCodeId, string deviceCode) { try { var request = new RestRequest("/mes/order/iotPartInfo/getPartInfo", Method.Get); request.AddParameter("PartQRCodeId", partQrCodeId); //request.AddParameter("DeviceCode", deviceCode); var response = await _client.ExecuteAsync(request); if (response.IsSuccessful) { Logger.Info($"{response.Content}"); var Data = JsonConvert.DeserializeObject(response.Content); Logger.Info($"{Data.ToString()}"); return JsonConvert.DeserializeObject(response.Content); } else { Logger.Error($"获取部件信息失败:{response.ErrorMessage}, 状态码:{response.StatusCode}"); return new PartInfoResponse { Status = (int)response.StatusCode, Message = response.ErrorMessage, Data = null }; } } catch (Exception ex) { Logger.Error(ex, "获取部件信息时发生异常"); return new PartInfoResponse { Status = 500, Message = $"发生异常:{ex.Message}", Data = null }; } } /// /// 获取测试数据 /// /// 二维码零件ID /// 设备编码 /// 测试数据 public async Task GetTestDataAsync(string partQrCodeId, string deviceCode) { try { var request = new RestRequest("getTestdata", Method.Get); request.AddParameter("PartQRCodeId", partQrCodeId); request.AddParameter("DeviceCode", deviceCode); var response = await _client.ExecuteAsync(request); if (response.IsSuccessful) { return JsonConvert.DeserializeObject(response.Content); } else { Logger.Error($"获取测试数据失败:{response.ErrorMessage}, 状态码:{response.StatusCode}"); return new TestDataResponse { Status = (int)response.StatusCode, Message = response.ErrorMessage, Data = null }; } } catch (Exception ex) { Logger.Error(ex, "获取测试数据时发生异常"); return new TestDataResponse { Status = 500, Message = $"发生异常:{ex.Message}", Data = null }; } } /// /// 配置服务器地址和端口 /// /// 服务器地址 /// 端口号 public void ConfigureServerAddress(string serverAddress, int port) { string newBaseUrl = $"http://{serverAddress}:{port}/"; // 创建新的RestClient实例 var newClient = new RestClient(newBaseUrl); // 使用反射替换私有字段,因为RestClient实例不能直接修改BaseUrl var clientType = _client.GetType(); var baseUrlField = clientType.GetField("_baseUrl", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); if (baseUrlField != null) { baseUrlField.SetValue(_client, newBaseUrl); } Logger.Info($"服务器地址已更新为:{newBaseUrl}"); } } }