|
using HH.WCS.Mobox3.Template.device;
|
using Newtonsoft.Json;
|
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Serialization;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Net;
|
using System.Net.Http;
|
using System.Net.Http.Formatting;
|
using System.Net.Http.Headers;
|
using System.Text;
|
using System.Web.Http;
|
using System.Xml;
|
using System.Xml.Linq;
|
using static HH.WCS.Mobox3.Template.api.ApiHelper;
|
using static HH.WCS.Mobox3.Template.api.ApiModel;
|
using static HH.WCS.Mobox3.Template.api.OtherModel;
|
using static HH.WCS.Mobox3.Template.device.S7Helper;
|
|
namespace HH.WCS.Mobox3.Template.api {
|
/// <summary>
|
/// 测试用,如果项目中要和设备对接,前期设备无法测试,用接口模拟
|
/// </summary>
|
[RoutePrefix("api")]
|
public class TestController : System.Web.Http.ApiController {
|
|
|
//如果好用,请收藏地址,帮忙分享。
|
public class HEAD {
|
/// <summary>
|
/// 唯一标识
|
/// </summary>
|
public string KEY { get; set; }
|
/// <summary>
|
/// 过账日期
|
/// </summary>
|
public string GZRQ { get; set; }
|
/// <summary>
|
/// 过账人员
|
/// </summary>
|
public string GZRY { get; set; }
|
/// <summary>
|
/// 工厂
|
/// </summary>
|
public string GC { get; set; }
|
}
|
|
public class ITEM1 {
|
/// <summary>
|
/// 序列号
|
/// </summary>
|
public string XLH { get; set; }
|
}
|
|
public class ITEM {
|
/// <summary>
|
/// 物料凭证编号
|
/// </summary>
|
public string WLPZBH { get; set; }
|
/// <summary>
|
/// 物料凭证年度
|
/// </summary>
|
public string WLPZND { get; set; }
|
/// <summary>
|
/// 物料凭证中的项目
|
/// </summary>
|
public string WLPZZDXM { get; set; }
|
/// <summary>
|
/// 物料号
|
/// </summary>
|
public string WLH { get; set; }
|
/// <summary>
|
/// 基本计量单位
|
/// </summary>
|
public string JBJLDW { get; set; }
|
/// <summary>
|
/// 数量
|
/// </summary>
|
public string SL { get; set; }
|
/// <summary>
|
/// 采购凭证号
|
/// </summary>
|
public string CGPZH { get; set; }
|
/// <summary>
|
/// 采购凭证项目编号
|
/// </summary>
|
public string CGPZXMBH { get; set; }
|
/// <summary>
|
/// 库存地点
|
/// </summary>
|
public string KCDD { get; set; }
|
/// <summary>
|
/// 检验批编号
|
/// </summary>
|
public string JYPBH { get; set; }
|
/// <summary>
|
/// 会计凭证输入日期
|
/// </summary>
|
public string KJPZSSRQ { get; set; }
|
/// <summary>
|
/// 会计凭证输入时间
|
/// </summary>
|
public string KJPZSRSJ { get; set; }
|
/// <summary>
|
/// 批次
|
/// </summary>
|
public string PC { get; set; }
|
/// <summary>
|
///
|
/// </summary>
|
public List<ITEM1> ITEM1 { get; set; }
|
}
|
|
public class WLPZ {
|
/// <summary>
|
///
|
/// </summary>
|
public HEAD HEAD { get; set; }
|
/// <summary>
|
///
|
/// </summary>
|
public List<ITEM> ITEM { get; set; }
|
}
|
|
public class ROOT {
|
/// <summary>
|
///
|
/// </summary>
|
public WLPZ WLPZ { get; set; }
|
}
|
|
public class Root {
|
/// <summary>
|
///
|
/// </summary>
|
public ROOT ROOT { get; set; }
|
}
|
|
/*<?xml version="1.0" encoding="UTF-8"?>
|
<ROOT>
|
<WLPZ>
|
<HEAD>
|
<KEY>唯一标识</KEY>
|
<GZRQ>过账日期</GZRQ>
|
<GZRY>过账人员</GZRY>
|
<GC>工厂</GC>
|
</HEAD>
|
<ITEM>
|
<WLPZBH>物料凭证编号</WLPZBH>
|
<WLPZND>物料凭证年度</WLPZND>
|
<WLPZZDXM>物料凭证中的项目</WLPZZDXM>
|
<WLH>物料号</WLH>
|
<JBJLDW>基本计量单位</JBJLDW>
|
<SL>数量</SL>
|
<CGPZH>采购凭证号</CGPZH>
|
<CGPZXMBH>采购凭证项目编号</CGPZXMBH>
|
<KCDD>库存地点</KCDD>
|
<JYPBH>检验批编号</JYPBH>
|
<KJPZSSRQ>会计凭证输入日期</KJPZSSRQ>
|
<KJPZSRSJ>会计凭证输入时间</KJPZSRSJ>
|
<PC>批次</PC>
|
<ITEM1>
|
<XLH>序列号</XLH>
|
</ITEM1>
|
</ITEM>
|
</WLPZ>
|
</ROOT>*/
|
static void ProcessXmlElements(XmlNode parentNode) {
|
if (parentNode.HasChildNodes) {
|
// 用于存储 ITEM 和 ITEM1 元素
|
XmlNodeList itemNodes = parentNode.SelectNodes("ITEM | ITEM1");
|
if (itemNodes.Count > 0) {
|
// 创建一个新的父节点来容纳 ITEM 和 ITEM1 数组
|
XmlElement arrayElement = parentNode.OwnerDocument.CreateElement(itemNodes[0].Name + "Array");
|
foreach (XmlNode itemNode in itemNodes) {
|
// 将 ITEM 和 ITEM1 元素移动到新的数组父节点下
|
arrayElement.AppendChild(itemNode.CloneNode(true));
|
parentNode.RemoveChild(itemNode);
|
}
|
// 将新的数组父节点添加到原父节点中
|
parentNode.AppendChild(arrayElement);
|
}
|
|
// 递归处理子节点
|
foreach (XmlNode childNode in parentNode.ChildNodes) {
|
if (childNode.NodeType == XmlNodeType.Element) {
|
ProcessXmlElements(childNode);
|
}
|
}
|
}
|
}
|
static void EnsureArrayFormat(JObject json) {
|
foreach (var property in json.Properties()) {
|
if (property.Name == "ITEM" || property.Name == "ITEM1") {
|
if (property.Value is JObject && !(property.Value is JArray)) {
|
// 若为单个对象,包装成数组
|
property.Value = new JArray(property.Value);
|
}
|
}
|
if (property.Value is JObject) {
|
// 递归处理子对象
|
EnsureArrayFormat((JObject)property.Value);
|
}
|
else if (property.Value is JArray) {
|
// 递归处理数组中的每个元素
|
foreach (var item in (JArray)property.Value) {
|
if (item is JObject) {
|
EnsureArrayFormat((JObject)item);
|
}
|
}
|
}
|
}
|
}
|
|
[HttpPost]
|
public IHttpActionResult PostXml([FromBody] XElement xmlRequest) {
|
XmlDocument xmlDoc = new XmlDocument();
|
xmlDoc.LoadXml(xmlRequest.ToString());
|
// 将 XmlDocument 转换为 JSON 字符串
|
JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc));
|
// 处理特定字段,强制转换为数组
|
EnsureArrayFormat(jsonObject);
|
// 反序列化为RootWithArray
|
var data = JsonConvert.DeserializeObject<Root>(jsonObject.ToString());
|
|
|
//string json = JsonConvert.SerializeXmlNode(xmlDoc, Newtonsoft.Json.Formatting.Indented);
|
//var data1 = JsonConvert.DeserializeObject<Root>(json);
|
|
|
|
// 处理SAP XML请求逻辑
|
var responseXml = new XElement("Response",
|
new XElement("Status", "Success"),
|
new XElement("Message", "XML processed")
|
);
|
var response = new HttpResponseMessage()
|
{
|
Content = new StringContent(content: responseXml.ToString(), encoding: Encoding.UTF8, mediaType: "application/xml" // 关键:声明内容类型
|
)
|
};
|
//return response;
|
|
//return Request.CreateResponse(HttpStatusCode.OK, responseXml);
|
return Ok(responseXml);
|
}
|
|
|
[HttpGet]
|
public HttpResponseMessage GetXml(string id) {
|
// 根据ID返回XML数据
|
var xmlData = $@"
|
<Data>
|
<ID>{id}</ID>
|
<Value>Sample Data</Value>
|
</Data>";
|
//string xml = JsonConvert.DeserializeXmlNode(json, "root").OuterXml;
|
var response = new HttpResponseMessage()
|
{
|
Content = new StringContent(xmlData.ToString(), Encoding.UTF8, "application/xml")
|
};
|
//return Content(HttpStatusCode.OK, xmlData, Configuration.Formatters.XmlFormatter);
|
return response;
|
}
|
|
[HttpGet]
|
public HttpResponseMessage GetXml1(string id) {
|
// json转xml返回
|
|
var json = JsonConvert.SerializeObject(new { id = 123, name = "jack" });
|
string xml = JsonConvert.DeserializeXmlNode(json, "root").OuterXml;
|
var response = new HttpResponseMessage()
|
{
|
Content = new StringContent(xml, Encoding.UTF8, "application/xml")
|
};
|
return response;
|
}
|
}
|
|
|
}
|