Browse Source

厨房打印机也调试完成了

张洋 4 years ago
parent
commit
dd71c72e2c

+ 1 - 0
zhipuzi_pos_windows/page/CDiandanPageUI.cpp

@@ -3160,6 +3160,7 @@ CDiandanOrder CDiandanPageUI::GetPrintOrderinfo(std::string take_food_code, std:
 		itemPrint.m_food_name = it->getNameWanzhengShow();
 		itemPrint.m_quantity = it->num;
 		itemPrint.m_item_price = it->getSinglePrice();
+		itemPrint.m_type_id = it->type_id;
 
 		m_cur_diandan_order.m_items_print.push_back(itemPrint);
 	}

+ 1 - 2
zhipuzi_pos_windows/page/CDiandanPageUI.h

@@ -286,5 +286,4 @@ private:
 	//ģ̬¶Ô»°¿òÓйصÄ
 	bool m_is_show_modal_wnd = false;
 	CModalWnd* m_curModalWnd;
-};
-
+};

+ 32 - 87
zhipuzi_pos_windows/page/CSettingPageUI.cpp

@@ -470,67 +470,6 @@ void CSettingPageUI::InitShow()
 	//这里开始,初始化厨房打印机的设置
 	CListUI* pPrinterList = static_cast<CListUI*>(this->FindSubControl(_T("setting_chufang_printer_list")));
 
-	//获取当前店铺的商品分类信息,用于设置厨房打印机的分类打印
-	while (1)
-	{
-		//先清空一次分类(主要考虑退出登陆重新登录的情况)
-		CSetting::ClearFoodtype();
-
-		std::string shop_id = CShopinfo::m_shopinfo.m_shop_id;
-		if (shop_id != "0")
-		{
-			std::map<string, string> params;
-			params["shop_id"] = shop_id;
-
-			std::string response;
-
-			std::string url = "/goodstype/getlist";
-
-			CZhipuziHttpClient::Request(url.c_str(), params, response);
-
-			rapidjson::Document document;
-			document.Parse(response.c_str());
-
-			if (document.HasParseError())
-			{
-				LOG_INFO("parse response error!");
-				break;
-			}
-
-			if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
-			{
-				LOG_INFO("json error!");
-				break;
-			}
-
-			rapidjson::Value& v_errcode = document["errcode"];
-			int errcode = v_errcode.GetInt();
-
-			if (errcode != 0)
-			{
-				LOG_INFO("response failed! message:" << document["errmsg"].GetString());
-				break;
-			}
-
-			//获得数据成功,把分类信息保存起来
-			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);
-			}
-		}
-
-		break;
-	}
-
 	//获取厨房打印机的集合
 	std::vector<ChufangPrinter> printers = CSetting::getChufangPrints();
 
@@ -588,20 +527,22 @@ void CSettingPageUI::InitShow()
 
 		std::vector<string> ids = CLewaimaiString::Split(foodtype_ids, ",");
 
+		CSqlite3 sqlite;
 		for (std::vector<string>::iterator it = ids.begin(); it != ids.end(); it++)
 		{
-			std::string name = CSetting::getFoodtypeName((*it));
-
-			if (name == "zhipuzi_not_found_xxx")
+			CFoodType type;
+			bool ret = sqlite.GetFoodtypeById((*it), type);
+			if (!ret)
 			{
-				//这种情况是以前保存的分类后来被删掉了
+				//分类被删掉了
+				continue;
 			}
-			else
-			{
-				foodtypeNames += name + "  ";
 
-				new_foodtype_ids += (*it) + ",";
-			}
+			std::string name = type.name;
+
+			foodtypeNames += name + CLewaimaiString::UnicodeToUTF8(L"、");
+
+			new_foodtype_ids += (*it) + ",";
 		}
 
 		//删掉不存在的type_id,更新内存和数据库
@@ -612,8 +553,8 @@ void CSettingPageUI::InitShow()
 			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);
+		ws_foodtypeNames = ws_foodtypeNames.substr(0, ws_foodtypeNames.size() - 1);
 
 		CLabelUI* pFenleiIds = static_cast<CLabelUI*>(pEle->FindSubControl(_T("setting_chufang_printer_item_fenlei_ids")));
 		pFenleiIds->SetText(ws_foodtypeNames.c_str());
@@ -978,18 +919,20 @@ void CSettingPageUI::HandleClickMsg(TNotifyUI& msg)
 
 				std::string foodtype_ids = newPrinter.fenlei_ids;
 				std::vector<string> ids = CLewaimaiString::Split(foodtype_ids, ",");
+
+				CSqlite3 sqlite;
 				for (std::vector<string>::iterator it = ids.begin(); it != ids.end(); it++)
 				{
-					std::string name = CSetting::getFoodtypeName((*it));
-					std::wstring ws_name = CLewaimaiString::UTF8ToUnicode(name);
-					if (name == "zhipuzi_not_found_xxx")
-					{
-						//这种情况是以前保存的分类后来被删掉了
-					}
-					else
+					CFoodType foodtype;
+					bool ret = sqlite.GetFoodtypeById(*it, foodtype);
+					if (!ret)
 					{
-						foodtypeNames += name + "  ";
+						continue;
 					}
+
+					std::string name = foodtype.name;
+					std::wstring ws_name = CLewaimaiString::UTF8ToUnicode(name);
+					foodtypeNames += name + "  ";
 				}
 
 				foodtypeNames = foodtypeNames.substr(0, foodtypeNames.size() - 1);
