From ea59e5356f149db6e6e2e3f063aa5ee10a44b68e Mon Sep 17 00:00:00 2001
From: KEJ <kimeungju@diteam.co.kr>
Date: 금, 24 11월 2023 17:39:42 +0900
Subject: [PATCH] Ongoing80 #4669 CF AOI Review Glass Grade PT판정 처리 추가  1. Glass, Cell PT 판정 추가.  2. GlassRawMessenger 데이터 추가  3. GlassRawMessenger 동기화

---
 DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp |  920 ++++++++++++++++++++++++++++++--------------------------
 1 files changed, 492 insertions(+), 428 deletions(-)

diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp
index 4b6b6bb..64660aa 100644
--- a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp
+++ b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp
@@ -30,6 +30,14 @@
 #define NETWORK_MURARAW_PATH		"\\\\126.100.100.1\\d\\DIT_ResultData\\Mura\\RAW" //0405nwh
 #define NETWORK_MURA_IMAGE_PATH		"\\\\126.100.100.1\\d\\DIT_ResultData\\Mura\\IMG" //0405nwh
 
+//KYH Stack Local 寃쎈줈 異붽�
+#define NETWORK_AOISTACKLOCAL_PATH  "\\\\126.100.100.1\\d\\DIT_ResultData\\Stack"
+	/* <LJC 20211122 : #3820 ADD Start> */
+#define NETWORK_AOIRAWMERGELOCAL_PATH  "D:\\DIT_ResultData\\RawMerge"
+	/* <LJC 20211122 : #3820 ADD End> */
+/* <KMH 20220407 : #4053 ADD Start> */
+#define  LOCAL_LOGDATA_PATH				"D:\\DIT_LogData"
+/* <KMH 20220407 : #4053 ADD End> */
 char* g_pCellCode = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
 
 void _TimeDelay(int delay)
@@ -37,9 +45,9 @@
 	MSG		msg;
 	BOOL	fRst = FALSE;
 
-	clock_t lBlockTime = delay + clock();
+	ULONGLONG lBlockTime = delay + GetTickCount64();
 
-	while (lBlockTime > clock())
+	while (lBlockTime > GetTickCount64())
 	{
 		fRst = (BOOL)PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
 		if (fRst)
@@ -50,6 +58,30 @@
 		Sleep(10);
 	}
 }
