| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- using LocalhostMES.Core;
- using LocalhostMES.DataBase;
- using LocalhostMES.Models;
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- using System;
- using System.Collections.Generic;
- using System.Configuration;
- using System.Net.Http;
- using System.Text;
- using System.Threading.Tasks;
- namespace LocalhostMES.Api.Services
- {
- /// <summary>
- /// 调用厂级 MOM/MES HTTP 接口;本地网关 URL 与云端 URL 均在此封装。
- /// </summary>
- public class MesApiClient : IDisposable
- {
- private readonly HttpClient _httpClient;
- private readonly string _baseUrl;
- private readonly string _appKey;
- private readonly string _token;
- private MesMomHttpEndpoints mesMom;
- public MesApiClient(string baseUrl, string appKey = "test-app-key", string token = "test-token-123")
- {
- _baseUrl = baseUrl?.TrimEnd('/') ?? "";
- _appKey = appKey;
- _token = token;
- _httpClient = new HttpClient
- {
- Timeout = TimeSpan.FromSeconds(60)
- };
- mesMom=new MesMomHttpEndpoints();
- mesMom.SetUrl();
- if ( ConfigurationManager.AppSettings[ "IsMesTest" ] == "1" )
- {
- mesMom.SetTest();
- }
-
- }
- #region 2.1 厂级MES下发工单信息
- public async Task<ApiResponse<bool>> SendWorkOrderAsync(WorkOrderRequest request)
- {
- var content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json");
- var response = await _httpClient.PostAsync($"{_baseUrl}/api/mes/receiveWorkOrder", content);
- return await ParseResponseAsync<ApiResponse<bool>>(response);
- }
- public async Task<ApiResponse<List<WorkOrderInfo>>> GetWorkOrdersAsync()
- {
- var response = await _httpClient.GetAsync($"{_baseUrl}/api/mes/getWorkOrders");
- return await ParseResponseAsync<ApiResponse<List<WorkOrderInfo>>>(response);
- }
- #endregion
- #region 2.2 SN打印请求
- public async Task<ApiResponse<SnPrintResponseData>> RequestSnPrintAsync(SnPrintRequest request)
- {
- var requestJson = JsonConvert.SerializeObject(request);
- var content = new StringContent(requestJson, Encoding.UTF8, "application/json");
- var requestMessage = new HttpRequestMessage(HttpMethod.Post, mesMom.BatterySnPrint)
- {
- Content = content
- };
- requestMessage.Headers.Add("app-key", _appKey);
- requestMessage.Headers.Add("token", _token);
- var response = await _httpClient.SendAsync(requestMessage);
- ApiResponse<SnPrintResponseData> res = await ParseResponseAsync<ApiResponse<SnPrintResponseData>>(response);
- var inSn = new List<SnInfo>();
- if (res.data != null)
- {
- for (int i = 0; i < res.data.Sn.Count; i++)
- {
- inSn.Add(new SnInfo
- {
- WorkOrderNo = res.data.WorkOrderNo,
- Sn = res.data.Sn[i].Sn,
- GenerateTime = DateTime.Now,
- IsUsed = false,
- PrintType = "0"
- });
- }
- }
- if (inSn.Count != 0)
- {
- if (DatabaseHelper.InsertSnInfos(inSn))
- {
- return res;
- }
- res.success = false;
- res.msg = "SN插入数据库错误";
- }
- return res;
- }
- public async Task<ApiResponse<List<SnInfo>>> GetSnsAsync(string workOrderNo)
- {
- var requestMessage = new HttpRequestMessage(HttpMethod.Get, $"{_baseUrl}/api/mes/getSns/{workOrderNo}");
- requestMessage.Headers.Add("app-key", _appKey);
- requestMessage.Headers.Add("token", _token);
- var response = await _httpClient.SendAsync(requestMessage);
- return await ParseResponseAsync<ApiResponse<List<SnInfo>>>(response);
- }
- #endregion
- #region 2.3 接收SN和关键件
- public async Task<ApiResponse<bool?>> SendSnComponentAsync(SnKeyComponentRequest request)
- {
- var requestJson = JsonConvert.SerializeObject(request);
- var content = new StringContent(requestJson, Encoding.UTF8, "application/json");
- var requestMessage = new HttpRequestMessage(HttpMethod.Post, mesMom.ReceiveSnKeyComponent)
- {
- Content = content
- };
- requestMessage.Headers.Add("app-key", _appKey);
- requestMessage.Headers.Add("token", _token);
- var response = await _httpClient.SendAsync(requestMessage);
- return await ParseResponseAsync<ApiResponse<bool?>>(response);
- }
- public async Task<ApiResponse<List<BindRecord>>> GetBindRecordsAsync()
- {
- var requestMessage = new HttpRequestMessage(HttpMethod.Get, $"{_baseUrl}/api/mes/getBindRecords");
- requestMessage.Headers.Add("app-key", _appKey);
- requestMessage.Headers.Add("token", _token);
- var response = await _httpClient.SendAsync(requestMessage);
- return await ParseResponseAsync<ApiResponse<List<BindRecord>>>(response);
- }
- #endregion
- #region 2.4 接收工件加工参数
- public async Task<ApiResponse<bool?>> SendProcessParametersAsync(ProcessParameterRequest request)
- {
- request.messageTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
- var requestJson = JsonConvert.SerializeObject(request);
- var content = new StringContent(requestJson, Encoding.UTF8, "application/json");
- LogHelper.WriteLogInfo(requestJson);
- var requestMessage = new HttpRequestMessage(HttpMethod.Post, mesMom.ManualSave)
- {
- Content = content
- };
- requestMessage.Headers.Add("app-key", _appKey);
- requestMessage.Headers.Add("token", _token);
- var response = await _httpClient.SendAsync(requestMessage);
- return await ParseResponseAsync<ApiResponse<bool?>>(response);
- }
- public async Task<ApiResponse<List<ProcessRecord>>> GetProcessRecordsAsync()
- {
- var requestMessage = new HttpRequestMessage(HttpMethod.Get, $"{_baseUrl}/api/mes/getProcessRecords");
- requestMessage.Headers.Add("app-key", _appKey);
- requestMessage.Headers.Add("token", _token);
- var response = await _httpClient.SendAsync(requestMessage);
- return await ParseResponseAsync<ApiResponse<List<ProcessRecord>>>(response);
- }
- #endregion
- private async Task<T> ParseResponseAsync<T>(HttpResponseMessage response) where T : class
- {
- if (response.IsSuccessStatusCode)
- {
- var json = await response.Content.ReadAsStringAsync();
- var jObject = JObject.Parse(json);
- LogHelper.WriteLogInfo(json);
- if (jObject.ContainsKey("data"))
- {
- if (jObject["data"].ToString() == "null" || jObject["data"].ToString().Length == 0)
- {
- jObject["data"] = "true";
- }
- }
- string newJsonString = jObject.ToString();
- return JsonConvert.DeserializeObject<T>(newJsonString);
- }
- var errorJson = await response.Content.ReadAsStringAsync();
- try
- {
- var jObject = JObject.Parse(errorJson);
- if (jObject.ContainsKey("data"))
- {
- if (jObject["data"].ToString() == "null" || jObject["data"].ToString().Length == 0)
- {
- jObject["data"] = "false";
- }
- }
- string newJsonString = jObject.ToString();
- return JsonConvert.DeserializeObject<T>(newJsonString);
- }
- catch
- {
- throw new HttpRequestException($"请求失败: {response.StatusCode}");
- }
- }
- public void Dispose()
- {
- _httpClient?.Dispose();
- GC.SuppressFinalize(this);
- }
- }
- }
|