@@ -1105,18 +1048,20 @@ void CSettingPageUI::HandleClickMsg(TNotifyUI& msg)
 
 				std::string foodtype_ids = newPrinter.fenlei_ids;
 				std::vector<string> ids = CLewaimaiString::Split(foodtype_ids, ",");
+
+				CSqlite3 sqlite;
 				for (std::vector<string>::iterator it = ids.begin(); it != ids.end(); it++)
 				{
-					std::string name = CSetting::getFoodtypeName((*it));
-					std::wstring ws_name = CLewaimaiString::UTF8ToUnicode(name);
-					if (name == "zhipuzi_not_found_xxx")
-					{
-						//这种情况是以前保存的分类后来被删掉了
-					}
-					else
+					CFoodType foodtype;
+					bool ret = sqlite.GetFoodtypeById(*it, foodtype);
+					if (!ret)
 					{
-						foodtypeNames += name + "  ";
+						continue;
 					}
+
+					std::string name = foodtype.name;
+					std::wstring ws_name = CLewaimaiString::UTF8ToUnicode(name);
+					foodtypeNames += name + "  ";
 				}
 
 				foodtypeNames = foodtypeNames.substr(0, foodtypeNames.size() - 1);

+ 299 - 0
zhipuzi_pos_windows/print/CPosPrinterData.cpp

