From 63439977901d54a01924ed76290931aeddbce66c Mon Sep 17 00:00:00 2001
From: LYW <leeyeanwoo@diteam.co.kr>
Date: 화, 05 7월 2022 18:16:55 +0900
Subject: [PATCH] Ongoing80 #4220 CF AOI Review 알람 추가

---
 ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp |  276 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 253 insertions(+), 23 deletions(-)

diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
index 0f820c7..f9dc30c 100644
--- a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
+++ b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
@@ -60,6 +60,7 @@
 	, m_dEditOffsetX(0)
 	, m_dEditOffsetY(0)
 	, m_strGantryIdx(_T(""))
+	, m_TextLastSaveOffsetTime(_T(""))
 {
 	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
 
@@ -83,6 +84,12 @@
 	m_dCurDefectIdx = 0;
 	m_dCurDefectID = 0;
 	/*< LYW 20211018 - #3684 ADD End >*/
+	/*< LYW 20211029 - #3684 ADD Start >*/
+	DWORD  dwThreadId = 0;
+	HANDLE hThread = CreateThread(NULL, 0, RunThreadReviewHistory, this, 0, &dwThreadId);
+	m_ThreadId = dwThreadId;
+	/*< LYW 20211029 - #3684 ADD End >*/
+	m_CheckInsViewCenterLine.SetCheck(FALSE);
 
 	for (int i = 0; i < 105; i++)
 	{
@@ -93,6 +100,13 @@
 		m_nImageSize[i] = 0;
 	}
 }
+
+/*< LYW 20211029 - #3684 ADD Start >*/
+CReveiwHistoryDlg::~CReveiwHistoryDlg(void)
+{
+	PostThreadMessage(m_ThreadId, WM_QUIT, 0, 0);
+}
+/*< LYW 20211029 - #3684 ADD End >*/
 
 void CReveiwHistoryDlg::DoDataExchange(CDataExchange* pDX)
 {
@@ -112,6 +126,8 @@
 	DDX_Text(pDX, IDC_EDIT_OFFSET_X, m_dEditOffsetX);
 	DDX_Text(pDX, IDC_EDIT_OFFSET_Y, m_dEditOffsetY);
 	DDX_Text(pDX, IDC_EDIT_DFFSET_GANTRY_IDX, m_strGantryIdx);
+	DDX_Text(pDX, IDC_STATIC_LAST_SAVE_OFFSET_TIME, m_TextLastSaveOffsetTime);
+	DDX_Control(pDX, IDC_CHECK_INS_VIEW_CENTER_LINE, m_CheckInsViewCenterLine);
 }
 
 BEGIN_MESSAGE_MAP(CReveiwHistoryDlg, CDialogEx)
@@ -124,6 +140,7 @@
 	ON_BN_CLICKED(IDC_BUTTON_MAPVIEW_FIT, &CReveiwHistoryDlg::OnBnClickedButtonMapviewFit)
 	ON_MESSAGE(UM_FORMMAP_DEFECTSELECT, OnMapDefectSelected)
 	ON_MESSAGE(UM_FORMMAP_DEFECTMOUSEOVER, OnMapDefectMouseOver)
+	ON_MESSAGE(UM_WARNING_OFFSET, OnDisplayWarning)
 	ON_MESSAGE(UM_FORMMAP_IMAGEMOUSECLICK, OnImageClick)
 	ON_COMMAND(ID_OPTION_PATHSETTING, &CReveiwHistoryDlg::OnOptionPathsetting)
 	ON_COMMAND(ID_VIEW_ALLDEFECT, &CReveiwHistoryDlg::OnViewAlldefect)
@@ -140,6 +157,7 @@
 	ON_WM_KEYDOWN()
 	ON_BN_CLICKED(IDC_BUTTON_OFFSET_APPLY, &CReveiwHistoryDlg::OnBnClickedButtonOffsetApply)
 	ON_BN_CLICKED(IDC_BUTTON_OFFSET_SAVE, &CReveiwHistoryDlg::OnBnClickedButtonOffsetSave)
+	ON_BN_CLICKED(IDC_CHECK_INS_VIEW_CENTER_LINE, &CReveiwHistoryDlg::OnBnClickedCheckInsViewCenterLine)
 END_MESSAGE_MAP()
 
 // CReveiwHistoryDlg 硫붿떆吏� 泥섎━湲�
@@ -213,13 +231,6 @@
 	InitGridDefectLIst(&m_gridDefectInfo, IDC_STATIC_GRID_DEFECT);
 	InitGridGlassLIst(&m_gridGlassInfo, IDC_STATIC_GRID_GLASS_INFO);
 
-	/*< LYW 20211025 - #3684 ADD Start >*/
-	CString strPath = _T("");
-	InitDataInfo();
-	strPath.Format(_T("%s%s"), REVIEW_OFFSET_CONFIGFILE_PATH, REVIEW_OFFSET_CONFIGFILE_NAME);
-	LoadOffset(strPath);
-	/*< LYW 20211025 - #3684 ADD End >*/
-
 	OnViewReviewdefect();
 
 	m_chkReviewDefect.SetCheck(TRUE);
@@ -245,6 +256,11 @@
 
 	m_ctlProgress.SetRange(0, 100);
 	m_ctlProgress.ShowWindow(FALSE);
+
+	/*< LYW 20211025 - #3684 ADD Start >*/
+	InitDataInfo();
+	PostThreadMessage(m_ThreadId, UM_THREAD_LOADING_OFFSET, 0, 0);
+	/*< LYW 20211025 - #3684 ADD End >*/
 
 	return TRUE;  // �룷而ㅼ뒪瑜� 而⑦듃濡ㅼ뿉 �꽕�젙�븯吏� �븡�쑝硫� TRUE瑜� 諛섑솚�빀�땲�떎.
 }
@@ -329,6 +345,10 @@
 		{
 			dc.SetStretchBltMode(COLORONCOLOR);
 			m_AlignSecend.Draw(dc, m_Align_rect2);
+		}
+		if (m_CheckInsViewCenterLine.GetCheck() == TRUE)
+		{
+			DrawInsViewCenterLine(&dc);
 		}
 		CDialogEx::OnPaint();
 	}
@@ -908,7 +928,11 @@
 					//ImageShow(pDefectInfo->m_nDefectID);
 					if (!m_bDefectAll)
 					{
-						ImageShow(pDispInfo->item.row - 1);
+						/*< LYW 20211221 - #5000 ADD Start >*/
+						ImageShow(pDefectInfo->m_nDefectID);
+						/*< LYW 20211221 - #5000 ADD End >*/
+						//origin
+						//ImageShow(pDispInfo->item.row - 1);
 					}
 					else
 					{
@@ -918,12 +942,15 @@
 					//�젙�젹 �닚�꽌瑜� �궗�슜�옄媛� �썝�븯�뒗 �닚�쑝濡� �븯�옄
 					if (!m_bDefectAll)
 					{
-						m_sldImg.SetPos(pDispInfo->item.row - 1);
-						
-						int nPos = m_sldImg.GetPos();
-						CString strPos;
-						strPos.Format(_T("%d"), nPos);
-						m_ctrCount.SetWindowText(strPos);
+						/*< LYW 20211221 - #5000 Delete Start >*/
+
+// 						m_sldImg.SetPos(pDispInfo->item.row - 1);
+// 						
+// 						int nPos = m_sldImg.GetPos();
+// 						CString strPos;
+// 						strPos.Format(_T("%d"), nPos);
+// 						m_ctrCount.SetWindowText(strPos);
+						/*< LYW 20211221 - #5000 Delete End >*/
 					}
 				}
 			}
@@ -1212,7 +1239,11 @@
 		{
 			if (m_Formation.m_vecImage[i].m_nDefectID == nSelectDefect)
 			{
-				ImageShow(i);
+				/*< LYW 20211221 - #5000 ADD Start >*/
+				ImageShow(nSelectDefect);
+				/*< LYW 20211221 - #5000 ADD End >*/
+				//origin
+				//ImageShow(i);
 				break;
 			}
 		}
@@ -1233,6 +1264,12 @@
 		m_pDlgAlign->setFormShow(nSelectDefect, 1);
 	}
 
+	return 0;
+}
+
+LRESULT CReveiwHistoryDlg::OnDisplayWarning(WPARAM wParam, LPARAM lParam)
+{
+	AfxMessageBox(_T("�꽑�깮�븯�떊 由щ럭 �뜲�씠�꽣�뒗 吏�湲� �쟻�슜�맂 OFFSET �뜲�씠�꽣 �씠�쟾�쓽 �뜲�씠�꽣 �엯�땲�떎. �솗�떎�븳 寃쎌슦媛� �븘�땲�씪硫� OFFSET �뀑�똿�쓣 湲덊빐二쇱떗�떆�삤."), MB_OK | MB_ICONWARNING);
 	return 0;
 }
 