+/* < KJG 20221110 - #4373 ADD Start >*/
+auto CellIDSortFunc = [](const _grmCellData* lhs, const _grmCellData* rhs) {
+	// '0A' = 0, '0B' = 1, ..., '0Z' = 25, '00' = 26, ..., '09' = 35, '1A' = 36, ...
+	const int nAlphaSet = 'Z' - 'A' + 1;
+	const int nNumSet = '9' - '0' + 1;
+	const int nAlphaNumSet = nAlphaSet + nNumSet;
+
+	CString str = lhs->m_strCellName;
+	char lhs_1st = str.Mid(str.GetLength() - 2, 1).GetAt(0);
+	char lhs_2st = str.Mid(str.GetLength() - 1, 1).GetAt(0);
+
+	str = rhs->m_strCellName;
+	char rhs_1st = str.Mid(str.GetLength() - 2, 1).GetAt(0);
+	char rhs_2st = str.Mid(str.GetLength() - 1, 1).GetAt(0);
+
+	auto GetCellValueFrom2stCellID = [&](char c) -> int {
+		if (c >= 'A' && c < 'Z') // 'A' �뒗 0遺��꽣
+			return c - 'A';
+		else if (c >= '0' && c <= '9') // '0' �� 26 遺��꽣
+			return (c - '0') + nAlphaSet;
+	};
+	return (lhs_1st - '0') * nAlphaNumSet + GetCellValueFrom2stCellID(lhs_2st) < (rhs_1st - '0') * nAlphaNumSet + GetCellValueFrom2stCellID(rhs_2st);
+};
+/* < KJG 20221110 - #4373 ADD End >*/
 
 CGlassRawCPJT::CGlassRawCPJT(void)
 {
@@ -57,6 +89,20 @@
 	CreateDirectory(LOCAL_AOIRAWDFS_PATH, NULL);
 	CreateDirectory(LOCAL_AOIRAWBIN_PATH, NULL);
 	CreateDirectory("D:\\Raw_im", NULL);
+
+	/* <KMH 20220407 : #4053 ADD Start> */
+	CFileFind FileFinder;
+	SYSTEMTIME st;
+	GetLocalTime(&st);
+	char strLogFolderPath [256];
+	sprintf(strLogFolderPath, "%s\\%02d%02d%02d", LOCAL_LOGDATA_PATH,st.wYear, st.wMonth, st.wDay);
+
+	BOOL bFind = FileFinder.FindFile(strLogFolderPath);
+	if (!bFind)
+	{
+		CreateDirectory(strLogFolderPath, NULL);
+	}
+	/* <KMH 20220407 : #4053 ADD End> */
 	m_MuraResultFile.readOptionFile("C:\\DIT_Review\\ReviewServerConfig\\MacroInfo.cfg");
 
 	m_GlassRawRTMS.SetMuraResult(&m_MuraResultFile);
@@ -70,21 +116,87 @@
 
 BOOL CGlassRawCPJT::SequenceGlassLoading( CgrmGlassRawData* pData )
 {
-	//�뒪�깮湲곕뒫
+
+	AKLOG("Sequence :  Glass Loading Signal Start ");/* <KMH 20220407 : #4053 ADD > */
+ 	SetEnableFtpAck(FALSE);
+ 	m_nRawMergeIdx = 0;
 	if(m_StackResult.getStackUse())
 	{
+		
+		CString strStackFileLocalPath;
+		strStackFileLocalPath.Format("%s\\%s", NETWORK_AOISTACKLOCAL_PATH, pData->GetGlassData()->m_strGlassID);
+
+		CFileFind File;
+
+		if (File.FindFile(strStackFileLocalPath))
+		{
+			File.FindNextFile();
+			strStackFileLocalPath = File.GetFilePath();
+			/* <KMH 20220407 : #4053 MOD Start> */
+			if (DeleteFile(strStackFileLocalPath))
+				/*< SWK 20220413 - #4053 MOD Start >*/
+// 			{
+// 				AKLOG(" Fucntion : Delete Stack File Sucess[%s] ", strStackFileLocalPath);
+// 			}
+// 			/* <KMH 20220407 : #4053 MOD End> */
+// 			Sleep(10);
+//		}
+// 		else
+// 		{
+// 			AKLOG(" Function : Delete Stack File Fail [%s]", strStackFileLocalPath);/* <KMH 20220407 : #4053 MOD > */
+// 		}
+				AKLOG(" Function : Delete Stack File Sucess[%s] ", strStackFileLocalPath);
+			else
+				AKLOG(" Function : Delete Stack File Fail [%s]", strStackFileLocalPath);
+		}
+				/*< SWK 20220413 - #4053 MOD End >*/
+
 		//201218 CJH - Stack Download �떆�룄
 		SendMessageFTPDownloadStack(pData->GetGlassData());
-
 		m_StackResult.StackFileReadStart(pData->GetGlassData()->m_strGlassID);
 	}
-	
+	/* <LJC 20211122 : #3820 ADD Start> */
+	if (pData->GetGlassData()->m_bRawMergeUse)
+	{
+		CString strRawFileLocalPath;
+		strRawFileLocalPath.Format("%s\\%s", NETWORK_AOIRAWMERGELOCAL_PATH, pData->GetGlassData()->m_strGlassID);
+		CFileFind File;
+		if (File.FindFile(strRawFileLocalPath))
+		{
+			File.FindNextFile();
+			strRawFileLocalPath = File.GetFilePath();
+			/* <KMH 20220407 : #4053 MOD Start> */
+			if (DeleteFile(strRawFileLocalPath))
+				/*< SWK 20220413 - #4053 MOD Start >*/
+// 			{
+// 				AKLOG(" Fucntion : Delete RawMerge File Sucess[%s] ", strRawFileLocalPath);
+// 			}
+// 			/* <KMH 20220407 : #4053 MOD End> */
+// 			Sleep(10);
+// 		}
+// 		else
+// 		{
+// 			AKLOG(" Function : Delete RawMerge File Fail [%s]", strRawFileLocalPath); /* <KMH 20220407 : #4053 ADD > */
+// 		}
+				AKLOG(" Function : Delete RawMerge File Sucess[%s] ", strRawFileLocalPath);
+			else
+				AKLOG(" Function : Delete RawMerge File Fail [%s]", strRawFileLocalPath);
+		}
+				/*< SWK 20220413 - #4053 MOD End >*/
+		SetEnableFtpAck(TRUE);
+		DownLoadMergeFile(pData);
+	}
+	/* <LJC 20211122 : #3820 ADD End> */
+	/*< KJG 20211024 - #3487 ADD End >*/
 
+	AKLOG("Sequence :  Glass Loading Signal End ");
 	return TRUE;
 }
 
 BOOL CGlassRawCPJT::SequenceInspectEnd( CgrmGlassRawData* pData )
 {
+	AKLOG(" Sequence : InspectionEnd Signal Start"); /* <KMH 20220407 : #4053 ADD > */
+
 	m_bReviewEndCheck = FALSE;
 	//210128
 	m_tmReviewEnd = m_tmReviewStart = CTime::GetCurrentTime();
@@ -111,7 +223,7 @@
 		return FALSE;
 	
 	
-	if (1) ReadMuraFile(pData);
+	//if(1) ReadMuraFile(pData); 211012 KJG - QD Macro 媛쒕퀎 �뾽濡쒕뱶 �븯誘�濡� Macro �뜲�씠�꽣 �쟻�젣 �젣嫄� �슂泥�
 
 	
 	if (WriteAOIFile(pData) == FALSE)
@@ -121,9 +233,68 @@
 	_TimeDelay(5000); // �씠誘몄� 蹂듭궗 �떆媛� ��湲�
 	//210218 CJH - 寃��궗 醫낅즺�떆 寃곌낵�뙆�씪 諛� CCD Image �뾽濡쒕뱶
 	SendMessageFTPUploadRaw(pData->GetGlassData());
-	SendMessageFTPUploadImage(pData->GetGlassData(), FTPCMD_AOI_IMAGE);
-	SendMessageFTPUploadImage(pData->GetGlassData(), FTPCMD_MURA_IMAGE);//0405nwh
 
+	/* <KYH 211129 : #3806 ADD Start> */
+	char pServerPath[256] = {};
+	char pServerFile[256] = {};
+
+	CString strGlassID = pData->GetGlassData()->m_strGlassID;
+	CString strGlassIDLevel6th = strGlassID.Left(6);
+	CString strStepID = pData->GetGlassData()->m_strStepID;
+	CString strProcessID = pData->GetGlassData()->m_strProcessID;
+	CString strFileName;
+
+	strcpy(pServerFile, "*.*");
+
+	strFileName.Format("%s", strGlassID);
+	strFileName.MakeLower();
+
+	sprintf(pServerFile, "%s", strFileName.GetBuffer(0));
+
+	strStepID.MakeLower();
+	strGlassID.MakeLower();
+	strGlassIDLevel6th.MakeLower();
+	strProcessID.MakeLower();
+
+//	if (strGlassID.GetLength() > 6)
+//		sprintf(pServerPath, "\\%s\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th, strGlassID);
+//	else
+		sprintf(pServerPath, "\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th);
+	/* <KYH 211129 : #3806 ADD End> */
+
+
+	BOOL bIsBDI = strcmp((pData->GetGlassData()->m_strLine), _T("BDI")) == 0 ? TRUE : FALSE;
+	if (bIsBDI)
+	{
+		SendMessageFTPUploadImage(pData->GetGlassData(), FTPCMD_AOI_IMAGE);
+
+		/* <KYH 211129 : #3806 ADD Start> */
+		CString strRawFilePathName = NULL;
+		CString strLine = NULL;
+		strRawFilePathName += LOCAL_RAWPATH_INFO_INI_PATH;
+		strRawFilePathName += RAWINFO_FILE_NAME;
+		FILE* pf = fopen(strRawFilePathName.GetBuffer(0), "w");
+		if (pf != NULL)
+		{
+			strLine = pServerPath + strFileName;
+			fprintf(pf, "[RESULT_PATH]\n");
+			fprintf(pf, "RAWPATH= X:\%s\n", strLine.GetBuffer(0));
+			SetRawFilePath(strLine.GetBuffer(0));
+			fprintf(pf, "SUMPATH= \n");
+			fprintf(pf, "IMGPATH= Z:\%s\n", strLine.GetBuffer(0));
+			fprintf(pf, "DISK=FILESERVER\n");
+			fclose(pf);
+		}
+	}
+	else
+	{
+		SendMessageFTPUploadImage(pData->GetGlassData(), FTPCMD_MURA_IMAGE);/* <KMH 20220407 : #4053 ADD > */
+	}
+		
+    /* <KYH 211129 : #3806 ADD End> */
+
+
+	AKLOG(" Sequence : InspectionEnd Signal End"); /* <KMH 20220407 : #4053 ADD > */
 	return TRUE;
 }
 
@@ -224,7 +395,7 @@
 	pData->GetGlassData()->m_strFileName;
 	strcpy(pData->GetGlassData()->m_strPath, NETWORK_AOIRAWDFS_PATH);
 
-	if(1) ReadMuraFile(pData);
+	//if(1) ReadMuraFile(pData); 211012 KJG - QD Macro 媛쒕퀎 �뾽濡쒕뱶 �븯誘�濡� Macro �뜲�씠�꽣 �쟻�젣 �젣嫄� �슂泥�
 
   	if(WriteAOIFile(pData) == FALSE)
   		return FALSE;
@@ -252,6 +423,7 @@
 
 BOOL CGlassRawCPJT::SequenceFtpUpload(char* pRawFilePathName)
 {
+	AKLOG(" Sequence : FTP Upload Signal Start ");
 	// Manual Upload 湲곕뒫 [21-02-05 KJG]
 	CTime tmFileCreate;
 	_grmGlassData GlassData;
@@ -324,7 +496,7 @@
 	
 	fclose(pf);
 
-
+	AKLOG(" Sequence : FTP Upload Signal End ");
 	return TRUE;
 }
 
@@ -360,7 +532,7 @@
 	}
 	
 	strFilePathName.Format("%s\\%s", pGlass->m_strPath, strFileName);//pGlass->m_strFileName);
-	//strFilePathName.Format("C:\\AOIServer\\NFS\\RAW\\%s", pData->GetGlassData()->m_strFileName);
+	//strFilePathName.Format("D:\\AOIServer\\NFS\\RAW\\%s", pData->GetGlassData()->m_strFileName);
 	
 	// 湲��씪�뒪 ID留� 議댁옱�븯�뿬 �옱寃��궗 �떆 �뙆�씪 �깮�꽦 �떎�뙣. �궘�젣�븳�떎
 	DeleteFile(strFilePathName);
@@ -388,26 +560,41 @@
 	//////////////////////////////////////////////////////////////////////////
 	//GLASSDATA
 	{
-		makeDataGlass(strLine, pGlass);
+		/*< KJG 20211229 - #3846 MOD Start >*/
+		//makeDataGlass(strLine, pGlass);
+		makeDataGlass(strLine, pData, pGlass);
+		/*< KJG 20211229 - #3846 MOD End >*/
 		fprintf(pf, "%s\n", strLine.GetBuffer(0));
 	}
 	
 	//////////////////////////////////////////////////////////////////////////
 	//CELL & DEFECT DATA
+	/* < KJG 20221110 - #4373 ADD Start >*/ 
+	vector<_grmCellData*> vtSortCellData;
+	for (int iCell = 0; iCell < pData->GetGlassData()->m_nCellNum; iCell++)
+		vtSortCellData.push_back(pData->GetCellData(iCell));
+
+	sort(vtSortCellData.begin(), vtSortCellData.end(), CellIDSortFunc);
+	/* < KJG 20221110 - #4373 ADD End >*/
 	{
-		
 		//make
 		{
 			for (int iCell = 0; iCell < pData->GetGlassData()->m_nCellNum; iCell++)
 			{
-				_grmCellData* pCell = pData->GetCellData(iCell);
+				/* < KJG 20221110 - #4373 MOD Start >*/ 
+				//_grmCellData* pCell = pData->GetCellData(iCell);
+				_grmCellData* pCell = vtSortCellData[iCell];
+				/* < KJG 20221110 - #4373 MOD End >*/
 				makeDataCell(strLine, pData, pCell);
 				fprintf(pf, "%s\n", strLine);
 
 				for (int iDefect = 0; iDefect < pData->GetGlassData()->m_nDefectNum; iDefect++)
 				{
 					_grmDefectData* pDefect = pData->GetDefectData(iDefect);
-					if (pDefect->m_nCellIdx != iCell) continue;
+					/* < KJG 20221110 - #4373 MOD Start >*/ 
+					//if (pDefect->m_nCellIdx != iCell) continue;
+					if (pDefect->m_nCellIdx != pCell->m_nCellID) continue;
+					/* < KJG 20221110 - #4373 MOD End >*/
 					//210203 CJH - CutOff ���긽 寃곌낵�뙆�씪 �옉�꽦 �젣�쇅
 					if (pDefect->m_bDefectCutoff == TRUE) continue;
 
@@ -434,21 +621,46 @@
 {
 	strLine.Empty();
 	CString strValue;
-	
-	strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR TB TW RB RW T_STACK MAX_AVG_GRAY MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT BR_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT"; //53ea
+	/*< KJG 20211229 - #3846 MOD Start >*/
+	//strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR NG TB TW RB RW T_STACK NO_DEFECT MAX_AVG_GRAY MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT CRACK_DEFECT";
+/* < KMH 20220613 : #3957 MOD Start > */
+	/* <LJC 20220425 : #3957 MOD Start> */
+	// strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR NG TB TW RB RW T_STACK NO_DEFECT MAX_NG MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT CRACK_DEFECT CODE_COUNT1 CODE_COUNT2 CODE_COUNT3 CODE_COUNT4 CODE_COUNT5 CODE_COUNT6 CODE_COUNT7 CODE_COUNT8 CODE_COUNT9 CODE_COUNT10"; //56ea
+	strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR NG TB TW RB RW T_STACK NO_DEFECT MAX_NG MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT CRACK_DEFECT"; //56ea
+	for (int i = 0; i < RAW_CODE_MAX; i++)
+	{
+		CString strDefectCode = pGlassData->m_strRawDefectCode[i];
+		if (strDefectCode == "") { strDefectCode = "*"; }
+		strValue += " " + strDefectCode;
+	}
+	/* <LJC 20220425 : #3957 MOD End> */
+/* < KMH 20220613 : #3957 MOD End > */
+	/*< KJG 20211229 - #3846 MOD End >*/
 	strLine += strValue; strLine += "\n";
-	strValue = "ITEM SUBPANEL SUBPANELID COORD_X COORD_Y SIZE_X SIZE_Y GATELINE DATALINE GRADE CODE R_GRADE T_DEFECT TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT PRO_IMAGE AVG_GRAY_0 PORTION_0 CORNER_GRAY_0 AVG_AMP_0 FFT_VAR_0 FFT_VAH_0 FFT_VAQ_0 FFT_PK_0 AVG_GRAY_1 PORTION_1 CORNER_GRAY_1 AVG_AMP_1 FFT_VAR_1 FFT_VAH_1 FFT_VAQ_1 FFT_PK_1 AVG_GRAY_2 PORTION_2 CORNER_GRAY_2 AVG_AMP_2 FFT_VAR_2 FFT_VAH_2 FFT_VAQ_2 FFT_PK_2 AVG_GRAY_3 PORTION_3 CORNER_GRAY_3 AVG_AMP_3 FFT_VAR_3 FFT_VAH_3 FFT_VAQ_3 FFT_PK_3"; //54ea 21-06-21 Mura Data 異붽�
+/* < KMH 20220614 : #3957 MOD Start > */
+	/* <LJC 20220425 : #3957 MOD Start> */
+	//strValue = "ITEM SUBPANEL SUBPANELID COORD_X COORD_Y SIZE_X SIZE_Y GATELINE DATALINE GRADE CODE R_GRADE T_DEFECT TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT TR PR NG RB RW TB TW T_STACK NO_DEFECT CODE_COUNT1 CODE_COUNT2 CODE_COUNT3 CODE_COUNT4 CODE_COUNT5 CODE_COUNT6 CODE_COUNT7 CODE_COUNT8 CODE_COUNT9 CODE_COUNT10"; //31ea /* <KYH 211129 : #3796 MOD Start> */
+	strValue = "ITEM SUBPANEL SUBPANELID COORD_X COORD_Y SIZE_X SIZE_Y GATELINE DATALINE GRADE CODE R_GRADE T_DEFECT TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT TR PR NG RB RW TB TW T_STACK NO_DEFECT"; //56ea
+	for (int i = 0; i < RAW_CODE_MAX; i++)
+	{
+		CString strDefectCode = pGlassData->m_strRawDefectCode[i];
+		if (strDefectCode == "") { strDefectCode = "*"; }
+		strValue += " " + strDefectCode;
+	}
+	/* <LJC 20220425 : #3957 MOD End> */
+/* < KMH 20220614 : #3957 MOD End > */
 	strLine += strValue; strLine += "\n";
-	//210405
-	//ITEM DEFECT ID DEF_NO COORD_X COORD_Y GATELINE DATALINE SIZE_S SIZE_W SIZE_L SIZE_H GRADE CODE STACK_FLAG STACK_COUNT STACK_STEP IMAGE_FILE DSC_CODE VC_CODE DCR_CODE DEFECT_SIZE REPEAT_DEFECT WSI_HEIGHT CS_HEIGHT C_GRADE GRAY_MIN GRAY_MAX GRAY_AVG GRAY_DEF WSI_IMAGE USE_CCDIMAGE SCAN_NUM CAM_POSITION CCD_NO R_GRAY_MIN R_GRAY_MAX R_GRAY_AVG SCAN_AI REVIEW_AI INS_MODE INS_CHANNEL COMPACTNESS THICKNESS MAJOR MINOR WSI_TYPE DEFECT_TYPE SHRINK
-	strValue = "ITEM DEFECT ID DEF_NO COORD_X COORD_Y GATELINE DATALINE SIZE_S SIZE_W SIZE_L SIZE_H GRADE CODE STACK_FLAG STACK_COUNT STACK_STEP IMAGE_FILE DSC_CODE VC_CODE DCR_CODE DEFECT_SIZE REPEAT_DEFECT WSI_HEIGHT CS_HEIGHT C_GRADE GRAY_MIN GRAY_MAX GRAY_AVG GRAY_DEF WSI_IMAGE USE_CCDIMAGE SCAN_NUM CAM_POSITION CCD_NO R_GRAY_MIN R_GRAY_MAX R_GRAY_AVG R_HEIGHT G_HEIGHT B_HEIGHT INS_CHANNEL COMPACTNESS THICKNESS MAJOR MINOR WSI_TYPE DEFECT_TYPE SHRINK CLASS_CODE"; //50ea    
+	strValue = "ITEM DEFECT ID DEF_NO COORD_X COORD_Y GATELINE DATALINE SIZE_S SIZE_W SIZE_L SIZE_H GRADE CODE STACK_FLAG STACK_COUNT STACK_STEP IMAGE_FILE LINE_CODE VC_CODE DCR_CODE DEFECT_SIZE REPEAT_DEFECT WSI_HEIGHT CS_HEIGHT C_GRADE GRAY_MIN GRAY_MAX GRAY_AVG GRAY_DEF WSI_IMAGE USE_CCDIMAGE SCAN_NUM CAM_POSITION CCD_NO R_GRAY_MIN R_GRAY_MAX R_GRAY_AVG R_HEIGHT G_HEIGHT B_HEIGHT INS_CHANNEL COMPACTNESS THICKNESS MAJOR MINOR WSI_TYPE DEFECT_TYPE SHRINK CLASS_CODE"; //50ea    
 	strLine += strValue;
 
 }
 #define SPRINTRAWSTART char strItemValue[1024];int nItemValueLen, nItemValuePos = 0;memset(strItemValue, ' ', sizeof(char)*1024)
 #define SPRINTRAW(ITEMSIZE, fmt, ...) nItemValueLen = sprintf(strItemValue+nItemValuePos, fmt,##__VA_ARGS__); strItemValue[nItemValuePos+ nItemValueLen] = ' ';nItemValuePos+=ITEMSIZE+1
 #define SPRINTRAWEND strItemValue[nItemValuePos - 1] = 0; strLine = strItemValue
-void CGlassRawCPJT::makeDataGlass( CString& strLine, _grmGlassData* pGlassData )
+/*< KJG 20211229 - #3846 MOD Start >*/
+//void CGlassRawCPJT::makeDataGlass( CString& strLine, _grmGlassData* pGlassData )
+void CGlassRawCPJT::makeDataGlass( CString& strLine, CgrmGlassRawData* pData, _grmGlassData* pGlassData )
+/*< KJG 20211229 - #3846 MOD End >*/
 {
 	SPRINTRAWSTART;
 
@@ -503,7 +715,7 @@
 	46   12   PAD_DATA		// PAD Data 遺덈웾 �닔
 	47   12   M_DEFECT		// MASK 遺덈웾 �닔
 	48   12   C_DEFECT		// COMMON 遺덈웾
-	49   12   BR_DEFECT		// SCRATCH 遺덈웾 �닔
+	49   12   BR_DEFECT		// SCRATCH 遺덈웾 �닔 => LN_DEFECT // �씪�씤�꽦 遺덈웾 �닔
 	50   12   CRACK			// Crack 遺덈웾 �닔 - Image 珥ъ긽 媛��닔
 	51   12   P_SHIFT			// Pattern Shift 遺덈웾 �닔 - �젅�떆�뵾 �씠由�
 	*/
@@ -694,26 +906,39 @@
 	SPRINTRAW(12, "%d", pGlassData->m_nDefectNumJudgeTR);
 	// 26   6   PR		// Panel �젙蹂� 03	
 	SPRINTRAW(12, "%d", pGlassData->m_nDefectNumJudgePR);
-	// 27   6   TB		// Panel �젙蹂� 04	
+	// 27	6	NG		// Panel �젙蹂� 04
+	SPRINTRAW(12, "%d", pGlassData->m_nDefectNumJudgeNG); /* <KYH 211129 : #3796 ADD Start> */
+	// 28   6   TB		// Panel �젙蹂� 04	
 	SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeTB);
-	// 28   6   TW		// Panel �젙蹂� 05	
+	// 29   6   TW		// Panel �젙蹂� 05	
 	SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeTW);
-	// 29   6   RB		// Panel �젙蹂� 06	
+	// 30   6   RB		// Panel �젙蹂� 06	
 	SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeRB);
-	// 30   6   RW		// Panel �젙蹂� 07	
+	// 31   6   RW		// Panel �젙蹂� 07	
 	SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeRW);
-	// 31   6   T_STACK		// Panel �젙蹂� 08	SD+SP �닔 �엯�젰
+	// 32   6   T_STACK		// Panel �젙蹂� 08	SD+SP �닔 �엯�젰
 	SPRINTRAW(12, "%d", pGlassData->m_nDefectNumStackSD + pGlassData->m_nDefectNumStackSP);
-	//32   6   BMDF	    // Panel �젙蹂� 09 -> 蹂�寃� MAX_AVG_GRAY 04/12 nwh
-	if (strlen(pGlassData->m_strMaxAvgGray) == 0)
+	// 33   6   NO_DEFECT   // Panel �젙蹂� 09
+	SPRINTRAW(12, "%d", pGlassData->m_nDefectNumJudgeND); /* <KYH 211129 : #3796 ADD Start> */
+	//34   6   BMDF	    // Panel �젙蹂� 10 -> 蹂�寃� MAX_AVG_GRAY 04/12 nwh
+	/*< KJG 20211229 - #3846 MOD Start >*/
+	//if (strlen(pGlassData->m_strMaxAvgGray) == 0)
+	//{
+	//	SPRINTRAW(12, "*");
+	//}
+	//else
+	//{
+	//	SPRINTRAW(12, "%s", pGlassData->m_strMaxAvgGray);
+	//}	
+	int nMaxCellNG = 0;
+	for (int iCell = 0; iCell < pData->GetGlassData()->m_nCellNum; iCell++)
 	{
-		SPRINTRAW(12, "*");
+		_grmCellData* pCell = pData->GetCellData(iCell);
+		nMaxCellNG = max(nMaxCellNG, pCell->m_nDefectNumJudgeNG);
 	}
-	else
-	{
-		SPRINTRAW(12, "%s", pGlassData->m_strMaxAvgGray);
-	}	
-	// 33   6   CJ			// Panel �젙蹂� 10 -> 蹂�寃� MAX_PORTION  04/12 nwh
+	SPRINTRAW(12, "%d", nMaxCellNG);
+	/*< KJG 20211229 - #3846 MOD End >*/
+	// 35   6   CJ			// Panel �젙蹂� 11 -> 蹂�寃� MAX_PORTION  04/12 nwh
 	if (strlen(pGlassData->m_strMaxPortion) == 0)
 	{
 		SPRINTRAW(12, "*");
@@ -722,15 +947,15 @@
 	{
 		SPRINTRAW(12, "%s", pGlassData->m_strMaxPortion);
 	}
-	// 34   6   OK_CELL		// OK Cell Count	
+	// 36   6   OK_CELL		// OK Cell Count	
 	SPRINTRAW(12, "*");
-	// 35   6   RJ_CELL		// RJ Cell Count	
+	// 37   6   RJ_CELL		// RJ Cell Count	
 	SPRINTRAW(12, "*");
-	// 36   6   RW_CELL		// RW Cell Count	
+	// 38   6   RW_CELL		// RW Cell Count	
 	SPRINTRAW(12, "*");
-	// 37   6   NR_CELL		// NR Cell Count	
+	// 39   6   NR_CELL		// NR Cell Count	
 	SPRINTRAW(12, "*");
-	// 38   6   MASK_CELL		// MASK Cell Count	//201215 CJH - CSTID濡� 蹂�寃�
+	// 40   6   MASK_CELL		// MASK Cell Count	//201215 CJH - CSTID濡� 蹂�寃�
 	if (strlen(pGlassData->m_strCSTID) == 0)
 	{
 		SPRINTRAW(12, "*");
@@ -760,8 +985,12 @@
 	SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeMD);
 	// 48   6   C_DEFECT		// COMMON 遺덈웾	
 	SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeCD);
+	/*< LHS 20211029 - #3783 MOD Start >*/
 	// 49   6   S_DEFECT		// SCRATCH 遺덈웾 �닔	
-	SPRINTRAW(12, "*");
+	//SPRINTRAW(12, "*");
+	// 49   6   LN_DEFECT		// Line 遺덈웾 �닔	
+	SPRINTRAW(12, "%d", pGlassData->m_nDefectNumJudgeLine);
+	/*< LHS 20211029 - #3783 MOD End >*/
 	// 50   6   CRACK		// Crack 遺덈웾 �닔	//201217 CJH - Image 珥ъ긽 媛쒖닔濡� 蹂�寃�
 	//SPRINTRAW(12, "%d", pGlassData->m_nDefectNumLocCrack);
 	SPRINTRAW(12, "%d", pGlassData->m_nReviewNum);
@@ -800,6 +1029,27 @@
 		SPRINTRAW(12, "UNUSE");
 	}
 
+	if (pGlassData->m_bEdgeCrackUse)
+	{
+		SPRINTRAW(12, "%d", pGlassData->m_nDefectNumLocCrack);
+	}
+	else
+	{
+		SPRINTRAW(12, "UNUSE");
+	}
+	/* <LJC 20220425 : #3957 ADD Start> */
+	for (int i = 0; i < RAW_CODE_MAX; i++)
+	{
+		if (pGlassData->m_nDefectCode[i] >= 0)
+		{
+			SPRINTRAW(12, "%d", pGlassData->m_nDefectCode[i]);
+		}
+		else
+		{
+			SPRINTRAW(12, "*");
+		}
+	}
+	/* <LJC 20220425 : #3957 ADD End> */
 	SPRINTRAWEND;   //以묒슂!!! �젮 留덉�留됱뿉 瑗� �엳�뼱�빞�븿!!!(�궘�젣湲덉�) [源��깭�쁽2020/9/23]
 }
 
