Explorar o código

准备开始进行数据库商品数据的处理

张洋 %!s(int64=4) %!d(string=hai) anos
pai
achega
d711ff1b8d

BIN=BIN
bin/Win32/Debug/zhipuzi_pos_windows/db/pos.db


+ 16 - 1
bin/Win32/Debug/zhipuzi_pos_windows/skin/login.xml

@@ -12,7 +12,7 @@
 		
 		<HorizontalLayout height="90">
 			<Control></Control>
-			<HorizontalLayout bkimage="file='logo_guanwang.png'" width="179" height="55" padding="0,22,0,0"></HorizontalLayout>
+			<HorizontalLayout bkimage="file='logo_guanwang.png'" width="202" height="43" padding="0,20,0,0"></HorizontalLayout>
 			<Control></Control>
 		</HorizontalLayout>
 		
@@ -51,6 +51,21 @@
 			<Label text="登录中..." align="center" padding="0,150,0,0" font="0"></Label>
 		</VerticalLayout>
 		
+		<VerticalLayout name="login_init_data_ing" height="200">
+			<HorizontalLayout height="150">
+				<Control></Control>
+				<VerticalLayout width="24" padding="0,80,0,0">
+					<Control></Control>
+					<HorizontalLayout height="24">
+						<GifAnim bkimage="loading.gif" autosize="true"></GifAnim>
+					</HorizontalLayout>
+					<Control></Control>
+				</VerticalLayout>
+				<Control></Control>
+			</HorizontalLayout>
+			<Label text="服务器数据同步中,请稍后..." align="center" font="0"></Label>
+		</VerticalLayout>
+		
 		<HorizontalLayout height="50">
 			<Control></Control>
 			<Label name="loginresult" width="400" height="50" multiline="true" text="" visible="false" textcolor="#FF0000" align="center" />

+ 1 - 0
zhipuzi_pos_windows/helper/define.h

@@ -12,5 +12,6 @@
 #define WM_ORDERLIST_REFRESH 10008
 
 #define WM_LOGIN_AGAIN_OUT 10009
+#define WM_LOGIN_START_INIT_DATA 10010
 
 

+ 1 - 1
zhipuzi_pos_windows/tool/CSetting.cpp

@@ -118,7 +118,7 @@ void CSetting::Init()
 {
 	//先读取数据库的数据
 	CSqlite3 sqllite;
-	sqllite.InitConfig();
+	sqllite.InitDB();
 
 	//再对数据进行初始化,如果没有记录的就加上默认设置
 	m_mutex.lock();

+ 200 - 178
zhipuzi_pos_windows/tool/CSqlite3.cpp

@@ -44,102 +44,129 @@ CSqlite3::~CSqlite3()
     }
 }
 
