Files
2026-06-26 13:45:37 +08:00

1710 lines
76 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using MesServerWork;
using MisDataFunDll;
namespace MisDataSaveDate
{
public static class CallWebService
{
/// <summary>
/// 释放模组/PACK号
/// </summary>
/// <param name="opName"></param>
/// <param name="sfc"></param>
/// <param name="code"></param>
/// <param name="message"></param>
public static void Call_miReleaseSfcWithActivity(string opName,out string sfc, out string code, out string message)
{
sfc = "";
string apiName = "miReleaseSfcWithActivity";
// 获取接口是否禁用
MisDataFun.GetApiEnable(apiName, opName, "", out string enable, out DataTable dtEnable);
if (dtEnable.Rows.Count == 0)
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "该工位未配置申请条码接口,将采用离线!");
code = "500";
message = "该工位未配置申请条码接口 却意外调用";
return;
}
if(enable == "0")
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "申请条码接口被禁用,将采用本地方式生成模组码/PACK码!");
// 读取当前选择的计划中的机型, 发动机号写入PLC
MisDataFun.GetEngineType_EngineID(opName, out sfc, out int isCheckOk, out string msg2);
code = isCheckOk.ToString();
message = msg2;
return;
}
// 获取接口预置参数
MisDataFun.GetApiParams(apiName, opName, out code, out message, out DataTable dt);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 获取接口operation/resource参数
MisDataFun.GetApiParams_operation(opName, out string operation, out string resource, out code, out message);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 准备接口参数
MiReleaseSfcWithActivityParams miReleaseSfcWithActivityParams = new MiReleaseSfcWithActivityParams();
foreach (DataRow row in dt.Rows)
{
string paramName = row["参数名称"].ToString(); // 获取参数名称列的值
object paramValue = row["默认值"]; // 使用默认值
switch (paramName)
{
case "site":
miReleaseSfcWithActivityParams.site = paramValue?.ToString() ?? "";
break;
case "resource":
miReleaseSfcWithActivityParams.resource = resource;
break;
case "operation":
miReleaseSfcWithActivityParams.operation = operation;
break;
case "operationRevision":
miReleaseSfcWithActivityParams.operationRevision = paramValue?.ToString() ?? "";
break;
case "sfcQty":
miReleaseSfcWithActivityParams.sfcQty = paramValue?.ToString() ?? "";
break;
case "activity":
miReleaseSfcWithActivityParams.activity = paramValue?.ToString() ?? "";
break;
case "user":
miReleaseSfcWithActivityParams.user = paramValue?.ToString() ?? "";
break;
case "modeProcessSFC":
if (Enum.TryParse(paramValue?.ToString(), out ModeProcessSfc mode))
{
miReleaseSfcWithActivityParams.modeProcessSFC = mode;
}
else
{
miReleaseSfcWithActivityParams.modeProcessSFC = ModeProcessSfc.MODE_NONE;
}
break;
}
}
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", "调用模组码/PACK码生成接口");
ND_Api.miReleaseSfcWithActivity(apiName, opName, miReleaseSfcWithActivityParams, out sfc, out code, out message);
if (code == "0")
{
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", "调用模组码/PACK码生成接口成功");
}
else
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", "调用模组码/PACK码生成接口失败原因" + message);
}
}
/// <summary>
/// 进站接口(目前没有用到)
/// </summary>
/// <param name="opName"></param>
/// <param name="sfc"></param>
/// <param name="code"></param>
/// <param name="message"></param>
public static void Call_sfcStart(string opName, string sfc, out string code, out string message)
{
string apiName = "sfcStart";
// 获取接口是否禁用
MisDataFun.GetApiEnable(apiName, opName, sfc, out string enable, out DataTable dtEnable);
if (dtEnable.Rows.Count == 0)
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", $"{sfc}该工位未配置进站接口,将采用离线模式!");
code = "0";
message = "";
return;
}
MisDataFun.GetApiStatus_EngineID(apiName, opName, sfc, out string initCode, out string initTime);
if (initCode == "0")
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", $"{sfc}该产品已经进站,进站时间:" + initTime);
code = "0";
message = "";
return;
}
if (enable == "0")
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", $"{sfc}进站接口被禁用,将采用离线模式进站!");
code = "0";
message = "";
return;
}
// 获取接口预置参数
MisDataFun.GetApiParams(apiName, opName, out code, out message, out DataTable dt);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 获取接口operation/resource参数
MisDataFun.GetApiParams_operation(opName, out string operation, out string resource, out code, out message);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 准备接口参数
SfcStart sfcStart = new SfcStart();
foreach (DataRow row in dt.Rows)
{
string paramName = row["参数名称"].ToString(); // 获取参数名称列的值
object paramValue = row["默认值"]; // 使用默认值
switch (paramName)
{
case "site":
sfcStart.site = paramValue?.ToString() ?? "";
break;
case "resource":
sfcStart.resource = resource;
break;
case "operation":
sfcStart.operation = operation;
break;
case "operationRevision":
sfcStart.operationRevision = paramValue?.ToString() ?? "";
break;
case "user":
sfcStart.user = paramValue?.ToString() ?? "";
break;
}
}
sfcStart.sfcArray = sfc;
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"{sfc}调用进站接口");
ND_Api.sfcStart(apiName, opName, sfcStart, out code, out message);
if (code == "0")
{
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"{sfc}调用进站接口成功!");
}
else
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", $"{sfc}调用进站接口失败!原因:" + message);
}
}
/// <summary>
/// 进站接口
/// </summary>
/// <param name="opName"></param>
/// <param name="sfc"></param>
/// <param name="code"></param>
/// <param name="message"></param>
public static void Call_miFindCustomAndSfcData(string opName, string sfc, out string code, out string message)
{
string apiName = "miFindCustomAndSfcData";
// 获取接口是否禁用
MisDataFun.GetApiEnable(apiName, opName, sfc, out string enable, out DataTable dtEnable);
if (dtEnable.Rows.Count == 0)
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", $"{sfc}该工位未配置进站接口,将采用离线模式!");
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"{sfc}进站成功");
code = "0";
message = "";
return;
}
// 获取接口进站状态
MisDataFun.GetApiStatus_EngineID(apiName, opName, sfc, out string initCode, out string initTime);
if (initCode == "0")
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "该产品已经进站 且未出站 跳过重新进站,进站时间:" + initTime);
code = "0";
message = "";
return;
}
if (enable == "0")
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", $"{sfc}进站接口被禁用,将采用离线模式进站 !");
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"{sfc} 离线模式进站成功");
code = "0";
message = "";
return;
}
// 获取接口预置参数
MisDataFun.GetApiParams(apiName, opName, out code, out message, out DataTable dt);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 获取接口operation/resource参数
MisDataFun.GetApiParams_operation(opName, out string operation, out string resource, out code, out message);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 准备接口参数
MiFindCustomAndSfcData miFindCustomAndSfcData = new MiFindCustomAndSfcData();
foreach (DataRow row in dt.Rows)
{
string paramName = row["参数名称"].ToString(); // 获取参数名称列的值
object paramValue = row["默认值"]; // 使用默认值
switch (paramName)
{
case "site":
miFindCustomAndSfcData.site = paramValue?.ToString() ?? "";
break;
case "resource":
miFindCustomAndSfcData.resource = resource;
break;
case "operation":
miFindCustomAndSfcData.operation = operation;
break;
case "operationRevision":
miFindCustomAndSfcData.operationRevision = paramValue?.ToString() ?? "";
break;
case "user":
miFindCustomAndSfcData.user = paramValue?.ToString() ?? "";
break;
case "masterDataArray":
miFindCustomAndSfcData.masterDataArray = paramValue?.ToString() ?? "";
break;
case "activity":
miFindCustomAndSfcData.activity = paramValue?.ToString() ?? "";
break;
case "modeProcessSFC":
if (Enum.TryParse(paramValue?.ToString(), out ModeProcessSfc mode))
{
miFindCustomAndSfcData.modeProcessSfc = mode;
}
else
{
miFindCustomAndSfcData.modeProcessSfc = ModeProcessSfc.MODE_NONE;
}
break;
}
}
miFindCustomAndSfcData.sfc = sfc;
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"{sfc}调用进站接口");
ND_Api.miFindCustomAndSfcData(apiName, opName, miFindCustomAndSfcData, out code, out message);
if (code == "0")
{
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"{sfc}调用进站接口成功!");
}
else
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", $"{sfc}调用进站接口失败!原因:" + message);
}
}
/// <summary>
/// 进站接口(目前没有用到)
/// </summary>
/// <param name="opName"></param>
/// <param name="sfc"></param>
/// <param name="code"></param>
/// <param name="message"></param>
public static void Call_miCheckSFCStatusEx(string opName, string sfc, out string code, out string message)
{
string apiName = "miCheckSFCStatusEx";
// 获取接口是否禁用
MisDataFun.GetApiEnable(apiName, opName, sfc, out string enable, out DataTable dtEnable);
if (dtEnable.Rows.Count == 0)
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "该工位未配置进站接口,将采用离线模式!");
code = "500";
message = "该工位未配置进站接口 却意外调用";
return;
}
if (enable == "0")
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "进站接口被禁用,将采用离线模式进站!");
code = "0";
message = "";
return;
}
// 获取接口预置参数
MisDataFun.GetApiParams(apiName, opName, out code, out message, out DataTable dt);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 获取接口operation/resource参数
MisDataFun.GetApiParams_operation(opName, out string operation, out string resource, out code, out message);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 准备接口参数
MiCheckSFCStatusEx miCheckSFCStatusEx = new MiCheckSFCStatusEx();
foreach (DataRow row in dt.Rows)
{
string paramName = row["参数名称"].ToString(); // 获取参数名称列的值
object paramValue = row["默认值"]; // 使用默认值
switch (paramName)
{
case "site":
miCheckSFCStatusEx.site = paramValue?.ToString() ?? "";
break;
case "operation":
miCheckSFCStatusEx.operation = operation;
break;
case "operationRevision":
miCheckSFCStatusEx.operationRevision = paramValue?.ToString() ?? "";
break;
}
}
miCheckSFCStatusEx.sfc = sfc;
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", "调用进站接口");
ND_Api.miCheckSFCStatusEx(apiName, opName, miCheckSFCStatusEx, out code, out message);
if (code == "0")
{
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", "调用进站接口成功!");
}
else
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", "调用进站接口失败!原因:" + message);
}
}
/// <summary>
/// 物料装配接口
/// </summary>
/// <param name="opName"></param>
/// <param name="sfc"></param>
/// <param name="barcode"></param>
/// <param name="inventory"></param>
/// <param name="code"></param>
/// <param name="message"></param>
public static void Call_miAssmebleAndCollectDataForSfc(string opName, string sfc, string barcode,string inventory, out string code, out string message)
{
// 只有一个时使用BarCode
if(barcode == "" && inventory != "")
{
barcode = inventory;
inventory = "";
}
string apiName = "miAssmebleAndCollectDataForSfc";
// 获取接口是否禁用
MisDataFun.GetApiEnable(apiName, opName, sfc, out string enable, out DataTable dtEnable);
if (dtEnable.Rows.Count == 0)
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", $"{sfc}该工位未配置物料装配接口 却意外调用,将采用离线模式!");
code = "0";
message = "";
return;
}
if (enable == "0")
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", $"{sfc}物料装配接口被禁用,将采用离线模式进行校验!");
code = "0";
message = "";
return;
}
// 获取接口预置参数
MisDataFun.GetApiParams(apiName, opName, out code, out message, out DataTable dt);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 获取接口operation/resource参数
MisDataFun.GetApiParams_operation(opName, out string operation, out string resource, out code, out message);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 准备接口参数
MiAssmebleAndCollectDataForSfc miAssmebleAndCollectDataForSfc = new MiAssmebleAndCollectDataForSfc();
foreach (DataRow row in dt.Rows)
{
string paramName = row["参数名称"].ToString(); // 获取参数名称列的值
object paramValue = row["默认值"]; // 使用默认值
switch (paramName)
{
case "site":
miAssmebleAndCollectDataForSfc.site = paramValue?.ToString() ?? "";
break;
case "resource":
miAssmebleAndCollectDataForSfc.resource = resource;
break;
case "operation":
miAssmebleAndCollectDataForSfc.operation = operation;
break;
case "operationRevision":
miAssmebleAndCollectDataForSfc.operationRevision = paramValue?.ToString() ?? "";
break;
case "user":
miAssmebleAndCollectDataForSfc.user = paramValue?.ToString() ?? "";
break;
case "activityId":
miAssmebleAndCollectDataForSfc.activityId = paramValue?.ToString() ?? "";
break;
case "modeProcessSFC":
if (Enum.TryParse(paramValue?.ToString(), out ModeProcessSfc mode))
{
miAssmebleAndCollectDataForSfc.modeProcessSFC = mode;
}
else
{
miAssmebleAndCollectDataForSfc.modeProcessSFC = ModeProcessSfc.MODE_NONE;
}
break;
case "partialAssembly":
miAssmebleAndCollectDataForSfc.partialAssembly = paramValue?.ToString() ?? "";
break;
}
}
miAssmebleAndCollectDataForSfc.sfc = sfc;
List<InventoryItem> inventoryArray = new List<InventoryItem>();
if (inventory == "")
{
inventoryArray.Add(new InventoryItem() { inventory = barcode, qty = "1" });
}
else
{
AssemblyDataField assemblyDataField1 = new AssemblyDataField()
{
attribute = "ATLID",
value = inventory,
};
AssemblyDataField assemblyDataField2 = new AssemblyDataField()
{
attribute = "EXTERNAL_SERIAL",
value = barcode,
};
List<AssemblyDataField> assemblyDataFields = new List<AssemblyDataField>();
assemblyDataFields.Add(assemblyDataField1);
assemblyDataFields.Add(assemblyDataField2);
inventoryArray.Add(new InventoryItem() { inventory = inventory, qty = "1",assemblyDataFields= assemblyDataFields });
}
miAssmebleAndCollectDataForSfc.inventoryArray = inventoryArray;
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", "调用物料装配接口"); // 只输出结果
ND_Api.miAssmebleAndCollectDataForSfc(apiName, opName, miAssmebleAndCollectDataForSfc, out code, out message);
if(code == "0")
{
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"{sfc}调用物料装配接口成功!");
}
else
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", $"{sfc}调用物料装配接口失败!原因:" + message);
}
}
/// <summary>
/// 批次物料校验接口
/// </summary>
/// <param name="opName"></param>
/// <param name="sfc"></param>
/// <param name="inventory"></param>
/// <param name="component"></param>
/// <param name="code"></param>
/// <param name="message"></param>
public static void Call_miCheckBOMInventory(string opName, string sfc, string inventory, string component, out string code, out string message)
{
string apiName = "miCheckBOMInventory";
// 获取接口是否禁用
MisDataFun.GetApiEnable(apiName, opName, sfc, out string enable, out DataTable dtEnable);
if (dtEnable.Rows.Count == 0)
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", $"{sfc}该工位未配置批次物料校验接口,将采用离线模式!");
code = "500";
message = "该工位未配置批次物料校验接口 却意外调用";
return;
}
if (enable == "0")
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", $"{sfc}批次物料校验接口被禁用!");
code = "0";
message = "";
return;
}
// 获取接口预置参数
MisDataFun.GetApiParams(apiName, opName, out code, out message, out DataTable dt);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 获取接口operation/resource参数
MisDataFun.GetApiParams_operation(opName, out string operation, out string resource, out code, out message);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 准备接口参数
MiCheckBOMInventory miCheckBOMInventory = new MiCheckBOMInventory();
foreach (DataRow row in dt.Rows)
{
string paramName = row["参数名称"].ToString(); // 获取参数名称列的值
object paramValue = row["默认值"]; // 使用默认值
switch (paramName)
{
case "site":
miCheckBOMInventory.site = paramValue?.ToString() ?? "";
break;
case "user":
miCheckBOMInventory.user = paramValue?.ToString() ?? "";
break;
case "activity":
miCheckBOMInventory.activity = paramValue?.ToString() ?? "";
break;
case "resource":
miCheckBOMInventory.resource = resource;
break;
case "operation":
miCheckBOMInventory.operation = operation;
break;
case "operationRevision":
miCheckBOMInventory.operationRevision = paramValue?.ToString() ?? "";
break;
case "modeCheckOperation":
miCheckBOMInventory.modeCheckOperation = paramValue?.ToString() ?? "";
break;
}
}
miCheckBOMInventory.sfc = sfc;
miCheckBOMInventory.inventory = inventory;
miCheckBOMInventory.component = component;
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"{sfc}调用批次物料校验接口");
ND_Api.miCheckBOMInventory(apiName, opName, miCheckBOMInventory, out code, out message);
if (code == "0")
{
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"{sfc}调用批次物料校验接口成功!");
}
else
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", $"{sfc}调用批次物料校验接口失败!原因:" + message);
}
}
/// <summary>
/// 出站收数据接口 带质量数据
/// </summary>
/// <param name="opName"></param>
/// <param name="sfc"></param>
/// <param name="dt_quality"></param>
/// <param name="qualityMask"></param>
/// <param name="code"></param>
/// <param name="message"></param>
public static void Call_dataCollectForSfcEx(string opName, string sfc, DataTable dt_quality, int qualityMask, out string code, out string message)
{
string apiName = "dataCollectForSfcEx";
if(dt_quality.Rows.Count == 0)
{
code = "99999";
message = $"{sfc}出站失败PLCS未查询到质量数据组";
return;
}
// 获取接口是否禁用
MisDataFun.GetApiEnable(apiName, opName, sfc, out string enable, out DataTable dtEnable);
if (dtEnable.Rows.Count == 0)
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", $"{sfc}该工位未配置出站接口,将采用离线模式!");
code = "0";
message = "";
return;
}
// 获取接口出站状态
//MisDataFun.GetApiStatus_EngineID(apiName, opName, sfc, out string initCode, out string initTime);
//if (initCode == "0")
//{
// MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "该产品已经出站,出站时间:" + initTime);
// code = "0";
// message = "";
// return;
//}
//if (initCode == "13921")
//{
// MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "该产品不合格出站 处理完NC后请不合格放行 NC时间" + initTime);
// code = "0";
// message = "";
// return;
//}
if (enable == "0")
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", $"{sfc}出站接口被禁用!");
code = "0";
message = "";
return;
}
// 获取接口预置参数
MisDataFun.GetApiParams(apiName, opName, out code, out message, out DataTable dt);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 获取接口operation/resource参数
MisDataFun.GetApiParams_operation(opName, out string operation, out string resource, out code, out message);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 准备接口参数
DataCollectForSfcEx dataCollectForSfcEx = new DataCollectForSfcEx();
foreach (DataRow row in dt.Rows)
{
string paramName = row["参数名称"].ToString(); // 获取参数名称列的值
object paramValue = row["默认值"]; // 使用默认值
switch (paramName)
{
case "site":
dataCollectForSfcEx.site = paramValue?.ToString() ?? "";
break;
case "dcGroup":
dataCollectForSfcEx.dcGroup = paramValue?.ToString() ?? "";
break;
case "dcGroupRevision":
dataCollectForSfcEx.dcGroupRevision = paramValue?.ToString() ?? "";
break;
case "operation":
dataCollectForSfcEx.operation = operation;
break;
case "operationRevision":
dataCollectForSfcEx.operationRevision = paramValue?.ToString() ?? "";
break;
case "resource":
dataCollectForSfcEx.resource = resource;
break;
case "user":
dataCollectForSfcEx.user = paramValue?.ToString() ?? "";
break;
case "activityId":
dataCollectForSfcEx.activityId = paramValue?.ToString() ?? "";
break;
case "modeProcessSfc":
if (Enum.TryParse(paramValue?.ToString(), out ModeProcessSfc mode))
{
dataCollectForSfcEx.modeProcessSfc = mode;
}
else
{
dataCollectForSfcEx.modeProcessSfc = ModeProcessSfc.MODE_NONE;
}
break;
}
}
dataCollectForSfcEx.sfc = sfc;
if (opName == "OP540")
{
dataCollectForSfcEx.modeProcessSfc = ModeProcessSfc.MODE_NONE;
bool isCapacityTest = false;
foreach (DataRow qualityRow in dt_quality.Rows)
{
if (qualityRow["name"].ToString().IndexOf("FDRL", StringComparison.OrdinalIgnoreCase) >= 0)
{
isCapacityTest = true;
break;
}
}
// 判断是容量还是发包
if (isCapacityTest)
{
dataCollectForSfcEx.dcGroup = "*A"; // 容量测试
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"{sfc}OP540数据采集判断为容量测试");
}
else
{
dataCollectForSfcEx.dcGroup = "*C"; // 发包测试
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"{sfc}OP540数据采集判断为发包测试");
}
}
List<ParametricData> parametricDataArray = new List<ParametricData>();
for (int i = 0; i < dt_quality.Rows.Count; i++)
{
parametricDataArray.Add(new ParametricData()
{
name = dt_quality.Rows[i]["name"].ToString(),
value = dt_quality.Rows[i]["value"].ToString(),
dataType = dt_quality.Rows[i]["dataType"].ToString()
});
}
dataCollectForSfcEx.parametricDataArray = parametricDataArray;
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"{sfc}调用出站接口");
ND_Api.dataCollectForSfcEx(apiName, opName, dataCollectForSfcEx, out code, out message);
if (code == "0")
{
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"{sfc}调用出站接口成功!");
}
else if (code == "13921") // 质量判定不合格 走不合格放行
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", $"{sfc}调用出站接口成功 接口质量判定不合格! " + message);
}
else
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", $"{sfc}调用出站接口失败!原因:" + message);
}
}
/// <summary>
/// 出站收数据接口(测试设备,目前没有用到)
/// </summary>
/// <param name="opName"></param>
/// <param name="sfc"></param>
/// <param name="dt_quality"></param>
/// <param name="qualityMask"></param>
/// <param name="code"></param>
/// <param name="message"></param>
public static void Call_dataCollectForMoudleTest(string opName, string sfc, DataTable dt_quality, int qualityMask, out string code, out string message)
{
string apiName = "dataCollectForMoudleTest";
//if (qualityMask != 1)
//{
// MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "不合格出站,不调用接口!");
// code = "0";
// message = "";
// return;
//}
// 获取接口是否禁用
MisDataFun.GetApiEnable(apiName, opName, sfc, out string enable, out DataTable dtEnable);
if (dtEnable.Rows.Count == 0)
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "该工位未配置出站接口,将采用离线模式!");
code = "500";
message = "该工位未配置出站接口 却意外调用";
return;
}
// 获取接口出站状态
MisDataFun.GetApiStatus_EngineID(apiName, opName, sfc, out string initCode, out string initTime);
if (initCode == "0")
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "该产品已经出站,出站时间:" + initTime);
code = "0";
message = "";
return;
}
enable = "1";
if (enable == "0")
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "出站接口被禁用!");
code = "0";
message = "";
return;
}
// 获取接口预置参数
MisDataFun.GetApiParams(apiName, opName, out code, out message, out DataTable dt);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 获取接口operation/resource参数
MisDataFun.GetApiParams_operation(opName, out string operation, out string resource, out code, out message);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 准备接口参数
DataCollectForMoudleTest dataCollectForMoudleTest = new DataCollectForMoudleTest();
foreach (DataRow row in dt.Rows)
{
string paramName = row["参数名称"].ToString(); // 获取参数名称列的值
object paramValue = row["默认值"]; // 使用默认值
switch (paramName)
{
case "site":
dataCollectForMoudleTest.site = paramValue?.ToString() ?? "";
break;
case "dcGroup":
dataCollectForMoudleTest.dcGroup = paramValue?.ToString() ?? "";
break;
case "dcGroupRevision":
dataCollectForMoudleTest.dcGroupRevision = paramValue?.ToString() ?? "";
break;
case "operation":
dataCollectForMoudleTest.operation = operation;
break;
case "operationRevision":
dataCollectForMoudleTest.operationRevision = paramValue?.ToString() ?? "";
break;
case "resource":
dataCollectForMoudleTest.resource = resource;
break;
case "user":
dataCollectForMoudleTest.user = paramValue?.ToString() ?? "";
break;
case "activityId":
dataCollectForMoudleTest.activityId = paramValue?.ToString() ?? "";
break;
case "modeProcessSfc":
if (Enum.TryParse(paramValue?.ToString(), out ModeProcessSfc mode))
{
dataCollectForMoudleTest.modeProcessSfc = mode;
}
else
{
dataCollectForMoudleTest.modeProcessSfc = ModeProcessSfc.MODE_NONE;
}
break;
}
}
dataCollectForMoudleTest.sfc = sfc;
List<ParametricData> parametricDataArray = new List<ParametricData>();
for (int i = 0; i < dt_quality.Rows.Count; i++)
{
parametricDataArray.Add(new ParametricData() {
name = dt_quality.Rows[i]["name"].ToString(),
value = dt_quality.Rows[i]["value"].ToString(),
dataType = dt_quality.Rows[i]["dataType"].ToString()
});
}
dataCollectForMoudleTest.parametricDataArray = parametricDataArray;
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", "调用出站接口");
ND_Api.dataCollectForMoudleTest(apiName, opName, dataCollectForMoudleTest, out code, out message);
if (code == "0")
{
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", "调用出站接口成功!");
}
else
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", "调用出站接口失败!原因:" + message);
}
}
/// <summary>
/// 出站收数据接口(无质量数据用到)
/// </summary>
/// <param name="opName"></param>
/// <param name="sfc"></param>
/// <param name="qualityMask"></param>
/// <param name="code"></param>
/// <param name="message"></param>
public static void Call_sfcComplete(string opName, string sfc, int qualityMask, out string code, out string message)
{
string apiName = "sfcComplete";
//if (qualityMask != 1)
//{
// MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "不合格出站,不调用接口!");
// code = "0";
// message = "";
// return;
//}
// 获取接口是否禁用
MisDataFun.GetApiEnable(apiName, opName, sfc, out string enable, out DataTable dtEnable);
if (dtEnable.Rows.Count == 0)
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", $"{sfc}该工位未配置 无质量数据 出站接口,却意外调用!");
code = "0";
message = "";
return;
}
// 获取接口出站状态
//MisDataFun.GetApiStatus_EngineID(apiName, opName, sfc, out string initCode, out string initTime);
//if (initCode == "0")
//{
// MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "该产品已经出站,出站时间:" + initTime);
// code = "0";
// message = "";
// return;
//}
if (enable == "0")
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", $"{sfc}出站接口被禁用! 采用离线模式");
code = "0";
message = "";
return;
}
// 获取接口预置参数
MisDataFun.GetApiParams(apiName, opName, out code, out message, out DataTable dt);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 获取接口operation/resource参数
MisDataFun.GetApiParams_operation(opName, out string operation, out string resource, out code, out message);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 准备接口参数
SfcComplete sfcComplete = new SfcComplete();
foreach (DataRow row in dt.Rows)
{
string paramName = row["参数名称"].ToString(); // 获取参数名称列的值
object paramValue = row["默认值"]; // 使用默认值
switch (paramName)
{
case "site":
sfcComplete.site = paramValue?.ToString() ?? "";
break;
case "operation":
sfcComplete.operation = operation;
break;
case "operationRevision":
sfcComplete.operationRevision = paramValue?.ToString() ?? "";
break;
case "resource":
sfcComplete.resource = resource;
break;
case "user":
sfcComplete.user = paramValue?.ToString() ?? "";
break;
}
}
sfcComplete.sfcArray = sfc;
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"{sfc}调用出站接口");
ND_Api.sfcComplete(apiName, opName, sfcComplete, out code, out message);
if (code == "0")
{
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"{sfc}调用出站接口成功!");
}
else
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", $"{sfc}调用出站接口失败!原因:" + message);
}
}
/// <summary>
/// 电芯校验接口
/// </summary>
/// <param name="opName"></param>
/// <param name="inventory"></param>
/// <param name="code"></param>
/// <param name="message"></param>
public static void Call_miCheckInventoryAttributes(string opName, string inventory, out string code, out string message)
{
string apiName = "miCheckInventoryAttributes";
// 获取接口是否禁用
MisDataFun.GetApiEnable(apiName, opName, "", out string enable, out DataTable dtEnable);
if (dtEnable.Rows.Count == 0)
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "该工位未配置电芯校验接口,将采用离线模式!");
code = "500";
message = "该工位未配置电芯校验接口 却意外调用";
return;
}
if (enable == "0")
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "电芯校验接口被禁用,将默认全部合格!");
code = "0";
message = "";
return;
}
// 获取接口预置参数
MisDataFun.GetApiParams(apiName, opName, out code, out message, out DataTable dt);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 获取接口operation/resource参数
MisDataFun.GetApiParams_operation(opName, out string operation, out string resource, out code, out message);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 准备接口参数
MiCheckInventoryAttributes miCheckInventoryAttributes = new MiCheckInventoryAttributes();
foreach (DataRow row in dt.Rows)
{
string paramName = row["参数名称"].ToString(); // 获取参数名称列的值
object paramValue = row["默认值"]; // 使用默认值
switch (paramName)
{
case "sfc":
miCheckInventoryAttributes.sfc = paramValue?.ToString() ?? "";
break;
case "site":
miCheckInventoryAttributes.site = paramValue?.ToString() ?? "";
break;
case "operation":
miCheckInventoryAttributes.operation = operation;
break;
case "operationRevision":
miCheckInventoryAttributes.operationRevision = paramValue?.ToString() ?? "";
break;
case "resource":
miCheckInventoryAttributes.resource = resource;
break;
case "user":
miCheckInventoryAttributes.user = paramValue?.ToString() ?? "";
break;
case "activityId":
miCheckInventoryAttributes.activityId = paramValue?.ToString() ?? "";
break;
case "modeCheckInventory":
if (Enum.TryParse(paramValue?.ToString(), out ModeCheckInventory mode))
{
miCheckInventoryAttributes.modeCheckInventory = mode;
}
else
{
miCheckInventoryAttributes.modeCheckInventory = ModeCheckInventory.MODE_MARK_ONLY;
}
break;
}
}
List<string> inventoryArray = new List<string>();
inventoryArray.Add(inventory);
miCheckInventoryAttributes.inventoryArray = inventoryArray;
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"{inventory}调用电芯校验接口");
ND_Api.miCheckInventoryAttributes(apiName, opName, miCheckInventoryAttributes, out code, out message);
if (code == "0")
{
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"{inventory}调用电芯校验成功!");
}
else
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", $"{inventory}调用电芯校验失败!原因:" + message);
}
}
/// <summary>
/// 电芯K值计算接口目前没有用到OCV设备自己写了
/// </summary>
/// <param name="opName"></param>
/// <param name="inventoryArray"></param>
/// <param name="dt_quality"></param>
/// <param name="code"></param>
/// <param name="message"></param>
/// <param name="checkResult"></param>
public static void Call_cellCustomDCCheck(string opName, string [] inventoryArray, DataTable dt_quality, out string code, out string message, out Dictionary<string, string> checkResult)
{
string apiName = "cellCustomDCCheck";
// 获取接口是否禁用
MisDataFun.GetApiEnable(apiName, opName, "", out string enable, out DataTable dtEnable);
checkResult = new Dictionary<string, string>();
foreach (string key in inventoryArray)
{
checkResult[key] = "0";
}
if (dtEnable.Rows.Count == 0)
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "该工位未配置电芯K值计算接口将采用离线模式");
code = "500";
message = "该工位未配置K值计算接口 却意外调用";
return;
}
if (enable == "0")
{
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", "电芯K值计算接口被禁用将默认全部为0");
code = "0";
message = "";
foreach (string key in inventoryArray)
{
checkResult.Add(key, "0");
}
return;
}
// 获取接口预置参数
MisDataFun.GetApiParams(apiName, opName, out code, out message, out DataTable dt);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 获取接口operation/resource参数
MisDataFun.GetApiParams_operation(opName, out string operation, out string resource, out code, out message);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 准备接口参数
CellCustomDCCheck cellCustomDCCheck = new CellCustomDCCheck();
foreach (DataRow row in dt.Rows)
{
string paramName = row["参数名称"].ToString(); // 获取参数名称列的值
object paramValue = row["默认值"]; // 使用默认值
switch (paramName)
{
case "dcSequence":
cellCustomDCCheck.dcSequence = paramValue?.ToString() ?? "";
break;
case "site":
cellCustomDCCheck.site = paramValue?.ToString() ?? "";
break;
case "operation":
cellCustomDCCheck.operation = operation;
break;
case "Multispec":
cellCustomDCCheck.Multispec = paramValue?.ToString() ?? "";
break;
case "resource":
cellCustomDCCheck.resource = resource;
break;
case "user":
cellCustomDCCheck.user = paramValue?.ToString() ?? "";
break;
}
}
List<Inventory> inventoryList = new List<Inventory>();
foreach (string key in inventoryArray)
{
List<InventoryData> inventoryDatalist = new List<InventoryData>();
for (int i = 0; i < dt_quality.Rows.Count; i++)
{
string EngineID = dt_quality.Rows[i]["EngineID"].ToString();
string name = dt_quality.Rows[i]["name"].ToString();
string value = dt_quality.Rows[i]["value"].ToString();
if (EngineID == key)
{
inventoryDatalist.Add(new InventoryData() { name = name, value = value });
}
}
inventoryList.Add(new Inventory() { inventoryId = key, marking = "", inventoryDatalist = inventoryDatalist });
}
cellCustomDCCheck.inventoryList = inventoryList;
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", "调用电芯接口");
ND_Api.cellCustomDCCheck(apiName, opName, cellCustomDCCheck, out code, out message);
if (code == "0")
{
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", "调用电芯接口成功!");
foreach (string key in inventoryArray)
{
checkResult[key] = "1";
}
}
else
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", "调用电芯接口失败!原因:" + message);
}
}
/// <summary>
/// 电芯K值计算接口单颗电芯版本
/// </summary>
/// <param name="opName">工位名称</param>
/// <param name="inventoryId">单个电芯ID</param>
/// <param name="dt_quality">质量数据表</param>
/// <param name="code">返回代码</param>
/// <param name="message">返回消息</param>
/// <param name="checkResult">检查结果0或1</param>
public static void Call_cellCustomOneDCCheck(string opName, string inventoryId, DataTable dt_quality, out string code, out string message, out string checkResult)
{
string apiName = "cellCustomDCCheck";
checkResult = "0";
// 获取接口是否禁用
MisDataFun.GetApiEnable(apiName, opName, "", out string enable, out DataTable dtEnable);
if (dtEnable.Rows.Count == 0)
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "该工位未配置电芯K值计算接口将采用离线模式");
code = "500";
message = "该工位未配置电芯K值计算接口 却意外调用";
return;
}
if (enable == "0")
{
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", "电芯K值计算接口被禁用将默认为0");
code = "0";
message = "";
checkResult = "0";
return;
}
// 获取接口预置参数
MisDataFun.GetApiParams(apiName, opName, out code, out message, out DataTable dt);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 获取接口operation/resource参数
MisDataFun.GetApiParams_operation(opName, out string operation, out string resource, out code, out message);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 准备接口参数
CellCustomDCCheck cellCustomDCCheck = new CellCustomDCCheck();
foreach (DataRow row in dt.Rows)
{
string paramName = row["参数名称"].ToString();
object paramValue = row["默认值"];
switch (paramName)
{
case "dcSequence":
cellCustomDCCheck.dcSequence = paramValue?.ToString() ?? "";
break;
case "site":
cellCustomDCCheck.site = paramValue?.ToString() ?? "";
break;
case "operation":
cellCustomDCCheck.operation = operation;
break;
case "Multispec":
cellCustomDCCheck.Multispec = paramValue?.ToString() ?? "";
break;
case "resource":
cellCustomDCCheck.resource = resource;
break;
case "user":
cellCustomDCCheck.user = paramValue?.ToString() ?? "";
break;
}
}
// 为单个电芯构建数据
List<InventoryData> inventoryDatalist = new List<InventoryData>();
for (int i = 0; i < dt_quality.Rows.Count; i++)
{
string name = dt_quality.Rows[i]["name"].ToString();
string value = dt_quality.Rows[i]["value"].ToString();
inventoryDatalist.Add(new InventoryData() { name = name, value = value });
}
List<Inventory> inventoryList = new List<Inventory>
{
new Inventory()
{
inventoryId = inventoryId,
marking = "",
inventoryDatalist = inventoryDatalist
}
};
cellCustomDCCheck.inventoryList = inventoryList;
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"调用电芯接口电芯ID{inventoryId}");
ND_Api.cellCustomDCCheck(apiName, opName, cellCustomDCCheck, out code, out message);
if (code == "0")
{
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"调用电芯接口成功电芯ID{inventoryId}");
checkResult = "1";
}
else
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", $"调用电芯接口失败电芯ID{inventoryId},原因:{message}");
checkResult = "0";
}
}
/// <summary>
/// 获取打印配置接口
/// </summary>
/// <param name="opName"></param>
/// <param name="sfc"></param>
/// <param name="code"></param>
/// <param name="message"></param>
/// <param name="labelContent"></param>
public static void Call_getAllLabelContents(string opName, string sfc, out string code, out string message, out LabelContent labelContent)
{
string apiName = "getAllLabelContents";
labelContent = new LabelContent();
// 获取接口是否禁用
MisDataFun.GetApiEnable(apiName, opName, sfc, out string enable, out DataTable dtEnable);
if (dtEnable.Rows.Count == 0)
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "该工位未配置打印配置接口,将采用离线模式!");
code = "500";
message = "该工位未配置打印配置接口 却意外调用";
return;
}
if (enable == "0")
{
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", "打印配置接口被禁用!");
code = "0";
message = "";
labelContent.Sfc = sfc;
LabelField labelField1 = new LabelField() { Field="TEXT1",Value="1P4S",Formula= "#ITEM" };
LabelField labelField2 = new LabelField() { Field="TEXT2",Value="LFP",Formula= "#ITEM" };
LabelField labelField3 = new LabelField() { Field="TEXT3",Value= "P000103005", Formula= "#ITEM" };
if(opName == "OP250")
{
labelField1 = new LabelField() { Field = "TEXT1", Value = "PDC2.0", Formula = "#ITEM" };
labelField2 = new LabelField() { Field = "TEXT2", Value = "PACK", Formula = "#ITEM" };
labelField3 = new LabelField() { Field = "TEXT3", Value = "P000107123", Formula = "#ITEM" }; ;
}
if (opName == "OP490-3")
{
labelContent.LabelFields.Add(new LabelField() { Field = "TEXT9", Value = "999", Formula = "#ITEM" });
labelContent.LabelFields.Add(new LabelField() { Field = "TEXT14", Value = "999", Formula = "#ITEM" });
labelContent.LabelFields.Add(new LabelField() { Field = "TEXT16", Value = "999", Formula = "#ITEM" });
}
labelContent.LabelFields.Add(labelField1);
labelContent.LabelFields.Add(labelField2);
labelContent.LabelFields.Add(labelField3);
return;
}
// 获取接口预置参数
MisDataFun.GetApiParams(apiName, opName, out code, out message, out DataTable dt);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 准备接口参数
GetAllLabelContents getAllLabelContents = new GetAllLabelContents();
foreach (DataRow row in dt.Rows)
{
string paramName = row["参数名称"].ToString(); // 获取参数名称列的值
object paramValue = row["默认值"]; // 使用默认值
switch (paramName)
{
case "site":
getAllLabelContents.site = paramValue?.ToString() ?? "";
break;
case "item":
getAllLabelContents.item = paramValue?.ToString() ?? "";
break;
case "languageCode":
getAllLabelContents.languageCode = paramValue?.ToString() ?? "";
break;
case "Y":
getAllLabelContents.Y = paramValue?.ToString() ?? "";
break;
case "activity":
getAllLabelContents.activity = paramValue?.ToString() ?? "";
break;
}
}
getAllLabelContents.sfcList = sfc;
if (opName == "OP490-3") getAllLabelContents.Y = "2";
if (opName.StartsWith("OP450")) getAllLabelContents.Y = "3";
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", "调用打印配置接口");
ND_Api.getAllLabelContents(apiName, opName, getAllLabelContents,out string responseContent, out code, out message);
if (code == "0")
{
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", "调用打印配置接口成功!");
List<LabelContent> labelContents = ParseLabelContents(responseContent);
if(labelContents.Count > 0)
{
labelContent = labelContents[0];
}
}
else
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", "调用打印配置接口失败!原因:" + message);
}
}
/// <summary>
/// 解析打印配置
/// </summary>
/// <param name="xmlResponse"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public static List<LabelContent> ParseLabelContents(string xmlResponse)
{
// 1. 定义所有用到的命名空间
XNamespace soapEnv = "http://schemas.xmlsoap.org/soap/envelope/";
XNamespace ns2 = "http://miGetAllLabelContentsBySfc.ws.atlmes.com/";
XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
// 2. 加载XML并忽略注释避免干扰
var doc = XDocument.Parse(xmlResponse, LoadOptions.SetLineInfo);
// 3. 获取SOAP Body下的所有responseList节点必须指定完整路径
var returnElement = doc.Element(soapEnv + "Envelope")?
.Element(soapEnv + "Body")?
.Element(ns2 + "getAllLabelContentsResponse")?
.Element("return");
if (returnElement == null)
throw new Exception("Invalid XML: Missing SOAP Envelope/Body/return structure");
var result = new List<LabelContent>();
// 4. 遍历每个responseList
foreach (var response in returnElement.Elements("responseList"))
{
var labelContent = new LabelContent
{
// 注意子节点不需要命名空间因为它们继承父节点的ns2
Code = (string)response.Element("code") ?? string.Empty,
Message = (string)response.Element("message") ?? string.Empty,
TemplateVersion = (string)response.Element("templateVersion") ?? string.Empty,
Sfc = (string)response.Element("sfc") ?? string.Empty,
SysPn = (string)response.Element("sysPn") ?? string.Empty
};
// 5. 提取labelListArray中的字段
foreach (var field in response.Elements("labelListArray"))
{
labelContent.LabelFields.Add(new LabelField
{
Field = (string)field.Element("field") ?? string.Empty,
Value = (string)field.Element("value") ?? string.Empty,
Formula = (string)field.Element("formula") ?? string.Empty
});
}
result.Add(labelContent);
}
return result;
}
public static void Call_dataCollectForResourceInspect(string opName, DataTable dt_quality, out string code, out string message)
{
string apiName = "dataCollectForResourceInspectTask";
// 获取接口是否禁用
MisDataFun.GetApiEnable(apiName, opName, "", out string enable, out DataTable dtEnable);
//if (dtEnable.Rows.Count == 0)
//{
// MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "该工位未配置首件数据上传接口,将采用离线模式!");
// code = "0";
// message = "";
// return;
//}
//if (enable == "0")
//{
// MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", "出站接口被禁用!");
// code = "0";
// message = "";
// return;
//}
// 获取接口预置参数
MisDataFun.GetApiParams(apiName, opName, out code, out message, out DataTable dt);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 获取接口operation/resource参数
MisDataFun.GetApiParams_operation(opName, out string operation, out string resource, out code, out message);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 准备接口参数
DataCollectForResourceInspect dataCollectForResourceInspect = new DataCollectForResourceInspect();
foreach (DataRow row in dt.Rows)
{
string paramName = row["参数名称"].ToString(); // 获取参数名称列的值
object paramValue = row["默认值"]; // 使用默认值
switch (paramName)
{
case "site":
dataCollectForResourceInspect.site = paramValue?.ToString() ?? "";
break;
case "dcGroup":
dataCollectForResourceInspect.dcGroup = paramValue?.ToString() ?? "";
break;
case "dcMode":
dataCollectForResourceInspect.dcMode = paramValue?.ToString() ?? "";
break;
case "dcGroupRevision":
dataCollectForResourceInspect.dcGroupRevision = paramValue?.ToString() ?? "";
break;
case "executeMode":
dataCollectForResourceInspect.executeMode = paramValue?.ToString() ?? "";
break;
case "operation":
dataCollectForResourceInspect.operation = operation;
break;
case "operationRevision":
dataCollectForResourceInspect.operationRevision = paramValue?.ToString() ?? "";
break;
case "resource":
dataCollectForResourceInspect.resource = resource;
break;
case "user":
dataCollectForResourceInspect.user = paramValue?.ToString() ?? "";
break;
case "dcSequence":
dataCollectForResourceInspect.dcSequence = paramValue?.ToString() ?? "";
break;
}
}
int EngineTypeID = Convert.ToInt32(dt_quality.Rows[0]["产品代码"]);
if (opName == "OP320")
{
if (EngineTypeID == 2) dataCollectForResourceInspect.dcSequence = "B1";
if (EngineTypeID == 3) dataCollectForResourceInspect.dcSequence = "B2";
if (EngineTypeID == 4) dataCollectForResourceInspect.dcSequence = "B3";
if (EngineTypeID == 5) dataCollectForResourceInspect.dcSequence = "B5";
if (EngineTypeID == 6) dataCollectForResourceInspect.dcSequence = "B4";
if (EngineTypeID == 7) dataCollectForResourceInspect.dcSequence = "B4";
}
List<ParametricData> parametricDataArray = new List<ParametricData>();
for (int i = 0; i < dt_quality.Rows.Count; i++)
{
parametricDataArray.Add(new ParametricData()
{
name = dt_quality.Rows[i]["检测项目代码"].ToString(),
value = dt_quality.Rows[i]["测量值"].ToString(),
dataType = dt_quality.Rows[i]["dataType"].ToString()
});
}
dataCollectForResourceInspect.parametricDataArray = parametricDataArray;
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", "调用首件数据上传接口");
ND_Api.dataCollectForResourceInspect(apiName, opName, dataCollectForResourceInspect, out code, out message);
if (code == "0")
{
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", "调用首件数据上传接口成功!");
}
else
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", "调用首件数据上传接口失败!原因:" + message);
throw new Exception("首件数据上传失败!原因:" + message);
}
}
/// <summary>
/// 获取产品生产状态
/// </summary>
/// <param name="barcode">产品条码</param>
/// <param name="statusBO">返回的状态代码</param>
/// <param name="operation">返回的操作编号</param>
/// <param name="productStatus">转换后的产品状态</param>
/// <param name="opStation">转换后的工位号</param>
/// <param name="code">返回码</param>
/// <param name="message">返回消息</param>
public static void Call_getSfcStatusAndOperation(string barcode, out string statusBO, out string operation, out string productStatus, out string opStation, out string code, out string message)
{
statusBO = "";
operation = "";
productStatus = "";
opStation = "";
string apiName = "getSfcStatusAndOperation";
string opName = "API";
// 获取接口是否禁用
MisDataFun.GetApiEnable(apiName, opName, "", out string enable, out DataTable dtEnable);
if (dtEnable.Rows.Count == 0)
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", $"{barcode}该接口未配置,无法查询产品状态!");
code = "500";
message = "该接口未配置";
return;
}
if (enable == "0")
{
MisDataFun.LogRecording_OP(opName, "WARNING", "MOM", $"{barcode}产品状态查询接口被禁用!");
code = "500";
message = "接口被禁用";
return;
}
// 获取接口预置参数
MisDataFun.GetApiParams(apiName, opName, out code, out message, out DataTable dt);
if (code != "0")
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", message);
return;
}
// 准备接口参数
GetSfcStatusAndOperationParams getSfcStatusAndOperationParams = new GetSfcStatusAndOperationParams();
foreach (DataRow row in dt.Rows)
{
string paramName = row["参数名称"].ToString();
object paramValue = row["默认值"];
switch (paramName)
{
case "site":
getSfcStatusAndOperationParams.site = paramValue?.ToString() ?? "";
break;
}
}
getSfcStatusAndOperationParams.barcode = barcode;
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"调用产品状态查询接口barcode={barcode}");
ND_Api.getSfcStatusAndOperation(apiName, opName, getSfcStatusAndOperationParams, out string responseContent, out code, out message);
if (code == "0")
{
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", $"调用产品状态查询接口成功barcode={barcode}");
// 解析XML提取 Status_BO 和 Operation
try
{
System.Xml.Linq.XDocument doc = System.Xml.Linq.XDocument.Parse(responseContent);
foreach (var element in doc.Descendants())
{
if (element.Name.LocalName == "Status_BO")
{
statusBO = element.Value;
}
if (element.Name.LocalName == "Operation")
{
operation = element.Value;
}
}
// 调用存储过程转换数据
if (!string.IsNullOrEmpty(statusBO) && !string.IsNullOrEmpty(operation))
{
System.Data.SqlClient.SqlParameter[] param = new System.Data.SqlClient.SqlParameter[2];
param[0] = new System.Data.SqlClient.SqlParameter("@产品状态代码", statusBO);
param[1] = new System.Data.SqlClient.SqlParameter("@操作编号", operation);
DataLinkMesWork1.DataAccess.ExecuteStoredProcedure("MOM_产品状态转换_查询", ref param, out DataTable dtResult, out string errorMessage);
if (string.IsNullOrEmpty(errorMessage) && dtResult.Rows.Count > 0)
{
productStatus = dtResult.Rows[0]["产品状态"]?.ToString() ?? "";
opStation = dtResult.Rows[0]["工位号"]?.ToString() ?? "";
}
else if (!string.IsNullOrEmpty(errorMessage))
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", $"调用存储过程转换失败:{errorMessage}");
}
}
}
catch (Exception ex)
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", $"解析返回结果失败:{ex.Message}");
}
}
else
{
MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", $"调用产品状态查询接口失败barcode={barcode},原因:" + message);
}
}
}
}