using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.Remoting.Metadata.W3cXsd2001;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;
using MisDataFunDll;
using NPOI.SS.Formula.Functions;
using NPOI.SS.UserModel;
using Opc.Ua;
namespace MisDataSaveDate
{
public class ND_Api
{
public static string LocalPath_Log = "D:\\MESlog";
public static void miReleaseSfcWithActivity(string apiName, string opName, MiReleaseSfcWithActivityParams miReleaseSfcWithActivityParams, out string sfc, out string code, out string message)
{
string apiNameCreateFile = "申请条码:miReleaseSfcWithActivity";
string requestContent =$@"
{miReleaseSfcWithActivityParams.site}
{miReleaseSfcWithActivityParams.resource}
{miReleaseSfcWithActivityParams.operation}
{miReleaseSfcWithActivityParams.operationRevision}
{miReleaseSfcWithActivityParams.sfcQty}
{miReleaseSfcWithActivityParams.activity}
{miReleaseSfcWithActivityParams.user}
{miReleaseSfcWithActivityParams.modeProcessSFC}
"
;
cmdApi(apiName, requestContent, opName, apiNameCreateFile, out code, out message, out sfc);
}
public static void miCheckInventoryAttributes(string apiName, string opName, MiCheckInventoryAttributes miCheckInventoryAttributes, out string code, out string message)
{
string apiNameCreateFile = "电芯校验:miCheckInventoryAttributes";
string requiredQuantity = "";
string inventoryArray = "";
for (int i = 0; i < miCheckInventoryAttributes.inventoryArray.Count; i++)
{
inventoryArray += $@" {miCheckInventoryAttributes.inventoryArray[i]}";
}
string requestContent = $@"
{miCheckInventoryAttributes.site}
{miCheckInventoryAttributes.sfc}
{miCheckInventoryAttributes.operation}
{miCheckInventoryAttributes.operationRevision}
{miCheckInventoryAttributes.resource}
{miCheckInventoryAttributes.user}
{miCheckInventoryAttributes.activityId}
{miCheckInventoryAttributes.modeCheckInventory}
{requiredQuantity}
{inventoryArray}
"
;
cmdApi(apiName, miCheckInventoryAttributes.sfc, requestContent, opName, apiNameCreateFile, out code, out message);
}
public static void cellCustomDCCheck(string apiName, string opName, CellCustomDCCheck cellCustomDCCheck, out string code, out string message)
{
string apiNameCreateFile = "电芯K值:cellCustomDCCheck";
string inventoryListStr = "";
for (int i = 0; i < cellCustomDCCheck.inventoryList.Count; i++)
{
List inventoryDatalist = cellCustomDCCheck.inventoryList[i].inventoryDatalist;
string inventoryDatalistStr = "";
for (int j = 0; j < inventoryDatalist.Count; j++)
{
inventoryDatalistStr += $@"
{inventoryDatalist[j].name}
{inventoryDatalist[j].value}
";
}
inventoryListStr += $@"
{cellCustomDCCheck.inventoryList[i].inventoryId}
{cellCustomDCCheck.inventoryList[i].marking}
{inventoryDatalistStr}
";
}
string requestContent = $@"
{cellCustomDCCheck.site}
{cellCustomDCCheck.dcSequence}
{cellCustomDCCheck.user}
{cellCustomDCCheck.Multispec}
{cellCustomDCCheck.operation}
{cellCustomDCCheck.resource}
{inventoryListStr}
";
cmdApi(apiName, "", requestContent, opName, apiNameCreateFile, out code, out message);
}
public static void sfcStart(string apiName, string opName, SfcStart sfcStart, out string code, out string message)
{
string apiNameCreateFile = "产品进站:sfcStart";
string requestContent = $@"
{sfcStart.site}
{sfcStart.user}
{sfcStart.operation}
{sfcStart.operationRevision}
{sfcStart.resource}
{sfcStart.sfcArray}
";
cmdApi(apiName, sfcStart.sfcArray, requestContent, opName, apiNameCreateFile, out code, out message);
}
public static void miFindCustomAndSfcData(string apiName, string opName, MiFindCustomAndSfcData miFindCustomAndSfcData, out string code, out string message)
{
string apiNameCreateFile = "产品进站:miFindCustomAndSfcData";
string requestContent = $@"
{miFindCustomAndSfcData.site}
{miFindCustomAndSfcData.operation}
{miFindCustomAndSfcData.operationRevision}
{miFindCustomAndSfcData.resource}
{miFindCustomAndSfcData.masterDataArray}
{miFindCustomAndSfcData.user}
{miFindCustomAndSfcData.activity}
{miFindCustomAndSfcData.sfc}
{miFindCustomAndSfcData.modeProcessSfc}
";
cmdApi(apiName, miFindCustomAndSfcData.sfc, requestContent, opName, apiNameCreateFile, out code, out message);
}
public static void miCheckSFCStatusEx(string apiName, string opName, MiCheckSFCStatusEx miCheckSFCStatusEx, out string code, out string message)
{
string apiNameCreateFile = "产品进站:miCheckSFCStatusEx";
string requestContent = $@"
{miCheckSFCStatusEx.site}
{miCheckSFCStatusEx.operation}
{miCheckSFCStatusEx.operationRevision}
{miCheckSFCStatusEx.sfc}
";
cmdApi(apiName, miCheckSFCStatusEx.sfc, requestContent, opName, apiNameCreateFile, out code, out message);
}
public static void dataCollectForSfcEx(string apiName, string opName, DataCollectForSfcEx dataCollectForSfcEx, out string code, out string message)
{
string apiNameCreateFile = "产品出站:dataCollectForSfcEx";
string parametricDataArrayStr = "";
List parametricDataArray = dataCollectForSfcEx.parametricDataArray;
for (int i = 0; i < parametricDataArray.Count; i++)
{
parametricDataArrayStr += $@"
{parametricDataArray[i].name}
{parametricDataArray[i].value}
{parametricDataArray[i].dataType.ToUpper()}
";
}
string requestContent = $@"
{dataCollectForSfcEx.site}
{dataCollectForSfcEx.sfc}
{dataCollectForSfcEx.dcGroup}
{dataCollectForSfcEx.dcGroupRevision}
{dataCollectForSfcEx.operation}
{dataCollectForSfcEx.operationRevision}
{dataCollectForSfcEx.resource}
{dataCollectForSfcEx.user}
{dataCollectForSfcEx.activityId}
{dataCollectForSfcEx.modeProcessSfc}
{parametricDataArrayStr}
";
cmdApi(apiName, dataCollectForSfcEx.sfc, requestContent, opName, apiNameCreateFile, out code, out message);
}
public static void dataCollectForMoudleTest(string apiName, string opName, DataCollectForMoudleTest dataCollectForMoudleTest, out string code, out string message)
{
string apiNameCreateFile = "产品出站:dataCollectForMoudleTest";
string parametricDataArrayStr = "";
List parametricDataArray = dataCollectForMoudleTest.parametricDataArray;
for (int i = 0; i < parametricDataArray.Count; i++)
{
parametricDataArrayStr += $@"
{parametricDataArray[i].name}
{parametricDataArray[i].value}
{parametricDataArray[i].dataType}
";
}
string requestContent = $@"
{dataCollectForMoudleTest.site}
{dataCollectForMoudleTest.sfc}
{dataCollectForMoudleTest.dcGroup}
{dataCollectForMoudleTest.dcGroupRevision}
{dataCollectForMoudleTest.operation}
{dataCollectForMoudleTest.operationRevision}
{dataCollectForMoudleTest.resource}
{dataCollectForMoudleTest.user}
{dataCollectForMoudleTest.activityId}
{dataCollectForMoudleTest.modeProcessSfc}
{parametricDataArrayStr}
";
cmdApi(apiName, dataCollectForMoudleTest.sfc, requestContent, opName, apiNameCreateFile, out code, out message);
}
public static void sfcComplete(string apiName, string opName, SfcComplete sfcComplete, out string code, out string message)
{
string apiNameCreateFile = "产品出站:sfcComplete";
string requestContent = $@"
{sfcComplete.site}
{sfcComplete.user}
{sfcComplete.operation}
{sfcComplete.operationRevision}
{sfcComplete.resource}
{sfcComplete.sfcArray}
";
cmdApi(apiName, sfcComplete.sfcArray, requestContent, opName, apiNameCreateFile, out code, out message);
}
public static void miAssmebleAndCollectDataForSfc(string apiName, string opName, MiAssmebleAndCollectDataForSfc miAssmebleAndCollectDataForSfc, out string code, out string message)
{
string apiNameCreateFile = "物料装配:miAssmebleAndCollectDataForSfc";
string inventoryArrayStr = "";
List inventoryArray = miAssmebleAndCollectDataForSfc.inventoryArray;
for (int i = 0; i < inventoryArray.Count; i++)
{
string assemblyDataFieldsStr = "";
List assemblyDataFields = inventoryArray[i].assemblyDataFields;
for (int j = 0; j < assemblyDataFields.Count; j++)
{
assemblyDataFieldsStr += $@"
{assemblyDataFields[j].attribute}
{assemblyDataFields[j].value}
";
}
inventoryArrayStr += $@"
{inventoryArray[i].inventory}
{inventoryArray[i].qty}
{assemblyDataFieldsStr}
";
}
string requestContent = $@"
{miAssmebleAndCollectDataForSfc.site}
{miAssmebleAndCollectDataForSfc.sfc}
{miAssmebleAndCollectDataForSfc.operation}
{miAssmebleAndCollectDataForSfc.operationRevision}
{miAssmebleAndCollectDataForSfc.resource}
{miAssmebleAndCollectDataForSfc.user}
{miAssmebleAndCollectDataForSfc.activityId}
{miAssmebleAndCollectDataForSfc.modeProcessSFC}
{miAssmebleAndCollectDataForSfc.partialAssembly}
{inventoryArrayStr}
";
cmdApi(apiName, miAssmebleAndCollectDataForSfc.sfc, requestContent, opName, apiNameCreateFile, out code, out message);
}
public static void getAllLabelContents(string apiName, string opName, GetAllLabelContents getAllLabelContents, out string responseContent,out string code, out string message)
{
string apiNameCreateFile = "获取打印配置:getAllLabelContents";
string requestContent = $@"
{getAllLabelContents.site}
{getAllLabelContents.sfcList}
- {getAllLabelContents.item}
{getAllLabelContents.languageCode}
{getAllLabelContents.Y}
{getAllLabelContents.activity}
";
cmdApi(apiName, getAllLabelContents.sfcList, requestContent, opName, apiNameCreateFile, out responseContent, out code, out message);
}
public static void dataCollectForResourceInspect(string apiName, string opName, DataCollectForResourceInspect dataCollectForResourceInspect, out string code, out string message)
{
string apiNameCreateFile = "首件:dataCollectForResourceInspect";
List parametricDataArray = dataCollectForResourceInspect.parametricDataArray;
string parametricDataArrayStr = "";
for (int i = 0; i < parametricDataArray.Count; i++)
{
parametricDataArrayStr += $@"
{parametricDataArray[i].name}
{parametricDataArray[i].value}
{parametricDataArray[i].dataType}
";
}
string requestContent = $@"
{dataCollectForResourceInspect.site}
{dataCollectForResourceInspect.user}
{dataCollectForResourceInspect.dcMode}
{dataCollectForResourceInspect.executeMode}
{dataCollectForResourceInspect.resource}
{dataCollectForResourceInspect.operation}
{dataCollectForResourceInspect.operationRevision}
{dataCollectForResourceInspect.dcGroup}
{dataCollectForResourceInspect.dcGroupRevision}
{dataCollectForResourceInspect.dcSequence}
{parametricDataArrayStr}
";
cmdApi(apiName, "", requestContent, opName, apiNameCreateFile, out code, out message);
}
// 申请条码 返回sfc
public static void cmdApi(string apiName, string requestContent, string opName, string apiNameCreateFile, out string code, out string message, out string sfc)
{
sfc = "";
code = "9999999";
message = "未知错误";
string requestTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
string responseTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
MisDataFun.GetApiAuth(apiName, out string Username, out string Password, out int timeout, out string url, out code, out message);
if (code != "0") goto step100;
// 创建 WebRequest
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "text/xml";
request.Timeout = timeout;
// 设置 Basic 认证头
string authToken = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Username}:{Password}"));
request.Headers.Add("Authorization", "Basic " + authToken);
try
{
// 写入请求体
byte[] requestBytes = Encoding.UTF8.GetBytes(requestContent);
request.ContentLength = requestBytes.Length;
using (Stream stream = request.GetRequestStream())
{
stream.Write(requestBytes, 0, requestBytes.Length);
}
// 发送请求并获取响应
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
string responseBody = reader.ReadToEnd();
responseTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
XDocument doc = XDocument.Parse(responseBody);
foreach (var element in doc.Descendants())
{
if (element.Name.LocalName == "code")
{
code = element.Value;
}
if (element.Name.LocalName == "message")
{
message = element.Value;
}
if (element.Name.LocalName == "sfc")
{
//sfc.Add(element.Value);
sfc = element.Value;
}
}
}
}
catch (WebException err)
{
responseTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
if (err.Response != null)
{
using (var errorResponse = (HttpWebResponse)err.Response)
using (var reader = new StreamReader(errorResponse.GetResponseStream()))
{
message = reader.ReadToEnd();
code = errorResponse.StatusCode.ToString();
}
}
else
{
message = err.Message;
}
}
step100:
ND_Api.RecordApiLog(apiName,apiNameCreateFile, opName, sfc, requestContent, requestTime, code, message, responseTime);
}
public static void cmdApi(string apiName, string sfc, string requestContent, string opName, string apiNameCreateFile, out string code, out string message)
{
code = "9999999";
message = "未知错误";
string requestTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
string responseTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
MisDataFun.GetApiAuth(apiName, out string Username, out string Password, out int timeout, out string url, out code, out message);
if (code != "0") goto step100;
// 创建 WebRequest
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "text/xml";
request.Timeout = timeout;
// 设置 Basic 认证头
string authToken = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Username}:{Password}"));
request.Headers.Add("Authorization", "Basic " + authToken);
try
{
// 写入请求体
byte[] requestBytes = Encoding.UTF8.GetBytes(requestContent);
request.ContentLength = requestBytes.Length;
using (Stream stream = request.GetRequestStream())
{
stream.Write(requestBytes, 0, requestBytes.Length);
}
// 发送请求并获取响应
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
string responseBody = reader.ReadToEnd();
responseTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
XDocument doc = XDocument.Parse(responseBody);
foreach (var element in doc.Descendants())
{
if (element.Name.LocalName == "code")
{
code = element.Value;
}
if (element.Name.LocalName == "message")
{
message = element.Value;
}
}
//code = "0";
//message = "";
}
}
catch (WebException err)
{
responseTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
if (err.Response != null)
{
using (var errorResponse = (HttpWebResponse)err.Response)
using (var reader = new StreamReader(errorResponse.GetResponseStream()))
{
code = errorResponse.StatusCode.ToString();
message = reader.ReadToEnd();
}
}
else
{
message = err.Message;
}
}
step100:
ND_Api.RecordApiLog(apiName,apiNameCreateFile, opName, sfc, requestContent, requestTime, code, message, responseTime);
}
public static void miCheckBOMInventory(string apiName, string opName, MiCheckBOMInventory miCheckBOMInventory, out string code, out string message)
{
string apiNameCreateFile = "批次校验:miCheckBOMInventory";
string requestContent = $@"
{miCheckBOMInventory.site}
{miCheckBOMInventory.operation}
{miCheckBOMInventory.operationRevision}
{miCheckBOMInventory.resource}
{miCheckBOMInventory.user}
{miCheckBOMInventory.activity}
{miCheckBOMInventory.sfc}
{miCheckBOMInventory.modeCheckOperation}
{miCheckBOMInventory.inventory}
{miCheckBOMInventory.component}
";
cmdApi(apiName, miCheckBOMInventory.sfc, requestContent, opName, apiNameCreateFile, out code, out message);
}
public static void getSfcStatusAndOperation(string apiName, string opName, GetSfcStatusAndOperationParams getSfcStatusAndOperationParams, out string responseContent, out string code, out string message)
{
string apiNameCreateFile = "产品状态查询:getSfcStatusAndOperation";
string requestContent = $@"
{getSfcStatusAndOperationParams.site}
{getSfcStatusAndOperationParams.barcode}
";
cmdApi(apiName, getSfcStatusAndOperationParams.barcode, requestContent, opName, apiNameCreateFile, out responseContent, out code, out message);
}
public static void cmdApi(string apiName, string sfc, string requestContent, string opName, string apiNameCreateFile, out string responseContent, out string code, out string message)
{
code = "9999999";
message = "未知错误";
responseContent = "";
string requestTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
string responseTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
MisDataFun.GetApiAuth(apiName, out string Username, out string Password, out int timeout, out string url, out code, out message);
if (code != "0") goto step100;
// 创建 WebRequest
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "text/xml";
request.Timeout = timeout;
// 设置 Basic 认证头
string authToken = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Username}:{Password}"));
request.Headers.Add("Authorization", "Basic " + authToken);
try
{
// 写入请求体
byte[] requestBytes = Encoding.UTF8.GetBytes(requestContent);
request.ContentLength = requestBytes.Length;
using (Stream stream = request.GetRequestStream())
{
stream.Write(requestBytes, 0, requestBytes.Length);
}
// 发送请求并获取响应
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
string responseBody = reader.ReadToEnd();
responseTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
XDocument doc = XDocument.Parse(responseBody);
foreach (var element in doc.Descendants())
{
if (element.Name.LocalName == "code")
{
code = element.Value;
}
if (element.Name.LocalName == "message")
{
message = element.Value;
}
}
responseContent = responseBody;
}
}
catch (WebException err)
{
responseTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
if (err.Response != null)
{
using (var errorResponse = (HttpWebResponse)err.Response)
using (var reader = new StreamReader(errorResponse.GetResponseStream()))
{
code = errorResponse.StatusCode.ToString();
message = reader.ReadToEnd();
}
}
else
{
message = err.Message;
}
}
step100:
ND_Api.RecordApiLog(apiName,apiNameCreateFile, opName, sfc, requestContent, requestTime, code, message, responseTime);
}
public static void RecordApiLog(string apiName, string apiNameCreateFile, string opName, string sfc, string requestContent, string requestTime, string responseCode, string responseMessage, string responseTime)
{
var now = DateTime.Now;
string path1 = Path.Combine(LocalPath_Log, apiNameCreateFile);
string fileName = $"{opName}_log_{now:yyyy-MM-dd}.txt";
string fullPath = Path.Combine(path1, fileName);
// 确保目录存在
Directory.CreateDirectory(path1);
// 计算耗时(假设时间格式为 yyyy/MM/dd HH:mm:ss.fff)
TimeSpan duration = DateTime.Parse(responseTime) - DateTime.Parse(requestTime);
string durationStr = $"耗时:{duration.TotalMilliseconds}ms";
// 构建日志内容
StringBuilder logContent = new StringBuilder();
// 添加分隔线(如果不是新文件)
if (File.Exists(fullPath))
{
logContent.AppendLine();
}
logContent.AppendLine($"{requestTime} 开始调用,sfc条码:{sfc}");
logContent.AppendLine($"{requestTime} 开始调用,请求参数:{requestContent}");
logContent.AppendLine($"{responseTime} 调用完成");
logContent.AppendLine($"{responseTime} {durationStr}");
logContent.AppendLine($"{responseTime} 返回代码:{responseCode};返回信息:{responseMessage}");
logContent.AppendLine(new string('-', 50)); // 分隔线
// 写入文件(追加模式)
File.AppendAllText(fullPath, logContent.ToString(), Encoding.UTF8);
MisDataFun.RecordApiContent(apiName, opName, sfc, requestTime, requestContent, responseTime, duration.TotalMilliseconds.ToString(), responseCode, responseMessage);
}
}
}