-bool CSqlite3::InitConfig()
+bool CSqlite3::InitDB()
 {
-    //检查有没有pos_config这个表,如果没有就创建
-    std::string sql = "SELECT COUNT(*) FROM sqlite_master where type = 'table' and name = 'pos_config';";
-    sqlite3_stmt * stmt = NULL;
+    //先处理pos_config表
+	bool ret = this->InitPosConfig();
+	if (!ret)
+	{
+		return false;
+	}
 
-    if(sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
-    {
-        if(sqlite3_step(stmt) == SQLITE_ROW)
-        {
-            int count = sqlite3_column_int(stmt, 0);
-
-            if(count == 0)
-            {
-                //说明没找到这个表,那么这个时候新建这个表,先释放前面的stmt
-                sqlite3_finalize(stmt);
-                stmt = NULL;
-
-                sql = "CREATE TABLE pos_config("  \
-                      "name  CHAR(100)  UNIQUE       NOT NULL," \
-                      "value CHAR(2000)              NOT NULL);";
-
-                if(sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
-                {
-                    //执行该语句
-                    if(sqlite3_step(stmt) != SQLITE_DONE)
-                    {
-                        LOG_INFO("create table fail: " << sqlite3_errmsg(m_db));
-
-                        sqlite3_finalize(stmt);
-                        return false;
-                    }
-
-                    //走到这里就是表创建成功了
-                    //LOG_INFO("create table success");
-                    sqlite3_finalize(stmt);
-                }
-
-                else
-                {
-                    LOG_INFO("create table prepare fail: " << sqlite3_errmsg(m_db));
-
-                    sqlite3_finalize(stmt);
-
-                    return false;
-                }
-            }
-
-            else
-            {
-                //说明已经有这个表了,就不用再创建了
-                sqlite3_finalize(stmt);
-            }
-
-            std::string sql = "SELECT * FROM pos_config;";
-            sqlite3_stmt * stmt = NULL;
-
-            if(sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
-            {
-                while(sqlite3_step(stmt) == SQLITE_ROW)
-                {
-                    std::string name = (char*)sqlite3_column_text(stmt, 0);
-                    std::string value = (char*)sqlite3_column_text(stmt, 1);
-
-                    CSetting::SetParam(name, value, false);
-                }
-
-                sqlite3_finalize(stmt);
-            }
-
-            else
-            {
-                //异常情况
-                sqlite3_finalize(stmt);
-                return false;
-            }
-        }
-
-        else
-        {
-            //异常情况
-            sqlite3_finalize(stmt);
-            return false;
-        }
-    }
+	//再处理pos_chufang_printer表
+	ret = this->InitPosChufangPrinter();
+	if (!ret)
+	{
+		return false;
+	}
 
-    else
-    {
-        //异常情况
-        sqlite3_finalize(stmt);
-        return false;
-    }
+	//再处理pos_user表
+	ret = this->InitPosUser();
+	if (!ret)
+	{
+		return false;
+	}
 
-    sql = "SELECT COUNT(*) FROM sqlite_master where type = 'table' and name = 'pos_chufang_printer';";
+	return true;
+}
+
+bool CSqlite3::InitPosConfig()
+{
+	//检查有没有pos_config这个表,如果没有就创建
+	std::string sql = "SELECT COUNT(*) FROM sqlite_master where type = 'table' and name = 'pos_config';";
+	sqlite3_stmt * stmt = NULL;
 
-    //读取厨房打印机的参数
+	if (sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
+	{
+		if (sqlite3_step(stmt) == SQLITE_ROW)
+		{
+			int count = sqlite3_column_int(stmt, 0);
+
+			if (count == 0)
+			{
+				//说明没找到这个表,那么这个时候新建这个表,先释放前面的stmt
+				sqlite3_finalize(stmt);
+				stmt = NULL;
+
+				sql = "CREATE TABLE pos_config("  \
+					"name  CHAR(100)  UNIQUE       NOT NULL," \
+					"value CHAR(2000)              NOT NULL);";
+
+				if (sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
+				{
+					//执行该语句
+					if (sqlite3_step(stmt) != SQLITE_DONE)
+					{
+						LOG_INFO("create table fail: " << sqlite3_errmsg(m_db));
+
+						sqlite3_finalize(stmt);
+						return false;
+					}
+
+					//走到这里就是表创建成功了
+					//LOG_INFO("create table success");
+					sqlite3_finalize(stmt);
+				}
+				else
+				{
+					LOG_INFO("create table prepare fail: " << sqlite3_errmsg(m_db));
+
+					sqlite3_finalize(stmt);
+
+					return false;
+				}
+			}
+			else
+			{
+				//说明已经有这个表了,就不用再创建了
+				sqlite3_finalize(stmt);
+			}
+
+			std::string sql = "SELECT * FROM pos_config;";
+			sqlite3_stmt * stmt = NULL;
+
+			if (sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
+			{
+				while (sqlite3_step(stmt) == SQLITE_ROW)
+				{
+					std::string name = (char*)sqlite3_column_text(stmt, 0);
+					std::string value = (char*)sqlite3_column_text(stmt, 1);
+
+					CSetting::SetParam(name, value, false);
+				}
+
+				sqlite3_finalize(stmt);
+			}
+			else
+			{
+				//异常情况
+				sqlite3_finalize(stmt);
+				return false;
+			}
+		}
+		else
+		{
+			//异常情况
+			sqlite3_finalize(stmt);
+			return false;
+		}
+	}
+	else
+	{
+		//异常情况
+		sqlite3_finalize(stmt);
+		return false;
+	}
+
+	return true;
+}
+
+bool CSqlite3::InitPosChufangPrinter()
+{
+	std::string sql = "SELECT COUNT(*) FROM sqlite_master where type = 'table' and name = 'pos_chufang_printer';";
+	sqlite3_stmt * stmt = NULL;
+
+	//读取厨房打印机的参数
 	if (sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
 	{
 		if (sqlite3_step(stmt) == SQLITE_ROW)
@@ -178,7 +205,6 @@ bool CSqlite3::InitConfig()
 					LOG_INFO("create table success");
 					sqlite3_finalize(stmt);
 				}
-
 				else
 				{
 					LOG_INFO("create table prepare fail: " << sqlite3_errmsg(m_db));
@@ -188,7 +214,6 @@ bool CSqlite3::InitConfig()
 					return false;
 				}
 			}
-
 			else
 			{
 				//说明已经有这个表了,就不用再创建了
@@ -233,17 +258,15 @@ bool CSqlite3::InitConfig()
 							LOG_INFO("alter table success");
 							sqlite3_finalize(stmt);
 						}
-
 						else
 						{
 							LOG_INFO("alter table prepare fail: " << sqlite3_errmsg(m_db));
 
 							sqlite3_finalize(stmt);
 
-							return false;;
+							return false;
 						}
 					}
-
 					else
 					{
 						LOG_INFO("fount field");
@@ -253,7 +276,6 @@ bool CSqlite3::InitConfig()
 					}
 				}
 			}
-
 			else
 			{
 				//异常情况
@@ -308,7 +330,6 @@ bool CSqlite3::InitConfig()
 							return false;;
 						}
 					}
-
 					else
 					{
 						LOG_INFO("fount field");
@@ -318,7 +339,6 @@ bool CSqlite3::InitConfig()
 					}
 				}
 			}
-
 			else
 			{
 				//异常情况
@@ -347,7 +367,6 @@ bool CSqlite3::InitConfig()
 
 				sqlite3_finalize(stmt);
 			}
-
 			else
 			{
 				//异常情况
@@ -357,86 +376,89 @@ bool CSqlite3::InitConfig()
 		}
 	}
 
