[성현모] TRA HEX 값 표기 수정

This commit is contained in:
SHM
2025-03-20 08:35:24 +09:00
parent b76569d02f
commit 773aa49a27
118 changed files with 172244 additions and 0 deletions

View File

@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SystemX.Product.TRA.UIControl;
namespace SystemX.Product.TRA.DataManager
{
public static class DMCommon
{
public static string SummaryHistTable = "HIST_TesterSummary";
public static string SummaryLogTable = "HIST_LogSummary";
public static string ResultLogTable = "HIST_TestResult";
//default, longterm 스위칭할때 필요
public const string SummaryLogTableDefault = "HIST_LogSummary";
public const string ResultLogTableDefault = "HIST_TestResult";
public static int nDefaultScanTime = 1800;
public static int nFullScanTime = 7200;
}
}

View File

@ -0,0 +1,399 @@
using DataBaseConnection.Control;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SystemX.Product.ALIS.Interface;
using SystemX.Product.TRA.UIControl;
using static SystemX.Product.CP.TRA.Commons;
namespace SystemX.Product.TRA.DataManager
{
public class DMDetailOverview
{
public enum eCommand
{
PowerON,
PowerOFF,
QUERY
}
public enum eColList
{
TestDate,
StationName,
Host,
Section,
Start,
Final,
ProductNo,
TestType,
ParentNo,
ProductID,
TestListFileNo,
TestListVariantNo,
TestCode,
FileVersion,
FileCode,
StepVersion,
FirstTestTime,
FinalTestTime,
Total,
OK,
NG, //NOK,
TestListCntID
}
public enum eColListHide
{
TestListCntID,
RN
}
private SqlConnection DBConn { get; set; }
private SqlConnection ShortTermDBConn { get; set; }
private SqlConnection LongTermDBConn { get; set; }
private SqlCommand SQLCmd { get; set; }
private SelectedDataCollection SelectedOverViewItemData;
public string strDetailOverviewUseQuery;
public DataTable dtRaw;
public DataTable dtSubRaw;
eOverviewModelNameInfo GetSelectInfo;
IDataBaseController GetDBController;
public DMDetailOverview(eSelectDataView SelectView, eOverviewModelNameInfo SelectInfo, IDataBaseController getDBController)
{
GetSelectInfo = SelectInfo;
DBConn = getDBController.GetMainConn();
GetDBController = getDBController;
if (SelectView == eSelectDataView.DataDocumentViewC1)
{
ShortTermDBConn = getDBController.GetShortTermConn1();
LongTermDBConn = getDBController.GetLongTermConn1().First().Value;
}
else if (SelectView == eSelectDataView.DataDocumentViewC2)
{
ShortTermDBConn = getDBController.GetShortTermConn2();
LongTermDBConn = getDBController.GetLongTermConn2().First().Value;
}
strDetailOverviewUseQuery = string.Empty;
}
public DataTable GetDataView(eSelectDataView SelectView, SelectedDataCollection data, OverviewSearchOption inputOption)
{
if (SelectView == eSelectDataView.DataDocumentViewC1)
{
LongTermDBConn = GetDBController.GetLongTermConn1().Where(x => x.Key.Contains(data.StartTime.Year.ToString()))?.FirstOrDefault().Value;
if (LongTermDBConn == null)
{
LongTermDBConn = GetDBController.GetLongTermConn1().FirstOrDefault().Value;
}
}
else if (SelectView == eSelectDataView.DataDocumentViewC2)
{
LongTermDBConn = GetDBController.GetLongTermConn2().Where(x => x.Key.Contains(data.StartTime.Year.ToString()))?.FirstOrDefault().Value;
if (LongTermDBConn == null)
{
LongTermDBConn = GetDBController.GetLongTermConn2().FirstOrDefault().Value;
}
}
DataTable dtResult = new DataTable();
SelectedOverViewItemData = data;
string strGetUseQuery = string.Empty;
dtRaw = GetRawResult(inputOption, out strGetUseQuery);
if (inputOption.DisplayByStation == false)
dtSubRaw = GetSubRawResult();
else
dtSubRaw = null;
strDetailOverviewUseQuery = strGetUseQuery;
return dtRaw;
}
DataTable GetRawResult(OverviewSearchOption inputOption, out string strGetSendQuery)
{
DataTable dtResult = new DataTable();
string strQuery = string.Empty;
DateTime dtNow = DateTime.Now;
strGetSendQuery = string.Empty;
strQuery += $"SELECT * FROM (";
strQuery += $"SELECT ";
strQuery += $"CAST({DMCommon.SummaryLogTable}.[TestDT] AS DATE) AS {eColList.TestDate.ToString()},";
if (inputOption.DisplayByStation)
{
strQuery += $"{DMCommon.SummaryLogTable}.[StationName] AS {eColList.StationName.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[HostID] AS {eColList.Host.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[Section] AS {eColList.Section.ToString()},";
}
//
strQuery += $"Y.ModelName,";
strQuery += $"{DMCommon.SummaryLogTable}.[TestType] AS {eColList.TestType.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[ProdNo_C] AS {eColList.ProductNo.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[Testcode] AS {eColList.TestCode.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[ProdNo_P] AS {eColList.ParentNo.ToString()},";
if (SelectedOverViewItemData.ProductID.Length > 0)
strQuery += $"{DMCommon.SummaryLogTable}.[ProductID] as {eColList.ProductID.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListFileNo] AS {eColList.TestListFileNo.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListVariantNo] AS {eColList.TestListVariantNo.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[ProdCode] AS {eColList.FileCode.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[Version] AS {eColList.FileVersion.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[StepVersion] AS {eColList.StepVersion.ToString()},";
strQuery += $"CONVERT(CHAR(8), MIN({DMCommon.SummaryLogTable}.[TestDT]), 108) AS {eColList.FirstTestTime.ToString()},";
strQuery += $"CONVERT(CHAR(8), MAX({DMCommon.SummaryLogTable}.[TestDT]), 108) AS {eColList.FinalTestTime.ToString()},";
strQuery += $"COUNT({DMCommon.SummaryLogTable}.[Result]) AS {eColList.Total.ToString()},";
strQuery += $"COUNT(CASE WHEN {DMCommon.SummaryLogTable}.[Result] = 'OK' THEN 1 END) AS {eColList.OK.ToString()},";
strQuery += $"COUNT(CASE WHEN {DMCommon.SummaryLogTable}.[Result] != 'OK' THEN 1 END) AS {eColList.NG.ToString()},";
if (inputOption.DisplayByStation)
{
strQuery += $"ROW_NUMBER() OVER(PARTITION BY {DMCommon.SummaryLogTable}.[ProdNo_C], {DMCommon.SummaryLogTable}.[ProdNo_P] ORDER BY CONVERT(CHAR(23), MAX({DMCommon.SummaryLogTable}.[TestDT]), 121) DESC) AS RN,";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListCntID] ";
}
else
{
strQuery += $"ROW_NUMBER() OVER(PARTITION BY {DMCommon.SummaryLogTable}.[ProdNo_C], {DMCommon.SummaryLogTable}.[ProdNo_P] ORDER BY CONVERT(CHAR(23), MAX({DMCommon.SummaryLogTable}.[TestDT]), 121) DESC) AS RN ";
}
strQuery += $"FROM {DMCommon.SummaryLogTable} ";
strQuery += $"WITH(NOLOCK) ";
switch (GetSelectInfo)
{
case eOverviewModelNameInfo.L:
strQuery += $"LEFT JOIN [CPXV2].[dbo].[PROD_Variant] AS X WITH(NOLOCK) ON X.No = {DMCommon.SummaryLogTable}.[TestListVariantNo] ";
strQuery += $"LEFT JOIN [CPXV2].[dbo].[PROD_Group] AS Y WITH(NOLOCK) ON Y.No = X.GroupNo ";
break;
case eOverviewModelNameInfo.P1:
strQuery += $"LEFT JOIN [P1].[CPXV2].[dbo].[PROD_Variant] AS X WITH(NOLOCK) ON X.No = {DMCommon.SummaryLogTable}.[TestListVariantNo] ";
strQuery += $"LEFT JOIN [P1].[CPXV2].[dbo].[PROD_Group] AS Y WITH(NOLOCK) ON Y.No = X.GroupNo ";
break;
case eOverviewModelNameInfo.P2:
strQuery += $"LEFT JOIN [P2].[CPXV2].[dbo].[PROD_Variant] AS X WITH(NOLOCK) ON X.No = {DMCommon.SummaryLogTable}.[TestListVariantNo] ";
strQuery += $"LEFT JOIN [P2].[CPXV2].[dbo].[PROD_Group] AS Y WITH(NOLOCK) ON Y.No = X.GroupNo ";
break;
}
/*
strQuery += $"LEFT JOIN [CPXV2].[dbo].[PROD_Variant] AS X WITH(NOLOCK) ON X.No = CONVERT(NVARCHAR, {DMCommon.SummaryLogTable}.[TestListVariantNo]) ";
strQuery += $"LEFT JOIN [CPXV2].[dbo].[PROD_Group] AS Y WITH(NOLOCK) ON Y.No = X.GroupNo ";
*/
strQuery += $"WHERE TestDT >= '{SelectedOverViewItemData.SearchRangeStart.ToString("yyyy-MM-dd HH:mm:ss")}' AND TestDT <= '{SelectedOverViewItemData.SearchRangeEnd.ToString("yyyy-MM-dd HH:mm:ss")}' AND ";
strQuery += $"ProdNo_C NOT IN('PowerON', 'PowerOFF', 'QUERY') AND ";
strQuery += $"ProductID NOT IN('PowerON', 'PowerOFF', 'QUERY') ";
if (SelectedOverViewItemData.ProductID.Length > 0)
{
strQuery += $"AND ProductID = '{SelectedOverViewItemData.ProductID}' ";
}
strQuery += $"GROUP BY ";
strQuery += $"CAST({DMCommon.SummaryLogTable}.[TestDT] AS DATE),";
//
strQuery += $"Y.ModelName,";
if (inputOption.DisplayByStation)
{
strQuery += $"{DMCommon.SummaryLogTable}.[StationName],";
strQuery += $"{DMCommon.SummaryLogTable}.[HostID],";
strQuery += $"{DMCommon.SummaryLogTable}.[Section],";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListCntID],";
}
if (SelectedOverViewItemData.ProductID.Length > 0)
strQuery += $"{DMCommon.SummaryLogTable}.ProductID,";
//strQuery += $"{DMCommon.SummaryLogTable}.[TestListCntID],";
strQuery += $"{DMCommon.SummaryLogTable}.[TestType],";
strQuery += $"{DMCommon.SummaryLogTable}.[ProdNo_C],";
strQuery += $"{DMCommon.SummaryLogTable}.[Testcode],";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListFileNo],";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListVariantNo],";
strQuery += $"{DMCommon.SummaryLogTable}.[ProdNo_P],";
strQuery += $"{DMCommon.SummaryLogTable}.[ProdCode],";
strQuery += $"{DMCommon.SummaryLogTable}.[Version],";
strQuery += $"{DMCommon.SummaryLogTable}.[StepVersion]";
strQuery += " ";
strQuery += ") AS X ";
if (inputOption.DisplayByStation)
{
strQuery += "WHERE X.Host = '" + SelectedOverViewItemData.HostID + "' AND X.Section = '" + SelectedOverViewItemData.SectionID + "' ";
//strQuery += "ORDER BY X.TestDate, X.Host, X.Section ASC;";
strQuery += "ORDER BY X.TestDate ASC, X.FirstTestTime ASC;";
}
else
{
strQuery += "WHERE X.ProductNo = '" + SelectedOverViewItemData.ProductNo + "' AND X.TestType = '" + SelectedOverViewItemData.TestType + "' AND X.TestCode = '" + SelectedOverViewItemData.TestCode + "' AND X.ParentNo = '" + SelectedOverViewItemData.ParentNo + "' ";
//strQuery += "ORDER BY X.TestDate, X.ProductNo, X.ParentNo ASC;";
strQuery += "ORDER BY X.TestDate ASC, X.FirstTestTime ASC;";
}
//
strGetSendQuery = strQuery;
if (DatabaseConnControl.ScanLongTermLog)
SQLCmd = new SqlCommand(strQuery, LongTermDBConn);
else
SQLCmd = new SqlCommand(strQuery, ShortTermDBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReader = SQLCmd.ExecuteReader();
dtResult.Load(dtReader);
dtReader.Close();
return dtResult;
}
DataTable GetSubRawResult()
{
DataTable dtResult = new DataTable();
string strQuery = string.Empty;
DateTime dtNow = DateTime.Now;
strQuery += $"SELECT * FROM (";
strQuery += $"SELECT ";
strQuery += $"CAST({DMCommon.SummaryLogTable}.[TestDT] AS DATE) AS {eColList.TestDate.ToString()},";
strQuery += $"Y.ModelName,";
strQuery += $"{DMCommon.SummaryLogTable}.[TestType] AS {eColList.TestType.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[ProdNo_C] AS {eColList.ProductNo.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[Testcode] AS {eColList.TestCode.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[ProdNo_P] AS {eColList.ParentNo.ToString()},";
if (SelectedOverViewItemData.ProductID.Length > 0)
strQuery += $"{DMCommon.SummaryLogTable}.[ProductID] as {eColList.ProductID.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListFileNo] AS {eColList.TestListFileNo.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListVariantNo] AS {eColList.TestListVariantNo.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[ProdCode] AS {eColList.FileCode.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[Version] AS {eColList.FileVersion.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[StepVersion] AS {eColList.StepVersion.ToString()},";
strQuery += $"CONVERT(CHAR(8), MIN({DMCommon.SummaryLogTable}.[TestDT]), 108) AS {eColList.FirstTestTime.ToString()},";
strQuery += $"CONVERT(CHAR(8), MAX({DMCommon.SummaryLogTable}.[TestDT]), 108) AS {eColList.FinalTestTime.ToString()},";
strQuery += $"COUNT({DMCommon.SummaryLogTable}.[Result]) AS {eColList.Total.ToString()},";
strQuery += $"COUNT(CASE WHEN {DMCommon.SummaryLogTable}.[Result] = 'OK' THEN 1 END) AS {eColList.OK.ToString()},";
strQuery += $"COUNT(CASE WHEN {DMCommon.SummaryLogTable}.[Result] != 'OK' THEN 1 END) AS {eColList.NG.ToString()},";
strQuery += $"ROW_NUMBER() OVER(PARTITION BY {DMCommon.SummaryLogTable}.[ProdNo_C], {DMCommon.SummaryLogTable}.[ProdNo_P] ORDER BY CONVERT(CHAR(23), MAX({DMCommon.SummaryLogTable}.[TestDT]), 121) DESC) AS RN,";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListCntID] ";
strQuery += $"FROM {DMCommon.SummaryLogTable} ";
strQuery += $"WITH(NOLOCK) ";
switch (GetSelectInfo)
{
case eOverviewModelNameInfo.L:
strQuery += $"LEFT JOIN [CPXV2].[dbo].[PROD_Variant] AS X WITH(NOLOCK) ON X.No = {DMCommon.SummaryLogTable}.[TestListVariantNo] ";
strQuery += $"LEFT JOIN [CPXV2].[dbo].[PROD_Group] AS Y WITH(NOLOCK) ON Y.No = X.GroupNo ";
break;
case eOverviewModelNameInfo.P1:
strQuery += $"LEFT JOIN [P1].[CPXV2].[dbo].[PROD_Variant] AS X WITH(NOLOCK) ON X.No = {DMCommon.SummaryLogTable}.[TestListVariantNo] ";
strQuery += $"LEFT JOIN [P1].[CPXV2].[dbo].[PROD_Group] AS Y WITH(NOLOCK) ON Y.No = X.GroupNo ";
break;
case eOverviewModelNameInfo.P2:
strQuery += $"LEFT JOIN [P2].[CPXV2].[dbo].[PROD_Variant] AS X WITH(NOLOCK) ON X.No = {DMCommon.SummaryLogTable}.[TestListVariantNo] ";
strQuery += $"LEFT JOIN [P2].[CPXV2].[dbo].[PROD_Group] AS Y WITH(NOLOCK) ON Y.No = X.GroupNo ";
break;
}
/*
strQuery += $"LEFT JOIN [CPXV2].[dbo].[PROD_Variant] AS X WITH(NOLOCK) ON X.No = {DMCommon.SummaryLogTable}.[TestListVariantNo] ";
strQuery += $"LEFT JOIN [CPXV2].[dbo].[PROD_Group] AS Y WITH(NOLOCK) ON Y.No = X.GroupNo ";
*/
strQuery += $"WHERE TestDT >= '{SelectedOverViewItemData.SearchRangeStart.ToString("yyyy-MM-dd HH:mm:ss")}' AND TestDT <= '{SelectedOverViewItemData.SearchRangeEnd.ToString("yyyy-MM-dd HH:mm:ss")}' AND ";
strQuery += $"ProdNo_C NOT IN('PowerON', 'PowerOFF', 'QUERY') AND ";
strQuery += $"ProductID NOT IN('PowerON', 'PowerOFF', 'QUERY') ";
if (SelectedOverViewItemData.ProductID.Length > 0)
{
strQuery += $"AND ProductID = '{SelectedOverViewItemData.ProductID}' ";
}
strQuery += $"GROUP BY ";
strQuery += $"CAST({DMCommon.SummaryLogTable}.[TestDT] AS DATE),";
//
strQuery += $"Y.ModelName,";
if (SelectedOverViewItemData.ProductID.Length > 0)
strQuery += $"{DMCommon.SummaryLogTable}.ProductID,";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListCntID],";
strQuery += $"{DMCommon.SummaryLogTable}.[TestType],";
strQuery += $"{DMCommon.SummaryLogTable}.[ProdNo_C],";
strQuery += $"{DMCommon.SummaryLogTable}.[Testcode],";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListFileNo],";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListVariantNo],";
strQuery += $"{DMCommon.SummaryLogTable}.[ProdNo_P],";
strQuery += $"{DMCommon.SummaryLogTable}.[ProdCode],";
strQuery += $"{DMCommon.SummaryLogTable}.[Version],";
strQuery += $"{DMCommon.SummaryLogTable}.[StepVersion]";
strQuery += " ";
strQuery += ") AS X ";
strQuery += "WHERE X.ProductNo = '" + SelectedOverViewItemData.ProductNo + "' AND X.TestType = '" + SelectedOverViewItemData.TestType + "' AND X.TestCode = '" + SelectedOverViewItemData.TestCode + "' AND X.ParentNo = '" + SelectedOverViewItemData.ParentNo + "' ";
//strQuery += "ORDER BY X.TestDate, X.ProductNo, X.ParentNo ASC;";
strQuery += "ORDER BY X.TestDate ASC, X.FirstTestTime ASC;";
if (DatabaseConnControl.ScanLongTermLog)
SQLCmd = new SqlCommand(strQuery, LongTermDBConn);
else
SQLCmd = new SqlCommand(strQuery, ShortTermDBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReader = SQLCmd.ExecuteReader();
dtResult.Load(dtReader);
dtReader.Close();
return dtResult;
}
}
}