@@ -1437,6 +1437,305 @@ std::vector<ChufangPrinterContent> CPosPrinterData::PrintDiandanOrderChufang(CDi
 {
 	std::vector<ChufangPrinterContent> datas;
 
+	//读取厨房打印机信息
+	std::vector<ChufangPrinter> total_printers = CSetting::getChufangPrints();
+
+	for (std::vector<ChufangPrinter>::iterator it = total_printers.begin(); it != total_printers.end(); it++)
+	{
+		//清空每个厨房打印机的打印内容
+		m_print_content = "";
+
+		ChufangPrinter printer = *it;
+		std::string ip = printer.ip;
+
+		std::string guige = printer.guige;
+		std::string fendan = printer.fendan;
+		std::string fenlei = printer.fenlei;
+		std::string fenlei_ids = printer.fenlei_ids;
+
+		std::vector<CDiandanOrderItemPrint> cur_printer_use;
+		if (fenlei == "0")
+		{
+			cur_printer_use = order.m_items_print;
+		}
+		else
+		{
+			//如果开启了分类打印,就要比对了
+			std::map<string, bool> ids_map;
+			std::vector<string> ids = CLewaimaiString::Split(fenlei_ids, ",");
+
+			for (std::vector<string>::iterator it = ids.begin(); it != ids.end(); it++)
+			{
+				ids_map[(*it)] = true;
+			}
+
+			for (std::vector<CDiandanOrderItemPrint>::iterator it = order.m_items_print.begin(); it != order.m_items_print.end(); it++)
+			{
+				if (ids_map.find((*it).m_type_id) != ids_map.end())
+				{
+					//如果当前商品的分类,在厨房打印机设置的分类里面,才加入
+					cur_printer_use.push_back(*it);
+				}
+			}
+		}
+
+		if (cur_printer_use.size() == 0)
+		{
+			//如果这个厨房打印机没有商品可以打印(开启了商品分类打印可能出现),就直接跳过
+			continue;
+		}
+
+		if (fendan == "0")
+		{
+			POS_Reset();
+			POS_TextOut("派工单", true, true, 1);
+			POS_FeedLine();
+
+			POS_FeedLine();
+
+			string order_type = "订单号:" + order.show_trade_no + "  ";
+
+			POS_TextOut(order_type, false, true, 1);
+			POS_FeedLine();
+
+			POS_FeedLine();
+
+			//预设选项
+			/*
+			if (order.m_order_field.size() > 1)
+			{
+				for (std::vector<CWaimaiOrderField>::iterator it = order.m_order_field.begin(); it != order.m_order_field.end() - 1; it++)
+				{
+					string order_field = CLewaimaiString::UTF8ToANSI((*it).name) + ":" + CLewaimaiString::UTF8ToANSI((*it).value);
+					POS_TextOut(order_field, false, true, 0);
+					POS_FeedLine();
+				}
+			}
+			}*/
+
+			//准备开始打印商品详情
+			string lines;
+
+			if (guige == "58")
+			{
+				lines = "--------------------------------";
+			}
+			else
+			{
+				lines = "------------------------------------------------";
+			}
+
+			POS_TextOut(lines);
+			POS_FeedLine();
+
+			//商品标题
+			if (guige == "58")
+			{
+				POS_TextOut("商品              单价 数量 金额", false, true);
+			}
+			else
+			{
+				POS_TextOut("商品                            单价  数量  金额", false, true);
+			}
+
+			POS_FeedLine();
+
+			//商品内容
+			for (std::vector<CDiandanOrderItemPrint>::iterator it = cur_printer_use.begin(); it != cur_printer_use.end(); it++)
+			{
+				std::string food_name = (*it).m_food_name;
+				std::string food_price = (*it).m_item_price;
+				std::string quantity = (*it).m_quantity;
+				//计算总价
+				double item_price = atof(food_price.c_str()) * atof(quantity.c_str());
+				std::string food_total_price = CLewaimaiString::DoubleToString(item_price, 2);
+				food_name = CLewaimaiString::UTF8ToANSI(food_name);
+				//先输出商品名字
+				std::vector<string> m_names;
+
+				if (guige == "58")
+				{
+					m_names = HandleFoodname(food_name, 1);
+				}
+				else
+				{
+					m_names = HandleFoodname(food_name, 2);
+				}
+
+				std::string firstLine = m_names[0];
+				int nGuige;
+
+				if (guige == "58")
+				{
+					nGuige = 1;
+				}
+				else
+				{
+					nGuige = 2;
+				}
+
+				std::string priceShow = HandleFoodItemPrice(food_price, nGuige);
+				std::string quantityShow = HandleFoodQuantity(quantity, nGuige);
+				std::string priceTotalShow = HandleFoodTotalPrice(food_total_price, nGuige);
+				std::string firstLineShow = firstLine + priceShow + quantityShow + priceTotalShow;
+				POS_TextOut(firstLineShow, false, true, 0);
+				POS_FeedLine();
+
+				for (std::vector<string>::iterator it = m_names.begin() + 1; it != m_names.end(); it++)
+				{
+					POS_TextOut((*it), false, true, 0);
+					POS_FeedLine();
+				}
+			}
+
+			//判断是否有备注
+			if (order.m_memo.length() > 0)
+			{
+				POS_FeedLine();
+				string address = "整单备注:" + CLewaimaiString::UTF8ToANSI(order.m_memo);
+				POS_TextOut(address, false, true, 0);
+				POS_FeedLine();
+			}
+
+			//结束商品详情打印
+			POS_TextOut(lines);
+			POS_FeedLine();
+
+			POS_FeedLine();
+			POS_FeedLine();
+			POS_FeedLine();
+			POS_FeedLine();
+			POS_FeedLine();
+
+			POS_CutPaper();
+
+			//还原打印机初始设置,有些傻逼收银设备居然不是自动调用,比如哗啦啦
+			POS_Reset();
+		}
+		else
+		{
+			POS_Reset();
+
+			//分单模式下,每个商品打印一张单
+			for (std::vector<CDiandanOrderItemPrint>::iterator it = cur_printer_use.begin(); it != cur_printer_use.end(); it++)
+			{
+				POS_TextOut("派工单", true, true, 1);
+				POS_FeedLine();
+
+				POS_FeedLine();
+
+				string order_type = "订单号:" + order.show_trade_no + "  ";
+
+				POS_TextOut(order_type, false, true, 1);
+				POS_FeedLine();
+
+				POS_FeedLine();
+
+				//预设选项
+				/*
+				if (order.m_order_field.size() > 1)
+				{
+					for (std::vector<CWaimaiOrderField>::iterator it = order.m_order_field.begin(); it != order.m_order_field.end() - 1; it++)
+					{
+						string order_field = CLewaimaiString::UTF8ToANSI((*it).name) + ":" + CLewaimaiString::UTF8ToANSI((*it).value);
+						POS_TextOut(order_field, false, true, 0);
+						POS_FeedLine();
+					}
+				}
+				}*/
+
+				//准备开始打印商品详情
+				string lines;
+
+				if (guige == "58")
+				{
+					lines = "--------------------------------";
+				}
+				else
+				{
+					lines = "------------------------------------------------";
+				}
+
+				POS_TextOut(lines);
+				POS_FeedLine();
+
+				//商品标题
+				if (guige == "58")
+				{
+					POS_TextOut("商品              单价 数量 金额", false, true);
+				}
+				else
+				{
+					POS_TextOut("商品                            单价  数量  金额", false, true);
+				}
+
+				POS_FeedLine();
+				std::string food_name = (*it).m_food_name;
+				std::string food_price = (*it).m_item_price;
+				std::string quantity = (*it).m_quantity;
+				//计算总价
+				double item_price = atof(food_price.c_str()) * atof(quantity.c_str());
+				std::string food_total_price = CLewaimaiString::DoubleToString(item_price, 2);
+				food_name = CLewaimaiString::UTF8ToANSI(food_name);
+				//先输出商品名字
+				std::vector<string> m_names;
+
+				if (guige == "58")
+				{
+					m_names = HandleFoodname(food_name, 1);
+				}
+				else
+				{
+					m_names = HandleFoodname(food_name, 2);
+				}
+
+				std::string firstLine = m_names[0];
+				std::string priceShow = HandleFoodItemPrice(food_price, 2);
+				std::string quantityShow = HandleFoodQuantity(quantity, 2);
+				std::string priceTotalShow = HandleFoodTotalPrice(food_total_price, 2);
+				std::string firstLineShow = firstLine + priceShow + quantityShow + priceTotalShow;
+				POS_TextOut(firstLineShow, false, true, 0);
+				POS_FeedLine();
+
+				for (std::vector<string>::iterator it = m_names.begin() + 1; it != m_names.end(); it++)
+				{
+					POS_TextOut((*it), false, true, 0);
+					POS_FeedLine();
+				}
+
+				//判断是否有备注
+				if (order.m_memo.length() > 0)
+				{
+					POS_FeedLine();
+					string address = "顾客备注:" + CLewaimaiString::UTF8ToANSI(order.m_memo);
+					POS_TextOut(address, false, true, 0);
+					POS_FeedLine();
+				}
+
+				//结束商品详情打印
+				POS_TextOut(lines);
+				POS_FeedLine();
+
+				POS_FeedLine();
+				POS_FeedLine();
+				POS_FeedLine();
+				POS_FeedLine();
+				POS_FeedLine();
+
+				POS_CutPaper();
+			}
+
+			//还原打印机初始设置,有些傻逼收银设备居然不是自动调用,比如哗啦啦
+			POS_Reset();
+		}
+
+		ChufangPrinterContent newData;
+		newData.ip = ip;
+		newData.data = m_print_content;
+
+		datas.push_back(newData);
+	}
+
 	return datas;
 }
 

+ 100 - 141
zhipuzi_pos_windows/tool/CSetting.cpp

@@ -3,117 +3,15 @@
 
 #include "CSqlite3.h"
 
-
-
 CSetting::CSetting()
 {
 	this->Init();
 }
 
-
 CSetting::~CSetting()
 {
 }
 
-void CSetting::SetParam(std::string name, std::string value, bool isSave)
-{
-	m_setting.m_mutex.lock();
-
-	m_setting.m_paramsMap[name] = value;
-
-	m_setting.m_mutex.unlock();
-
-	if (isSave)
-	{
-		SaveParams();
-	}
-}
-
-std::string CSetting::GetParam(std::string name)
-{
-	m_setting.m_mutex.lock();
-
-	std::string value = m_setting.m_paramsMap[name];
-
-	m_setting.m_mutex.unlock();
-
-	return value;
-}
-
-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;
-
-	newPrinter.date = date;
-	newPrinter.name = name;
-	newPrinter.ip = ip;
-	newPrinter.guige = guige;
-	newPrinter.fendan = fendan;
-	newPrinter.fenlei = fenlei;
-	newPrinter.fenlei_ids = fenlei_ids;
-
-	m_setting.m_chufang_printers.push_back(newPrinter);
-
-	if (isSave)
-	{
-		SaveChufangPrinter();
-	}
-}
-
-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_setting.m_chufang_printers.begin(); it != m_setting.m_chufang_printers.end(); it++)
-	{
-		if ((*it).date == date)
-		{
-			(*it).name = name;
-			(*it).ip = ip;
-			(*it).guige = guige;
-			(*it).fendan = fendan;
-			(*it).fenlei = fenlei;
-			(*it).fenlei_ids = fenlei_ids;
-
-			break;
-		}
-	}
-
-	if (isSave)
-	{
-		SaveChufangPrinter();
-	}
-}
-
-/*
- *删除厨房打印机,默认会同步到数据库
- **/
-void CSetting::DelChufangPrinter(std::string date)
-{
-	for (std::vector<ChufangPrinter>::iterator it = m_setting.m_chufang_printers.begin(); it != m_setting.m_chufang_printers.end(); it++)
-	{
-		if ((*it).date == date)
-		{
-			m_setting.m_chufang_printers.erase(it);
-
-			break;
-		}
-	}
-
-	SaveChufangPrinter();
-}
-
-ChufangPrinter CSetting::GetChufangPrinter(std::string date)
-{
-	for (std::vector<ChufangPrinter>::iterator it = m_setting.m_chufang_printers.begin(); it != m_setting.m_chufang_printers.end(); it++)
-	{
-		if ((*it).date == date)
-		{
-			return (*it);
-		}
-	}
-
-	return ChufangPrinter();
-}
-
 void CSetting::Init()
 {
 	//先读取数据库的数据
@@ -372,52 +270,103 @@ void CSetting::Init()
 	CSetting::SaveParams();
 }
 