-    sql = "SELECT COUNT(*) FROM sqlite_master where type = 'table' and name = 'pos_user';";
+	return true;
+}
 
-    //读取厨房打印机的参数
-    if(sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
-    {
-        if(sqlite3_step(stmt) == SQLITE_ROW)
-        {
-            int count = sqlite3_column_int(stmt, 0);
-
-            if(count == 0)
-            {
-                //说明没找到这个表,那么这个时候新建这个表,先释放前面的stmt
-                sqlite3_finalize(stmt);
-                stmt = NULL;
-
-                sql = "CREATE TABLE pos_user("  \
-                      "id         INTEGER          PRIMARY KEY AUTOINCREMENT,"\
-                      "username       CHAR(100)        NOT NULL," \
-                      "password         CHAR(100)        NOT NULL);";
-
-                if(sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
-                {
-                    //执行该语句
-                    if(sqlite3_step(stmt) != SQLITE_DONE)
-                    {
-                        std::string err = sqlite3_errmsg(m_db);
-                        LOG_INFO("create table fail: " << err.c_str());
-
-                        sqlite3_finalize(stmt);
-                        return false;
-                    }
-
-                    //走到这里就是表创建成功了
-                    //LOG_INFO("create table success");
-                    sqlite3_finalize(stmt);
-                }
-
-                else
-                {
-                    LOG_INFO("create table prepare fail: " << sqlite3_errmsg(m_db));
-
-                    sqlite3_finalize(stmt);
-
-                    return false;
-                }
-            }
-
-            else
-            {
-                //说明已经有这个表了,就不用再创建了
-                sqlite3_finalize(stmt);
-            }
-
-            std::string sql = "SELECT * FROM pos_user;";
-            sqlite3_stmt * stmt = NULL;
-
-            if(sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
-            {
-                while(sqlite3_step(stmt) == SQLITE_ROW)
-                {
-                    std::string username = (char*)sqlite3_column_text(stmt, 1);
-                    std::string password = (char*)sqlite3_column_text(stmt, 2);
-
-                    //这里仅仅是把数据库内容读到内存,所以之类用false
-                    CSetting::SetUser(username, password);
-                }
-
-                sqlite3_finalize(stmt);
-            }
-
-            else
-            {
-                //异常情况
-                sqlite3_finalize(stmt);
-                return false;
-            }
-        }
-    }
+bool CSqlite3::InitPosUser()
+{
+	std::string sql = "SELECT COUNT(*) FROM sqlite_master where type = 'table' and name = 'pos_user';";
+	sqlite3_stmt * stmt = NULL;	
+
+	//读取厨房打印机的参数
+	if (sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
+	{
+		if (sqlite3_step(stmt) == SQLITE_ROW)
+		{
+			int count = sqlite3_column_int(stmt, 0);
+
+			if (count == 0)
+			{
+				//说明没找到这个表,那么这个时候新建这个表,先释放前面的stmt
+				sqlite3_finalize(stmt);
+				stmt = NULL;
+
+				sql = "CREATE TABLE pos_user("  \
+					"id         INTEGER          PRIMARY KEY AUTOINCREMENT,"\
+					"username       CHAR(100)        NOT NULL," \
+					"password         CHAR(100)        NOT NULL);";
+
+				if (sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
+				{
+					//执行该语句
+					if (sqlite3_step(stmt) != SQLITE_DONE)
+					{
+						std::string err = sqlite3_errmsg(m_db);
+						LOG_INFO("create table fail: " << err.c_str());
+
+						sqlite3_finalize(stmt);
+						return false;
+					}
+
+					//走到这里就是表创建成功了
+					//LOG_INFO("create table success");
+					sqlite3_finalize(stmt);
+				}
+				else
+				{
+					LOG_INFO("create table prepare fail: " << sqlite3_errmsg(m_db));
+
+					sqlite3_finalize(stmt);
+
+					return false;
+				}
+			}
+			else
+			{
+				//说明已经有这个表了,就不用再创建了
+				sqlite3_finalize(stmt);
+			}
+
+			std::string sql = "SELECT * FROM pos_user;";
+			sqlite3_stmt * stmt = NULL;
+
+			if (sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
+			{
+				while (sqlite3_step(stmt) == SQLITE_ROW)
+				{
+					std::string username = (char*)sqlite3_column_text(stmt, 1);
+					std::string password = (char*)sqlite3_column_text(stmt, 2);
+
+					//这里仅仅是把数据库内容读到内存,所以之类用false
+					CSetting::SetUser(username, password);
+				}
+
+				sqlite3_finalize(stmt);
+			}
+			else
+			{
+				//异常情况
+				sqlite3_finalize(stmt);
+				return false;
+			}
+		}
+	}
 
-    return true;
+	return true;
 }
 
 bool CSqlite3::SaveParams(std::map<std::string, std::string>& params)

+ 5 - 10
zhipuzi_pos_windows/tool/CSqlite3.h

@@ -11,22 +11,17 @@ public:
 	~CSqlite3();
 
 public:
-	bool InitConfig();
+	bool InitDB();
+
+	bool InitPosConfig();
+	bool InitPosChufangPrinter();
+	bool InitPosUser();
 
 	bool SaveParams(std::map<std::string, std::string>& params);
 
 	bool SaveChufangPrinter(std::vector<ChufangPrinter>& printers);
 
 	bool SaveUsers(std::map<string, string> users);
-
-	void Close()
-	{
-		if (m_db != NULL)
-		{
-			sqlite3_close(m_db);
-		}
-	}
-
 private:
 	int m_rc;
 

+ 98 - 27
zhipuzi_pos_windows/wnd/CLoginWnd.cpp

@@ -67,6 +67,9 @@ void CLoginWnd::Init()
 
 		CVerticalLayoutUI* pLoading = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("login_loading")));
 		pLoading->SetVisible(false);
+
+		CVerticalLayoutUI* pIniting = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("login_init_data_ing")));
+		pIniting->SetVisible(false);
 	}
 
 	if (m_mode == 2)
@@ -326,19 +329,19 @@ LRESULT CLoginWnd::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool&
     }
 	else if (uMsg == WM_LOGIN_SUCCESS)
 	{
-		LoginSuccess();
+		ShowLoginSuccess();
 		return true;
 	}
 	else if (uMsg == WM_LOGIN_ERROR)
 	{
-		LoginError();
+		ShowLoginError();
 		return true;
 	}
 	else if (uMsg == WM_NEED_UPDATE)
 	{
 		//说明需要升级了
 
-		Update();
+		ShowUpdate();
 
 		return true;
 	}
