فهرست منبع

还剩一些收尾的

zhangyang 5 سال پیش
والد
کامیت
dc46c23866

BIN
bin/Win32/Debug/lewaimai_pos_windows/dump/2020-06-23-00-17-45.dmp


+ 12 - 0
bin/Win32/Debug/lewaimai_pos_windows/skin/chufang_printer_setting.xml

@@ -32,6 +32,18 @@
 				<Label text="分单打印" width="160" />
 				<Label text="分单打印" width="160" />
 				<CheckBox name="chufang_setting_fendan" padding="0,5,0,5" width="72" height="45" normalimage="file='switchbutton.png' source='0,0,143,91'" selectedimage="file='switchbutton.png' source='0,182,143,273'"/>
 				<CheckBox name="chufang_setting_fendan" padding="0,5,0,5" width="72" height="45" normalimage="file='switchbutton.png' source='0,0,143,91'" selectedimage="file='switchbutton.png' source='0,182,143,273'"/>
 			</HorizontalLayout>
 			</HorizontalLayout>
+
+			<HorizontalLayout height="56" valign="center">
+				<Label text="分类打印" width="160" />
+				<CheckBox name="chufang_setting_fenlei" padding="0,5,0,5" width="72" height="45" normalimage="file='switchbutton.png' source='0,0,143,91'" selectedimage="file='switchbutton.png' source='0,182,143,273'"/>
+			</HorizontalLayout>
+			
+			<VerticalLayout name="chufang_setting_fenlei_xuanze">
+				<Label text="请在下面勾选需要打印的商品分类" height="30"/>
+				<VerticalLayout name="chufang_setting_fenlei_xuanze_area">
+					
+				</VerticalLayout>
+			</VerticalLayout>
 		</VerticalLayout>
 		</VerticalLayout>
 		
 		
 		<HorizontalLayout height="56" valign="center" padding="0,30,0,20">
 		<HorizontalLayout height="56" valign="center" padding="0,30,0,20">

+ 4 - 2
bin/Win32/Debug/lewaimai_pos_windows/skin/setting.xml

@@ -146,10 +146,12 @@
 					</HorizontalLayout>
 					</HorizontalLayout>
 					<List name="setting_chufang_printer_list" bordersize="1" bordercolor="#FF000000" itemlinecolor="#FF000000" vscroll="true">
 					<List name="setting_chufang_printer_list" bordersize="1" bordercolor="#FF000000" itemlinecolor="#FF000000" vscroll="true">
 						<ListHeader />
 						<ListHeader />
-						<ListHeaderItem text="打印机名称" width="180" align="center" />
-						<ListHeaderItem text="IP地址" width="160" align="center" />
+						<ListHeaderItem text="打印机名称" width="200" align="center" />
+						<ListHeaderItem text="IP地址" width="200" align="center" />
 						<ListHeaderItem text="打印机规格" width="100" align="center" />
 						<ListHeaderItem text="打印机规格" width="100" align="center" />
 						<ListHeaderItem text="商品分单打印" width="100" align="center" />
 						<ListHeaderItem text="商品分单打印" width="100" align="center" />
+						<ListHeaderItem text="按商品分类打印" width="200" align="center" />
+						<ListHeaderItem text="关联商品分类" width="200" align="center" />
 						<ListHeaderItem text="操作" align="center" />
 						<ListHeaderItem text="操作" align="center" />
 					</List> 
 					</List> 
 				</VerticalLayout>
 				</VerticalLayout>

+ 7 - 3
bin/Win32/Debug/lewaimai_pos_windows/skin/setting_chufang_printer_item.xml

@@ -3,10 +3,14 @@
 <Window> 
 <Window> 
 	<ListContainerElement name="setting_chufang_printer_item" height="80"> 
 	<ListContainerElement name="setting_chufang_printer_item" height="80"> 
 		<HorizontalLayout> 
 		<HorizontalLayout> 
-			<Label name="setting_chufang_printer_item_name" width="180" align="center"/> 
-			<Label name="setting_chufang_printer_item_ip" width="160" align="center"/> 
+			<Label name="setting_chufang_printer_item_name" width="200" align="center"/> 
+			<Label name="setting_chufang_printer_item_ip" width="200" align="center"/> 
 			<Label name="setting_chufang_printer_guige" width="100" align="center"/>
 			<Label name="setting_chufang_printer_guige" width="100" align="center"/>
