VistarStarDataIntegration/admin.net.pro/Admin.NET/Vistar.Application/SapService/SapService.cs

1184 lines
53 KiB
C#

// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Admin.NET.Core;
using Admin.NET.Core.Service;
using DocumentFormat.OpenXml.ExtendedProperties;
using DocumentFormat.OpenXml.Spreadsheet;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using MailKit;
using OnceMi.AspNetCore.OSS;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using Vistar.Application.SapService.Dto;
using Vistar.Application.Util;
using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinExpressIntracityUpdateStoreRequest.Types;
namespace Vistar.Application.SapService;
public class SapService : IDynamicApiController, ITransient
{
private readonly SysConfigService _sysConfigService;
public SapService(SysConfigService sysConfigService)
{
_sysConfigService = sysConfigService;
}
/// <summary>
/// SAP同步物料
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<SapOutput> SapMaterialApi(SapMaterialInput input)
{
// 创建SOAP XML请求
var soapEnvelope = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement(XName.Get("Envelope", "http://schemas.xmlsoap.org/soap/envelope/"),
new XElement(XName.Get("Header", "http://schemas.xmlsoap.org/soap/envelope/")),
new XElement(XName.Get("Body", "http://schemas.xmlsoap.org/soap/envelope/"),
new XElement(XName.Get("Zmmfm012", "urn:sap-com:document:sap:soap:functions:mc-style"),
new XElement("IsReq",
new XElement("Reqkeyid", input.Reqkeyid),
new XElement("Businessid", input.Businessid),
new XElement("Messageid", input.Messageid),
new XElement("Sndprn", input.Sndprn),
new XElement("Rcvprn", input.Rcvprn),
new XElement("Requser", input.Requser),
new XElement("Note1", input.Note1),
new XElement("Note2", input.Note2),
new XElement("Note3", input.Note3)
),
new XElement("ItData",
new XElement("item",
new XElement("Zwbid", input.Zwbid),
new XElement("Matnr", input.Matnr),
new XElement("Mbrsh", input.Mbrsh),
new XElement("Mtart", input.Mtart),
new XElement("Maktx", input.Maktx),
new XElement("Meins", input.Meins),
new XElement("Matkl", input.Matkl),
new XElement("Bismt", input.Bismt),
new XElement("Groes", input.Groes),
new XElement("Normt", input.Normt),
new XElement("Ferth", input.Ferth),
new XElement("Zeinr", input.Zeinr),
new XElement("Mstae", input.Mstae),
new XElement("Raube", input.Raube),
new XElement("Mhdrz", input.Mhdrz),
new XElement("Mhdhb", input.Mhdhb),
new XElement("PlantView",
new XElement("item",
new XElement("Werks", input.Werks),
new XElement("Beskz", input.Beskz),
new XElement("Sobsl", input.Sobsl),
new XElement("Schgt", input.Schgt),
new XElement("Rgekz", input.Rgekz),
new XElement("Zbom", input.Zbom)
)
)
)
)
)
)
)
);
var httpClientHandler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true,
ClientCertificateOptions = ClientCertificateOption.Manual
};
try
{
using (var httpClient = new HttpClient(httpClientHandler))
{
// 设置基本身份验证信息
var username = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapUserName);
var password = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapPassword);
var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);
// 将 XML 内容转换为字符串并设置请求内容类型为 text/xml
var content = new StringContent(soapEnvelope.ToString(), Encoding.UTF8, "text/xml");
content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
httpClient.DefaultRequestHeaders.Add("Accept-Language", "zh");
// 设置 SAP Web 服务的 URL
var url = "https://vhjqeps4ci.sap.vistar-eq.com:44300/sap/bc/srt/rfc/sap/zmmfm012/100/zmmfm012/zmmfm012";
// 发起 POST 请求到 SAP Web 服务
var response = await httpClient.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadAsStringAsync();
XDocument doc = XDocument.Parse(result);
var item = doc.Descendants("item").FirstOrDefault();
var zwbid = item?.Element("Zwbid")?.Value;
var matnr = item?.Element("Matnr")?.Value;
var code = item?.Element("Code")?.Value;
var msg = item?.Element("Msg")?.Value;
var output = new SapOutput()
{
parameter = soapEnvelope.ToString(),
code = code,
msg = msg,
result = result
};
return output;
}
else
{
var result = await response.Content.ReadAsStringAsync();
var output = new SapOutput()
{
parameter = soapEnvelope.ToString(),
code = "失败",
msg = "调用失败,状态码:" + response.StatusCode,
result = result
};
return output;
}
}
}
catch (Exception ex)
{
var output = new SapOutput()
{
code = "失败",
msg = "发生错误" + ex.Message,
result = "发生错误" + ex
};
return output;
}
}
/// <summary>
/// SAP同步BOM
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<SapOutput> SapBomApi(IS_REQ input)
{
// 创建SOAP XML请求
var soapEnvelope = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement(XName.Get("Envelope", "http://schemas.xmlsoap.org/soap/envelope/"),
new XElement(XName.Get("Header", "http://schemas.xmlsoap.org/soap/envelope/")),
new XElement(XName.Get("Body", "http://schemas.xmlsoap.org/soap/envelope/"),
new XElement(XName.Get("ZPPFM001", "urn:sap-com:document:sap:rfc:functions"),
new XElement("IS_REQ",
new XElement("REQKEYID", input.ReqKeyId),
new XElement("BUSINESSID", input.BusinessId),
new XElement("MESSAGEID", input.MessageId),
new XElement("SNDPRN", input.SndPrn),
new XElement("RCVPRN", input.RcvPrn),
new XElement("REQUSER", input.ReqUser),
new XElement("NOTE1", input.Note1),
new XElement("NOTE2", input.Note2),
new XElement("NOTE3", input.Note3)
),
new XElement("IT_DATA",
new XElement("item",
new XElement("ZWBID", input.Zwbid),
new XElement("MATNR", input.Matnr),
new XElement("WERKS", input.Werks),
new XElement("BMENG", input.Bmeng),
new XElement("AENNR", input.Aennr),
new XElement("DATUV", input.Datuv),
new XElement("ITEM",
// 使用循环生成 <item> 元素
GenerateItemElements(input.ItemList)
)
)
)
)
)
)
);
var httpClientHandler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true,
ClientCertificateOptions = ClientCertificateOption.Manual
};
try
{
using (var httpClient = new HttpClient(httpClientHandler))
{
// 设置基本身份验证信息
var username = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapUserName);
var password = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapPassword);
var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);
// 将 XML 内容转换为字符串并设置请求内容类型为 text/xml
var content = new StringContent(soapEnvelope.ToString(), Encoding.UTF8, "text/xml");
content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
httpClient.DefaultRequestHeaders.Add("Accept-Language", "zh");
// 设置 SAP Web 服务的 URL
var url = "https://vhjqeps4ci.sap.vistar-eq.com:44300/sap/bc/srt/rfc/sap/zppfm001/100/zppfm001/zppfm001";
// 发起 POST 请求到 SAP Web 服务
var response = await httpClient.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadAsStringAsync();
XDocument doc = XDocument.Parse(result);
var item = doc.Descendants("item").FirstOrDefault();
var code = item?.Element("CODE")?.Value;
var msg = item?.Element("MSG")?.Value;
if (item == null)
{
var ES_RETItem = doc.Descendants("ES_RET").FirstOrDefault();
var ES_RETcode = ES_RETItem?.Element("CODE")?.Value;
var ES_RETmsg = ES_RETItem?.Element("MSG")?.Value;
var outputES_RET = new SapOutput()
{
parameter = soapEnvelope.ToString(),
code = ES_RETcode,
msg = ES_RETmsg,
result = result
};
return outputES_RET;
}
var output = new SapOutput()
{
parameter = soapEnvelope.ToString(),
code = code,
msg = msg,
result = result
};
return output;
}
else
{
var result = await response.Content.ReadAsStringAsync();
var output = new SapOutput()
{
parameter = soapEnvelope.ToString(),
code = "失败",
msg = "调用失败,状态码: " + response.StatusCode,
result = result
};
return output;
}
}
}
catch (Exception ex)
{
// 记录错误日志
Console.WriteLine("发生错误: " + ex.Message);
var output = new SapOutput()
{
code = "失败",
msg = "发生错误" + ex.Message,
result = "发生错误" + ex
};
return output;
}
}
/// <summary>
/// 生成 item 元素
/// </summary>
/// <param name="items"></param>
/// <returns></returns>
public List<XElement> GenerateItemElements(List<ItemData> items)
{
var itemElements = new List<XElement>();
foreach (var item in items)
{
var element = new XElement("item",
new XElement("POSNR", item.POSNR),
new XElement("IDNRK", item.IDNRK),
new XElement("MENGE", item.MENGE),
new XElement("SORTF", item.SORTF),
new XElement("ITSOB", item.ITISOB),
new XElement("ALPGR", item.ALPGR),
new XElement("ALPRF", item.ALPRF),
new XElement("ZDELETE", item.ZDELETE),
new XElement("POSTP", item.POSTP),
new XElement("ZYFMK", item.ZYFMK)
);
itemElements.Add(element);
}
return itemElements;
}
/// <summary>
/// 生成 EcnItem 元素
/// </summary>
/// <param name="items"></param>
/// <returns></returns>
public List<XElement> EcnItem(List<EcnItemData> items)
{
var itemElements = new List<XElement>();
foreach (var item in items)
{
var element = new XElement("item",
new XElement("Matnr", item.Matnr)
);
itemElements.Add(element);
}
return itemElements;
}
/// <summary>
/// SAP同步ECN
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<SapOutput> SapEcnApi(SapEcnInput input)
{
var soapEnvelope = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement(XName.Get("Envelope", "http://schemas.xmlsoap.org/soap/envelope/"),
new XElement(XName.Get("Header", "http://schemas.xmlsoap.org/soap/envelope/")),
new XElement(XName.Get("Body", "http://schemas.xmlsoap.org/soap/envelope/"),
new XElement(XName.Get("Zppfm003", "urn:sap-com:document:sap:soap:functions:mc-style"),
new XElement("IsReq",
new XElement("Reqkeyid", input.Reqkeyid),
new XElement("Businessid", input.Businessid),
new XElement("Messageid", input.Messageid),
new XElement("Sndprn", input.Sndprn),
new XElement("Rcvprn", input.Rcvprn),
new XElement("Requser", input.Requser),
new XElement("Note1", input.Note1),
new XElement("Note2", input.Note2),
new XElement("Note3", input.Note3)
),
new XElement("ItData",
new XElement("item",
new XElement("Aennr", input.Aennr),
new XElement("Aetxt", input.Aetxt),
new XElement("Datuv", input.Datuv),
new XElement("Lvorm", input.Lvorm),
new XElement("Item",
EcnItem(input.ItemList)
)
)
)
)
)
)
);
var httpClientHandler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true,
ClientCertificateOptions = ClientCertificateOption.Manual
};
try
{
using (var httpClient = new HttpClient(httpClientHandler))
{
// 设置基本身份验证信息
var username = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapUserName);
var password = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapPassword);
var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);
// 将 XML 内容转换为字符串并设置请求内容类型为 text/xml
var content = new StringContent(soapEnvelope.ToString(), Encoding.UTF8, "text/xml");
content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
httpClient.DefaultRequestHeaders.Add("Accept-Language", "zh");
// 设置 SAP Web 服务的 URL
var url = "https://vhjqeps4ci.sap.vistar-eq.com:44300/sap/bc/srt/rfc/sap/zppfm003/100/zppfm003/zppfm003";
// 发起 POST 请求到 SAP Web 服务
var response = await httpClient.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadAsStringAsync();
XDocument doc = XDocument.Parse(result);
var item = doc.Descendants("item").FirstOrDefault();
var zwbid = item?.Element("Zwbid")?.Value;
var matnr = item?.Element("Matnr")?.Value;
var code = item?.Element("Code")?.Value;
var msg = item?.Element("Msg")?.Value;
var output = new SapOutput()
{
parameter = soapEnvelope.ToString(),
code = code,
msg = msg,
result = result
};
return output;
}
else
{
var result = await response.Content.ReadAsStringAsync();
var output = new SapOutput()
{
parameter = soapEnvelope.ToString(),
code = "失败",
msg = "调用失败,状态码:" + response.StatusCode,
result = result
};
return output;
}
}
}
catch (Exception ex)
{
var output = new SapOutput()
{
code = "失败",
msg = "发生错误" + ex.Message,
result = "发生错误" + ex
};
return output;
}
}
/// <summary>
/// SAP同步工艺路线
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<SapOutput> SapProcessRouteApi(SapProcessRouteIS_REQ input)
{
// 创建SOAP XML请求
var soapEnvelope = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement(XName.Get("Envelope", "http://schemas.xmlsoap.org/soap/envelope/"),
new XElement(XName.Get("Header", "http://schemas.xmlsoap.org/soap/envelope/")),
new XElement(XName.Get("Body", "http://schemas.xmlsoap.org/soap/envelope/"),
new XElement(XName.Get("ZPPFM004", "urn:sap-com:document:sap:rfc:functions"),
new XElement("IS_REQ",
new XElement("REQKEYID", input.ReqKeyId),
new XElement("BUSINESSID", input.BusinessId),
new XElement("MESSAGEID", input.MessageId),
new XElement("SNDPRN", input.SndPrn),
new XElement("RCVPRN", input.RcvPrn),
new XElement("REQUSER", input.ReqUser),
new XElement("NOTE1", input.Note1),
new XElement("NOTE2", input.Note2),
new XElement("NOTE3", input.Note3)
),
new XElement("IT_DATA",
new XElement("item",
new XElement("ZWBID", input.Zwbid),
new XElement("MATNR", input.Matnr),
new XElement("WERKS", input.Werks),
new XElement("DATUV", input.Datuv),
new XElement("PLNAL", input.Plnal),
new XElement("ITEM",
// 使用循环生成 <item> 元素
ProcessRouteGenerateItemElements(input.ItemList)
)
)
)
)
)
)
);
var httpClientHandler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true,
ClientCertificateOptions = ClientCertificateOption.Manual
};
try
{
using (var httpClient = new HttpClient(httpClientHandler))
{
// 设置基本身份验证信息
var username = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapUserName);
var password = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapPassword);
var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);
// 将 XML 内容转换为字符串并设置请求内容类型为 text/xml
var content = new StringContent(soapEnvelope.ToString(), Encoding.UTF8, "text/xml");
content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
httpClient.DefaultRequestHeaders.Add("Accept-Language", "zh");
// 设置 SAP Web 服务的 URL
var url = "https://vhjqeps4ci.sap.vistar-eq.com:44300/sap/bc/srt/rfc/sap/zppfm004/100/zppfm004/zppfm004";
// 发起 POST 请求到 SAP Web 服务
var response = await httpClient.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadAsStringAsync();
XDocument doc = XDocument.Parse(result);
var item = doc.Descendants("item").FirstOrDefault();
var code = item?.Element("CODE")?.Value;
var msg = item?.Element("MSG")?.Value;
if (item == null)
{
var ES_RETItem = doc.Descendants("ES_RET").FirstOrDefault();
var ES_RETcode = ES_RETItem?.Element("CODE")?.Value;
var ES_RETmsg = ES_RETItem?.Element("MSG")?.Value;
var outputES_RET = new SapOutput()
{
parameter = soapEnvelope.ToString(),
code = ES_RETcode,
msg = ES_RETmsg,
result = result
};
return outputES_RET;
}
var output = new SapOutput()
{
parameter = soapEnvelope.ToString(),
code = code,
msg = msg,
result = result
};
return output;
}
else
{
var result = await response.Content.ReadAsStringAsync();
var output = new SapOutput()
{
parameter = soapEnvelope.ToString(),
code = "失败",
msg = "调用失败,状态码: " + response.StatusCode,
result = result
};
return output;
}
}
}
catch (Exception ex)
{
// 记录错误日志
Console.WriteLine("发生错误: " + ex.Message);
var output = new SapOutput()
{
code = "失败",
msg = "发生错误" + ex.Message,
result = "发生错误" + ex
};
return output;
}
}
/// <summary>
/// 生成工艺路线 item 元素
/// </summary>
/// <param name="items"></param>
/// <returns></returns>
public List<XElement> ProcessRouteGenerateItemElements(List<SapProcessRouteItemData> items)
{
var itemElements = new List<XElement>();
foreach (var item in items)
{
var element = new XElement("item",
new XElement("VORNR", item.VORNR),
new XElement("LTXA1", item.LTXA1),
new XElement("ARBPL", item.ARBPL),
new XElement("VGW01", item.VGW01),
new XElement("VGE01", item.VGE01),
new XElement("STEUS", item.STEUS),
new XElement("BMSCH", item.BMSCH)
);
itemElements.Add(element);
}
return itemElements;
}
/// <summary>
/// SAP采购申请创建修改
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<SapOutput> SapPurchasingRequisitionApi(SapPurchasingRequisitionInput input)
{
// 创建SOAP XML请求
var soapEnvelope = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement(XName.Get("Envelope", "http://schemas.xmlsoap.org/soap/envelope/"),
new XElement(XName.Get("Header", "http://schemas.xmlsoap.org/soap/envelope/")),
new XElement(XName.Get("Body", "http://schemas.xmlsoap.org/soap/envelope/"),
new XElement(XName.Get("Zmmfm013", "urn:sap-com:document:sap:soap:functions:mc-style"),
new XElement("IsReq",
new XElement("Reqkeyid", input.Reqkeyid),
new XElement("Businessid", input.Businessid),
new XElement("Messageid", input.Messageid),
new XElement("Sndprn", input.Sndprn),
new XElement("Rcvprn", input.Rcvprn),
new XElement("Requser", input.Requser),
new XElement("Note1", input.Note1),
new XElement("Note2", input.Note2),
new XElement("Note3", input.Note3)
),
new XElement("ItData",
new XElement("item",
new XElement("Zwbid", input.Zwbid),
new XElement("Banfn", input.Banfn),
new XElement("Bsart", input.Bsart),
new XElement("Zoperate", input.Zoperate),
new XElement("Zttby1", input.Zttby1),
new XElement("Zttby2", input.Zttby2),
new XElement("Zttby3", input.Zttby3),
new XElement("Item",
// 使用循环生成 <item> 元素
PurchasingRequisitionItem(input.Item)
)
)
)
)
)
)
);
var httpClientHandler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true,
ClientCertificateOptions = ClientCertificateOption.Manual
};
try
{
using (var httpClient = new HttpClient(httpClientHandler))
{
// 设置基本身份验证信息
var username = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapUserName);
var password = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapPassword);
var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);
// 将 XML 内容转换为字符串并设置请求内容类型为 text/xml
var content = new StringContent(soapEnvelope.ToString(), Encoding.UTF8, "text/xml");
content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
httpClient.DefaultRequestHeaders.Add("Accept-Language", "zh");
// 设置 SAP Web 服务的 URL
var url = "https://vhjqeps4ci.sap.vistar-eq.com:44300/sap/bc/srt/rfc/sap/zmmfm013/100/zmmfm013/zmmfm013";
// 发起 POST 请求到 SAP Web 服务
var response = await httpClient.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadAsStringAsync();
XDocument doc = XDocument.Parse(result);
var item = doc.Descendants("item").FirstOrDefault();
var code = item?.Element("Code")?.Value;
var msg = item?.Element("Msg")?.Value;
var EtRetinfo = doc.Descendants("EtRetinfo").FirstOrDefault();
var EtRetinfoItem = EtRetinfo.Descendants("item").FirstOrDefault();
var Banfn = EtRetinfoItem?.Element("Banfn")?.Value;
var EtRetinfoMsg = EtRetinfoItem?.Element("Msg")?.Value;
if (item == null)
{
var ES_RETItem = doc.Descendants("ES_RET").FirstOrDefault();
var ES_RETcode = ES_RETItem?.Element("CODE")?.Value;
var ES_RETmsg = ES_RETItem?.Element("MSG")?.Value;
var outputES_RET = new SapOutput()
{
parameter = soapEnvelope.ToString(),
code = ES_RETcode,
msg = ES_RETmsg,
result = result
};
return outputES_RET;
}
var output = new SapOutput()
{
parameter = soapEnvelope.ToString(),
code = code,
msg = msg,
result = result,
banfn = Banfn
};
return output;
}
else
{
var result = await response.Content.ReadAsStringAsync();
var output = new SapOutput()
{
parameter = soapEnvelope.ToString(),
code = "失败",
msg = "调用失败,状态码: " + response.StatusCode,
result = result
};
return output;
}
}
}
catch (Exception ex)
{
// 记录错误日志
Console.WriteLine("发生错误: " + ex.Message);
var output = new SapOutput()
{
code = "失败",
msg = "发生错误" + ex.Message,
result = "发生错误" + ex
};
return output;
}
}
/// <summary>
/// 生成采购申请 item 元素
/// </summary>
/// <param name="items"></param>
/// <returns></returns>
public List<XElement> PurchasingRequisitionItem(List<SapPurchasingRequisitionItem> items)
{
var itemElements = new List<XElement>();
foreach (var item in items)
{
var element = new XElement("item",
new XElement("Bnfpo", item.Bnfpo),
new XElement("Zzjjbs", item.Zzjjbs),
new XElement("Knttp", item.Knttp),
new XElement("Pstyp", item.Pstyp),
new XElement("Matnr", item.Matnr),
new XElement("Txz01", item.Txz01),
new XElement("Menge", item.Menge),
new XElement("Meins", item.Meins),
new XElement("Lfdat", item.Lfdat),
new XElement("Matkl", item.Matkl),
new XElement("Werks", item.Werks),
new XElement("Lgort", item.Lgort),
new XElement("Ekgrp", item.Ekgrp),
new XElement("Ekorg", item.Ekorg),
new XElement("Zzpspnr", item.Zzpspnr),
new XElement("Afnam", item.Afnam),
new XElement("Loekz", item.Loekz)
);
itemElements.Add(element);
}
return itemElements;
}
/// <summary>
/// SAP Ecn查询服务
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<SapEcnQueryOutput> SapEcnQueryApi(SapEcnQueryInput input)
{
// 创建SOAP XML请求
var soapEnvelope = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement(XName.Get("Envelope", "http://schemas.xmlsoap.org/soap/envelope/"),
new XElement(XName.Get("Header", "http://schemas.xmlsoap.org/soap/envelope/")),
new XElement(XName.Get("Body", "http://schemas.xmlsoap.org/soap/envelope/"),
new XElement(XName.Get("Zppfm005", "urn:sap-com:document:sap:soap:functions:mc-style"),
new XElement("IsInput",
new XElement("ItMatnr",
new XElement("item",
new XElement("Sign", input.Sign),
new XElement("Option", input.Option),
new XElement("Low", input.Low),
new XElement("High", input.High)
)
)
),
new XElement("IsReq",
new XElement("Reqkeyid", input.Reqkeyid),
new XElement("Businessid", input.Businessid),
new XElement("Messageid", input.Messageid),
new XElement("Sndprn", input.Sndprn),
new XElement("Rcvprn", input.Rcvprn),
new XElement("Requser", input.Requser),
new XElement("Note1", input.Note1),
new XElement("Note2", input.Note2),
new XElement("Note3", input.Note3)
)
)
)
)
);
var httpClientHandler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true,
ClientCertificateOptions = ClientCertificateOption.Manual
};
try
{
using (var httpClient = new HttpClient(httpClientHandler))
{
// 设置基本身份验证信息
var username = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapUserName);
var password = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapPassword);
var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);
// 将 XML 内容转换为字符串并设置请求内容类型为 text/xml
var content = new StringContent(soapEnvelope.ToString(), Encoding.UTF8, "text/xml");
content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
httpClient.DefaultRequestHeaders.Add("Accept-Language", "zh");
// 设置 SAP Web 服务的 URL
var url = "https://vhjqeps4ci.sap.vistar-eq.com:44300/sap/bc/srt/rfc/sap/zppfm005/100/zppfm005/zppfm005";
// 发起 POST 请求到 SAP Web 服务
var response = await httpClient.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadAsStringAsync();
XDocument doc = XDocument.Parse(result);
var esRet = doc.Descendants("EsRet").FirstOrDefault();
var code = esRet?.Element("Code")?.Value;
var item = doc.Descendants("item").FirstOrDefault();
var matnr = item?.Element("Matnr")?.Value;
var werks = item?.Element("Werks")?.Value;
var bdmng = item?.Element("Bdmng")?.Value;
var labst = item?.Element("Labst")?.Value;
var zwqslPr = item?.Element("ZwqslPr")?.Value;
var zwqslPo = item?.Element("ZwqslPo")?.Value;
var meins = item?.Element("Meins")?.Value;
var output = new SapEcnQueryOutput()
{
Parameter = soapEnvelope.ToString(),
Code = code,
Matnr = matnr,
Werks = werks,
Bdmng = bdmng,
Labst = labst,
ZwqslPr = zwqslPr,
ZwqslPo = zwqslPo,
Meins = meins,
Result = result
};
return output;
}
else
{
var result = await response.Content.ReadAsStringAsync();
var output = new SapEcnQueryOutput()
{
Parameter = soapEnvelope.ToString(),
Code = "失败",
Result = result
};
return output;
}
}
}
catch (Exception ex)
{
// 记录错误日志
Console.WriteLine("发生错误: " + ex.Message);
var output = new SapEcnQueryOutput()
{
Code = "失败",
Result = "发生错误" + ex
};
return output;
}
}
/// <summary>
/// 项目WBS创建
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<SapOutput> SapCreateWBS(SapCreateWBSInput input)
{
var itemElements = new List<XElement>();
foreach (var item in input.SapCreateWBSItem)
{
var element = new XElement("item",
new XElement("Zwbid", item.Zwbid),
new XElement("Pspid", item.Pspid),
new XElement("Pspnr", item.Pspnr),
new XElement("Pspnr2", item.Pspnr2),
new XElement("Post1", item.Post1),
new XElement("Pstrt", item.Pstrt),
new XElement("Pende", item.Pende),
new XElement("Istrt", item.Istrt),
new XElement("Iende", item.Iende),
new XElement("Usr00", item.Usr00),
new XElement("Prart", item.Prart),
new XElement("Zresv1", item.Zresv1),
new XElement("Zresv2", item.Zresv2),
new XElement("Zresv3", item.Zresv3),
new XElement("Zresv4", item.Zresv4),
new XElement("Zresv5", item.Zresv5)
);
itemElements.Add(element);
}
// 创建SOAP XML请求
var soapEnvelope = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement(XName.Get("Envelope", "http://schemas.xmlsoap.org/soap/envelope/"),
new XElement(XName.Get("Header", "http://schemas.xmlsoap.org/soap/envelope/")),
new XElement(XName.Get("Body", "http://schemas.xmlsoap.org/soap/envelope/"),
new XElement(XName.Get("Zpsfm005", "urn:sap-com:document:sap:soap:functions:mc-style"),
new XElement("IsReq",
new XElement("Reqkeyid", input.ReqKeyId),
new XElement("Businessid", input.BusinessId),
new XElement("Messageid", input.MessageId),
new XElement("Sndprn", input.SndPrn),
new XElement("Rcvprn", input.RcvPrn),
new XElement("Requser", input.ReqUser),
new XElement("Note1", input.Note1),
new XElement("Note2", input.Note2),
new XElement("Note3", input.Note3)
),
new XElement("ItInput",
itemElements
)
)
)
)
);
var httpClientHandler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true,
ClientCertificateOptions = ClientCertificateOption.Manual
};
try
{
using (var httpClient = new HttpClient(httpClientHandler))
{
// 设置基本身份验证信息
var username = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapUserName);
var password = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapPassword);
var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);
// 将 XML 内容转换为字符串并设置请求内容类型为 text/xml
var content = new StringContent(soapEnvelope.ToString(), Encoding.UTF8, "text/xml");
content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
httpClient.DefaultRequestHeaders.Add("Accept-Language", "zh");
// 设置 SAP Web 服务的 URL
var url = "https://vhjqeps4ci.sap.vistar-eq.com:44300/sap/bc/srt/rfc/sap/zpsfm005/100/zpsfm005/zpsfm005";
// 发起 POST 请求到 SAP Web 服务
var response = await httpClient.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadAsStringAsync();
XDocument doc = XDocument.Parse(result);
var esRet = doc.Descendants("EsRet").FirstOrDefault();
var code = esRet?.Element("Code")?.Value;
var msg = esRet?.Element("Msg")?.Value;
//if (esRet == null)
//{
// var ES_RETItem = doc.Descendants("ES_RET").FirstOrDefault();
// var ES_RETcode = ES_RETItem?.Element("CODE")?.Value;
// var ES_RETmsg = ES_RETItem?.Element("MSG")?.Value;
// var outputES_RET = new SapOutput()
// {
// parameter = soapEnvelope.ToString(),
// code = ES_RETcode,
// msg = ES_RETmsg,
// result = result
// };
// return outputES_RET;
//}
var output = new SapOutput()
{
parameter = soapEnvelope.ToString(),
code = code,
msg = msg,
result = result
};
return output;
}
else
{
var result = await response.Content.ReadAsStringAsync();
var output = new SapOutput()
{
parameter = soapEnvelope.ToString(),
code = "失败",
msg = "调用失败,状态码: " + response.StatusCode,
result = result
};
return output;
}
}
}
catch (Exception ex)
{
// 记录错误日志
Console.WriteLine("发生错误: " + ex.Message);
var output = new SapOutput()
{
code = "失败",
msg = "发生错误" + ex.Message,
result = "发生错误" + ex
};
return output;
}
}
public async Task<SapOutput> SapUpdateWBS(SapUpdateWBSInput input)
{
var itemElements = new List<XElement>();
foreach (var item in input.SapUpdateWBSItem)
{
var element = new XElement("item",
new XElement("Zwbid",item.Zwbid),
new XElement("Pspid",item.Pspid),
new XElement("Post1Proj",item.Post1Proj),
new XElement("Pspnr",item.Pspnr),
new XElement("Post1",item.Post1),
new XElement("Pstrt",item.Pstrt),
new XElement("Pende",item.Pende),
new XElement("Istrt",item.Istrt),
new XElement("Iende",item.Iende),
new XElement("Usr00",item.Usr00),
new XElement("Prart",item.Prart),
new XElement("SystemStatus",item.SystemStatus),
new XElement("SystemStatus2",item.SystemStatus2),
new XElement("Zresv1",item.Zresv1),
new XElement("Zresv2",item.Zresv2),
new XElement("Zresv3",item.Zresv3),
new XElement("Zresv4",item.Zresv4),
new XElement("Zresv5",item.Zresv5)
);
itemElements.Add(element);
}
// 创建SOAP XML请求
var soapEnvelope = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement(XName.Get("Envelope", "http://schemas.xmlsoap.org/soap/envelope/"),
new XElement(XName.Get("Header", "http://schemas.xmlsoap.org/soap/envelope/")),
new XElement(XName.Get("Body", "http://schemas.xmlsoap.org/soap/envelope/"),
new XElement(XName.Get("Zpsfm006", "urn:sap-com:document:sap:soap:functions:mc-style"),
new XElement("IsReq",
new XElement("Reqkeyid", input.ReqKeyId),
new XElement("Businessid", input.BusinessId),
new XElement("Messageid", input.MessageId),
new XElement("Sndprn", input.SndPrn),
new XElement("Rcvprn", input.RcvPrn),
new XElement("Requser", input.ReqUser),
new XElement("Note1", input.Note1),
new XElement("Note2", input.Note2),
new XElement("Note3", input.Note3)
),
new XElement("ItInput",
itemElements
)
)
)
)
);
var httpClientHandler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true,
ClientCertificateOptions = ClientCertificateOption.Manual
};
try
{
using (var httpClient = new HttpClient(httpClientHandler))
{
// 设置基本身份验证信息
var username = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapUserName);
var password = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapPassword);
var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);
// 将 XML 内容转换为字符串并设置请求内容类型为 text/xml
var content = new StringContent(soapEnvelope.ToString(), Encoding.UTF8, "text/xml");
content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
httpClient.DefaultRequestHeaders.Add("Accept-Language", "zh");
// 设置 SAP Web 服务的 URL
var url = "https://vhjqeps4ci.sap.vistar-eq.com:44300/sap/bc/srt/rfc/sap/zpsfm006/100/zpsfm006/zpsfm006";
// 发起 POST 请求到 SAP Web 服务
var response = await httpClient.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadAsStringAsync();
XDocument doc = XDocument.Parse(result);
var esRet = doc.Descendants("EsRet").FirstOrDefault();
var code = esRet?.Element("Code")?.Value;
var msg = esRet?.Element("Msg")?.Value;
var key1 = esRet?.Element("Key1")?.Value;
//if (esRet == null)
//{
// var ES_RETItem = doc.Descendants("ES_RET").FirstOrDefault();
// var ES_RETcode = ES_RETItem?.Element("CODE")?.Value;
// var ES_RETmsg = ES_RETItem?.Element("MSG")?.Value;
// var outputES_RET = new SapOutput()
// {
// parameter = soapEnvelope.ToString(),
// code = ES_RETcode,
// msg = ES_RETmsg,
// result = result
// };
// return outputES_RET;
//}
var output = new SapOutput()
{
parameter = soapEnvelope.ToString(),
code = code,
msg = msg,
result = result,
materialCode= key1
};
return output;
}
else
{
var result = await response.Content.ReadAsStringAsync();
var output = new SapOutput()
{
parameter = soapEnvelope.ToString(),
code = "失败",
msg = "调用失败,状态码: " + response.StatusCode,
result = result
};
return output;
}
}
}
catch (Exception ex)
{
// 记录错误日志
Console.WriteLine("发生错误: " + ex.Message);
var output = new SapOutput()
{
code = "失败",
msg = "发生错误" + ex.Message,
result = "发生错误" + ex
};
return output;
}
}
}