using MoviconHub.App.Models;
using Newtonsoft.Json;
using NLog;
using RestSharp;
using System;
using System.Configuration;
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
{
string resource = ConfigurationManager.AppSettings["ApiGetPartInfoPath"];
if (string.IsNullOrWhiteSpace(resource))
{
resource = "/mes/order/iotPartInfo/getPartInfo";
}
var request = new RestRequest(resource, 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}");
}
}
}