-			<Label name="setting_chufang_printer_fendan" width="100" align="center"/>
+			<Label name="setting_chufang_printer_fendan" width="100" align="center"/> 
+			<Label name="setting_chufang_printer_item_fenlei" width="200" align="center"/> 
+			<HorizontalLayout width="300" height="80" valign="center">
+				<Label name="setting_chufang_printer_item_fenlei_ids" width="300" multiline="true" align="center" valign="center"/> 
+			</HorizontalLayout>
 			<HorizontalLayout name="setting_chufang_printer_caozuo" align="center">
 			<HorizontalLayout name="setting_chufang_printer_caozuo" align="center">
 				<Control></Control>
 				<Control></Control>
 				<Button name="setting_chufang_printer_item_update_btn" align="center" width="26" height="27" padding="20,25,0,0" normalimage="file='Setting_Btn.png'" hotimage="file='Setting_Btn_Hover.png'" pushedimage="file='Setting_Btn_Active.png'" />
 				<Button name="setting_chufang_printer_item_update_btn" align="center" width="26" height="27" padding="20,25,0,0" normalimage="file='Setting_Btn.png'" hotimage="file='Setting_Btn_Hover.png'" pushedimage="file='Setting_Btn_Active.png'" />

+ 8 - 2
lewaimai_pos_windows/tool/CSetting.cpp

@@ -6,6 +6,8 @@
 std::map<std::string, std::string> CSetting::m_paramsMap;
 std::map<std::string, std::string> CSetting::m_paramsMap;
 std::vector<ChufangPrinter> CSetting::m_chufang_printers;
 std::vector<ChufangPrinter> CSetting::m_chufang_printers;
 std::mutex CSetting::m_mutex;
 std::mutex CSetting::m_mutex;
+std::vector<FoodType> CSetting::m_foodtypes;
+std::map<std::string, std::string> CSetting::m_foodtype_id_name;
 std::map<string, string> CSetting::m_users;
 std::map<string, string> CSetting::m_users;
 std::string CSetting::m_username;
 std::string CSetting::m_username;
 std::string CSetting::m_password;
 std::string CSetting::m_password;
@@ -44,7 +46,7 @@ std::string CSetting::GetParam(std::string name)
 	return value;
 	return value;
 }
 }
 
 
-void CSetting::AddChufangPrinter(std::string date, std::string name, std::string ip, std::string guige, std::string fendan, bool isSave)
+void CSetting::AddChufangPrinter(std::string date, std::string name, std::string ip, std::string guige, std::string fendan, std::string fenlei, std::string fenlei_ids, bool isSave)
 {
 {
 	ChufangPrinter newPrinter;
 	ChufangPrinter newPrinter;
 
 
@@ -53,6 +55,8 @@ void CSetting::AddChufangPrinter(std::string date, std::string name, std::string
 	newPrinter.ip = ip;
 	newPrinter.ip = ip;
 	newPrinter.guige = guige;
 	newPrinter.guige = guige;
 	newPrinter.fendan = fendan;
 	newPrinter.fendan = fendan;
+	newPrinter.fenlei = fenlei;
+	newPrinter.fenlei_ids = fenlei_ids;
 
 
 	m_chufang_printers.push_back(newPrinter);
 	m_chufang_printers.push_back(newPrinter);
 
 
@@ -62,7 +66,7 @@ void CSetting::AddChufangPrinter(std::string date, std::string name, std::string
 	}
 	}
 }
 }
 
 