@@ -1440,6 +1477,8 @@
 		nSecond = write_local_time.wSecond;
 		CString strTime;
 		strTime.Format("%04d-%02d-%02d-%02d-%02d-%02d", nYear, nMonth, nDay, nHour, nMinute, nSecond);
+
+		CloseHandle(h_File);
 		
 		m_vecStrGridTimeList.push_back(strTime);
 	}
@@ -1557,6 +1596,12 @@
 		Imagenoload();
 		return;
 	}
+
+	/*< LYW 20211028 - #3684 ADD Start >*/
+	CString strBinFileName;
+	strBinFileName.Format("%s\\%s", strBinPath, strFileName);
+	m_CurrentResultFileTime = GetCurrentResultFileTime(strBinFileName);
+	/*< LYW 20211028 - #3684 ADD End >*/
 
 	if (bNewFile && m_chkSingle.GetCheck())
 	{
@@ -1783,6 +1828,12 @@
 	{
 		SetScrollSetting();
 	}
+	/*< LYW 20211028 - #3684 ADD Start >*/
+	if (m_LastSaveOffsetTime >= m_CurrentResultFileTime)
+	{
+		PostThreadMessage(m_ThreadId, UM_THREAD_WARNING_OFFSET, 0, 0);
+	}
+	/*< LYW 20211028 - #3684 ADD End >*/
 }
 
 void CReveiwHistoryDlg::OnCbnSelchangeComboRawtype()
@@ -1797,6 +1848,25 @@
 
 	m_ConfigOption.m_nSelectRawType = 3;
 
+}
+
+void CReveiwHistoryDlg::DrawInsViewCenterLine(CPaintDC * pDC)
+{
+	if (m_picture_rect2.Width() == 0 || m_picture_rect2.Height() == 0) return;
+
+	CRect rtDraw = m_picture_rect2;
+
+	CPen pen, *pPen = NULL;
+	pen.CreatePen(PS_DOT, 1, RGB(255, 0, 0));
+	pDC->SelectObject(&pen);
+
+	//pDC->SelectStockObject(WHITE_PEN);
+
+	// center line
+	pDC->MoveTo((rtDraw.Width() / 2) + rtDraw.left, 0 + rtDraw.top);
+	pDC->LineTo((rtDraw.Width() / 2) + rtDraw.left, rtDraw.Height() + rtDraw.top);
+	pDC->MoveTo(0 + rtDraw.left, (rtDraw.Height() / 2) + rtDraw.top);
+	pDC->LineTo(rtDraw.Width() + rtDraw.left, (rtDraw.Height() / 2) + rtDraw.top);
 }
 
 void CReveiwHistoryDlg::OnBnClickedBtnFindBin()
@@ -2091,8 +2161,16 @@
 
 		if (!m_bDefectAll)
 		{
-			nIndex = nDefectID;
-			break;
+			/*< LYW 20211221 - #5000 ADD Start >*/
+			if (pImage->m_nDefectID == nDefectID)
+			{
+				nIndex = i;
+				break;
+			}
+			/*< LYW 20211221 - #5000 ADD End >*/
+			//Origin
+// 			nIndex = nDefectID;
+// 			break;
 		}
 		else
 		{
@@ -2338,8 +2416,11 @@
 		_akReviewList* pImageInfo = &m_Formation.m_vecImage[nPos];
 
 		m_FormationMap.setSelectDefect(pImageInfo->m_nDefectID);
-		//ImageShow(pImageInfo->m_nDefectID/*nPos*/);
-		ImageShow(nPos);
+		/*< LYW 20211221 - #5000 ADD Start >*/
+		ImageShow(pImageInfo->m_nDefectID/*nPos*/);
+		/*< LYW 20211221 - #5000 ADD End >*/
+		//Origin
+		//ImageShow(nPos);
 		setDefectShow(pImageInfo->m_nDefectID, 1);
 	}
 }
@@ -2650,8 +2731,10 @@
 	int center_y = (SrcImage.GetHeight() / 2); // �쉶�쟾 以묒떖�젏
 
 	double seta = 3.14 / (180.0 / degree); // �씪�뵒�븞
