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 { /// /// 释放模组/PACK号 /// /// /// /// /// 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); } } /// /// 进站接口(目前没有用到) /// /// /// /// /// 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); } } /// /// 进站接口 /// /// /// /// /// 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); } } /// /// 进站接口(目前没有用到) /// /// /// /// /// 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); } } /// /// 物料装配接口 /// /// /// /// /// /// /// 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 inventoryArray = new List(); 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 assemblyDataFields = new List(); 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); } } /// /// 批次物料校验接口 /// /// /// /// /// /// /// 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); } } /// /// 出站收数据接口 带质量数据 /// /// /// /// /// /// /// 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 parametricDataArray = new List(); 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); } } /// /// 出站收数据接口(测试设备,目前没有用到) /// /// /// /// /// /// /// 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 parametricDataArray = new List(); 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); } } /// /// 出站收数据接口(无质量数据用到) /// /// /// /// /// /// 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); } } /// /// 电芯校验接口 /// /// /// /// /// 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 inventoryArray = new List(); 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); } } /// /// 电芯K值计算接口(目前没有用到,OCV设备自己写了) /// /// /// /// /// /// /// public static void Call_cellCustomDCCheck(string opName, string [] inventoryArray, DataTable dt_quality, out string code, out string message, out Dictionary checkResult) { string apiName = "cellCustomDCCheck"; // 获取接口是否禁用 MisDataFun.GetApiEnable(apiName, opName, "", out string enable, out DataTable dtEnable); checkResult = new Dictionary(); 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 inventoryList = new List(); foreach (string key in inventoryArray) { List inventoryDatalist = new List(); 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); } } /// /// 电芯K值计算接口(单颗电芯版本) /// /// 工位名称 /// 单个电芯ID /// 质量数据表 /// 返回代码 /// 返回消息 /// 检查结果(0或1) 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 inventoryDatalist = new List(); 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 inventoryList = new List { 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"; } } /// /// 获取打印配置接口 /// /// /// /// /// /// 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"; 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 labelContents = ParseLabelContents(responseContent); if(labelContents.Count > 0) { labelContent = labelContents[0]; } } else { MisDataFun.LogRecording_OP(opName, "ERROR", "MOM", "调用打印配置接口失败!原因:" + message); } } /// /// 解析打印配置 /// /// /// /// public static List 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(); // 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 "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 || EngineTypeID == 6 || EngineTypeID == 7) dataCollectForResourceInspect.dcSequence = "B1"; if (EngineTypeID == 3) dataCollectForResourceInspect.dcSequence = "B2"; if (EngineTypeID == 4) dataCollectForResourceInspect.dcSequence = "B3"; } List parametricDataArray = new List(); 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); } } /// /// 获取产品生产状态 /// /// 产品条码 /// 返回的状态代码 /// 返回的操作编号 /// 转换后的产品状态 /// 转换后的工位号 /// 返回码 /// 返回消息 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); } } } }