-void CSetting::UpdateChufangPrinter(std::string date, std::string name, std::string ip, std::string guige, std::string fendan, bool isSave)
+void CSetting::UpdateChufangPrinter(std::string date, std::string name, std::string ip, std::string guige, std::string fendan, std::string fenlei, std::string fenlei_ids, bool isSave)
 {
 {
 	for (std::vector<ChufangPrinter>::iterator it = m_chufang_printers.begin(); it != m_chufang_printers.end(); it++)
 	for (std::vector<ChufangPrinter>::iterator it = m_chufang_printers.begin(); it != m_chufang_printers.end(); it++)
 	{
 	{
@@ -72,6 +76,8 @@ void CSetting::UpdateChufangPrinter(std::string date, std::string name, std::str
 			(*it).ip = ip;
 			(*it).ip = ip;
 			(*it).guige = guige;
 			(*it).guige = guige;
 			(*it).fendan = fendan;
 			(*it).fendan = fendan;
+			(*it).fenlei = fenlei;
+			(*it).fenlei_ids = fenlei_ids;
 
 
 			break;
 			break;
 		}
 		}

+ 36 - 2
lewaimai_pos_windows/tool/CSetting.h

@@ -10,6 +10,8 @@ public:
 	std::string ip;
 	std::string ip;
 	std::string guige;
 	std::string guige;
 	std::string fendan;
 	std::string fendan;
+	std::string fenlei;
+	std::string fenlei_ids;
 };
 };
 
 
 class FoodType
 class FoodType
@@ -30,8 +32,8 @@ public:
 	static std::string GetParam(std::string name);
 	static std::string GetParam(std::string name);
 
 
 	//厨房打印机相关的参数配置
 	//厨房打印机相关的参数配置
-	static void AddChufangPrinter(std::string date, std::string name, std::string ip, std::string guige, std::string fendan, bool isSave = true);
-	static void UpdateChufangPrinter(std::string date, std::string name, std::string ip, std::string guige, std::string fendan, bool isSave = true);
+	static void AddChufangPrinter(std::string date, std::string name, std::string ip, std::string guige, std::string fendan, std::string fenlei, std::string fenlei_ids, bool isSave = true);
+	static void UpdateChufangPrinter(std::string date, std::string name, std::string ip, std::string guige, std::string fendan, std::string fenlei, std::string fenlei_ids, bool isSave = true);
 	static void DelChufangPrinter(std::string date);
 	static void DelChufangPrinter(std::string date);
 
 
 	static ChufangPrinter GetChufangPrinter(std::string date);
 	static ChufangPrinter GetChufangPrinter(std::string date);
@@ -79,6 +81,33 @@ public:
 		return m_chufang_printers;
 		return m_chufang_printers;
 	}
 	}
 
 
