using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.InteropServices; using System.IO; using System.Security.Cryptography; using System.Data; using System.Text.RegularExpressions; using System.Net.Sockets; using System.Globalization; using System.Threading; using System.Diagnostics; using System.Net; using SystemX.Net.BaseProtocol; using System.Xml.Linq; using static SystemX.Net.Platform.Common.Util.LogMessage; using System.Data.SqlClient; namespace SystemX.Net.Middleware.Log.Commons { using ParamElement = Tuple; public class HISTTesterSummary { public string StationName { set; get; } public string TestType { set; get; } public string Version { set; get; } public string ProdCode { set; get; } public int TestListFileNo { set; get; } public int TestListVariantNo { set; get; } public string TestListCntID { set; get; } public int StepVersion { set; get; } public string Host { set; get; } public string Section { set; get; } public string ProdNoC { set; get; } public string ProdNoP { set; get; } public string TestCode { set; get; } public string TestListFileName { set; get; } public string ProductID { set; get; } public string Result { set; get; } public string Duration { set; get; } public DateTime TestDT { set; get; } } public class HISTLogSummary { public string StationName { set; get; } public string TestType { set; get; } public string Version { set; get; } public string ProdCode { set; get; } public int TestListFileNo { set; get; } public int TestListVariantNo { set; get; } public string TestListCntID { set; get; } public int StepVersion { set; get; } public string Host { set; get; } public string Section { set; get; } public string ProdNoC { set; get; } public string ProdNoP { set; get; } public string TestCode { set; get; } public string TestListFileName { set; get; } public string ProductID { set; get; } public string Result { set; get; } public string Duration { set; get; } public DateTime TestDT { set; get; } } public static class ShortLogParamInfo { public static readonly int MessageLength = 4096; public static readonly int MessageValLength = 2024; public static string STEP = ""; public static string POSITION = ""; public static string MO = ""; public static string FNC_NAME = ""; public static string MIN = ""; public static string MEASURE = ""; public static string MAX = ""; public static string DIM = ""; public static string CHECK = ""; public static string SPENT_TIME = ""; public static string INFO = ""; public static bool GLOBAL_SPEC = false; public static string VRFY_MIN = ""; public static string VRFY_MAX = ""; } public static class LongLogParamInfo { public static readonly int MessageLength = 4096; public static readonly int MessageValLength = 2024; public static string STEP = ""; public static string POSITION = ""; public static string MO = ""; public static string FNC_NAME = ""; public static string MIN = ""; public static string MEASURE = ""; public static string MAX = ""; public static string DIM = ""; public static string CHECK = ""; public static string SPENT_TIME = ""; public static string INFO = ""; public static bool GLOBAL_SPEC = false; public static string VRFY_MIN = ""; public static string VRFY_MAX = ""; } public static class ParamSet { public static Dictionary fParam = new Dictionary(); public static void TestResultField() { fParam.Clear(); fParam = new Dictionary(); fParam.Add("No", new ParamElement(SqlDbType.BigInt, 0, 0, 0)); fParam.Add("TestDT", new ParamElement(SqlDbType.DateTime2, 7, 0, 0)); fParam.Add("LogData", new ParamElement(SqlDbType.NVarChar, -1, 0, 0)); } public static void TesterSummaryField() { fParam.Clear(); fParam = new Dictionary(); fParam.Add("StationName", new ParamElement(SqlDbType.NVarChar, 128, 0, 0)); fParam.Add("TestType", new ParamElement(SqlDbType.NVarChar, 8, 0, 0)); fParam.Add("Version", new ParamElement(SqlDbType.NVarChar, 4, 0, 0)); fParam.Add("ProdCode", new ParamElement(SqlDbType.NVarChar, 4, 0, 0)); fParam.Add("TestListFileNo", new ParamElement(SqlDbType.Int, 0, 0, 0)); fParam.Add("TestListVariantNo", new ParamElement(SqlDbType.Int, 0, 0, 0)); fParam.Add("TestListCntID", new ParamElement(SqlDbType.NVarChar, 256, 0, 0)); fParam.Add("StepVersion", new ParamElement(SqlDbType.Int, 0, 0, 0)); fParam.Add("HostID", new ParamElement(SqlDbType.NVarChar, 64, 0, 0)); fParam.Add("Section", new ParamElement(SqlDbType.NVarChar, 64, 0, 0)); fParam.Add("ProdNo_C", new ParamElement(SqlDbType.NVarChar, 32, 0, 0)); fParam.Add("ProdNo_P", new ParamElement(SqlDbType.NVarChar, 32, 0, 0)); fParam.Add("Testcode", new ParamElement(SqlDbType.NVarChar, 16, 0, 0)); fParam.Add("TestListFileName", new ParamElement(SqlDbType.NVarChar, 256, 0, 0)); fParam.Add("ProductID", new ParamElement(SqlDbType.NVarChar, 64, 0, 0)); fParam.Add("Result", new ParamElement(SqlDbType.NVarChar, 16, 0, 0)); fParam.Add("Duration", new ParamElement(SqlDbType.NVarChar, 16, 0, 0)); fParam.Add("TestDT", new ParamElement(SqlDbType.DateTime2, 7, 0, 0)); } public static void LogSummaryField() { fParam.Clear(); fParam = new Dictionary(); fParam.Add("StationName", new ParamElement(SqlDbType.NVarChar, 128, 0, 0)); fParam.Add("TestType", new ParamElement(SqlDbType.NVarChar, 8, 0, 0)); fParam.Add("Version", new ParamElement(SqlDbType.NVarChar, 4, 0, 0)); fParam.Add("ProdCode", new ParamElement(SqlDbType.NVarChar, 4, 0, 0)); fParam.Add("TestListFileNo", new ParamElement(SqlDbType.Int, 0, 0, 0)); fParam.Add("TestListVariantNo", new ParamElement(SqlDbType.Int, 0, 0, 0)); fParam.Add("TestListCntID", new ParamElement(SqlDbType.NVarChar, 256, 0, 0)); fParam.Add("StepVersion", new ParamElement(SqlDbType.Int, 0, 0, 0)); fParam.Add("HostID", new ParamElement(SqlDbType.NVarChar, 64, 0, 0)); fParam.Add("Section", new ParamElement(SqlDbType.NVarChar, 64, 0, 0)); fParam.Add("ProdNo_C", new ParamElement(SqlDbType.NVarChar, 32, 0, 0)); fParam.Add("ProdNo_P", new ParamElement(SqlDbType.NVarChar, 32, 0, 0)); fParam.Add("Testcode", new ParamElement(SqlDbType.NVarChar, 16, 0, 0)); fParam.Add("TestListFileName", new ParamElement(SqlDbType.NVarChar, 256, 0, 0)); fParam.Add("ProductID", new ParamElement(SqlDbType.NVarChar, 64, 0, 0)); fParam.Add("Result", new ParamElement(SqlDbType.NVarChar, 16, 0, 0)); fParam.Add("Duration", new ParamElement(SqlDbType.NVarChar, 16, 0, 0)); fParam.Add("TestDT", new ParamElement(SqlDbType.DateTime2, 7, 0, 0)); } public static SqlParameter GetMakeSqlParameterInfo(Dictionary refField, string strSetName, object objValue) { if (refField.ContainsKey(strSetName)) { SqlParameter param = null; if (refField[strSetName].Item2 != 0) param = new SqlParameter("@" + strSetName, refField[strSetName].Item1, refField[strSetName].Item2); else param = new SqlParameter("@" + strSetName, refField[strSetName].Item1); if (refField[strSetName].Item1 == SqlDbType.Decimal) { param.Precision = refField[strSetName].Item3; param.Scale = refField[strSetName].Item4; } param.Value = objValue; return param; } else return null; } } public class CommonProtocol { public SqlCommand LogDataResultInsert(string strTableName, DataRow itemData) { string columns = string.Empty; columns = "No,TestDT,LogData"; string values = string.Join(",", columns.Split(',').Select(c => string.Format("@{0}", c))); string sqlCommand = string.Format("INSERT INTO [" + strTableName + "] ({0}) VALUES ({1})", columns, values); ParamSet.TestResultField(); SqlCommand cmd = new SqlCommand(sqlCommand); SqlParameter[] setParams = new SqlParameter[columns.Split(',').Count()]; setParams[0] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "No", Convert.ToInt64(itemData["No"])); setParams[1] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "TestDT", Convert.ToDateTime(itemData["TestDT"])); setParams[2] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "LogData", Convert.ToString(itemData["LogData"])); cmd.Parameters.AddRange(setParams); return cmd; } public SqlCommand LogDataSummaryInsert(string strTableName, HISTLogSummary itemSummary) { string columns = string.Empty; if (itemSummary.TestListCntID == string.Empty) columns = "StationName,TestType,Version,ProdCode,TestListFileNo,TestListVariantNo,StepVersion,HostID,Section,ProdNo_C,ProdNo_P,Testcode,TestListFileName,ProductID,Result,Duration,TestDT"; else columns = "StationName,TestType,Version,ProdCode,TestListFileNo,TestListVariantNo,TestListCntID,StepVersion,HostID,Section,ProdNo_C,ProdNo_P,Testcode,TestListFileName,ProductID,Result,Duration,TestDT"; string values = string.Join(",", columns.Split(',').Select(c => string.Format("@{0}", c))); string sqlCommand = string.Format("INSERT INTO [" + strTableName + "] ({0}) VALUES ({1})", columns, values); ParamSet.LogSummaryField(); SqlCommand cmd = new SqlCommand(sqlCommand); SqlParameter[] setParams = new SqlParameter[columns.Split(',').Count()]; if (itemSummary.TestListCntID == string.Empty) { setParams[0] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "StationName", itemSummary.StationName); setParams[1] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "TestType", itemSummary.TestType); setParams[2] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "Version", itemSummary.Version); setParams[3] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "ProdCode", itemSummary.ProdCode); setParams[4] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "TestListFileNo", itemSummary.TestListFileNo); setParams[5] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "TestListVariantNo", itemSummary.TestListVariantNo); setParams[6] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "StepVersion", itemSummary.StepVersion); setParams[7] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "HostID", itemSummary.Host); setParams[8] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "Section", itemSummary.Section); setParams[9] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "ProdNo_C", itemSummary.ProdNoC); setParams[10] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "ProdNo_P", itemSummary.ProdNoP); setParams[11] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "Testcode", itemSummary.TestCode); setParams[12] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "TestListFileName", itemSummary.TestListFileName); setParams[13] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "ProductID", itemSummary.ProductID); setParams[14] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "Result", itemSummary.Result); setParams[15] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "Duration", itemSummary.Duration); setParams[16] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "TestDT", itemSummary.TestDT); } else { setParams[0] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "StationName", itemSummary.StationName); setParams[1] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "TestType", itemSummary.TestType); setParams[2] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "Version", itemSummary.Version); setParams[3] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "ProdCode", itemSummary.ProdCode); setParams[4] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "TestListFileNo", itemSummary.TestListFileNo); setParams[5] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "TestListVariantNo", itemSummary.TestListVariantNo); setParams[6] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "TestListCntID", itemSummary.TestListCntID); setParams[7] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "StepVersion", itemSummary.StepVersion); setParams[8] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "HostID", itemSummary.Host); setParams[9] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "Section", itemSummary.Section); setParams[10] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "ProdNo_C", itemSummary.ProdNoC); setParams[11] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "ProdNo_P", itemSummary.ProdNoP); setParams[12] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "Testcode", itemSummary.TestCode); setParams[13] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "TestListFileName", itemSummary.TestListFileName); setParams[14] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "ProductID", itemSummary.ProductID); setParams[15] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "Result", itemSummary.Result); setParams[16] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "Duration", itemSummary.Duration); setParams[17] = ParamSet.GetMakeSqlParameterInfo(ParamSet.fParam, "TestDT", itemSummary.TestDT); } cmd.Parameters.AddRange(setParams); return cmd; } } public static class COMMON { [DllImport("winmm.dll")] public static extern uint timeGetTime(); public const string Png = "PNG Portable Network Graphics (*.png)|" + "*.png"; public const string Jpg = "JPEG File Interchange Format (*.jpg *.jpeg *jfif)|" + "*.jpg;*.jpeg;*.jfif"; public const string Bmp = "BMP Windows Bitmap (*.bmp)|" + "*.bmp"; public const string Tif = "TIF Tagged Imaged File Format (*.tif *.tiff)|" + "*.tif;*.tiff"; public const string Gif = "GIF Graphics Interchange Format (*.gif)|" + "*.gif"; public const string AllImages = "Image file|" + "*.png; *.jpg; *.jpeg; *.jfif; *.bmp;*.tif; *.tiff; *.gif"; public const string AllFiles = "All files (*.*)" + "|*.*"; public static string[] mediaExtensions = { ".PNG", ".JPG", ".JPEG", ".BMP", ".GIF", //etc ".WAV", ".MID", ".MIDI", ".WMA", ".MP3", ".OGG", ".RMA", //etc ".AVI", ".MP4", ".DIVX", ".WMV", //etc }; public static DataTable ConvertCSVtoDataTable(string strFilePath, string strSetHeader) { DataTable dt = null; try { using (StreamReader sr = new StreamReader(strFilePath)) { string[] headers = null; if (strSetHeader.Length > 0) headers = strSetHeader.Split(','); else headers = sr.ReadLine().Split(','); dt = new DataTable(); foreach (string header in headers) { dt.Columns.Add(header); } while (!sr.EndOfStream) { string strReadData = sr.ReadLine().Trim(); if (strReadData.Length <= 0) break; string[] rows = Regex.Split(strReadData, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"); DataRow dr = dt.NewRow(); for (int i = 0; i < headers.Length; i++) { dr[i] = rows[i]; } dt.Rows.Add(dr); } } } catch (Exception e) { dt = null; } return dt; } public static T ConvertTextToTryValue(string strText, object objFailValue) { object obj; obj = typeof(T); int iGetValue = 0; uint uiGetValue = 0; double dGetValue = 0; 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; } else 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 T FindByName(this object targetClass, string name) where T : class { System.Reflection.FieldInfo fi = targetClass.GetType().GetField(name, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); return fi.GetValue(targetClass) as T; } public static T FindByName(this string name, object targetClass) where T : class { System.Reflection.FieldInfo fi = targetClass.GetType().GetField(name, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); return fi.GetValue(targetClass) as T; } public class LogProcessInfo { public bool READ_INFO_STATE { set; get; } private string strInfoFilePos; public string TITLE; public string SERVER_SAVE_POS; public string MES_SAVE_POS; //TODO : Server ALIS FTP public bool FTP_Use; public string FTP_IPAddress; public string FTP_Port; public string FTP_Account; public string FTP_Password; public long FTP_ScanTime_ms; public long BULK_ProcessTime_ms; public LogProcessInfo(string strGetInfoPath) { strInfoFilePos = strGetInfoPath; } public bool Load() { READ_INFO_STATE = true; try { XDocument xDoc = XDocument.Load(strInfoFilePos); var xElement = xDoc.Element("ROOT"); if (xElement != null) { var xGetElement = xElement.Element("Configure"); TITLE = xGetElement.Element("Title").Value; SERVER_SAVE_POS = @xGetElement.Element("LogFileSavePos").Value; MES_SAVE_POS = @xGetElement.Element("MESFileSavePos").Value; //TODO : Server ALIS FTP XElement xEle = xGetElement.Element("UseFTP"); bool bValue; long lValue; //string strValue; if (xEle?.IsEmpty == false) { if (bool.TryParse(xEle.Value, out bValue)) FTP_Use = bValue; } else FTP_Use = false; xEle = xGetElement.Element("IPAddressFTP"); if (xEle?.IsEmpty == false) FTP_IPAddress = xEle.Value; else FTP_IPAddress = "0.0.0.0"; xEle = xGetElement.Element("PortFTP"); if (xEle?.IsEmpty == false) FTP_Port = xEle.Value; else FTP_Port = "21"; xEle = xGetElement.Element("AccountFTP"); if (xEle?.IsEmpty == false) FTP_Account = xEle.Value; else FTP_Account = ""; xEle = xGetElement.Element("PasswordFTP"); if (xEle?.IsEmpty == false) FTP_Password = xEle.Value; else FTP_Password = ""; xEle = xGetElement.Element("ScanTimeFTPms"); if (xEle?.IsEmpty == false) { if (long.TryParse(xEle.Value, out lValue)) FTP_ScanTime_ms = lValue; } else FTP_ScanTime_ms = 30000; xEle = xGetElement.Element("ScanTimeBULKms"); if (xEle?.IsEmpty == false) { if (long.TryParse(xEle.Value, out lValue)) BULK_ProcessTime_ms = lValue; } else BULK_ProcessTime_ms = 30000; if (Base.CheckPath(SERVER_SAVE_POS)) { if (Directory.Exists(SERVER_SAVE_POS) == false) Directory.CreateDirectory(SERVER_SAVE_POS); } else { MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"ServerInfo read failed.(SERVER SAVE POS - Folder name error)[SystemX.Common : SystemX.Net.ServerInfo]", ConsoleColor.Yellow, LogMessageLevel.DEBUG); throw new Exception(); } if (Base.CheckPath(MES_SAVE_POS)) { if (Directory.Exists(MES_SAVE_POS) == false) Directory.CreateDirectory(MES_SAVE_POS); } else { MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"ServerInfo read failed.(MES SAVE POS - Folder name error)[SystemX.Common : SystemX.Net.ServerInfo]", ConsoleColor.Yellow, LogMessageLevel.DEBUG); throw new Exception(); } } } catch (Exception e) { READ_INFO_STATE = false; MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"LogProcessInfo read failed. [LogProcessInfo : SystemX.Net.Middleware.Commons]\r\n" + e.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG); } return READ_INFO_STATE; } } } }