View File

@ -0,0 +1,353 @@
using DataBaseConnection.Control;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using SystemX.Product.ALIS.Interface;
using SystemX.Product.TRA.UIControl;
using static SystemX.Product.CP.TRA.Commons;
namespace SystemX.Product.TRA.DataManager
{
public class DMOverview
{
public enum eCommand
{
PowerON,
PowerOFF,
QUERY
}
public enum eColList
{
TestDate,
StationName,
Host,
Section,
ProductID,
Start,
Final,
ProductNo,
TestType,
ParentNo,
TestListFileNo,
TestListVariantNo,
TestCode,
FileVersion,
FileCode,
StepVersion,
FirstTestTime,
FinalTestTime,
Total,
OK,
NG, //NOK,
TestListCntID
}
public enum eColListHide
{
TestListCntID,
RN
}
private SqlConnection DBConn { get; set; }
private SqlConnection ShortTermDBConn { get; set; }
private SqlConnection LongTermDBConn { get; set; }
private SqlCommand SQLCmd { get; set; }
public void SetSqlCommandCancel()
{
CTS.Cancel();
}
public bool GetSqlCommandCancelState()
{
return CTS.IsCancellationRequested;
}
public string strOverviewUseQuery;
eOverviewModelNameInfo GetSelectInfo;
CancellationTokenSource CTS;
CancellationToken CT;
IDataBaseController GetDBController;
public DMOverview(eSelectDataView SelectView, eOverviewModelNameInfo SelectInfo, IDataBaseController getDBController)
{
GetSelectInfo = SelectInfo;
DBConn = getDBController.GetMainConn();
GetDBController = getDBController;
if (SelectView == eSelectDataView.DataDocumentViewC1)
{
ShortTermDBConn = getDBController.GetShortTermConn1();
LongTermDBConn = getDBController.GetLongTermConn1().First().Value;
}
else if (SelectView == eSelectDataView.DataDocumentViewC2)
{
ShortTermDBConn = getDBController.GetShortTermConn2();
LongTermDBConn = getDBController.GetLongTermConn2().First().Value;
}
strOverviewUseQuery = string.Empty;
CTS = new CancellationTokenSource();
CT = CTS.Token;
}
public async Task<DataTable> GetDataView(eSelectDataView SelectView, DateTime dtStart, DateTime dtEnd, OverviewSearchOption inputOption, bool bUseMainConn = false, string strTestQuery = "")
{
if (SelectView == eSelectDataView.DataDocumentViewC1)
{
LongTermDBConn = GetDBController.GetLongTermConn1().Where(x => x.Key.Contains(dtStart.Year.ToString()))?.FirstOrDefault().Value;
if(LongTermDBConn == null)
{
LongTermDBConn = GetDBController.GetLongTermConn1().FirstOrDefault().Value;
}
DatabaseConnControl.SelectLongTermCatalogNameCon1 = LongTermDBConn.Database;
}
else if (SelectView == eSelectDataView.DataDocumentViewC2)
{
LongTermDBConn = GetDBController.GetLongTermConn2().Where(x => x.Key.Contains(dtStart.Year.ToString()))?.FirstOrDefault().Value;
if (LongTermDBConn == null)
{
LongTermDBConn = GetDBController.GetLongTermConn2().FirstOrDefault().Value;
}
DatabaseConnControl.SelectLongTermCatalogNameCon2 = LongTermDBConn.Database;
}
DataTable dtResult = new DataTable();
string strGetUseQuery = string.Empty;
CTS = new CancellationTokenSource();
CT = CTS.Token;
//For Test
/*
try
{
await Task.Delay(5000, CT);
}
catch
{
}
*/
Tuple<DataTable, string> dtRawInfo = await GetRawResult(dtStart, dtEnd, inputOption, bUseMainConn, strTestQuery);
strOverviewUseQuery = dtRawInfo.Item2;
return dtRawInfo.Item1;
}
private async Task<Tuple<DataTable, string>> GetRawResult(DateTime dtStart, DateTime dtEnd, OverviewSearchOption inputOption, bool bUseMainConn = false, string strTestQuery = "")
{
DataTable dtResult = new DataTable();
bool bFullScanOn = false;
string strQuery = string.Empty;
DateTime dtNow = DateTime.Now;
string strGetSendQuery = string.Empty;
strQuery += $"SELECT * FROM (";
strQuery += $"SELECT ";
strQuery += $"CAST({DMCommon.SummaryLogTable}.[TestDT] AS DATE) AS {eColList.TestDate.ToString()},";
if (inputOption.DisplayByStation)
{
strQuery += $"{DMCommon.SummaryLogTable}.[StationName] AS {eColList.StationName.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[HostID] AS {eColList.Host.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[Section] AS {eColList.Section.ToString()},";
}
//
strQuery += $"Y.ModelName,";
strQuery += $"{DMCommon.SummaryLogTable}.[TestType] AS {eColList.TestType.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[ProdNo_C] AS {eColList.ProductNo.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[Testcode] AS {eColList.TestCode.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[ProdNo_P] AS {eColList.ParentNo.ToString()},";
if (inputOption.ProductID.Length > 0)
strQuery += $"{DMCommon.SummaryLogTable}.[ProductID] as {eColList.ProductID.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListFileNo] AS {eColList.TestListFileNo.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListVariantNo] AS {eColList.TestListVariantNo.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[ProdCode] AS {eColList.FileCode.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[Version] AS {eColList.FileVersion.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[StepVersion] AS {eColList.StepVersion.ToString()},";
strQuery += $"CONVERT(CHAR(8), MIN({DMCommon.SummaryLogTable}.[TestDT]), 108) AS {eColList.FirstTestTime.ToString()},";
strQuery += $"CONVERT(CHAR(8), MAX({DMCommon.SummaryLogTable}.[TestDT]), 108) AS {eColList.FinalTestTime.ToString()},";
strQuery += $"COUNT({DMCommon.SummaryLogTable}.[Result]) AS {eColList.Total.ToString()},";
strQuery += $"COUNT(CASE WHEN {DMCommon.SummaryLogTable}.[Result] = 'OK' THEN 1 END) AS {eColList.OK.ToString()},";
strQuery += $"COUNT(CASE WHEN {DMCommon.SummaryLogTable}.[Result] != 'OK' THEN 1 END) AS {eColList.NG.ToString()},";
if (inputOption.DisplayByStation)
{
strQuery += $"ROW_NUMBER() OVER(PARTITION BY {DMCommon.SummaryLogTable}.[HostID], {DMCommon.SummaryLogTable}.[Section] ORDER BY CONVERT(CHAR(23), MAX({DMCommon.SummaryLogTable}.[TestDT]), 121) DESC) AS RN,";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListCntID]";
}
else
{
strQuery += $"ROW_NUMBER() OVER(PARTITION BY {DMCommon.SummaryLogTable}.[ProdNo_C], {DMCommon.SummaryLogTable}.[Testcode] ORDER BY CONVERT(CHAR(23), MAX({DMCommon.SummaryLogTable}.[TestDT]), 121) DESC) AS RN,";
strQuery = strQuery.Remove(strQuery.Length - 1, 1);
}
strQuery += " ";
strQuery += $"FROM {DMCommon.SummaryLogTable} ";
strQuery += $"WITH(NOLOCK) ";
//strQuery += $"LEFT JOIN [CPXV2].[dbo].[PROD_Variant] AS X WITH(NOLOCK) ON X.No = CONVERT(NVARCHAR, {DMCommon.SummaryLogTable}.[TestListVariantNo]) ";
switch(GetSelectInfo)
{
case eOverviewModelNameInfo.L:
strQuery += $"LEFT JOIN [CPXV2].[dbo].[PROD_Variant] AS X WITH(NOLOCK) ON X.No = {DMCommon.SummaryLogTable}.[TestListVariantNo] ";
strQuery += $"LEFT JOIN [CPXV2].[dbo].[PROD_Group] AS Y WITH(NOLOCK) ON Y.No = X.GroupNo ";
break;
case eOverviewModelNameInfo.P1:
strQuery += $"LEFT JOIN [CPXV2].[dbo].[PROD_Variant] AS X WITH(NOLOCK) ON X.No = {DMCommon.SummaryLogTable}.[TestListVariantNo] ";
strQuery += $"LEFT JOIN [CPXV2].[dbo].[PROD_Group] AS Y WITH(NOLOCK) ON Y.No = X.GroupNo ";
break;
case eOverviewModelNameInfo.P2:
strQuery += $"LEFT JOIN [P2].[CPXV2].[dbo].[PROD_Variant] AS X WITH(NOLOCK) ON X.No = {DMCommon.SummaryLogTable}.[TestListVariantNo] ";
strQuery += $"LEFT JOIN [P2].[CPXV2].[dbo].[PROD_Group] AS Y WITH(NOLOCK) ON Y.No = X.GroupNo ";
break;
}
/*
strQuery += $"LEFT JOIN [CPXV2].[dbo].[PROD_Variant] AS X WITH(NOLOCK) ON X.No = {DMCommon.SummaryLogTable}.[TestListVariantNo] ";
strQuery += $"LEFT JOIN [CPXV2].[dbo].[PROD_Group] AS Y WITH(NOLOCK) ON Y.No = X.GroupNo ";
*/
strQuery += $"WHERE ";
if (inputOption.ProductID.Length > 0 && inputOption.FullScanData)
{
bFullScanOn = true;
}
else
strQuery += $"TestDT >= '{dtStart.ToString("yyyy-MM-dd HH:mm:ss")}' AND TestDT <= '{dtEnd.ToString("yyyy-MM-dd HH:mm:ss")}' AND ";
strQuery += $"ProdNo_C NOT IN('PowerON', 'PowerOFF', 'QUERY') AND ";
strQuery += $"ProductID NOT IN('PowerON', 'PowerOFF', 'QUERY') ";
if (inputOption.ProductID.Length > 0)
{
strQuery += $"AND ProductID = '{inputOption.ProductID}' ";
}
strQuery += $"GROUP BY ";
strQuery += $"CAST({DMCommon.SummaryLogTable}.TestDT AS DATE),";
//
strQuery += $"Y.ModelName,";
if (inputOption.DisplayByStation)
{
strQuery += $"{DMCommon.SummaryLogTable}.StationName,";
strQuery += $"{DMCommon.SummaryLogTable}.HostID,";
strQuery += $"{DMCommon.SummaryLogTable}.Section,";
strQuery += $"{DMCommon.SummaryLogTable}.TestListCntID,";
}
if (inputOption.ProductID.Length > 0)
strQuery += $"{DMCommon.SummaryLogTable}.ProductID,";
strQuery += $"{DMCommon.SummaryLogTable}.TestType,";
strQuery += $"{DMCommon.SummaryLogTable}.ProdNo_C,";
strQuery += $"{DMCommon.SummaryLogTable}.Testcode,";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListFileNo],";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListVariantNo],";
strQuery += $"{DMCommon.SummaryLogTable}.ProdNo_P,";
strQuery += $"{DMCommon.SummaryLogTable}.ProdCode,";
strQuery += $"{DMCommon.SummaryLogTable}.Version,";
strQuery += $"{DMCommon.SummaryLogTable}.StepVersion";
strQuery += " ";
strQuery += ") AS X WHERE X.RN = 1 ";
if (inputOption.DisplayByStation)
{
strQuery += "ORDER BY Host, Section ASC;";
//strQuery += "ORDER BY Host, Section DESC;";
}
else
{
strQuery += "ORDER BY ProductNo, ParentNo ASC;";
//strQuery += ";";
}
if (strTestQuery.Length > 0)
strQuery = strTestQuery;
strGetSendQuery = strQuery;
if (bUseMainConn)
{
SQLCmd = new SqlCommand(strQuery, DBConn);
}
else
{
if (DatabaseConnControl.ScanLongTermLog)
{
SQLCmd = new SqlCommand(strQuery, LongTermDBConn);
}
else
SQLCmd = new SqlCommand(strQuery, ShortTermDBConn);
}
if(bFullScanOn)
SQLCmd.CommandTimeout = DMCommon.nFullScanTime;
else
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReader = null;
try
{
dtReader = await SQLCmd.ExecuteReaderAsync(CT);
}
catch(Exception e)
{
if (dtReader != null)
{
dtReader.Close();
dtReader = null;
}
}
finally
{
if (dtReader != null)
{
dtResult.Load(dtReader);
dtReader.Close();
}
}
return new Tuple<DataTable, string>(dtResult, strGetSendQuery);
}
}
}

