Files
CPXV2/SystemX.Net.CP.Middleware.Log/SystemX.Net.Middleware.UI/Sub/CPXV2_CpLogProcess.cs

1554 lines
75 KiB
C#

using DevExpress.Data.Helpers;
using DevExpress.XtraBars;
using DevExpress.XtraBars.Navigation;
using System;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml.Linq;
using System.IO;
using System.Diagnostics;
using System.Threading;
using System.Reflection;
using System.Threading.Tasks;
using SystemX.Net.Platform.Common.ExtensionMethods;
using SystemX.Net;
using SystemX.Common;
using SystemX.Net.BaseProtocol;
using SystemX.Net.Comm;
using SystemX.Net.Schedule;
using SystemX.Net.DB.LogProcess;
using SystemX.Common.Serialization;
using SystemX.Common.Archive;
using static SystemX.Net.Platform.Common.Util.LogMessage;
using static SystemX.Net.DB.LogProcess.XLogDBConnManager;
using SystemX.Net.Platform.SystemX.Common;
using SystemX.Net.Middleware.Log.Commons;
using SystemX.Net.Platform.SystemX.Net.XEFCore.DBContext.CPXV2LogJson;
using CPXV2Log = SystemX.Net.Platform.SystemX.Net.XEFCore.DBContext.CPXV2Log;
using CPXV2LogJson = SystemX.Net.Platform.SystemX.Net.XEFCore.DBContext.CPXV2LogJson;
using Newtonsoft.Json;
using SystemX.Common.Util;
using CpTesterPlatform.CpLogUtil;
namespace SystemX.Net.MiddlewareUI
{
public partial class MainForm : DevExpress.XtraBars.FluentDesignSystem.FluentDesignForm
{
static internal class CPXV2_CpLogProcessInfo
{
static public string strProcessDebugInfo = string.Empty;
static public string strGetFileName = string.Empty;
//Summary 삽입 정보 생성
static public string strHostID = string.Empty;
static public string strSection = string.Empty;
static public string strStationID = string.Empty;
static public Int64 nShortTermIdent = int.MaxValue;
static public Int64 nLongTermIdent = int.MaxValue;
static public string strStationName = string.Empty;
static public string strProdNo_P = string.Empty;
static public string strProdNo_C = string.Empty;
static public string strTestType = string.Empty;
static public string strTestCode = string.Empty;
static public string strVersion = string.Empty;
static public string strProdCode = string.Empty;
static public string strTestListCntID = string.Empty;
static public int nTestListFileNo = int.MaxValue;
static public int nTestListVariantNo = int.MaxValue;
static public int nTestListReleaseNo = int.MaxValue;
static public string strCpLogFileComment = string.Empty;
static public Dictionary<string, string> dicCpLogHeader = new Dictionary<string, string>();
static public int nGetReadStepVersion = int.MaxValue;
/*
* CpLog Header 상 검사 시작 시간 획득 및 맨앞 공백 제거
*/
static public string strStTime = string.Empty;
static public long lMainMeasTime = 0;
static public long lLongTermMeasTime = 0;
}
private DataTable CPXV2_MakeCpLogTable()
{
// Create a new DataTable titled 'Names.'
DataTable logTable = new DataTable("CpLogProcTestResult");
// Add three column objects to the table.
DataColumn Column0 = new DataColumn();
Column0.DataType = System.Type.GetType("System.Int64");
Column0.ColumnName = "No";
Column0.AutoIncrement = true;
Column0.AllowDBNull = false;
logTable.Columns.Add(Column0);
DataColumn Column3 = new DataColumn();
Column3.DataType = System.Type.GetType("System.Int64");
Column3.ColumnName = "StepID";
Column3.AllowDBNull = false;
logTable.Columns.Add(Column3);
DataColumn Column4 = new DataColumn();
Column4.DataType = System.Type.GetType("System.Decimal");
Column4.ColumnName = "MeasVal";
Column4.AllowDBNull = true;
logTable.Columns.Add(Column4);
DataColumn Column5 = new DataColumn();
Column5.DataType = System.Type.GetType("System.String");
Column5.ColumnName = "MeasValStr";
Column5.AllowDBNull = true;
logTable.Columns.Add(Column5);
DataColumn Column6 = new DataColumn();
Column6.DataType = System.Type.GetType("System.String");
Column6.ColumnName = "Message";
Column6.AllowDBNull = true;
logTable.Columns.Add(Column6);
DataColumn Column7 = new DataColumn();
Column7.DataType = System.Type.GetType("System.String");
Column7.ColumnName = "GlobalMin";
Column7.AllowDBNull = true;
logTable.Columns.Add(Column7);
DataColumn Column8 = new DataColumn();
Column8.DataType = System.Type.GetType("System.String");
Column8.ColumnName = "GlobalMax";
Column8.AllowDBNull = true;
logTable.Columns.Add(Column8);
DataColumn Column9 = new DataColumn();
Column9.DataType = System.Type.GetType("System.String");
Column9.ColumnName = "Result";
Column9.AllowDBNull = false;
logTable.Columns.Add(Column9);
DataColumn Column10 = new DataColumn();
Column10.DataType = System.Type.GetType("System.String");
Column10.ColumnName = "SpentTime";
Column10.AllowDBNull = true;
logTable.Columns.Add(Column10);
// Create an array for DataColumn objects.
DataColumn[] keys = new DataColumn[1];
keys[0] = Column0;
logTable.PrimaryKey = keys;
// Return the new DataTable.
return logTable;
}
private DataTable CPXV2_MakeProcLogTable()
{
// Create a new DataTable titled 'Names.'
DataTable logTable = new DataTable("TestResult");
// Add three column objects to the table.
DataColumn Column0 = new DataColumn();
Column0.DataType = System.Type.GetType("System.Int64");
Column0.ColumnName = "No";
Column0.AllowDBNull = false;
logTable.Columns.Add(Column0);
DataColumn Column1 = new DataColumn();
Column1.DataType = System.Type.GetType("System.DateTime");
Column1.ColumnName = "TestDT";
Column1.AllowDBNull = true;
logTable.Columns.Add(Column1);
DataColumn Column2 = new DataColumn();
Column2.DataType = System.Type.GetType("System.String");
Column2.ColumnName = "LogData";
Column2.AllowDBNull = false;
logTable.Columns.Add(Column2);
// Create an array for DataColumn objects.
DataColumn[] keys = new DataColumn[1];
keys[0] = Column0;
logTable.PrimaryKey = keys;
// Return the new DataTable.
return logTable;
}
private enum eCPXV2_CreateFileInfo
{
SuccessSavePos = 0,
FailedSavePos,
MesSavePos,
CheckLogSavePos
}
private string CPXV2_GetFileName(LogMappedPacket GetMappedInfo, string strCreateName)
{
Random randNumber = new Random();
string strFileName = strCreateName;
if (GetMappedInfo.objOptionFileName[0].Data.CompareTo("-") == 0)
strFileName += @"LogFileTemp" + @randNumber.Next().ToString() + @GetMappedInfo.objOptionFileExtension[0].Data;
else
strFileName += @GetMappedInfo.objOptionFileName[0].Data + @GetMappedInfo.objOptionFileExtension[0].Data;
if (File.Exists(strFileName) == true)
{
while (true)
{
strFileName = strCreateName;
if (GetMappedInfo.objOptionFileName[0].Data.CompareTo("-") == 0)
strFileName += @"LogFileTemp" + @randNumber.Next().ToString() + @GetMappedInfo.objOptionFileExtension[0].Data;
else
strFileName += @GetMappedInfo.objOptionFileName[0].Data + "_" + @randNumber.Next().ToString() + @GetMappedInfo.objOptionFileExtension[0].Data;
if (File.Exists(strFileName) == false)
break;
}
}
return strFileName;
}
private string CPXV2_GetFileSaveInformation(eCPXV2_CreateFileInfo fileInfo,
LogMappedPacket GetMappedInfo,
int iPos,
string strMakeDate,
bool bGetOnlyFilePath = false)
{
string strMakeInfo = string.Empty;
string strMakeName = string.Empty;
switch (fileInfo)
{
case eCPXV2_CreateFileInfo.SuccessSavePos:
strMakeInfo = LoadInfo.SERVER_SAVE_POS + @"\" + strMakeDate;
strMakeInfo += @"LogFileSave_ProcessPort" + (iPos + 1).ToString("D2") + "(" + GetMappedInfo.nStreamPort + ")_" + GetMappedInfo.objHost[0].Data + "_" + GetMappedInfo.objSection[0].Data + @"\";
break;
case eCPXV2_CreateFileInfo.FailedSavePos:
strMakeInfo = LoadInfo.SERVER_SAVE_POS + @"\" + strMakeDate;
strMakeInfo += @"LogFileSave_ProcessPort" + (iPos + 1).ToString("D2") + "(" + GetMappedInfo.nStreamPort + ")_" + GetMappedInfo.objHost[0].Data + "_" + GetMappedInfo.objSection[0].Data + @"\ProcessingFailed\";
break;
case eCPXV2_CreateFileInfo.MesSavePos:
strMakeInfo = LoadInfo.MES_SAVE_POS + @"\MESLogSave_ProcessPort" + (iPos + 1).ToString("D2") + "(" + GetMappedInfo.nStreamPort + ")_" + GetMappedInfo.objHost[0].Data + "_" + GetMappedInfo.objSection[0].Data + @"\";
strMakeInfo += strMakeDate;
break;
case eCPXV2_CreateFileInfo.CheckLogSavePos:
strMakeInfo = LoadInfo.SERVER_SAVE_POS + @"\" + strMakeDate;
strMakeInfo += @"LogFileSave_ProcessPort" + (iPos + 1).ToString("D2") + "(" + GetMappedInfo.nStreamPort + ")_" + GetMappedInfo.objHost[0].Data + "_" + GetMappedInfo.objSection[0].Data + @"\LogCheck\";
break;
}
if (Directory.Exists(strMakeInfo) == false)
Directory.CreateDirectory(strMakeInfo);
if (bGetOnlyFilePath == false)
strMakeName = CPXV2_GetFileName(GetMappedInfo, strMakeInfo);
else
strMakeName = strMakeInfo;
return strMakeName;
}
private bool CPXV2_SummaryLastNoCheck(eConnCategory eConnType, ref Int64 nLastNo, ref Int64 nRowCnt)
{
nLastNo = 0;
nRowCnt = 0;
bool bResult = true;
string strGetTableName = string.Empty;
if (eConnType == eConnCategory.ShortTerm)
strGetTableName = MngDBLogConn.GetDBConnectInfo().ConnShortTerm.SUMMARY_TABLE;
else if (eConnType == eConnCategory.LongTerm)
strGetTableName = MngDBLogConn.GetDBConnectInfo().ConnLongTerm.SUMMARY_TABLE;
else
{
bResult = false;
return bResult;
}
try
{
//Summary 테이블 현재 마지막 인덱스 번호 획득
DataSet ds = QueryStreamProcess(eConnType, "SELECT IDENT_CURRENT('" + strGetTableName + "') AS LastNo");
bool hasRows = XCommons.isHasRow(ds);
//인덱스 번호 획득 실패시 예외
if (hasRows == false)
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + CPXV2_CpLogProcessInfo.strProcessDebugInfo + @" CPXV2 CpLogProcess Summary Table LogProcess/LastNo Query failed. [SystemX.Net.MiddlewareUI : MainForm.SummaryLastNoCheck]", ConsoleColor.Yellow, LogMessageLevel.DEBUG);
throw new Exception("[" + CPXV2_CpLogProcessInfo.strGetFileName + "] When the file is in progress.");
}
//인덱스 번호 변환 실패 예외
if (Int64.TryParse(ds.Tables[0].Rows[0].ItemArray[0].ToString(), out nLastNo) == false)
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + CPXV2_CpLogProcessInfo.strProcessDebugInfo +
@" CPXV2 CpLogProcess [" + strGetTableName + "] index number conversion failed failed. [SystemX.Net.MiddlewareUI : MainForm.SummaryLastNoCheck]", ConsoleColor.Red, LogMessageLevel.FATAL);
throw new Exception();
}
if (nLastNo == 0)
{
ds = QueryStreamProcess(eConnType, "SELECT ROWS FROM SYS.SYSINDEXES WHERE ID = OBJECT_ID ('" + strGetTableName + "') AND INDID < 2");
hasRows = XCommons.isHasRow(ds);
//인덱스 번호 획득 실패시 예외
if (hasRows == false)
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + CPXV2_CpLogProcessInfo.strProcessDebugInfo + @" CPXV2 CpLogProcess Summary Table LogProcess/LastNo Query failed(SYS.SYSINDEXES). [SystemX.Net.MiddlewareUI : MainForm.SummaryLastNoCheck]", ConsoleColor.Yellow, LogMessageLevel.DEBUG);
throw new Exception("[" + CPXV2_CpLogProcessInfo.strGetFileName + "] When the file is in progress(SYS.SYSINDEXES).");
}
nRowCnt = Convert.ToInt64(ds.Tables[0].Rows[0]["ROWS"]);
}
}
catch
{
bResult = false;
}
return bResult;
}
private void RegisterCpLogComment(ref int nProcPos, DataRow[] SetMakeLogRows)
{
//CpLog 의 정보와 VRFY 정보를 조건에 따라 생성한 DataRow에 업데이트
SetMakeLogRows[nProcPos]["StepID"] = "1";
SetMakeLogRows[nProcPos]["MeasVal"] = Convert.ToDecimal(0);
SetMakeLogRows[nProcPos]["MeasValStr"] = "";
SetMakeLogRows[nProcPos]["Message"] = CPXV2_CpLogProcessInfo.strCpLogFileComment;
SetMakeLogRows[nProcPos]["GlobalMin"] = "";
SetMakeLogRows[nProcPos]["GlobalMax"] = "";
SetMakeLogRows[nProcPos]["Result"] = "NONE";
SetMakeLogRows[nProcPos]["SpentTime"] = "0";
nProcPos += 1;
}
private void RegisterCpLogShortData(ref int nProcPos, DataTable SetCpLogTable, DataSet dsVRFYInfo, DataRow dr, DataRow[] SetMakeLogRows)
{
string strGetMeasure = string.Empty;
//CpLog 한행의 정보 획득
ShortLogParamInfo.STEP = dr["STEP"].ToString().Trim();
ShortLogParamInfo.POSITION = dr["POSITION"].ToString().Trim();
ShortLogParamInfo.MO = dr["MO"].ToString().Trim();
ShortLogParamInfo.FNC_NAME = dr["FNC_NAME"].ToString().Trim();
ShortLogParamInfo.MIN = dr["MIN"].ToString().Trim();
ShortLogParamInfo.MEASURE = dr["MEASURE"].ToString().Trim();
ShortLogParamInfo.MAX = dr["MAX"].ToString().Trim();
ShortLogParamInfo.DIM = dr["DIM"].ToString().Trim();
ShortLogParamInfo.CHECK = dr["CHECK"].ToString().Trim();
ShortLogParamInfo.SPENT_TIME = dr["SPENT_TIME"].ToString().Trim();
ShortLogParamInfo.INFO = dr["INFO"].ToString().Trim();
ShortLogParamInfo.GLOBAL_SPEC = false;
ShortLogParamInfo.VRFY_MIN = "";
ShortLogParamInfo.VRFY_MAX = "";
//VRFY 키 지정 검색 > 현재의 STEP 이 VRFY 에 존재하면 해당 STEP 의 정보 VRFY 에서 가져옴
DataRow getDr = dsVRFYInfo.Tables[0].Rows.Find(ShortLogParamInfo.STEP);
if (getDr != null)
{
ShortLogParamInfo.GLOBAL_SPEC = Convert.ToBoolean(getDr["IsGlobal"]);
ShortLogParamInfo.VRFY_MIN = getDr["SpecMin"].ToString().Trim();
ShortLogParamInfo.VRFY_MAX = getDr["SpecMax"].ToString().Trim();
}
//DataRow 를 설정된 DataTable Format으로 한행 생성
SetMakeLogRows[nProcPos] = SetCpLogTable.NewRow();
//CpLog 의 정보와 VRFY 정보를 조건에 따라 생성한 DataRow에 업데이트
SetMakeLogRows[nProcPos]["StepID"] = ShortLogParamInfo.STEP;
SetMakeLogRows[nProcPos]["MeasVal"] = Convert.ToDecimal(0);
SetMakeLogRows[nProcPos]["MeasValStr"] = "";
SetMakeLogRows[nProcPos]["Message"] = "";
if (ShortLogParamInfo.FNC_NAME.IndexOf("PRINTOUT") >= 0)
{
if (ShortLogParamInfo.MEASURE.Length > ShortLogParamInfo.MessageLength)
{
strGetMeasure = ShortLogParamInfo.MEASURE;
strGetMeasure = strGetMeasure.Substring(0, ShortLogParamInfo.MessageLength);
SetMakeLogRows[nProcPos]["Message"] = strGetMeasure;
}
else SetMakeLogRows[nProcPos]["Message"] = ShortLogParamInfo.MEASURE;
}
else if (ShortLogParamInfo.DIM.IndexOf("STR") >= 0 ||
ShortLogParamInfo.DIM.IndexOf("STRING") >= 0 ||
ShortLogParamInfo.DIM.IndexOf("HEX") >= 0 ||
ShortLogParamInfo.DIM.IndexOf("NONE") >= 0 ||
ShortLogParamInfo.DIM.IndexOf("BIN") >= 0 ||
ShortLogParamInfo.DIM == string.Empty)
{
if (ShortLogParamInfo.MEASURE.Length > ShortLogParamInfo.MessageValLength)
{
strGetMeasure = ShortLogParamInfo.MEASURE;
strGetMeasure = strGetMeasure.Substring(0, ShortLogParamInfo.MessageValLength);
SetMakeLogRows[nProcPos]["MeasValStr"] = strGetMeasure;
}
else SetMakeLogRows[nProcPos]["MeasValStr"] = ShortLogParamInfo.MEASURE;
}
else
{
//상기 케이스에 다 해당 안될때 Decimal 삽입 아무값이 없을 때 0 삽입
if (ShortLogParamInfo.MEASURE.Length <= 0)
SetMakeLogRows[nProcPos]["MeasVal"] = Convert.ToDecimal(0);
else
{
//Measure 존재에 대한 값변환 시도 및 실패시 String 항목으로 삽입
decimal getMeasValue = decimal.Zero;
if (Decimal.TryParse(ShortLogParamInfo.MEASURE, out getMeasValue))
SetMakeLogRows[nProcPos]["MeasVal"] = getMeasValue;
else
{
//0 삽입 및 Str 에 >> 표시 및 Message 에 데이터 표시
SetMakeLogRows[nProcPos]["MeasVal"] = Convert.ToDecimal(0);
SetMakeLogRows[nProcPos]["MeasValStr"] = ">>";
SetMakeLogRows[nProcPos]["Message"] = ShortLogParamInfo.MEASURE;
}
}
}
//IS GLOBAL 이면 CpLog 에서 읽은 정보 삽입 아니면 VRFY 에서 읽은 정보 삽입
if (ShortLogParamInfo.GLOBAL_SPEC)
{
SetMakeLogRows[nProcPos]["GlobalMin"] = ShortLogParamInfo.MIN;
SetMakeLogRows[nProcPos]["GlobalMax"] = ShortLogParamInfo.MAX;
}
else
{
SetMakeLogRows[nProcPos]["GlobalMin"] = ShortLogParamInfo.VRFY_MIN;
SetMakeLogRows[nProcPos]["GlobalMax"] = ShortLogParamInfo.VRFY_MAX;
if (ShortLogParamInfo.VRFY_MIN.Length <= 0 &&
ShortLogParamInfo.VRFY_MAX.Length <= 0)
{
if (ShortLogParamInfo.MIN.Length > 0 ||
ShortLogParamInfo.MAX.Length > 0)
{
SetMakeLogRows[nProcPos]["GlobalMin"] = ShortLogParamInfo.MIN;
SetMakeLogRows[nProcPos]["GlobalMax"] = ShortLogParamInfo.MAX;
}
}
}
SetMakeLogRows[nProcPos]["Result"] = ShortLogParamInfo.CHECK;
SetMakeLogRows[nProcPos]["SpentTime"] = ShortLogParamInfo.SPENT_TIME;
nProcPos += 1;
}
private void RegisterCpLogLongData(ref int nProcPos, DataTable SetCpLogTable, DataSet dsVRFYInfo, DataRow dr, DataRow[] SetMakeLogRows)
{
string strGetMeasure = string.Empty;
//CpLog 한행의 정보 획득
LongLogParamInfo.STEP = dr["STEP"].ToString().Trim();
LongLogParamInfo.POSITION = dr["POSITION"].ToString().Trim();
LongLogParamInfo.MO = dr["MO"].ToString().Trim();
LongLogParamInfo.FNC_NAME = dr["FNC_NAME"].ToString().Trim();
LongLogParamInfo.MIN = dr["MIN"].ToString().Trim();
LongLogParamInfo.MEASURE = dr["MEASURE"].ToString().Trim();
LongLogParamInfo.MAX = dr["MAX"].ToString().Trim();
LongLogParamInfo.DIM = dr["DIM"].ToString().Trim();
LongLogParamInfo.CHECK = dr["CHECK"].ToString().Trim();
LongLogParamInfo.SPENT_TIME = dr["SPENT_TIME"].ToString().Trim();
LongLogParamInfo.INFO = dr["INFO"].ToString().Trim();
LongLogParamInfo.GLOBAL_SPEC = false;
LongLogParamInfo.VRFY_MIN = "";
LongLogParamInfo.VRFY_MAX = "";
//VRFY 키 지정 검색 > 현재의 STEP 이 VRFY 에 존재하면 해당 STEP 의 정보 VRFY 에서 가져옴
DataRow getDr = dsVRFYInfo.Tables[0].Rows.Find(LongLogParamInfo.STEP);
if (getDr != null)
{
LongLogParamInfo.GLOBAL_SPEC = Convert.ToBoolean(getDr["IsGlobal"]);
LongLogParamInfo.VRFY_MIN = getDr["SpecMin"].ToString().Trim();
LongLogParamInfo.VRFY_MAX = getDr["SpecMax"].ToString().Trim();
}
//DataRow 를 설정된 DataTable Format으로 한행 생성
SetMakeLogRows[nProcPos] = SetCpLogTable.NewRow();
//CpLog 의 정보와 VRFY 정보를 조건에 따라 생성한 DataRow에 업데이트
SetMakeLogRows[nProcPos]["StepID"] = LongLogParamInfo.STEP;
SetMakeLogRows[nProcPos]["MeasVal"] = Convert.ToDecimal(0);
SetMakeLogRows[nProcPos]["MeasValStr"] = "";
SetMakeLogRows[nProcPos]["Message"] = "";
if (LongLogParamInfo.FNC_NAME.IndexOf("PRINTOUT") >= 0)
{
if (LongLogParamInfo.MEASURE.Length > LongLogParamInfo.MessageLength)
{
strGetMeasure = LongLogParamInfo.MEASURE;
strGetMeasure = strGetMeasure.Substring(0, LongLogParamInfo.MessageLength);
SetMakeLogRows[nProcPos]["Message"] = strGetMeasure;
}
else SetMakeLogRows[nProcPos]["Message"] = LongLogParamInfo.MEASURE;
}
else if (LongLogParamInfo.DIM.IndexOf("STR") >= 0 ||
LongLogParamInfo.DIM.IndexOf("STRING") >= 0 ||
LongLogParamInfo.DIM.IndexOf("HEX") >= 0 ||
LongLogParamInfo.DIM.IndexOf("NONE") >= 0 ||
LongLogParamInfo.DIM.IndexOf("BIN") >= 0 ||
LongLogParamInfo.DIM == string.Empty)
{
if (LongLogParamInfo.MEASURE.Length > LongLogParamInfo.MessageValLength)
{
strGetMeasure = LongLogParamInfo.MEASURE;
strGetMeasure = strGetMeasure.Substring(0, LongLogParamInfo.MessageValLength);
SetMakeLogRows[nProcPos]["MeasValStr"] = strGetMeasure;
}
else SetMakeLogRows[nProcPos]["MeasValStr"] = LongLogParamInfo.MEASURE;
}
else
{
//상기 케이스에 다 해당 안될때 Decimal 삽입 아무값이 없을 때 0 삽입
if (LongLogParamInfo.MEASURE.Length <= 0)
SetMakeLogRows[nProcPos]["MeasVal"] = Convert.ToDecimal(0);
else
{
//Measure 존재에 대한 값변환 시도 및 실패시 String 항목으로 삽입
decimal getMeasValue = decimal.Zero;
if (Decimal.TryParse(LongLogParamInfo.MEASURE, out getMeasValue))
SetMakeLogRows[nProcPos]["MeasVal"] = getMeasValue;
else
{
//0 삽입 및 Str 에 >> 표시 및 Message 에 데이터 표시
SetMakeLogRows[nProcPos]["MeasVal"] = Convert.ToDecimal(0);
SetMakeLogRows[nProcPos]["MeasValStr"] = ">>";
SetMakeLogRows[nProcPos]["Message"] = LongLogParamInfo.MEASURE;
}
}
}
//IS GLOBAL 이면 CpLog 에서 읽은 정보 삽입 아니면 VRFY 에서 읽은 정보 삽입
if (LongLogParamInfo.GLOBAL_SPEC)
{
SetMakeLogRows[nProcPos]["GlobalMin"] = LongLogParamInfo.MIN;
SetMakeLogRows[nProcPos]["GlobalMax"] = LongLogParamInfo.MAX;
}
else
{
SetMakeLogRows[nProcPos]["GlobalMin"] = LongLogParamInfo.VRFY_MIN;
SetMakeLogRows[nProcPos]["GlobalMax"] = LongLogParamInfo.VRFY_MAX;
if (LongLogParamInfo.VRFY_MIN.Length <= 0 &&
LongLogParamInfo.VRFY_MAX.Length <= 0)
{
if (LongLogParamInfo.MIN.Length > 0 ||
LongLogParamInfo.MAX.Length > 0)
{
SetMakeLogRows[nProcPos]["GlobalMin"] = LongLogParamInfo.MIN;
SetMakeLogRows[nProcPos]["GlobalMax"] = LongLogParamInfo.MAX;
}
}
}
SetMakeLogRows[nProcPos]["Result"] = LongLogParamInfo.CHECK;
SetMakeLogRows[nProcPos]["SpentTime"] = LongLogParamInfo.SPENT_TIME;
nProcPos += 1;
}
private DataRow[] CPXV2_ShortProcessMakeLogRows(int nLogCnt, DataSet dsVRFYInfo, DataTable dtLogData)
{
bool bMakeProcResult = true;
DataRow[] SetMakeLogRows = new DataRow[nLogCnt];
int nProcPos = 0;
//CpLog 삽입할 DataTable 생성
DataTable SetCpLogTable;
SetCpLogTable = CPXV2_MakeCpLogTable();
//읽은 Cplog DataTable DataRow 정보로 DataRow 업데이트 및 Datatable에 삽입
//현재 VRFY 최근 Step 별 정보로 IsGlobal 일때 Spec 을 가져오거나 측정되어 생성된 Spec 구분하여 처리
string strGetMeasure = string.Empty;
string strGetMin = string.Empty;
string strGetMax = string.Empty;
string strGetVRFYMin = string.Empty;
string strGetVRFYMax = string.Empty;
//Make Comment Step
try
{
//DataRow 를 설정된 DataTable Format으로 한행 생성
SetMakeLogRows[nProcPos] = SetCpLogTable.NewRow();
//CpLog 의 정보와 VRFY 정보를 조건에 따라 생성한 DataRow에 업데이트
RegisterCpLogComment(ref nProcPos, SetMakeLogRows);
}
catch (Exception ex)
{
bMakeProcResult = false;
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + CPXV2_CpLogProcessInfo.strProcessDebugInfo + @" Step:" + "1 Insert log data(CpLog Comment) make failed. " + ex.Message + " [SystemX.Net.MiddlewareUI : MainForm.ProcessMakeLogRows]", ConsoleColor.Red, LogMessageLevel.FATAL);
goto MAKE_ROW_RPCOESS_FAILED;
}
//
foreach (DataRow dr in dtLogData.Rows)
{
try
{
RegisterCpLogShortData(ref nProcPos, SetCpLogTable, dsVRFYInfo, dr, SetMakeLogRows);
}
catch (Exception ex)
{
bMakeProcResult = false;
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + CPXV2_CpLogProcessInfo.strProcessDebugInfo + @" Step:" + ShortLogParamInfo.STEP + @" Insert log data make failed. " + ex.Message + " [SystemX.Net.MiddlewareUI : MainForm.ProcessMakeLogRows]", ConsoleColor.Red, LogMessageLevel.FATAL);
break;
}
}
MAKE_ROW_RPCOESS_FAILED:
if (bMakeProcResult == false)
SetMakeLogRows = null;
return SetMakeLogRows;
}
private DataRow[] CPXV2_LongProcessMakeLogRows(int nLogCnt, DataSet dsVRFYInfo, DataTable dtLogData)
{
bool bMakeProcResult = true;
DataRow[] SetMakeLogRows = new DataRow[nLogCnt];
int nProcPos = 0;
//CpLog 삽입할 DataTable 생성
DataTable SetCpLogTable;
SetCpLogTable = CPXV2_MakeCpLogTable();
//읽은 Cplog DataTable DataRow 정보로 DataRow 업데이트 및 Datatable에 삽입
//현재 VRFY 최근 Step 별 정보로 IsGlobal 일때 Spec 을 가져오거나 측정되어 생성된 Spec 구분하여 처리
string strGetMeasure = string.Empty;
string strGetMin = string.Empty;
string strGetMax = string.Empty;
string strGetVRFYMin = string.Empty;
string strGetVRFYMax = string.Empty;
//Make Comment Step
try
{
//DataRow 를 설정된 DataTable Format으로 한행 생성
SetMakeLogRows[nProcPos] = SetCpLogTable.NewRow();
//CpLog 의 정보와 VRFY 정보를 조건에 따라 생성한 DataRow에 업데이트
RegisterCpLogComment(ref nProcPos, SetMakeLogRows);
}
catch (Exception ex)
{
bMakeProcResult = false;
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + CPXV2_CpLogProcessInfo.strProcessDebugInfo + @" Step:" + "1 Insert log data(CpLog Comment) make failed. " + ex.Message + " [SystemX.Net.MiddlewareUI : MainForm.ProcessMakeLogRows]", ConsoleColor.Red, LogMessageLevel.FATAL);
goto MAKE_ROW_RPCOESS_FAILED;
}
//
foreach (DataRow dr in dtLogData.Rows)
{
try
{
RegisterCpLogLongData(ref nProcPos, SetCpLogTable, dsVRFYInfo, dr, SetMakeLogRows);
}
catch (Exception ex)
{
bMakeProcResult = false;
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + CPXV2_CpLogProcessInfo.strProcessDebugInfo + @" Step:" + LongLogParamInfo.STEP + @" Insert log data make failed. " + ex.Message + " [SystemX.Net.MiddlewareUI : MainForm.ProcessMakeLogRows]", ConsoleColor.Red, LogMessageLevel.FATAL);
break;
}
}
MAKE_ROW_RPCOESS_FAILED:
if (bMakeProcResult == false)
SetMakeLogRows = null;
return SetMakeLogRows;
}
private void CPXV2_MakeSummaryData(int iPos, string strStationName, string strTestListID, string strHostID, string strSection,
ref HISTLogSummary[] summaryItem)
{
summaryItem[0].StationName = strStationName;
summaryItem[0].TestType = CPXV2_CpLogProcessInfo.strTestType;
summaryItem[0].Version = CPXV2_CpLogProcessInfo.strVersion;
summaryItem[0].ProdCode = CPXV2_CpLogProcessInfo.strProdCode;
summaryItem[0].TestListFileNo = CPXV2_CpLogProcessInfo.nTestListFileNo;
summaryItem[0].TestListVariantNo = CPXV2_CpLogProcessInfo.nTestListVariantNo;
summaryItem[0].TestListCntID = strTestListID;
summaryItem[0].StepVersion = CPXV2_CpLogProcessInfo.nGetReadStepVersion;
summaryItem[0].Host = strHostID;
summaryItem[0].Section = strSection;
summaryItem[0].ProdNoC = thisConnInfo[iPos].geyLatestTestListInfo.Tables[0].Rows[0]["ProdNo_C"].ToString();
summaryItem[0].ProdNoP = thisConnInfo[iPos].geyLatestTestListInfo.Tables[0].Rows[0]["ProdNo_P"].ToString();
summaryItem[0].TestCode = thisConnInfo[iPos].geyLatestTestListInfo.Tables[0].Rows[0]["TestCode"].ToString();
summaryItem[0].TestListFileName = thisConnInfo[iPos].geyLatestTestListInfo.Tables[0].Rows[0]["FileName"].ToString();
summaryItem[0].ProductID = CPXV2_CpLogProcessInfo.dicCpLogHeader["PART_ID"];
summaryItem[0].Result = CPXV2_CpLogProcessInfo.dicCpLogHeader["RESULT"];
summaryItem[0].Duration = CPXV2_CpLogProcessInfo.dicCpLogHeader["DURATION"];
summaryItem[0].TestDT = Convert.ToDateTime(CPXV2_CpLogProcessInfo.strStTime);
//
summaryItem[1].StationName = strStationName;
summaryItem[1].TestType = CPXV2_CpLogProcessInfo.strTestType;
summaryItem[1].Version = CPXV2_CpLogProcessInfo.strVersion;
summaryItem[1].ProdCode = CPXV2_CpLogProcessInfo.strProdCode;
summaryItem[1].TestListFileNo = CPXV2_CpLogProcessInfo.nTestListFileNo;
summaryItem[1].TestListVariantNo = CPXV2_CpLogProcessInfo.nTestListVariantNo;
summaryItem[1].TestListCntID = strTestListID;
summaryItem[1].StepVersion = CPXV2_CpLogProcessInfo.nGetReadStepVersion;
summaryItem[1].Host = strHostID;
summaryItem[1].Section = strSection;
summaryItem[1].ProdNoC = thisConnInfo[iPos].geyLatestTestListInfo.Tables[0].Rows[0]["ProdNo_C"].ToString();
summaryItem[1].ProdNoP = thisConnInfo[iPos].geyLatestTestListInfo.Tables[0].Rows[0]["ProdNo_P"].ToString();
summaryItem[1].TestCode = thisConnInfo[iPos].geyLatestTestListInfo.Tables[0].Rows[0]["TestCode"].ToString();
summaryItem[1].TestListFileName = thisConnInfo[iPos].geyLatestTestListInfo.Tables[0].Rows[0]["FileName"].ToString();
summaryItem[1].ProductID = CPXV2_CpLogProcessInfo.dicCpLogHeader["PART_ID"];
summaryItem[1].Result = CPXV2_CpLogProcessInfo.dicCpLogHeader["RESULT"];
summaryItem[1].Duration = CPXV2_CpLogProcessInfo.dicCpLogHeader["DURATION"];
summaryItem[1].TestDT = Convert.ToDateTime(CPXV2_CpLogProcessInfo.strStTime);
}
private async Task<bool> CPXV2_CheckDuplicateData(eConnCategory eConnType, int iPos, string strStationName, string strHostID, string strSection, Int64 nPreNo)
{
DataSet dsLastSummaryInfo = null;
DataSet dsDateTimeInfo = null;
string strGetTableName = string.Empty;
if(nPreNo < 0)
return false;
if (eConnType == eConnCategory.ShortTerm)
strGetTableName = MngDBLogConn.GetDBConnectInfo().ConnShortTerm.SUMMARY_TABLE;
else if (eConnType == eConnCategory.LongTerm)
strGetTableName = MngDBLogConn.GetDBConnectInfo().ConnLongTerm.SUMMARY_TABLE;
else
return true;
string strSummaryQueryText = "SELECT " +
"StationName, " +
"TestType, " +
"Version, " +
"ProdCode, " +
"TestListFileNo, " +
"TestListVariantNo, " +
"TestListCntID," +
"StepVersion, " +
"HostID, " +
"Section, " +
"ProdNo_C, " +
"ProdNo_P, " +
"Testcode, " +
"TestListFileName, " +
"ProductID, " +
"Result, " +
"Duration, " +
"TestDT " +
"FROM [" + strGetTableName + "] " +
"WHERE No = " + nPreNo.ToString() + ";";
//직전 Summary Information 획득
dsLastSummaryInfo = QueryStreamProcess(eConnType, strSummaryQueryText);
if (XCommons.isHasRow(dsLastSummaryInfo) == false)
return false;
//직전정보와 이전정보를 비교를 위한 선언 > 검사기측 중복으로 동일 로그를 전송해도 무시 하도록
string[] strSummaryInsertInfo = new string[18];
string[] strSummaryBeforeInfo = new string[18];
bool bCompareResult = false;
try
{
//현재 정보중 비교할 정보 삽입
strSummaryInsertInfo[0] = strStationName;
strSummaryInsertInfo[1] = CPXV2_CpLogProcessInfo.strTestType;
strSummaryInsertInfo[2] = CPXV2_CpLogProcessInfo.strVersion;
strSummaryInsertInfo[3] = CPXV2_CpLogProcessInfo.strProdCode;
strSummaryInsertInfo[4] = CPXV2_CpLogProcessInfo.nTestListFileNo.ToString();
strSummaryInsertInfo[5] = CPXV2_CpLogProcessInfo.nTestListVariantNo.ToString();
strSummaryInsertInfo[6] = CPXV2_CpLogProcessInfo.strTestListCntID.ToString();
strSummaryInsertInfo[7] = CPXV2_CpLogProcessInfo.nGetReadStepVersion.ToString();
strSummaryInsertInfo[8] = strHostID;
strSummaryInsertInfo[9] = strSection;
strSummaryInsertInfo[10] = thisConnInfo[iPos].geyLatestTestListInfo.Tables[0].Rows[0]["ProdNo_C"].ToString();
strSummaryInsertInfo[11] = thisConnInfo[iPos].geyLatestTestListInfo.Tables[0].Rows[0]["ProdNo_P"].ToString();
strSummaryInsertInfo[12] = thisConnInfo[iPos].geyLatestTestListInfo.Tables[0].Rows[0]["TestCode"].ToString();
strSummaryInsertInfo[13] = thisConnInfo[iPos].geyLatestTestListInfo.Tables[0].Rows[0]["FileName"].ToString();
strSummaryInsertInfo[14] = CPXV2_CpLogProcessInfo.dicCpLogHeader["PART_ID"];
strSummaryInsertInfo[15] = CPXV2_CpLogProcessInfo.dicCpLogHeader["RESULT"];
strSummaryInsertInfo[16] = CPXV2_CpLogProcessInfo.dicCpLogHeader["DURATION"];
strSummaryInsertInfo[17] = CPXV2_CpLogProcessInfo.strStTime;
//이전 정보중 비교할 정보 삽입
strSummaryBeforeInfo[0] = dsLastSummaryInfo.Tables[0].Rows[0][0].ToString();
strSummaryBeforeInfo[1] = dsLastSummaryInfo.Tables[0].Rows[0][1].ToString();
strSummaryBeforeInfo[2] = dsLastSummaryInfo.Tables[0].Rows[0][2].ToString();
strSummaryBeforeInfo[3] = dsLastSummaryInfo.Tables[0].Rows[0][3].ToString();
strSummaryBeforeInfo[4] = dsLastSummaryInfo.Tables[0].Rows[0][4].ToString();
strSummaryBeforeInfo[5] = dsLastSummaryInfo.Tables[0].Rows[0][5].ToString();
strSummaryBeforeInfo[6] = dsLastSummaryInfo.Tables[0].Rows[0][6].ToString();
strSummaryBeforeInfo[7] = dsLastSummaryInfo.Tables[0].Rows[0][7].ToString();
strSummaryBeforeInfo[8] = dsLastSummaryInfo.Tables[0].Rows[0][8].ToString();
strSummaryBeforeInfo[9] = dsLastSummaryInfo.Tables[0].Rows[0][9].ToString();
strSummaryBeforeInfo[10] = dsLastSummaryInfo.Tables[0].Rows[0][10].ToString();
strSummaryBeforeInfo[11] = dsLastSummaryInfo.Tables[0].Rows[0][11].ToString();
strSummaryBeforeInfo[12] = dsLastSummaryInfo.Tables[0].Rows[0][12].ToString();
strSummaryBeforeInfo[13] = dsLastSummaryInfo.Tables[0].Rows[0][13].ToString();
strSummaryBeforeInfo[14] = dsLastSummaryInfo.Tables[0].Rows[0][14].ToString();
strSummaryBeforeInfo[15] = dsLastSummaryInfo.Tables[0].Rows[0][15].ToString();
strSummaryBeforeInfo[16] = dsLastSummaryInfo.Tables[0].Rows[0][16].ToString();
strSummaryBeforeInfo[17] = dsLastSummaryInfo.Tables[0].Rows[0][17].ToString();
int nDateTimePos = 17;
if (strSummaryBeforeInfo[nDateTimePos].IndexOf("AM") >= 0 || strSummaryBeforeInfo[nDateTimePos].IndexOf("PM") >= 0)
{
string strQueryDateTime = "SELECT DBO.XConvertDateE('" + strSummaryBeforeInfo[nDateTimePos] + "') AS 'DATETIME';";
dsDateTimeInfo = QueryStreamProcess(eConnType, strQueryDateTime);
if (XCommons.isHasRow(dsDateTimeInfo))
{
strSummaryBeforeInfo[nDateTimePos] = dsDateTimeInfo.Tables[0].Rows[0][0].ToString();
strSummaryBeforeInfo[nDateTimePos] = strSummaryBeforeInfo[nDateTimePos].Remove(strSummaryBeforeInfo[nDateTimePos].Length - 8, 8);
}
}
else if (strSummaryBeforeInfo[nDateTimePos].IndexOf("오전") >= 0 || strSummaryBeforeInfo[nDateTimePos].IndexOf("오후") >= 0)
{
string strQueryDateTime = "SELECT DBO.XConvertDateK('" + strSummaryBeforeInfo[nDateTimePos] + "') AS 'DATETIME';";
dsDateTimeInfo = QueryStreamProcess(eConnType, strQueryDateTime);
if (XCommons.isHasRow(dsDateTimeInfo))
{
strSummaryBeforeInfo[nDateTimePos] = dsDateTimeInfo.Tables[0].Rows[0][0].ToString();
strSummaryBeforeInfo[nDateTimePos] = strSummaryBeforeInfo[nDateTimePos].Remove(strSummaryBeforeInfo[nDateTimePos].Length - 8, 8);
}
}
//동일 한지 비교
bCompareResult = strSummaryInsertInfo.SequenceEqual(strSummaryBeforeInfo);
}
catch
{
bCompareResult = true;
}
await Task.Delay(0);
//True : 같다 / False : 다르다
return bCompareResult;
}
private bool CPXV2_CpLogProcess(LogMappedPacket GetMappedInfo, Dictionary<string, string> dicSetLogFileInfo = null, string strSetLogFilePos = "")
{
int iPos = int.MinValue;
bool bRequiredProcLogFile = false;
if (strSetLogFilePos.Length > 0)
bRequiredProcLogFile = true;
if (bRequiredProcLogFile == false)
iPos = GetMappedInfo.nNumber;
else
iPos = 0;
bool bProcessResult = true;
bool bDupLogSkipState = false;
string strProcessDebugInfo = string.Empty;
if (bRequiredProcLogFile == false)
{
strProcessDebugInfo = "[" + (iPos).ToString("D2") + "]" +
"[" + GetMappedInfo.nStreamPort + "]" +
"[" + GetMappedInfo.objHost[0].Data + "]" +
"[" + GetMappedInfo.objSection[0].Data + "]";
}
else
{
strProcessDebugInfo = "[" + (iPos).ToString("D2") + "]" +
"[FTP]" +
"[" + dicSetLogFileInfo["HOST"] + "]" +
"[" + dicSetLogFileInfo["SECTION"] + "]";
}
CPXV2_CpLogProcessInfo.strProcessDebugInfo = strProcessDebugInfo;
string strMakeDate = string.Empty;
string strSuccessFileName = string.Empty;
string strFailedFileName = string.Empty;
string strGetFileName = string.Empty;
CpLogHeader getCpLogHeader = null;
DataTable dtShortLogData = null;
DataTable dtLongLogData = null;
try
{
//파일생성 위치 및 파일명 생성
if (bRequiredProcLogFile == false)
{
strMakeDate = DateTime.Now.ToString(@"yyyy\\MM\\dd\\");
strSuccessFileName = CPXV2_GetFileSaveInformation(eCPXV2_CreateFileInfo.SuccessSavePos, GetMappedInfo, iPos, strMakeDate);
strFailedFileName = CPXV2_GetFileSaveInformation(eCPXV2_CreateFileInfo.FailedSavePos, GetMappedInfo, iPos, strMakeDate);
strGetFileName = Path.GetFileName(strSuccessFileName);
byte[] ucGetFileData = new byte[GetMappedInfo.nLogDataSize];
Array.Copy(GetMappedInfo.ucLogData, 0, ucGetFileData, 0, GetMappedInfo.nLogDataSize);
byte[] ucSetFileData = null;
if (GetMappedInfo.objLogType[0].Data == "RAW_SIZE")
ucSetFileData = XDataArchive.DecompressGZipByteToByte(ucGetFileData);
else if (GetMappedInfo.objLogType[0].Data == "FILE_TRANSFER")
ucSetFileData = XDataArchive.DecompressDeflateByteToByte(ucGetFileData);
else
throw new Exception();
try
{
File.WriteAllBytes(strSuccessFileName, ucSetFileData);
}
catch
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + CPXV2_CpLogProcessInfo.strProcessDebugInfo + @" CPXV2 CpLogProcess [Log File] Create failed. - Need Hard Disk Space Check. [SystemX.Net.MiddlewareUI : MainForm.CPXV2_CpLogProcess]", ConsoleColor.Red, LogMessageLevel.FATAL);
throw new Exception();
}
}
else
strSuccessFileName = strSetLogFilePos;
//해당 CpLog 파일 읽기 및 헤더 정보 획득
dtShortLogData = CpLogFileIO.GetLogData(strSuccessFileName, out getCpLogHeader);
dtLongLogData = dtShortLogData.Copy();
}
catch
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + CPXV2_CpLogProcessInfo.strProcessDebugInfo + @" CPXV2 CpLogProcess Log make information failed. [SystemX.Net.MiddlewareUI : MainForm.CPXV2_CpLogProcess]", ConsoleColor.Yellow, LogMessageLevel.DEBUG);
}
Task<DataRow> tskLongTerm = null;
Stopwatch stMeasTime = new Stopwatch();
stMeasTime.Start();
try
{
//CpLog 파일 읽은 여부 확인
if (dtShortLogData == null || getCpLogHeader == null)
{
throw new Exception("[" + strGetFileName + "] Reading to CpLog file failed.");
}
CPXV2_CpLogProcessInfo.strGetFileName = strGetFileName;
//해당 프로젝트 사용 객체 생성(Summary 생성 관련)
CommonProtocol cp = new CommonProtocol();
//Summary 테이블 다중 접근 방지(인덱스)
DataSet ds = null;
bool hasRows = false;
Int64 nSummaryRowsCount = 0;
Int64 nShortTermLastNo = 0;
Int64 nLongTermLastNo = 0;
Int64 nShortTermPreNo = 0;
Int64 nLongTermPreNo = 0;
int nLogItemCnt = dtShortLogData.Rows.Count;
//int iNPos = 0;
if (CPXV2_SummaryLastNoCheck(eConnCategory.ShortTerm, ref nShortTermLastNo, ref nSummaryRowsCount) == false)
throw new Exception();
else
{
if (nShortTermLastNo == 0)
nShortTermLastNo = nSummaryRowsCount;
else
nShortTermLastNo += 1;
nShortTermPreNo = nShortTermLastNo - 1;
}
if (CPXV2_SummaryLastNoCheck(eConnCategory.LongTerm, ref nLongTermLastNo, ref nSummaryRowsCount) == false)
throw new Exception();
else
{
if (nLongTermLastNo == 0)
nLongTermLastNo = nSummaryRowsCount;
else
nLongTermLastNo += 1;
nLongTermPreNo = nLongTermLastNo - 1;
}
//Summary 삽입 정보 생성
if (bRequiredProcLogFile == false)
{
CPXV2_CpLogProcessInfo.strHostID = GetMappedInfo.objHost[0].Data.Trim();
CPXV2_CpLogProcessInfo.strSection = GetMappedInfo.objSection[0].Data.Trim();
CPXV2_CpLogProcessInfo.strStationID = getCpLogHeader.CHANNEL.Trim();
CPXV2_CpLogProcessInfo.nShortTermIdent = nShortTermLastNo;
CPXV2_CpLogProcessInfo.nLongTermIdent = nLongTermLastNo;
CPXV2_CpLogProcessInfo.strStationName = GetMappedInfo.objStationName[0].Data;
CPXV2_CpLogProcessInfo.strProdNo_P = GetMappedInfo.objProdPNo[0].Data;
CPXV2_CpLogProcessInfo.strProdNo_C = GetMappedInfo.objProdCNo[0].Data;
CPXV2_CpLogProcessInfo.strTestType = GetMappedInfo.objTestType[0].Data;
CPXV2_CpLogProcessInfo.strTestCode = GetMappedInfo.objTestCode[0].Data;
CPXV2_CpLogProcessInfo.strVersion = GetMappedInfo.objVersion[0].Data;
CPXV2_CpLogProcessInfo.strProdCode = GetMappedInfo.objProdCode[0].Data;
CPXV2_CpLogProcessInfo.nTestListVariantNo = (int)GetMappedInfo.nTestListVariantNo;
CPXV2_CpLogProcessInfo.strTestListCntID = GetMappedInfo.objResultTestListCntID[0].Data;
}
else
{
CPXV2_CpLogProcessInfo.strHostID = dicSetLogFileInfo["HOST"];
CPXV2_CpLogProcessInfo.strSection = dicSetLogFileInfo["SECTION"];
CPXV2_CpLogProcessInfo.strStationID = getCpLogHeader.CHANNEL.Trim();
CPXV2_CpLogProcessInfo.nShortTermIdent = nShortTermLastNo;
CPXV2_CpLogProcessInfo.nLongTermIdent = nLongTermLastNo;
CPXV2_CpLogProcessInfo.strStationName = dicSetLogFileInfo["STATION_NAME"];
CPXV2_CpLogProcessInfo.strProdNo_P = dicSetLogFileInfo["P_TTNR"];
CPXV2_CpLogProcessInfo.strProdNo_C = dicSetLogFileInfo["TTNR"];
CPXV2_CpLogProcessInfo.strTestType = dicSetLogFileInfo["TEST_TYPE"];
CPXV2_CpLogProcessInfo.strTestCode = dicSetLogFileInfo["TEST_CODE"];
CPXV2_CpLogProcessInfo.strVersion = dicSetLogFileInfo["VERSION"];
CPXV2_CpLogProcessInfo.strProdCode = dicSetLogFileInfo["PROD_CODE"];
CPXV2_CpLogProcessInfo.nTestListVariantNo = Convert.ToInt32(dicSetLogFileInfo["VARIANT_NO"]);
CPXV2_CpLogProcessInfo.strTestListCntID = dicSetLogFileInfo["TESTLIST_ID"];
}
CPXV2_CpLogProcessInfo.dicCpLogHeader.Clear();
CPXV2_CpLogProcessInfo.nGetReadStepVersion = int.MaxValue;
/*
* CpLog Header 상 검사 시작 시간 획득 및 맨앞 공백 제거
*/
CPXV2_CpLogProcessInfo.strStTime = getCpLogHeader.ST_TIME.Replace("_", " ");
CPXV2_CpLogProcessInfo.strStTime = CPXV2_CpLogProcessInfo.strStTime.Insert(CPXV2_CpLogProcessInfo.strStTime.Length - 11, "-");
CPXV2_CpLogProcessInfo.strStTime = CPXV2_CpLogProcessInfo.strStTime.Insert(CPXV2_CpLogProcessInfo.strStTime.Length - 9, "-");
CPXV2_CpLogProcessInfo.strStTime = CPXV2_CpLogProcessInfo.strStTime.Insert(CPXV2_CpLogProcessInfo.strStTime.Length - 4, ":");
CPXV2_CpLogProcessInfo.strStTime = CPXV2_CpLogProcessInfo.strStTime.Insert(CPXV2_CpLogProcessInfo.strStTime.Length - 2, ":");
if (CPXV2_CpLogProcessInfo.strStTime[0] == ' ')
CPXV2_CpLogProcessInfo.strStTime = CPXV2_CpLogProcessInfo.strStTime.Remove(0, 1);
try
{
//CpLog 헤더에 대한 항목 Dictionary 생성 > Summary 정보 삽입 위함
Type type = typeof(CpLogHeader);
FieldInfo[] f = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
foreach (FieldInfo item in f)
{
CPXV2_CpLogProcessInfo.dicCpLogHeader.Add(item.Name.Substring(item.Name.IndexOf("<") + 1, item.Name.IndexOf(">") - item.Name.IndexOf("<") - 1)
, item.GetValue(getCpLogHeader).ToString().Trim());
}
//
CPXV2_CpLogProcessInfo.strCpLogFileComment = getCpLogHeader.COMMENT;
}
catch
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + strProcessDebugInfo +
@" CPXV2 CpLogProcess - CpLogHeader failed to create per-item for header. [SystemX.Net.MiddlewareUI : MainForm.CPXV2_CpLogProcess]", ConsoleColor.Red, LogMessageLevel.FATAL);
throw new Exception();
}
/*
string strQueryTestListInformation = "SELECT A.ProdNo_C, " +
"B.ProdNo_P, " +
"D.TestCode, " +
"B.FileName, " +
"B.UseTLPosition " +
"FROM [PROD_Release] AS A " +
"INNER JOIN(SELECT X.No, X.ProdNo_P, X.TestType, X.Version, X.ProdCode, X.FileName, X.UseTLPosition, X.GroupNo " +
"FROM [PROD_TestList] AS X WITH(NOLOCK) WHERE X.No = " + CpLogProcessInfo.nTestListVariantNo + " " +
"AND TestType = '" + CpLogProcessInfo.strTestType + "' " +
"AND Version = '" + CpLogProcessInfo.strVersion + "' " +
"AND ProdCode = '" + CpLogProcessInfo.strProdCode + "') AS B " +
"ON B.No = " + CpLogProcessInfo.nTestListVariantNo + " " +
"INNER JOIN(SELECT * FROM [PROD_Group] AS Y WITH(NOLOCK)) AS C " +
"ON C.No = B.GroupNo " +
"INNER JOIN(SELECT * FROM [STAT_TestCode] AS Z WITH(NOLOCK)) AS D " +
"ON A.ProdNo_C = '" + CpLogProcessInfo.strProdNo_C + "' " +
"AND D.TestCode = '" + CpLogProcessInfo.strTestCode + "' " +
"AND B.No = A.TestListNo AND D.No = A.TestCodeNo;";
*/
string strQueryTestListInformation = $"SELECT X.ProdNo_C, Z.ProdNo_P, Y.TestCode, J.FileName, Z.UseTLPosition, J.No AS 'TestListFileNo', Z.No AS 'VariantNo', J.TestType, J.Version, J.ProdCode " +
$"FROM [PROD_Release] AS X WITH(NOLOCK) " +
$"INNER JOIN [STAT_TestCode] AS Y WITH(NOLOCK) ON X.TestCodeNo = Y.No " +
$"INNER JOIN [PROD_Variant] AS Z WITH(NOLOCK) ON X.VariantNo = Z.No " +
$"INNER JOIN [PROD_Group] AS K WITH(NOLOCK) ON Z.GroupNo = K.No " +
$"INNER JOIN [STOR_TestListFile] AS J WITH(NOLOCK) ON Z.TestListFileNo = J.No " +
$"WHERE X.VariantNo = " + CPXV2_CpLogProcessInfo.nTestListVariantNo + " " +
$"AND X.ProdNo_C = '" + CPXV2_CpLogProcessInfo.strProdNo_C + "' " +
$"AND Y.TestCode = '" + CPXV2_CpLogProcessInfo.strTestCode + "' " +
$"AND J.TestType = '" + CPXV2_CpLogProcessInfo.strTestType + "' " +
$"AND J.Version = '" + CPXV2_CpLogProcessInfo.strVersion + "' " +
$"AND J.ProdCode = '" + CPXV2_CpLogProcessInfo.strProdCode + "' " +
$"ORDER BY X.No ASC;";
//Release 테스트리스트 정보 확인 [TestListNo] + strTestType + strTestCode + strVersion + strProdCode
thisConnInfo[iPos].geyLatestTestListInfo = QueryStreamProcess(eConnCategory.Main, strQueryTestListInformation);
int nLoadPosition = 0;
if (XCommons.isHasRow(thisConnInfo[iPos].geyLatestTestListInfo))
nLoadPosition = Convert.ToInt32(thisConnInfo[iPos].geyLatestTestListInfo.Tables[0].Rows[0]["UseTLPosition"]);
else
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + CPXV2_CpLogProcessInfo.strProcessDebugInfo +
@" CPXV2 CpLogProcess fail. Test-list cannot be searched with client information.(TestList Information) [SystemX.Net.MiddlewareUI : MainForm.CpLogProcessShortTerm]\r\n", ConsoleColor.Red, LogMessageLevel.FATAL);
throw new Exception();
}
int nGetTestListFileNo = int.MaxValue;
int nGetTestListVariantNo = int.MaxValue;
string strGetTestListFileNo = thisConnInfo[iPos].geyLatestTestListInfo.Tables[0].Rows[0]["TestListFileNo"].ToString();
string strGetTestListVariantNo = thisConnInfo[iPos].geyLatestTestListInfo.Tables[0].Rows[0]["VariantNo"].ToString();
if (int.TryParse(strGetTestListFileNo, out nGetTestListFileNo) == false ||
int.TryParse(strGetTestListVariantNo, out nGetTestListVariantNo) == false)
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + CPXV2_CpLogProcessInfo.strProcessDebugInfo +
@" CPXV2 CpLogProcess fail. Test-list cannot be searched with client information.(TestListFileNo or TestListVariantNo) [SystemX.Net.MiddlewareUI : MainForm.CpLogProcessShortTerm]\r\n", ConsoleColor.Red, LogMessageLevel.FATAL);
throw new Exception();
}
CPXV2_CpLogProcessInfo.nTestListFileNo = nGetTestListFileNo;
CPXV2_CpLogProcessInfo.nTestListVariantNo = nGetTestListVariantNo;
if (CPXV2_ReadVRFYList(iPos, CPXV2_CpLogProcessInfo.nTestListFileNo, CPXV2_CpLogProcessInfo.nTestListVariantNo, strProcessDebugInfo, out CPXV2_CpLogProcessInfo.nGetReadStepVersion, nLoadPosition, false) == false)
throw new Exception(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + CPXV2_CpLogProcessInfo.strProcessDebugInfo + " " + CPXV2_CpLogProcessInfo.nTestListVariantNo + " Failed ReadVRFYList()");
//동일 할시 로그 미처리 및 리턴
var chkDataTsk = CPXV2_CheckDuplicateData(eConnCategory.ShortTerm, iPos,
CPXV2_CpLogProcessInfo.strStationName,
CPXV2_CpLogProcessInfo.strHostID,
CPXV2_CpLogProcessInfo.strSection,
nShortTermPreNo);
//DB 에 전송한 Summary 객체 생성
HISTLogSummary[] summaryItem = new HISTLogSummary[2];
summaryItem[0] = new HISTLogSummary();
summaryItem[1] = new HISTLogSummary();
CPXV2_MakeSummaryData(iPos,
CPXV2_CpLogProcessInfo.strStationName,
CPXV2_CpLogProcessInfo.strTestListCntID,
CPXV2_CpLogProcessInfo.strHostID,
CPXV2_CpLogProcessInfo.strSection,
ref summaryItem);
//if (MngDBConn.InfoConnection.UTSI_STATE == false)
//tskLongTerm = Task.Run(async () => await CpLogProcessLongTerm(iPos, GetMappedInfo, getCpLogHeader, dtLogData, summaryItem[1]));
//var result = task.WaitAndUnwrapException();
tskLongTerm = Task.Run(() => CPXV2_CpLogProcessLongTerm(iPos, nLongTermLastNo, nLongTermPreNo, getCpLogHeader, dtLongLogData, summaryItem[1]));
//tskLongTerm = CPXV2_CpLogProcessLongTerm(iPos, GetMappedInfo, getCpLogHeader, dtLongLogData, summaryItem[1]);
//tskLongTerm.Start();
if (chkDataTsk.Result)
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + CPXV2_CpLogProcessInfo.strProcessDebugInfo +
@" CPXV2 ShortTerm-CpLogProcess fail. Reason : ShortTerm Duplicated Before CpLog-File. [SystemX.Net.MiddlewareUI : MainForm.CpLogProcessShortTerm]\r\n", ConsoleColor.Yellow, LogMessageLevel.DEBUG);
bDupLogSkipState = true;
return false;
}
//Summary 객체를 이용해 DB 삽입할 SqlCommand 생성
SqlCommand cmd = null;
//
try
{
cmd = cp.LogDataSummaryInsert(MngDBLogConn.GetDBConnectInfo().ConnShortTerm.SUMMARY_TABLE, summaryItem[0]);
}
catch
{
Type type = typeof(HISTLogSummary);
FieldInfo[] f = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
StringBuilder sb = new StringBuilder();
foreach (FieldInfo item in f)
{
sb.AppendLine(item.Name.Substring(item.Name.IndexOf("<") + 1, item.Name.IndexOf(">") - item.Name.IndexOf("<") - 1)
+ ">>>" + item.GetValue(summaryItem[0]).ToString().Trim());
}
MessageOutput.ConsoleWrite(sb.ToString());
throw new Exception("<Failed Make " + MngDBLogConn.GetDBConnectInfo().ConnShortTerm.SUMMARY_TABLE + " LogDataSummaryInsert eConnCategory.ShortTerm>");
}
//
try
{
//Summary 삽입 > 실패시 처리
bProcessResult = ExcuteNonQueryStreamProcess(eConnCategory.ShortTerm, cmd);
}
catch
{
throw new Exception("<Failed ExcuteNonQueryStreamProcess eConnCategory.ShortTerm - " + cmd.CommandText + ">");
}
// TODO : SHM JSON
/*
try
{
CpxShorTermLogJson.Instance.HIST_LogSummary.Add(new CPXV2LogJson.Tables.HIST_LogSummary
{
LogNo = nCurrentLogAccessKey,
LogCount = nLogItemCnt + 1,
StationName = summaryItem[0].StationName,
TestType = summaryItem[0].TestType,
Version = summaryItem[0].Version,
ProdCode = summaryItem[0].ProdCode,
TestListFileNo = summaryItem[0].TestListFileNo,
TestListVariantNo = summaryItem[0].TestListVariantNo,
TestListCntID = summaryItem[0].TestListCntID,
StepVersion = summaryItem[0].StepVersion,
HostID = summaryItem[0].Host,
Section = summaryItem[0].Section,
ProdNo_C = summaryItem[0].ProdNoC,
ProdNo_P = summaryItem[0].ProdNoP,
Testcode = summaryItem[0].TestCode,
TestListFileName = summaryItem[0].TestListFileName,
ProductID = summaryItem[0].ProductID,
Result = summaryItem[0].Result,
Duration = summaryItem[0].Duration,
TestDT = Convert.ToDateTime(CPXV2_CpLogProcessInfo.strStTime)
});
CpxShorTermLogJson.Instance.SaveChanges();
}
catch (Exception e)
{
bProcessResult = false;
}
*/
if (bProcessResult == false)
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + strProcessDebugInfo +
@" CPXV2 CpLogProcess HIST_LogSummary insert failed. [SystemX.Net.MiddlewareUI : MainForm.CPXV2_CpLogProcess]", ConsoleColor.Red, LogMessageLevel.FATAL);
//throw new Exception();
}
else
{
//CpLog 삽입할 DataRow 생성
DataRow[] SetMakeLogRows = CPXV2_ShortProcessMakeLogRows(nLogItemCnt + 1, thisConnInfo[iPos].dsLatestVRFYRel, dtShortLogData);
if (SetMakeLogRows == null)
throw new Exception("<Failed CPXV2_ShortProcessMakeLogRows - SetMakeLogRows>");
StringBuilder ShortLogJsonSb = new StringBuilder();
ShortLogJsonSb.Append(JsonConvert.SerializeObject(SetMakeLogRows.Select(x => new CPXV2Log.Tables.HIST_TestResult
{
StepID = (long)x.ItemArray[1],
MeasVal = (decimal)x.ItemArray[2],
MeasValStr = x.ItemArray[3].ToString(),
Message = x.ItemArray[4].ToString(),
GlobalMin = x.ItemArray[5].ToString(),
GlobalMAx = x.ItemArray[6].ToString(),
Result = x.ItemArray[7].ToString(),
SpentTime = x.ItemArray[8].ToString(),
})).GzipCompress());
DataTable SetProcLogTable;
SetProcLogTable = CPXV2_MakeProcLogTable();
DataRow SetProcLogDr = SetProcLogTable.NewRow();
//Make Comment Step
try
{
SetProcLogDr["No"] = Int64.MinValue;
SetProcLogDr["TestDT"] = DateTime.Now;
SetProcLogDr["LogData"] = '-';
//DataRow 를 설정된 DataTable Format으로 한행 생성
SetProcLogDr["No"] = CPXV2_CpLogProcessInfo.nShortTermIdent;
SetProcLogDr["TestDT"] = Convert.ToDateTime(CPXV2_CpLogProcessInfo.strStTime);
if (ShortLogJsonSb.ToString().Length > 0)
SetProcLogDr["LogData"] = ShortLogJsonSb.ToString();
else
SetProcLogDr["LogData"] = '-';
}
catch
{
SetProcLogDr["No"] = Int64.MinValue;
SetProcLogDr["TestDT"] = DateTime.Now;
SetProcLogDr["LogData"] = '-';
//throw new Exception("<Failed Make JsonConvert - Json Log Row>");
}
lstBulkShortTermLog.Add(SetProcLogDr);
}
}
catch (Exception e)
{
bProcessResult = false;
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + strProcessDebugInfo + @" CPXV2 Make CpLogProcess fail.[SystemX.Net.MiddlewareUI : MainForm.CPXV2_CpLogProcess]\r\n" + e.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG);
}
finally
{
if (tskLongTerm != null)
lstBulkLongTermLog.Add(tskLongTerm.Result);
//처리 시간 확인
CPXV2_CpLogProcessInfo.lMainMeasTime = stMeasTime.ElapsedMilliseconds;
if (GetMappedInfo.bShowCpLogProcessTime)
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + strProcessDebugInfo +
@" MainTime : " + CPXV2_CpLogProcessInfo.lMainMeasTime.ToString() + ", SubTime(LongTerm) : " + CPXV2_CpLogProcessInfo.lLongTermMeasTime + " [SystemX.Net.MiddlewareUI : MainForm.CPXV2_CpLogProcess]", ConsoleColor.Green, LogMessageLevel.DEBUG);
}
LogDataProcessText.Enqueue(new StringBuilder(">>[MainTime(ShortTerm)-MakeLogData][" + CPXV2_CpLogProcessInfo.lMainMeasTime + "][Include SubTime(LongTerm)-MakeLogData][" + CPXV2_CpLogProcessInfo.lLongTermMeasTime + "]\r\n"));
if (bDupLogSkipState == false)
{
if (bProcessResult)
{
if (File.Exists(strSuccessFileName))
File.Delete(strSuccessFileName);
}
else
{
if (bRequiredProcLogFile == false)
{
if (File.Exists(strSuccessFileName))
File.Copy(strSuccessFileName, strFailedFileName);
}
}
}
}
return bProcessResult;
}
private async Task<DataRow> CPXV2_CpLogProcessLongTerm(int iPos, Int64 nLongTermNo, Int64 nLongTermPreNo, CpLogHeader getCpLogHeader, DataTable dtLogData, HISTLogSummary summaryItem)
{
Stopwatch stMeasTime = new Stopwatch();
stMeasTime.Start();
bool bProcessResult = true;
int nLogItemCnt = dtLogData.Rows.Count;
DataTable SetProcLogTable;
SetProcLogTable = CPXV2_MakeProcLogTable();
DataRow SetProcLogDr = SetProcLogTable.NewRow();
try
{
SetProcLogDr["No"] = Int64.MinValue;
SetProcLogDr["TestDT"] = DateTime.Now;
SetProcLogDr["LogData"] = '-';
//동일 할시 로그 미처리 및 리턴
var chkDataTsk = CPXV2_CheckDuplicateData(eConnCategory.LongTerm, iPos,
CPXV2_CpLogProcessInfo.strStationName,
CPXV2_CpLogProcessInfo.strHostID,
CPXV2_CpLogProcessInfo.strSection,
nLongTermPreNo);
CommonProtocol cp = new CommonProtocol();
//Summary 객체를 이용해 DB 삽입할 SqlCommand 생성
/*
Type type = typeof(HISTLogSummary);
FieldInfo[] f = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
StringBuilder sb = new StringBuilder();
foreach (FieldInfo item in f)
{
sb.AppendLine(item.Name.Substring(item.Name.IndexOf("<") + 1, item.Name.IndexOf(">") - item.Name.IndexOf("<") - 1)
+ "-" + item.GetValue(summaryItem).ToString().Trim());
}
MessageOutput.ConsoleWrite(sb.ToString());
*/
SqlCommand cmd = null;
//
try
{
cmd = cp.LogDataSummaryInsert(MngDBLogConn.GetDBConnectInfo().ConnLongTerm.SUMMARY_TABLE, summaryItem);
}
catch
{
Type type = typeof(HISTLogSummary);
FieldInfo[] f = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
StringBuilder sb = new StringBuilder();
foreach (FieldInfo item in f)
{
sb.AppendLine(item.Name.Substring(item.Name.IndexOf("<") + 1, item.Name.IndexOf(">") - item.Name.IndexOf("<") - 1)
+ ">>>" + item.GetValue(summaryItem).ToString().Trim());
}
MessageOutput.ConsoleWrite(sb.ToString());
throw new Exception("<Failed Make " + MngDBLogConn.GetDBConnectInfo().ConnLongTerm.SUMMARY_TABLE + " LogDataSummaryInsert eConnCategory.LongTerm>");
}
//
if (chkDataTsk.Result)
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + CPXV2_CpLogProcessInfo.strProcessDebugInfo +
@" CPXV2 LongTerm-CpLogProcess fail. Reason : LongTerm Duplicated Before CpLog-File. [SystemX.Net.MiddlewareUI : MainForm.CPXV2_CpLogProcessLongTerm]\r\n", ConsoleColor.Yellow, LogMessageLevel.DEBUG);
return SetProcLogDr;
}
//
try
{
//Summary 삽입 > 실패시 처리
bProcessResult = ExcuteNonQueryStreamProcess(eConnCategory.LongTerm, cmd);
}
catch
{
throw new Exception("<Failed ExcuteNonQueryStreamProcess eConnCategory.LongTerm - " + cmd.CommandText + ">");
}
if (bProcessResult == false)
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + CPXV2_CpLogProcessInfo.strProcessDebugInfo +
@" CPXV2 CpLogProcess HIST_LogSummary insert failed. [SystemX.Net.MiddlewareUI : MainForm.CPXV2_CpLogProcessLongTerm]", ConsoleColor.Red, LogMessageLevel.FATAL);
throw new Exception();
}
//CpLog 삽입할 DataRow 생성
DataRow[] SetMakeLogRows = CPXV2_LongProcessMakeLogRows(nLogItemCnt + 1, thisConnInfo[iPos].dsLongTermLatestVRFYRel, dtLogData);
if (SetMakeLogRows == null)
throw new Exception("<Failed CPXV2_LongProcessMakeLogRows - SetMakeLogRows>");
StringBuilder LongLogJsonSb = new StringBuilder();
LongLogJsonSb.Append(JsonConvert.SerializeObject(SetMakeLogRows.Select(x => new CPXV2Log.Tables.HIST_TestResult
{
StepID = (long)x.ItemArray[1],
MeasVal = (decimal)x.ItemArray[2],
MeasValStr = x.ItemArray[3].ToString(),
Message = x.ItemArray[4].ToString(),
GlobalMin = x.ItemArray[5].ToString(),
GlobalMAx = x.ItemArray[6].ToString(),
Result = x.ItemArray[7].ToString(),
SpentTime = x.ItemArray[8].ToString(),
})).GzipCompress());
//Make Comment Step
try
{
//DataRow 를 설정된 DataTable Format으로 한행 생성
SetProcLogDr["No"] = CPXV2_CpLogProcessInfo.nLongTermIdent;
SetProcLogDr["TestDT"] = Convert.ToDateTime(CPXV2_CpLogProcessInfo.strStTime);
if (LongLogJsonSb.ToString().Length > 0)
SetProcLogDr["LogData"] = LongLogJsonSb.ToString();
else
SetProcLogDr["LogData"] = '-';
}
catch
{
SetProcLogDr["No"] = Int64.MinValue;
SetProcLogDr["TestDT"] = DateTime.Now;
SetProcLogDr["LogData"] = '-';
throw new Exception("<Failed Make JsonConvert - Json Log Row>");
}
//처리 시간 확인
CPXV2_CpLogProcessInfo.lLongTermMeasTime = stMeasTime.ElapsedMilliseconds;
}
catch (Exception e)
{
bProcessResult = false;
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + CPXV2_CpLogProcessInfo.strProcessDebugInfo + @" CPXV2 LongTerm Make CpLogProcess fail.[SystemX.Net.MiddlewareUI : MainForm.CpLogProcessLongTerm]\r\n" + e.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG);
}
finally
{
;//
}
await Task.Delay(0);
return SetProcLogDr;
}
}
}