@@ -829,7 +1079,7 @@
 	19 12  PAD_DATA			// PAD Data Defect Count
 	20 12  M_DEFECT			// MASK Defect Count
 	21 12  C_DEFECT			// COMMON Defect Count
-	22 12  S_DEFECT			// SCRATCH Defect Count
+	22 12  S_DEFECT			// SCRATCH Defect Count	==> LN_DEFECT
 	23 12  CRACK				// CRACK Defect Count
 	24 12  P_SHIFT			// Pattern Shift Defect Count
 	*/
@@ -840,7 +1090,10 @@
 	SPRINTRAW(8, "SUBPANEL");
 	// 03 12 SUBPANELID			// Subpanel ID
 	//SPRINTRAW(12, "%d", pCellData->m_nCellID);
-	SPRINTRAW(12, "%s%c%c", pData->GetGlassData()->m_strGlassID, '0' + pCellData->m_nCellID / 36, g_pCellCode[pCellData->m_nCellID % 36]);
+	/* < KMH 20220609 : #4183 MOD Start > */
+	//SPRINTRAW(12, "%s%c%c", pData->GetGlassData()->m_strGlassID, '0' + pCellData->m_nCellID / 36, g_pCellCode[pCellData->m_nCellID % 36]);
+	SPRINTRAW(12, "%s%s", pData->GetGlassData()->m_strGlassID, pCellData->m_strCellName);
+	/* < KMH 20220609 : #4183 MOD End > */
 	
 	// 湲��씪�뒪 �썝�젏 湲곗� Y醫뚰몴 諛섎� 
 	// 肄붾꼫而� 湲곗��쑝濡� 寃곌낵�뙆�씪 醫뚰몴媛� �깮�꽦�릺�뒗�뜲 怨좉컼�궗�뿉 紐낇솗�븳 �솗�씤 �븘�슂