+	static void AddFoodtype(std::string name, std::string type_id)
+	{
+		FoodType newFoodType;
+		newFoodType.name = name;
+		newFoodType.type_id = type_id;
+
+		m_foodtypes.push_back(newFoodType);
+
+		m_foodtype_id_name[type_id] = name;
+	}
+
+	static std::vector<FoodType>& GetFoodtype()
+	{
+		return m_foodtypes;
+	}
+
+	static std::string getFoodtypeName(std::string type_id)
+	{
+		if (m_foodtype_id_name.find(type_id) != m_foodtype_id_name.end())
+		{
+			return m_foodtype_id_name[type_id];
+		}
+
+		//返回这个表示没找到这个分类
+		return "zhipuzi_not_found_xxx";
+	}
+
 	static void SetLoginInfo(std::string username, std::string password)
 	static void SetLoginInfo(std::string username, std::string password)
 	{
 	{
 		m_username = username;
 		m_username = username;
@@ -113,6 +142,11 @@ private:
 
 
 	static std::mutex m_mutex;
 	static std::mutex m_mutex;
 
 
+	static std::vector<FoodType> m_foodtypes;
+
+	//从商品分类的id到name的映射
+	static std::map<std::string, std::string> m_foodtype_id_name;
+
 	static std::map<string, string> m_users;
 	static std::map<string, string> m_users;
 
 
 	static std::string m_username;
 	static std::string m_username;

+ 216 - 81
lewaimai_pos_windows/tool/CSqlite3.cpp

@@ -140,87 +140,222 @@ bool CSqlite3::InitConfig()
     sql = "SELECT COUNT(*) FROM sqlite_master where type = 'table' and name = 'pos_chufang_printer';";
     sql = "SELECT COUNT(*) FROM sqlite_master where type = 'table' and name = 'pos_chufang_printer';";
 
 
     //读取厨房打印机的参数
     //读取厨房打印机的参数
-    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_chufang_printer("  \
-                      "id         INTEGER          PRIMARY KEY AUTOINCREMENT,"\
-                      "date       CHAR(100)        NOT NULL," \
-                      "name       CHAR(100)        NOT NULL," \
-                      "ip         CHAR(100)        NOT NULL," \
-                      "guige      CHAR(100)        NOT NULL," \
-                      "fendan     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_chufang_printer;";
-            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 date = (char*)sqlite3_column_text(stmt, 1);
-                    std::string name = (char*)sqlite3_column_text(stmt, 2);
-                    std::string ip = (char*)sqlite3_column_text(stmt, 3);
-                    std::string guige = (char*)sqlite3_column_text(stmt, 4);
-                    std::string fendan = (char*)sqlite3_column_text(stmt, 5);
-
-                    //这里仅仅是把数据库内容读到内存,所以之类用false
-                    CSetting::AddChufangPrinter(date, name, ip, guige, fendan, false);
-                }
-
-                sqlite3_finalize(stmt);
-            }
-
-            else
-            {
-                //异常情况
-                sqlite3_finalize(stmt);
-                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_chufang_printer("  \
+					"id         INTEGER          PRIMARY KEY AUTOINCREMENT,"\
+					"date       CHAR(100)        NOT NULL," \
+					"name       CHAR(100)        NOT NULL," \
+					"ip         CHAR(100)        NOT NULL," \
+					"guige      CHAR(100)        NOT NULL," \
+					"fendan     CHAR(100)        NOT NULL," \
+					"fenlei     CHAR(100)        NOT NULL," \
+					"fenlei_ids CHAR(2000)              );";
+
+				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_pandduan = "select COUNT(*) from sqlite_master where type = 'table' and tbl_name = 'pos_chufang_printer' and sql like '%fenlei%';";
+			stmt = NULL;
+
+			if (sqlite3_prepare_v2(m_db, sql_pandduan.c_str(), -1, &stmt, NULL) == SQLITE_OK)
+			{
+				if (sqlite3_step(stmt) == SQLITE_ROW)
+				{
+					int count = sqlite3_column_int(stmt, 0);
+
+					if (count == 0)
+					{
+						//说明没找到这个字段,准备添加字段
+						LOG_INFO("not fount field");
+						sqlite3_finalize(stmt);
+						stmt = NULL;
+
+						sql = "ALTER TABLE pos_chufang_printer "  \
+							"add fenlei     CHAR(100)         NOT NULL DEFAULT '0';";
+
+						LOG_INFO("sql:" << sql.c_str());
+
+						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("alter table fail: " << err.c_str());
+
+								sqlite3_finalize(stmt);
+								return false;
+							}
+
+							//走到这里就是表创建成功了
+							LOG_INFO("alter table success");
+							sqlite3_finalize(stmt);
+						}
+
+						else
+						{
+							LOG_INFO("alter table prepare fail: " << sqlite3_errmsg(m_db));
+
+							sqlite3_finalize(stmt);
+
+							return false;;
+						}
+					}
+
+					else
+					{
+						LOG_INFO("fount field");
+
+						//说明已经有这2个字段了
+						sqlite3_finalize(stmt);
+					}
+				}
+			}
+
+			else
+			{
+				//异常情况
+				sqlite3_finalize(stmt);
+				return false;
+			}
+
+			sql_pandduan = "select COUNT(*) from sqlite_master where type = 'table' and tbl_name = 'pos_chufang_printer' and sql like '%fenlei_ids%';";
+			stmt = NULL;
+
+			if (sqlite3_prepare_v2(m_db, sql_pandduan.c_str(), -1, &stmt, NULL) == SQLITE_OK)
+			{
+				if (sqlite3_step(stmt) == SQLITE_ROW)
+				{
+					int count = sqlite3_column_int(stmt, 0);
+
+					if (count == 0)
+					{
+						//说明没找到这个字段,准备添加字段
+						LOG_INFO("not fount field");
+						sqlite3_finalize(stmt);
+						stmt = NULL;
+
+						sql = "ALTER TABLE pos_chufang_printer "  \
+							"add fenlei_ids CHAR(2000) NOT NULL DEFAULT '';";
+
+						LOG_INFO("sql:" << sql.c_str());
+
+						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("alter table fail: " << err.c_str());
+
+								sqlite3_finalize(stmt);
+								return false;
+							}
+
+							//走到这里就是表创建成功了
+							LOG_INFO("alter table success");
+							sqlite3_finalize(stmt);
+						}
+
+						else
+						{
+							LOG_INFO("alter table prepare fail: " << sqlite3_errmsg(m_db));
+
+							sqlite3_finalize(stmt);
+
+							return false;;
+						}
+					}
+
+					else
+					{
+						LOG_INFO("fount field");
+
+						//说明已经有这2个字段了
+						sqlite3_finalize(stmt);
+					}
+				}
+			}
+
+			else
+			{
+				//异常情况
+				sqlite3_finalize(stmt);
+				return false;
+			}
+
+			std::string sql = "SELECT * FROM pos_chufang_printer;";
+			stmt = NULL;
+
+			if (sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
+			{
+				while (sqlite3_step(stmt) == SQLITE_ROW)
+				{
+					std::string date = (char*)sqlite3_column_text(stmt, 1);
+					std::string name = (char*)sqlite3_column_text(stmt, 2);
+					std::string ip = (char*)sqlite3_column_text(stmt, 3);
+					std::string guige = (char*)sqlite3_column_text(stmt, 4);
+					std::string fendan = (char*)sqlite3_column_text(stmt, 5);
+					std::string fenlei = (char*)sqlite3_column_text(stmt, 6);
+					std::string fenlei_ids = (char*)sqlite3_column_text(stmt, 7);
+
+					//这里仅仅是把数据库内容读到内存,所以之类用false
+					CSetting::AddChufangPrinter(date, name, ip, guige, fendan, fenlei, fenlei_ids, false);
+				}
+
+				sqlite3_finalize(stmt);
+			}
+
+			else
+			{
+				//异常情况
+				sqlite3_finalize(stmt);
+				return false;
+			}
+		}
+	}
 
 
     sql = "SELECT COUNT(*) FROM sqlite_master where type = 'table' and name = 'pos_user';";
     sql = "SELECT COUNT(*) FROM sqlite_master where type = 'table' and name = 'pos_user';";
 
 

