using System.Text; using System.Web; using MES.Service.Dto.service; using MES.Service.Modes; using MES.Service.service.Warehouse; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace MES.Service.service; public class GetErpParametersServer { private readonly MesInvItemInCDetailsManager _invItemInCDetailsServer = new(); private readonly MesInvItemOutsManager _invItemOutsServer = new(); private readonly MessageCenterManager _messageCenterServer = new(); private List GetErpParameters(List data) { var centers = new List(); //获取主请求 var center = data.Find(p => p.Seq == 1); //解析URL var queryString = center.PageName.Substring(center.PageName.IndexOf('?') + 1); //提取参数 var queryParameters = HttpUtility.ParseQueryString(queryString); var strings = center.TableName.Split("_"); var centerUpdateBy = center.UpdateBy; var centerUpdateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); MessageCenter mesToErp = null; var query = new WarehouseQuery(); switch (center.TableName) { //采购入库单审核 case "MES_INV_ITEM_INS_A": //采购入库单反审核 case "MES_INV_ITEM_INS_B": //获取到类型(审核还是反审核) query.Type = strings[^1]; //获取url中附带的参数 query.id = Convert.ToDecimal(queryParameters["id"]); query.billNo = queryParameters["billNo"]; query.userName = centerUpdateBy; //重新获取请求的数据 mesToErp = _invItemInCDetailsServer.MesToErpParam(query); //赋值主id mesToErp.Id = center.Id; mesToErp.UpdateBy = centerUpdateBy; mesToErp.UpdateDate = centerUpdateDate; centers.Add(mesToErp); //更新剩下的请求的参数 var messageCenter = data[0]; var json = new JObject { new JProperty("id", query.id), new JProperty("billNo", query.billNo), new JProperty("userName", query.userName) }; messageCenter.Data = json.ToString(); messageCenter.UpdateBy = centerUpdateBy; messageCenter.UpdateDate = centerUpdateDate; centers.Add(messageCenter); break; //采购退料单审核 case "MES_INV_ITEM_OUTS_A": //采购退料单反审核 case "MES_INV_ITEM_OUTS_B": //获取到类型(审核还是反审核) query.Type = strings[^1]; query.id = Convert.ToDecimal(queryParameters["id"]); query.billNo = queryParameters["itemOutNo"]; query.userName = centerUpdateBy; //重新获取请求的数据 mesToErp = _invItemOutsServer.MesToErpParam(query); //更正为主id mesToErp.Id = center.Id; mesToErp.UpdateBy = centerUpdateBy; mesToErp.UpdateDate = centerUpdateDate; //添加到请求集合中 centers.Add(mesToErp); //获取剩余的请求 PostRequest(data, query, centers, centerUpdateDate); break; //生产领料单 case "INV_ITEM_OUTS_A": //获取到类型(审核还是反审核) query.Type = strings[^1]; query.id = Convert.ToDecimal(queryParameters["id"]); query.billNo = queryParameters["itemOutNo"]; query.userName = centerUpdateBy; //重新获取请求的数据 mesToErp = _invItemOutsServer.ProductionMesToErpParam(query); //更正为主id mesToErp.Id = center.Id; mesToErp.UpdateBy = centerUpdateBy; mesToErp.UpdateDate = centerUpdateDate; //添加到请求集合中 centers.Add(mesToErp); //获取剩余的请求 PostRequest(data, query, centers, centerUpdateDate); break; default: throw new Exception("无法识别TableName类型"); } //根据顺序返回 return centers.OrderBy(p => p.Seq).ToList(); } private void PostRequest(List data, WarehouseQuery query, List centers, string centerUpdateDate) { var find = data.FindAll(s => s.Seq != 1); var result = new JObject { new JProperty("id", query.id), new JProperty("billNo", query.billNo), new JProperty("userName", query.userName) }; find.ForEach(s => { s.Data = result.ToString(); s.UpdateBy = query.userName; s.UpdateDate = centerUpdateDate; centers.Add(s); }); } public string Resend(MessageCenter data) { //获取所有的回调 var messageCenters = _messageCenterServer.GetList(it => it.Pid == data.Id); messageCenters.Add(data); var erpParameters = GetErpParameters(messageCenters); return sendHttp(erpParameters).Result; } private async Task sendHttp(List requestList) { var sortedRequests = requestList.OrderBy(r => r.Seq).ToList(); using var httpClient = new HttpClient(); var responses = ""; foreach (var request in sortedRequests) { var httpRequestMessage = new HttpRequestMessage { Method = new HttpMethod(request.Method), RequestUri = new Uri(request.Url), Content = new StringContent(request.Data, Encoding.UTF8, request.ContentType) }; var response = await httpClient.SendAsync(httpRequestMessage); var responseData = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject(responseData); responses += result.msg + "!!!"; responses += result.message + "!!!"; if ("500".Equals(result.state)) { responses = "返回报错:" + responses; return responses; } if ("1".Equals(result.status)) { responses = "返回报错:" + responses; return responses; } request.Result = 1; request.ResultData = result.msg; request.Status = 1; request.DealWith = 1; _messageCenterServer.ResetUpdate(request); } responses = "重推成功:" + responses; return responses; } } public class Result { public string? state { get; set; } public string? msg { get; set; } public string? status { get; set; } public string? message { get; set; } }