😎新增sap,wbs创建、wbs修改服务

This commit is contained in:
bairubing 2025-01-02 09:55:13 +08:00
parent ed02d44e94
commit 55904956e7
3 changed files with 609 additions and 14 deletions

View File

@ -0,0 +1,136 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Vistar.Application.SapService.Dto;
public class SapCreateWBSInput
{
/// <summary>
/// 接口唯一ID
/// </summary>
public string ReqKeyId { get; set; }
/// <summary>
/// 业务唯一ID
/// </summary>
public string BusinessId { get; set; }
/// <summary>
/// 传入消息ID
/// </summary>
public string MessageId { get; set; }
/// <summary>
/// 发送方的合作伙伴编号
/// </summary>
public string SndPrn { get; set; }
/// <summary>
/// 接收方的合作伙伴编号
/// </summary>
public string RcvPrn { get; set; }
/// <summary>
/// 用户名
/// </summary>
public string ReqUser { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Note1 { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Note2 { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Note3 { get; set; }
public List<SapCreateWBSItem> SapCreateWBSItem { get; set; }
}
public class SapCreateWBSItem
{
/// <summary>
/// 接口唯一ID
/// </summary>
public string Zwbid { get; set; }
/// <summary>
/// 项目编码
/// </summary>
public string Pspid { get; set; }
/// <summary>
/// 上层WBS编码
/// </summary>
public string Pspnr { get; set; }
/// <summary>
/// WBS编码
/// </summary>
public string Pspnr2 { get; set; }
/// <summary>
/// WBS描述
/// </summary>
public string Post1 { get; set; }
/// <summary>
/// 计划开始日期
/// </summary>
public string Pstrt { get; set; }
/// <summary>
/// 计划结束日期
/// </summary>
public string Pende { get; set; }
/// <summary>
/// 实际开始日期
/// </summary>
public string Istrt { get; set; }
/// <summary>
/// 实际结束日期
/// </summary>
public string Iende { get; set; }
/// <summary>
/// 项目负责人
/// </summary>
public string Usr00 { get; set; }
/// <summary>
/// WBS元素类型
/// </summary>
public string Prart { get; set; }
/// <summary>
/// 预留字段1
/// </summary>
public string Zresv1 { get; set; }
/// <summary>
/// 预留字段2
/// </summary>
public string Zresv2 { get; set; }
/// <summary>
/// 预留字段3
/// </summary>
public string Zresv3 { get; set; }
/// <summary>
/// 预留字段4
/// </summary>
public string Zresv4 { get; set; }
/// <summary>
/// 预留字段5
/// </summary>
public string Zresv5 { get; set; }
}

View File

@ -0,0 +1,169 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Vistar.Application.SapService.Dto;
public class SapUpdateWBSInput
{
/// <summary>
/// 接口唯一ID
/// </summary>
public string ReqKeyId { get; set; }
/// <summary>
/// 业务唯一ID
/// </summary>
public string BusinessId { get; set; }
/// <summary>
/// 传入消息ID
/// </summary>
public string MessageId { get; set; }
/// <summary>
/// 发送方的合作伙伴编号
/// </summary>
public string SndPrn { get; set; }
/// <summary>
/// 接收方的合作伙伴编号
/// </summary>
public string RcvPrn { get; set; }
/// <summary>
/// 用户名
/// </summary>
public string ReqUser { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Note1 { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Note2 { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Note3 { get; set; }
public List<SapUpdateWBSItem> SapUpdateWBSItem { get; set; }
}
public class SapUpdateWBSItem
{
/// <summary>
/// 接口唯一ID
/// </summary>
public string Zwbid { get; set; }
/// <summary>
/// 项目编码
/// </summary>
public string Pspid { get; set; }
/// <summary>
/// 项目描述
/// </summary>
public string Post1Proj { get; set; }
/// <summary>
/// WBS编码
/// </summary>
public string Pspnr { get; set; }
/// <summary>
/// WBS描述
/// </summary>
public string Post1 { get; set; }
/// <summary>
/// 计划开始日期
/// </summary>
public string Pstrt { get; set; }
/// <summary>
/// 计划结束日期
/// </summary>
public string Pende { get; set; }
/// <summary>
/// 实际开始日期
/// </summary>
public string Istrt { get; set; }
/// <summary>
/// 实际结束日期
/// </summary>
public string Iende { get; set; }
/// <summary>
/// 项目负责人
/// </summary>
public string Usr00 { get; set; }
/// <summary>
/// WBS元素类型
/// </summary>
public string Prart { get; set; }
/// <summary>
/// 项目状态
/// </summary>
public string SystemStatus { get; set; }
/// <summary>
/// WBS状态
/// </summary>
public string SystemStatus2 { get; set; }
/// <summary>
/// 预留字段1
/// </summary>
public string Zresv1 { get; set; }
/// <summary>
/// 预留字段2
/// </summary>
public string Zresv2 { get; set; }
/// <summary>
/// 预留字段3
/// </summary>
public string Zresv3 { get; set; }
/// <summary>
/// 预留字段4
/// </summary>
public string Zresv4 { get; set; }
/// <summary>
/// 预留字段5
/// </summary>
public string Zresv5 { get; set; }
}

View File

@ -7,6 +7,7 @@
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;
@ -110,7 +111,7 @@ public class SapService : IDynamicApiController, ITransient
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/800/zmmfm012/zmmfm012";
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);
@ -222,7 +223,7 @@ public class SapService : IDynamicApiController, ITransient
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/800/zppfm001/zppfm001";
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);
@ -396,7 +397,7 @@ public class SapService : IDynamicApiController, ITransient
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/800/zppfm003/zppfm003";
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);
@ -506,7 +507,7 @@ public class SapService : IDynamicApiController, ITransient
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/800/zppfm004/zppfm004";
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);
@ -660,7 +661,7 @@ public class SapService : IDynamicApiController, ITransient
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/800/zmmfm013/zmmfm013";
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);
@ -826,7 +827,7 @@ public class SapService : IDynamicApiController, ITransient
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/800/zppfm005/zppfm005";
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);
@ -891,4 +892,293 @@ public class SapService : IDynamicApiController, ITransient
}
/// <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;
}
}
}