163 lines
5.8 KiB
C#
163 lines
5.8 KiB
C#
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}");
|
||
}
|
||
}
|
||
}
|