Преглед изворни кода

厨房分类打印,差不多改完了

张洋 пре 5 година
родитељ
комит
60fe49f0a9

+ 1 - 1
lewaimai_pos_windows/order/CWaimaiOrder.cpp

@@ -124,7 +124,7 @@ bool CWaimaiOrder::InitData(std::string order_id, std::string order_no)
 				newItem.m_food_name = v_row_i["food_name"].GetString();
 				newItem.m_item_price = v_row_i["item_price"].GetString();
 				newItem.m_quantity = v_row_i["quantity"].GetString();
-				//newItem.m_type_id = v_row_i["type_id"].GetString();
+				newItem.m_type_id = v_row_i["type_id"].GetString();
 				newItem.m_foodpackage_id = v_row_i["foodpackage_id"].GetString();
 				newItem.m_is_foodpackage = v_row_i["is_foodpackage"].GetString();
 

+ 1 - 1
lewaimai_pos_windows/order/CWaimaiOrder.h

@@ -9,7 +9,7 @@ public:
 	std::string m_food_name;
 	std::string m_item_price;
 	std::string m_quantity;
-	//std::string m_type_id;
+	std::string m_type_id;
 	std::string m_foodpackage_id;
 	std::string m_is_foodpackage;
 };

+ 28 - 1
lewaimai_pos_windows/tool/CPosPrinter.cpp

@@ -1074,7 +1074,34 @@ void CPosPrinter::PrintWaimaiOrderChufang(CWaimaiOrder& order)
 
         std::string guige = printer.guige;
         std::string fendan = printer.fendan;
-        std::vector<CWaimaiOrderItem> cur_printer_use = order.m_order_items;
+		std::string fenlei = printer.fenlei;
+		std::string fenlei_ids = printer.fenlei_ids;
+
+		std::vector<CWaimaiOrderItem> cur_printer_use;
+		if (fenlei == "0")
+		{
+			cur_printer_use = order.m_order_items;
+		}
+		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<CWaimaiOrderItem>::iterator it = order.m_order_items.begin(); it != order.m_order_items.end(); it++)
+			{
+				if (ids_map.find((*it).m_type_id) != ids_map.end())
+				{
+					//如果当前商品的分类,在厨房打印机设置的分类里面,才加入
+					cur_printer_use.push_back(*it);
+				}
+			}
+		}
 
         if(fendan == "0")
         {

+ 6 - 0
lewaimai_pos_windows/tool/CSetting.h

@@ -81,6 +81,12 @@ public:
 		return m_chufang_printers;
 	}
 
