From 0c66940a8e2cf64c9890519901f433b3668216b6 Mon Sep 17 00:00:00 2001
From: KEJ <kimeungju@diteam.co.kr>
Date: 수, 26 6월 2024 15:13:18 +0900
Subject: [PATCH] Ongoing80 #4942 CF AOI Review Bin File Loading 실패 개선  1. GlassRawMessenger 동기화  2. BIN파일 FindFile 제거(RawMessenger, Review 공통)  3. Unloading 시 BIN파일 제거

---
 DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp |  194 +++++++++++++++++++++++++++---------------------
 1 files changed, 109 insertions(+), 85 deletions(-)

diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp
index 64660aa..089c488 100644
--- a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp
+++ b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp
@@ -19,10 +19,12 @@
 #define LOCAL_RAWPATH_INFO_INI_PATH	"D:\\ResultData\\"
 #define RAWINFO_FILE_NAME			"RESULT_INFO.ini"
 
+#define LOCAL_AOI_DEFECT_INFO_FILE_PATH		_T("D:\\DIT_ResultData\\DefectInfo") // 寃고븿 �긽�꽭 �젙蹂� �뙆�씪 �깮�꽦 寃쎈줈
 #define LOCAL_AOIRAWDFS_PATH		"D:\\DIT_ResultData\\Raw"
 #define LOCAL_AOIRAWBIN_PATH		"D:\\DIT_ResultData\\RawBin"
 #define NETWORK_AOIRAWDFS_PATH		"\\\\126.100.100.1\\d\\DIT_ResultData\\Raw"
 #define NETWORK_AOIRAWBIN_PATH		"\\\\126.100.100.1\\d\\DIT_ResultData\\RawBin"
+#define LOCAL_ReviewRAWBIN_PATH		"D:\\DIT_ResultData\\RawBin"
 
 #define NETWORK_AOIRAWFILE_SUB_PATH "\\\\126.100.100.1\\d\\Raw_im\\"
 #define NETWORK_AOI_IMAGE_PATH		"\\\\126.100.100.1\\d\\Image\\Defect\\" 
@@ -89,6 +91,7 @@
 	CreateDirectory(LOCAL_AOIRAWDFS_PATH, NULL);
 	CreateDirectory(LOCAL_AOIRAWBIN_PATH, NULL);
 	CreateDirectory("D:\\Raw_im", NULL);
+	CreateDirectory(LOCAL_AOI_DEFECT_INFO_FILE_PATH, NULL); /* < KJG 20240620 - #4942 ADD >*/ 
 
 	/* <KMH 20220407 : #4053 ADD Start> */
 	CFileFind FileFinder;
@@ -125,9 +128,9 @@
 		
 		CString strStackFileLocalPath;
 		strStackFileLocalPath.Format("%s\\%s", NETWORK_AOISTACKLOCAL_PATH, pData->GetGlassData()->m_strGlassID);
-
+		
 		CFileFind File;
-
+		
 		if (File.FindFile(strStackFileLocalPath))
 		{
 			File.FindNextFile();
@@ -201,27 +204,30 @@
 	//210128
 	m_tmReviewEnd = m_tmReviewStart = CTime::GetCurrentTime();
 	pData->GetGlassData()->m_tmReviewEnd = m_tmReviewEnd;      // Insp End �떆 Raw �뾽濡쒕뱶濡�, E_TIME, LD_TIME �엯�젰 [ 21-03-18 KJG ]
+	pData->GetGlassData()->m_tmInspectionEND = m_tmReviewEnd;      // �떎�젣 Insp End �떆 Raw �뾽濡쒕뱶濡�, E_TIME, LD_TIME �엯�젰	//< KEJ 20240408 - #4808 ADD >
 	m_tmFileCreateTime = CTime::GetCurrentTime();
 
 	//�뿬湲곗뿉�꽌 �씪�씤蹂꾨줈 �뙆�씪紐�, �샊�� Path �쐞移� 寃곗젙�븯硫대맖. AOIServer �샊�� ReviewServer�뿉�꽌 �븞�빐�룄�맖 [源��깭�쁽2019/9/4]
-	pData->GetGlassData()->m_strFileName;
-	{
-		_grmGlassData* pGlassData = pData->GetGlassData();
-		CTime CurrTime = pGlassData->m_tmGlassLoading;
-		CString strTime=_T(""), strFileName=_T("");
-		strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"),
-			
-			CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond());
-		strFileName.Format("%s_%s_%s.bin", pGlassData->m_strGlassID, pGlassData->m_strStepID, strTime.GetBuffer(0));
 
-		strcpy(pData->GetGlassData()->m_strFileName, strFileName.GetBuffer(0));
-	}
-	strcpy(pData->GetGlassData()->m_strPath, LOCAL_AOIRAWBIN_PATH);
-
+	//=> �꽌踰꾩뿉�꽌 �뜥以� 洹몃�濡� �깮�꽦�븯�룄濡� 蹂�寃�
+	/* < KJG 20240620 - #4942 DEL Start >*/
+// 	pData->GetGlassData()->m_strFileName;
+// 	{
+// 		_grmGlassData* pGlassData = pData->GetGlassData();
+// 		CTime CurrTime = pGlassData->m_tmGlassLoading;
+// 		CString strTime=_T(""), strFileName=_T("");
+// 		strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"),
+// 			
+// 			CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond());
+// 		strFileName.Format("%s_%s_%s.bin", pGlassData->m_strGlassID, pGlassData->m_strStepID, strTime.GetBuffer(0));
+// 
+// 		strcpy(pData->GetGlassData()->m_strFileName, strFileName.GetBuffer(0));
+// 	}
+//	strcpy(pData->GetGlassData()->m_strPath, LOCAL_AOIRAWBIN_PATH);
+	/* < KJG 20240620 - #4942 DEL End >*/
 	
 	if(!WriteBinFile(pData))
 		return FALSE;