+ 127 - 31
lewaimai_pos_windows/wnd/CChufangSettingWnd.h

@@ -110,6 +110,70 @@ public:
 				fendan->Selected(false, false);
 				fendan->Selected(false, false);
 			}
 			}
 		}
 		}
+
+		CCheckBoxUI* fenlei = static_cast<CCheckBoxUI*>(m_pm.FindControl(_T("chufang_setting_fenlei")));
+		if (m_mode == 1)
+		{
+			fenlei->Selected(false, false);
+		}
+		else
+		{
+			ChufangPrinter updatePrinter = CSetting::GetChufangPrinter(m_printer_date);
+			if (updatePrinter.fenlei == "1")
+			{
+				fenlei->Selected(true, false);
+			}
+			else
+			{
+				fenlei->Selected(false, false);
+			}
+		}
+
+		//把所有分类显示出来
+		CVerticalLayoutUI* pLayout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("chufang_setting_fenlei_xuanze_area")));
+		pLayout->RemoveAll();
+
+		ChufangPrinter updatePrinter;
+
+		//这个map用于后面判断每个分类ID是否被选中
+		std::map<string, bool> ids_map;
+
+		if (m_mode == 2)
+		{
+			updatePrinter = CSetting::GetChufangPrinter(m_printer_date);
+			std::string foodtype_ids = updatePrinter.fenlei_ids;
+			std::vector<string> ids = CLewaimaiString::Split(foodtype_ids, ",");
+			for (std::vector<string>::iterator it = ids.begin(); it != ids.end(); it++)
+			{
+				ids_map[(*it)] = true;
+			}
+		}
+
+		std::vector<FoodType> foodtypes = CSetting::GetFoodtype();
+		for (std::vector<FoodType>::iterator it = foodtypes.begin(); it != foodtypes.end(); it++)
+		{
+			CDialogBuilder builder;
+			CListContainerElementUI* pEle = static_cast<CListContainerElementUI*>(builder.Create(_T("chufang_printer_setting_fenlei_select.xml"), (UINT)0, NULL, &m_pm));
+
+			CCheckBoxUI* pCheck = static_cast<CCheckBoxUI*>(pEle->FindSubControl(_T("chufang_setting_fenleli_xuanze_checkbox")));
+			pCheck->AddCustomAttribute(L"type_id", CLewaimaiString::UTF8ToUnicode((*it).type_id).c_str());
+
+			if (m_mode == 2)
+			{
+				if (ids_map.find((*it).type_id) != ids_map.end())
+				{
+					pCheck->Selected(true, false);
+				}
+			}
+
+			CLabelUI* pName = static_cast<CLabelUI*>(pEle->FindSubControl(_T("chufang_setting_fenleli_xuanze_name")));
+			pName->SetText(CLewaimaiString::UTF8ToUnicode((*it).name).c_str());
+
+			pLayout->Add(pEle);
+		}
+
+		CVerticalLayoutUI* pOutLayout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("chufang_setting_fenlei_xuanze")));
+		pOutLayout->SetFixedHeight(foodtypes.size() * 30 + 30);
     }
     }
 
 
     void Notify(TNotifyUI& msg)
     void Notify(TNotifyUI& msg)