+	static void ClearFoodtype()
+	{
+		m_foodtypes.clear();
+		m_foodtype_id_name.clear();
+	}
+
 	static void AddFoodtype(std::string name, std::string type_id)
 	{
 		FoodType newFoodType;

+ 24 - 22
lewaimai_pos_windows/tool/CSqlite3.cpp

@@ -469,33 +469,35 @@ bool CSqlite3::SaveParams(std::map<std::string, std::string>& params)
 
 bool CSqlite3::SaveChufangPrinter(std::vector<ChufangPrinter>& printers)
 {
-    int result = sqlite3_exec(m_db, "BEGIN;", 0, 0, 0);
-
-    std::string sql = "delete from pos_chufang_printer;";
-    result = sqlite3_exec(m_db, sql.c_str(), 0, 0, 0);
+	int result = sqlite3_exec(m_db, "BEGIN;", 0, 0, 0);
 
-    for(std::vector<ChufangPrinter>::iterator it = printers.begin(); it != printers.end(); it++)
-    {
-        std::string date = (*it).date;
-        std::string name = (*it).name;
-        std::string ip = (*it).ip;
-        std::string guige = (*it).guige;
-        std::string fendan = (*it).fendan;
+	std::string sql = "delete from pos_chufang_printer;";
+	result = sqlite3_exec(m_db, sql.c_str(), 0, 0, 0);
 
-        sql = "INSERT INTO pos_chufang_printer (date, name, ip, guige, fendan) VALUES ('" + date + "' ,'" + name + "','" + ip + "','" + guige + "','" + fendan + "')";
-        result = sqlite3_exec(m_db, sql.c_str(), 0, 0, 0);
-    }
+	for (std::vector<ChufangPrinter>::iterator it = printers.begin(); it != printers.end(); it++)
+	{
+		std::string date = (*it).date;
+		std::string name = (*it).name;
+		std::string ip = (*it).ip;
+		std::string guige = (*it).guige;
+		std::string fendan = (*it).fendan;
+		std::string fenlei = (*it).fenlei;
+		std::string fenlei_ids = (*it).fenlei_ids;
+
+		sql = "INSERT INTO pos_chufang_printer (date, name, ip, guige, fendan, fenlei, fenlei_ids) VALUES ('" + date + "' ,'" + name + "','" + ip + "','" + guige + "','" + fendan + "','" + fenlei + "','" + fenlei_ids + "')";
+		result = sqlite3_exec(m_db, sql.c_str(), 0, 0, 0);
+	}
 
-    result = sqlite3_exec(m_db, "COMMIT;", 0, 0, 0);
+	result = sqlite3_exec(m_db, "COMMIT;", 0, 0, 0);
 
-    if(result == SQLITE_OK)
-    {
-        LOG_INFO("save chufang printer success");
-        return true;
-    }
+	if (result == SQLITE_OK)
+	{
+		LOG_INFO("save params success");
+		return true;
+	}
 
-    LOG_INFO("save chufang printer fail:"<< sqlite3_errmsg(m_db));
-    return false;
+	LOG_INFO("save params fail");
+	return false;
 }
 
 bool CSqlite3::SaveUsers(std::map<string, string> users)

+ 177 - 103
lewaimai_pos_windows/wnd/CMainWnd.cpp

@@ -635,14 +635,19 @@ void CMainWnd::HandleClickMsg(TNotifyUI& msg)
             {
                 //这个时候是点击保存返回了,厨房打印机的数据已经建立好了,这个时候刷新表格的显示
                 CListUI* pPrinterList = static_cast<CListUI*>(m_pm.FindControl(_T("setting_chufang_printer_list")));
+
                 //把最后一个厨房打印机取出来
+
                 ChufangPrinter newPrinter = CSetting::getLastChufangPrinter();
                 CDialogBuilder builder;
                 CListContainerElementUI* pEle = static_cast<CListContainerElementUI*>(builder.Create(_T("setting_chufang_printer_item.xml"), (UINT)0, NULL, &m_pm));
+
                 CLabelUI* pName = static_cast<CLabelUI*>(pEle->FindSubControl(_T("setting_chufang_printer_item_name")));
                 pName->SetText(CLewaimaiString::UTF8ToUnicode(newPrinter.name).c_str());
+
                 CLabelUI* pIP = static_cast<CLabelUI*>(pEle->FindSubControl(_T("setting_chufang_printer_item_ip")));
                 pIP->SetText(CLewaimaiString::UTF8ToUnicode(newPrinter.ip).c_str());
+
                 CLabelUI* pGuige = static_cast<CLabelUI*>(pEle->FindSubControl(_T("setting_chufang_printer_guige")));
 
                 if(newPrinter.guige == "58")
@@ -665,17 +670,41 @@ void CMainWnd::HandleClickMsg(TNotifyUI& msg)
                     pFendan->SetText(L"否");
                 }
 
-				CLabelUI* pFenlei = static_cast<CLabelUI*>(pEle->FindSubControl(_T("setting_chufang_printer_item_fenlei")));
+                CLabelUI* pFenlei = static_cast<CLabelUI*>(pEle->FindSubControl(_T("setting_chufang_printer_item_fenlei")));
 
-				if (newPrinter.fenlei == "1")
-				{
-					pFenlei->SetText(L"是");
-				}
-				else
+                if(newPrinter.fenlei == "1")
+                {
+                    pFenlei->SetText(L"是");
+                }
+                else
+                {
+                    pFenlei->SetText(L"否");
+                }
+
+				std::string foodtypeNames = "";
+
+				std::string foodtype_ids = newPrinter.fenlei_ids;
+				std::vector<string> ids = CLewaimaiString::Split(foodtype_ids, ",");
+				for (std::vector<string>::iterator it = ids.begin(); it != ids.end(); it++)
 				{
-					pFenlei->SetText(L"否");
+					std::string name = CSetting::getFoodtypeName((*it));
+					std::wstring ws_name = CLewaimaiString::UTF8ToUnicode(name);
+					if (name == "zhipuzi_not_found_xxx")
+					{
+						//这种情况是以前保存的分类后来被删掉了
+					}
+					else
+					{
+						foodtypeNames += name + "  ";
+					}
 				}
 
+				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());
                 pPrinterList->Add(pEle);
             }
@@ -767,6 +796,41 @@ void CMainWnd::HandleClickMsg(TNotifyUI& msg)
                 {
                     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;
+				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));
+					std::wstring ws_name = CLewaimaiString::UTF8ToUnicode(name);
+					if (name == "zhipuzi_not_found_xxx")
+					{
+						//这种情况是以前保存的分类后来被删掉了
+					}
+					else
+					{
+						foodtypeNames += name + "  ";
+					}
+				}
+
+				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());
             }
         }
     }
@@ -1019,7 +1083,7 @@ void CMainWnd::HandleItemSelectMsg(TNotifyUI& msg)
     else if(name == _T("setting_biaoqian_printer_usb"))
     {
         CComboUI* com = static_cast<CComboUI*>(m_pm.FindControl(_T("setting_biaoqian_printer_usb")));
-		wstring usb_device = com->GetText();;
+        wstring usb_device = com->GetText();;
 
         CSetting::SetParam("setting_biaoqian_printer_usb", CLewaimaiString::UnicodeToUTF8(usb_device));
     }