-	
 	
 	//if(1) ReadMuraFile(pData); 211012 KJG - QD Macro 媛쒕퀎 �뾽濡쒕뱶 �븯誘�濡� Macro �뜲�씠�꽣 �쟻�젣 �젣嫄� �슂泥�
 
@@ -261,8 +267,6 @@
 //	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)
 	{
@@ -305,69 +309,72 @@
 
 	//�뿬湲곗뿉�꽌 �씪�씤蹂꾨줈 �뙆�씪紐�, �샊�� Path �쐞移� 寃곗젙�븯硫대맖. AOIServer �샊�� ReviewServer�뿉�꽌 �븞�빐�룄�맖 [源��깭�쁽2019/9/4]
 	pData->GetGlassData()->m_strFileName;
-	strcpy(pData->GetGlassData()->m_strPath, NETWORK_AOIRAWBIN_PATH);
+	//strcpy(pData->GetGlassData()->m_strPath, NETWORK_AOIRAWBIN_PATH);
+	strcpy(pData->GetGlassData()->m_strPath, LOCAL_ReviewRAWBIN_PATH);		//< KEJ 20240621 - #4942 MOD >
 	
 	//strcpy(pData->GetGlassData()->m_strPath, LOCAL_AOIRAWBIN_PATH);
-
+	/* < KEJ 20240621 - #4942 MOD Start > */
+// 	CString strFindFile;
+// 	int nCloseTime = 600*100000;//sec
+// 	int nReTryTime = 30;
+// 	{
+// 		CTime tmReviewLoading = CTime::GetCurrentTime();
+// 		CString strWild;
+// 		
+// 		strWild.Format("%s\\%s_%s_*.bin", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strGlassID,pData->GetGlassData()->m_strStepID);
+// 		CakFileUtil akFileFinder;
+// 		while(nReTryTime--)
+// 		{
+// 			akFileFinder.FindFile(strWild.GetBuffer(0), FALSE);
+// 			VECFINDDATA* pFindData = akFileFinder.getFindData();
+// 			int nFileNamePos = strlen(akFileFinder.getProcessPath());
+// 			std::map<LONGLONG, CString> mapSpanFileName;
+// 			for(int i=0; i<pFindData->size(); i++)
+// 			{
+// 				char* pFileName = &((*pFindData)[i]).name[nFileNamePos];
+// 				{
+// 					CakParser parser;
+// 					parser.process(pFileName, "_.");
+// 					if(parser.getTokNum() < 4) continue;
+// 
+// 					int nDataTime[8]={};
+// 					{
+// 						int nTokIndex=0;
+// 						const char* pGlassId = parser.getTokStr(nTokIndex++);
+// 						const char* pStepId = parser.getTokStr(nTokIndex++);
+// 						char* pDate = &pFileName[parser.getTokPos(nTokIndex++)];
+// 						char* pTime = &pFileName[parser.getTokPos(nTokIndex++)];
+// 
+// 						nDataTime[0] = (pDate[0]-'0')*1000 + (pDate[1]-'0')*100 + (pDate[2]-'0')*10+ (pDate[3]-'0')*1;
+// 						nDataTime[1] = (pDate[4]-'0')*10+ (pDate[5]-'0')*1;
+// 						nDataTime[2] = (pDate[6]-'0')*10+ (pDate[7]-'0')*1;
+// 						nDataTime[3] = (pTime[0]-'0')*10+ (pTime[1]-'0')*1;
+// 						nDataTime[4] = (pTime[2]-'0')*10+ (pTime[3]-'0')*1;
+// 						nDataTime[5] = (pTime[4]-'0')*10+ (pTime[5]-'0')*1;
+// 					}
+// 					
+// 					CTime tmTemp(nDataTime[0], nDataTime[1], nDataTime[2], nDataTime[3], nDataTime[4], nDataTime[5] );
+// 					CTimeSpan tmSpan = tmReviewLoading-tmTemp;
+// 					mapSpanFileName.insert(std::make_pair(tmSpan.GetTotalSeconds(), pFileName));
+// 				}
+// 			}
+// 
+// 			if(mapSpanFileName.empty() == FALSE)
+// 			{
+// 				if(mapSpanFileName.begin()->first < nCloseTime)
+// 				{
+// 					//媛��옣 理쒓렐 寃곌낵�뙆�씪 李얘린 �꽦怨� [源��깭�쁽 2019/7/17]
+// 					strFindFile = mapSpanFileName.begin()->second;
+// 					break;
+// 				}
+// 			}
+// 			akFileFinder.clear();
+// 			Sleep(100);
+// 		}
+// 	}
 	CString strFindFile;
-	int nCloseTime = 600*100000;//sec
-	int nReTryTime = 30;
-	{
-		CTime tmReviewLoading = CTime::GetCurrentTime();
-		CString strWild;
-		
-		strWild.Format("%s\\%s_%s_*.bin", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strGlassID,pData->GetGlassData()->m_strStepID);
-		CakFileUtil akFileFinder;
-		while(nReTryTime--)
-		{
-			akFileFinder.FindFile(strWild.GetBuffer(0), FALSE);
-			VECFINDDATA* pFindData = akFileFinder.getFindData();
-			int nFileNamePos = strlen(akFileFinder.getProcessPath());
-			std::map<LONGLONG, CString> mapSpanFileName;
-			for(int i=0; i<pFindData->size(); i++)
-			{
-				char* pFileName = &((*pFindData)[i]).name[nFileNamePos];
-				{
-					CakParser parser;
-					parser.process(pFileName, "_.");
-					if(parser.getTokNum() < 4) continue;
-
-					int nDataTime[8]={};
-					{
-						int nTokIndex=0;
-						const char* pGlassId = parser.getTokStr(nTokIndex++);
-						const char* pStepId = parser.getTokStr(nTokIndex++);
-						char* pDate = &pFileName[parser.getTokPos(nTokIndex++)];
-						char* pTime = &pFileName[parser.getTokPos(nTokIndex++)];
-
-						nDataTime[0] = (pDate[0]-'0')*1000 + (pDate[1]-'0')*100 + (pDate[2]-'0')*10+ (pDate[3]-'0')*1;
-						nDataTime[1] = (pDate[4]-'0')*10+ (pDate[5]-'0')*1;
-						nDataTime[2] = (pDate[6]-'0')*10+ (pDate[7]-'0')*1;
-						nDataTime[3] = (pTime[0]-'0')*10+ (pTime[1]-'0')*1;
-						nDataTime[4] = (pTime[2]-'0')*10+ (pTime[3]-'0')*1;
-						nDataTime[5] = (pTime[4]-'0')*10+ (pTime[5]-'0')*1;
-					}
-					
-					CTime tmTemp(nDataTime[0], nDataTime[1], nDataTime[2], nDataTime[3], nDataTime[4], nDataTime[5] );
-					CTimeSpan tmSpan = tmReviewLoading-tmTemp;
-					mapSpanFileName.insert(std::make_pair(tmSpan.GetTotalSeconds(), pFileName));
-				}
-			}
-
-			if(mapSpanFileName.empty() == FALSE)
-			{
-				if(mapSpanFileName.begin()->first < nCloseTime)
-				{
-					//媛��옣 理쒓렐 寃곌낵�뙆�씪 李얘린 �꽦怨� [源��깭�쁽 2019/7/17]
-					strFindFile = mapSpanFileName.begin()->second;
-					break;
-				}
-			}
-			akFileFinder.clear();
-			Sleep(100);
-		}
-	}
-
+	strFindFile.Format("%s_%s.bin", pData->GetGlassData()->m_strGlassID, pData->GetGlassData()->m_strStepID);
+	/* < KEJ 20240621 - #4942 MOD End > */
 	if(strFindFile.IsEmpty()) return FALSE;
 
 	strcpy(pData->GetGlassData()->m_strFileName, strFindFile.GetBuffer(0));
@@ -507,7 +514,10 @@
 	
 	bResult &= MakeAOIFile(pData);
 	
-	m_GlassRawAna.MakeAnaFile(pData);
+	/* < KJG 20240620 - #4942 MOD Start >*/ 
+	//m_GlassRawAna.MakeAnaFile(pData);
+	m_GlassRawAna.MakeAnaFile(pData, LOCAL_AOI_DEFECT_INFO_FILE_PATH);
+	/* < KJG 20240620 - #4942 MOD End > */
 	//m_GlassRawRTMS.WriteAOIFile(pData);
 
 	AKLOG("WriteAOIFile Complete");
@@ -636,6 +646,7 @@
 	/* <LJC 20220425 : #3957 MOD End> */
 /* < KMH 20220613 : #3957 MOD End > */
 	/*< KJG 20211229 - #3846 MOD End >*/
+	strValue += _T(" B_DEFECT"); /* < KJG 20240620 - #4942 ADD >*/ 
 	strLine += strValue; strLine += "\n";
 /* < KMH 20220614 : #3957 MOD Start > */
 	/* <LJC 20220425 : #3957 MOD Start> */
@@ -892,13 +903,22 @@
 		, pGlassData->m_tmInspectionStart.GetSecond());
 	SPRINTRAW(14, "%s", (LPSTR)(LPCTSTR)strValue);
 	// 23   14  E_TIME		// Stage�뿉�꽌 寃��궗/怨꾩륫 醫낅즺�맂 �떆媛�
+	/* < KEJ 20240408 - #4808 MOD Start > */
+// 	strValue.Format("%04d%02d%02d%02d%02d%02d"			// E_TIME
+// 		, pGlassData->m_tmReviewEnd.GetYear()
+// 		, pGlassData->m_tmReviewEnd.GetMonth()
+// 		, pGlassData->m_tmReviewEnd.GetDay()
+// 		, pGlassData->m_tmReviewEnd.GetHour()
+// 		, pGlassData->m_tmReviewEnd.GetMinute()
+// 		, pGlassData->m_tmReviewEnd.GetSecond());
 	strValue.Format("%04d%02d%02d%02d%02d%02d"			// E_TIME
-		, pGlassData->m_tmReviewEnd.GetYear()
-		, pGlassData->m_tmReviewEnd.GetMonth()
-		, pGlassData->m_tmReviewEnd.GetDay()
-		, pGlassData->m_tmReviewEnd.GetHour()
-		, pGlassData->m_tmReviewEnd.GetMinute()
-		, pGlassData->m_tmReviewEnd.GetSecond());
+		, pGlassData->m_tmInspectionEND.GetYear()
+		, pGlassData->m_tmInspectionEND.GetMonth()
+		, pGlassData->m_tmInspectionEND.GetDay()
+		, pGlassData->m_tmInspectionEND.GetHour()
+		, pGlassData->m_tmInspectionEND.GetMinute()
+		, pGlassData->m_tmInspectionEND.GetSecond());
+	/* < KEJ 20240408 - #4808 MOD End > */
 	SPRINTRAW(14, "%s", (LPSTR)(LPCTSTR)strValue);
 	// 24   6   T_DEFECT		// Common Item 1 - Total Defect Count	
 	SPRINTRAW(12, "%d", pGlassData->m_nDefectNum - pGlassData->m_nCutOffDefectNum); //210203 CJH - Cutoff 寃고븿�� �쟾泥닿컻�닔�뿉�꽌 �젣�쇅�빐以��떎.
@@ -1050,6 +1070,10 @@
 		}
 	}
 	/* <LJC 20220425 : #3957 ADD End> */
+
+	// B_DEFECT(Before T_DEFECT) �븘�꽣留� �쟾 寃고븿 �닔�웾
+	SPRINTRAW(12, "%d", pGlassData->m_nDefectNum); /* < KJG 20240620 - #4942 ADD >*/ 
+
 	SPRINTRAWEND;   //以묒슂!!! �젮 留덉�留됱뿉 瑗� �엳�뼱�빞�븿!!!(�궘�젣湲덉�) [源��깭�쁽2020/9/23]
 }
 

--
Gitblit v1.9.3