@@ -348,6 +351,10 @@ LRESULT CLoginWnd::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool&
 
 		return true;
 	}
+	else if (uMsg == WM_LOGIN_START_INIT_DATA)
+	{
+		ShowInitData();
+	}
 
     return false;
 }
@@ -361,6 +368,9 @@ void CLoginWnd::StartLogin()
 	CVerticalLayoutUI* pLoading = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("login_loading")));
 	pLoading->SetVisible(true);
 
+	CVerticalLayoutUI* pIniting = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("login_init_data_ing")));
+	pIniting->SetVisible(false);
+
 	CLabelUI* pLoginResultLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("loginresult")));
 	pLoginResultLabel->SetVisible(false);
 
@@ -379,9 +389,7 @@ void CLoginWnd::HandleLogin()
 	bool ret = CZhipuziHttpClient::RequestPingtaiNew("/version/getwindowsposversion", params, response);
 	if (!ret)
 	{
-		pLoginResultLabel->SetText(std::wstring(_T("网络请求出错")).c_str());
-		pLoginResultLabel->SetVisible(true);
-
+		m_wsLoginErrMsg = _T("网络请求出错");
 		PostMessage(WM_LOGIN_ERROR);
 
 		return;
@@ -392,9 +400,7 @@ void CLoginWnd::HandleLogin()
 
 	if (document.HasParseError())
 	{
-		pLoginResultLabel->SetText(std::wstring(_T("服务器返回数据格式错误")).c_str());
-		pLoginResultLabel->SetVisible(true);
-
+		m_wsLoginErrMsg = _T("服务器返回数据格式错误");
 		PostMessage(WM_LOGIN_ERROR);
 
 		return;
@@ -403,9 +409,7 @@ void CLoginWnd::HandleLogin()
 	{
 		if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
 		{
-			pLoginResultLabel->SetText(std::wstring(_T("服务器返回数据格式错误")).c_str());
-			pLoginResultLabel->SetVisible(true);
-
+			m_wsLoginErrMsg = _T("服务器返回数据格式错误");
 			PostMessage(WM_LOGIN_ERROR);
 
 			return;
@@ -416,9 +420,7 @@ void CLoginWnd::HandleLogin()
 		if (errcode != 0)
 		{
 			std::string errmsg = "response failed! message:" + string(document["errmsg"].GetString());
-			pLoginResultLabel->SetText(CLewaimaiString::UTF8ToUnicode(errmsg).c_str());
-			pLoginResultLabel->SetVisible(true);
-
+			m_wsLoginErrMsg = CLewaimaiString::UTF8ToUnicode(errmsg);
 			PostMessage(WM_LOGIN_ERROR);
 
 			return;
@@ -464,9 +466,7 @@ void CLoginWnd::HandleLogin()
 
 	if (s_account.compare("") == 0)
 	{
-		pLoginResultLabel->SetText(std::wstring(_T("用户名不能为空")).c_str());
-		pLoginResultLabel->SetVisible(true);
-
+		m_wsLoginErrMsg = _T("用户名不能为空");
 		PostMessage(WM_LOGIN_ERROR);
 
 		return;
@@ -474,9 +474,7 @@ void CLoginWnd::HandleLogin()
 
 	if (s_password.compare("") == 0)
 	{
-		pLoginResultLabel->SetText(std::wstring(_T("密码不能为空")).c_str());
-		pLoginResultLabel->SetVisible(true);
-
+		m_wsLoginErrMsg = _T("密码不能为空");
 		PostMessage(WM_LOGIN_ERROR);
 
 		return;
@@ -530,6 +528,12 @@ void CLoginWnd::HandleLogin()
 		//把用户名和密码保存起来
 		CSetting::SetLoginInfo(s_account, s_password);
 
+		//发送一个消息,更新界面状态
+		PostMessage(WM_LOGIN_START_INIT_DATA);
+
+		//然后进行服务器数据的同步,同步完成了才切换到收银系统主页面
+		this->HandleInitData();
+
 		PostMessage(WM_LOGIN_SUCCESS);
 
 		return;
@@ -537,16 +541,14 @@ void CLoginWnd::HandleLogin()
     else
     {
         //登录失败了
-		pLoginResultLabel->SetText(std::wstring(_T("登录失败:") + CLewaimaiString::UTF8ToUnicode(errmsg)).c_str());
-        pLoginResultLabel->SetVisible(true);
-
+		m_wsLoginErrMsg = std::wstring(_T("登录失败:") + CLewaimaiString::UTF8ToUnicode(errmsg));
 		PostMessage(WM_LOGIN_ERROR);
 
 		return;
     }
 }
 
-void CLoginWnd::LoginSuccess()
+void CLoginWnd::ShowLoginSuccess()
 {
 	CMainWnd* pFrame = new CMainWnd();
 	if (pFrame == NULL)
@@ -563,7 +565,7 @@ void CLoginWnd::LoginSuccess()
 	Close();
 }
 
-void CLoginWnd::LoginError()
+void CLoginWnd::ShowLoginError()
 {
 	CVerticalLayoutUI* pInput = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("login_input")));
 	pInput->SetVisible(true);
@@ -571,11 +573,15 @@ void CLoginWnd::LoginError()
 	CVerticalLayoutUI* pLoading = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("login_loading")));
 	pLoading->SetVisible(false);
 
+	CVerticalLayoutUI* pIniting = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("login_init_data_ing")));
+	pIniting->SetVisible(false);
+
 	CLabelUI* pLoginResultLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("loginresult")));