@@ -902,337 +1155,42 @@
 	// 21 6  C_DEFECT			// COMMON Defect Count
 	SPRINTRAW(12, "%d", pCellData->m_nDefectNumTypeCD);
 
-	// 22 6  S_DEFECT  -> 22 6  PRO_IMAGE 蹂�寃�	 nwh0404	
-	if (strlen(pCellData->m_strProImage))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strProImage);
-	}
-	else
-	{
-		SPRINTRAW(12,"*");
-	}
+	/* <KYH 211129 : #3796 MOD Start> */
 
-	// 23 12  AVG_GRAY_0
-	if (strlen(pCellData->m_strAvgGray_0))
+	// 22 6  PRO_IMAGE  -> LN_DEFECT 蹂�寃�
+	SPRINTRAW(12, "%d", pCellData->m_nDefectNumJudgeLine);
+	// 23 6  AVG_GRAY  -> TR 蹂�寃�
+	SPRINTRAW(12, "%d", pCellData->m_nDefectNumJudgeTR);
+	// 24 6  PORTION  -> PR 蹂�寃�
+	SPRINTRAW(12, "%d", pCellData->m_nDefectNumJudgePR);
+	// 25 6  CORNER_GRAY  -> NG 蹂�寃�
+	SPRINTRAW(12, "%d", pCellData->m_nDefectNumJudgeNG);
+	// 26 6  AVG_AMP  -> RB 蹂�寃�
+	SPRINTRAW(12, "%d", pCellData->m_nDefectNumTypeRB);
+	// 27 6  FFT_VAR  -> RW 蹂�寃�
+	SPRINTRAW(12, "%d", pCellData->m_nDefectNumTypeRW);
+	// 28 6  TB 異붽�
+	SPRINTRAW(12, "%d", pCellData->m_nDefectNumTypeTB); //KYH TB �뜲�씠�꽣 異붽�
+	// 29 6  TW 異붽�
+	SPRINTRAW(12, "%d", pCellData->m_nDefectNumTypeTW); //KYH TW �뜲�씠�꽣 異붽�
+	// 30 6  FFT_VEH  -> T_STACK 蹂�寃�
+	SPRINTRAW(12, "%d", pCellData->m_nDefectSDCount + pCellData->m_nDefectSPCount);
+	// 31 6  NO_DEFECT 異붽�
+	SPRINTRAW(12, "%d", pCellData->m_nDefectNumJudgeND); //KYH ND �뜲�씠�꽣 異붽�
+	/* <KYH 211129 : #3796 MOD End> */
+	/* <LJC 20220425 : #3957 ADD Start> */
+	for (int i = 0; i < RAW_CODE_MAX; i++)
 	{
-		SPRINTRAW(12, "%s", pCellData->m_strAvgGray_0);
+		if (pCellData->m_nDefectCode[i] >= 0)
+		{
+			SPRINTRAW(12, "%d", pCellData->m_nDefectCode[i]);
+		}
+		else
+		{
+			SPRINTRAW(12, "*");
+		}
 	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 24 12 PORTION_0
-	if (strlen(pCellData->m_strPortion_0))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strPortion_0);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-	
-	//kyh 0622
-	// 25 12 CORNER_GRAY_0
-	if (strlen(pCellData->m_strCorner_Gray_0))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_0);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 26 12 AVG_AMP_0
-	if (strlen(pCellData->m_strAvgAmp_0))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_0);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 27 12 FFT_VAR_0
-	if (strlen(pCellData->m_strFFTVar_0))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strFFTVar_0);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 28 12 FFT_VAH_0
-	if (strlen(pCellData->m_strFFTVah_0))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strFFTVah_0);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 29 12 FFT_VAQ_0
-	if (strlen(pCellData->m_strFFTVaq_0))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_0);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 30 12 FFT_PK_0
-	if (strlen(pCellData->m_strFFTPK_0))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strFFTPK_0);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 31 12  AVG_GRAY_1
-	if (strlen(pCellData->m_strAvgGray_1))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strAvgGray_1);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-	// 32 12 PORTION_1
-	if (strlen(pCellData->m_strPortion_1))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strPortion_1);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	//kyh 0622
-	// 33 12 CORNER_GRAY_1
-	if (strlen(pCellData->m_strCorner_Gray_1))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_1);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 34 12 AVG_AMP_1
-	if (strlen(pCellData->m_strAvgAmp_1))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_1);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 35 12 FFT_VAR_1
-	if (strlen(pCellData->m_strFFTVar_1))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strFFTVar_1);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 36 12 FFT_VAH_1
-	if (strlen(pCellData->m_strFFTVah_1))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strFFTVah_1);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 37 12 FFT_VAQ_1
-	if (strlen(pCellData->m_strFFTVaq_1))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_1);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 38 12 FFT_PK_1
-	if (strlen(pCellData->m_strFFTPK_1))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strFFTPK_1);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 39 12  AVG_GRAY_2
-	if (strlen(pCellData->m_strAvgGray_2))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strAvgGray_2);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-	// 40 12 PORTION_2
-	if (strlen(pCellData->m_strPortion_2))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strPortion_2);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	//kyh 0622
-	// 41 12 CORNER_GRAY_2
-	if (strlen(pCellData->m_strCorner_Gray_2))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_2);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 42 12 AVG_AMP_2
-	if (strlen(pCellData->m_strAvgAmp_2))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_2);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 43 12 FFT_VAR_2
-	if (strlen(pCellData->m_strFFTVar_2))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strFFTVar_2);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 44 12 FFT_VAH_2
-	if (strlen(pCellData->m_strFFTVah_2))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strFFTVah_2);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 45 12 FFT_VAQ_2
-	if (strlen(pCellData->m_strFFTVaq_2))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_2);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 46 12 FFT_PK_2
-	if (strlen(pCellData->m_strFFTPK_2))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strFFTPK_2);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 47 12  AVG_GRAY_3
-	if (strlen(pCellData->m_strAvgGray_3))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strAvgGray_3);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-	// 48 12 PORTION_3
-	if (strlen(pCellData->m_strPortion_3))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strPortion_3);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	//kyh 0622
-	// 49 12 CORNER_GRAY_3
-	if (strlen(pCellData->m_strCorner_Gray_3))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_3);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 50 12 AVG_AMP_3
-	if (strlen(pCellData->m_strAvgAmp_3))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_3);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 51 12 FFT_VAR_3
-	if (strlen(pCellData->m_strFFTVar_3))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strFFTVar_3);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 52 12 FFT_VAH_3
-	if (strlen(pCellData->m_strFFTVah_3))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strFFTVah_3);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 53 12 FFT_VAQ_3
-	if (strlen(pCellData->m_strFFTVaq_3))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_3);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
-	// 54 12 FFT_PK_3
-	if (strlen(pCellData->m_strFFTPK_3))
-	{
-		SPRINTRAW(12, "%s", pCellData->m_strFFTPK_3);
-	}
-	else
-	{
-		SPRINTRAW(12, "*");
-	}
-
+	/* <LJC 20220425 : #3957 ADD End> */
 	SPRINTRAWEND;   //以묒슂!!! �젮 留덉�留됱뿉 瑗� �엳�뼱�빞�븿!!!(�궘�젣湲덉�) [源��깭�쁽2020/9/23]
 }
 