@@ -126,11 +190,11 @@ public:
             else if(senderName == _T("chufang_setting_save"))
             else if(senderName == _T("chufang_setting_save"))
             {
             {
                 //开始保存厨房打印机的数据
                 //开始保存厨房打印机的数据
-                CEditUI* pName = static_cast<CEditUI*>(m_pm.FindControl(_T("chufang_setting_name")));
-                wstring wsName = pName->GetText();
+				CEditUI* pName = static_cast<CEditUI*>(m_pm.FindControl(_T("chufang_setting_name")));
+				wstring wsName = pName->GetText();
 
 
-                CEditUI* pIP = static_cast<CEditUI*>(m_pm.FindControl(_T("chufang_setting_ip")));
-                wstring wsIP = pIP->GetText();
+				CEditUI* pIP = static_cast<CEditUI*>(m_pm.FindControl(_T("chufang_setting_ip")));
+				wstring wsIP = pIP->GetText();
 
 
 				//判断IP的格式是否合法
 				//判断IP的格式是否合法
 				if (CLewaimaiString::isIPAddressValid(CLewaimaiString::UnicodeToUTF8(wsIP).c_str()) == false)
 				if (CLewaimaiString::isIPAddressValid(CLewaimaiString::UnicodeToUTF8(wsIP).c_str()) == false)
@@ -142,29 +206,60 @@ public:
 					return;
 					return;
 				}
 				}
 
 
-                CComboUI* com = static_cast<CComboUI*>(m_pm.FindControl(_T("chufang_setting_guige")));
-                wstring wsGuige;
-                if(com->GetCurSel() == 0)
-                {
-                    wsGuige = L"58";
-                }
-                else
-                {
-                    wsGuige = L"80";
-                }
-
-                CCheckBoxUI* pFendan = static_cast<CCheckBoxUI*>(m_pm.FindControl(_T("chufang_setting_fendan")));
-                wstring wsFendan;
-                if(pFendan->IsSelected())
-                {
-                    wsFendan = L"1";
-                }
-                else
-                {
-                    wsFendan = L"0";
-                }
-
-                //保存数据到数据库
+				CComboUI* com = static_cast<CComboUI*>(m_pm.FindControl(_T("chufang_setting_guige")));
+				wstring wsGuige;
+				if (com->GetCurSel() == 0)
+				{
+					wsGuige = L"58";
+				}
+				else
+				{
+					wsGuige = L"80";
+				}
+
+				CCheckBoxUI* pFendan = static_cast<CCheckBoxUI*>(m_pm.FindControl(_T("chufang_setting_fendan")));
+				wstring wsFendan;
+				if (pFendan->IsSelected())
+				{
+					wsFendan = L"1";
+				}
+				else
+				{
+					wsFendan = L"0";
+				}
+
+				CCheckBoxUI* pFenlei = static_cast<CCheckBoxUI*>(m_pm.FindControl(_T("chufang_setting_fenlei")));
+				wstring wsFenlei;
+				if (pFenlei->IsSelected())
+				{
+					wsFenlei = L"1";
+				}
+				else
+				{
+					wsFenlei = L"0";
+				}
+
+				std::string fenlei_ids = "";
+
+				CVerticalLayoutUI* pLayout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("chufang_setting_fenlei_xuanze_area")));
+				CDuiPtrArray* pArray = m_pm.FindSubControlsByClass(pLayout, _T("CheckBox"));
+				int size = pArray->GetSize();
+				for (int i = 0; i < size; i++)
+				{
+					CCheckBoxUI* pBox = static_cast<CCheckBoxUI*>(pArray->GetAt(i));
+
+					if (pBox->IsSelected())
+					{
+						std::wstring ws_type_id = pBox->GetCustomAttribute(_T("type_id"));
+						std::string type_id = CLewaimaiString::UnicodeToUTF8(ws_type_id);
+
+						fenlei_ids += type_id + ",";
+					}
+				}
+
+				fenlei_ids = fenlei_ids.substr(0, fenlei_ids.size() - 1);
+
+				//保存数据到数据库
 
 
 				std::string date = to_string(time(NULL));
 				std::string date = to_string(time(NULL));
 
 