@@ -1103,7 +1167,7 @@ LRESULT CMainWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 
 LRESULT CMainWnd::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
 {
-	return false;
+    return false;
 }
 
 LRESULT CMainWnd::OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
@@ -1387,14 +1451,14 @@ LRESULT CMainWnd::OnLoginOut(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHan
 
 void CMainWnd::InitSettingStatus()
 {
-	//显示当前软件版本和登录账号信息
+    //显示当前软件版本和登录账号信息
     CLabelUI* name_version = static_cast<CLabelUI*>(m_pm.FindControl(_T("main_name_version")));
-	std::wstring wsShowName = L"乐外卖接单软件 " + CLewaimaiString::UTF8ToUnicode(CSystem::GetVersion());
+    std::wstring wsShowName = L"乐外卖接单软件 " + CLewaimaiString::UTF8ToUnicode(CSystem::GetVersion());
 
-	std::string last_login_username = CSetting::GetParam("last_login_username");
-	std::wstring wx_last_login_username = CLewaimaiString::UTF8ToUnicode(last_login_username);
+    std::string last_login_username = CSetting::GetParam("last_login_username");
+    std::wstring wx_last_login_username = CLewaimaiString::UTF8ToUnicode(last_login_username);
 
-	wsShowName += L"(登录账号:" + wx_last_login_username + L")";
+    wsShowName += L"(登录账号:" + wx_last_login_username + L")";
 
     name_version->SetText(wsShowName.c_str());
 
@@ -1747,16 +1811,16 @@ void CMainWnd::InitSettingStatus()
     }
 
     //初始化标签打印机的设置
-	box = static_cast<CCheckBoxUI*>(m_pm.FindControl(_T("setting_is_new_waimai_biaoqian_printer")));
+    box = static_cast<CCheckBoxUI*>(m_pm.FindControl(_T("setting_is_new_waimai_biaoqian_printer")));
 
-	if (CSetting::GetParam("setting_is_new_waimai_biaoqian_printer") == "1")
-	{
-		box->Selected(true, false);
-	}
-	else
-	{
-		box->Selected(false, false);
-	}
+    if(CSetting::GetParam("setting_is_new_waimai_biaoqian_printer") == "1")
+    {
+        box->Selected(true, false);
+    }
+    else
+    {
+        box->Selected(false, false);
+    }
 
     //usb下拉框默认选中
     CComboUI* com_usb = static_cast<CComboUI*>(m_pm.FindControl(_T("setting_biaoqian_printer_usb")));
@@ -1794,51 +1858,58 @@ void CMainWnd::InitSettingStatus()
     //这里开始,初始化厨房打印机的设置
     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";
+    //先清空一次分类(主要考虑退出登陆重新登录的情况)
+    CSetting::ClearFoodtype();
 
-	CLewaimaiHttpClient::Request(url.c_str(), params, response);
+    std::map<string, string> params;
+    params["shop_id"] = "424298";
 
-	rapidjson::Document document;
-	document.Parse(response.c_str());
+    std::string response;
 
-	if (document.HasParseError())
-	{
-		LOG_INFO("parse response error!");
-		return;
-	}
+    std::string url = "/goodstype/getlist";
 
-	if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
-	{
-		LOG_INFO("json error!");
-		return;
-	}
+    CLewaimaiHttpClient::Request(url.c_str(), params, response);
 
-	rapidjson::Value& v_errcode = document["errcode"];
-	int errcode = v_errcode.GetInt();
-	if (errcode != 0)
-	{
-		LOG_INFO("response failed! message:" << document["errmsg"].GetString());
-		return;
-	}
+    rapidjson::Document document;
+    document.Parse(response.c_str());
 
-	//获得数据成功,把分类信息保存起来
-	rapidjson::Value& data = document["data"];
+    if(document.HasParseError())
+    {
+        LOG_INFO("parse response error!");
+        return;
+    }
 
-	rapidjson::Value& v_rows = data["goods_types"];
+    if(!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
+    {
+        LOG_INFO("json error!");
+        return;
+    }
 
-	for (rapidjson::SizeType i = 0; i < v_rows.Size(); ++i)
-	{
-		rapidjson::Value& v_row_i = v_rows[i];
+    rapidjson::Value& v_errcode = document["errcode"];
+    int errcode = v_errcode.GetInt();
 
-		std::string type_id = v_row_i["type_id"].GetString();
-		std::string name = v_row_i["name"].GetString();
+    if(errcode != 0)
+    {
+        LOG_INFO("response failed! message:" << document["errmsg"].GetString());
+        return;
+    }
 
-		CSetting::AddFoodtype(name, type_id);
-	}
+    //获得数据成功,把分类信息保存起来
+    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();
@@ -1877,52 +1948,55 @@ void CMainWnd::InitSettingStatus()
             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());
+        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());