using CpTesterPlatform.CpLogUtil; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Windows.Forms.Design; using System.Xml.Linq; using SystemX.Net; using SystemX.Net.BaseProtocol; using SystemX.Net.DB; using SystemX.Net.Platform.Common.ExtensionMethods; using static SystemX.Net.Platform.Common.Util.LogMessage; namespace SystemX.Common.Log.LSU { public static class CpLogStoreData { public static string vLSaveTableName = string.Empty; public static bool vLSaveDetailTable = false; public static List>> ExtrctInfo = null; public static string vLLogAccessKey = string.Empty; public static string vLProcNo = string.Empty; public static string vLStation = string.Empty; public static string vLPosition = string.Empty; public static string vLPalletNumber = string.Empty; public static string vLPalletID = string.Empty; public static string vLPIndex = string.Empty; public static string vLProdNo = string.Empty; public static string vLProdID = string.Empty; public static string vLSensorType = string.Empty; public static string vLStatus = string.Empty; public static string vLTestID = string.Empty; public static string vLResult = string.Empty; public static string vLTestDuration = string.Empty; public static string[] vLVal_Meas; public static void SetMeasLength(int iCnt) { vLVal_Meas = new string[iCnt]; Array.Clear(vLVal_Meas, 0, iCnt); } public static void SetMeasValue(int iPos, string strValue) { vLVal_Meas[iPos] = strValue; } public static string GetMeasValue(int iPos) { return vLVal_Meas[iPos]; } public static void SetCpLogHeaderData(CpLogHeader cpLh) { vLStation = (cpLh.CHANNEL).Trim(); vLPosition = (cpLh.WORK_POSITION).Trim(); vLStatus = (cpLh.CONTROL + @"/" + cpLh.TYPE).Trim(); vLResult = (cpLh.RESULT).Trim(); var vTestDuration = (cpLh.DURATION).Trim(); double dGetDurtion = 0; double.TryParse(vTestDuration.ToString().Trim(), out dGetDurtion); dGetDurtion /= 1000.0; vLTestDuration = dGetDurtion.ToString("F3"); } } public static class CustomLogStoreData { public static string vLSaveTableName = string.Empty; public static bool vLSaveDetailTable = false; public static List>> ExtrctInfo = null; public static string SelectProdNo = string.Empty; public static string[] vLLogAccessKey = new string[6] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; public static string[] vLProcNo = new string[6] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; public static string[] vLPalletNumber = new string[6] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; public static string[] vLPalletID = new string[6] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; public static string[] vLPIndex = new string[6] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; public static string[] vLProdNo = new string[6] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; public static string[] vLProdID = new string[6] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; public static string[] vLSensorType = new string[6] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; public static string[] vLStatus = new string[6] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; public static string[] vLTestID = new string[6] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; public static string[] vLResult = new string[6] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; public static string[] vLVal_Min = new string[6] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; public static string[] vLVal_Max = new string[6] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; public static string[] vLVal_Meas = new string[6] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; } public static class XLogDataControl_ { public static DataTable dtCSVFileData = new DataTable(); private static Dictionary> dicLogField; public static void SetLogFieldInfo() { dicLogField = new Dictionary>(); dicLogField.Clear(); dicLogField.Add("LogAccessKey", new Tuple(SqlDbType.NVarChar, 64)); dicLogField.Add("ProcNo", new Tuple(SqlDbType.BigInt, 0)); dicLogField.Add("Station", new Tuple(SqlDbType.NChar, 30)); dicLogField.Add("Position", new Tuple(SqlDbType.NChar, 30)); dicLogField.Add("PalletNumber", new Tuple(SqlDbType.NChar, 20)); dicLogField.Add("PalletID", new Tuple(SqlDbType.NChar, 30)); dicLogField.Add("PIndex", new Tuple(SqlDbType.TinyInt, 0)); dicLogField.Add("ProdNo", new Tuple(SqlDbType.NChar, 30)); dicLogField.Add("ProdID", new Tuple(SqlDbType.NChar, 50)); dicLogField.Add("SensorType", new Tuple(SqlDbType.TinyInt, 0)); dicLogField.Add("Status", new Tuple(SqlDbType.NChar, 50)); dicLogField.Add("TestID", new Tuple(SqlDbType.NChar, 20)); dicLogField.Add("Result", new Tuple(SqlDbType.Bit, 0)); dicLogField.Add("TestDuration", new Tuple(SqlDbType.Float, 0)); dicLogField.Add("Val_Min", new Tuple(SqlDbType.Float, 0)); dicLogField.Add("Val_Max", new Tuple(SqlDbType.Float, 0)); dicLogField.Add("Val_Meas", new Tuple(SqlDbType.Float, 0)); } private static void AddLogField(string strName, SqlDbType setType, int iSize) { if (dicLogField.ContainsKey(strName) == false) dicLogField.Add(strName, new Tuple(setType, iSize)); } private static SqlParameter GetMakeSqlParameterInfo(string strSetName, object objValue) { if (dicLogField.ContainsKey(strSetName)) { SqlParameter param = new SqlParameter("@" + strSetName, dicLogField[strSetName].Item1, dicLogField[strSetName].Item2); param.Value = objValue; return param; } else return null; } public static T ConvertTextToTryValue(string strText, object objFailValue) { object obj; obj = typeof(T); int iGetValue = 0; byte ucGetValue = 0; uint uiGetValue = 0; double dGetValue = 0; if (obj.ToString().IndexOf("Byte") >= 0) { if (!byte.TryParse(strText, out ucGetValue)) obj = objFailValue; else obj = ucGetValue; } if (obj.ToString().IndexOf("Int") >= 0) { if (!int.TryParse(strText, out iGetValue)) obj = objFailValue; else obj = iGetValue; } if (obj.ToString().IndexOf("UInt") >= 0) { if (!uint.TryParse(strText, out uiGetValue)) obj = objFailValue; else obj = uiGetValue; } if (obj.ToString().IndexOf("Double") >= 0) { if (!double.TryParse(strText, out dGetValue)) obj = objFailValue; else obj = dGetValue; } return (T)Convert.ChangeType(obj, typeof(T)); } public static SqlCommand[] HISTTableProcess(eLogDataType eGetLogType) { SqlCommand[] cmd = null; try { try { if (eGetLogType == eLogDataType.Normal) { cmd = new SqlCommand[3]; String sqlCommandInsert = ""; String sqlCommandSubInsert = ""; String sqlCommandUpdate = ""; string columns = string.Empty; string subColumns = string.Empty; if (CpLogStoreData.ExtrctInfo.Count > 0) { columns = "LogAccessKey,ProcNo,Station,Position,PalletNumber,PalletID,PIndex,ProdNo,ProdID,SensorType,Status,TestID,Result,TestDuration,"; subColumns = "LogAccessKey,ProcNo,PalletNumber,PalletID,PIndex,ProdNo,ProdID,TestID"; sqlCommandUpdate = "UPDATE " + CpLogStoreData.ExtrctInfo[0].Value.Item6 + " SET "; foreach (KeyValuePair> k in CpLogStoreData.ExtrctInfo) { sqlCommandUpdate += k.Value.Item7 + " = " + CpLogStoreData.GetMeasValue(k.Key) + ", "; columns += k.Value.Item7 + ","; AddLogField(k.Value.Item7, SqlDbType.Float, 0); } sqlCommandUpdate = sqlCommandUpdate.Remove(sqlCommandUpdate.Length - 2, 1); sqlCommandUpdate += "WHERE PalletNumber = '" + CpLogStoreData.vLPalletNumber + "' AND PIndex = " + CpLogStoreData.vLPIndex + ";"; columns = columns.Remove(columns.Length - 1, 1); cmd[2] = new SqlCommand(sqlCommandUpdate); } else { columns = "LogAccessKey,ProcNo,Station,Position,PalletNumber,PalletID,PIndex,ProdNo,ProdID,SensorType,Status,TestID,Result,TestDuration"; subColumns = "LogAccessKey,ProcNo,PalletNumber,PalletID,PIndex,ProdNo,ProdID,TestID"; cmd[2] = null; } string values = string.Join(",", columns.Split(',').Select(c => string.Format("@{0}", c))); string subValues = string.Join(",", subColumns.Split(',').Select(c => string.Format("@{0}", c))); sqlCommandInsert = string.Format("INSERT INTO " + CpLogStoreData.vLSaveTableName + " ({0}) VALUES ({1})", columns, values); sqlCommandSubInsert = string.Format("INSERT INTO [HIST_TestNgResult] ({0}) VALUES ({1})", subColumns, subValues); cmd[0] = new SqlCommand(sqlCommandInsert); cmd[1] = new SqlCommand(sqlCommandSubInsert); SqlParameter[] setParams = new SqlParameter[columns.Split(',').Count()]; SqlParameter[] setSubParams = new SqlParameter[subColumns.Split(',').Count()]; setParams[0] = GetMakeSqlParameterInfo("LogAccessKey", CpLogStoreData.vLLogAccessKey); setParams[1] = GetMakeSqlParameterInfo("ProcNo", CpLogStoreData.vLProcNo); setParams[2] = GetMakeSqlParameterInfo("Station", CpLogStoreData.vLStation); setParams[3] = GetMakeSqlParameterInfo("Position", CpLogStoreData.vLPosition); setParams[4] = GetMakeSqlParameterInfo("PalletNumber", CpLogStoreData.vLPalletNumber); setParams[5] = GetMakeSqlParameterInfo("PalletID", CpLogStoreData.vLPalletID); setParams[6] = GetMakeSqlParameterInfo("PIndex", ConvertTextToTryValue(CpLogStoreData.vLPIndex, 0)); setParams[7] = GetMakeSqlParameterInfo("ProdNo", CpLogStoreData.vLProdNo); setParams[8] = GetMakeSqlParameterInfo("ProdID", CpLogStoreData.vLProdID); setParams[9] = GetMakeSqlParameterInfo("SensorType", CpLogStoreData.vLSensorType); setParams[10] = GetMakeSqlParameterInfo("Status", CpLogStoreData.vLStatus); setParams[11] = GetMakeSqlParameterInfo("TestID", CpLogStoreData.vLTestID); setSubParams[0] = GetMakeSqlParameterInfo("LogAccessKey", CpLogStoreData.vLLogAccessKey); setSubParams[1] = GetMakeSqlParameterInfo("ProcNo", CpLogStoreData.vLProcNo); setSubParams[2] = GetMakeSqlParameterInfo("PalletNumber", CpLogStoreData.vLPalletNumber); setSubParams[3] = GetMakeSqlParameterInfo("PalletID", CpLogStoreData.vLPalletID); setSubParams[4] = GetMakeSqlParameterInfo("PIndex", ConvertTextToTryValue(CpLogStoreData.vLPIndex, 0)); setSubParams[5] = GetMakeSqlParameterInfo("ProdNo", CpLogStoreData.vLProdNo); setSubParams[6] = GetMakeSqlParameterInfo("ProdID", CpLogStoreData.vLProdID); setSubParams[7] = GetMakeSqlParameterInfo("TestID", CpLogStoreData.vLTestID); if (CpLogStoreData.vLResult.IndexOf("OK") >= 0) { setParams[12] = GetMakeSqlParameterInfo("Result", 1); cmd[1] = null; } else setParams[12] = GetMakeSqlParameterInfo("Result", 0); setParams[13] = GetMakeSqlParameterInfo("TestDuration", ConvertTextToTryValue(CpLogStoreData.vLTestDuration, 0)); int iSetPos = 14; if (CpLogStoreData.ExtrctInfo.Count > 0) { foreach (KeyValuePair> k in CpLogStoreData.ExtrctInfo) setParams[iSetPos++] = GetMakeSqlParameterInfo(k.Value.Item7, ConvertTextToTryValue(CpLogStoreData.GetMeasValue(k.Key), 0)); } cmd[0].Parameters.AddRange(setParams); if(cmd[1] != null) cmd[1].Parameters.AddRange(setSubParams); } else { object[] objItems; if (dtCSVFileData.Rows.Count == 0) throw new Exception(); cmd = new SqlCommand[dtCSVFileData.Rows.Count + dtCSVFileData.Rows.Count]; string columns = string.Empty; string subColumns = string.Empty; String sqlCommandInsert = ""; String sqlCommandSubInsert = ""; if (eGetLogType == eLogDataType.CSV_Type0) { columns = "LogAccessKey,ProcNo,PalletNumber,PalletID,PIndex,ProdNo,ProdID,SensorType,Status,TestID,Result,Val_Min,Val_Max,Val_Meas"; string values = string.Join(",", columns.Split(',').Select(c => string.Format("@{0}", c))); sqlCommandInsert = string.Format("INSERT INTO " + CustomLogStoreData.vLSaveTableName + " ({0}) VALUES ({1})", columns, values); } else { columns = "LogAccessKey,ProcNo,PalletNumber,PalletID,PIndex,ProdNo,ProdID,SensorType,Status,TestID,Result"; string values = string.Join(",", columns.Split(',').Select(c => string.Format("@{0}", c))); sqlCommandInsert = string.Format("INSERT INTO " + CustomLogStoreData.vLSaveTableName + " ({0}) VALUES ({1})", columns, values); } subColumns = "LogAccessKey,ProcNo,PalletNumber,PalletID,PIndex,ProdNo,ProdID,TestID"; string subValues = string.Join(",", subColumns.Split(',').Select(c => string.Format("@{0}", c))); sqlCommandSubInsert = string.Format("INSERT INTO [HIST_TestNgResult] ({0}) VALUES ({1})", subColumns, subValues); int iSubPos = 0; for (int i = 0; i < dtCSVFileData.Rows.Count; i++) { iSubPos = dtCSVFileData.Rows.Count + i; cmd[i] = null; cmd[iSubPos] = null; objItems = dtCSVFileData.Rows[i].ItemArray; cmd[i] = new SqlCommand(sqlCommandInsert); cmd[iSubPos] = new SqlCommand(sqlCommandSubInsert); int iIndex = 0; if (eGetLogType == eLogDataType.CSV_Type0) iIndex = ConvertTextToTryValue(objItems[1].ToString(), 0); else iIndex = ConvertTextToTryValue(objItems[0].ToString(), 0); if (iIndex == 0) throw new Exception(); else iIndex -= 1; SqlParameter[] setParams = new SqlParameter[columns.Split(',').Count()]; SqlParameter[] setSubParams = new SqlParameter[subColumns.Split(',').Count()]; setParams[0] = GetMakeSqlParameterInfo("LogAccessKey", CustomLogStoreData.vLLogAccessKey[iIndex]); setParams[1] = GetMakeSqlParameterInfo("ProcNo", CustomLogStoreData.vLProcNo[iIndex]); setParams[2] = GetMakeSqlParameterInfo("PalletNumber", CustomLogStoreData.vLPalletNumber[iIndex]); setParams[3] = GetMakeSqlParameterInfo("PalletID", CustomLogStoreData.vLPalletID[iIndex]); setParams[4] = GetMakeSqlParameterInfo("PIndex", ConvertTextToTryValue(CustomLogStoreData.vLPIndex[iIndex], 0)); setParams[5] = GetMakeSqlParameterInfo("ProdNo", CustomLogStoreData.vLProdNo[iIndex]); setParams[6] = GetMakeSqlParameterInfo("ProdID", CustomLogStoreData.vLProdID[iIndex]); setParams[7] = GetMakeSqlParameterInfo("SensorType", CustomLogStoreData.vLSensorType[iIndex]); setParams[8] = GetMakeSqlParameterInfo("Status", CustomLogStoreData.vLStatus[iIndex]); setParams[9] = GetMakeSqlParameterInfo("TestID", CustomLogStoreData.vLTestID[iIndex]); setSubParams[0] = GetMakeSqlParameterInfo("LogAccessKey", CustomLogStoreData.vLLogAccessKey[iIndex]); setSubParams[1] = GetMakeSqlParameterInfo("ProcNo", CustomLogStoreData.vLProcNo[iIndex]); setSubParams[2] = GetMakeSqlParameterInfo("PalletNumber", CustomLogStoreData.vLPalletNumber[iIndex]); setSubParams[3] = GetMakeSqlParameterInfo("PalletID", CustomLogStoreData.vLPalletID[iIndex]); setSubParams[4] = GetMakeSqlParameterInfo("PIndex", ConvertTextToTryValue(CustomLogStoreData.vLPIndex[iIndex], 0)); setSubParams[5] = GetMakeSqlParameterInfo("ProdNo", CustomLogStoreData.vLProdNo[iIndex]); setSubParams[6] = GetMakeSqlParameterInfo("ProdID", CustomLogStoreData.vLProdID[iIndex]); setSubParams[7] = GetMakeSqlParameterInfo("TestID", CustomLogStoreData.vLTestID[iIndex]); if (eGetLogType == eLogDataType.CSV_Type0) { if (objItems[4].ToString().Trim().IndexOf("OK") >= 0) CustomLogStoreData.vLResult[iIndex] = "1"; else CustomLogStoreData.vLResult[iIndex] = "0"; CustomLogStoreData.vLVal_Meas[iIndex] = objItems[3].ToString().Trim(); } else { if (objItems[1].ToString().IndexOf("OK") >= 0) CustomLogStoreData.vLResult[iIndex] = "1"; else CustomLogStoreData.vLResult[iIndex] = "0"; } // if (CustomLogStoreData.vLResult[iIndex].IndexOf("1") >= 0) cmd[iSubPos] = null; setParams[10] = GetMakeSqlParameterInfo("Result", ConvertTextToTryValue(CustomLogStoreData.vLResult[iIndex], 0)); if (eGetLogType == eLogDataType.CSV_Type0) { setParams[11] = GetMakeSqlParameterInfo("Val_Min", ConvertTextToTryValue(CustomLogStoreData.vLVal_Min[iIndex], 0)); setParams[12] = GetMakeSqlParameterInfo("Val_Max", ConvertTextToTryValue(CustomLogStoreData.vLVal_Max[iIndex], 0)); setParams[13] = GetMakeSqlParameterInfo("Val_Meas", ConvertTextToTryValue(CustomLogStoreData.vLVal_Meas[iIndex], 0)); } cmd[i].Parameters.AddRange(setParams); if(cmd[iSubPos] != null) cmd[iSubPos].Parameters.AddRange(setSubParams); } } } catch (Exception ex) { for (int i = 0; i < cmd.Count(); i++) cmd[i] = null; MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @" " + eGetLogType.ToString() + " General log processing [Command create] failed. " + ex.Message + " [SystemX.Common.Protocol.Log.LSU_Trimming_4Th : XLogDataControl_.HISTTableProcess]", ConsoleColor.Yellow, LogMessageLevel.DEBUG); cmd = null; } } finally { ;// } return cmd; //(SqlCommand[])cmd.Clone(); } public static bool ReadFileData(eLogDataType eType, string strFileName) { string strSetHeader = string.Empty; bool bReadStatus = true; try { if (eType == eLogDataType.CSV_Type0) strSetHeader = "No,Index,Time,MeasValue,Result"; else if (eType == eLogDataType.CSV_Type1) strSetHeader = "Pallet_Num,Result,Time,X1,X2,X3,Y,Broken,LockingPinArea"; else if (eType == eLogDataType.CSV_Type2) strSetHeader = "Pallet_Num,Result,Time,Pin_1_X_Position,Pin_1_Y_Position,Pin_2_X_Position,Pin_2_Y_Position,Pin_3_X_Position,Pin_3_Y_Position,Pin_4_X_Position,Pin_4_Y_Position,Pin_5_X_Position, Pin_5_Y_Position,Pin_6_X_Position,Pin_6_Y_Position,Pin_1_Thickness,Pin_2_Thickness,Pin_3_Thickness,Pin_4_Thickness,Pin_5_Thickness,Pin_6_Thickness,Locking Pin Area,Locking Pin Position"; using (StreamReader sr = new StreamReader(strFileName)) { if (eType != eLogDataType.CSV_Type0) sr.ReadLine(); dtCSVFileData = new DataTable(); while (!sr.EndOfStream) { string strGetData = sr.ReadLine(); strGetData = strGetData.Trim(); if (strGetData.Length <= 0) continue; string[] tempList = strGetData.Split(','); for (int i = 0; i < tempList.Length; i++) { if (tempList[i].Length <= 0) { List listData = tempList.ToList(); listData.RemoveAt(i); tempList = listData.ToArray(); } } object[] objRows = tempList; if (dtCSVFileData.Columns.Count <= 0) { foreach (string strData in strSetHeader.Split(',')) { DataColumn dc = new DataColumn(strData); dtCSVFileData.Columns.Add(dc); } dtCSVFileData.Rows.Add(objRows); } else dtCSVFileData.Rows.Add(objRows); } } } catch (Exception ex) { MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"General log processing [Read file] failed.[SystemX.Common.Protocol.Log.LSU_Trimming_4Th : STATIC XLogDataControl.ReadFileData]\r\n" + ex.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG); bReadStatus = false; } return bReadStatus; } } }