From 437d3d047183eed3bbd8eb79e4b40c4a1e0427c9 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期四, 15 一月 2026 10:39:31 +0800
Subject: [PATCH] 1.修复: CEID 校验恒通过:ceidDefined 返回 true,PauseEvent ID 不做有效性检查。Host 若下发无效 CEID,将被接受但运行时无法触发暂停,风险难以察觉。 指定事件发生时暂停;

---
 SourceCode/Bond/Servo/CPanelProduction.cpp |   62 +++++++++++++++++++++++++------
 1 files changed, 50 insertions(+), 12 deletions(-)

diff --git a/SourceCode/Bond/Servo/CPanelProduction.cpp b/SourceCode/Bond/Servo/CPanelProduction.cpp
index bbc5900..f3a5ab2 100644
--- a/SourceCode/Bond/Servo/CPanelProduction.cpp
+++ b/SourceCode/Bond/Servo/CPanelProduction.cpp
@@ -22,6 +22,9 @@
 	m_hPlaceholder = nullptr;
 	m_bShiftSummaryValid = FALSE;
 	m_pStatsThread = nullptr;
+	m_pAccordionWnd = nullptr;
+	m_pPageProdOverview = nullptr;
+	m_pPageCtrlState = nullptr;
 }
 
 CPanelProduction::~CPanelProduction()
@@ -62,6 +65,31 @@
 	pLine1->SetLineColor(RGB(198, 198, 198));
 	pLine1->EnableResize();
 
+	CString strExpandIcon, strCloseIcon;
+	strExpandIcon.Format(_T("%s\\res\\arrow_down.ico"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir);
+	strCloseIcon.Format(_T("%s\\res\\arrow_right.ico"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir);
+
+	m_pAccordionWnd = CAccordionWnd::FromHandle(GetDlgItem(IDC_ACCORDION_WND1)->m_hWnd);
+	m_pAccordionWnd->SetBkgndColor(m_crBkgnd);
+	m_pAccordionWnd->SetFrameColor(RGB(220, 220, 200), TRUE);
+	m_pAccordionWnd->Setpadding(PADDING_LEFT, 2);
+	m_pAccordionWnd->Setpadding(PADDING_TOP, 2);
+	m_pAccordionWnd->Setpadding(PADDING_RIGHT, 2);
+	m_pAccordionWnd->Setpadding(PADDING_BOTTOM, 2);
+	m_pAccordionWnd->LoadExpandIcon(strExpandIcon, strCloseIcon);
+
+	m_pPageCtrlState = new CPageCtrlState();
+	m_pPageCtrlState->SetBackgroundColor(m_crBkgnd);
+	m_pPageCtrlState->Create(IDD_PROD_CTRL_STATE, GetDlgItem(IDC_ACCORDION_WND1));
+	m_pPageCtrlState->ShowWindow(SW_HIDE);
+	m_pAccordionWnd->AddItem("鐘舵��", m_pPageCtrlState, 120, TRUE, TRUE);
+
+	m_pPageProdOverview = new CPageProdOverview();
+	m_pPageProdOverview->SetBackgroundColor(m_crBkgnd);
+	m_pPageProdOverview->Create(IDD_PROD_OVERVIEW, GetDlgItem(IDC_ACCORDION_WND1));
+	m_pPageProdOverview->ShowWindow(SW_HIDE);
+	m_pAccordionWnd->AddItem("鐢熶骇鎬昏", m_pPageProdOverview, 280, TRUE, TRUE);
+
 	SetTimer(1, 1000 * 10, nullptr);
 	StartStatsThread();
 
@@ -91,6 +119,17 @@
 
 	CDialogEx::OnDestroy();
 
+	if (m_pPageCtrlState != nullptr) {
+		m_pPageCtrlState->DestroyWindow();
+		delete m_pPageCtrlState;
+		m_pPageCtrlState = nullptr;
+	}
+	if (m_pPageProdOverview != nullptr) {
+		m_pPageProdOverview->DestroyWindow();
+		delete m_pPageProdOverview;
+		m_pPageProdOverview = nullptr;
+	}
+
 	if (m_hbrBkgnd != nullptr) {
 		::DeleteObject(m_hbrBkgnd);
 	}
@@ -107,6 +146,9 @@
 	GetClientRect(&rcClient);
 	pItem = GetDlgItem(IDC_LINE1);
 	pItem->MoveWindow(rcClient.right - 3, 0, 3, rcClient.Height());
+
+	pItem = GetDlgItem(IDC_ACCORDION_WND1);
+	pItem->MoveWindow(5, 5, rcClient.Width() - 10, rcClient.Height() - 10);
 }
 
 #define PRODUCTION_PANEL_MIN_WIDTH		88
@@ -132,11 +174,12 @@
 	}
 }
 
-BOOL CPanelProduction::TryGetShiftSummary(ProductionShiftSummary& outSummary)
+BOOL CPanelProduction::TryGetDayNightSummaries(ProductionShiftSummary& outDay, ProductionShiftSummary& outNight)
 {
 	CSingleLock lock(&m_csShiftSummary, TRUE);
 	if (!m_bShiftSummaryValid) return FALSE;
-	outSummary = m_shiftSummary;
+	outDay = m_daySummary;
+	outNight = m_nightSummary;
 	return TRUE;
 }
 
@@ -173,10 +216,12 @@
 	for (;;) {
 		if (self->m_evStopStats.Lock(intervalMs)) break;
 
-		ProductionShiftSummary summary;
-		if (ProductionStats::ComputeCurrentShiftSummary(theApp.m_model.m_configuration, summary)) {
+		ProductionShiftSummary daySummary;
+		ProductionShiftSummary nightSummary;
+		if (ProductionStats::ComputeDayNightSummaries(theApp.m_model.m_configuration, daySummary, nightSummary)) {
 			CSingleLock lock(&self->m_csShiftSummary, TRUE);
-			self->m_shiftSummary = std::move(summary);
+			self->m_daySummary = std::move(daySummary);
+			self->m_nightSummary = std::move(nightSummary);
 			self->m_bShiftSummaryValid = TRUE;
 		}
 	}
@@ -187,12 +232,5 @@
 void CPanelProduction::OnTimer(UINT_PTR nIDEvent)
 {
 	// TODO: 鍦ㄦ娣诲姞娑堟伅澶勭悊绋嬪簭浠g爜鍜�/鎴栬皟鐢ㄩ粯璁ゅ��
-	if (nIDEvent == 1) {
-		ProductionShiftSummary outSummary;
-		if (TryGetShiftSummary(outSummary)) {
-			TRACE("OnTimer outSummary.output.pairsPass:%d\n", outSummary.output.pairsPass);
-		}
-	}
-
 	CDialogEx::OnTimer(nIDEvent);
 }

--
Gitblit v1.9.3