-void CSetting::SaveParams()
+void CSetting::SetParam(std::string name, std::string value, bool isSave)
 {
-	CSqlite3 sqllite;
-	sqllite.SaveParams(m_setting.m_paramsMap);
-}
+	m_setting.m_mutex.lock();
 
-void CSetting::SaveChufangPrinter()
-{
-	CSqlite3 sqllite;
-	sqllite.SaveChufangPrinter(m_setting.m_chufang_printers);
+	m_setting.m_paramsMap[name] = value;
+
+	m_setting.m_mutex.unlock();
+
+	if (isSave)
+	{
+		SaveParams();
+	}
 }
 
-void CSetting::SaveUsers()
+std::string CSetting::GetParam(std::string name)
 {
-	CSqlite3 sqllite;
-	sqllite.SaveUsers(m_setting.m_users);
+	m_setting.m_mutex.lock();
+
+	std::string value = m_setting.m_paramsMap[name];
+
+	m_setting.m_mutex.unlock();
+
+	return value;
 }
 
-void CSetting::SetUser(std::string name, std::string password, 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)
 {
-	m_setting.m_users[name] = password;
+	ChufangPrinter newPrinter;
+
+	newPrinter.date = date;
+	newPrinter.name = name;
+	newPrinter.ip = ip;
+	newPrinter.guige = guige;
+	newPrinter.fendan = fendan;
+	newPrinter.fenlei = fenlei;
+	newPrinter.fenlei_ids = fenlei_ids;
+
+	m_setting.m_chufang_printers.push_back(newPrinter);
 
 	if (isSave)
 	{
-		SaveUsers();
+		SaveChufangPrinter();
 	}
 }
 