+	pLoginResultLabel->SetText(m_wsLoginErrMsg.c_str());
 	pLoginResultLabel->SetVisible(true);
 }
 
-void CLoginWnd::Update()
+void CLoginWnd::ShowUpdate()
 {
 	CUpdateWnd* pFrame = new CUpdateWnd();
 	if (pFrame == NULL)
@@ -608,3 +614,68 @@ void CLoginWnd::ShowLoginAgainOut()
 	pMessagebox->CenterWindow();
 	UINT ret = pMessagebox->ShowModal();
 }
+
+void CLoginWnd::ShowInitData()
+{
+	CVerticalLayoutUI* pInput = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("login_input")));
+	pInput->SetVisible(false);
+
+	CVerticalLayoutUI* pLoading = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("login_loading")));
+	pLoading->SetVisible(false);
+
+	CVerticalLayoutUI* pIniting = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("login_init_data_ing")));
+	pIniting->SetVisible(true);
+}
+
+void CLoginWnd::HandleInitData()
+{
+	std::map<string, string> params;
+
+	std::string response;
+	bool ret = CZhipuziHttpClient::Request("/goods/getallgoods", params, response);
+	if (!ret)
+	{
+		m_wsLoginErrMsg = _T("网络请求出错");
+		PostMessage(WM_LOGIN_ERROR);
+
+		return;
+	}
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		m_wsLoginErrMsg = _T("服务器返回数据格式错误");
+		PostMessage(WM_LOGIN_ERROR);
+
+		return;
+	}
+
+	//获得数据成功
+	rapidjson::Value& data = document["data"];
+
+	rapidjson::Value& v_goods_rows = data["goods_rows"];
+	rapidjson::Value& v_types_lv1_ids = data["types_lv1_ids"];
+	rapidjson::Value& v_food_package = data["food_package"];
+
+	//先处理商品的
+	for (rapidjson::SizeType i = 0; i < v_goods_rows.Size(); ++i)
+	{
+		rapidjson::Value& foodinfo = v_goods_rows[i];
+
+		std::string id = foodinfo["id"].GetString();
+	}
+
+	//再处理商品分类的
+	for (rapidjson::SizeType i = 0; i < v_types_lv1_ids.Size(); ++i)
+	{
+		rapidjson::Value& foodtypeinfo = v_types_lv1_ids[i];
+	}
+
+	//再处理商品套餐的
+	for (rapidjson::SizeType i = 0; i < v_food_package.Size(); ++i)
+	{
+		rapidjson::Value& foodpackageinfo = v_food_package[i];
+	}
+}

