[성현모] CPXV2 Init

This commit is contained in:
SHM
2024-06-26 10:30:00 +09:00
parent cdf12248c5
commit 5958993b6a
588 changed files with 698420 additions and 0 deletions

View File

@ -0,0 +1,458 @@
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;
namespace SystemX.Product.TRA.DataManager
{
public class DMTestSummary
{
public enum eColHideListLog
{
No,
AccessKey,
//TestID
}
public enum eColTestLog
{
No,
AccessKey,
//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;
public int nCurrentTLMaxStepVersion { get; set; }
//public DataTable this[int i] => dtEachVersionTL[i];
public DMTestSummary(eSelectDataView SelectView, IDataBaseController getDBController)
{
DBConn = getDBController.GetMainConn();
if (SelectView == eSelectDataView.DataDocumentViewC1)
{
ShortTermDBConn = getDBController.GetShortTermConn1();
LongTermDBConn = getDBController.GetLongTermConn1();
}
else if (SelectView == eSelectDataView.DataDocumentViewC2)
{
ShortTermDBConn = getDBController.GetShortTermConn2();
LongTermDBConn = getDBController.GetLongTermConn2();
}
}
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(DateTime dtTestTime, List<Tuple<ulong, ulong>> vnpAccKeys, List<Int64> vnpSummaryNo)
{
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 - dtTestTime.Year) + (dtNow.Month - dtTestTime.Month);
string strTableTerm = nDiffMonth > 3 ? strLongTerm : strShortTerm;
bool bLongTermTableUse = nDiffMonth > 3 ? true : false;
if (vnpAccKeys == null || vnpAccKeys.Count <= 0)
return dtResult;
/*
strQuery += $"SELECT ";
strQuery += $"StepID, ";
strQuery += $"AVG(CASE WHEN (X.[MeasValStr] = null OR X.[MeasValStr] = '') AND (X.[Message] = null OR X.[Message] = '') AND (X.[MeasVal] != 0.00000 AND X.[Result] != 'NONE') THEN X.[MeasVal] ELSE null END) AS Average, ";
strQuery += $"COUNT(X.[Result]) AS Total, ";
strQuery += $"COUNT(CASE WHEN X.[Result] = 'OK' THEN 1 END) AS OK, ";
strQuery += $"COUNT(CASE WHEN X.[Result] = 'NG' OR X.[Result] = 'ERROR' THEN 1 END) AS NG ";
strQuery += " ";
strQuery += $"FROM [{strTableTerm}] AS X ";
strQuery += $"WITH(NOLOCK) INNER JOIN [{DMCommon.SummaryLogTable}] AS Y ON ";
int nIdx = 0;
strQuery += $"(";
foreach (Int64 npKey in vnpSummaryNo)
{
strQuery += $"Y.[NO] = {npKey} ";
if (vnpAccKeys.Count - 1 > nIdx)
strQuery += " OR ";
nIdx++;
}
strQuery += $") ";
strQuery += $"WHERE ";
nIdx = 0;
foreach(Tuple<ulong, ulong> npKey in vnpAccKeys)
{
strQuery += $"(X.[AccessKey] <= {npKey.Item2} AND X.[AccessKey] >= {npKey.Item1})";
if (vnpAccKeys.Count - 1 > nIdx)
strQuery += " OR ";
nIdx++;
}
strQuery += " ";
strQuery += $"GROUP BY ";
strQuery += $"X.[StepID]";
strQuery += " ";
strQuery += $"ORDER BY ";
strQuery += $"X.[StepID]";
strQuery += ";";
*/
/*
SELECT
Y.StepID,
CASE X.StepVersion WHEN 0 THEN 'O' ELSE 'X' END AS SV0,
CASE X.StepVersion WHEN 1 THEN 'O' ELSE 'X' END AS SV1,
CASE X.StepVersion WHEN 2 THEN 'O' ELSE 'X' END AS SV2,
CASE X.StepVersion WHEN 3 THEN 'O' ELSE 'X' END AS SV3,
CASE X.StepVersion WHEN 4 THEN 'O' ELSE 'X' END AS SV4,
CASE X.StepVersion WHEN 5 THEN 'O' ELSE 'X' END AS SV5,
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,
COUNT(Y.[Result]) AS Total, COUNT(CASE WHEN Y.[Result] = 'OK' THEN 1 END) AS OK,
COUNT(CASE WHEN Y.[Result] = 'NG' OR Y.[Result] = 'ERROR' THEN 1 END) AS NG
FROM [{DMCommon.SummaryLogTable}] AS X WITH(NOLOCK)
INNER JOIN [HIST_TestResultLongTerm] AS Y WITH(NOLOCK) ON (Y.AccessKey <= X.AccessEnd AND Y.AccessKey >= X.AccessStart)
WHERE (X.[No] = 120202 OR X.[NO] = 120204 OR X.[NO] = 120206 OR X.[NO] = 120208 OR X.[NO] = 120211 OR X.[NO] = 120212 OR X.[NO] = 120214 OR X.[NO] = 120216 OR X.[NO] = 120218 OR X.[NO] = 120220 OR X.[NO] = 120222)
GROUP BY Y.[StepID], X.[StepVersion] ORDER BY Y.[StepID];
*/
strQuery += $"SELECT ";
strQuery += $"Y.[StepID], ";
//for (int i = 0; i <= nCurrentTLMaxStepVersion; i++)
// strQuery += $"CASE X.StepVersion WHEN " + i.ToString() + " THEN 'O' ELSE 'X' END AS SV" + i.ToString() + ", ";
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) ";
int nIdx = 0;
/*
strQuery += $"WHERE (";
foreach (Int64 npKey in vnpSummaryNo)
{
strQuery += $"X.[No] = {npKey} ";
if (vnpAccKeys.Count - 1 > nIdx)
strQuery += " OR ";
nIdx++;
}
strQuery += $") ";
*/
strQuery += $"WHERE X.[No] IN (";
foreach (Int64 npKey in vnpSummaryNo)
{
strQuery += $"{npKey}";
if (vnpSummaryNo.Count - 1 > nIdx)
strQuery += ", ";
nIdx++;
}
strQuery += $") ";
strQuery += $"GROUP BY Y.[StepID], X.[StepVersion] ORDER BY Y.[StepID];";
if (bLongTermTableUse) 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, ShortTermDBConn);
SQLCmd.CommandTimeout = DMCommon.nDefaultScanTime;
DbDataReader dtReader = SQLCmd.ExecuteReader();
dtResult.Load(dtReader);
dtReader.Close();
return dtResult;
}
}
}