From 829fe6c6bc33d53fda9c31fd45a37e1df87befff Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期五, 30 一月 2026 11:16:24 +0800
Subject: [PATCH] Merge branch 'clh' into liuyang

---
 SourceCode/Bond/Servo/Servo.cpp |  207 +++++++++++++++++++++++++++++++++------------------
 1 files changed, 133 insertions(+), 74 deletions(-)

diff --git a/SourceCode/Bond/Servo/Servo.cpp b/SourceCode/Bond/Servo/Servo.cpp
index e6eb33a..c46246e 100644
--- a/SourceCode/Bond/Servo/Servo.cpp
+++ b/SourceCode/Bond/Servo/Servo.cpp
@@ -1,5 +1,5 @@
-
-// Servo.cpp : 定义应用程序的类行为。
+锘�
+// Servo.cpp : 瀹氫箟搴旂敤绋嬪簭鐨勭被琛屼负銆�
 //
 
 #include "stdafx.h"
@@ -7,15 +7,22 @@
 #include "ServoDlg.h"
 #include "ServoGraph.h"
 #include "AlarmManager.h"
-#include "SECSRuntimeManager.h"
-#include "ProductionLogManager.h"
+#include "TransferManager.h"
+#include "SystemLogManager.h"
+#include "UserManager.h"
+#include "RecipeManager.h"
 #include "VerticalLine.h"
+#include "HorizontalLine.h"
 #include "EqsGraphWnd.h"
 #include "MapPosWnd.h"
 #include "HmTab.h"
+#include "CControlJobManagerDlg.h"
+#include "ToolUnits.h"
+#include "CUserManager2.h"
+#include "AccordionWnd.h"
 
 
-// 声明全局变量,用于管理 GDI+ 初始化
+// 澹版槑鍏ㄥ眬鍙橀噺锛岀敤浜庣鐞� GDI+ 鍒濆鍖�
 ULONG_PTR g_diplusToken;
 GdiplusStartupInput g_diplusStartupInput;
 
@@ -31,34 +38,36 @@
 END_MESSAGE_MAP()
 
 
-// CServoApp 构造
+// CServoApp 鏋勯��
 
 CServoApp::CServoApp()
 {
-	// 支持重新启动管理器
+	// 鏀寔閲嶆柊鍚姩绠$悊鍣�
 	m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
 
-	// TODO: 在此处添加构造代码,
-	// 将所有重要的初始化放置在 InitInstance 中
+	// TODO: 鍦ㄦ澶勬坊鍔犳瀯閫犱唬鐮侊紝
+	// 灏嗘墍鏈夐噸瑕佺殑鍒濆鍖栨斁缃湪 InitInstance 涓�
+	m_nVersionNumber = 8;
+	m_strVersionName = _T("1.0.08");
 }
 
 
-// 唯一的一个 CServoApp 对象
+// 鍞竴鐨勪竴涓� CServoApp 瀵硅薄
 
 CServoApp theApp;
 
 