+ 18 - 5
zhipuzi_pos_windows/wnd/CLoginWnd.h

@@ -58,24 +58,37 @@ public:
 
 	void StartLogin();
 
-    void HandleLogin();
+	void ShowLoginSuccess();
 
-	void LoginSuccess();
+	//登录失败时候的错误信息展示
+	void ShowLoginError();
 
-	void LoginError();
-
-	void Update();
+	//处理程序升级
+	void ShowUpdate();
 
+	//被人挤下线了的处理
 	void ShowLoginAgainOut();
 
+	//展示开始同步数据的提示
+	void ShowInitData();
+
+	//登录的工作线程
+	void HandleLogin();
+
+	//处理服务器数据同步工作,把服务器数据存在本地数据库(商品数据等)
+	void HandleInitData();
+
 public:
     CPaintManagerUI m_pm;
 
+private:
 	std::string m_update_url;
 
 	//模式1:正常的展示登录页面 2:被人挤下线的
 	int m_mode = 1;
 
 	bool m_is_login_ing = false;
+
+	std::wstring m_wsLoginErrMsg;
 };
 

+ 22 - 22
zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj.filters

@@ -36,12 +36,6 @@
     <ClInclude Include="helper\define.h">
       <Filter>头文件</Filter>
     </ClInclude>