-std::string CSetting::GetUser(std::string name)
+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)
 {
-	if (m_setting.m_users.find(name) == m_setting.m_users.end())
+	for (std::vector<ChufangPrinter>::iterator it = m_setting.m_chufang_printers.begin(); it != m_setting.m_chufang_printers.end(); it++)
 	{
-		return "";
+		if ((*it).date == date)
+		{
+			(*it).name = name;
+			(*it).ip = ip;
+			(*it).guige = guige;
+			(*it).fendan = fendan;
+			(*it).fenlei = fenlei;
+			(*it).fenlei_ids = fenlei_ids;
+
+			break;
+		}
 	}
 
-	return m_setting.m_users[name];
+	if (isSave)
+	{
+		SaveChufangPrinter();
+	}
 }
 
-std::map<string, string> CSetting::getUsers()
+/*
+ *删除厨房打印机,默认会同步到数据库
+ **/
+void CSetting::DelChufangPrinter(std::string date)
 {
-	return m_setting.m_users;
+	for (std::vector<ChufangPrinter>::iterator it = m_setting.m_chufang_printers.begin(); it != m_setting.m_chufang_printers.end(); it++)
+	{
+		if ((*it).date == date)
+		{
+			m_setting.m_chufang_printers.erase(it);
+
+			break;
+		}
+	}
+
+	SaveChufangPrinter();
 }
 
-std::string CSetting::getValue(std::string name)
+ChufangPrinter CSetting::GetChufangPrinter(std::string date)
 {
-	return m_setting.m_paramsMap[name];
+	for (std::vector<ChufangPrinter>::iterator it = m_setting.m_chufang_printers.begin(); it != m_setting.m_chufang_printers.end(); it++)
+	{
+		if ((*it).date == date)
+		{
+			return (*it);
+		}
+	}
+
+	return ChufangPrinter();
 }
 
 ChufangPrinter CSetting::getLastChufangPrinter()
@@ -430,37 +379,47 @@ std::vector<ChufangPrinter>& CSetting::getChufangPrints()
 	return m_setting.m_chufang_printers;
 }
 
-void CSetting::ClearFoodtype()
+void CSetting::SaveParams()
 {
-	m_setting.m_foodtypes.clear();
-	m_setting.m_foodtype_id_name.clear();
+	CSqlite3 sqllite;
+	sqllite.SaveParams(m_setting.m_paramsMap);
 }
 
-void CSetting::AddFoodtype(std::string name, std::string type_id)
+void CSetting::SaveChufangPrinter()
 {
-	FoodType newFoodType;
-	newFoodType.name = name;
-	newFoodType.type_id = type_id;
-
-	m_setting.m_foodtypes.push_back(newFoodType);
+	CSqlite3 sqllite;
+	sqllite.SaveChufangPrinter(m_setting.m_chufang_printers);
+}
 
-	m_setting.m_foodtype_id_name[type_id] = name;
+void CSetting::SaveUsers()
+{
+	CSqlite3 sqllite;
+	sqllite.SaveUsers(m_setting.m_users);
 }
 
-std::vector<FoodType>& CSetting::GetFoodtype()
+void CSetting::SetUser(std::string name, std::string password, bool isSave)
 {
-	return m_setting.m_foodtypes;
+	m_setting.m_users[name] = password;
+
+	if (isSave)
+	{
+		SaveUsers();
+	}
 }
 
-std::string CSetting::getFoodtypeName(std::string type_id)
+std::string CSetting::GetUser(std::string name)
 {
-	if (m_setting.m_foodtype_id_name.find(type_id) != m_setting.m_foodtype_id_name.end())
+	if (m_setting.m_users.find(name) == m_setting.m_users.end())
 	{
-		return m_setting.m_foodtype_id_name[type_id];
+		return "";
 	}
 
-	//返回这个表示没找到这个分类
-	return "zhipuzi_not_found_xxx";
+	return m_setting.m_users[name];
+}
+
+std::map<string, string> CSetting::getUsers()
+{
+	return m_setting.m_users;
 }
 
 void CSetting::SetLoginInfo(std::string username, std::string password)

+ 8 - 35
zhipuzi_pos_windows/tool/CSetting.h

@@ -14,13 +14,6 @@ public:
 	std::string fenlei_ids;
 };
 
