Files
MoviconHub/MoviconHub.App/Services/ApiService.cs

163 lines
5.8 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
{
/// <summary>
/// Api 服务类
/// </summary>
public class ApiService
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private readonly string _baseUrl;
private readonly RestClient _client;
/// <summary>
/// 实例化函数
/// </summary>
/// <param name="baseUrl"></param>
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)}";
}
/// <summary>
/// 获取部件信息
/// </summary>
/// <param name="partQrCodeId">二维码零件ID</param>
/// <param name="deviceCode">设备编码</param>
/// <returns>部件信息</returns>
public async Task<PartInfoResponse> 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<PartInfoResponse>(response.Content);
Logger.Info($"{Data.ToString()}");
return JsonConvert.DeserializeObject<PartInfoResponse>(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
};
}
}
/// <summary>
/// 获取测试数据
/// </summary>
/// <param name="partQrCodeId">二维码零件ID</param>
/// <param name="deviceCode">设备编码</param>
/// <returns>测试数据</returns>
public async Task<TestDataResponse> 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<TestDataResponse>(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
};
}
}
/// <summary>
/// 配置服务器地址和端口
/// </summary>
/// <param name="serverAddress">服务器地址</param>
/// <param name="port">端口号</param>
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}");
}
}
}