-    <ClInclude Include="network\CHttpClient.h">
-      <Filter>头文件</Filter>
-    </ClInclude>
-    <ClInclude Include="network\CZhipuziHttpClient.h">
-      <Filter>头文件</Filter>
-    </ClInclude>
     <ClInclude Include="helper\MD5.h">
       <Filter>头文件</Filter>
     </ClInclude>
@@ -57,9 +51,6 @@
     <ClInclude Include="order\CWaimaiOrder.h">
       <Filter>头文件</Filter>
     </ClInclude>
-    <ClInclude Include="network\CMessagePush.h">
-      <Filter>头文件</Filter>
-    </ClInclude>
     <ClInclude Include="wnd\CMainWnd.h">
       <Filter>头文件</Filter>
     </ClInclude>
@@ -87,9 +78,6 @@
     <ClInclude Include="wnd\CChufangSettingWnd.h">
       <Filter>头文件</Filter>
     </ClInclude>
-    <ClInclude Include="network\PosMessage.h">
-      <Filter>头文件</Filter>
-    </ClInclude>
     <ClInclude Include="wnd\CWaimaiOrderFailReasonWnd.h">
       <Filter>头文件</Filter>
     </ClInclude>
@@ -111,10 +99,22 @@
     <ClInclude Include="control\CFoodlistUI.h">
       <Filter>头文件</Filter>
     </ClInclude>
+    <ClInclude Include="control\CDiandanFoodItemUI.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="network\CHttpClient.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="network\CMessagePush.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="network\CZhipuziHttpClient.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
     <ClInclude Include="network\CZhipuziHttpProxy.h">
       <Filter>头文件</Filter>
     </ClInclude>
-    <ClInclude Include="control\CDiandanFoodItemUI.h">
+    <ClInclude Include="network\PosMessage.h">
       <Filter>头文件</Filter>
     </ClInclude>
   </ItemGroup>
@@ -137,12 +137,6 @@
     <ClCompile Include="helper\CSystem.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
-    <ClCompile Include="network\CHttpClient.cpp">
-      <Filter>源文件</Filter>
-    </ClCompile>
-    <ClCompile Include="network\CZhipuziHttpClient.cpp">
-      <Filter>源文件</Filter>
-    </ClCompile>
     <ClCompile Include="helper\MD5.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
@@ -155,9 +149,6 @@
     <ClCompile Include="order\CWaimaiOrder.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
-    <ClCompile Include="network\CMessagePush.cpp">
-      <Filter>源文件</Filter>
-    </ClCompile>
     <ClCompile Include="zhipuzi_pos_windows.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
@@ -209,6 +200,15 @@
     <ClCompile Include="control\CDiandanFoodItemUI.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
+    <ClCompile Include="network\CHttpClient.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="network\CMessagePush.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="network\CZhipuziHttpClient.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <Image Include="resource\zhipuzi.ico">