View File

@ -0,0 +1,189 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SystemX.Product.ALIS.Interface;
using SystemX.Product.TRA.UIControl;
using static SystemX.Product.TRA.DataManager.DMOverview;
using static SystemX.Product.CP.TRA.Commons;
using DataBaseConnection.Control;
namespace SystemX.Product.TRA.DataManager
{
public class DMProductHistory
{
public enum eColList
{
LastTestDateTime,
ProductID,
ProductNo,
TestType,
TestCode,
ParentNo,
FileVersion,
FileCode,
StepVersion,
AvgDuration,
TestResult,
OK,
NG, //NOK,
TestlistNo,
TestlistFile,
TestlistReqID
}
private SqlConnection DBConn { get; set; }
private SqlConnection ShortTermDBConn { get; set; }
private SqlConnection LongTermDBConn { get; set; }
private SqlCommand SQLCmd { get; set; }
public DMProductHistory(eSelectDataView SelectView, IDataBaseController getDBController)
{
DBConn = getDBController.GetMainConn();
if (SelectView == eSelectDataView.DataDocumentViewC1)
{
ShortTermDBConn = getDBController.GetShortTermConn1();
LongTermDBConn = getDBController.GetLongTermConn1().First().Value;
}
else if (SelectView == eSelectDataView.DataDocumentViewC2)
{
ShortTermDBConn = getDBController.GetShortTermConn2();
LongTermDBConn = getDBController.GetLongTermConn2().First().Value;
}
}
public DataTable SearchTestHistory(SelectedDataCollection data, TestHistorySearchOption option)
{
DataTable dtResult = GetRawResult(data, option);
return dtResult;
}
DataTable GetRawResult(SelectedDataCollection data, TestHistorySearchOption option)
{
DataTable dtResult = new DataTable();
string strQuery = string.Empty;
if (data == null)
return dtResult;
DateTime dtNow = DateTime.Now;
DateTime dtCheckTime = DateTime.Now;
if (option.Time_WholeRange)
dtCheckTime = data.SearchRangeStart;
else if (option.Time_SelectedTest)
dtCheckTime = data.StartTime;
else if (option.Time_Day)
dtCheckTime = data.StartTime;
strQuery += $"select ";
strQuery += $"{DMCommon.SummaryLogTable}.ProductID as {eColList.ProductID.ToString()},";
//strQuery += $"CONVERT(char(20), {DMCommon.SummaryLogTable}.TestDT, 20) as {eColList.LastTestDateTime.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.TestType as {eColList.TestType.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.ProdNo_C as {eColList.ProductNo.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.Testcode as {eColList.TestCode.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.ProdNo_P as {eColList.ParentNo.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.ProdCode as {eColList.FileCode.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.Version as {eColList.FileVersion.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.StepVersion as {eColList.StepVersion.ToString()},";
strQuery += $"avg(CONVERT(int, {DMCommon.SummaryLogTable}.Duration)) as {eColList.AvgDuration.ToString()},";
strQuery += $"COUNT(CASE WHEN {DMCommon.SummaryLogTable}.Result = 'OK' THEN 1 ELSE 0 END) as {eColList.OK.ToString()},";
strQuery += $"COUNT(CASE WHEN {DMCommon.SummaryLogTable}.Result = '-' THEN 0 WHEN {DMCommon.SummaryLogTable}.Result != 'OK' THEN 1 ELSE 0 END) as {eColList.NG.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[TestlistNo],";
strQuery += $"{DMCommon.SummaryLogTable}.[TestlistFile]";
strQuery += " ";
strQuery += $"from {DMCommon.SummaryLogTable} ";
strQuery += $"WITH(NOLOCK) ";
if (option.Time_WholeRange)
strQuery += $"where TestDT >= '{data.SearchRangeStart.ToString("yyyy-MM-dd 00:00:00")}' and TestDT <= '{data.SearchRangeEnd.ToString("yyyy-MM-dd 23:59:59")}' ";
else if(option.Time_SelectedTest)
strQuery += $"where TestDT >= '{data.StartTime.ToString("yyyy-MM-dd HH:mm:ss")}' and TestDT <= '{data.EndTime.ToString("yyyy-MM-dd HH:mm:ss")}' ";
else if(option.Time_Day)
strQuery += $"where TestDT >= '{data.StartTime.ToShortDateString()} 00:00:00' and TestDT <= '{data.EndTime.ToShortDateString()} 23:59:59' ";
if (option.Station && !string.IsNullOrWhiteSpace(data.StationName))
strQuery += $" and (StationName = '{data.StationName}' or StationName = '-') ";
if (option.Host && !string.IsNullOrWhiteSpace(data.HostID))
strQuery += $" and (HostID = '{data.HostID}' or HostID = '-') ";
if (option.Section && !string.IsNullOrWhiteSpace(data.SectionID))
strQuery += $" and (Section = '{data.SectionID}' or Section = '-') ";
if (option.TestType)
strQuery += $" and (TestType = '{data.TestType}' or TestType = '-') ";
if (option.ProductNo)
{
strQuery += $" and (ProdNo_C = '{data.ProductNo}' ";
if(option.Host && !string.IsNullOrWhiteSpace(data.HostID))
{
foreach(string strCmd in Enum.GetNames(typeof(eCommand)))
strQuery += $"or ProdNo_C = '{strCmd}'";
}
strQuery += $" )";
}
if (option.TestCode)
strQuery += $" and (Testcode = '{data.TestCode}' or Testcode = '-') ";
if (option.ParentNo)
strQuery += $" and (ProdNo_P = '{data.ParentNo}' or ProdNo_P = '-') ";
if (option.ProductionCode)
strQuery += $" and (ProdCode = '{data.ProductionCode}' or ProdCode = '-') ";
if (option.FileVersion)
strQuery += $" and (Version = '{data.FileVersion}' or Version = '-') ";
if (option.StepVersion)
strQuery += $" and (StepVersion = '{data.StepVersion}' or StepVersion = '-1') ";
if (option.Time_SelectedTest)
strQuery += $" and (TestListCntID = '{data.TestRequestID[0]}' or TestListCntID = '-') ";
strQuery += $" group by ";
strQuery += $" {DMCommon.SummaryLogTable}.ProductID, ";
strQuery += $" {DMCommon.SummaryLogTable}.TestType, ";
strQuery += $" {DMCommon.SummaryLogTable}.ProdNo_C, ";
strQuery += $" {DMCommon.SummaryLogTable}.Testcode, ";
strQuery += $" {DMCommon.SummaryLogTable}.ProdNo_P, ";
strQuery += $" {DMCommon.SummaryLogTable}.ProdCode, ";
strQuery += $" {DMCommon.SummaryLogTable}.Version, ";
strQuery += $" {DMCommon.SummaryLogTable}.StepVersion, ";
strQuery += $" {DMCommon.SummaryLogTable}.TestlistNo, ";
strQuery += $" {DMCommon.SummaryLogTable}.TestlistFile ";
strQuery += " ";
//strQuery += $"order by ";
//strQuery += $"{DMCommon.SummaryLogTable}.TestDT";
strQuery += ";";
if (DatabaseConnControl.ScanLongTermLog)
SQLCmd = new SqlCommand(strQuery, LongTermDBConn);
else
SQLCmd = new SqlCommand(strQuery, ShortTermDBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReader = SQLCmd.ExecuteReader();
dtResult.Load(dtReader);
dtReader.Close();
return dtResult;
}
}
}

View File

@ -0,0 +1,176 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SystemX.Product.ALIS.Interface;
using SystemX.Product.TRA.UIControl;
using static SystemX.Product.TRA.DataManager.DMOverview;
using static SystemX.Product.CP.TRA.Commons;
using DataBaseConnection.Control;
namespace SystemX.Product.TRA.DataManager
{
public class DMStepTrend
{
public SqlConnection DBConn { get; private set; }
public SqlConnection ShortTermDBConn { get; private set; }
public SqlConnection LongTermDBConn { get; private set; }
private SqlCommand SQLCmd { get; set; }
eSelectDataView TrendSelectView { get; set; }
IDataBaseController GetDBController;
public DMStepTrend(eSelectDataView SelectView, IDataBaseController getDBController, DateTime dtStart)
{
GetDBController = getDBController;
DBConn = getDBController.GetMainConn();
if (SelectView == eSelectDataView.DataDocumentViewC1)
{
TrendSelectView = eSelectDataView.DataDocumentViewC1;
ShortTermDBConn = getDBController.GetShortTermConn1();
LongTermDBConn = getDBController.GetLongTermConn1().Where(x=>x.Key.Contains(dtStart.Year.ToString())).First().Value;
}
else if (SelectView == eSelectDataView.DataDocumentViewC2)
{
TrendSelectView = eSelectDataView.DataDocumentViewC2;
ShortTermDBConn = getDBController.GetShortTermConn2();
LongTermDBConn = getDBController.GetLongTermConn2().Where(x => x.Key.Contains(dtStart.Year.ToString())).First().Value;
}
}
public DataTable SearchTestResult(DateTime dtTest, ulong nAccNo)
{
if (TrendSelectView == eSelectDataView.DataDocumentViewC1)
{
TrendSelectView = eSelectDataView.DataDocumentViewC1;
ShortTermDBConn = GetDBController.GetShortTermConn1();
LongTermDBConn = GetDBController.GetLongTermConn1().Where(x => x.Key.Contains(dtTest.Year.ToString())).First().Value;
}
else if (TrendSelectView == eSelectDataView.DataDocumentViewC2)
{
TrendSelectView = eSelectDataView.DataDocumentViewC2;
ShortTermDBConn = GetDBController.GetShortTermConn2();
LongTermDBConn = GetDBController.GetLongTermConn2().Where(x => x.Key.Contains(dtTest.Year.ToString())).First().Value;
}
DataTable dtResult = new DataTable();
string strQuery = string.Empty;
//string strLongTerm = "HIST_TestResult";
//string strShortTerm = "HIST_TestResult";
//DateTime dtNow = DateTime.Now;
//int nDiffMonth = 12 * (dtNow.Year - dtTest.Year) + (dtNow.Month - dtTest.Month);
//string strTableTerm = nDiffMonth > 3 ? strLongTerm : strShortTerm;
strQuery += $"SELECT ";
strQuery += $"*";
strQuery += " ";
strQuery += $"from {DMCommon.ResultLogTable} ";
strQuery += $"WITH(NOLOCK) ";
strQuery += $"where [No] = {nAccNo}";
strQuery += " ";
//strQuery += $"order by ";
//strQuery += $"[No]";
strQuery += ";";
if (DatabaseConnControl.ScanLongTermLog) SQLCmd = new SqlCommand(strQuery, LongTermDBConn);
else SQLCmd = new SqlCommand(strQuery, ShortTermDBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReader = SQLCmd.ExecuteReader();
dtResult.Load(dtReader);
dtReader.Close();
return dtResult;
}
public DataTable GetTestStepResults(DateTime dtTest, List<ulong> vnData)
{
DataTable dtResult = new DataTable();
string strQuery = string.Empty;
//string strLongTerm = "HIST_TestResult";
//string strShortTerm = "HIST_TestResult";
//DateTime dtNow = DateTime.Now;
//int nDiffMonth = 12 * (dtNow.Year - dtTest.Year) + (dtNow.Month - dtTest.Month);
//string strTableTerm = nDiffMonth > 3 ? strLongTerm : strShortTerm;
strQuery += $"SELECT ";
strQuery += $"*";
strQuery += " ";
strQuery += $"from {DMCommon.ResultLogTable} ";
strQuery += $"WITH(NOLOCK) ";
strQuery += $"where ";
int nIdx = 0;
foreach (ulong no in vnData)
{
strQuery += $"No = {no}";
if (nIdx < vnData.Count - 1)
strQuery += " or ";
nIdx++;
}
strQuery += " ";
strQuery += $"order by ";
strQuery += $"[No]";
strQuery += ";";
if (DatabaseConnControl.ScanLongTermLog) SQLCmd = new SqlCommand(strQuery, LongTermDBConn);
else SQLCmd = new SqlCommand(strQuery, ShortTermDBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReader = SQLCmd.ExecuteReader();
dtResult.Load(dtReader);
dtReader.Close();
return dtResult;
}
DataTable GetRawResult(DetailTestDataCollection data)
{
DataTable dtResult = new DataTable();
string strQuery = string.Empty;
if (data == null)
return dtResult;
SQLCmd = new SqlCommand(strQuery, DBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReader = SQLCmd.ExecuteReader();
dtResult.Load(dtReader);
dtReader.Close();
return dtResult;
}
}
}

View File

@ -0,0 +1,303 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SystemX.Product.ALIS.Interface;
using SystemX.Product.CP.TRA;
using SystemX.Product.TRA.UIControl;
using static SystemX.Product.TRA.DataManager.DMOverview;
using static SystemX.Product.CP.TRA.Commons;
using SystemX.Net.Platform.SystemX.Net.XEFCore;
using CPXV2Log = SystemX.Net.Platform.SystemX.Net.XEFCore.DBContext.CPXV2Log;
using CPXV2LogJson = SystemX.Net.Platform.SystemX.Net.XEFCore.DBContext.CPXV2LogJson;
using Newtonsoft.Json;
using DataBaseConnection.Control;
using SystemX.Common.Util;
namespace SystemX.Product.TRA.DataManager
{
public class DMTestDetail
{
public enum eColHideListLog
{
No,
AccessKey,
//TestID
}
public enum eColTestLog
{
No,
StepID,
MeasVal,
MeasValStr,
Message,
GlobalMin,
GlobalMax,
Result,
SpentTime,
DataDT
}
public enum eColHideListTL
{
No,
TestListNo,
StepVersion,
Enable,
IsGlobal,
UpdateDT
}
public enum eColTestlist
{
No,
TestListNo,
StepID,
Variant,
Gate,
Activate,
StepVersion,
Enable,
Position,
StepDesc,
UseFunction,
SpecMin,
SpecMax,
Dim,
IsGlobal,
UpdateDT
}
private SqlConnection DBConn { get; set; }
private SqlConnection ShortTermDBConn { get; set; }
public SqlConnection LongTermDBConn { get; private set; }
private SqlCommand SQLCmd { get; set; }
private IDataBaseController DBControllers { get; set; }
public eSelectDataView NgHistorySelectView { get; set; }
public DMTestDetail(eSelectDataView SelectView, IDataBaseController getDBController, DateTime dtStart)
{
DBControllers = getDBController;
DBConn = getDBController.GetMainConn();
if (SelectView == eSelectDataView.DataDocumentViewC1)
{
NgHistorySelectView = eSelectDataView.DataDocumentViewC1;
ShortTermDBConn = getDBController.GetShortTermConn1();
LongTermDBConn = getDBController.GetLongTermConn1().Where(x=>x.Key.Contains(dtStart.Year.ToString())).First().Value;
}
else if (SelectView == eSelectDataView.DataDocumentViewC2)
{
NgHistorySelectView = eSelectDataView.DataDocumentViewC2;
ShortTermDBConn = getDBController.GetShortTermConn2();
LongTermDBConn = getDBController.GetLongTermConn2().Where(x => x.Key.Contains(dtStart.Year.ToString())).First().Value;
}
}
public DataTable SearchTestlist(DetailTestDataCollection data)
{
DataTable dtResult = new DataTable();
string strQuery = string.Empty;
if (data == null)
return dtResult;
/*
--최신 목록 스텝 Index Seek 특정 버전 이하 만 찾기
SELECT * FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY StepID ORDER BY StepVersion DESC)
AS RN FROM VRFY_Release WITH (INDEX=[CSK_VRFY_Release_1], NOLOCK) WHERE TestlistNo = 28 AND StepVersion <= 18) AS X
WHERE X.RN = 1 ORDER BY X.StepID ASC;
--최신 목록 스텝 Index Seek
SELECT * FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY StepID ORDER BY StepVersion DESC)
AS RN FROM VRFY_Release WITH (INDEX=[CSK_VRFY_Release_1], NOLOCK) WHERE TestlistNo = 4) AS X
WHERE X.RN = 1 ORDER BY X.StepID ASC;
*/
/*
strQuery += $"SELECT * FROM(SELECT *, ROW_NUMBER() OVER(PARTITION BY StepID ORDER BY StepVersion DESC) " +
$"AS RN FROM VRFY_Release WITH(INDEX =[CSK_VRFY_Release_1], NOLOCK) WHERE TestlistNo = {data.TestlistNo}) AS X " +
$"WHERE X.RN = 1 ORDER BY X.StepID ASC;";
*/
strQuery = $"SELECT A.ProdNo_C, B.ProdNo_P, B.UpdateDT, D.TestCode, D.Gate1, D.Gate2, E.FileName, A.RegUserComment, B.Description, C.GroupName, C.ModelName, A.VariantNo AS 'TestListNo', A.Config, E.TestType, E.Version, E.ProdCode, B.UseTLPosition, B.TestListFileNo, E.UpdateDT AS 'TestListFileUpdateDT', A.VariantNo FROM [PROD_Release] AS A WITH(NOLOCK) " +
$"INNER JOIN(SELECT * FROM [PROD_Variant] WITH(NOLOCK)) AS B ON A.VariantNo = B.No " +
$"INNER JOIN(SELECT * FROM [PROD_Group] WITH(NOLOCK)) AS C ON B.GroupNo = C.No " +
$"INNER JOIN(SELECT * FROM [STAT_TestCode] WITH(NOLOCK)) AS D ON A.TestCodeNo = D.No " +
$"INNER JOIN(SELECT * FROM [STOR_TestListFile] WITH(NOLOCK)) AS E ON B.TestListFileNo = E.No " +
$"WHERE A.ProdNo_C = '{data.ProductNo}' AND D.TestCode = '{data.TestCode}' AND E.TestType = '{data.TestType}' AND E.Version = '{data.FileVersion}' AND E.ProdCode = '{data.FileCode}';";
SQLCmd = new SqlCommand(strQuery, DBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtCompReader = SQLCmd.ExecuteReader();
DataTable dtCompResult = new DataTable();
dtCompResult.Load(dtCompReader);
if (Commons.isHasRow(dtCompResult) == false)
return dtResult;
string strCompVariNo = dtCompResult.Rows[0]["VariantNo"].ToString();
string strCompFileNo = dtCompResult.Rows[0]["TestListFileNo"].ToString();
dtCompReader.Close();
string strGetTestListFileNo = string.Empty;
if (strCompVariNo.CompareTo(data.TestListVariantNo) == 0 &&
strCompFileNo.CompareTo(data.TestListFileNo) == 0)
strGetTestListFileNo = data.TestListFileNo;
else
strGetTestListFileNo = strCompFileNo;
strQuery = $"SELECT * FROM ( " +
$"SELECT *, ROW_NUMBER() OVER(PARTITION BY StepID ORDER BY StepVersion DESC) " +
$"AS RN FROM VRFY_TestListFileRelease WITH (NOLOCK, INDEX=[CSK_VRFY_Release_2]) WHERE TestListFileNo = {strGetTestListFileNo} " +
$"AND StepVersion <= {data.StepVersion}) X WHERE RN = 1 ORDER BY X.StepID ASC;";
/*strQuery += $"SELECT ";
strQuery += $"*";
strQuery += " ";
strQuery += $"from [VRFY_Release] ";
strQuery += $"WITH(NOLOCK) ";
strQuery += $"where [TestListNo] = {data.TestlistNo}";
strQuery += " ";
strQuery += $"order by ";
strQuery += $"[StepID]";
strQuery += ";";*/
SQLCmd = new SqlCommand(strQuery, DBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReader = SQLCmd.ExecuteReader();
dtResult.Load(dtReader);
dtReader.Close();
//PK 키 지정
DataColumn[] keys1 = new DataColumn[1];
keys1[0] = new DataColumn();
keys1[0] = dtResult.Columns["StepID"];
dtResult.PrimaryKey = keys1;
//StepID 마다 가장 높은 버전 찾기
//SQL 수정으로 사용 X
//dtResult = RefineStepVersion(dtResult, data);
return dtResult;
}
public DataTable RefineStepVersion(DataTable dtTestlist, DetailTestDataCollection data)
{
var DuplicatedSteps = dtTestlist.AsEnumerable().GroupBy(x => x[eColTestlist.StepID.ToString()]).
Select(x => new { StepID = x.Key, Count = x.Count() }).Where(x => x.Count > 1);
foreach(var value in DuplicatedSteps)
{
List<DataRow> vdtRow = dtTestlist.AsEnumerable().Where(x => x[eColTestlist.StepID.ToString()].ToString() == value.StepID.ToString()).ToList();
DataRow vExcRow = vdtRow.Where(x => x[eColTestlist.StepVersion.ToString()].ToString() == data.StepVersion).FirstOrDefault();
if(vExcRow == null)
{
int nMaxVer = vdtRow.Max(x => Convert.ToInt32(x[eColTestlist.StepVersion.ToString()]));
vExcRow = vdtRow.Where(x => Convert.ToInt32(x[eColTestlist.StepVersion.ToString()]) == nMaxVer).FirstOrDefault();
}
vdtRow.Remove(vExcRow);
foreach (DataRow dtRow in vdtRow)
dtTestlist.Rows.Remove(dtRow);
}
return dtTestlist;
}
public DataTable SearchTestHistory(DetailTestDataCollection data)
{
if (NgHistorySelectView == eSelectDataView.DataDocumentViewC1)
{
ShortTermDBConn = DBControllers.GetShortTermConn1();
LongTermDBConn = DBControllers.GetLongTermConn1().Where(x => x.Key.Contains(data.StartTime.Year.ToString())).First().Value;
}
else if (NgHistorySelectView == eSelectDataView.DataDocumentViewC2)
{
ShortTermDBConn = DBControllers.GetShortTermConn2();
LongTermDBConn = DBControllers.GetLongTermConn2().Where(x => x.Key.Contains(data.StartTime.Year.ToString())).First().Value;
}
DataTable dtResult = new DataTable();
List<CPXV2Log.Tables.HIST_TestResult> list = new List<CPXV2Log.Tables.HIST_TestResult>();
StringBuilder strQuery = new StringBuilder();
if (data == null)
return dtResult;
strQuery.Append($"SELECT ");
strQuery.Append($"*");
strQuery.Append(" ");
strQuery.Append($"FROM {DMCommon.ResultLogTable} ");
strQuery.Append($"WITH(NOLOCK) ");
strQuery.Append($"WHERE No='{data.No}' ");
strQuery.Append(";");
if (DatabaseConnControl.ScanLongTermLog) SQLCmd = new SqlCommand(strQuery.ToString(), LongTermDBConn);
else SQLCmd = new SqlCommand(strQuery.ToString(), ShortTermDBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReader = SQLCmd.ExecuteReader();
dtResult.Load(dtReader);
dtReader.Close();
if (dtResult.Rows.Count > 0)
{
var logData = dtResult.Rows[0]["LogData"].ToString();
var decompStr = logData.GzipDecompress();
list = JsonConvert.DeserializeObject<List<CPXV2Log.Tables.HIST_TestResult>>(decompStr);
dtResult = list.ToDataTable();
}
return dtResult;
}
DataTable GetRawResult(DetailTestDataCollection data)
{
DataTable dtResult = new DataTable();
string strQuery = string.Empty;
if (data == null)
return dtResult;
SQLCmd = new SqlCommand(strQuery, DBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReader = SQLCmd.ExecuteReader();
dtResult.Load(dtReader);
dtReader.Close();
return dtResult;
}
}
}

View File

@ -0,0 +1,213 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SystemX.Product.ALIS.Interface;
using SystemX.Product.TRA.UIControl;
using static SystemX.Product.TRA.DataManager.DMOverview;
using static SystemX.Product.CP.TRA.Commons;
using DataBaseConnection.Control;
namespace SystemX.Product.TRA.DataManager
{
public class DMTestHistory
{
public enum eColList
{
No,
TestDateTime,
StationName,
Host,
Section,
ProductID,
ProductNo,
TestType,
TestCode,
ParentNo,
FileVersion,
FileCode,
StepVersion,
Duration,
TestResult,
//OK,
//NOK,
TestListFileNo,
TestListVariantNo,
TestlistFileName,
TestlistReqID
}
private SqlConnection DBConn { get; set; }
private SqlConnection ShortTermDBConn { get; set; }
private SqlConnection LongTermDBConn { get; set; }
private SqlCommand SQLCmd { get; set; }
IDataBaseController GetDBController;
public DMTestHistory(eSelectDataView SelectView, IDataBaseController getDBController)
{
GetDBController = getDBController;
DBConn = getDBController.GetMainConn();
if (SelectView == eSelectDataView.DataDocumentViewC1)
{
ShortTermDBConn = getDBController.GetShortTermConn1();
LongTermDBConn = getDBController.GetLongTermConn1().First().Value;
}
else if (SelectView == eSelectDataView.DataDocumentViewC2)
{
ShortTermDBConn = getDBController.GetShortTermConn2();
LongTermDBConn = getDBController.GetLongTermConn2().First().Value;
}
}
public DataTable SearchTestHistory(eSelectDataView SelectView, SelectedDataCollection data, TestHistorySearchOption option, int nReqIdPos = int.MaxValue)
{
if (SelectView == eSelectDataView.DataDocumentViewC1)
{
LongTermDBConn = GetDBController.GetLongTermConn1().Where(x => x.Key.Contains(data.StartTime.Year.ToString()))?.FirstOrDefault().Value;
if (LongTermDBConn == null)
{
LongTermDBConn = GetDBController.GetLongTermConn1().FirstOrDefault().Value;
}
}
else if (SelectView == eSelectDataView.DataDocumentViewC2)
{
LongTermDBConn = GetDBController.GetLongTermConn2().Where(x => x.Key.Contains(data.StartTime.Year.ToString()))?.FirstOrDefault().Value;
if (LongTermDBConn == null)
{
LongTermDBConn = GetDBController.GetLongTermConn2().FirstOrDefault().Value;
}
}
DataTable dtResult = GetRawResult(data, option, nReqIdPos);
return dtResult;
}
DataTable GetRawResult(SelectedDataCollection data, TestHistorySearchOption option, int nReqIdPos = int.MaxValue)
{
DataTable dtResult = new DataTable();
string strQuery = string.Empty;
DateTime dtCheckTime = DateTime.Now;
//데이터 검색 시작 시간 확인
if (option.Time_WholeRange)
dtCheckTime = data.SearchRangeStart;
else if (option.Time_SelectedTest)
dtCheckTime = data.StartTime;
else if (option.Time_Day)
dtCheckTime = data.StartTime;
DateTime dtNow = DateTime.Now;
int nDiffMonth = 12 * (dtNow.Year - dtCheckTime.Year) + (dtNow.Month - dtCheckTime.Month);
if (data == null)
return dtResult;
strQuery += $"SELECT ";
strQuery += $"{DMCommon.SummaryLogTable}.No,";
strQuery += $"CONVERT(char(20), {DMCommon.SummaryLogTable}.TestDT, 20) as {eColList.TestDateTime.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.StationName as {eColList.StationName.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.HostID as {eColList.Host.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.Section as {eColList.Section.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.ProductID as {eColList.ProductID.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.TestType as {eColList.TestType.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.ProdNo_C as {eColList.ProductNo.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.Testcode as {eColList.TestCode.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.ProdNo_P as {eColList.ParentNo.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.ProdCode as {eColList.FileCode.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.Version as {eColList.FileVersion.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.StepVersion as {eColList.StepVersion.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.Duration as {eColList.Duration.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.Result as {eColList.TestResult.ToString()},";
//strQuery += $"CASE WHEN {DMCommon.SummaryLogTable}.Result = 'OK' THEN 1 ELSE 0 END as {eColList.OK.ToString()},";
//strQuery += $"CASE WHEN {DMCommon.SummaryLogTable}.Result = '-' THEN 0 WHEN {DMCommon.SummaryLogTable}.Result != 'OK' THEN 1 ELSE 0 END as {eColList.NG.ToString()},";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListFileNo],";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListVariantNo],";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListFileName],";
strQuery += $"{DMCommon.SummaryLogTable}.[TestListCntID] as {eColList.TestlistReqID.ToString()}";
strQuery += " ";
strQuery += $"FROM {DMCommon.SummaryLogTable} ";
strQuery += $"WITH(NOLOCK) ";
if (option.Time_WholeRange)
strQuery += $"where TestDT >= '{data.SearchRangeStart.ToString("yyyy-MM-dd 00:00:00")}' and TestDT <= '{data.SearchRangeEnd.ToString("yyyy-MM-dd 23:59:59")}' ";
else if(option.Time_SelectedTest)
strQuery += $"where TestDT >= '{data.StartTime.ToString("yyyy-MM-dd HH:mm:ss")}' and TestDT <= '{data.EndTime.ToString("yyyy-MM-dd HH:mm:ss")}' ";
else if(option.Time_Day)
strQuery += $"where TestDT >= '{data.StartTime.ToShortDateString()} 00:00:00' and TestDT <= '{data.EndTime.ToShortDateString()} 23:59:59' ";
if (option.Station && !string.IsNullOrWhiteSpace(data.StationName))
strQuery += $" and (StationName = '{data.StationName}' or StationName = '-') ";
if (option.Host && !string.IsNullOrWhiteSpace(data.HostID))
strQuery += $" and (HostID = '{data.HostID}' or HostID = '-') ";
if (option.Section && !string.IsNullOrWhiteSpace(data.SectionID))
strQuery += $" and (Section = '{data.SectionID}' or Section = '-') ";
if (option.TestType)
strQuery += $" and (TestType = '{data.TestType}' or TestType = '-') ";
if (option.ProductNo)
{
strQuery += $" and (ProdNo_C = '{data.ProductNo}' ";
if(option.Host && !string.IsNullOrWhiteSpace(data.HostID))
{
foreach(string strCmd in Enum.GetNames(typeof(eCommand)))
strQuery += $"or ProdNo_C = '{strCmd}'";
}
strQuery += $" )";
}
if (option.TestCode)
strQuery += $" and (Testcode = '{data.TestCode}' or Testcode = '-') ";
if (option.ParentNo)
strQuery += $" and (ProdNo_P = '{data.ParentNo}' or ProdNo_P = '-') ";
if (option.ProductionCode)
strQuery += $" and (ProdCode = '{data.ProductionCode}' or ProdCode = '-') ";
if (option.FileVersion)
strQuery += $" and (Version = '{data.FileVersion}' or Version = '-') ";
if (option.StepVersion)
strQuery += $" and (StepVersion = '{data.StepVersion}' or StepVersion = '-1') ";
if (option.Time_SelectedTest)
{
if(nReqIdPos == int.MaxValue)
strQuery += $" and (TestListCntID = '{data.TestRequestID[0]}' or TestListCntID = '-') ";
else
strQuery += $" and (TestListCntID = '{data.TestRequestID[nReqIdPos]}' or TestListCntID = '-') ";
}
//if (option.ShowRedundantData)
// strQuery += $" group by {DMCommon.SummaryLogTable}.ProductID ";
strQuery += " ";
strQuery += $"ORDER BY ";
strQuery += $"{DMCommon.SummaryLogTable}.TestDT";
strQuery += ";";
if (DatabaseConnControl.ScanLongTermLog) SQLCmd = new SqlCommand(strQuery, LongTermDBConn);
else SQLCmd = new SqlCommand(strQuery, ShortTermDBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReader = SQLCmd.ExecuteReader();
dtResult.Load(dtReader);
dtReader.Close();
return dtResult;
}
}
}

View File

@ -0,0 +1,281 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SystemX.Product.ALIS.Interface;
using SystemX.Product.CP.TRA;
using SystemX.Product.TRA.UIControl;
using static SystemX.Product.TRA.DataManager.DMOverview;
using static SystemX.Product.CP.TRA.Commons;
using DataBaseConnection.Control;
namespace SystemX.Product.TRA.DataManager
{
public class DMTestNgHistory
{
public enum eColList
{
No,
TestDateTime,
StationName,
Host,
Section,
ProductID,
ProductNo,
TestType,
TestCode,
ParentNo,
FileVersion,
FileCode,
StepVersion,
Duration,
TestResult,
//OK,
//NOK,
TestListFileNo,
TestListVariantNo,
TestlistFileName,
TestlistReqID
}
private SqlConnection DBConn { get; set; }
private SqlConnection ShortTermDBConn { get; set; }
private SqlConnection LongTermDBConn { get; set; }
private SqlCommand SQLCmd { get; set; }
private IDataBaseController DBControllers { get; set; }
public eSelectDataView NgHistorySelectView { get; set; }
public DMTestNgHistory(eSelectDataView SelectView, IDataBaseController getDBController, DateTime dtStart)
{
DBControllers = getDBController;
DBConn = getDBController.GetMainConn();
if (SelectView == eSelectDataView.DataDocumentViewC1)
{
NgHistorySelectView = eSelectDataView.DataDocumentViewC1;
ShortTermDBConn = getDBController.GetShortTermConn1();
LongTermDBConn = getDBController.GetLongTermConn1().Where(x=>x.Key.Contains(dtStart.Year.ToString())).First().Value;
}
else if (SelectView == eSelectDataView.DataDocumentViewC2)
{
NgHistorySelectView = eSelectDataView.DataDocumentViewC2;
ShortTermDBConn = getDBController.GetShortTermConn2();
LongTermDBConn = getDBController.GetLongTermConn2().Where(x => x.Key.Contains(dtStart.Year.ToString())).First().Value;
}
}
public DataTable SearchTestNgHistory(SelectedDataCollection data, TestHistorySearchOption option, int nReqIdPos = int.MaxValue)
{
DataTable dtResult = GetRawResult(data, option, nReqIdPos);
return dtResult;
}
public int[] CheckTestListFileNo(string strProductNo, string strTestCode, string strTestType, string strFileVer, string strFileCode)
{
DataTable dtResult = new DataTable();
StringBuilder strQuery = new StringBuilder();
//string strQuery = string.Empty;
strQuery.Append($"SELECT A.ProdNo_C, B.ProdNo_P, B.UpdateDT, D.TestCode, D.Gate1, D.Gate2, E.FileName, A.RegUserComment, B.Description, C.GroupName, C.ModelName, A.VariantNo AS 'TestListNo', A.Config, E.TestType, E.Version, E.ProdCode, B.UseTLPosition, B.TestListFileNo, E.UpdateDT AS 'TestListFileUpdateDT', A.VariantNo FROM [PROD_Release] AS A WITH(NOLOCK) " +
$"INNER JOIN(SELECT * FROM [PROD_Variant] WITH(NOLOCK)) AS B ON A.VariantNo = B.No " +
$"INNER JOIN(SELECT * FROM [PROD_Group] WITH(NOLOCK)) AS C ON B.GroupNo = C.No " +
$"INNER JOIN(SELECT * FROM [STAT_TestCode] WITH(NOLOCK)) AS D ON A.TestCodeNo = D.No " +
$"INNER JOIN(SELECT * FROM [STOR_TestListFile] WITH(NOLOCK)) AS E ON B.TestListFileNo = E.No " +
$"WHERE A.ProdNo_C = '{strProductNo}' AND D.TestCode = '{strTestCode}' AND E.TestType = '{strTestType}' AND E.Version = '{strFileVer}' AND E.ProdCode = '{strFileCode}';");
SQLCmd = new SqlCommand(strQuery.ToString(), DBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtCompReader = SQLCmd.ExecuteReader();
DataTable dtCompResult = new DataTable();
dtCompResult.Load(dtCompReader);
if (Commons.isHasRow(dtCompResult) == false)
return new int[] { int.MinValue, int.MinValue };
string strCompVariNo = dtCompResult.Rows[0]["VariantNo"].ToString();
string strCompFileNo = dtCompResult.Rows[0]["TestListFileNo"].ToString();
dtCompReader.Close();
return new int[] { int.Parse(strCompFileNo), int.Parse(strCompVariNo) };
}
public DataTable GetUseTestListInformation(int nTestListNo, int nUseStepVersion)
{
DataTable dtResult = new DataTable();
StringBuilder strQuery = new StringBuilder();
//string strQuery = string.Empty;
strQuery.Append($"SELECT * FROM ( " +
$"SELECT *, ROW_NUMBER() OVER(PARTITION BY StepID ORDER BY StepVersion DESC) " +
$"AS RN FROM VRFY_TestListFileRelease WITH (NOLOCK, INDEX=[CSK_VRFY_Release_2]) WHERE TestListFileNo = {nTestListNo.ToString()} " +
$"AND StepVersion <= {nUseStepVersion.ToString()}) X WHERE RN = 1 ORDER BY X.StepID ASC;");
/*
strQuery.Append($"SELECT * FROM ( " +
$"SELECT *, ROW_NUMBER() OVER(PARTITION BY StepID ORDER BY StepVersion DESC) " +
$"AS RN FROM VRFY_TestListFileRelease WITH (NOLOCK, INDEX=[CSK_VRFY_Release_2]) WHERE TestListFileNo = {nTestListNo.ToString()} " +
$"AND StepVersion <= {nUseStepVersion.ToString()}) X ORDER BY X.StepID ASC;");
*/
SQLCmd = new SqlCommand(strQuery.ToString(), DBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReader = SQLCmd.ExecuteReader();
dtResult.Load(dtReader);
dtReader.Close();
//PK 지정
DataColumn[] keys1 = new DataColumn[1];
keys1[0] = new DataColumn();
keys1[0] = dtResult.Columns["StepID"];
dtResult.PrimaryKey = keys1;
return dtResult;
}
DataTable GetRawResult(SelectedDataCollection data, TestHistorySearchOption option, int nReqIdPos = int.MaxValue)
{
if (NgHistorySelectView == eSelectDataView.DataDocumentViewC1)
{
ShortTermDBConn = DBControllers.GetShortTermConn1();
LongTermDBConn = DBControllers.GetLongTermConn1().Where(x => x.Key.Contains(data.SearchRangeStart.Year.ToString())).First().Value;
}
else if (NgHistorySelectView == eSelectDataView.DataDocumentViewC2)
{
ShortTermDBConn = DBControllers.GetShortTermConn2();
LongTermDBConn = DBControllers.GetLongTermConn2().Where(x => x.Key.Contains(data.SearchRangeStart.Year.ToString())).First().Value;
}
DataTable dtResult = new DataTable();
//string strQuery = string.Empty;
StringBuilder strQuery = new StringBuilder();
DateTime dtCheckTime = DateTime.Now;
//데이터 검색 시작 시간 확인
if (option.Time_WholeRange)
dtCheckTime = data.SearchRangeStart;
else if (option.Time_SelectedTest)
dtCheckTime = data.StartTime;
else if (option.Time_Day)
dtCheckTime = data.StartTime;
DateTime dtNow = DateTime.Now;
if (data == null)
return dtResult;
strQuery.Append($"SELECT ");
strQuery.Append($"{DMCommon.SummaryLogTable}.No,");
strQuery.Append($"CONVERT(char(20), {DMCommon.SummaryLogTable}.TestDT, 20) as {eColList.TestDateTime.ToString()},");
strQuery.Append($"{DMCommon.SummaryLogTable}.StationName as {eColList.StationName.ToString()},");
strQuery.Append($"{DMCommon.SummaryLogTable}.HostID as {eColList.Host.ToString()},");
strQuery.Append($"{DMCommon.SummaryLogTable}.Section as {eColList.Section.ToString()},");
strQuery.Append($"{DMCommon.SummaryLogTable}.ProductID as {eColList.ProductID.ToString()},");
strQuery.Append($"{DMCommon.SummaryLogTable}.TestType as {eColList.TestType.ToString()},");
strQuery.Append($"{DMCommon.SummaryLogTable}.ProdNo_C as {eColList.ProductNo.ToString()},");
strQuery.Append($"{DMCommon.SummaryLogTable}.Testcode as {eColList.TestCode.ToString()},");
strQuery.Append($"{DMCommon.SummaryLogTable}.ProdNo_P as {eColList.ParentNo.ToString()},");
strQuery.Append($"{DMCommon.SummaryLogTable}.ProdCode as {eColList.FileCode.ToString()},");
strQuery.Append($"{DMCommon.SummaryLogTable}.Version as {eColList.FileVersion.ToString()},");
strQuery.Append($"{DMCommon.SummaryLogTable}.StepVersion as {eColList.StepVersion.ToString()},");
strQuery.Append($"{DMCommon.SummaryLogTable}.Duration as {eColList.Duration.ToString()},");
strQuery.Append($"{DMCommon.SummaryLogTable}.Result as {eColList.TestResult.ToString()},");
strQuery.Append($"{DMCommon.SummaryLogTable}.[TestListFileNo],");
strQuery.Append($"{DMCommon.SummaryLogTable}.[TestListVariantNo],");
strQuery.Append($"{DMCommon.SummaryLogTable}.[TestListFileName],");
strQuery.Append($"{DMCommon.SummaryLogTable}.[TestListCntID] as {eColList.TestlistReqID.ToString()}");
strQuery.Append(" ");
strQuery.Append($"FROM {DMCommon.SummaryLogTable} ");
strQuery.Append($"WITH(NOLOCK) ");
if (option.Time_WholeRange)
strQuery.Append($"WHERE TestDT >= '{data.SearchRangeStart.ToString("yyyy-MM-dd 00:00:00")}' AND TestDT <= '{data.SearchRangeEnd.ToString("yyyy-MM-dd 23:59:59")}' ");
else if(option.Time_SelectedTest)
strQuery.Append($"WHERE TestDT >= '{data.StartTime.ToString("yyyy-MM-dd HH:mm:ss")}' AND TestDT <= '{data.EndTime.ToString("yyyy-MM-dd HH:mm:ss")}' ");
else if(option.Time_Day)
strQuery.Append($"WHERE TestDT >= '{data.StartTime.ToShortDateString()} 00:00:00' AND TestDT <= '{data.EndTime.ToShortDateString()} 23:59:59' ");
if (option.Station && !string.IsNullOrWhiteSpace(data.StationName))
strQuery.Append($" AND (StationName = '{data.StationName}' OR StationName = '-') ");
if (option.Host && !string.IsNullOrWhiteSpace(data.HostID))
strQuery.Append($" AND (HostID = '{data.HostID}' OR HostID = '-') ");
if (option.Section && !string.IsNullOrWhiteSpace(data.SectionID))
strQuery.Append($" AND (Section = '{data.SectionID}' OR Section = '-') ");
if (option.TestType)
strQuery.Append($" AND (TestType = '{data.TestType}' OR TestType = '-') ");
if (option.ProductNo)
{
strQuery.Append($" AND (ProdNo_C = '{data.ProductNo}' ");
if(option.Host && !string.IsNullOrWhiteSpace(data.HostID))
{
foreach(string strCmd in Enum.GetNames(typeof(eCommand)))
strQuery.Append($"OR ProdNo_C = '{strCmd}'");
}
strQuery.Append($" )");
}
if (option.TestCode)
strQuery.Append($" AND (Testcode = '{data.TestCode}' OR Testcode = '-') ");
if (option.ParentNo)
strQuery.Append($" AND (ProdNo_P = '{data.ParentNo}' OR ProdNo_P = '-') ");
if (option.ProductionCode)
strQuery.Append($" AND (ProdCode = '{data.ProductionCode}' OR ProdCode = '-') ");
if (option.FileVersion)
strQuery.Append($" AND (Version = '{data.FileVersion}' OR Version = '-') ");
if (option.StepVersion)
strQuery.Append($" AND (StepVersion = '{data.StepVersion}' OR StepVersion = '-1') ");
if (option.Time_SelectedTest)
{
if (nReqIdPos == int.MaxValue)
strQuery.Append($" AND (TestListCntID = '{data.TestRequestID[0]}' OR TestListCntID = '-') ");
else
strQuery.Append($" AND (TestListCntID = '{data.TestRequestID[nReqIdPos]}' OR TestListCntID = '-') ");
}
// strQuery.Append($" AND (Result = 'NG' OR Result = 'SYSTEM_ERROR' OR Result = 'STOP') ";
strQuery.Append($" AND (Result != 'OK') ");
strQuery.Append(" ");
strQuery.Append($"ORDER BY ");
strQuery.Append($"{DMCommon.SummaryLogTable}.TestDT");
strQuery.Append(";");
var query = strQuery.ToString();
if (DatabaseConnControl.ScanLongTermLog) SQLCmd = new SqlCommand(strQuery.ToString(), LongTermDBConn);
else SQLCmd = new SqlCommand(strQuery.ToString(), ShortTermDBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReader = SQLCmd.ExecuteReader();
dtResult.Load(dtReader);
dtReader.Close();
return dtResult;
}
}
}

View File

@ -0,0 +1,447 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SystemX.Product.ALIS.Interface;
using SystemX.Product.CP.TRA;
using SystemX.Product.TRA.UIControl;
using static SystemX.Product.TRA.DataManager.DMOverview;
using static SystemX.Product.CP.TRA.Commons;
using DataBaseConnection.Control;
using Newtonsoft.Json;
using SystemX.Common.Util;
using CPXV2Log = SystemX.Net.Platform.SystemX.Net.XEFCore.DBContext.CPXV2Log;
namespace SystemX.Product.TRA.DataManager
{
public class DMTestSummary
{
public enum eColHideListLog
{
No,
//TestID
}
public enum eColTestLog
{
No,
//TestID,
StepID,
MeasVal,
MeasValStr,
Message,
GlobalMin,
GlobalMax,
Result
//Duration
}
public enum eColHideListTL
{
No,
TestlistNo,
StepVersion,
Enable,
IsGlobal,
UpdateDT
}
public enum eColTestlist
{
No,
TestlistNo,
StepID,
Variant,
Gate,
Activate,
StepVersion,
Enable,
Position,
StepDesc,
UseFunction,
SpecMin,
SpecMax,
Dim,
IsGlobal,
UpdateDT
}
public enum eColTestSummary
{
StepID,
Average,
Total,
OK,
NG //NOK
}
public SqlConnection DBConn { get; private set; }
public SqlConnection ShortTermDBConn { get; private set; }
public SqlConnection LongTermDBConn { get; private set; }
private SqlCommand SQLCmd { get; set; }
public DataTable dtHistVersionTL;
eSelectDataView TestSummarySelectView { get; set; }
IDataBaseController GetDBController;
public int nCurrentTLMaxStepVersion { get; set; }
//public DataTable this[int i] => dtEachVersionTL[i];
public DMTestSummary(eSelectDataView SelectView, IDataBaseController getDBController, DateTime dtStart)
{
GetDBController = getDBController;
DBConn = getDBController.GetMainConn();
if (SelectView == eSelectDataView.DataDocumentViewC1)
{
TestSummarySelectView = eSelectDataView.DataDocumentViewC1;
ShortTermDBConn = getDBController.GetShortTermConn1();
LongTermDBConn = getDBController.GetLongTermConn1().Where(x=>x.Key.Contains(dtStart.Year.ToString())).First().Value;
}
else if (SelectView == eSelectDataView.DataDocumentViewC2)
{
TestSummarySelectView = eSelectDataView.DataDocumentViewC2;
ShortTermDBConn = getDBController.GetShortTermConn2();
LongTermDBConn = getDBController.GetLongTermConn2().Where(x => x.Key.Contains(dtStart.Year.ToString())).First().Value;
}
}
public DataTable SearchTestlist(SelectedDataCollection data, int nHistChkStepVer = int.MinValue, bool bOnlyNewStepVersion = true)
{
DataTable dtResult = new DataTable();
DataTable dtResultChk = new DataTable();
string strQuery = string.Empty;
if (data == null)
return dtResult;
strQuery = $"SELECT A.ProdNo_C, B.ProdNo_P, B.UpdateDT, D.TestCode, D.Gate1, D.Gate2, E.FileName, A.RegUserComment, B.Description, C.GroupName, C.ModelName, A.VariantNo AS 'TestListNo', A.Config, E.TestType, E.Version, E.ProdCode, B.UseTLPosition, B.TestListFileNo, E.UpdateDT AS 'TestListFileUpdateDT', A.VariantNo FROM [PROD_Release] AS A WITH(NOLOCK) " +
$"INNER JOIN(SELECT * FROM [PROD_Variant] WITH(NOLOCK)) AS B ON A.VariantNo = B.No " +
$"INNER JOIN(SELECT * FROM [PROD_Group] WITH(NOLOCK)) AS C ON B.GroupNo = C.No " +
$"INNER JOIN(SELECT * FROM [STAT_TestCode] WITH(NOLOCK)) AS D ON A.TestCodeNo = D.No " +
$"INNER JOIN(SELECT * FROM [STOR_TestListFile] WITH(NOLOCK)) AS E ON B.TestListFileNo = E.No " +
$"WHERE A.ProdNo_C = '{data.ProductNo}' AND D.TestCode = '{data.TestCode}' AND E.TestType = '{data.TestType}' AND E.Version = '{data.FileVersion}' AND E.ProdCode = '{data.ProductionCode}';";
SQLCmd = new SqlCommand(strQuery, DBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtCompReader = SQLCmd.ExecuteReader();
DataTable dtCompResult = new DataTable();
dtCompResult.Load(dtCompReader);
if (Commons.isHasRow(dtCompResult) == false)
return dtResult;
string strCompVariNo = dtCompResult.Rows[0]["VariantNo"].ToString();
string strCompFileNo = dtCompResult.Rows[0]["TestListFileNo"].ToString();
dtCompReader.Close();
string strGetTestListFileNo = string.Empty;
if (strCompVariNo.CompareTo(data.TestListVariantNo) == 0 &&
strCompFileNo.CompareTo(data.TestListFileNo) == 0)
strGetTestListFileNo = data.TestListFileNo;
else
strGetTestListFileNo = strCompFileNo;
strQuery = $"SELECT LatestStepVersion FROM [HIST_TestListFileLatestStepVersion] WITH(NOLOCK) WHERE TestListFileNo = {strGetTestListFileNo};";
SQLCmd = new SqlCommand(strQuery, DBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReaderChk = SQLCmd.ExecuteReader();
dtResultChk.Clear();
dtResultChk.Load(dtReaderChk);
int nMaxStepVersion = Convert.ToInt32(dtResultChk.Rows[0]["LatestStepVersion"].ToString());
nCurrentTLMaxStepVersion = nMaxStepVersion;
dtReaderChk.Close();
//항상 최신 스텝 버전을 체크
strQuery = $"SELECT * FROM ( " +
$"SELECT *, ROW_NUMBER() OVER(PARTITION BY StepID ORDER BY StepVersion DESC) " +
$"AS RN FROM VRFY_TestListFileRelease WITH (NOLOCK, INDEX=[CSK_VRFY_Release_2]) WHERE TestListFileNo = {strGetTestListFileNo}) AS X " +
$"WHERE X.RN = 1 ORDER BY X.StepID ASC;";
SQLCmd = new SqlCommand(strQuery, DBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReader = SQLCmd.ExecuteReader();
dtResult.Clear();
dtResult.Load(dtReader);
dtReader.Close();
if (bOnlyNewStepVersion)
{
dtHistVersionTL = null;
}
else
{
//Hist 목록 검색 스텝 버전 리스트만 검색하여 사용
dtHistVersionTL = new DataTable();
strQuery = $"SELECT * FROM ( " +
$"SELECT *, ROW_NUMBER() OVER(PARTITION BY StepID ORDER BY StepVersion DESC) " +
$"AS RN FROM VRFY_TestListFileRelease WITH (NOLOCK, INDEX=[CSK_VRFY_Release_2]) WHERE TestListFileNo = {strGetTestListFileNo} AND StepVersion <= {nHistChkStepVer}) AS X " +
$"WHERE X.RN = 1 ORDER BY X.StepID ASC, StepVersion DESC;";
SQLCmd = new SqlCommand(strQuery, DBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtHistReader = SQLCmd.ExecuteReader();
dtHistVersionTL.Clear();
dtHistVersionTL.Load(dtHistReader);
dtHistReader.Close();
//PK 키 지정 >
//TODO : Primary Key Access Error > 업데이트 된 동일 스텝이 존재시 PK 지정 실패
DataColumn[] keysHistStepVer = new DataColumn[1];
keysHistStepVer[0] = new DataColumn();
keysHistStepVer[0] = dtHistVersionTL.Columns["StepID"];
dtHistVersionTL.PrimaryKey = keysHistStepVer;
/*
dtEachVersionTL = new DataTable[nMaxStepVersion + 1];
int nStartStepVer = nMaxStepVersion - 5;
if (nStartStepVer < 0)
nStartStepVer = 0;
for (int i = nStartStepVer; i <= nMaxStepVersion; i++)
{
dtEachVersionTL[i] = new DataTable();
strQuery = $"SELECT * FROM ( " +
$"SELECT *, ROW_NUMBER() OVER(PARTITION BY StepID ORDER BY StepVersion DESC) " +
$"AS RN FROM VRFY_TestListFileRelease WITH (NOLOCK, INDEX=[CSK_VRFY_Release_2]) WHERE TestListFileNo = {strGetTestListFileNo} AND StepVersion <= {i}) AS X " +
$"WHERE X.RN = 1 ORDER BY X.StepID ASC, StepVersion DESC;";
SQLCmd = new SqlCommand(strQuery, DBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReader = SQLCmd.ExecuteReader();
dtEachVersionTL[i].Clear();
dtEachVersionTL[i].Load(dtReader);
dtReader.Close();
//PK 키 지정 >
//TODO : Primary Key Access Error > 업데이트 된 동일 스텝이 존재시 PK 지정 실패
DataColumn[] keysEachStepVer = new DataColumn[1];
keysEachStepVer[0] = new DataColumn();
keysEachStepVer[0] = dtEachVersionTL[i].Columns["StepID"];
dtEachVersionTL[i].PrimaryKey = keysEachStepVer;
}
*/
}
//PK 키 지정
DataColumn[] keys1 = new DataColumn[1];
keys1[0] = new DataColumn();
keys1[0] = dtResult.Columns["StepID"];
dtResult.PrimaryKey = keys1;
return dtResult;
}
public DataTable RefineStepVersion(DataTable dtTestlist, SelectedDataCollection data)
{
var DuplicatedSteps = dtTestlist.AsEnumerable().GroupBy(x => x[eColTestlist.StepID.ToString()]).
Select(x => new { StepID = x.Key, Count = x.Count() }).Where(x => x.Count > 1);
foreach(var value in DuplicatedSteps)
{
List<DataRow> vdtRow = dtTestlist.AsEnumerable().Where(x => x[eColTestlist.StepID.ToString()].ToString() == value.StepID.ToString()).ToList();
DataRow vExcRow = vdtRow.Where(x => x[eColTestlist.StepVersion.ToString()].ToString() == data.StepVersion).FirstOrDefault();
if(vExcRow == null)
{
int nMaxVer = vdtRow.Max(x => Convert.ToInt32(x[eColTestlist.StepVersion.ToString()]));
vExcRow = vdtRow.Where(x => Convert.ToInt32(x[eColTestlist.StepVersion.ToString()]) == nMaxVer).FirstOrDefault();
}
vdtRow.Remove(vExcRow);
foreach (DataRow dtRow in vdtRow)
dtTestlist.Rows.Remove(dtRow);
}
return dtTestlist;
}
public DataTable SearchTestSummary(string[] testReqID, List<Int64> vnpSummaryNo)
{
DateTime start = DateTime.Now;
try
{
string requId = testReqID?.First();
if (string.IsNullOrEmpty(requId) == false && requId.Contains(";") == true || requId.Contains("@") == true)
{
start = Convert.ToDateTime(requId.Split(';', '@')[0]);
}
}
catch (Exception e)
{
//start = DateTime
}
//string strGetDataTime = testReqID?.First().Split(';')[0];
//int nGetDataTimeYYYY = Convert.ToInt32(strGetDataTime.Substring(0, 4));
//int nGetDataTimemm = Convert.ToInt32(strGetDataTime.Substring(4, 2));
//int nGetDataTimeDD = Convert.ToInt32(strGetDataTime.Substring(6, 2));
//int nGetDataTimeHH = Convert.ToInt32(strGetDataTime.Substring(8, 2));
//int nGetDataTimeMM = Convert.ToInt32(strGetDataTime.Substring(10, 2));
//int nGetDataTimeSS = Convert.ToInt32(strGetDataTime.Substring(12, 2));
//int nGetDataTimeFFF = Convert.ToInt32(strGetDataTime.Substring(14, 3));
//DateTime start = new DateTime(nGetDataTimeYYYY, nGetDataTimemm, nGetDataTimeDD, nGetDataTimeHH, nGetDataTimeMM, nGetDataTimeSS, nGetDataTimeFFF);//Convert.ToDateTime(testReqID?.First().Split('@')[0]);
if (TestSummarySelectView == eSelectDataView.DataDocumentViewC1)
{
ShortTermDBConn = GetDBController.GetShortTermConn1();
LongTermDBConn = GetDBController.GetLongTermConn1().Where(x => x.Key.Contains(start.Year.ToString())).First().Value;
}
else if (TestSummarySelectView == eSelectDataView.DataDocumentViewC2)
{
ShortTermDBConn = GetDBController.GetShortTermConn2();
LongTermDBConn = GetDBController.GetLongTermConn2().Where(x => x.Key.Contains(start.Year.ToString())).First().Value;
}
DataTable dtResult = new DataTable();
string strQuery = string.Empty;
strQuery += $"SELECT * ";
strQuery += $"FROM {DMCommon.SummaryLogTable} AS X ";
strQuery += $"INNER JOIN {DMCommon.ResultLogTable} AS Y ON X.No = Y.No ";
strQuery += $"WHERE ";
for (int i = 0; i < vnpSummaryNo.Count; i++)
{
strQuery += $"X.[No]=N'{vnpSummaryNo[i]}' ";
if (i != vnpSummaryNo.Count - 1)
strQuery += "OR ";
}
//for(int i=0 ; i<testReqID.Length ; i++)
//{
// strQuery += $"TestListCntID=N'{testReqID[i]}' ";
// if (i != testReqID.Length - 1)
// strQuery += "OR ";
//}
strQuery += $";";
if (DatabaseConnControl.ScanLongTermLog) SQLCmd = new SqlCommand(strQuery, LongTermDBConn);
else SQLCmd = new SqlCommand(strQuery, ShortTermDBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReader = SQLCmd.ExecuteReader();
dtResult.Load(dtReader);
dtReader.Close();
List<CPXV2Log.Tables.HIST_TestResult> list = new List<CPXV2Log.Tables.HIST_TestResult>();
for (int i=0; i<dtResult.Rows.Count; i++)
{
list.AddRange(JsonConvert.DeserializeObject<List<CPXV2Log.Tables.HIST_TestResult>>(dtResult.Rows[i]["LogData"].ToString().GzipDecompress()));
}
/*
strQuery += $"SELECT ";
strQuery += $"Y.[StepID], ";
strQuery += $"AVG(CASE WHEN (Y.[MeasValStr] = NULL OR Y.[MeasValStr] = '') AND (Y.[Message] = NULL OR Y.[Message] = '') AND (Y.[MeasVal] != 0.00000 AND Y.[Result] != 'NONE') THEN Y.[MeasVal] ELSE NULL END) AS Average, ";
strQuery += $"COUNT(Y.[Result]) AS Total, ";
strQuery += $"COUNT(CASE WHEN Y.[Result] = 'OK' THEN 1 END) AS OK, ";
strQuery += $"COUNT(CASE WHEN Y.[Result] = 'NG' OR X.[Result] = 'ERROR' THEN 1 END) AS NG ";
strQuery += $" ";
strQuery += $"FROM [{DMCommon.SummaryLogTable}] AS X WITH(NOLOCK) ";
strQuery += $"INNER JOIN [{strTableTerm}] AS Y WITH(NOLOCK) ON (Y.AccessKey BETWEEN X.AccessStart AND X.AccessEnd) ";
*/
dtResult = list.GroupBy(x => x.StepID).Select(y => new
{
StepID = y.First().StepID,
Average = GetAvg(y.ToList()),
Total = y.Count(),
OK = y.Count(z => !z.Result.Contains("NG") && !z.Result.Contains("ERROR")),
NG = y.Count() - y.Count(z => !z.Result.Contains("NG") && !z.Result.Contains("ERROR"))
}).OrderBy(y => y.StepID).ToDataTable();
return dtResult;
}
string GetAvg(List<CPXV2Log.Tables.HIST_TestResult> res)
{
CPXV2Log.Tables.HIST_TestResult value = res.First();
if (string.IsNullOrEmpty(value.MeasValStr) &&
string.IsNullOrEmpty(value.Message) &&
((value.MeasVal != 0) &&
string.Compare(value.Result, "NONE") != 0))
return res.Average(x => x.MeasVal).ToString();
string strDefaultValue = string.Empty;
if (string.IsNullOrEmpty(value.MeasValStr) == false)
strDefaultValue = value.MeasValStr;
else if (string.IsNullOrEmpty(value.Message) == false)
strDefaultValue = value.Message;
return strDefaultValue;
}
DataTable GetRawResult(DetailTestDataCollection data)
{
DataTable dtResult = new DataTable();
string strQuery = string.Empty;
if (data == null)
return dtResult;
SQLCmd = new SqlCommand(strQuery, ShortTermDBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReader = SQLCmd.ExecuteReader();
dtResult.Load(dtReader);
dtReader.Close();
return dtResult;
}
}
}