-// CServoApp 初始化
+// CServoApp 鍒濆鍖�
 
 BOOL CServoApp::InitInstance()
 {
-	// 如果一个运行在 Windows XP 上的应用程序清单指定要
-	// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
-	//则需要 InitCommonControlsEx()。  否则,将无法创建窗口。
+	// TODO: 璋冪敤 AfxInitRichEdit2() 浠ュ垵濮嬪寲 richedit2 搴撱�俓n"	// 濡傛灉涓�涓繍琛屽湪 Windows XP 涓婄殑搴旂敤绋嬪簭娓呭崟鎸囧畾瑕�
+	// 浣跨敤 ComCtl32.dll 鐗堟湰 6 鎴栨洿楂樼増鏈潵鍚敤鍙鍖栨柟寮忥紝
+	//鍒欓渶瑕� InitCommonControlsEx()銆�  鍚﹀垯锛屽皢鏃犳硶鍒涘缓绐楀彛銆�
 	INITCOMMONCONTROLSEX InitCtrls;
 	InitCtrls.dwSize = sizeof(InitCtrls);
-	// 将它设置为包括所有要在应用程序中使用的
-	// 公共控件类。
+	// 灏嗗畠璁剧疆涓哄寘鎷墍鏈夎鍦ㄥ簲鐢ㄧ▼搴忎腑浣跨敤鐨�
+	// 鍏叡鎺т欢绫汇��
 	InitCtrls.dwICC = ICC_WIN95_CLASSES;
 	InitCommonControlsEx(&InitCtrls);
 
@@ -67,24 +76,24 @@
 
 	AfxEnableControlContainer();
 
-	// 创建 shell 管理器,以防对话框包含
-	// 任何 shell 树视图控件或 shell 列表视图控件。
+	// 鍒涘缓 shell 绠$悊鍣紝浠ラ槻瀵硅瘽妗嗗寘鍚�
+	// 浠讳綍 shell 鏍戣鍥炬帶浠舵垨 shell 鍒楄〃瑙嗗浘鎺т欢銆�
 	CShellManager *pShellManager = new CShellManager;
 
-	// 激活“Windows Native”视觉管理器,以便在 MFC 控件中启用主题
+	// 婵�娲烩�淲indows Native鈥濊瑙夌鐞嗗櫒锛屼互渚垮湪 MFC 鎺т欢涓惎鐢ㄤ富棰�
 	CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
 
-	// 标准初始化
-	// 如果未使用这些功能并希望减小
-	// 最终可执行文件的大小,则应移除下列
-	// 不需要的特定初始化例程
-	// 更改用于存储设置的注册表项
-	// TODO: 应适当修改该字符串,
-	// 例如修改为公司或组织名
-	SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
+	// 鏍囧噯鍒濆鍖�
+	// 濡傛灉鏈娇鐢ㄨ繖浜涘姛鑳藉苟甯屾湜鍑忓皬
+	// 鏈�缁堝彲鎵ц鏂囦欢鐨勫ぇ灏忥紝鍒欏簲绉婚櫎涓嬪垪
+	// 涓嶉渶瑕佺殑鐗瑰畾鍒濆鍖栦緥绋�
+	// 鏇存敼鐢ㄤ簬瀛樺偍璁剧疆鐨勬敞鍐岃〃椤�
+	// TODO: 搴旈�傚綋淇敼璇ュ瓧绗︿覆锛�
+	// 渚嬪淇敼涓哄叕鍙告垨缁勭粐鍚�
+	SetRegistryKey(_T("搴旂敤绋嬪簭鍚戝鐢熸垚鐨勬湰鍦板簲鐢ㄧ▼搴�"));
 
 
-	// 本程序文件目录
+	// 鏈▼搴忔枃浠剁洰褰�
 	TCHAR sDrive[_MAX_DRIVE];
 	TCHAR sDir[_MAX_DIR];
 	TCHAR sFilename[_MAX_FNAME], sAppFilename[_MAX_FNAME];
@@ -96,64 +105,102 @@
 	m_model.setWorkDir((LPTSTR)(LPCTSTR)m_strAppDir);
 
 
-	// 注册控件
+	// 鐢ㄦ埛鏁版嵁搴撶鐞�
+	CString strDir = m_strAppDir + _T("\\DB");
+	CUserManager2::getInstance().init((LPTSTR)(LPCTSTR)strDir);
+
+
+	// 娉ㄥ唽鎺т欢
 	CServoGraph::RegisterWndClass();
 	CVerticalLine::RegisterWndClass();
+	CHorizontalLine::RegisterWndClass();
 	CEqsGraphWnd::RegisterWndClass();
 	CMapPosWnd::RegisterWndClass();
 	CHmTab::RegisterWndClass();
+	CAccordionWnd::RegisterWndClass();
 
 
-	// 初始化Rx库
+	// 鍒濆鍖朢x搴�
 	RX_Init();
 	HSMS_Initialize();
 
 
-	// 初始化 GDI+
+	// 鍒濆鍖� GDI+
 	InitGDIPlus();
 
 
-	// 初始化报警管理器
+	// 鍒濆鍖� MFC RichEdit 鎺т欢
+	AfxInitRichEdit2();
+
+
+	// 鍒濆鍖栨姤璀︾鐞嗗櫒
 	try {
 		if (!AlarmManager::getInstance().initAlarmTable()) {
-			AfxMessageBox("初始化报警管理器失败!");
+			AfxMessageBox("鍒濆鍖栨姤璀︾鐞嗗櫒澶辫触锛�");
 			return FALSE;
 		}
 	}
 	catch (const std::exception& ex) {
 		CString errorMsg;
-		errorMsg.Format(_T("初始化报警管理器失败:%s"), CString(ex.what()));
+		errorMsg.Format(_T("鍒濆鍖栨姤璀︾鐞嗗櫒澶辫触锛�%s"), CString(ex.what()));
 		AfxMessageBox(errorMsg, MB_ICONERROR);
 		return FALSE;
 	}
-	AlarmManager::getInstance().insertMockData();
 
-
-	// 初始化生产履历管理器
-	//try {
-	//	if (!ProductionLogManager::getInstance().initProductionTable()) {
-	//		AfxMessageBox("初始化生产履历管理器失败!");
-	//		return FALSE;
-	//	}
-	//}
-	//catch (const std::exception& ex) {
-	//	CString errorMsg;
-	//	errorMsg.Format(_T("初始化生产履历管理器失败:%s"), CString(ex.what()));
-	//	AfxMessageBox(errorMsg, MB_ICONERROR);
-	//	return FALSE;
-	//}
-
-
-	// 初始化SECS运行设置管理库
+	// 鍒濆鍖栨惉杩愯褰曠鐞嗗簱
 	try {
-		if (!SECSRuntimeManager::getInstance().initRuntimeSetting()) {
-			AfxMessageBox("初始化SECS运行设置失败!");
+		if (!TransferManager::getInstance().initTransferTable()) {
+			AfxMessageBox("鍒濆鍖栨惉杩愯褰曠鐞嗗簱璁剧疆澶辫触锛�");
 			return FALSE;
 		}
 	}
 	catch (const std::exception& ex) {
 		CString errorMsg;
-		errorMsg.Format(_T("初始化SECS运行设置失败:%s"), CString(ex.what()));
+		errorMsg.Format(_T("鍒濆鍖栨惉杩愯褰曠鐞嗗簱璁剧疆澶辫触锛�%s"), CString(ex.what()));
+		AfxMessageBox(errorMsg, MB_ICONERROR);
+		return FALSE;
+	}
+
+	// 鍒濆鍖栬繍琛屾棩蹇楃鐞嗗簱
+	try {
+		if (!SystemLogManager::getInstance().initSystemLogTable()) {
+			AfxMessageBox("鍒濆鍖栬繍琛屾棩蹇楃鐞嗗簱澶辫触锛�");
+			return FALSE;
+		}
+	}
+	catch (const std::exception& ex) {
+		CString errorMsg;
+		errorMsg.Format(_T("鍒濆鍖栬繍琛屾棩蹇楃鐞嗗簱澶辫触锛�%s"), CString(ex.what()));
+		AfxMessageBox(errorMsg, MB_ICONERROR);
+		return FALSE;
+	}
+
+	// 鍒濆鍖栫敤鎴风鐞嗗簱
+	try {
+		UserManager& userManager = UserManager::getInstance();
+#if !defined(_DEBUG)
+		userManager.initializeIdleDetection(AfxGetMainWnd()->m_hWnd);
+		SetTimer(1, 60000, nullptr);
+#endif
+		userManager.loadSession();
+	}
+	catch (const std::exception& ex) {
+		CString errorMsg;
+		errorMsg.Format(_T("鍒濆鍖栫敤鎴风鐞嗗簱澶辫触锛�%s"), CString(ex.what()));
+		AfxMessageBox(errorMsg, MB_ICONERROR);
+		return FALSE;
+	}
+
+	// 鍒濆鍖栭厤鏂圭鐞嗗簱
+	try {
+		if (!RecipeManager::getInstance().initRecipeTable()) {
+			AfxMessageBox("鍒濆鍖栭厤鏂圭鐞嗗簱澶辫触锛�");
+			return FALSE;
+		}
+	}
+	catch (const std::exception& ex) {
+		CString errorMsg;
+		errorMsg.Format(_T("鍒濆鍖栭厤鏂圭鐞嗗簱澶辫触锛�%s"), CString(ex.what()));
 		AfxMessageBox(errorMsg, MB_ICONERROR);
 		return FALSE;
 	}
@@ -164,62 +211,74 @@
 	INT_PTR nResponse = dlg.DoModal();
 	if (nResponse == IDOK)
 	{
-		// TODO: 在此放置处理何时用
-		//  “确定”来关闭对话框的代码
+		// TODO: 鍦ㄦ鏀剧疆澶勭悊浣曟椂鐢�
+		//  鈥滅‘瀹氣�濇潵鍏抽棴瀵硅瘽妗嗙殑浠g爜
 	}
 	else if (nResponse == IDCANCEL)
 	{
-		// TODO: 在此放置处理何时用
-		//  “取消”来关闭对话框的代码
+		// TODO: 鍦ㄦ鏀剧疆澶勭悊浣曟椂鐢�
+		//  鈥滃彇娑堚�濇潵鍏抽棴瀵硅瘽妗嗙殑浠g爜
 	}
 	else if (nResponse == -1)
 	{
-		TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n");
-		TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n");
+		TRACE(traceAppMsg, 0, "璀﹀憡: 瀵硅瘽妗嗗垱寤哄け璐ワ紝搴旂敤绋嬪簭灏嗘剰澶栫粓姝€�俓n");
+		TRACE(traceAppMsg, 0, "璀﹀憡: 濡傛灉鎮ㄥ湪瀵硅瘽妗嗕笂浣跨敤 MFC 鎺т欢锛屽垯鏃犳硶 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS銆俓n");
 	}
 
-	// 删除上面创建的 shell 管理器。
+	// 鍒犻櫎涓婇潰鍒涘缓鐨� shell 绠$悊鍣ㄣ��
 	if (pShellManager != NULL)
 	{
 		delete pShellManager;
 	}
 
-	// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
-	//  而不是启动应用程序的消息泵。
+	// 鐢变簬瀵硅瘽妗嗗凡鍏抽棴锛屾墍浠ュ皢杩斿洖 FALSE 浠ヤ究閫�鍑哄簲鐢ㄧ▼搴忥紝
+	//  鑰屼笉鏄惎鍔ㄥ簲鐢ㄧ▼搴忕殑娑堟伅娉点��
 	return FALSE;
 }
 
 int CServoApp::ExitInstance()
 {
+	CControlJobManagerDlg::FreeState();
 	m_model.term();
 	HSMS_Term();
 	RX_Term();
+	UX_Shutdown();
 
-	// 清理 GDI+
+	// 娓呯悊 GDI+
 	TermGDIPlus();
 
-	// 销毁报警表
+	// 閿�姣佹姤璀﹁〃
 	AlarmManager::getInstance().termAlarmTable();
 
-	// 销毁生产表
-	ProductionLogManager::getInstance().termProductionTable();
+	// 閿�姣佹惉杩愯褰曠鐞嗗簱
+	TransferManager::getInstance().termTransferTable();
 
-	// 销毁SECS运行设置管理库
-	SECSRuntimeManager::getInstance().termRuntimeSetting();
+	// 閿�姣佽繍琛屾棩蹇�
+	SystemLogManager::getInstance().termSystemLogTable();
+
+	// 閿�姣佺敤鎴疯〃
+#if !defined(_DEBUG)
+// 娓呴櫎 UserManager 鐨勬棤鎿嶄綔妫�娴�
+	UserManager::getInstance().terminateIdleDetection();
+	KillTimer(1);
+#endif
+
+	// 閿�姣侀厤鏂硅〃
+	RecipeManager::getInstance().termRecipeTable();
 
 	return CWinApp::ExitInstance();
 }
 
-// 初始化 GDI+
+// 鍒濆鍖� GDI+
 void CServoApp::InitGDIPlus()
 {
-	// 初始化 GDI+ 图形库
+	// 鍒濆鍖� GDI+ 鍥惧舰搴�
 	GdiplusStartup(&g_diplusToken, &g_diplusStartupInput, NULL);
 }
 
-// 清理 GDI+
+// 娓呯悊 GDI+
 void CServoApp::TermGDIPlus()
 {
-	// 清理 GDI+ 图形库
+	// 娓呯悊 GDI+ 鍥惧舰搴�
 	GdiplusShutdown(g_diplusToken);
 }
\ No newline at end of file

--
Gitblit v1.9.3