-class FoodType
-{
-public:
-	std::string name;
-	std::string type_id;
-};
-
 class CSetting
 {
 public:
@@ -38,45 +31,30 @@ public:
 	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 ChufangPrinter GetChufangPrinter(std::string date);
-
-	static void SetUser(std::string name, std::string password, bool isSave = true);
-
-	static std::string GetUser(std::string name);
-
-	static std::map<string, string> getUsers();
-
-	static std::string getValue(std::string name);
-
 	static ChufangPrinter getLastChufangPrinter();
-
 	static std::vector<ChufangPrinter>& getChufangPrints();
 
-	static void ClearFoodtype();
-
-	static void AddFoodtype(std::string name, std::string type_id);
-
-	static std::vector<FoodType>& GetFoodtype();
+	/*
+	 *把内存中的厨房打印机信息,存到数据库
+	 **/
+	static void SaveChufangPrinter();
 
-	static std::string getFoodtypeName(std::string type_id);
+	static void SetUser(std::string name, std::string password, bool isSave = true);
+	static std::string GetUser(std::string name);
+	static std::map<string, string> getUsers();	
 
 	static void SetLoginInfo(std::string username, std::string password);
 
 	static std::string getUsername();
-
 	static std::string getPassword();
 
+private:
 	/*
 	 *把内存中的参数,写到数据库中
 	 **/
 	static void SaveParams();
 
-	/*
-	 *把内存中的厨房打印机信息,存到数据库
-	 **/
-	static void SaveChufangPrinter();
-
 	static void SaveUsers();
 
 public:
@@ -88,11 +66,6 @@ private:
 
 	std::mutex m_mutex;
 
-	std::vector<FoodType> m_foodtypes;
-
-	//从商品分类的id到name的映射
-	std::map<std::string, std::string> m_foodtype_id_name;
-
 	std::map<string, string> m_users;
 
 	std::string m_username;

+ 30 - 0
zhipuzi_pos_windows/tool/CSqlite3.cpp

@@ -1032,6 +1032,36 @@ std::vector<CFoodType> CSqlite3::GetFoodtypes(bool is_shouyinji_show)
 	return data;
 }
 
+bool CSqlite3::GetFoodtypeById(std::string foodtype_id, CFoodType& newFoodType)
+{
+	bool is_found = false;
+
+	std::string sql = "SELECT * FROM pos_foodtype WHERE id = '" + foodtype_id + "'";
+
+	sqlite3_stmt * stmt = NULL;
+
+	if (sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
+	{
+		while (sqlite3_step(stmt) == SQLITE_ROW)
+		{
+			is_found = true;
+
+			newFoodType.id = (char*)sqlite3_column_text(stmt, 0);
+			newFoodType.name = (char*)sqlite3_column_text(stmt, 1);
+			newFoodType.is_shouyinji_show = (char*)sqlite3_column_text(stmt, 2);
+		}
+
+		sqlite3_finalize(stmt);
+	}
+	else
+	{
+		//异常情况
+		sqlite3_finalize(stmt);
+	}
+
+	return is_found;
+}
+
 /**
  * 如果type_id为0,表示读取所有商品,否则只读取当前type_id的商品
  */

+ 7 - 0
zhipuzi_pos_windows/tool/CSqlite3.h

@@ -37,7 +37,12 @@ public:
 	//获取套餐商品的数量
 	int GetFoodpackageNum();
 
+	//获取所有分类信息
 	std::vector<CFoodType> GetFoodtypes(bool is_shouyinji_show = true);
+
+	bool GetFoodtypeById(std::string foodtype_id, CFoodType& newFoodType);
+
+	//获取某一个商品分类下的商品
 	std::vector<CFood> GetFoodByTypeid(std::string type_id, bool is_shouyinji_show = true);
 
 	//用于商品搜索
@@ -54,6 +59,8 @@ public:
 	//更新商品ID的库存
 	void UpdateFoodStock(std::string food_id, std::string stock);
 
+	//通过商品id,
+
 private:
 	bool ExeSQl(std::string sql);
 

+ 289 - 0
zhipuzi_pos_windows/wnd/CChufangSettingWnd.cpp

@@ -98,6 +98,295 @@ LRESULT CChufangSettingWnd::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lPar
 	return false;
 }
 
+void CChufangSettingWnd::Init()
+{
+	CLabelUI* ip_error = static_cast<CLabelUI*>(m_pm.FindControl(_T("chufang_setting_ip_error")));
+	ip_error->SetVisible(false);
+
+	CLabelUI* title = static_cast<CLabelUI*>(m_pm.FindControl(_T("chufang_setting_title")));
+	if (m_mode == 1)
+	{
+		title->SetText(L"新建厨房打印机");
+	}
+	else
+	{
+		title->SetText(L"修改厨房打印机");
+	}
+
+	CEditUI* name = static_cast<CEditUI*>(m_pm.FindControl(_T("chufang_setting_name")));
+	if (m_mode == 1)
+	{
+		name->SetText(L"");
+	}
+	else
+	{
+		ChufangPrinter updatePrinter = CSetting::GetChufangPrinter(m_printer_date);
+		name->SetText(CLewaimaiString::UTF8ToUnicode(updatePrinter.name).c_str());
+	}
+
+
+	CEditUI* ip = static_cast<CEditUI*>(m_pm.FindControl(_T("chufang_setting_ip")));
+	if (m_mode == 1)
+	{
+		ip->SetText(L"");
+	}
+	else
+	{
+		ChufangPrinter updatePrinter = CSetting::GetChufangPrinter(m_printer_date);
+		ip->SetText(CLewaimaiString::UTF8ToUnicode(updatePrinter.ip).c_str());
+	}
+
+
+	CComboUI* com = static_cast<CComboUI*>(m_pm.FindControl(_T("chufang_setting_guige")));
+	if (m_mode == 1)
+	{
+		com->SelectItem(0, false, false);
+	}
+	else
+	{
+		ChufangPrinter updatePrinter = CSetting::GetChufangPrinter(m_printer_date);
+		if (updatePrinter.guige == "58")
+		{
+			com->SetInternVisible(true);
+			com->SelectItem(0, false, false);
+		}
+
+		else
+		{
+			com->SetInternVisible(true);
+			com->SelectItem(1, false, false);
+		}
+	}
 
+	CCheckBoxUI* fendan = static_cast<CCheckBoxUI*>(m_pm.FindControl(_T("chufang_setting_fendan")));
+	if (m_mode == 1)
+	{
+		fendan->Selected(false, false);
+	}
+	else
+	{
+		ChufangPrinter updatePrinter = CSetting::GetChufangPrinter(m_printer_date);
+		if (updatePrinter.fendan == "1")
+		{
+			fendan->Selected(true, false);
+		}
+		else
+		{
+			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;
+		}
+	}
+
+	CSqlite3 sqlite;
+	std::vector<CFoodType> foodtypes = sqlite.GetFoodtypes();
+	for (std::vector<CFoodType>::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).id).c_str());
 
