From 60bb545b1d0fa24a965e2e38f581d8f7c7201886 Mon Sep 17 00:00:00 2001 From: 14278/caihao <572156462@qq.com> Date: Mon, 22 Jan 2024 11:17:12 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BF=AE=E3=80=91=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SRC/MESEAI/EAICws/EAICws/EAIws_C.csproj | 4 + SRC/MESEAI/EAICws/EAICws/modERP.cs | 335 ++++++++++++++++++++++++ SRC/MESEAI/EAICws/EAICws/modWS.cs | 19 ++ 3 files changed, 358 insertions(+) diff --git a/SRC/MESEAI/EAICws/EAICws/EAIws_C.csproj b/SRC/MESEAI/EAICws/EAICws/EAIws_C.csproj index bf80049..079c587 100644 --- a/SRC/MESEAI/EAICws/EAICws/EAIws_C.csproj +++ b/SRC/MESEAI/EAICws/EAICws/EAIws_C.csproj @@ -71,6 +71,10 @@ ..\..\..\MES_S_DLL\iMESConst.dll False + + False + ..\..\..\MES_S_DLL\kcEQP.dll + False diff --git a/SRC/MESEAI/EAICws/EAICws/modERP.cs b/SRC/MESEAI/EAICws/EAICws/modERP.cs index 8034ece..8f610a6 100644 --- a/SRC/MESEAI/EAICws/EAICws/modERP.cs +++ b/SRC/MESEAI/EAICws/EAICws/modERP.cs @@ -4,6 +4,8 @@ using iMESCore.Settings; using System.Collections; using System.Collections.Generic; using static iMESCore.Base.iMESConst; +using System.Xml; +using Microsoft.VisualBasic.CompilerServices; namespace EAIws_C { @@ -115,6 +117,339 @@ namespace EAIws_C } + public static string funCreateEquipment(string InXml) + { + string funCreateEquipmentRet = default(string); + var xmlDoc = new XmlDocument(); // 用以讀取Xml字串 + string OutXml = null; + + string strIdentity = string.Empty; // Identity XML字串 + string strResult = "fail"; // Result XML字串 + var strException = new List(); // Exception XML字串 + var strMessage = new List(); // Message XML字串 + string strKeyValue = string.Empty; // TransactionLot KeyValue + string strMode = string.Empty; // Mode + + try + { + + try + { + // 讀取InXml字串 + xmlDoc.LoadXml(InXml); + } + catch (Exception ex) + { + combineException(ref strException, sysmsg: ex.Message, mesmsg: "[%InXmlError%]", stack: ex.StackTrace); + goto exitFun; + } + + // 組Identity字串 + try + { + strIdentity = modWS.CombineXMLIdentity(xmlDoc); + } + catch (Exception ex) + { + combineException(ref strException, sysmsg: ex.Message, mesmsg: "[%IndentityError%]", stack: ex.StackTrace); + goto exitFun; + } + + // 2019/06/14 Shih Kai, Mantis:0058578, 修正ERP設備整合,若ERP有傳值才進行更新 + // 調整初始值,配合後端改用defString,defInteger, 在修改時才不會異動到已經維護的欄位資料 + // 若ERP未傳入,在新增資料時判斷若未傳入才帶入預設值 + + string EquipmentNo = string.Empty; + string EquipmentName = defString; + string EquipmentType = defString; + string VendorNo = defString; // Defautl N/A + int Capacity = defInteger; // Defautl -1 + string ModelNo = defString; + string Description = defString; + string Creator = "TP"; // Defautl TP + var CreateDate = DateTime.Now; // Default Today + string EngineerGroupNo = defString; // Defautl N/A" + string AssetNo = defString; + string EquipmentClass = defString; + int LoadPort = defInteger; // Defautl 0 + int AutoFlag = defInteger; // Defautl 0 + string EAController = defString; // Defautl N/A + int EQPRecipe = defInteger; // Defautl 0 + string QCListNo = defString; + + // EquipmentNo + if (xmlDoc.DocumentElement.GetElementsByTagName("equipmentno").Count > 0 && xmlDoc.GetElementsByTagName("equipmentno").Item(0).SelectNodes("value").Count > 0) + + { + string argstrInput = xmlDoc.DocumentElement.GetElementsByTagName("equipmentno").Item(0).SelectNodes("value").Item(0).InnerText; + EquipmentNo = modWS.CInput_Singlequotation(argstrInput); + xmlDoc.DocumentElement.GetElementsByTagName("equipmentno").Item(0).SelectNodes("value").Item(0).InnerText = argstrInput; + } + + // EquipmentName + if (xmlDoc.DocumentElement.GetElementsByTagName("equipmentname").Count > 0 && xmlDoc.GetElementsByTagName("equipmentname").Item(0).SelectNodes("value").Count > 0) + + { + string argstrInput1 = xmlDoc.DocumentElement.GetElementsByTagName("equipmentname").Item(0).SelectNodes("value").Item(0).InnerText; + EquipmentName = modWS.CInput_Singlequotation(argstrInput1); + xmlDoc.DocumentElement.GetElementsByTagName("equipmentname").Item(0).SelectNodes("value").Item(0).InnerText = argstrInput1; + } + + // EquipmentType + if (xmlDoc.DocumentElement.GetElementsByTagName("equipmenttype").Count > 0 && xmlDoc.GetElementsByTagName("equipmenttype").Item(0).SelectNodes("value").Count > 0) + + { + string argstrInput2 = xmlDoc.DocumentElement.GetElementsByTagName("equipmenttype").Item(0).SelectNodes("value").Item(0).InnerText; + EquipmentType = modWS.CInput_Singlequotation(argstrInput2); + xmlDoc.DocumentElement.GetElementsByTagName("equipmenttype").Item(0).SelectNodes("value").Item(0).InnerText = argstrInput2; + } + + // VendorNo + if (xmlDoc.DocumentElement.GetElementsByTagName("vendorno").Count > 0 && xmlDoc.GetElementsByTagName("vendorno").Item(0).SelectNodes("value").Count > 0) + + { + string argstrInput3 = xmlDoc.DocumentElement.GetElementsByTagName("vendorno").Item(0).SelectNodes("value").Item(0).InnerText; + VendorNo = modWS.CInput_Singlequotation(argstrInput3); + xmlDoc.DocumentElement.GetElementsByTagName("vendorno").Item(0).SelectNodes("value").Item(0).InnerText = argstrInput3; + } + + // Capacity + if (xmlDoc.DocumentElement.GetElementsByTagName("capacity").Count > 0 && xmlDoc.GetElementsByTagName("capacity").Item(0).SelectNodes("value").Count > 0) + + Capacity = Conversions.ToInteger(xmlDoc.DocumentElement.GetElementsByTagName("capacity").Item(0).SelectNodes("value").Item(0).InnerText); + + // ModelNo + if (xmlDoc.DocumentElement.GetElementsByTagName("modelno").Count > 0 && xmlDoc.GetElementsByTagName("modelno").Item(0).SelectNodes("value").Count > 0) + + { + string argstrInput4 = xmlDoc.DocumentElement.GetElementsByTagName("modelno").Item(0).SelectNodes("value").Item(0).InnerText; + ModelNo = modWS.CInput_Singlequotation(argstrInput4); + xmlDoc.DocumentElement.GetElementsByTagName("modelno").Item(0).SelectNodes("value").Item(0).InnerText = argstrInput4; + } + + // Description + if (xmlDoc.DocumentElement.GetElementsByTagName("description").Count > 0 && xmlDoc.GetElementsByTagName("description").Item(0).SelectNodes("value").Count > 0) + + { + string argstrInput5 = xmlDoc.DocumentElement.GetElementsByTagName("description").Item(0).SelectNodes("value").Item(0).InnerText; + Description = modWS.CInput_Singlequotation(argstrInput5); + xmlDoc.DocumentElement.GetElementsByTagName("description").Item(0).SelectNodes("value").Item(0).InnerText = argstrInput5; + } + + // EngineerGroupNo + if (xmlDoc.DocumentElement.GetElementsByTagName("engineergroupno").Count > 0 && xmlDoc.GetElementsByTagName("engineergroupno").Item(0).SelectNodes("value").Count > 0) + + { + string argstrInput6 = xmlDoc.DocumentElement.GetElementsByTagName("engineergroupno").Item(0).SelectNodes("value").Item(0).InnerText; + EngineerGroupNo = modWS.CInput_Singlequotation(argstrInput6); + xmlDoc.DocumentElement.GetElementsByTagName("engineergroupno").Item(0).SelectNodes("value").Item(0).InnerText = argstrInput6; + } + + // AssetNo + if (xmlDoc.DocumentElement.GetElementsByTagName("assetno").Count > 0 && xmlDoc.GetElementsByTagName("assetno").Item(0).SelectNodes("value").Count > 0) + + { + string argstrInput7 = xmlDoc.DocumentElement.GetElementsByTagName("assetno").Item(0).SelectNodes("value").Item(0).InnerText; + AssetNo = modWS.CInput_Singlequotation(argstrInput7); + xmlDoc.DocumentElement.GetElementsByTagName("assetno").Item(0).SelectNodes("value").Item(0).InnerText = argstrInput7; + } + + // EquipmentClass + if (xmlDoc.DocumentElement.GetElementsByTagName("equipmentclass").Count > 0 && xmlDoc.GetElementsByTagName("equipmentclass").Item(0).SelectNodes("value").Count > 0) + + { + string argstrInput8 = xmlDoc.DocumentElement.GetElementsByTagName("equipmentclass").Item(0).SelectNodes("value").Item(0).InnerText; + EquipmentClass = modWS.CInput_Singlequotation(argstrInput8); + xmlDoc.DocumentElement.GetElementsByTagName("equipmentclass").Item(0).SelectNodes("value").Item(0).InnerText = argstrInput8; + } + + // LoadPort + if (xmlDoc.DocumentElement.GetElementsByTagName("loadpart").Count > 0 && xmlDoc.GetElementsByTagName("loadpart").Item(0).SelectNodes("value").Count > 0) + + LoadPort = Conversions.ToInteger(xmlDoc.DocumentElement.GetElementsByTagName("loadpart").Item(0).SelectNodes("value").Item(0).InnerText); + + // AutoFlag + if (xmlDoc.DocumentElement.GetElementsByTagName("autoflag").Count > 0 && xmlDoc.GetElementsByTagName("autoflag").Item(0).SelectNodes("value").Count > 0) + + AutoFlag = Conversions.ToInteger(xmlDoc.DocumentElement.GetElementsByTagName("autoflag").Item(0).SelectNodes("value").Item(0).InnerText); + + // EAController + if (xmlDoc.DocumentElement.GetElementsByTagName("eacontroller").Count > 0 && xmlDoc.GetElementsByTagName("eacontroller").Item(0).SelectNodes("value").Count > 0) + + { + string argstrInput9 = xmlDoc.DocumentElement.GetElementsByTagName("eacontroller").Item(0).SelectNodes("value").Item(0).InnerText; + EAController = modWS.CInput_Singlequotation(argstrInput9); + xmlDoc.DocumentElement.GetElementsByTagName("eacontroller").Item(0).SelectNodes("value").Item(0).InnerText = argstrInput9; + } + + // EQPRecipe + if (xmlDoc.DocumentElement.GetElementsByTagName("eqprecipe").Count > 0 && xmlDoc.GetElementsByTagName("eqprecipe").Item(0).SelectNodes("value").Count > 0) + + EQPRecipe = Conversions.ToInteger(xmlDoc.DocumentElement.GetElementsByTagName("eqprecipe").Item(0).SelectNodes("value").Item(0).InnerText); + + // QCListNo + if (xmlDoc.DocumentElement.GetElementsByTagName("qclistno").Count > 0 && xmlDoc.GetElementsByTagName("qclistno").Item(0).SelectNodes("value").Count > 0) + + { + string argstrInput10 = xmlDoc.DocumentElement.GetElementsByTagName("qclistno").Item(0).SelectNodes("value").Item(0).InnerText; + QCListNo = modWS.CInput_Singlequotation(argstrInput10); + xmlDoc.DocumentElement.GetElementsByTagName("qclistno").Item(0).SelectNodes("value").Item(0).InnerText = argstrInput10; + } + + // Creator + Creator = modWS.GetXMLIdentityNode(xmlDoc, "curuserno"); + + // 檢查必要性欄位 + if (string.IsNullOrEmpty(EquipmentNo)) + combineException(ref strException, mesmsg: "[%EquipmentNoEmpty%]"); + if ((EquipmentType ?? "") == defString) + combineException(ref strException, mesmsg: "[%EquipmentTypeEmpty%]"); + if ((VendorNo ?? "") == defString) + combineException(ref strException, mesmsg: "[%VendorNoEmpty%]"); + + // KeyValue + strKeyValue = EquipmentNo; + + // ----- 判斷設備是否存在 ----- + using (var objEQP = new kcEQP.clsEQPBasis()) + { + var dr = objEQP.GetEquipmentBasis(EquipmentNo.ToUpper()); + + if (dr["EquipmentNo"] is DBNull == false) + { + // EquipmentNo已存在--Edit + + // 2019/06/14 Shih Kai, Mantis:0058578, 因設備類別EquipmentType為ERP必傳入欄位,必定會有值 + // 故EquipmentType重新給於defString, 修改時不調整設備類別 + EquipmentType = defString; + + // '呼叫Dll執行 + strMode = "Edit"; + //clsEQP.editEquipment(EquipmentNo, EquipmentType, VendorNo, Capacity, ModelNo, Description, Creator, CreateDate, EngineerGroupNo, AssetNo, EquipmentClass, LoadPort, AutoFlag, EAController, EQPRecipe, QCListNo, strMessage, strException, EquipmentName); + } + else + { + // 2019/06/14 Shih Kai, Mantis:0058578, 修正ERP設備整合,若ERP未傳入才給予預設值 + if ((VendorNo ?? "") == defString) + VendorNo = "N/A"; // Defautl N/A + if (Capacity == defInteger) + Capacity = -1; // Defautl -1 + if ((EngineerGroupNo ?? "") == defString) + EngineerGroupNo = "N/A"; // Defautl N/A + if (LoadPort == defInteger) + LoadPort = 0; // Defautl 0 + if (AutoFlag == defInteger) + AutoFlag = 0; // Defautl 0 + if ((EAController ?? "") == defString) + EAController = "N/A"; // Defautl N/A + if (EQPRecipe == defInteger) + EQPRecipe = 0; // Defautl 0 + + + // '呼叫Dll執行 + strMode = "Add"; + clsEQP.addEquipment(EquipmentNo, EquipmentType, VendorNo, Capacity, ModelNo, Description, Creator, CreateDate, EngineerGroupNo, AssetNo, EquipmentClass, LoadPort, AutoFlag, EAController, EQPRecipe, QCListNo, strMessage: strMessage, strException: strException, EquipmentName: EquipmentName); + } + } + + // 判斷成功與否 + if (strException.Count > 0) + goto exitFun; + + strResult = "success"; + + exitFun: + ; + } + + + catch (Exception ex) + { + combineException(ref strException, sysmsg: ex.Message, mesmsg: "[%CreateEquipmentFail%]", stack: ex.StackTrace); + } + + finally + { + + // 將各部份之XML字串組起來並傳出 + string argReturnValue = null; + OutXml = modWS.CombineXMLResponse(strIdentity, argReturnValue, strException, strResult, strMessage); + + // 紀錄Transaction Log + //addTransactionLog_ErrorCode(modWS.GetXMLIdentityNode(xmlDoc, "transactionid"), modWS.GetXMLIdentityNode(xmlDoc, "moduleid"), modWS.GetXMLIdentityNode(xmlDoc, "functionid"), modWS.GetXMLIdentityNode(xmlDoc, "computername"), modWS.GetXMLIdentityNode(xmlDoc, "curuserno"), modWS.GetXMLIdentityNode(xmlDoc, "sendtime"), strResult, strKeyValue, strMessage, strException, InXml, OutXml, "CreateEquipment(" + strMode + ")", Conversions.ToInteger(AppSettings["keepLog"]), Conversions.ToInteger(AppSettings["keepXML"]), LogClass: "ERP"); + + funCreateEquipmentRet = OutXml; + + } + + return funCreateEquipmentRet; + + } + + + #region --- Combine (Exception, Message) --- + + public static bool combineException(ref List strException, string code = null, string sysmsg = null, string mesmsg = null, string stack = null) + { + bool result = false; + try + { + var al = new ArrayList(); + al.Add(code); + al.Add(sysmsg); + al.Add(mesmsg); + al.Add(stack); + strException.Add(al); + result = true; + } + catch (Exception ex) + { + result = false; + } + + return default(bool); + + } + + public static bool combineMessage(ref List strMessage, string mcode = null, string mtype = null, string mmsg = null) + { + bool result = false; + try + { + var al = new ArrayList(); + al.Add(mcode); + al.Add(mtype); + al.Add(mmsg); + strMessage.Add(al); + result = true; + } + catch (Exception ex) + { + result = false; + } + + return default(bool); + } + + public static bool combineFileMessage(ref List aryFileMessage, string mmsg) + { + bool result = false; + + try + { + var al = new ArrayList(); + al.Add(mmsg); + aryFileMessage.Add(al); + result = true; + } + catch (Exception ex) + { + result = false; + } + + return result; + } + #endregion } } \ No newline at end of file diff --git a/SRC/MESEAI/EAICws/EAICws/modWS.cs b/SRC/MESEAI/EAICws/EAICws/modWS.cs index a642f68..be00277 100644 --- a/SRC/MESEAI/EAICws/EAICws/modWS.cs +++ b/SRC/MESEAI/EAICws/EAICws/modWS.cs @@ -1468,6 +1468,25 @@ namespace EAIws_C } #endregion + public static string CInput_Singlequotation(string strInput) + { + string CInput_SinglequotationRet = strInput; + // 若為空字串,導致傳入資料變為Nothing + if (string.IsNullOrEmpty(strInput)) + return CInput_SinglequotationRet; + + // 將傳入值內的單引號轉換為可存入資料庫的格式 + // 傳入值: strInput包含特殊字元的字串 + // 傳回值: 將特殊字元變更為代替符號的字串 + + // 轉換 ' 為 '' (單引號轉為兩個單引號) + CInput_SinglequotationRet = Strings.Replace(strInput, "'", "''"); + return CInput_SinglequotationRet; + + // 17046 20230110 因EAI等接口,已接收InXML字串做 xmlDoc.LoadXml(InXml)解析通過,因此不需再各function做CInput,會將轉換後特殊字又處理一次造成寫入後端錯誤, + // 增加一支轉換函式CInput_Singlequotation,僅做單引號轉換,EAI接口中原本呼叫CInput的地方取代為CInput_Singlequotation + + } } } \ No newline at end of file