using System.Net; using System.Text; using Microsoft.IdentityModel.Tokens; using WmsMobileServe.Annotation; using WmsMobileServe.Utils.HttpUtils; using WmsMobileServe.Utils.HttpUtils.Entity; namespace WmsMobileServe.ApiClient.Mes; /// /// 访问 Mes 的 api 客户端 /// [Component] public class MesApiClient : WebApiClient { public MesApiClient() { SetBaseUrl("http://10.50.220.1:8099"); SetResponseAction(ApiClientResponseEvent.ApiResponse); } /// /// 获取箱子信息 /// /// /// public ApiResponseInfo GetOutBoxInfo(string boxNo) { Dictionary request = []; request.Add("pSN", boxNo); return HttpGet(request, "/Camstar/PackStock.asmx/getOutBoxInf"); } private readonly HttpClient _httpClient; private readonly string _baseUrl; public MesApiClient(string baseUrl) { _baseUrl = baseUrl.TrimEnd('/'); _httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(30) }; } public async Task HttpGetAsync(Dictionary parameters, string apiPath) { var responseInfo = new ApiResponseInfo { RequestTime = DateTime.Now, RequestMethod = "GET" }; try { // 构建查询字符串 var queryString = new StringBuilder(); foreach (var param in parameters) { if (queryString.Length > 0) queryString.Append('&'); queryString.Append($"{WebUtility.UrlEncode(param.Key)}={WebUtility.UrlEncode(param.Value?.ToString() ?? "")}"); } // 构建完整URL var requestUrl = $"{_baseUrl}{apiPath}?{queryString}"; responseInfo.RequestUrl = requestUrl; responseInfo.RequestMsg = queryString.ToString(); // 发送请求 var response = await _httpClient.GetAsync(requestUrl); var responseContent = await response.Content.ReadAsStringAsync(); responseInfo.ResponseTime = DateTime.Now; responseInfo.ResponseMsg = responseContent; responseInfo.IsSend = response.IsSuccessStatusCode; responseInfo.UseTime = (responseInfo.ResponseTime - responseInfo.RequestTime).Value.TotalMilliseconds; if (!response.IsSuccessStatusCode) { responseInfo.Exception = new HttpRequestException($"HTTP请求失败,状态码: {response.StatusCode}"); } return responseInfo; } catch (Exception ex) { responseInfo.ResponseTime = DateTime.Now; responseInfo.IsSend = false; responseInfo.Exception = ex; responseInfo.UseTime = (responseInfo.ResponseTime - responseInfo.RequestTime).Value.TotalMilliseconds; return responseInfo; } } }