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<MessageCenter> GetErpParameters(List<MessageCenter> data)
|
{
|
var centers = new List<MessageCenter>();
|
|
//获取主请求
|
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<MessageCenter> data, WarehouseQuery query,
|
List<MessageCenter> 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<string> sendHttp(List<MessageCenter> 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<Result>(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; }
|
}
|