@@ -1259,7 +1217,7 @@
 		// 16   2    STACK_COUNT	// Count of Defect detected step
 		// 17   60   STACK_STEP		// Flow(Step) of defect detection
 		// 18   16   IMAGE_FILE		// Image file Name
-		// 19   12   DSC Code
+		// 19   12   DSC Code		==> LINE_CODE
 		// 20   12   Image 遺꾨쪟 Code
 		// 21   12   遺덈웾�씠 �쐞移섑븳 Zone No �엯�젰
 		// 22   12   遺덈웾 �겕湲� (L,H,M,S)
@@ -1290,7 +1248,10 @@
 	// 02   6    DEFECT			// DEFECT
 	SPRINTRAW(6, "DEFECT");
 	// 03   12   ID				// Subpanel ID
-	SPRINTRAW(12, "%s%c%c", pData->GetGlassData()->m_strGlassID, '0' + pDefectData->m_nCellIdx / 36, g_pCellCode[pDefectData->m_nCellIdx % 36]);
+	/* < KMH 20220609 : #4183 MOD Start > */
+	//SPRINTRAW(12, "%s%c%c", pData->GetGlassData()->m_strGlassID, '0' + pDefectData->m_nCellIdx / 36, g_pCellCode[pDefectData->m_nCellIdx % 36]);
+	SPRINTRAW(12, "%s%s", pData->GetGlassData()->m_strGlassID, pDefectData->m_strCellName);
+	/* < KMH 20220609 : #4183 MOD End > */
 	// 04   5    DEF_NO			// Defect Number of Panel
 	// RAW �뙆�씪�슜 Defect Index 
 	//SPRINTRAW(5, "%d", pDefectData->m_nDefectIdx);