+		if (m_mode == 2)
+		{
+			if (ids_map.find((*it).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 CChufangSettingWnd::Notify(TNotifyUI& msg)
+{
+	if (msg.sType == _T("click"))
+	{
+		DuiLib::CDuiString senderName = msg.pSender->GetName();
+
+		if (senderName == _T("chufang_setting_closebtn"))
+		{
+			Close(IDCANCEL);
+			return;
+		}
+		else if (senderName == _T("chufang_setting_save"))
+		{
+			//开始保存厨房打印机的数据
+			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();
+
+			//判断IP的格式是否合法
+			if (CLewaimaiString::isIPAddressValid(CLewaimaiString::UnicodeToUTF8(wsIP).c_str()) == false)
+			{
+				//如果IP格式不合法,就提示
+				CLabelUI* ip_error = static_cast<CLabelUI*>(m_pm.FindControl(_T("chufang_setting_ip_error")));
+				ip_error->SetVisible(true);
+
+				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";
+			}
+
+			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 name = CLewaimaiString::UnicodeToUTF8(wsName);
+			std::string ip = CLewaimaiString::UnicodeToUTF8(wsIP);
+			std::string guige = CLewaimaiString::UnicodeToUTF8(wsGuige);
+			std::string fendan = CLewaimaiString::UnicodeToUTF8(wsFendan);
+			std::string fenlei = CLewaimaiString::UnicodeToUTF8(wsFenlei);
+
+			if (m_mode == 1)
+			{
+				CSetting::AddChufangPrinter(date, name, ip, guige, fendan, fenlei, fenlei_ids, true);
+			}
+			else
+			{
+				CSetting::UpdateChufangPrinter(m_printer_date, name, ip, guige, fendan, fenlei, fenlei_ids, true);
+			}
+
+			Close(IDOK);
+			return;
+		}
+	}
+}
+
+LRESULT CChufangSettingWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
+	styleValue &= ~WS_CAPTION;
+	::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
+
+	// 把自己的窗口句柄与窗口绘制管理器挂接在一起
+	m_pm.Init(m_hWnd);
+
+	m_pm.AddPreMessageFilter(this);
+
+	CDialogBuilder builder;
+
+	CControlUI* pRoot = builder.Create(_T("chufang_printer_setting.xml"), (UINT)0, NULL, &m_pm);
+	ASSERT(pRoot && "Failed to parse XML");
+
+	// 把这些控件绘制到本窗口上
+	m_pm.AttachDialog(pRoot);
+
+	// 把自己加入到CPaintManagerUI的m_aNotifiers数组中,用于处理Notify函数
+	m_pm.AddNotifier(this);
+
+	Init();
+
+	return 0;
+}
+
+LRESULT CChufangSettingWnd::OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	if (::IsIconic(*this))
+	{
+		bHandled = FALSE;
+	}
+	return (wParam == 0) ? TRUE : FALSE;
+}
+
+LRESULT CChufangSettingWnd::OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	return 0;
+}

+ 7 - 287
zhipuzi_pos_windows/wnd/CChufangSettingWnd.h

@@ -4,6 +4,8 @@
 #include "CMainWnd.h"
 #include "CModalWnd.h"
 
+#include "../tool/CSqlite3.h"
+
 class CChufangSettingWnd : public CModalWnd
 {
 public:
@@ -34,297 +36,15 @@ public:
         delete this;
     };
 