@@ -172,18 +267,19 @@ public:
 				std::string ip = CLewaimaiString::UnicodeToUTF8(wsIP);
 				std::string ip = CLewaimaiString::UnicodeToUTF8(wsIP);
 				std::string guige = CLewaimaiString::UnicodeToUTF8(wsGuige);
 				std::string guige = CLewaimaiString::UnicodeToUTF8(wsGuige);
 				std::string fendan = CLewaimaiString::UnicodeToUTF8(wsFendan);
 				std::string fendan = CLewaimaiString::UnicodeToUTF8(wsFendan);
+				std::string fenlei = CLewaimaiString::UnicodeToUTF8(wsFenlei);
 
 
 				if (m_mode == 1)
 				if (m_mode == 1)
 				{
 				{
-					CSetting::AddChufangPrinter(date, name, ip, guige, fendan, true);
+					CSetting::AddChufangPrinter(date, name, ip, guige, fendan, fenlei, fenlei_ids, true);
 				}
 				}
 				else
 				else
 				{
 				{
-					CSetting::UpdateChufangPrinter(m_printer_date, name, ip, guige, fendan, true);
+					CSetting::UpdateChufangPrinter(m_printer_date, name, ip, guige, fendan, fenlei, fenlei_ids, true);
 				}
 				}
 
 
-                Close(IDOK);
-                return;
+				Close(IDOK);
+				return;
             }
             }
         }
         }
     }
     }

+ 104 - 0
lewaimai_pos_windows/wnd/CMainWnd.cpp

@@ -665,6 +665,17 @@ void CMainWnd::HandleClickMsg(TNotifyUI& msg)
                     pFendan->SetText(L"否");
                     pFendan->SetText(L"否");
                 }
                 }
 
 
+				CLabelUI* pFenlei = static_cast<CLabelUI*>(pEle->FindSubControl(_T("setting_chufang_printer_item_fenlei")));
+
+				if (newPrinter.fenlei == "1")
+				{
+					pFenlei->SetText(L"是");
+				}
+				else
+				{
+					pFenlei->SetText(L"否");
+				}
+
                 pEle->AddCustomAttribute(L"date", CLewaimaiString::UTF8ToUnicode(newPrinter.date).c_str());
                 pEle->AddCustomAttribute(L"date", CLewaimaiString::UTF8ToUnicode(newPrinter.date).c_str());
                 pPrinterList->Add(pEle);
                 pPrinterList->Add(pEle);
             }
             }
@@ -1783,6 +1794,52 @@ void CMainWnd::InitSettingStatus()
     //这里开始,初始化厨房打印机的设置
     //这里开始,初始化厨房打印机的设置
     CListUI* pPrinterList = static_cast<CListUI*>(m_pm.FindControl(_T("setting_chufang_printer_list")));
     CListUI* pPrinterList = static_cast<CListUI*>(m_pm.FindControl(_T("setting_chufang_printer_list")));
 
 