@@ -1382,10 +1343,13 @@
 	}
 	// 16   2    STACK_COUNT	// Count of Defect detected step
 	SPRINTRAW(2, "%2d", pDefectData->m_nStackStepCount);
-	// 17   60   STACK_STEP		// Flow(Step) of defect detection
+	// 17   60 -> 400   STACK_STEP		// Flow(Step) of defect detection
 	if (strlen(pDefectData->m_strStackFirst))
 	{
-		SPRINTRAW(60, "%s", pDefectData->m_strStackFirst);
+		/* < KMH 20220712 : #4230 MOD Start > */
+		//SPRINTRAW(60, "%s", pDefectData->m_strStackFirst);
+		SPRINTRAW(400, "%s", pDefectData->m_strStackFirst);
+		/* < KMH 20220712 : #4230 MOD End > */
 	}
 	else
 	{
@@ -1401,8 +1365,18 @@
 	{
 		SPRINTRAW(16, "*");
 	}
-	// 19   12    DSC_CODE		// Common 01 DSC Code
+	/*< LHS 20211029 - #3783 MOD Start >*/
+	// 19   12    DSC_CODE		// Common 01 DSC Code  ==> LINE_CODE
+	if (strlen(pDefectData->m_strLNDefectCode))
+	{
+		SPRINTRAW(12, "%s", pDefectData->m_strLNDefectCode);
+	}
+	else
+	{
 	SPRINTRAW(12, "*");
+	}
+	//SPRINTRAW(12, "*");
+	/*< LHS 20211029 - #3783 MOD End >*/
 	// 20   12    VC_CODE		// Common 02 Image 遺꾨쪟 Code
 	SPRINTRAW(12, "*");
 	// 21   12    ZONE_NO		// Common 03 遺덈웾�씠 �쐞移섑븳 Zone No �엯�젰
@@ -1520,13 +1494,13 @@
 		SPRINTRAW(12, "*");
 	}
 	// 32 NO USE -> CCD Image �쑀臾�
-	if (strlen(pDefectData->m_strAoiImageName))
+	if (strrchr(pDefectData->m_strAoiImageName, '*') != NULL || strlen(pDefectData->m_strAoiImageName) < 4) // KYH 210826 CCD �씠誘몄� 臾몄옄�뿴�뿉�꽌 *�씠 �엳�쓣寃쎌슦 X 癒몄��븷寃�
 	{
-		SPRINTRAW(12, "O");
+		SPRINTRAW(12, "X");
 	}
 	else
 	{
-		SPRINTRAW(12, "X");
+		SPRINTRAW(12, "O");
 	}
 	// 33   12    CAM_POSITION	// Common 15 Scan 踰덊샇
 	SPRINTRAW(12, "%d", pDefectData->m_nScanIdx);
@@ -1750,10 +1724,10 @@
 	cds.lpData = &upParam;
 
 	DWORD dwReturn = 0;
-	if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 30000, (PDWORD_PTR)(dwReturn)) == FALSE)
-	{
-	}
-
+	if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 5000, (PDWORD_PTR)(dwReturn)) == FALSE)
+		AKLOG(" FunCtion FTP :  RAW File Upload Signal Fail[%d]", FTPCMD_RAW);/* <KMH 20220407 : #4053 ADD > */
+	else
+		AKLOG(" FunCtion FTP :  RAW File Upload Signal Sucess[%d]", FTPCMD_RAW);/* <KMH 20220407 : #4053 ADD > */
 }
 
 void CGlassRawCPJT::SendMessageFTPDownloadStack( _grmGlassData* pGlassData )
@@ -1792,31 +1766,36 @@
 	cds.lpData = &upParam;
 
 	DWORD dwReturn = 0;
-	if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE)
-	{
-	}
+	if (SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 5000, (PDWORD_PTR)(dwReturn)) == FALSE)
+		/*< SWK 20220413 - #4053 MOD Start >*/
+// 	{
+// 		AKLOG(" Fucntion FTP :  Stack File Download Signal Fail[%d]", FTPCMD_STACK);/* <KMH 20220407 : #4053 ADD > */
+// 	}
+// 	else
+// 	{
+// 		AKLOG(" Fucntion FTP :  Stack File Download Signal Sucess[%d]", FTPCMD_STACK);/* <KMH 20220407 : #4053 ADD > */
+// 	}
+		AKLOG(" Function FTP :  Stack File Download Signal Fail[%d]", FTPCMD_STACK);
+	else 
+		AKLOG(" Function FTP :  Stack File Download Signal Success[%d]", FTPCMD_STACK);
+		/*< SWK 20220413 - #4053 MOD End >*/
 }
 
 void CGlassRawCPJT::SendMessageFTPDownloadDataFile( _grmGlassData* pGlassData )
 {
 	if(pGlassData == NULL) return;
-	HWND hWnd = ::FindWindow(NULL, "FTPDownloader");
+	HWND hWnd = ::FindWindow(NULL, "FTPUploader");
 	if(hWnd == NULL) return;
 
 	char strServerFolder[256] = {};
 	char strServerFile[256] = {};
 	char strLocalFolder[256] = {};
-	char pLocalFile[256] = {}; 
-
-	//GetFormatDescription(FTPCMD_DATAFILE, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData);
-	{
-		CString strGlassIDOrg = pGlassData->m_strGlassID; 
-		CString strGlassID = strGlassIDOrg.Left(12);
-		sprintf(strServerFolder, "%s", pGlassData->m_strCassetteSequenceNo);
-		sprintf(strServerFile, "%s.dat", strGlassID.GetBuffer(0));  
-		sprintf(strLocalFolder,  "D:\\DIT_ResultData\\DownloadData"); 
-		sprintf(pLocalFile,  "%s.dat", strGlassID.GetBuffer(0)); 
-	}
+	char pLocalFile[256] = {};
+	char strRTMSFile[32] = {};
+	char strServerRawFileSubPath[256] = {};
+	char strServer_SubFileName[256] = {};
+	/*< KJG 20211024 - #3487 ADD Start >*/
+	GetFormatDescription(FTPCMD_RAWMERGE, strServerFolder, strServerFile, strLocalFolder, pLocalFile, strRTMSFile, strServerRawFileSubPath, strServer_SubFileName, pGlassData);
 
 	CFTPCopyDataParam upParam;
 	strcpy(upParam.m_strServer_FolderName,			strServerFolder);
@@ -1829,7 +1808,7 @@
 	upParam.m_nSendResultCode							= FALSE;//m_ctrlResultAck.GetCheck();
 	upParam.m_nProcessType								= CFTPCopyDataParam::FTPProcessType_DownFile;
 	// [C-PRJ] Image Upload Define - KHT (2020/11/19)
-	upParam.m_nDataType = CFTPCopyDataParam::FTPDataType_Unknown;
+	upParam.m_nDataType = CFTPCopyDataParam::FTPDataType_Raw;
 
 	COPYDATASTRUCT cds;
 	cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawDownload;
@@ -1837,9 +1816,20 @@
 	cds.lpData = &upParam;
 
 	DWORD dwReturn = 0;
-	if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE)
-	{
-	}
+	if (SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 5000, (PDWORD_PTR)(dwReturn)) == FALSE)
+		/*< SWK 20220413 - #4053 MOD Start >*/
+// 	{
+// 		AKLOG(" Fucntion FTP :  RawMerge File Download Signal Sucess[%d]", FTPCMD_RAWMERGE);/* <KMH 20220407 : #4053 ADD > */
+// 	}
+// 	else
+// 	{
+// 		AKLOG(" Fucntion FTP :  RawMerge File Download Signal Fail[%d]", FTPCMD_RAWMERGE);/* <KMH 20220407 : #4053 ADD > */
+// 	}
+		AKLOG(" Function FTP :  RawMerge File Download Signal Fail[%d]", FTPCMD_RAWMERGE);
+	else
+		AKLOG(" Function FTP :  RawMerge File Download Signal Success[%d]", FTPCMD_RAWMERGE);
+		/*< SWK 20220413 - #4053 MOD End >*/
+	/*< KJG 20211024 - #3487 ADD End >*/
 }
 
 void CGlassRawCPJT::SendMessageFTPUploadImage( _grmGlassData* pGlassData, emFTPCommand sort)
@@ -1878,9 +1868,19 @@
 	cds.lpData = &upParam;
 
 	DWORD dwReturn = 0;
-	if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE)
-	{
-	}
+	if (SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 5000, (PDWORD_PTR)(dwReturn)) == FALSE)
+		/*< SWK 20220413 - #4053 MOD Start >*/
+// 	{
+// 		AKLOG(" Fucntion FTP : Image Upload Signla Sucess[%d]", sort);/* <KMH 20220407 : #4053 ADD > */
+// 	}
+// 	else
+// 	{
+// 		AKLOG(" Fucntion FTP : Image Upload Signla Fail[%d]", sort);/* <KMH 20220407 : #4053 ADD > */
+// 	}
+		AKLOG(" Function FTP : Image Upload Signal Fail[%d]", sort);
+	else
+		AKLOG(" Function FTP : Image Upload Signal Success[%d]", sort);
+		/*< SWK 20220413 - #4053 MOD End >*/
 }
   
 
@@ -1934,9 +1934,20 @@
 	cds.lpData = &upParam;
 
 	DWORD dwReturn = 0;