-    void Init()
-    {
-		CLabelUI* ip_error = static_cast<CLabelUI*>(m_pm.FindControl(_T("chufang_setting_ip_error")));
-		ip_error->SetVisible(false);
-
-		CLabelUI* title = static_cast<CLabelUI*>(m_pm.FindControl(_T("chufang_setting_title")));
-		if (m_mode == 1)
-		{
-			title->SetText(L"新建厨房打印机");
-		}
-		else
-		{
-			title->SetText(L"修改厨房打印机");
-		}
-
-		CEditUI* name = static_cast<CEditUI*>(m_pm.FindControl(_T("chufang_setting_name")));
-		if (m_mode == 1)
-		{
-			name->SetText(L"");
-		}
-		else
-		{
-			ChufangPrinter updatePrinter = CSetting::GetChufangPrinter(m_printer_date);
-			name->SetText(CLewaimaiString::UTF8ToUnicode(updatePrinter.name).c_str());
-		}
-		
-
-		CEditUI* ip = static_cast<CEditUI*>(m_pm.FindControl(_T("chufang_setting_ip")));
-		if (m_mode == 1)
-		{
-			ip->SetText(L"");
-		}
-		else
-		{
-			ChufangPrinter updatePrinter = CSetting::GetChufangPrinter(m_printer_date);
-			ip->SetText(CLewaimaiString::UTF8ToUnicode(updatePrinter.ip).c_str());
-		}
-		
-
-		CComboUI* com = static_cast<CComboUI*>(m_pm.FindControl(_T("chufang_setting_guige")));
-		if (m_mode == 1)
-		{
-			com->SelectItem(0, false, false);
-		}
-		else
-		{
-			ChufangPrinter updatePrinter = CSetting::GetChufangPrinter(m_printer_date);
-			if (updatePrinter.guige == "58")
-			{
-				com->SetInternVisible(true);
-				com->SelectItem(0, false, false);
-			}
-
-			else
-			{
-				com->SetInternVisible(true);
-				com->SelectItem(1, false, false);
-			}
-		}		
-
-		CCheckBoxUI* fendan = static_cast<CCheckBoxUI*>(m_pm.FindControl(_T("chufang_setting_fendan")));
-		if (m_mode == 1)
-		{
-			fendan->Selected(false, false);
-		}
-		else
-		{
-			ChufangPrinter updatePrinter = CSetting::GetChufangPrinter(m_printer_date);
-			if (updatePrinter.fendan == "1")
-			{
-				fendan->Selected(true, false);
-			}
-			else
-			{
-				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)
-    {
-        if(msg.sType == _T("click"))
-        {
-            DuiLib::CDuiString senderName = msg.pSender->GetName();
-
-            if(senderName == _T("chufang_setting_closebtn"))
-            {
-                Close(IDCANCEL);
-                return;
-            }
-            else if(senderName == _T("chufang_setting_save"))
-            {
-                //开始保存厨房打印机的数据
-				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();
-
-				//判断IP的格式是否合法
-				if (CLewaimaiString::isIPAddressValid(CLewaimaiString::UnicodeToUTF8(wsIP).c_str()) == false)
-				{
-					//如果IP格式不合法,就提示
-					CLabelUI* ip_error = static_cast<CLabelUI*>(m_pm.FindControl(_T("chufang_setting_ip_error")));
-					ip_error->SetVisible(true);
-
-					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";
-				}
+	void Init();
 
-				CCheckBoxUI* pFenlei = static_cast<CCheckBoxUI*>(m_pm.FindControl(_T("chufang_setting_fenlei")));
-				wstring wsFenlei;
-				if (pFenlei->IsSelected())
-				{
-					wsFenlei = L"1";
-				}
-				else
-				{
-					wsFenlei = L"0";
-				}
+	void Notify(TNotifyUI& msg);
 
-				std::string fenlei_ids = "";
+	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
-				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));
+	LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
-					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 name = CLewaimaiString::UnicodeToUTF8(wsName);
-				std::string ip = CLewaimaiString::UnicodeToUTF8(wsIP);
-				std::string guige = CLewaimaiString::UnicodeToUTF8(wsGuige);
-				std::string fendan = CLewaimaiString::UnicodeToUTF8(wsFendan);
-				std::string fenlei = CLewaimaiString::UnicodeToUTF8(wsFenlei);
-
-				if (m_mode == 1)
-				{
-					CSetting::AddChufangPrinter(date, name, ip, guige, fendan, fenlei, fenlei_ids, true);
-				}
-				else
-				{
-					CSetting::UpdateChufangPrinter(m_printer_date, name, ip, guige, fendan, fenlei, fenlei_ids, true);
-				}
-
-				Close(IDOK);
-				return;
-            }
-        }
-    }
-
-    LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-    {
-        LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
-        styleValue &= ~WS_CAPTION;
-        ::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
-
-        // 把自己的窗口句柄与窗口绘制管理器挂接在一起
-        m_pm.Init(m_hWnd);
-
-        m_pm.AddPreMessageFilter(this);
-
-        CDialogBuilder builder;
-
-        CControlUI* pRoot = builder.Create(_T("chufang_printer_setting.xml"), (UINT)0, NULL, &m_pm);
-        ASSERT(pRoot && "Failed to parse XML");
-
-        // 把这些控件绘制到本窗口上
-        m_pm.AttachDialog(pRoot);
-
-        // 把自己加入到CPaintManagerUI的m_aNotifiers数组中,用于处理Notify函数
-        m_pm.AddNotifier(this);
-
-        Init();
-
-        return 0;
-    }
-
-    LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-    {
-        if(::IsIconic(*this))
-        {
-            bHandled = FALSE;
-        }
-        return (wParam == 0) ? TRUE : FALSE;
-    }
-
-    LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-    {
-        return 0;
-    }
+	LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
     LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
     {

+ 1 - 0
zhipuzi_pos_windows/zhipuzi/CDiandanOrder.h

@@ -16,6 +16,7 @@ public:
 	std::string m_food_name;
 	std::string m_quantity;
 	std::string m_item_price; //注意这个是单价,不是总价
+	std::string m_type_id;
 };
 
 /**