-	double CosSeta = cos(seta);
-	double SinSeta = sin(seta);
+	double CosSeta = -1;
+	double SinSeta = 0;
+// 	double CosSeta = cos(seta);
+// 	double SinSeta = sin(seta);
 
 	for (int y = 0; y < Height; y++)
 	{
@@ -2693,6 +2776,63 @@
 	m_ctlFileCount.GetWindowText(strCount);
 	m_nFileCount = _ttoi(strCount);
 }
+
+/*< LYW 20211028 - #3684 ADD Start >*/
+void CReveiwHistoryDlg::UpdateLastSaveOffsetTime(CString FileName)
+{
+
+	HANDLE h_file = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+
+	FILETIME create_time, access_time, write_time;
+	GetFileTime(h_file, &create_time, &access_time, &write_time);
+
+	SYSTEMTIME access_system_time;
+	FileTimeToSystemTime(&access_time, &access_system_time);
+
+	SYSTEMTIME access_system_Local_time;
+	SystemTimeToTzSpecificLocalTime(NULL, &access_system_time, &access_system_Local_time);
+
+	CTime FIleTime(access_system_Local_time);
+	m_LastSaveOffsetTime = FIleTime;
+
+	CloseHandle(h_file);
+
+	m_TextLastSaveOffsetTime.Format(_T("%04d/%02d/%02d/%02d:%02d:%02d"), m_LastSaveOffsetTime.GetYear(), m_LastSaveOffsetTime.GetMonth(), 
+		m_LastSaveOffsetTime.GetDay(), m_LastSaveOffsetTime.GetHour(), m_LastSaveOffsetTime.GetMinute(), m_LastSaveOffsetTime.GetSecond());
+
+	UpdateData(FALSE);
+}
+CTime CReveiwHistoryDlg::GetCurrentResultFileTime(CString FileName)
+{
+	HANDLE h_file = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+
+	if (h_file != INVALID_HANDLE_VALUE)
+	{
+		FILETIME create_time, access_time, write_time;
+		GetFileTime(h_file, &create_time, &access_time, &write_time);
+
+		SYSTEMTIME access_system_time;
+		FileTimeToSystemTime(&access_time, &access_system_time);
+
+		SYSTEMTIME access_system_Local_time;
+		SystemTimeToTzSpecificLocalTime(NULL, &access_system_time, &access_system_Local_time);
+
+		CloseHandle(h_file);
+
+		CTime FIleTime(access_system_Local_time);
+		m_CurrentResultFileTime = FIleTime;
+
+		return m_CurrentResultFileTime;
+	}
+	
+	else
+	{
+		return CTime::GetCurrentTime();
+	}
+
+
+}
+/*< LYW 20211028 - #3684 ADD End >*/
 
 BOOL CReveiwHistoryDlg::GetCheckFileLoad(int nCount)
 {
@@ -3939,6 +4079,7 @@
 {
 	// TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎.
 	SaveOffset();
+	SendMsg2ReviewSystem();
 }
 
 BOOL CReveiwHistoryDlg::LoadOffset(CString strFilePath)
@@ -3949,9 +4090,15 @@
 	if (!macroFile.Read(strFilePath))
 		return FALSE;
 
+	UpdateLastSaveOffsetTime(strFilePath);
+
 	macroFile.GetItem(_T("CAMERA_COUNT"), m_nCameraCount, 0);
 	macroFile.GetItem(_T("SCAN_COUNT"), m_nScanCount, 0);
 	macroFile.GetItem(_T("XPOS_COUNT"), m_XposCount, 0);
+	/*< LYW 20211111 - #3766 ADD Start >*/
+	macroFile.GetItem(_T("WARN_STANDARD"), m_dWarnStandard, 0);
+	macroFile.GetItem(_T("HARD_STANDARD"), m_dHardStandard, 0);
+	/*< LYW 20211111 - #3766 ADD End >*/
 	CString strItem = _T("");
 	double dXoffset = 0;
 	double dYoffset = 0;
@@ -4004,6 +4151,9 @@
 	CString strForderPath;
 	CString strFileName;
 	CTime time = CTime::GetCurrentTime();
+	/*< LYW 20211028 - #3684 ADD Start >*/
+	m_LastSaveOffsetTime = time;
+	/*< LYW 20211028 - #3684 ADD End >*/
 	strFileName.Format(_T("ReviewOffSet_%04d%02d%02d%02d%02d%02d.cfg"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
 	strForderPath.Format(_T("%s%s"), REVIEW_OFFSET_BACKUP_FORDER_PATH, strFileName);
 
@@ -4028,6 +4178,14 @@
 
 	strItem.Format(_T("XPOS_COUNT"));
 	macroFile.SetItem(strItem, m_XposCount);
+
+	/*< LYW 20211111 - #3766 ADD Start >*/
+	strItem.Format(_T("WARN_STANDARD"));
+	macroFile.SetItem(strItem, m_dWarnStandard);
+
+	strItem.Format(_T("HARD_STANDARD"));
+	macroFile.SetItem(strItem, m_dHardStandard);
+	/*< LYW 20211111 - #3766 ADD End >*/
 
 
 	CString strData;
@@ -4070,10 +4228,45 @@
 
 	bReturn = macroFile.Write(strFilePath);
 
-	if (bReturn) AfxMessageBox(_T("OFFSET SAVE SUCCESS"), MB_OK | MB_ICONASTERISK);
-	else AfxMessageBox(_T("OFFSET SAVE FAIL"), MB_OK | MB_ICONASTERISK);
+	/*< LYW 20220525 - #4158 ADD Start >*/
+	CString strRTMSBackUpFilePath;
+	strRTMSBackUpFilePath.Format(_T("%s\\%s"), _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT, REVIEW_OFFSET_CONFIGFILE_NAME);
+
+	if (bReturn)
+	{
+		CopyFile(REVIEW_OFFSET_CONFIGFILE_FULL_PATHNAME, strRTMSBackUpFilePath, FALSE);
+	}
+	/*< LYW 20220525 - #4158 ADD End >*/
+
+	if (bReturn)
+	{
+		/*< LYW 20211028 - #3684 ADD Start >*/
+		UpdateLastSaveOffsetTime(strFilePath);
+		AfxMessageBox(_T("OFFSET SAVE SUCCESS"), MB_OK | MB_ICONASTERISK);
+		/*< LYW 20211028 - #3684 ADD End >*/
+	}
+	else AfxMessageBox(_T("OFFSET SAVE FAIL"), MB_OK | MB_ICONHAND);
 
 	return bReturn;
+}
+
+BOOL CReveiwHistoryDlg::SendMsg2ReviewSystem()
+{
+	HWND hWnd = ::FindWindow(NULL, _T("ReviewSystem"));
+
+	if (hWnd)
+	{
+		COPYDATASTRUCT cds;
+		cds.dwData = COPYDATA_REVIEWHISTORYOR2REVIEWSYSTEM;
+		cds.cbData = 0;
+		cds.lpData = 0;
+
+		::SendMessage(hWnd, WM_COPYDATA, 0, (LPARAM)(LPVOID)&cds);
+
+		return TRUE;
+	}
+
+	return FALSE;
 }
 
 BOOL CReveiwHistoryDlg::ApplyOffset(int nModuleidx, int nCamIndex, int ScanIndex, double dXOffsetValue, double dYOffsetValue)
@@ -4259,3 +4452,40 @@
 	}
 }
 /*< LYW 20211025 - #3684 ADD End >*/