-	if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE)
-	{
-	}
+	if (SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 5000, (PDWORD_PTR)(dwReturn)) == FALSE)
+		/*< SWK 20220413 - #4053 MOD Start >*/
+// 	{
+// 		AKLOG(" Fucntion FTP : Index File Upload Signla Sucess[%d]", FTPCMD_INDEX);/* <KMH 20220407 : #4053 ADD > */
+// 	}
+// 	else
+// 	{
+// 		AKLOG(" Fucntion FTP : Index File Upload Signla Fail[%d]", FTPCMD_INDEX);/* <KMH 20220407 : #4053 ADD > */
+// 	}
+		AKLOG(" Function FTP : Index File Upload Signal Fail[%d]", FTPCMD_INDEX);
+	else
+		AKLOG(" Function FTP : Index File Upload Signal Success[%d]", FTPCMD_INDEX);
+		/*< SWK 20220413 - #4053 MOD End >*/
+
 	return TRUE;
 }
 
@@ -1971,7 +1982,7 @@
 			else
 				sprintf(pServerPath, "\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th);
 
-			sprintf(pLocalPath, "%s%s", LOCAL_AOI_IMAGE_PATH, strGlassID.GetBuffer(0));  
+			sprintf(pLocalPath, "%s%s", NETWORK_AOI_IMAGE_PATH, strGlassID.GetBuffer(0));
 			strcpy(pServerFile, "*.*");
 			strcpy(pLocalFile, "*.*");
 		}
@@ -2072,12 +2083,13 @@
 			sprintf(pServerFile, "%s", strFileName.GetBuffer(0)); 
 			sprintf(pLocalFile, "%s", strFileName.GetBuffer(0)); 
 
+			CString strTime;
 			CString strServerSubRawFilePath= NULL;
 			CString strServerSubRawFileName = NULL;
 			{
 				strServerSubRawFilePath += NETWORK_AOIRAWFILE_SUB_PATH;
 
-				CString strTime;
+				
 				CTime CurrTime = m_tmFileCreateTime;
 				strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"),
 					CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond());
@@ -2113,6 +2125,16 @@
 				fprintf(pf, "SUMPATH= \n");
 				fclose(pf);
 			} 
+			/* < KJG 20230220 - #4403 ADD Start >*/
+			// BLUE �꽕鍮� D_COLL 誘몃낫怨� �썝�씤 遺꾩꽍�쓣 �쐞�븳 Result_info.ini �뙆�씪 諛깆뾽 �깮�꽦
+			CString strPathBackUpDir, strPathBackUpFile;
+			strPathBackUpDir.Format(_T("%s%s"), LOCAL_RAWPATH_INFO_INI_PATH, _T("ResultInfoBackUpFile"));
+			strPathBackUpFile.Format(_T("%s_%s.ini"), strGlassID, strTime);
+
+			CreateDirectory(strPathBackUpDir, NULL);
+			strPathBackUpFile.Format("%s\\%s", strPathBackUpDir, strPathBackUpFile);
+			CopyFile(strRawFilePathName, strPathBackUpFile, FALSE);
+			/* < KJG 20230220 - #4403 ADD End >*/
 		}
 		break;
 	case FTPCMD_STACK:
@@ -2129,23 +2151,41 @@
 			sprintf(pLocalFile, "%s", strGlassID.GetBuffer(0)); 
 		}
 		break;
-		
-		case FTPCMD_MURA_IMAGE: //0404nwh
-		{	//
-			/*CTime time = m_tmFileCreateTime;
-			sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), 
-				strGlassIDLevel5th.GetBuffer(0), 
-				strGlassIDLevel8th.GetBuffer(0),
-				strGlassID.GetBuffer(0)); 
-				
-							sprintf(pLocalPath, "%s%s", LOCAL_MURA_IMAGE_PATH, strGlassID.GetBuffer(0));
-			strcpy(pServerFile, "*.*");
-			strcpy(pLocalFile, "*.*");*/
-		
-			if (strGlassID.GetLength() > 6)
-				sprintf(pServerPath, "\\%s\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th, strGlassID);
-			else
-				sprintf(pServerPath, "\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th);
+		/*< KJG 20211024 - #3487 ADD Start >*/
+	case FTPCMD_RAWMERGE:
+	{
+	/* <LJC 20211122 : #3820 ADD Start> */
+		char cMergeList[10][12];
+		CString strMergeList[10] = {};
+		for (int i = 0; i < 10; i++)
+	{
+			strcpy(cMergeList[i], pGlassData->m_StrMergeList[i]);
+			strMergeList[i] = cMergeList[i];
+		}
+		sprintf(pServerPath, "\\%s\\%s\\%s", strProcessID, strMergeList[m_nRawMergeIdx],strGlassIDLevel6th.GetBuffer(0)); // �꽌踰� 寃쎈줈 �솗�씤�썑 �닔�젙 kjg
+		sprintf(pServerFile, "%s",strGlassID);
+		/* <LJC 20211122 : #3820 ADD End> */
+		sprintf(pLocalPath, "%s", m_RawMergeResult.getRawMergeLocalPath());
+		sprintf(pLocalFile, "%s", strGlassID.GetBuffer(0));
+	}
+		break;	
+		/*< KJG 20211024 - #3487 ADD End >*/
+	case FTPCMD_MURA_IMAGE: //0404nwh
+	{	//
+		/*CTime time = m_tmFileCreateTime;
+		sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(),
+			strGlassIDLevel5th.GetBuffer(0),
+			strGlassIDLevel8th.GetBuffer(0),
+			strGlassID.GetBuffer(0));
+
+						sprintf(pLocalPath, "%s%s", LOCAL_MURA_IMAGE_PATH, strGlassID.GetBuffer(0));
+		strcpy(pServerFile, "*.*");
+		strcpy(pLocalFile, "*.*");*/
+
+		if (strGlassID.GetLength() > 6)
+			sprintf(pServerPath, "\\%s\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th, strGlassID);
+		else
+			sprintf(pServerPath, "\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th);
 
 			sprintf(pLocalPath, "%s%s", LOCAL_MURA_IMAGE_PATH, strGlassID.GetBuffer(0)); 
 			strcpy(pServerFile, "*.*");
@@ -2213,6 +2253,10 @@
 				break;
 			case Judge_PR:			sStr.Format("PR");
 				break;
+			/* <KYH 220117 : #3796 ADD Start>*/
+			case Judge_ND:			sStr.Format("ND");
+				break;
+			/* <KYH 220117 : #3796 ADD End>*/
 			case Judge_PT:			sStr.Format("PT");
 				break;
 			case Judge_Review:		sStr.Format("RV");
@@ -2225,7 +2269,13 @@
 				break;
 			case Judge_Rework:		sStr.Format("RW");
 				break;
+		/* < KMH 20220311 : #3954 ADD Start > */
+			case Judge_LN:			sStr.Format("LN");
+				break;
+		/* < KMH 20220311 : #3954 ADD End > */
 			case Judge_Unknown:		sStr.Format("OK");//sStr.Format("Unknown");	//Unknown�룄 �씪�떒 OK
+				break;
+			case Judge_SR:			sStr.Format("SR"); /* < KJG 20221107 - #4360 ADD >*/ 
 				break;
 			default:				sStr.Format("OK");//sStr.Format("Ets");		
 				break;
@@ -2257,6 +2307,20 @@
 	}
 	return sStr;
 }
+/* <LJC 20211122 : #3820 ADD Start> */
+void CGlassRawCPJT::DownLoadMergeFile(CgrmGlassRawData * pData)
+{
+		SendMessageFTPDownloadDataFile(pData->GetGlassData());
+		m_nRawMergeIdx++;
+	return;
+}
+
+void CGlassRawCPJT::SearchFIle(CgrmGlassRawData * pData)
+{
+	m_RawMergeResult.ProcessRawMergeFileReadStart(pData->GetGlassData()->m_strGlassID);
+}
+/* <LJC 20211122 : #3820 ADD End> */
+
 
 CString CGlassRawCPJT::GetWsiDefectType(int nType)
 {

--
Gitblit v1.9.3