+	//获取当前店铺的商品分类信息,用于设置厨房打印机的分类打印
+	std::map<string, string> params;
+	std::string response;
+
+	std::string url = "/goodstype/getlist";
+
+	CLewaimaiHttpClient::Request(url.c_str(), params, response);
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		LOG_INFO("parse response error!");
+		return;
+	}
+
+	if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
+	{
+		LOG_INFO("json error!");
+		return;
+	}
+
+	rapidjson::Value& v_errcode = document["errcode"];
+	int errcode = v_errcode.GetInt();
+	if (errcode != 0)
+	{
+		LOG_INFO("response failed! message:" << document["errmsg"].GetString());
+		return;
+	}
+
+	//获得数据成功,把分类信息保存起来
+	rapidjson::Value& data = document["data"];
+
+	rapidjson::Value& v_rows = data["goods_types"];
+
+	for (rapidjson::SizeType i = 0; i < v_rows.Size(); ++i)
+	{
+		rapidjson::Value& v_row_i = v_rows[i];
+
+		std::string type_id = v_row_i["type_id"].GetString();
+		std::string name = v_row_i["name"].GetString();
+
+		CSetting::AddFoodtype(name, type_id);
+	}
+
     //获取厨房打印机的集合
     //获取厨房打印机的集合
     std::vector<ChufangPrinter> printers = CSetting::getChufangPrints();
     std::vector<ChufangPrinter> printers = CSetting::getChufangPrints();
 
 
@@ -1820,6 +1877,53 @@ void CMainWnd::InitSettingStatus()
             pFendan->SetText(L"否");
             pFendan->SetText(L"否");
         }
         }
 
 
+		CLabelUI* pFenlei = static_cast<CLabelUI*>(pEle->FindSubControl(_T("setting_chufang_printer_item_fenlei")));
+
+		if (newPrinter.fenlei == "1")
+		{
+			pFenlei->SetText(L"是");
+		}
+		else
+		{
+			pFenlei->SetText(L"否");
+		}
+
+		std::string foodtypeNames = "";
+
+		std::string foodtype_ids = newPrinter.fenlei_ids;
+
+		//这个是删除掉不存在的type_id之后的
+		std::string new_foodtype_ids = "";
+
+		std::vector<string> ids = CLewaimaiString::Split(foodtype_ids, ",");
+		for (std::vector<string>::iterator it = ids.begin(); it != ids.end(); it++)
+		{
+			std::string name = CSetting::getFoodtypeName((*it));
+			if (name == "zhipuzi_not_found_xxx")
+			{
+				//这种情况是以前保存的分类后来被删掉了
+			}
+			else
+			{
+				foodtypeNames += name + "  ";
+
+				new_foodtype_ids += (*it) + ",";
+			}
+		}
+
+		//删掉不存在的type_id,更新内存和数据库
+		new_foodtype_ids = new_foodtype_ids.substr(0, new_foodtype_ids.length() - 1);
+		if (new_foodtype_ids.compare(foodtype_ids) != 0)
+		{
+			CSetting::UpdateChufangPrinter(newPrinter.date, newPrinter.name, newPrinter.ip, newPrinter.guige, newPrinter.fendan, newPrinter.fenlei, new_foodtype_ids, true);
+		}
+
+		foodtypeNames = foodtypeNames.substr(0, foodtypeNames.size() - 1);
+		std::wstring ws_foodtypeNames = CLewaimaiString::UTF8ToUnicode(foodtypeNames);
+
+		CLabelUI* pFenleiIds = static_cast<CLabelUI*>(pEle->FindSubControl(_T("setting_chufang_printer_item_fenlei_ids")));
+		pFenleiIds->SetText(ws_foodtypeNames.c_str());
+
         //设置标记属性,用于修改时候匹配
         //设置标记属性,用于修改时候匹配
         pEle->AddCustomAttribute(L"date", CLewaimaiString::UTF8ToUnicode(newPrinter.date).c_str());
         pEle->AddCustomAttribute(L"date", CLewaimaiString::UTF8ToUnicode(newPrinter.date).c_str());
         pPrinterList->Add(pEle);
         pPrinterList->Add(pEle);