+
+/*< LYW 20211029 - #3684 ADD Start >*/
+DWORD RunThreadReviewHistory(LPVOID param)
+{
+	MSG msg;
+	CString strPath = _T("");
+	CReveiwHistoryDlg* pDlg = (CReveiwHistoryDlg*)param;
+	while (GetMessage(&msg, NULL, 0, 0))
+	{
+		//CString* pstrLog = reinterpret_cast<CString*>(msg.wParam);
+		switch (msg.message)
+		{
+		case UM_THREAD_WARNING_OFFSET:
+			
+			Sleep(100);
+			pDlg->PostMessage(UM_WARNING_OFFSET);
+			break;
+
+		case UM_THREAD_LOADING_OFFSET:
+			strPath.Format(_T("%s%s"), REVIEW_OFFSET_CONFIGFILE_PATH, REVIEW_OFFSET_CONFIGFILE_NAME);
+			pDlg->LoadOffset(strPath);
+			break;
+
+		default:
+			break;
+		}
+	}
+	return 0;
+}
+/*< LYW 20211029 - #3684 ADD End >*/
+
+void CReveiwHistoryDlg::OnBnClickedCheckInsViewCenterLine()
+{
+	// TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎.
+	Invalidate(TRUE);
+	
+}

--
Gitblit v1.9.3